From 6a03b39f07df98e1970f3d1cfd892af12dc8ce69 Mon Sep 17 00:00:00 2001 From: Naruse <71993948+DevilProMT@users.noreply.github.com> Date: Sat, 14 Jun 2025 11:15:32 +0800 Subject: [PATCH] Init enter game --- .editorconfig | 125 + .gitattributes | 2 + .gitignore | 370 + Common/Common.csproj | 36 + Common/Configuration/ConfigContainer.cs | 84 + Common/Configuration/HotfixContainer.cs | 75 + Common/Data/Config/TimeStampConfig.cs | 7 + Common/Data/Excel/ActChallengeDataExcel.cs | 24 + Common/Data/Excel/ActivityTowerExcel.cs | 17 + Common/Data/Excel/AffixListExcel.cs | 20 + Common/Data/Excel/AvatarDataExcel.cs | 27 + Common/Data/Excel/AvatarSubSkillDataExcel.cs | 22 + Common/Data/Excel/AvatarTutorialExcel.cs | 17 + Common/Data/Excel/ChapterGroupConfigExcel.cs | 25 + Common/Data/Excel/CityEventPhotoExcel.cs | 21 + Common/Data/Excel/CollectionExcel.cs | 17 + Common/Data/Excel/CustomHeadDataExcel.cs | 19 + Common/Data/Excel/DressDataExcel.cs | 20 + Common/Data/Excel/ElfAstraMateDataExcel.cs | 30 + Common/Data/Excel/ElfSkillDataExcel.cs | 18 + Common/Data/Excel/EntryThemeDataExcel.cs | 18 + Common/Data/Excel/EntryThemeItemDataExcel.cs | 16 + Common/Data/Excel/FrameDataExcel.cs | 19 + Common/Data/Excel/GeneralActivityExcel.cs | 18 + .../Excel/GeneralActivityStageGroupExcel.cs | 24 + Common/Data/Excel/GodWarEventExcel.cs | 20 + Common/Data/Excel/GodWarMainAvatarExcel.cs | 17 + Common/Data/Excel/GodWarRelationDataExcel.cs | 20 + Common/Data/Excel/GodWarSupportAvatarExcel.cs | 17 + Common/Data/Excel/GodWarTaleScheduleExcel.cs | 22 + Common/Data/Excel/GodWarTalentDataExcel.cs | 19 + Common/Data/Excel/MaterialDataExcel.cs | 22 + Common/Data/Excel/MissionDataExcel.cs | 22 + Common/Data/Excel/PhonePendantDataExcel.cs | 20 + Common/Data/Excel/RandomPlotDataExcel.cs | 21 + Common/Data/Excel/RecommendPanelExcel.cs | 17 + Common/Data/Excel/StageDataMainExcel.cs | 28 + .../Excel/StepMissionCompensationExcel.cs | 21 + Common/Data/Excel/StigmataDataExcel.cs | 26 + Common/Data/Excel/ThemeDataAvatarExcel.cs | 21 + Common/Data/Excel/TutorialDataExcel.cs | 20 + Common/Data/Excel/WeaponDataExcel.cs | 25 + Common/Data/ExcelResource.cs | 18 + Common/Data/GameData.cs | 45 + Common/Data/Models/Dispatch/DispatchQuery.cs | 13 + .../Models/Dispatch/QueryDispatchModels.cs | 17 + .../Models/Dispatch/QueryGatewayModels.cs | 30 + Common/Data/Models/Sdk/ComboGranterModels.cs | 34 + .../Models/Sdk/DeviceFingerprintController.cs | 6 + Common/Data/Models/Sdk/GameWeatherModels.cs | 20 + Common/Data/Models/Sdk/MdkShieldModels.cs | 42 + Common/Data/Models/Sdk/ResponseBase.cs | 9 + Common/Data/ResourceEntity.cs | 33 + Common/Data/ResourceManager.cs | 169 + Common/Database/Account/AccountData.cs | 150 + Common/Database/Avatar/AvatarData.cs | 95 + Common/Database/BaseDatabaseDataHelper.cs | 8 + Common/Database/Client/ClientData.cs | 28 + Common/Database/CustomSerializeService.cs | 32 + Common/Database/DatabaseHelper.cs | 307 + Common/Database/Inventory/InventoryData.cs | 75 + Common/Database/Lineup/LineupData.cs | 19 + Common/Database/Player/GuideData.cs | 9 + Common/Database/Player/PlayerData.cs | 73 + Common/Enums/Item/ItemMainTypeEnum.cs | 8 + .../Enums/Language/ProgramLanguageTypeEnum.cs | 9 + Common/Enums/Player/BanTypeEnum.cs | 13 + Common/Enums/Player/FriendEnum.cs | 7 + Common/Enums/Player/OperationEnum.cs | 9 + Common/Enums/Player/PermEnum.cs | 9 + Common/Enums/Player/PlayerStatusEnum.cs | 13 + Common/Enums/Player/RegionEnum.cs | 29 + Common/Internationalization/I18nManager.cs | 102 + .../Message/LanguageCHS.cs | 527 + .../Message/LanguageCHT.cs | 530 + .../Message/LanguageEN.cs | 570 + .../PluginLanguageAttribute.cs | 9 + Common/Util/ConfigManager.cs | 99 + Common/Util/Crpyto/DispatchEncryption.cs | 35 + Common/Util/Extensions/Extensions.cs | 232 + .../Extensions/JsonStringToObjectConverter.cs | 24 + Common/Util/GameConstants.cs | 11 + Common/Util/IConsole.cs | 185 + Common/Util/Logger.cs | 109 + Common/Util/LoggingMiddleware.cs | 34 + Common/Util/Security/Crypto.cs | 29 + Config/Config.json | 64 + Config/Hotfix.json | 35 + GameServer/Command/CommandArg.cs | 79 + GameServer/Command/CommandAttribute.cs | 25 + GameServer/Command/CommandExecutor.cs | 19 + GameServer/Command/CommandInterface.cs | 3 + GameServer/Command/CommandManager.cs | 126 + GameServer/Command/CommandSender.cs | 41 + GameServer/Game/Avatar/AvatarManager.cs | 63 + GameServer/Game/BasePlayerManager.cs | 8 + GameServer/Game/Inventory/InventoryManager.cs | 86 + GameServer/Game/Player/PlayerInstance.cs | 110 + GameServer/GameServer.csproj | 22 + GameServer/Server/Connection.cs | 189 + GameServer/Server/Listener.cs | 13 + GameServer/Server/Packet/Handler.cs | 6 + GameServer/Server/Packet/HandlerManager.cs | 31 + GameServer/Server/Packet/Opcode.cs | 7 + .../HandlerArkPlusActivityGetDataReq.cs | 13 + .../HandlerBuffAssistGetActivityReq.cs | 13 + .../HandlerGeneralActivityGetMainInfoReq.cs | 14 + .../HandlerGeneralActivityGetScheduleReq.cs | 13 + .../Activity/HandlerGetActivityMainDataReq.cs | 13 + ...andlerGetActivityRewardStatisticDataReq.cs | 13 + .../HandlerGetBulletinActivityMissionReq.cs | 13 + .../Recv/Activity/HandlerGetBulletinReq.cs | 13 + .../HandlerGetChapterActivityDataReq.cs | 13 + .../HandlerGetChapterCompensationInfoReq.cs | 13 + .../HandlerGetDropLimitActivityReq.cs | 13 + .../HandlerGetExtractReforgeActivityReq.cs | 13 + .../Activity/HandlerGetFarmActivityDataReq.cs | 13 + .../Activity/HandlerGetGardenScheduleReq.cs | 13 + .../HandlerGetInviteActivityInviteeDataReq.cs | 13 + .../HandlerGetInviteActivityInviterDataReq.cs | 13 + .../Activity/HandlerGetLoginActivityReq.cs | 13 + .../Activity/HandlerGetMosaicActivityReq.cs | 13 + .../Activity/HandlerGetNewbieActivityReq.cs | 13 + .../Activity/HandlerGetNinjaActivityReq.cs | 13 + .../Recv/Activity/HandlerGetThemeWantedReq.cs | 13 + .../Adventure/HandlerGetAdventureGroupReq.cs | 13 + .../HandlerGetAdventureStorySweepInfoReq.cs | 13 + .../HandlerGetConsignedOrderDataReq.cs | 13 + .../Armada/HandlerGetArmadaActivityListReq.cs | 13 + .../Recv/Armada/HandlerGetArmadaDataReq.cs | 13 + .../HandlerGetArmadaStageScoreActivityReq.cs | 13 + .../Packet/Recv/Auth/HandlerGetAuthkeyReq.cs | 14 + .../Avatar/HandlerAddCustomAvatarTeamReq.cs | 13 + .../Avatar/HandlerAvatarSubSkillLevelUpReq.cs | 13 + .../Avatar/HandlerDelCustomAvatarTeamReq.cs | 13 + .../Recv/Avatar/HandlerDressEquipmentReq.cs | 13 + .../Recv/Avatar/HandlerGetAvatarDataReq.cs | 25 + .../HandlerGetAvatarMissionActivityReq.cs | 13 + .../Avatar/HandlerGetAvatarRollDataReq.cs | 13 + .../Avatar/HandlerGetAvatarTeamDataReq.cs | 13 + .../HandlerUpdateCustomAvatarTeamReq.cs | 13 + .../Recv/Battle/HandlerGetBuffEffectReq.cs | 14 + .../HandlerGetBattlePassMissionPanelReq.cs | 13 + ...dlerGetChallengeStepCompensationInfoReq.cs | 13 + .../Chapter/HandlerChapterArkGetDataReq.cs | 14 + .../HandlerChapterBwWorldGetDataReq.cs | 14 + .../Chapter/HandlerChapterGroupGetDataReq.cs | 13 + .../HandlerChapterKnightRichManGetDataReq.cs | 14 + ...ndlerGetEliteChapterCompensationInfoReq.cs | 13 + .../HandlerChatworldBeastGetActivityReq.cs | 13 + .../HandlerChatworldGetActivityScheduleReq.cs | 13 + .../Chat/HandlerChatworldGetPrayInfoReq.cs | 13 + .../Recv/Chat/HandlerEnterWorldChatroomReq.cs | 13 + .../Recv/Chat/HandlerGetChatgroupListReq.cs | 13 + .../Recv/Client/HandlerClientReportReq.cs | 13 + .../Recv/Client/HandlerGetClientDataReq.cs | 15 + .../Client/HandlerGetClientMailDataReq.cs | 13 + .../Recv/Client/HandlerGetClientSettingReq.cs | 14 + .../Recv/Client/HandlerKeepAliveNotify.cs | 13 + .../HandlerReportClientDataVersionReq.cs | 14 + .../Recv/Client/HandlerSetClientDataReq.cs | 27 + .../Collection/HandlerGetCollectionListReq.cs | 13 + .../Packet/Recv/DLC/HandlerGetDLCAvatarReq.cs | 13 + .../Packet/Recv/DLC/HandlerGetDLCReq.cs | 13 + .../Packet/Recv/DLC/HandlerGetDLCTowerReq.cs | 13 + .../Packet/Recv/Dorm/HandlerGetDormDataReq.cs | 13 + .../Recv/Dummy/HandlerGetPlotListReq.cs | 13 + .../Recv/Dummy/HandlerGetPrivilegeInfoReq.cs | 13 + .../Recv/Dummy/HandlerGetProductListReq.cs | 13 + .../HandlerGetProductRecommendListReq.cs | 13 + .../Recv/Dummy/HandlerGetRaffleActivityReq.cs | 13 + .../Dummy/HandlerGetRankScheduleDataReq.cs | 13 + .../Dummy/HandlerGetRecommendFriendListReq.cs | 13 + .../Recv/Dummy/HandlerGetRecommendGoodsReq.cs | 13 + .../Dummy/HandlerGetRewardLineActivityReq.cs | 13 + .../Recv/Dummy/HandlerGetRoomDataReq.cs | 13 + .../Packet/Recv/Dummy/HandlerGetRpgTaleReq.cs | 13 + .../Recv/Dummy/HandlerGetScratchTicketReq.cs | 13 + .../Dummy/HandlerGetSecurityPasswordReq.cs | 13 + .../Recv/Dummy/HandlerGetShopListReq.cs | 13 + .../Dummy/HandlerGetShoppingMallListReq.cs | 13 + .../Dummy/HandlerGetSupportActivityReq.cs | 13 + .../Recv/Dummy/HandlerGetSurveyDataReq.cs | 13 + .../Dummy/HandlerGetTowerRaidActivityReq.cs | 13 + .../Dummy/HandlerGetTradingCardActivityReq.cs | 13 + .../Recv/Dummy/HandlerGetTrialAvatarReq.cs | 13 + .../Recv/Dummy/HandlerGetVipRewardDataReq.cs | 13 + .../HandlerGetVirtualAvatarGroupDetailReq.cs | 14 + .../Packet/Recv/Elf/HandlerGetElfDataReq.cs | 13 + .../Endless/HandlerGetEndlessStatusReq.cs | 13 + .../HandlerGetGalInteractTriggerEventReq.cs | 14 + .../Recv/ExBoss/HandlerExBossStageBeginReq.cs | 13 + .../Recv/ExBoss/HandlerExBossStageEndReq.cs | 14 + .../Recv/ExBoss/HandlerGetExBossInfoReq.cs | 13 + .../Recv/ExBoss/HandlerGetExBossRankReq.cs | 13 + .../ExBoss/HandlerGetExBossScheduleReq.cs | 13 + .../HandlerGetCurrencyExchangeInfoReq.cs | 13 + .../Friend/HandlerGetAskAddFriendListReq.cs | 13 + .../Recv/Friend/HandlerGetFriendListReq.cs | 13 + .../Friend/HandlerGetFriendRemarkListReq.cs | 13 + .../Recv/Gacha/HandlerGetGachaDisplayReq.cs | 13 + .../Packet/Recv/GodWar/HandlerGetGobackReq.cs | 13 + .../Recv/GodWar/HandlerGetGodWarLobbyReq.cs | 13 + .../Packet/Recv/GodWar/HandlerGetGodWarReq.cs | 13 + .../Recv/GodWar/HandlerGetGrandKeyReq.cs | 13 + .../GodWar/HandlerRefreshGodWarTicketReq.cs | 14 + .../Recv/Goods/HandlerAddGoodfeelReq.cs | 13 + .../Recv/Guide/HandlerFinishGuideReportReq.cs | 20 + .../Guide/HandlerGetFinishGuideDataReq.cs | 13 + .../Recv/Item/HandlerGetEquipmentDataReq.cs | 13 + .../Item/HandlerGetEquipmentForgeDataReq.cs | 13 + .../HandlerGetHasGotFurnitureIdListReq.cs | 13 + .../Item/HandlerGetHasGotItemIdListReq.cs | 13 + .../HandlerGetMasterPupilApplyReq.cs | 13 + .../HandlerGetMasterPupilCardReq.cs | 13 + .../HandlerGetMasterPupilDataReq.cs | 13 + .../HandlerGetMasterPupilMainDataReq.cs | 13 + .../Recv/Mission/HandlerGetMissionDataReq.cs | 64 + .../HandlerGetMissionGroupMainInfoReq.cs | 13 + .../Mission/HandlerGetMissionThemeDataReq.cs | 13 + .../HandlerGetRecommendMissionPanelListReq.cs | 13 + .../OpenWorld/HandlerGetNewOpenworldReq.cs | 13 + .../HandlerGetOpenworldEndlessDataReq.cs | 14 + .../HandlerGetOpenworldMechaDefenseReq.cs | 13 + .../HandlerGetOpenworldQuestActivityReq.cs | 13 + .../Pjms/HandlerPjmsGetAchievementDataReq.cs | 13 + .../Pjms/HandlerPjmsGetActivityPanelReq.cs | 13 + .../Recv/Pjms/HandlerPjmsGetChapterDataReq.cs | 13 + .../Pjms/HandlerPjmsGetConditionDataReq.cs | 13 + .../Recv/Pjms/HandlerPjmsGetCurWorldReq.cs | 13 + .../Recv/Pjms/HandlerPjmsGetMainDataReq.cs | 13 + .../HandlerPjmsGetResidentStageDataReq.cs | 13 + .../Recv/Pjms/HandlerPjmsGetStoryDataReq.cs | 13 + .../HandlerGetAssistantFrozenListReq.cs | 13 + .../Recv/Player/HandlerGetBlackListReq.cs | 13 + .../Packet/Recv/Player/HandlerGetConfigReq.cs | 13 + .../Player/HandlerGetCustomHeadDataReq.cs | 13 + .../Recv/Player/HandlerGetEmojiDataReq.cs | 13 + .../Recv/Player/HandlerGetFrameDataReq.cs | 13 + .../Recv/Player/HandlerGetMainDataReq.cs | 13 + .../Recv/Player/HandlerGetMedalDataReq.cs | 13 + .../HandlerGetOfflineResourceDataReq.cs | 13 + .../Packet/Recv/Player/HandlerGetPediaReq.cs | 13 + .../Player/HandlerGetPhonePendantDataReq.cs | 13 + .../Recv/Player/HandlerGetPhotoDataReq.cs | 14 + .../Recv/Player/HandlerGetPlayerCardReq.cs | 13 + .../Recv/Player/HandlerGetPlayerTokenReq.cs | 47 + .../Player/HandlerGetRegionUidRangeReq.cs | 13 + .../Recv/Player/HandlerGetThemeDataReq.cs | 13 + .../Recv/Player/HandlerPlayerLoginReq.cs | 16 + .../Packet/Recv/Player/HandlerSyncTimeReq.cs | 14 + .../HandlerTakeGalInteractTriggerEventReq.cs | 14 + .../Product/HandlerGetCardProductInfoReq.cs | 13 + .../Stage/HandlerGetStageActDifficultyReq.cs | 13 + .../Recv/Stage/HandlerGetStageChapterReq.cs | 13 + .../Recv/Stage/HandlerGetStageDataReq.cs | 14 + .../Stage/HandlerGetStageDropDisplayReq.cs | 14 + .../HandlerGetStageRecommendAvatarReq.cs | 14 + .../Packet/Recv/Stage/HandlerStageBeginReq.cs | 14 + .../Packet/Recv/Stage/HandlerStageEndReq.cs | 18 + .../Stage/HandlerStageInnerDataReportReq.cs | 13 + .../Recv/Story/HandlerGetExtraStoryDataReq.cs | 13 + .../Recv/Test/HandlerGetWebActivityInfoReq.cs | 13 + .../Test/HandlerGetWeekDayActivityDataReq.cs | 13 + .../Recv/Test/HandlerGetWeeklyReportReq.cs | 13 + .../HandlerGetWeeklyRoutineActivityReq.cs | 13 + .../Packet/Recv/Test/HandlerGetWikiDataReq.cs | 13 + .../Recv/Test/HandlerGetWorldMapDataReq.cs | 13 + .../Test/HandlerGetWorldMapRecommendReq.cs | 13 + .../Test/HandlerGrandKeyActivateSkillReq.cs | 13 + .../Test/HandlerLoginWishGetMainDataReq.cs | 13 + .../Test/HandlerOpenworldGetMechaTeamReq.cs | 13 + .../HandlerOpenworldHuntActivityGetDataReq.cs | 13 + .../Recv/Test/HandlerRaidReplaceGetDataReq.cs | 13 + .../Recv/Test/HandlerRefineStigmataRuneReq.cs | 13 + .../Recv/Test/HandlerRefreshAvatarSkillReq.cs | 13 + .../Test/HandlerReunionCookGetActivityReq.cs | 13 + .../Test/HandlerSanctuaryGetMainInfoReq.cs | 13 + .../HandlerSelectGodWarChallengeAvatarReq.cs | 13 + .../Test/HandlerSelectNewStigmataRuneReq.cs | 13 + .../Packet/Recv/Test/HandlerSetDressReq.cs | 13 + .../Packet/Recv/Test/HandlerSetWarshipReq.cs | 13 + .../HandlerSimplifiedGodWarGetActivityReq.cs | 13 + .../Test/HandlerSusannaTrialGetActivityReq.cs | 13 + .../HandlerThemeWantedRefreshTicketReq.cs | 13 + .../Recv/Test/HandlerTriggerGodWarEventReq.cs | 13 + .../Test/HandlerUltraEndlessEnterSiteReq.cs | 13 + .../Test/HandlerUltraEndlessGetMainDataReq.cs | 13 + .../Test/HandlerUltraEndlessGetTopRankReq.cs | 13 + .../HandlerUltraEndlessReportSiteFloorReq.cs | 13 + .../Test/HandlerUpdateMissionProgressReq.cs | 13 + .../Test/HandlerWaveRushGetActivityReq.cs | 13 + .../Recv/Warship/HandlerGetWarshipDataReq.cs | 13 + .../Warship/HandlerGetWarshipItemDataReq.cs | 13 + .../Warship/HandlerGetWarshipTrialDataReq.cs | 13 + .../Warship/HandlerSetWarshipAvatarReq.cs | 21 + .../PacketArkPlusActivityGetDataRsp.cs | 17 + .../PacketBuffAssistGetActivityRsp.cs | 17 + .../PacketGeneralActivityGetMainInfoRsp.cs | 107 + .../PacketGeneralActivityGetScheduleRsp.cs | 42 + .../Activity/PacketGetActivityMainDataRsp.cs | 17 + ...PacketGetActivityRewardStatisticDataRsp.cs | 29 + .../PacketGetBulletinActivityMissionRsp.cs | 399 + .../Send/Activity/PacketGetBulletinRsp.cs | 17 + .../PacketGetChapterActivityDataRsp.cs | 17 + .../PacketGetChapterCompensationInfoRsp.cs | 17 + .../Activity/PacketGetDropLimitActivityRsp.cs | 136 + .../PacketGetExtractReforgeActivityRsp.cs | 17 + .../Activity/PacketGetFarmActivityDataRsp.cs | 17 + .../Activity/PacketGetGardenScheduleRsp.cs | 17 + .../PacketGetInviteActivityInviteeDataRsp.cs | 25 + .../PacketGetInviteActivityInviterDataRsp.cs | 29 + .../Activity/PacketGetLoginActivityRsp.cs | 30 + .../Activity/PacketGetMosaicActivityRsp.cs | 17 + .../Activity/PacketGetNewbieActivityRsp.cs | 17 + .../Activity/PacketGetNinjaActivityRsp.cs | 17 + .../Send/Activity/PacketGetThemeWantedRsp.cs | 48 + .../Adventure/PacketGetAdventureGroupRsp.cs | 17 + .../PacketGetAdventureStorySweepInfoRsp.cs | 57 + .../PacketGetConsignedOrderDataRsp.cs | 17 + .../Armada/PacketGetArmadaActivityListRsp.cs | 27 + .../Send/Armada/PacketGetArmadaDataRsp.cs | 17 + .../PacketGetArmadaStageScoreActivityRsp.cs | 17 + .../Packet/Send/Auth/PacketGetAuthkeyRsp.cs | 20 + .../Avatar/PacketAddCustomAvatarTeamRsp.cs | 17 + .../Avatar/PacketAvatarSubSkillLevelUpRsp.cs | 18 + .../Avatar/PacketDelCustomAvatarTeamRsp.cs | 17 + .../Send/Avatar/PacketDressEquipmentRsp.cs | 18 + .../Send/Avatar/PacketGetAvatarDataRsp.cs | 19 + .../PacketGetAvatarMissionActivityRsp.cs | 17 + .../Send/Avatar/PacketGetAvatarRollDataRsp.cs | 161 + .../Send/Avatar/PacketGetAvatarTeamDataRsp.cs | 17 + .../Avatar/PacketUpdateCustomAvatarTeamRsp.cs | 17 + .../Send/Battle/PacketGetBuffEffectRsp.cs | 27 + .../PacketGetBattlePassMissionPanelRsp.cs | 17 + ...cketGetChallengeStepCompensationInfoRsp.cs | 38 + .../Chapter/PacketChapterArkGetDataRsp.cs | 44 + .../Chapter/PacketChapterBwWorldGetDataRsp.cs | 20 + .../Chapter/PacketChapterGroupGetDataRsp.cs | 35 + .../PacketChapterKnightRichManGetDataRsp.cs | 19 + ...acketGetEliteChapterCompensationInfoRsp.cs | 25 + .../PacketChatworldBeastGetActivityRsp.cs | 17 + .../PacketChatworldGetActivityScheduleRsp.cs | 19 + .../Chat/PacketChatworldGetPrayInfoRsp.cs | 17 + .../Send/Chat/PacketEnterWorldChatroomRsp.cs | 19 + .../Send/Chat/PacketGetChatgroupListRsp.cs | 17 + .../Send/Client/PacketClientReportRsp.cs | 17 + .../Send/Client/PacketGetClientDataRsp.cs | 21 + .../Send/Client/PacketGetClientMailDataRsp.cs | 17 + .../Send/Client/PacketGetClientSettingRsp.cs | 18 + .../PacketReportClientDataVersionRsp.cs | 17 + .../Send/Client/PacketSetClientDataRsp.cs | 18 + .../Collection/PacketGetCollectionListRsp.cs | 21 + .../Packet/Send/DLC/PacketGetDLCAvatarRsp.cs | 17 + .../Server/Packet/Send/DLC/PacketGetDLCRsp.cs | 17 + .../Packet/Send/DLC/PacketGetDLCTowerRsp.cs | 17 + .../Packet/Send/Dorm/PacketGetDormDataRsp.cs | 218 + .../Packet/Send/Dummy/PacketGetPlotListRsp.cs | 4285 ++ .../Send/Dummy/PacketGetPrivilegeInfoRsp.cs | 97 + .../Send/Dummy/PacketGetProductListRsp.cs | 21 + .../Dummy/PacketGetProductRecommendListRsp.cs | 20 + .../Send/Dummy/PacketGetRaffleActivityRsp.cs | 17 + .../Dummy/PacketGetRankScheduleDataRsp.cs | 17 + .../Dummy/PacketGetRecommendFriendListRsp.cs | 17 + .../Send/Dummy/PacketGetRecommendGoodsRsp.cs | 17 + .../Dummy/PacketGetRewardLineActivityRsp.cs | 27 + .../Packet/Send/Dummy/PacketGetRoomDataRsp.cs | 17 + .../Packet/Send/Dummy/PacketGetRpgTaleRsp.cs | 17 + .../Send/Dummy/PacketGetScratchTicketRsp.cs | 17 + .../Dummy/PacketGetSecurityPasswordRsp.cs | 17 + .../Packet/Send/Dummy/PacketGetShopListRsp.cs | 17 + .../Dummy/PacketGetShoppingMallListRsp.cs | 17 + .../Send/Dummy/PacketGetSupportActivityRsp.cs | 17 + .../Send/Dummy/PacketGetSurveyDataRsp.cs | 17 + .../Dummy/PacketGetTowerRaidActivityRsp.cs | 17 + .../Dummy/PacketGetTradingCardActivityRsp.cs | 17 + .../Send/Dummy/PacketGetTrialAvatarRsp.cs | 17 + .../Send/Dummy/PacketGetVipRewardDataRsp.cs | 145 + .../PacketGetVirtualAvatarGroupDetailRsp.cs | 41 + .../Packet/Send/Elf/PacketGetElfDataRsp.cs | 719 + .../Send/Endless/PacketGetEndlessStatusRsp.cs | 35 + .../PacketGetGalInteractTriggerEventRsp.cs | 17 + .../Send/ExBoss/PacketExBossStageBeginRsp.cs | 17 + .../Send/ExBoss/PacketExBossStageEndRsp.cs | 18 + .../Send/ExBoss/PacketGetExBossInfoRsp.cs | 26 + .../Send/ExBoss/PacketGetExBossRankRsp.cs | 39 + .../Send/ExBoss/PacketGetExBossScheduleRsp.cs | 22 + .../PacketGetCurrencyExchangeInfoRsp.cs | 17 + .../Friend/PacketGetAskAddFriendListRsp.cs | 17 + .../Send/Friend/PacketGetFriendListRsp.cs | 17 + .../Friend/PacketGetFriendRemarkListRsp.cs | 17 + .../Send/Gacha/PacketGetGachaDisplayRsp.cs | 17 + .../Packet/Send/GodWar/PacketGetGobackRsp.cs | 17 + .../Send/GodWar/PacketGetGodWarLobbyRsp.cs | 20 + .../Packet/Send/GodWar/PacketGetGodWarRsp.cs | 18 + .../Send/GodWar/PacketGetGrandKeyRsp.cs | 99 + .../GodWar/PacketRefreshGodWarTicketRsp.cs | 17 + .../Packet/Send/Goods/PacketAddGoodfeelRsp.cs | 17 + .../Send/Guide/PacketFinishGuideReportRsp.cs | 20 + .../Send/Guide/PacketGetFinishGuideDataRsp.cs | 731 + .../Send/Item/PacketGetEquipmentDataRsp.cs | 18 + .../Item/PacketGetEquipmentForgeDataRsp.cs | 67 + .../Item/PacketGetHasGotFurnitureIdListRsp.cs | 33 + .../Send/Item/PacketGetHasGotItemIdListRsp.cs | 580 + .../PacketGetMasterPupilApplyRsp.cs | 18 + .../PacketGetMasterPupilCardRsp.cs | 17 + .../PacketGetMasterPupilDataRsp.cs | 17 + .../PacketGetMasterPupilMainDataRsp.cs | 17 + .../Send/Mission/PacketGetMissionDataRsp.cs | 22 + .../PacketGetMissionGroupMainInfoRsp.cs | 19 + .../Mission/PacketGetMissionThemeDataRsp.cs | 19 + .../PacketGetRecommendMissionPanelListRsp.cs | 31 + .../OpenWorld/PacketGetNewOpenworldRsp.cs | 168 + .../PacketGetOpenworldEndlessDataRsp.cs | 24 + .../PacketGetOpenworldMechaDefenseRsp.cs | 20 + .../PacketGetOpenworldQuestActivityRsp.cs | 17 + .../Pjms/PacketPjmsGetAchievementDataRsp.cs | 17 + .../Pjms/PacketPjmsGetActivityPanelRsp.cs | 60 + .../Send/Pjms/PacketPjmsGetChapterDataRsp.cs | 85 + .../Pjms/PacketPjmsGetConditionDataRsp.cs | 17 + .../Send/Pjms/PacketPjmsGetCurWorldRsp.cs | 17 + .../Send/Pjms/PacketPjmsGetMainDataRsp.cs | 17 + .../Pjms/PacketPjmsGetResidentStageDataRsp.cs | 17 + .../Send/Pjms/PacketPjmsGetStoryDataRsp.cs | 17 + .../Player/PacketGetAssistantFrozenListRsp.cs | 17 + .../Send/Player/PacketGetBlackListRsp.cs | 17 + .../Packet/Send/Player/PacketGetConfigRsp.cs | 407 + .../Send/Player/PacketGetCustomHeadDataRsp.cs | 24 + .../Send/Player/PacketGetEmojiDataRsp.cs | 17 + .../Send/Player/PacketGetFrameDataRsp.cs | 27 + .../Send/Player/PacketGetMainDataRsp.cs | 28 + .../Send/Player/PacketGetMedalDataRsp.cs | 74 + .../Player/PacketGetOfflineResourceDataRsp.cs | 17 + .../Packet/Send/Player/PacketGetPediaRsp.cs | 7021 +++ .../Player/PacketGetPhonePendantDataRsp.cs | 38 + .../Send/Player/PacketGetPhotoDataRsp.cs | 128 + .../Send/Player/PacketGetPlayerCardRsp.cs | 17 + .../Send/Player/PacketGetPlayerTokenRsp.cs | 32 + .../Send/Player/PacketGetRegionUidRangeRsp.cs | 26 + .../Send/Player/PacketGetThemeDataRsp.cs | 28 + .../Send/Player/PacketPlayerLoginRsp.cs | 21 + .../Packet/Send/Player/PacketSyncTimeRsp.cs | 19 + .../PacketTakeGalInteractTriggerEventRsp.cs | 18 + .../Product/PacketGetCardProductInfoRsp.cs | 17 + .../Stage/PacketGetStageActDifficultyRsp.cs | 27 + .../Send/Stage/PacketGetStageChapterRsp.cs | 17 + .../Send/Stage/PacketGetStageDataRsp.cs | 105 + .../Stage/PacketGetStageDropDisplayRsp.cs | 24 + .../Stage/PacketGetStageRecommendAvatarRsp.cs | 24 + .../Packet/Send/Stage/PacketStageBeginRsp.cs | 17 + .../Packet/Send/Stage/PacketStageEndRsp.cs | 18 + .../Stage/PacketStageInnerDataReportRsp.cs | 17 + .../Send/Story/PacketGetExtraStoryDataRsp.cs | 17 + .../Send/Test/PacketGetWebActivityInfoRsp.cs | 17 + .../Test/PacketGetWeekDayActivityDataRsp.cs | 31 + .../Send/Test/PacketGetWeeklyReportRsp.cs | 19 + .../Test/PacketGetWeeklyRoutineActivityRsp.cs | 17 + .../Packet/Send/Test/PacketGetWikiDataRsp.cs | 18 + .../Send/Test/PacketGetWorldMapDataRsp.cs | 201 + .../Test/PacketGetWorldMapRecommendRsp.cs | 82 + .../Test/PacketGrandKeyActivateSkillRsp.cs | 17 + .../Test/PacketLoginWishGetMainDataRsp.cs | 29 + .../Test/PacketOpenworldGetMechaTeamRsp.cs | 17 + .../PacketOpenworldHuntActivityGetDataRsp.cs | 17 + .../Send/Test/PacketRaidReplaceGetDataRsp.cs | 17 + .../Send/Test/PacketRefineStigmataRuneRsp.cs | 17 + .../Send/Test/PacketRefreshAvatarSkillRsp.cs | 17 + .../Test/PacketReunionCookGetActivityRsp.cs | 17 + .../Test/PacketSanctuaryGetMainInfoRsp.cs | 17 + .../PacketSelectGodWarChallengeAvatarRsp.cs | 17 + .../Test/PacketSelectNewStigmataRuneRsp.cs | 17 + .../Packet/Send/Test/PacketSetDressRsp.cs | 17 + .../Send/Test/PacketSetWarshipAvatarRsp.cs | 17 + .../Packet/Send/Test/PacketSetWarshipRsp.cs | 17 + .../PacketSimplifiedGodWarGetActivityRsp.cs | 17 + .../Test/PacketSusannaTrialGetActivityRsp.cs | 17 + .../Test/PacketThemeWantedRefreshTicketRsp.cs | 17 + .../Send/Test/PacketTriggerGodWarEventRsp.cs | 17 + .../Test/PacketUltraEndlessEnterSiteRsp.cs | 17 + .../Test/PacketUltraEndlessGetMainDataRsp.cs | 17 + .../Test/PacketUltraEndlessGetTopRankRsp.cs | 17 + .../PacketUltraEndlessReportSiteFloorRsp.cs | 17 + .../Test/PacketUpdateMissionProgressRsp.cs | 17 + .../Send/Test/PacketWaveRushGetActivityRsp.cs | 17 + .../Send/Warship/PacketGetWarshipDataRsp.cs | 41 + .../Warship/PacketGetWarshipItemDataRsp.cs | 19 + .../Warship/PacketGetWarshipTrialDataRsp.cs | 17 + .../Send/Warship/PacketSetWarshipAvatarRsp.cs | 17 + KcpSharp/Base/ArrayMemoryOwner.cs | 23 + KcpSharp/Base/AsyncAutoResetEvent.cs | 112 + .../Base/DefaultArrayPoolBufferAllocator.cs | 11 + KcpSharp/Base/IKcpBufferPool.cs | 14 + KcpSharp/Base/IKcpConversation.cs | 25 + ...KcpConversationUpdateNotificationSource.cs | 7 + KcpSharp/Base/IKcpExceptionProducer.cs | 16 + KcpSharp/Base/IKcpMultiplexConnection.cs | 56 + KcpSharp/Base/IKcpMultiplexConnectionOfT.cs | 56 + KcpSharp/Base/IKcpTransport.cs | 18 + KcpSharp/Base/IKcpTransportOfT.cs | 22 + KcpSharp/Base/KcpAcknowledgeList.cs | 93 + KcpSharp/Base/KcpBuffer.cs | 51 + KcpSharp/Base/KcpBufferPoolRentOptions.cs | 50 + KcpSharp/Base/KcpCommand.cs | 9 + ...KcpConversation.FlushAsyncMethodBuilder.cs | 272 + KcpSharp/Base/KcpConversation.cs | 1467 + KcpSharp/Base/KcpConversationOptions.cs | 98 + KcpSharp/Base/KcpConversationReceiveResult.cs | 77 + .../Base/KcpConversationUpdateActivation.cs | 474 + .../Base/KcpConversationUpdateNotification.cs | 27 + .../Base/KcpExceptionProducerExtensions.cs | 106 + KcpSharp/Base/KcpGlobalVars.cs | 13 + KcpSharp/Base/KcpKeepAliveOptions.cs | 26 + KcpSharp/Base/KcpMultiplexConnection.cs | 281 + KcpSharp/Base/KcpPacketHeader.cs | 89 + KcpSharp/Base/KcpProbeType.cs | 9 + KcpSharp/Base/KcpRawChannel.cs | 400 + KcpSharp/Base/KcpRawChannelOptions.cs | 34 + KcpSharp/Base/KcpRawReceiveQueue.cs | 343 + KcpSharp/Base/KcpRawSendOperation.cs | 184 + KcpSharp/Base/KcpReceiveQueue.cs | 638 + .../KcpReceiveWindowNotificationOptions.cs | 30 + KcpSharp/Base/KcpRentedBuffer.cs | 195 + KcpSharp/Base/KcpSendQueue.cs | 653 + KcpSharp/Base/KcpSendReceiveBufferItem.cs | 8 + .../Base/KcpSendReceiveBufferItemCache.cs | 68 + KcpSharp/Base/KcpSendReceiveQueueItemCache.cs | 76 + KcpSharp/Base/KcpSendSegmentStats.cs | 17 + KcpSharp/Base/KcpSocketTransport.cs | 123 + .../Base/KcpSocketTransportForConversation.cs | 48 + ...cpSocketTransportForMultiplexConnection.cs | 42 + .../Base/KcpSocketTransportForRawChannel.cs | 43 + KcpSharp/Base/KcpSocketTransportOfT.cs | 199 + KcpSharp/Base/KcpStream.cs | 176 + .../AwaitableSocketAsyncEventArgs.cs | 36 + .../NetstandardShim/CancellationTokenShim.cs | 12 + .../NetstandardShim/LinkedListNetstandard.cs | 212 + .../NetstandardShim/TaskCompletionSource.cs | 10 + KcpSharp/Base/ThrowHelper.cs | 84 + KcpSharp/BasePacket.cs | 67 + KcpSharp/KcpConnection.cs | 165 + KcpSharp/KcpListener.cs | 148 + KcpSharp/KcpSharp.csproj | 21 + KcpSharp/SessionStateEnum.cs | 10 + KianaBH.sln | 60 + KianaBH/KianaBH.csproj | 21 + KianaBH/Program/KianaBH.cs | 92 + KianaBH/Program/LoaderManager.cs | 175 + .../KianaBH-Win64-Debug.pubxml | 18 + .../KianaBH-Win64-MultiFile.pubxml | 19 + .../KianaBH-Win64-OneFile.pubxml | 19 + KianaBH/Source/Kiana.ico | Bin 0 -> 432254 bytes KianaBH/Tool/AssemblyGenerater.cs | 38 + KianaBH/Tool/HandbookGenerator.cs | 95 + Proto/BH3.proto | 52490 ++++++++++++++++ Proto/CmdIds.cs | 3094 + Proto/Proto.csproj | 26 + .../Dispatch/QueryDispatchController.cs | 41 + .../Dispatch/QueryGatewayController.cs | 191 + SdkServer/Handlers/Sdk/AbTestController.cs | 33 + .../Handlers/Sdk/ComboGranterController.cs | 123 + .../Sdk/DeviceFingerprintController.cs | 57 + .../Handlers/Sdk/GameWeatherController.cs | 31 + .../Handlers/Sdk/LogDataUploadController.cs | 36 + .../Handlers/Sdk/MaPassportController.cs | 50 + SdkServer/Handlers/Sdk/MdkController.cs | 153 + SdkServer/Handlers/Sdk/RiskyController.cs | 14 + SdkServer/SdkServer.cs | 53 + SdkServer/SdkServer.csproj | 32 + 568 files changed, 92872 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Common/Common.csproj create mode 100644 Common/Configuration/ConfigContainer.cs create mode 100644 Common/Configuration/HotfixContainer.cs create mode 100644 Common/Data/Config/TimeStampConfig.cs create mode 100644 Common/Data/Excel/ActChallengeDataExcel.cs create mode 100644 Common/Data/Excel/ActivityTowerExcel.cs create mode 100644 Common/Data/Excel/AffixListExcel.cs create mode 100644 Common/Data/Excel/AvatarDataExcel.cs create mode 100644 Common/Data/Excel/AvatarSubSkillDataExcel.cs create mode 100644 Common/Data/Excel/AvatarTutorialExcel.cs create mode 100644 Common/Data/Excel/ChapterGroupConfigExcel.cs create mode 100644 Common/Data/Excel/CityEventPhotoExcel.cs create mode 100644 Common/Data/Excel/CollectionExcel.cs create mode 100644 Common/Data/Excel/CustomHeadDataExcel.cs create mode 100644 Common/Data/Excel/DressDataExcel.cs create mode 100644 Common/Data/Excel/ElfAstraMateDataExcel.cs create mode 100644 Common/Data/Excel/ElfSkillDataExcel.cs create mode 100644 Common/Data/Excel/EntryThemeDataExcel.cs create mode 100644 Common/Data/Excel/EntryThemeItemDataExcel.cs create mode 100644 Common/Data/Excel/FrameDataExcel.cs create mode 100644 Common/Data/Excel/GeneralActivityExcel.cs create mode 100644 Common/Data/Excel/GeneralActivityStageGroupExcel.cs create mode 100644 Common/Data/Excel/GodWarEventExcel.cs create mode 100644 Common/Data/Excel/GodWarMainAvatarExcel.cs create mode 100644 Common/Data/Excel/GodWarRelationDataExcel.cs create mode 100644 Common/Data/Excel/GodWarSupportAvatarExcel.cs create mode 100644 Common/Data/Excel/GodWarTaleScheduleExcel.cs create mode 100644 Common/Data/Excel/GodWarTalentDataExcel.cs create mode 100644 Common/Data/Excel/MaterialDataExcel.cs create mode 100644 Common/Data/Excel/MissionDataExcel.cs create mode 100644 Common/Data/Excel/PhonePendantDataExcel.cs create mode 100644 Common/Data/Excel/RandomPlotDataExcel.cs create mode 100644 Common/Data/Excel/RecommendPanelExcel.cs create mode 100644 Common/Data/Excel/StageDataMainExcel.cs create mode 100644 Common/Data/Excel/StepMissionCompensationExcel.cs create mode 100644 Common/Data/Excel/StigmataDataExcel.cs create mode 100644 Common/Data/Excel/ThemeDataAvatarExcel.cs create mode 100644 Common/Data/Excel/TutorialDataExcel.cs create mode 100644 Common/Data/Excel/WeaponDataExcel.cs create mode 100644 Common/Data/ExcelResource.cs create mode 100644 Common/Data/GameData.cs create mode 100644 Common/Data/Models/Dispatch/DispatchQuery.cs create mode 100644 Common/Data/Models/Dispatch/QueryDispatchModels.cs create mode 100644 Common/Data/Models/Dispatch/QueryGatewayModels.cs create mode 100644 Common/Data/Models/Sdk/ComboGranterModels.cs create mode 100644 Common/Data/Models/Sdk/DeviceFingerprintController.cs create mode 100644 Common/Data/Models/Sdk/GameWeatherModels.cs create mode 100644 Common/Data/Models/Sdk/MdkShieldModels.cs create mode 100644 Common/Data/Models/Sdk/ResponseBase.cs create mode 100644 Common/Data/ResourceEntity.cs create mode 100644 Common/Data/ResourceManager.cs create mode 100644 Common/Database/Account/AccountData.cs create mode 100644 Common/Database/Avatar/AvatarData.cs create mode 100644 Common/Database/BaseDatabaseDataHelper.cs create mode 100644 Common/Database/Client/ClientData.cs create mode 100644 Common/Database/CustomSerializeService.cs create mode 100644 Common/Database/DatabaseHelper.cs create mode 100644 Common/Database/Inventory/InventoryData.cs create mode 100644 Common/Database/Lineup/LineupData.cs create mode 100644 Common/Database/Player/GuideData.cs create mode 100644 Common/Database/Player/PlayerData.cs create mode 100644 Common/Enums/Item/ItemMainTypeEnum.cs create mode 100644 Common/Enums/Language/ProgramLanguageTypeEnum.cs create mode 100644 Common/Enums/Player/BanTypeEnum.cs create mode 100644 Common/Enums/Player/FriendEnum.cs create mode 100644 Common/Enums/Player/OperationEnum.cs create mode 100644 Common/Enums/Player/PermEnum.cs create mode 100644 Common/Enums/Player/PlayerStatusEnum.cs create mode 100644 Common/Enums/Player/RegionEnum.cs create mode 100644 Common/Internationalization/I18nManager.cs create mode 100644 Common/Internationalization/Message/LanguageCHS.cs create mode 100644 Common/Internationalization/Message/LanguageCHT.cs create mode 100644 Common/Internationalization/Message/LanguageEN.cs create mode 100644 Common/Internationalization/PluginLanguageAttribute.cs create mode 100644 Common/Util/ConfigManager.cs create mode 100644 Common/Util/Crpyto/DispatchEncryption.cs create mode 100644 Common/Util/Extensions/Extensions.cs create mode 100644 Common/Util/Extensions/JsonStringToObjectConverter.cs create mode 100644 Common/Util/GameConstants.cs create mode 100644 Common/Util/IConsole.cs create mode 100644 Common/Util/Logger.cs create mode 100644 Common/Util/LoggingMiddleware.cs create mode 100644 Common/Util/Security/Crypto.cs create mode 100644 Config/Config.json create mode 100644 Config/Hotfix.json create mode 100644 GameServer/Command/CommandArg.cs create mode 100644 GameServer/Command/CommandAttribute.cs create mode 100644 GameServer/Command/CommandExecutor.cs create mode 100644 GameServer/Command/CommandInterface.cs create mode 100644 GameServer/Command/CommandManager.cs create mode 100644 GameServer/Command/CommandSender.cs create mode 100644 GameServer/Game/Avatar/AvatarManager.cs create mode 100644 GameServer/Game/BasePlayerManager.cs create mode 100644 GameServer/Game/Inventory/InventoryManager.cs create mode 100644 GameServer/Game/Player/PlayerInstance.cs create mode 100644 GameServer/GameServer.csproj create mode 100644 GameServer/Server/Connection.cs create mode 100644 GameServer/Server/Listener.cs create mode 100644 GameServer/Server/Packet/Handler.cs create mode 100644 GameServer/Server/Packet/HandlerManager.cs create mode 100644 GameServer/Server/Packet/Opcode.cs create mode 100644 GameServer/Server/Packet/Recv/Activity/HandlerArkPlusActivityGetDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Activity/HandlerBuffAssistGetActivityReq.cs create mode 100644 GameServer/Server/Packet/Recv/Activity/HandlerGeneralActivityGetMainInfoReq.cs create mode 100644 GameServer/Server/Packet/Recv/Activity/HandlerGeneralActivityGetScheduleReq.cs create mode 100644 GameServer/Server/Packet/Recv/Activity/HandlerGetActivityMainDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Activity/HandlerGetActivityRewardStatisticDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Activity/HandlerGetBulletinActivityMissionReq.cs create mode 100644 GameServer/Server/Packet/Recv/Activity/HandlerGetBulletinReq.cs create mode 100644 GameServer/Server/Packet/Recv/Activity/HandlerGetChapterActivityDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Activity/HandlerGetChapterCompensationInfoReq.cs create mode 100644 GameServer/Server/Packet/Recv/Activity/HandlerGetDropLimitActivityReq.cs create mode 100644 GameServer/Server/Packet/Recv/Activity/HandlerGetExtractReforgeActivityReq.cs create mode 100644 GameServer/Server/Packet/Recv/Activity/HandlerGetFarmActivityDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Activity/HandlerGetGardenScheduleReq.cs create mode 100644 GameServer/Server/Packet/Recv/Activity/HandlerGetInviteActivityInviteeDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Activity/HandlerGetInviteActivityInviterDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Activity/HandlerGetLoginActivityReq.cs create mode 100644 GameServer/Server/Packet/Recv/Activity/HandlerGetMosaicActivityReq.cs create mode 100644 GameServer/Server/Packet/Recv/Activity/HandlerGetNewbieActivityReq.cs create mode 100644 GameServer/Server/Packet/Recv/Activity/HandlerGetNinjaActivityReq.cs create mode 100644 GameServer/Server/Packet/Recv/Activity/HandlerGetThemeWantedReq.cs create mode 100644 GameServer/Server/Packet/Recv/Adventure/HandlerGetAdventureGroupReq.cs create mode 100644 GameServer/Server/Packet/Recv/Adventure/HandlerGetAdventureStorySweepInfoReq.cs create mode 100644 GameServer/Server/Packet/Recv/Adventure/HandlerGetConsignedOrderDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Armada/HandlerGetArmadaActivityListReq.cs create mode 100644 GameServer/Server/Packet/Recv/Armada/HandlerGetArmadaDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Armada/HandlerGetArmadaStageScoreActivityReq.cs create mode 100644 GameServer/Server/Packet/Recv/Auth/HandlerGetAuthkeyReq.cs create mode 100644 GameServer/Server/Packet/Recv/Avatar/HandlerAddCustomAvatarTeamReq.cs create mode 100644 GameServer/Server/Packet/Recv/Avatar/HandlerAvatarSubSkillLevelUpReq.cs create mode 100644 GameServer/Server/Packet/Recv/Avatar/HandlerDelCustomAvatarTeamReq.cs create mode 100644 GameServer/Server/Packet/Recv/Avatar/HandlerDressEquipmentReq.cs create mode 100644 GameServer/Server/Packet/Recv/Avatar/HandlerGetAvatarDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Avatar/HandlerGetAvatarMissionActivityReq.cs create mode 100644 GameServer/Server/Packet/Recv/Avatar/HandlerGetAvatarRollDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Avatar/HandlerGetAvatarTeamDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Avatar/HandlerUpdateCustomAvatarTeamReq.cs create mode 100644 GameServer/Server/Packet/Recv/Battle/HandlerGetBuffEffectReq.cs create mode 100644 GameServer/Server/Packet/Recv/BattlePass/HandlerGetBattlePassMissionPanelReq.cs create mode 100644 GameServer/Server/Packet/Recv/Challenge/HandlerGetChallengeStepCompensationInfoReq.cs create mode 100644 GameServer/Server/Packet/Recv/Chapter/HandlerChapterArkGetDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Chapter/HandlerChapterBwWorldGetDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Chapter/HandlerChapterGroupGetDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Chapter/HandlerChapterKnightRichManGetDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Chapter/HandlerGetEliteChapterCompensationInfoReq.cs create mode 100644 GameServer/Server/Packet/Recv/Chat/HandlerChatworldBeastGetActivityReq.cs create mode 100644 GameServer/Server/Packet/Recv/Chat/HandlerChatworldGetActivityScheduleReq.cs create mode 100644 GameServer/Server/Packet/Recv/Chat/HandlerChatworldGetPrayInfoReq.cs create mode 100644 GameServer/Server/Packet/Recv/Chat/HandlerEnterWorldChatroomReq.cs create mode 100644 GameServer/Server/Packet/Recv/Chat/HandlerGetChatgroupListReq.cs create mode 100644 GameServer/Server/Packet/Recv/Client/HandlerClientReportReq.cs create mode 100644 GameServer/Server/Packet/Recv/Client/HandlerGetClientDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Client/HandlerGetClientMailDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Client/HandlerGetClientSettingReq.cs create mode 100644 GameServer/Server/Packet/Recv/Client/HandlerKeepAliveNotify.cs create mode 100644 GameServer/Server/Packet/Recv/Client/HandlerReportClientDataVersionReq.cs create mode 100644 GameServer/Server/Packet/Recv/Client/HandlerSetClientDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Collection/HandlerGetCollectionListReq.cs create mode 100644 GameServer/Server/Packet/Recv/DLC/HandlerGetDLCAvatarReq.cs create mode 100644 GameServer/Server/Packet/Recv/DLC/HandlerGetDLCReq.cs create mode 100644 GameServer/Server/Packet/Recv/DLC/HandlerGetDLCTowerReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dorm/HandlerGetDormDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetPlotListReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetPrivilegeInfoReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetProductListReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetProductRecommendListReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetRaffleActivityReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetRankScheduleDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetRecommendFriendListReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetRecommendGoodsReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetRewardLineActivityReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetRoomDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetRpgTaleReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetScratchTicketReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetSecurityPasswordReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetShopListReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetShoppingMallListReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetSupportActivityReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetSurveyDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetTowerRaidActivityReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetTradingCardActivityReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetTrialAvatarReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetVipRewardDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Dummy/HandlerGetVirtualAvatarGroupDetailReq.cs create mode 100644 GameServer/Server/Packet/Recv/Elf/HandlerGetElfDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Endless/HandlerGetEndlessStatusReq.cs create mode 100644 GameServer/Server/Packet/Recv/Event/HandlerGetGalInteractTriggerEventReq.cs create mode 100644 GameServer/Server/Packet/Recv/ExBoss/HandlerExBossStageBeginReq.cs create mode 100644 GameServer/Server/Packet/Recv/ExBoss/HandlerExBossStageEndReq.cs create mode 100644 GameServer/Server/Packet/Recv/ExBoss/HandlerGetExBossInfoReq.cs create mode 100644 GameServer/Server/Packet/Recv/ExBoss/HandlerGetExBossRankReq.cs create mode 100644 GameServer/Server/Packet/Recv/ExBoss/HandlerGetExBossScheduleReq.cs create mode 100644 GameServer/Server/Packet/Recv/Exchange/HandlerGetCurrencyExchangeInfoReq.cs create mode 100644 GameServer/Server/Packet/Recv/Friend/HandlerGetAskAddFriendListReq.cs create mode 100644 GameServer/Server/Packet/Recv/Friend/HandlerGetFriendListReq.cs create mode 100644 GameServer/Server/Packet/Recv/Friend/HandlerGetFriendRemarkListReq.cs create mode 100644 GameServer/Server/Packet/Recv/Gacha/HandlerGetGachaDisplayReq.cs create mode 100644 GameServer/Server/Packet/Recv/GodWar/HandlerGetGobackReq.cs create mode 100644 GameServer/Server/Packet/Recv/GodWar/HandlerGetGodWarLobbyReq.cs create mode 100644 GameServer/Server/Packet/Recv/GodWar/HandlerGetGodWarReq.cs create mode 100644 GameServer/Server/Packet/Recv/GodWar/HandlerGetGrandKeyReq.cs create mode 100644 GameServer/Server/Packet/Recv/GodWar/HandlerRefreshGodWarTicketReq.cs create mode 100644 GameServer/Server/Packet/Recv/Goods/HandlerAddGoodfeelReq.cs create mode 100644 GameServer/Server/Packet/Recv/Guide/HandlerFinishGuideReportReq.cs create mode 100644 GameServer/Server/Packet/Recv/Guide/HandlerGetFinishGuideDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Item/HandlerGetEquipmentDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Item/HandlerGetEquipmentForgeDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Item/HandlerGetHasGotFurnitureIdListReq.cs create mode 100644 GameServer/Server/Packet/Recv/Item/HandlerGetHasGotItemIdListReq.cs create mode 100644 GameServer/Server/Packet/Recv/MasterPupil/HandlerGetMasterPupilApplyReq.cs create mode 100644 GameServer/Server/Packet/Recv/MasterPupil/HandlerGetMasterPupilCardReq.cs create mode 100644 GameServer/Server/Packet/Recv/MasterPupil/HandlerGetMasterPupilDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/MasterPupil/HandlerGetMasterPupilMainDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Mission/HandlerGetMissionDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Mission/HandlerGetMissionGroupMainInfoReq.cs create mode 100644 GameServer/Server/Packet/Recv/Mission/HandlerGetMissionThemeDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Mission/HandlerGetRecommendMissionPanelListReq.cs create mode 100644 GameServer/Server/Packet/Recv/OpenWorld/HandlerGetNewOpenworldReq.cs create mode 100644 GameServer/Server/Packet/Recv/OpenWorld/HandlerGetOpenworldEndlessDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/OpenWorld/HandlerGetOpenworldMechaDefenseReq.cs create mode 100644 GameServer/Server/Packet/Recv/OpenWorld/HandlerGetOpenworldQuestActivityReq.cs create mode 100644 GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetAchievementDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetActivityPanelReq.cs create mode 100644 GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetChapterDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetConditionDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetCurWorldReq.cs create mode 100644 GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetMainDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetResidentStageDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetStoryDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Player/HandlerGetAssistantFrozenListReq.cs create mode 100644 GameServer/Server/Packet/Recv/Player/HandlerGetBlackListReq.cs create mode 100644 GameServer/Server/Packet/Recv/Player/HandlerGetConfigReq.cs create mode 100644 GameServer/Server/Packet/Recv/Player/HandlerGetCustomHeadDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Player/HandlerGetEmojiDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Player/HandlerGetFrameDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Player/HandlerGetMainDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Player/HandlerGetMedalDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Player/HandlerGetOfflineResourceDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Player/HandlerGetPediaReq.cs create mode 100644 GameServer/Server/Packet/Recv/Player/HandlerGetPhonePendantDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Player/HandlerGetPhotoDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Player/HandlerGetPlayerCardReq.cs create mode 100644 GameServer/Server/Packet/Recv/Player/HandlerGetPlayerTokenReq.cs create mode 100644 GameServer/Server/Packet/Recv/Player/HandlerGetRegionUidRangeReq.cs create mode 100644 GameServer/Server/Packet/Recv/Player/HandlerGetThemeDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Player/HandlerPlayerLoginReq.cs create mode 100644 GameServer/Server/Packet/Recv/Player/HandlerSyncTimeReq.cs create mode 100644 GameServer/Server/Packet/Recv/Player/HandlerTakeGalInteractTriggerEventReq.cs create mode 100644 GameServer/Server/Packet/Recv/Product/HandlerGetCardProductInfoReq.cs create mode 100644 GameServer/Server/Packet/Recv/Stage/HandlerGetStageActDifficultyReq.cs create mode 100644 GameServer/Server/Packet/Recv/Stage/HandlerGetStageChapterReq.cs create mode 100644 GameServer/Server/Packet/Recv/Stage/HandlerGetStageDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Stage/HandlerGetStageDropDisplayReq.cs create mode 100644 GameServer/Server/Packet/Recv/Stage/HandlerGetStageRecommendAvatarReq.cs create mode 100644 GameServer/Server/Packet/Recv/Stage/HandlerStageBeginReq.cs create mode 100644 GameServer/Server/Packet/Recv/Stage/HandlerStageEndReq.cs create mode 100644 GameServer/Server/Packet/Recv/Stage/HandlerStageInnerDataReportReq.cs create mode 100644 GameServer/Server/Packet/Recv/Story/HandlerGetExtraStoryDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerGetWebActivityInfoReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerGetWeekDayActivityDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerGetWeeklyReportReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerGetWeeklyRoutineActivityReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerGetWikiDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerGetWorldMapDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerGetWorldMapRecommendReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerGrandKeyActivateSkillReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerLoginWishGetMainDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerOpenworldGetMechaTeamReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerOpenworldHuntActivityGetDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerRaidReplaceGetDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerRefineStigmataRuneReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerRefreshAvatarSkillReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerReunionCookGetActivityReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerSanctuaryGetMainInfoReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerSelectGodWarChallengeAvatarReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerSelectNewStigmataRuneReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerSetDressReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerSetWarshipReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerSimplifiedGodWarGetActivityReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerSusannaTrialGetActivityReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerThemeWantedRefreshTicketReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerTriggerGodWarEventReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerUltraEndlessEnterSiteReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerUltraEndlessGetMainDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerUltraEndlessGetTopRankReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerUltraEndlessReportSiteFloorReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerUpdateMissionProgressReq.cs create mode 100644 GameServer/Server/Packet/Recv/Test/HandlerWaveRushGetActivityReq.cs create mode 100644 GameServer/Server/Packet/Recv/Warship/HandlerGetWarshipDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Warship/HandlerGetWarshipItemDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Warship/HandlerGetWarshipTrialDataReq.cs create mode 100644 GameServer/Server/Packet/Recv/Warship/HandlerSetWarshipAvatarReq.cs create mode 100644 GameServer/Server/Packet/Send/Activity/PacketArkPlusActivityGetDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Activity/PacketBuffAssistGetActivityRsp.cs create mode 100644 GameServer/Server/Packet/Send/Activity/PacketGeneralActivityGetMainInfoRsp.cs create mode 100644 GameServer/Server/Packet/Send/Activity/PacketGeneralActivityGetScheduleRsp.cs create mode 100644 GameServer/Server/Packet/Send/Activity/PacketGetActivityMainDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Activity/PacketGetActivityRewardStatisticDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Activity/PacketGetBulletinActivityMissionRsp.cs create mode 100644 GameServer/Server/Packet/Send/Activity/PacketGetBulletinRsp.cs create mode 100644 GameServer/Server/Packet/Send/Activity/PacketGetChapterActivityDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Activity/PacketGetChapterCompensationInfoRsp.cs create mode 100644 GameServer/Server/Packet/Send/Activity/PacketGetDropLimitActivityRsp.cs create mode 100644 GameServer/Server/Packet/Send/Activity/PacketGetExtractReforgeActivityRsp.cs create mode 100644 GameServer/Server/Packet/Send/Activity/PacketGetFarmActivityDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Activity/PacketGetGardenScheduleRsp.cs create mode 100644 GameServer/Server/Packet/Send/Activity/PacketGetInviteActivityInviteeDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Activity/PacketGetInviteActivityInviterDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Activity/PacketGetLoginActivityRsp.cs create mode 100644 GameServer/Server/Packet/Send/Activity/PacketGetMosaicActivityRsp.cs create mode 100644 GameServer/Server/Packet/Send/Activity/PacketGetNewbieActivityRsp.cs create mode 100644 GameServer/Server/Packet/Send/Activity/PacketGetNinjaActivityRsp.cs create mode 100644 GameServer/Server/Packet/Send/Activity/PacketGetThemeWantedRsp.cs create mode 100644 GameServer/Server/Packet/Send/Adventure/PacketGetAdventureGroupRsp.cs create mode 100644 GameServer/Server/Packet/Send/Adventure/PacketGetAdventureStorySweepInfoRsp.cs create mode 100644 GameServer/Server/Packet/Send/Adventure/PacketGetConsignedOrderDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Armada/PacketGetArmadaActivityListRsp.cs create mode 100644 GameServer/Server/Packet/Send/Armada/PacketGetArmadaDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Armada/PacketGetArmadaStageScoreActivityRsp.cs create mode 100644 GameServer/Server/Packet/Send/Auth/PacketGetAuthkeyRsp.cs create mode 100644 GameServer/Server/Packet/Send/Avatar/PacketAddCustomAvatarTeamRsp.cs create mode 100644 GameServer/Server/Packet/Send/Avatar/PacketAvatarSubSkillLevelUpRsp.cs create mode 100644 GameServer/Server/Packet/Send/Avatar/PacketDelCustomAvatarTeamRsp.cs create mode 100644 GameServer/Server/Packet/Send/Avatar/PacketDressEquipmentRsp.cs create mode 100644 GameServer/Server/Packet/Send/Avatar/PacketGetAvatarDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Avatar/PacketGetAvatarMissionActivityRsp.cs create mode 100644 GameServer/Server/Packet/Send/Avatar/PacketGetAvatarRollDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Avatar/PacketGetAvatarTeamDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Avatar/PacketUpdateCustomAvatarTeamRsp.cs create mode 100644 GameServer/Server/Packet/Send/Battle/PacketGetBuffEffectRsp.cs create mode 100644 GameServer/Server/Packet/Send/BattlePass/PacketGetBattlePassMissionPanelRsp.cs create mode 100644 GameServer/Server/Packet/Send/Challenge/PacketGetChallengeStepCompensationInfoRsp.cs create mode 100644 GameServer/Server/Packet/Send/Chapter/PacketChapterArkGetDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Chapter/PacketChapterBwWorldGetDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Chapter/PacketChapterGroupGetDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Chapter/PacketChapterKnightRichManGetDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Chapter/PacketGetEliteChapterCompensationInfoRsp.cs create mode 100644 GameServer/Server/Packet/Send/Chat/PacketChatworldBeastGetActivityRsp.cs create mode 100644 GameServer/Server/Packet/Send/Chat/PacketChatworldGetActivityScheduleRsp.cs create mode 100644 GameServer/Server/Packet/Send/Chat/PacketChatworldGetPrayInfoRsp.cs create mode 100644 GameServer/Server/Packet/Send/Chat/PacketEnterWorldChatroomRsp.cs create mode 100644 GameServer/Server/Packet/Send/Chat/PacketGetChatgroupListRsp.cs create mode 100644 GameServer/Server/Packet/Send/Client/PacketClientReportRsp.cs create mode 100644 GameServer/Server/Packet/Send/Client/PacketGetClientDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Client/PacketGetClientMailDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Client/PacketGetClientSettingRsp.cs create mode 100644 GameServer/Server/Packet/Send/Client/PacketReportClientDataVersionRsp.cs create mode 100644 GameServer/Server/Packet/Send/Client/PacketSetClientDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Collection/PacketGetCollectionListRsp.cs create mode 100644 GameServer/Server/Packet/Send/DLC/PacketGetDLCAvatarRsp.cs create mode 100644 GameServer/Server/Packet/Send/DLC/PacketGetDLCRsp.cs create mode 100644 GameServer/Server/Packet/Send/DLC/PacketGetDLCTowerRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dorm/PacketGetDormDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetPlotListRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetPrivilegeInfoRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetProductListRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetProductRecommendListRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetRaffleActivityRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetRankScheduleDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetRecommendFriendListRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetRecommendGoodsRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetRewardLineActivityRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetRoomDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetRpgTaleRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetScratchTicketRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetSecurityPasswordRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetShopListRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetShoppingMallListRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetSupportActivityRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetSurveyDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetTowerRaidActivityRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetTradingCardActivityRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetTrialAvatarRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetVipRewardDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Dummy/PacketGetVirtualAvatarGroupDetailRsp.cs create mode 100644 GameServer/Server/Packet/Send/Elf/PacketGetElfDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Endless/PacketGetEndlessStatusRsp.cs create mode 100644 GameServer/Server/Packet/Send/Event/PacketGetGalInteractTriggerEventRsp.cs create mode 100644 GameServer/Server/Packet/Send/ExBoss/PacketExBossStageBeginRsp.cs create mode 100644 GameServer/Server/Packet/Send/ExBoss/PacketExBossStageEndRsp.cs create mode 100644 GameServer/Server/Packet/Send/ExBoss/PacketGetExBossInfoRsp.cs create mode 100644 GameServer/Server/Packet/Send/ExBoss/PacketGetExBossRankRsp.cs create mode 100644 GameServer/Server/Packet/Send/ExBoss/PacketGetExBossScheduleRsp.cs create mode 100644 GameServer/Server/Packet/Send/Exchange/PacketGetCurrencyExchangeInfoRsp.cs create mode 100644 GameServer/Server/Packet/Send/Friend/PacketGetAskAddFriendListRsp.cs create mode 100644 GameServer/Server/Packet/Send/Friend/PacketGetFriendListRsp.cs create mode 100644 GameServer/Server/Packet/Send/Friend/PacketGetFriendRemarkListRsp.cs create mode 100644 GameServer/Server/Packet/Send/Gacha/PacketGetGachaDisplayRsp.cs create mode 100644 GameServer/Server/Packet/Send/GodWar/PacketGetGobackRsp.cs create mode 100644 GameServer/Server/Packet/Send/GodWar/PacketGetGodWarLobbyRsp.cs create mode 100644 GameServer/Server/Packet/Send/GodWar/PacketGetGodWarRsp.cs create mode 100644 GameServer/Server/Packet/Send/GodWar/PacketGetGrandKeyRsp.cs create mode 100644 GameServer/Server/Packet/Send/GodWar/PacketRefreshGodWarTicketRsp.cs create mode 100644 GameServer/Server/Packet/Send/Goods/PacketAddGoodfeelRsp.cs create mode 100644 GameServer/Server/Packet/Send/Guide/PacketFinishGuideReportRsp.cs create mode 100644 GameServer/Server/Packet/Send/Guide/PacketGetFinishGuideDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Item/PacketGetEquipmentDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Item/PacketGetEquipmentForgeDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Item/PacketGetHasGotFurnitureIdListRsp.cs create mode 100644 GameServer/Server/Packet/Send/Item/PacketGetHasGotItemIdListRsp.cs create mode 100644 GameServer/Server/Packet/Send/MasterPupil/PacketGetMasterPupilApplyRsp.cs create mode 100644 GameServer/Server/Packet/Send/MasterPupil/PacketGetMasterPupilCardRsp.cs create mode 100644 GameServer/Server/Packet/Send/MasterPupil/PacketGetMasterPupilDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/MasterPupil/PacketGetMasterPupilMainDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Mission/PacketGetMissionDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Mission/PacketGetMissionGroupMainInfoRsp.cs create mode 100644 GameServer/Server/Packet/Send/Mission/PacketGetMissionThemeDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Mission/PacketGetRecommendMissionPanelListRsp.cs create mode 100644 GameServer/Server/Packet/Send/OpenWorld/PacketGetNewOpenworldRsp.cs create mode 100644 GameServer/Server/Packet/Send/OpenWorld/PacketGetOpenworldEndlessDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/OpenWorld/PacketGetOpenworldMechaDefenseRsp.cs create mode 100644 GameServer/Server/Packet/Send/OpenWorld/PacketGetOpenworldQuestActivityRsp.cs create mode 100644 GameServer/Server/Packet/Send/Pjms/PacketPjmsGetAchievementDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Pjms/PacketPjmsGetActivityPanelRsp.cs create mode 100644 GameServer/Server/Packet/Send/Pjms/PacketPjmsGetChapterDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Pjms/PacketPjmsGetConditionDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Pjms/PacketPjmsGetCurWorldRsp.cs create mode 100644 GameServer/Server/Packet/Send/Pjms/PacketPjmsGetMainDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Pjms/PacketPjmsGetResidentStageDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Pjms/PacketPjmsGetStoryDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Player/PacketGetAssistantFrozenListRsp.cs create mode 100644 GameServer/Server/Packet/Send/Player/PacketGetBlackListRsp.cs create mode 100644 GameServer/Server/Packet/Send/Player/PacketGetConfigRsp.cs create mode 100644 GameServer/Server/Packet/Send/Player/PacketGetCustomHeadDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Player/PacketGetEmojiDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Player/PacketGetFrameDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Player/PacketGetMainDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Player/PacketGetMedalDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Player/PacketGetOfflineResourceDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Player/PacketGetPediaRsp.cs create mode 100644 GameServer/Server/Packet/Send/Player/PacketGetPhonePendantDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Player/PacketGetPhotoDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Player/PacketGetPlayerCardRsp.cs create mode 100644 GameServer/Server/Packet/Send/Player/PacketGetPlayerTokenRsp.cs create mode 100644 GameServer/Server/Packet/Send/Player/PacketGetRegionUidRangeRsp.cs create mode 100644 GameServer/Server/Packet/Send/Player/PacketGetThemeDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Player/PacketPlayerLoginRsp.cs create mode 100644 GameServer/Server/Packet/Send/Player/PacketSyncTimeRsp.cs create mode 100644 GameServer/Server/Packet/Send/Player/PacketTakeGalInteractTriggerEventRsp.cs create mode 100644 GameServer/Server/Packet/Send/Product/PacketGetCardProductInfoRsp.cs create mode 100644 GameServer/Server/Packet/Send/Stage/PacketGetStageActDifficultyRsp.cs create mode 100644 GameServer/Server/Packet/Send/Stage/PacketGetStageChapterRsp.cs create mode 100644 GameServer/Server/Packet/Send/Stage/PacketGetStageDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Stage/PacketGetStageDropDisplayRsp.cs create mode 100644 GameServer/Server/Packet/Send/Stage/PacketGetStageRecommendAvatarRsp.cs create mode 100644 GameServer/Server/Packet/Send/Stage/PacketStageBeginRsp.cs create mode 100644 GameServer/Server/Packet/Send/Stage/PacketStageEndRsp.cs create mode 100644 GameServer/Server/Packet/Send/Stage/PacketStageInnerDataReportRsp.cs create mode 100644 GameServer/Server/Packet/Send/Story/PacketGetExtraStoryDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketGetWebActivityInfoRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketGetWeekDayActivityDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketGetWeeklyReportRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketGetWeeklyRoutineActivityRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketGetWikiDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketGetWorldMapDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketGetWorldMapRecommendRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketGrandKeyActivateSkillRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketLoginWishGetMainDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketOpenworldGetMechaTeamRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketOpenworldHuntActivityGetDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketRaidReplaceGetDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketRefineStigmataRuneRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketRefreshAvatarSkillRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketReunionCookGetActivityRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketSanctuaryGetMainInfoRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketSelectGodWarChallengeAvatarRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketSelectNewStigmataRuneRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketSetDressRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketSetWarshipAvatarRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketSetWarshipRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketSimplifiedGodWarGetActivityRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketSusannaTrialGetActivityRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketThemeWantedRefreshTicketRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketTriggerGodWarEventRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketUltraEndlessEnterSiteRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketUltraEndlessGetMainDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketUltraEndlessGetTopRankRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketUltraEndlessReportSiteFloorRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketUpdateMissionProgressRsp.cs create mode 100644 GameServer/Server/Packet/Send/Test/PacketWaveRushGetActivityRsp.cs create mode 100644 GameServer/Server/Packet/Send/Warship/PacketGetWarshipDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Warship/PacketGetWarshipItemDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Warship/PacketGetWarshipTrialDataRsp.cs create mode 100644 GameServer/Server/Packet/Send/Warship/PacketSetWarshipAvatarRsp.cs create mode 100644 KcpSharp/Base/ArrayMemoryOwner.cs create mode 100644 KcpSharp/Base/AsyncAutoResetEvent.cs create mode 100644 KcpSharp/Base/DefaultArrayPoolBufferAllocator.cs create mode 100644 KcpSharp/Base/IKcpBufferPool.cs create mode 100644 KcpSharp/Base/IKcpConversation.cs create mode 100644 KcpSharp/Base/IKcpConversationUpdateNotificationSource.cs create mode 100644 KcpSharp/Base/IKcpExceptionProducer.cs create mode 100644 KcpSharp/Base/IKcpMultiplexConnection.cs create mode 100644 KcpSharp/Base/IKcpMultiplexConnectionOfT.cs create mode 100644 KcpSharp/Base/IKcpTransport.cs create mode 100644 KcpSharp/Base/IKcpTransportOfT.cs create mode 100644 KcpSharp/Base/KcpAcknowledgeList.cs create mode 100644 KcpSharp/Base/KcpBuffer.cs create mode 100644 KcpSharp/Base/KcpBufferPoolRentOptions.cs create mode 100644 KcpSharp/Base/KcpCommand.cs create mode 100644 KcpSharp/Base/KcpConversation.FlushAsyncMethodBuilder.cs create mode 100644 KcpSharp/Base/KcpConversation.cs create mode 100644 KcpSharp/Base/KcpConversationOptions.cs create mode 100644 KcpSharp/Base/KcpConversationReceiveResult.cs create mode 100644 KcpSharp/Base/KcpConversationUpdateActivation.cs create mode 100644 KcpSharp/Base/KcpConversationUpdateNotification.cs create mode 100644 KcpSharp/Base/KcpExceptionProducerExtensions.cs create mode 100644 KcpSharp/Base/KcpGlobalVars.cs create mode 100644 KcpSharp/Base/KcpKeepAliveOptions.cs create mode 100644 KcpSharp/Base/KcpMultiplexConnection.cs create mode 100644 KcpSharp/Base/KcpPacketHeader.cs create mode 100644 KcpSharp/Base/KcpProbeType.cs create mode 100644 KcpSharp/Base/KcpRawChannel.cs create mode 100644 KcpSharp/Base/KcpRawChannelOptions.cs create mode 100644 KcpSharp/Base/KcpRawReceiveQueue.cs create mode 100644 KcpSharp/Base/KcpRawSendOperation.cs create mode 100644 KcpSharp/Base/KcpReceiveQueue.cs create mode 100644 KcpSharp/Base/KcpReceiveWindowNotificationOptions.cs create mode 100644 KcpSharp/Base/KcpRentedBuffer.cs create mode 100644 KcpSharp/Base/KcpSendQueue.cs create mode 100644 KcpSharp/Base/KcpSendReceiveBufferItem.cs create mode 100644 KcpSharp/Base/KcpSendReceiveBufferItemCache.cs create mode 100644 KcpSharp/Base/KcpSendReceiveQueueItemCache.cs create mode 100644 KcpSharp/Base/KcpSendSegmentStats.cs create mode 100644 KcpSharp/Base/KcpSocketTransport.cs create mode 100644 KcpSharp/Base/KcpSocketTransportForConversation.cs create mode 100644 KcpSharp/Base/KcpSocketTransportForMultiplexConnection.cs create mode 100644 KcpSharp/Base/KcpSocketTransportForRawChannel.cs create mode 100644 KcpSharp/Base/KcpSocketTransportOfT.cs create mode 100644 KcpSharp/Base/KcpStream.cs create mode 100644 KcpSharp/Base/NetstandardShim/AwaitableSocketAsyncEventArgs.cs create mode 100644 KcpSharp/Base/NetstandardShim/CancellationTokenShim.cs create mode 100644 KcpSharp/Base/NetstandardShim/LinkedListNetstandard.cs create mode 100644 KcpSharp/Base/NetstandardShim/TaskCompletionSource.cs create mode 100644 KcpSharp/Base/ThrowHelper.cs create mode 100644 KcpSharp/BasePacket.cs create mode 100644 KcpSharp/KcpConnection.cs create mode 100644 KcpSharp/KcpListener.cs create mode 100644 KcpSharp/KcpSharp.csproj create mode 100644 KcpSharp/SessionStateEnum.cs create mode 100644 KianaBH.sln create mode 100644 KianaBH/KianaBH.csproj create mode 100644 KianaBH/Program/KianaBH.cs create mode 100644 KianaBH/Program/LoaderManager.cs create mode 100644 KianaBH/Properties/PublishProfiles/KianaBH-Win64-Debug.pubxml create mode 100644 KianaBH/Properties/PublishProfiles/KianaBH-Win64-MultiFile.pubxml create mode 100644 KianaBH/Properties/PublishProfiles/KianaBH-Win64-OneFile.pubxml create mode 100644 KianaBH/Source/Kiana.ico create mode 100644 KianaBH/Tool/AssemblyGenerater.cs create mode 100644 KianaBH/Tool/HandbookGenerator.cs create mode 100644 Proto/BH3.proto create mode 100644 Proto/CmdIds.cs create mode 100644 Proto/Proto.csproj create mode 100644 SdkServer/Handlers/Dispatch/QueryDispatchController.cs create mode 100644 SdkServer/Handlers/Dispatch/QueryGatewayController.cs create mode 100644 SdkServer/Handlers/Sdk/AbTestController.cs create mode 100644 SdkServer/Handlers/Sdk/ComboGranterController.cs create mode 100644 SdkServer/Handlers/Sdk/DeviceFingerprintController.cs create mode 100644 SdkServer/Handlers/Sdk/GameWeatherController.cs create mode 100644 SdkServer/Handlers/Sdk/LogDataUploadController.cs create mode 100644 SdkServer/Handlers/Sdk/MaPassportController.cs create mode 100644 SdkServer/Handlers/Sdk/MdkController.cs create mode 100644 SdkServer/Handlers/Sdk/RiskyController.cs create mode 100644 SdkServer/SdkServer.cs create mode 100644 SdkServer/SdkServer.csproj diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..3d4d3e3 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,125 @@ +[*.cs] + +# IDE0022: 使用方法的程序块主体 +csharp_style_expression_bodied_methods = false:silent + +[*.cs] +#### 命名样式 #### + +# 命名规则 + +dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion +dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface +dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i + +dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.types_should_be_pascal_case.symbols = types +dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case + +dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members +dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case + +# 符号规范 + +dotnet_naming_symbols.interface.applicable_kinds = interface +dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.interface.required_modifiers = + +dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum +dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.types.required_modifiers = + +dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method +dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.non_field_members.required_modifiers = + +# 命名样式 + +dotnet_naming_style.begins_with_i.required_prefix = I +dotnet_naming_style.begins_with_i.required_suffix = +dotnet_naming_style.begins_with_i.word_separator = +dotnet_naming_style.begins_with_i.capitalization = pascal_case + +dotnet_naming_style.pascal_case.required_prefix = +dotnet_naming_style.pascal_case.required_suffix = +dotnet_naming_style.pascal_case.word_separator = +dotnet_naming_style.pascal_case.capitalization = pascal_case + +dotnet_naming_style.pascal_case.required_prefix = +dotnet_naming_style.pascal_case.required_suffix = +dotnet_naming_style.pascal_case.word_separator = +dotnet_naming_style.pascal_case.capitalization = pascal_case +csharp_using_directive_placement = outside_namespace:silent +csharp_style_expression_bodied_constructors = false:silent +csharp_style_expression_bodied_operators = false:silent +csharp_style_expression_bodied_properties = true:silent +csharp_style_expression_bodied_indexers = true:silent +csharp_style_expression_bodied_accessors = true:silent +csharp_style_expression_bodied_lambdas = true:silent +csharp_style_expression_bodied_local_functions = false:silent +csharp_style_conditional_delegate_call = true:suggestion +csharp_style_var_for_built_in_types = false:silent +csharp_style_var_when_type_is_apparent = false:silent +csharp_style_var_elsewhere = false:silent +csharp_prefer_simple_using_statement = true:suggestion +csharp_space_around_binary_operators = before_and_after +csharp_indent_labels = one_less_than_current + +[*.vb] +#### 命名样式 #### + +# 命名规则 + +dotnet_naming_rule.interface_should_be_以_i_开始.severity = suggestion +dotnet_naming_rule.interface_should_be_以_i_开始.symbols = interface +dotnet_naming_rule.interface_should_be_以_i_开始.style = 以_i_开始 + +dotnet_naming_rule.类型_should_be_帕斯卡拼写法.severity = suggestion +dotnet_naming_rule.类型_should_be_帕斯卡拼写法.symbols = 类型 +dotnet_naming_rule.类型_should_be_帕斯卡拼写法.style = 帕斯卡拼写法 + +dotnet_naming_rule.非字段成员_should_be_帕斯卡拼写法.severity = suggestion +dotnet_naming_rule.非字段成员_should_be_帕斯卡拼写法.symbols = 非字段成员 +dotnet_naming_rule.非字段成员_should_be_帕斯卡拼写法.style = 帕斯卡拼写法 + +# 符号规范 + +dotnet_naming_symbols.interface.applicable_kinds = interface +dotnet_naming_symbols.interface.applicable_accessibilities = public, friend, private, protected, protected_friend, private_protected +dotnet_naming_symbols.interface.required_modifiers = + +dotnet_naming_symbols.类型.applicable_kinds = class, struct, interface, enum +dotnet_naming_symbols.类型.applicable_accessibilities = public, friend, private, protected, protected_friend, private_protected +dotnet_naming_symbols.类型.required_modifiers = + +dotnet_naming_symbols.非字段成员.applicable_kinds = property, event, method +dotnet_naming_symbols.非字段成员.applicable_accessibilities = public, friend, private, protected, protected_friend, private_protected +dotnet_naming_symbols.非字段成员.required_modifiers = + +# 命名样式 + +dotnet_naming_style.以_i_开始.required_prefix = I +dotnet_naming_style.以_i_开始.required_suffix = +dotnet_naming_style.以_i_开始.word_separator = +dotnet_naming_style.以_i_开始.capitalization = pascal_case + +dotnet_naming_style.帕斯卡拼写法.required_prefix = +dotnet_naming_style.帕斯卡拼写法.required_suffix = +dotnet_naming_style.帕斯卡拼写法.word_separator = +dotnet_naming_style.帕斯卡拼写法.capitalization = pascal_case + +dotnet_naming_style.帕斯卡拼写法.required_prefix = +dotnet_naming_style.帕斯卡拼写法.required_suffix = +dotnet_naming_style.帕斯卡拼写法.word_separator = +dotnet_naming_style.帕斯卡拼写法.capitalization = pascal_case + +[*.{cs,vb}] +end_of_line = crlf +dotnet_style_qualification_for_field = false:silent +dotnet_style_qualification_for_property = false:silent +dotnet_style_qualification_for_method = false:silent +dotnet_style_qualification_for_event = false:silent +tab_width = 4 +indent_size = 4 +dotnet_style_operator_placement_when_wrapping = beginning_of_line \ No newline at end of file diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4207fbf --- /dev/null +++ b/.gitignore @@ -0,0 +1,370 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Oo]ut/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +.idea/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +[Ll]aunchSettings.json +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +# *.pubxml +# *.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# Special Files +/SdkServer/Properties +/GameServer/OriginalProto +*.rar \ No newline at end of file diff --git a/Common/Common.csproj b/Common/Common.csproj new file mode 100644 index 0000000..068792b --- /dev/null +++ b/Common/Common.csproj @@ -0,0 +1,36 @@ + + + + net9.0 + enable + enable + false + KianaBH + KianaCommon + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Common/Configuration/ConfigContainer.cs b/Common/Configuration/ConfigContainer.cs new file mode 100644 index 0000000..0b440d9 --- /dev/null +++ b/Common/Configuration/ConfigContainer.cs @@ -0,0 +1,84 @@ +namespace KianaBH.Configuration; + +public class ConfigContainer +{ + public HttpServerConfig HttpServer { get; set; } = new(); + public GameServerConfig GameServer { get; set; } = new(); + public PathConfig Path { get; set; } = new(); + public ServerOption ServerOption { get; set; } = new(); +} + +public class HttpServerConfig +{ + public string BindAddress { get; set; } = "0.0.0.0"; + public string PublicAddress { get; set; } = "127.0.0.1"; + public int Port { get; set; } = 80; + + public string GetDisplayAddress() + { + return "http" + "://" + PublicAddress + ":" + Port; + } + + public string GetBindDisplayAddress() + { + return "http" + "://" + BindAddress + ":" + Port; + } +} + +public class GameServerConfig +{ + public string BindAddress { get; set; } = "0.0.0.0"; + public string PublicAddress { get; set; } = "127.0.0.1"; + public int Port { get; set; } = 21000; + public int KcpAliveMs { get; set; } = 45000; + public string DatabaseName { get; set; } = "kiana.db"; + public string GameServerId { get; set; } = "KianaBH"; + public string GameServerName { get; set; } = "KianaBH"; + public string GetDisplayAddress() + { + return PublicAddress + ":" + Port; + } +} + +public class PathConfig +{ + public string ResourcePath { get; set; } = "Resources"; + public string ConfigPath { get; set; } = "Config"; + public string DatabasePath { get; set; } = "Config/Database"; + public string HandbookPath { get; set; } = "Config/Handbook"; + public string LogPath { get; set; } = "Config/Logs"; + public string DataPath { get; set; } = "Config/Data"; +} + +public class ServerOption +{ + public bool EnableMission { get; set; } = false; + public string DefaultGender { get; set; } = "Woman"; + public string Language { get; set; } = "EN"; + public string FallbackLanguage { get; set; } = "EN"; + public string[] DefaultPermissions { get; set; } = ["Admin"]; + public ServerProfile ServerProfile { get; set; } = new(); + public bool AutoCreateUser { get; set; } = true; + public bool SavePersonalDebugFile { get; set; } = false; + public bool AutoSendResponseWhenNoHandler { get; set; } = true; +#if DEBUG + public bool EnableDebug { get; set; } = true; +#else + public bool EnableDebug { get; set; } = false; +#endif + public bool DebugMessage { get; set; } = true; + public bool DebugDetailMessage { get; set; } = true; + public bool DebugNoHandlerPacket { get; set; } = true; +} + +public class ServerProfile +{ + public string Name { get; set; } = "Server"; + public int Uid { get; set; } = 80; + public string Signature { get; set; } = "Type /help for a list of commands"; + public int Level { get; set; } = 1; + public int HeadIcon { get; set; } = 200105; + public int ChatBubbleId { get; set; } = 220001; + public int DisplayAvatarId { get; set; } = 1001; + public int DisplayAvatarLevel { get; set; } = 1; +} \ No newline at end of file diff --git a/Common/Configuration/HotfixContainer.cs b/Common/Configuration/HotfixContainer.cs new file mode 100644 index 0000000..0e3d60d --- /dev/null +++ b/Common/Configuration/HotfixContainer.cs @@ -0,0 +1,75 @@ +using System.Text.Json.Serialization; +using Newtonsoft.Json; + +namespace KianaBH.Configuration; + +public class HotfixContainer +{ + public bool UseLocalCache { get; set; } = false; + public Dictionary Hotfixes { get; set; } = new(); + public Dictionary AesKeys { get; set; } = new (); + + public static string ExtractVersionNumber(string? version) + { + try + { + return version == null ? "" : version[..version.IndexOf('_')]; + } + catch + { + return ""; + } + } +} + +public class HotfixManfiset +{ + [JsonPropertyName("Asb")] public AsbData Asb { get; set; } = new(); + [JsonPropertyName("AsbPreDownload")] public AsbPreDownloadData AsbPreDownload { get; set; } = new(); + [JsonPropertyName("Audio")] public AudioData Audio { get; set; } = new(); + [JsonPropertyName("AudioPreDownload")] public AudioPreDownloadData AudioPreDownload { get; set; } = new(); + [JsonPropertyName("VideoEncrypt")] public VideoEncryptData VideoEncrypt { get; set; } = new(); +} + +public class AsbData +{ + [JsonPropertyName("android")] public PlatformInfo Android { get; set; } = new(); + [JsonPropertyName("iphone")] public PlatformInfo Iphone { get; set; } = new(); + [JsonPropertyName("pc")] public PlatformInfo Pc { get; set; } = new(); +} + +public class AsbPreDownloadData +{ + [JsonPropertyName("android")] public PlatformEncryptedInfo Android { get; set; } = new(); + [JsonPropertyName("iphone")] public PlatformEncryptedInfo Iphone { get; set; } = new(); +} + +public class AudioData +{ + [JsonPropertyName("platform")] public Dictionary Platform { get; set; } = new(); + [JsonPropertyName("revision")] public int Revision { get; set; } +} + +public class AudioPreDownloadData +{ + [JsonPropertyName("enable_time")] public long EnableTime { get; set; } + [JsonPropertyName("platform")] public Dictionary Platform { get; set; } = new(); + [JsonPropertyName("revision")] public int Revision { get; set; } +} + +public class VideoEncryptData +{ + [JsonPropertyName("filename")] public string FileName { get; set; } = ""; +} + +public class PlatformInfo +{ + [JsonPropertyName("enable_time")] public long EnableTime { get; set; } + [JsonPropertyName("revision")] public string Revision { get; set; } = ""; + [JsonPropertyName("suffix")] public string Suffix { get; set; } = ""; +} + +public class PlatformEncryptedInfo : PlatformInfo +{ + [JsonPropertyName("encrypt_key")] public string EncryptKey { get; set; } = ""; +} \ No newline at end of file diff --git a/Common/Data/Config/TimeStampConfig.cs b/Common/Data/Config/TimeStampConfig.cs new file mode 100644 index 0000000..68d1bc6 --- /dev/null +++ b/Common/Data/Config/TimeStampConfig.cs @@ -0,0 +1,7 @@ +namespace KianaBH.Data.Config; + +public class TimestampConfig +{ + public uint TimeStampForBakedReader { get; set; } +} + diff --git a/Common/Data/Excel/ActChallengeDataExcel.cs b/Common/Data/Excel/ActChallengeDataExcel.cs new file mode 100644 index 0000000..4818146 --- /dev/null +++ b/Common/Data/Excel/ActChallengeDataExcel.cs @@ -0,0 +1,24 @@ +using System.Text.Json.Serialization; + +namespace KianaBH.Data.Excel; + +[ResourceEntity("ActChallengeData.json")] +public class ActChallengeDataExcel : ExcelResource +{ + [JsonPropertyName("actId")] public uint ActId { get; set; } + [JsonPropertyName("difficulty")] public uint Difficulty { get; set; } + + public override int GetId() + { + return (int)ActId; + } + + public override void Loaded() + { + if (!GameData.ActChallengeData.ContainsKey(GetId())) + { + GameData.ActChallengeData[GetId()] = new List(); + } + GameData.ActChallengeData[GetId()].Add(this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/ActivityTowerExcel.cs b/Common/Data/Excel/ActivityTowerExcel.cs new file mode 100644 index 0000000..eda089a --- /dev/null +++ b/Common/Data/Excel/ActivityTowerExcel.cs @@ -0,0 +1,17 @@ +namespace KianaBH.Data.Excel; + +[ResourceEntity("ActivityTower.json")] +public class ActivityTowerExcel : ExcelResource +{ + public uint ActivityID { get; set; } + + public override int GetId() + { + return (int)ActivityID; + } + + public override void Loaded() + { + GameData.ActivityTowerData.Add(GetId(), this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/AffixListExcel.cs b/Common/Data/Excel/AffixListExcel.cs new file mode 100644 index 0000000..8bdfa69 --- /dev/null +++ b/Common/Data/Excel/AffixListExcel.cs @@ -0,0 +1,20 @@ +using System.Text.Json.Serialization; + +namespace KianaBH.Data.Excel; + +[ResourceEntity("AffixList.json")] +public class AffixListExcel : ExcelResource +{ + [JsonPropertyName("affixID")] public int AffixID { get; set; } + [JsonPropertyName("level")] public int Level { get; set; } + + public override int GetId() + { + return AffixID; + } + + public override void Loaded() + { + GameData.AffixListData.Add(AffixID, this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/AvatarDataExcel.cs b/Common/Data/Excel/AvatarDataExcel.cs new file mode 100644 index 0000000..2c75718 --- /dev/null +++ b/Common/Data/Excel/AvatarDataExcel.cs @@ -0,0 +1,27 @@ +using System.Text.Json.Serialization; + +namespace KianaBH.Data.Excel; + +[ResourceEntity("AvatarData.json")] +public class AvatarDataExcel : ExcelResource +{ + [JsonPropertyName("avatarID")] public int AvatarID { get; set; } + [JsonPropertyName("unlockStar")] public int UnlockStar { get; set; } + [JsonPropertyName("initialWeapon")] public int InitialWeapon { get; set; } + [JsonPropertyName("skillList")] public List SkillList { get; set; } = []; + public int DefaultDressId { get; set; } + + public override int GetId() + { + return AvatarID; + } + + public override void Loaded() + { + if (AvatarID != 316 && (AvatarID < 9000 || AvatarID > 20000)) + { + GameData.AvatarData.Add(AvatarID, this); + } + + } +} \ No newline at end of file diff --git a/Common/Data/Excel/AvatarSubSkillDataExcel.cs b/Common/Data/Excel/AvatarSubSkillDataExcel.cs new file mode 100644 index 0000000..45144f9 --- /dev/null +++ b/Common/Data/Excel/AvatarSubSkillDataExcel.cs @@ -0,0 +1,22 @@ +using System.Text.Json.Serialization; + +namespace KianaBH.Data.Excel; + +[ResourceEntity("AvatarSubSkillData.json")] +public class AvatarSubSkillDataExcel : ExcelResource +{ + [JsonPropertyName("skillId")] public int SkillId { get; set; } + [JsonPropertyName("unlockScoin")] public int UnlockScoin { get; set; } + [JsonPropertyName("maxLv")] public int MaxLv { get; set; } + [JsonPropertyName("avatarSubSkillId")] public int AvatarSubSkillId { get; set; } + + public override int GetId() + { + return AvatarSubSkillId; + } + + public override void Loaded() + { + GameData.AvatarSubSkillData.Add(AvatarSubSkillId, this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/AvatarTutorialExcel.cs b/Common/Data/Excel/AvatarTutorialExcel.cs new file mode 100644 index 0000000..f18d4d5 --- /dev/null +++ b/Common/Data/Excel/AvatarTutorialExcel.cs @@ -0,0 +1,17 @@ +namespace KianaBH.Data.Excel; + +[ResourceEntity("AvatarTutorial.json")] +public class AvatarTutorialExcel : ExcelResource +{ + public uint ActivityID { get; set; } + + public override int GetId() + { + return (int)ActivityID; + } + + public override void Loaded() + { + GameData.AvatarTutorialData.Add(GetId(), this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/ChapterGroupConfigExcel.cs b/Common/Data/Excel/ChapterGroupConfigExcel.cs new file mode 100644 index 0000000..50e18c9 --- /dev/null +++ b/Common/Data/Excel/ChapterGroupConfigExcel.cs @@ -0,0 +1,25 @@ +using KianaBH.Data.Config; + +namespace KianaBH.Data.Excel; + +[ResourceEntity("ChapterGroupConfig.json")] +public class ChapterGroupConfigExcel : ExcelResource +{ + public uint ID { get; set; } + public uint GroupType { get; set; } + public TimestampConfig? BeginShowTime { get; set; } + public TimestampConfig? BeginTime { get; set; } + public uint BeginShowLevel { get; set; } + public List SiteList { get; set; } = []; + public uint UnlockLevel { get; set; } + + public override int GetId() + { + return (int)ID; + } + + public override void Loaded() + { + GameData.ChapterGroupConfigData.Add(GetId(), this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/CityEventPhotoExcel.cs b/Common/Data/Excel/CityEventPhotoExcel.cs new file mode 100644 index 0000000..c27522c --- /dev/null +++ b/Common/Data/Excel/CityEventPhotoExcel.cs @@ -0,0 +1,21 @@ +using System.Text.Json.Serialization; +using KianaBH.Data.Config; + +namespace KianaBH.Data.Excel; + +[ResourceEntity("CityEventPhoto.json")] +public class CityEventPhotoExcel : ExcelResource +{ + public uint PhotoID { get; set; } + [JsonPropertyName("photoType")] public uint PhotoType { get; set; } + + public override int GetId() + { + return (int)PhotoID; + } + + public override void Loaded() + { + GameData.CityEventPhotoData.Add(GetId(), this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/CollectionExcel.cs b/Common/Data/Excel/CollectionExcel.cs new file mode 100644 index 0000000..542fc82 --- /dev/null +++ b/Common/Data/Excel/CollectionExcel.cs @@ -0,0 +1,17 @@ +namespace KianaBH.Data.Excel; + +[ResourceEntity("Collection.json")] +public class CollectionExcel : ExcelResource +{ + public int ID { get; set; } + + public override int GetId() + { + return ID; + } + + public override void Loaded() + { + GameData.CollectionData.Add(ID, this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/CustomHeadDataExcel.cs b/Common/Data/Excel/CustomHeadDataExcel.cs new file mode 100644 index 0000000..9382096 --- /dev/null +++ b/Common/Data/Excel/CustomHeadDataExcel.cs @@ -0,0 +1,19 @@ +using System.Text.Json.Serialization; + +namespace KianaBH.Data.Excel; + +[ResourceEntity("CustomHeadData.json")] +public class CustomHeadDataExcel : ExcelResource +{ + [JsonPropertyName("headID")] public uint HeadID { get; set; } + + public override int GetId() + { + return (int)HeadID; + } + + public override void Loaded() + { + GameData.CustomHeadData.Add(GetId(), this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/DressDataExcel.cs b/Common/Data/Excel/DressDataExcel.cs new file mode 100644 index 0000000..f64679f --- /dev/null +++ b/Common/Data/Excel/DressDataExcel.cs @@ -0,0 +1,20 @@ +using System.Text.Json.Serialization; + +namespace KianaBH.Data.Excel; + +[ResourceEntity("DressData.json")] +public class DressDataExcel : ExcelResource +{ + [JsonPropertyName("dressID")] public uint DressID { get; set; } + [JsonPropertyName("avatarIDList")] public List AvatarIDList { get; set; } = []; + + public override int GetId() + { + return (int)DressID; + } + + public override void Loaded() + { + GameData.DressData.Add(GetId(), this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/ElfAstraMateDataExcel.cs b/Common/Data/Excel/ElfAstraMateDataExcel.cs new file mode 100644 index 0000000..99484dd --- /dev/null +++ b/Common/Data/Excel/ElfAstraMateDataExcel.cs @@ -0,0 +1,30 @@ +using System.Text.Json.Serialization; + +namespace KianaBH.Data.Excel; + +[ResourceEntity("Elf_AstraMate_Data.json")] +public class ElfAstraMateDataExcel : ExcelResource +{ + public uint ElfID { get; set; } + public uint MaxLevel { get; set; } + public uint MaxRarity { get; set; } + + [JsonIgnore] public List SkillList = []; + + public override int GetId() + { + return (int)ElfID; + } + + public override void Loaded() + { + GameData.ElfAstraMateData.Add(GetId(), this); + } + + public override void AfterAllDone() + { + GameData.ElfSkillData.TryGetValue(GetId(), out var Skills); + if (Skills == null || !Skills.ElfIds.Contains(ElfID)) return; + SkillList.Add(Skills); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/ElfSkillDataExcel.cs b/Common/Data/Excel/ElfSkillDataExcel.cs new file mode 100644 index 0000000..4170876 --- /dev/null +++ b/Common/Data/Excel/ElfSkillDataExcel.cs @@ -0,0 +1,18 @@ +namespace KianaBH.Data.Excel; + +[ResourceEntity("ElfSkillData.json")] +public class ElfSkillDataExcel : ExcelResource +{ + public uint ElfSkillID { get; set; } + public uint MaxLv { get; set; } + public List ElfIds { get; set; } = []; + public override int GetId() + { + return (int)ElfSkillID; + } + + public override void Loaded() + { + GameData.ElfSkillData.Add(GetId(), this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/EntryThemeDataExcel.cs b/Common/Data/Excel/EntryThemeDataExcel.cs new file mode 100644 index 0000000..d5ac692 --- /dev/null +++ b/Common/Data/Excel/EntryThemeDataExcel.cs @@ -0,0 +1,18 @@ +namespace KianaBH.Data.Excel; + +[ResourceEntity("EntryThemeData.json")] +public class EntryThemeDataExcel : ExcelResource +{ + public uint SpaceShipConfigId { get; set; } + public List ThemeBgmConfigList { get; set; } = []; + public List ThemeTagList { get; set; } = []; + public override int GetId() + { + return (int)SpaceShipConfigId; + } + + public override void Loaded() + { + GameData.EntryThemeData.Add(GetId(), this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/EntryThemeItemDataExcel.cs b/Common/Data/Excel/EntryThemeItemDataExcel.cs new file mode 100644 index 0000000..aed66b7 --- /dev/null +++ b/Common/Data/Excel/EntryThemeItemDataExcel.cs @@ -0,0 +1,16 @@ +namespace KianaBH.Data.Excel; + +[ResourceEntity("EntryThemeItemData.json")] +public class EntryThemeItemDataExcel : ExcelResource +{ + public int ThemeItemID { get; set; } + public override int GetId() + { + return ThemeItemID; + } + + public override void Loaded() + { + GameData.EntryThemeItemData.Add(ThemeItemID, this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/FrameDataExcel.cs b/Common/Data/Excel/FrameDataExcel.cs new file mode 100644 index 0000000..cf97fc2 --- /dev/null +++ b/Common/Data/Excel/FrameDataExcel.cs @@ -0,0 +1,19 @@ +using System.Text.Json.Serialization; + +namespace KianaBH.Data.Excel; + +[ResourceEntity("FrameData.json")] +public class FrameDataExcel : ExcelResource +{ + [JsonPropertyName("id")] public uint Id { get; set; } + + public override int GetId() + { + return (int)Id; + } + + public override void Loaded() + { + GameData.FrameData.Add(GetId(), this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/GeneralActivityExcel.cs b/Common/Data/Excel/GeneralActivityExcel.cs new file mode 100644 index 0000000..8a1f1a6 --- /dev/null +++ b/Common/Data/Excel/GeneralActivityExcel.cs @@ -0,0 +1,18 @@ +namespace KianaBH.Data.Excel; + +[ResourceEntity("GeneralActivity.json")] +public class GeneralActivityExcel : ExcelResource +{ + public uint AcitivityID { get; set; } + public uint Series { get; set; } + + public override int GetId() + { + return (int)AcitivityID; + } + + public override void Loaded() + { + GameData.GeneralActivityData.Add(GetId(), this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/GeneralActivityStageGroupExcel.cs b/Common/Data/Excel/GeneralActivityStageGroupExcel.cs new file mode 100644 index 0000000..f0a8adb --- /dev/null +++ b/Common/Data/Excel/GeneralActivityStageGroupExcel.cs @@ -0,0 +1,24 @@ +using System; + +namespace KianaBH.Data.Excel; + +[ResourceEntity("GeneralActivityStageGroup.json")] +public class GeneralActivityStageGroupExcel : ExcelResource +{ + public uint AcitivityId { get; set; } + public uint StageGroupId { get; set; } + + public override int GetId() + { + return (int)AcitivityId; + } + + public override void Loaded() + { + if (!GameData.GeneralActivityStageGroupData.ContainsKey(GetId())) + { + GameData.GeneralActivityStageGroupData[GetId()] = new List(); + } + GameData.GeneralActivityStageGroupData[GetId()].Add(this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/GodWarEventExcel.cs b/Common/Data/Excel/GodWarEventExcel.cs new file mode 100644 index 0000000..4ab5f14 --- /dev/null +++ b/Common/Data/Excel/GodWarEventExcel.cs @@ -0,0 +1,20 @@ +namespace KianaBH.Data.Excel; + +[ResourceEntity("GodWarEvent.json")] +public class GodWarEventExcel : ExcelResource +{ + public uint EventID { get; set; } + public int EventType { get; set; } + public List ParamsVar { get; set; } = []; + + + public override int GetId() + { + return (int)EventID; + } + + public override void Loaded() + { + GameData.GodWarEventData.Add(GetId(), this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/GodWarMainAvatarExcel.cs b/Common/Data/Excel/GodWarMainAvatarExcel.cs new file mode 100644 index 0000000..16b807f --- /dev/null +++ b/Common/Data/Excel/GodWarMainAvatarExcel.cs @@ -0,0 +1,17 @@ +namespace KianaBH.Data.Excel; + +[ResourceEntity("GodWarMainAvatar.json")] +public class GodWarMainAvatarExcel : ExcelResource +{ + public int MainAvatarID { get; set; } + + public override int GetId() + { + return MainAvatarID; + } + + public override void Loaded() + { + GameData.GodWarMainAvatarData.Add(MainAvatarID, this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/GodWarRelationDataExcel.cs b/Common/Data/Excel/GodWarRelationDataExcel.cs new file mode 100644 index 0000000..f964bc7 --- /dev/null +++ b/Common/Data/Excel/GodWarRelationDataExcel.cs @@ -0,0 +1,20 @@ +namespace KianaBH.Data.Excel; + +[ResourceEntity("GodWarRelationData.json")] +public class GodWarRelationDataExcel : ExcelResource +{ + public int AvatarID { get; set; } + public int RoleID { get; set; } + public int Level { get; set; } + public int MaxLevel { get; set; } + + public override int GetId() + { + return AvatarID; + } + + public override void Loaded() + { + GameData.GodWarRelationData.Add(this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/GodWarSupportAvatarExcel.cs b/Common/Data/Excel/GodWarSupportAvatarExcel.cs new file mode 100644 index 0000000..3335f70 --- /dev/null +++ b/Common/Data/Excel/GodWarSupportAvatarExcel.cs @@ -0,0 +1,17 @@ +namespace KianaBH.Data.Excel; + +[ResourceEntity("GodWarSupportAvatar.json")] +public class GodWarSupportAvatarExcel : ExcelResource +{ + public int SupportAvatarID { get; set; } + + public override int GetId() + { + return SupportAvatarID; + } + + public override void Loaded() + { + GameData.GodWarSupportAvatarData.Add(SupportAvatarID, this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/GodWarTaleScheduleExcel.cs b/Common/Data/Excel/GodWarTaleScheduleExcel.cs new file mode 100644 index 0000000..d6f6b0e --- /dev/null +++ b/Common/Data/Excel/GodWarTaleScheduleExcel.cs @@ -0,0 +1,22 @@ +using KianaBH.Data.Config; + +namespace KianaBH.Data.Excel; + +[ResourceEntity("GodWarTaleSchedule.json")] +public class GodWarTaleScheduleExcel : ExcelResource +{ + public uint TaleScheduleID { get; set; } + public List TaleIDList { get; set; } = []; + public TimestampConfig? BeginTime { get; set; } + public TimestampConfig? EndTime { get; set; } + + public override int GetId() + { + return (int)TaleScheduleID; + } + + public override void Loaded() + { + GameData.GodWarTaleScheduleData.Add(GetId(), this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/GodWarTalentDataExcel.cs b/Common/Data/Excel/GodWarTalentDataExcel.cs new file mode 100644 index 0000000..f468041 --- /dev/null +++ b/Common/Data/Excel/GodWarTalentDataExcel.cs @@ -0,0 +1,19 @@ +namespace KianaBH.Data.Excel; + +[ResourceEntity("GodWarTalentData.json")] +public class GodWarTalentDataExcel : ExcelResource +{ + public uint TalentID { get; set; } + public uint MaxLevel { get; set; } + public List TaleIDList { get; set; } = []; + + public override int GetId() + { + return (int)TalentID; + } + + public override void Loaded() + { + GameData.GodWarTalentData.Add(GetId(), this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/MaterialDataExcel.cs b/Common/Data/Excel/MaterialDataExcel.cs new file mode 100644 index 0000000..ecdf10c --- /dev/null +++ b/Common/Data/Excel/MaterialDataExcel.cs @@ -0,0 +1,22 @@ +using System.Text.Json.Serialization; + +namespace KianaBH.Data.Excel; + +[ResourceEntity("MaterialData.json")] +public class MaterialDataExcel : ExcelResource +{ + [JsonPropertyName("ID")] public int Id { get; set; } + [JsonPropertyName("rarity")] public int Rarity { get; set; } + [JsonPropertyName("maxRarity")] public int MaxRarity { get; set; } + [JsonPropertyName("quantityLimit")] public int QuantityLimit { get; set; } + + public override int GetId() + { + return Id; + } + + public override void Loaded() + { + GameData.MaterialData.Add(Id, this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/MissionDataExcel.cs b/Common/Data/Excel/MissionDataExcel.cs new file mode 100644 index 0000000..d3c0367 --- /dev/null +++ b/Common/Data/Excel/MissionDataExcel.cs @@ -0,0 +1,22 @@ +using System.Text.Json.Serialization; + +namespace KianaBH.Data.Excel; + +[ResourceEntity("MissionData.json")] +public class MissionDataExcel : ExcelResource +{ + [JsonPropertyName("id")] public uint Id { get; set; } + [JsonPropertyName("totalProgress")] public uint TotalProgress { get; set; } + public uint Priority { get; set; } + + + public override int GetId() + { + return (int)Id; + } + + public override void Loaded() + { + GameData.MissionData.Add(GetId(), this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/PhonePendantDataExcel.cs b/Common/Data/Excel/PhonePendantDataExcel.cs new file mode 100644 index 0000000..bf44054 --- /dev/null +++ b/Common/Data/Excel/PhonePendantDataExcel.cs @@ -0,0 +1,20 @@ +using System.Text.Json.Serialization; + +namespace KianaBH.Data.Excel; + +[ResourceEntity("PhonePendantData.json")] +public class PhonePendantDataExcel : ExcelResource +{ + public uint PendantId { get; set; } + public uint Rarity { get; set; } + + public override int GetId() + { + return (int)PendantId; + } + + public override void Loaded() + { + GameData.PhonePendantData.Add(GetId(), this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/RandomPlotDataExcel.cs b/Common/Data/Excel/RandomPlotDataExcel.cs new file mode 100644 index 0000000..3439de8 --- /dev/null +++ b/Common/Data/Excel/RandomPlotDataExcel.cs @@ -0,0 +1,21 @@ +using System.Text.Json.Serialization; + +namespace KianaBH.Data.Excel; + +[ResourceEntity("RandomPlotData.json")] +public class RandomPlotDataExcel : ExcelResource +{ + [JsonPropertyName("plotId")] public uint PlotId { get; set; } + [JsonPropertyName("startDialogId")] public uint StartDialogId { get; set; } + [JsonPropertyName("finishDialogIdList")] public List FinishDialogIdList { get; set; } = []; + + public override int GetId() + { + return (int)PlotId; + } + + public override void Loaded() + { + GameData.RandomPlotData.Add(GetId(), this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/RecommendPanelExcel.cs b/Common/Data/Excel/RecommendPanelExcel.cs new file mode 100644 index 0000000..4bef085 --- /dev/null +++ b/Common/Data/Excel/RecommendPanelExcel.cs @@ -0,0 +1,17 @@ +namespace KianaBH.Data.Excel; + +[ResourceEntity("RecommendPanel.json")] +public class RecommendPanelExcel : ExcelResource +{ + public uint PanelId { get; set; } + + public override int GetId() + { + return (int)PanelId; + } + + public override void Loaded() + { + GameData.RecommendPanelData.Add(GetId(), this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/StageDataMainExcel.cs b/Common/Data/Excel/StageDataMainExcel.cs new file mode 100644 index 0000000..107c71d --- /dev/null +++ b/Common/Data/Excel/StageDataMainExcel.cs @@ -0,0 +1,28 @@ +using System.Text.Json.Serialization; + +namespace KianaBH.Data.Excel; + +[ResourceEntity("StageData_Main.json")] +public class StageDataMainExcel : ExcelResource +{ + [JsonPropertyName("levelId")] public uint LevelId { get; set; } + [JsonPropertyName("maxProgress")] public uint MaxProgress { get; set; } + [JsonPropertyName("challengeList")] public List ChallengeList { get; set; } = []; + + public override int GetId() + { + return (int)LevelId; + } + + public override void Loaded() + { + GameData.StageDataMain.Add(GetId(), this); + } +} + + +public class ChallengeData +{ + [JsonPropertyName("challengeId")] public uint ChallengeId { get; set; } + [JsonPropertyName("rewardId")] public uint RewardId { get; set; } +} \ No newline at end of file diff --git a/Common/Data/Excel/StepMissionCompensationExcel.cs b/Common/Data/Excel/StepMissionCompensationExcel.cs new file mode 100644 index 0000000..b55d794 --- /dev/null +++ b/Common/Data/Excel/StepMissionCompensationExcel.cs @@ -0,0 +1,21 @@ +namespace KianaBH.Data.Excel; + +[ResourceEntity("StepMissionCompensation.json")] +public class StepMissionCompensationExcel : ExcelResource +{ + public uint CompensationId { get; set; } + public uint UnlockLevel { get; set; } + public List MainLineStepIdList { get; set; } = []; + public List NewChallengeStepIdList { get; set; } = []; + public List OldChallengeStepIdList { get; set; } = []; + + public override int GetId() + { + return (int)CompensationId; + } + + public override void Loaded() + { + GameData.StepMissionCompensationData.Add(GetId(), this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/StigmataDataExcel.cs b/Common/Data/Excel/StigmataDataExcel.cs new file mode 100644 index 0000000..a0a434d --- /dev/null +++ b/Common/Data/Excel/StigmataDataExcel.cs @@ -0,0 +1,26 @@ +using System.Text.Json.Serialization; + +namespace KianaBH.Data.Excel; + +[ResourceEntity("StigmataData.json")] +public class StigmataDataExcel : ExcelResource +{ + public int ID { get; set; } + [JsonPropertyName("maxLv")] public int MaxLv { get; set; } + [JsonPropertyName("rarity")] public int Rarity { get; set; } + [JsonPropertyName("maxRarity")] public int MaxRarity { get; set; } + [JsonPropertyName("evoID")] public int EvoID { get; set; } + [JsonPropertyName("quality")] public int Quality { get; set; } + [JsonPropertyName("isSecurityProtect")] public bool IsSecurityProtect { get; set; } + [JsonPropertyName("protect")] public bool Protect { get; set; } + + public override int GetId() + { + return ID; + } + + public override void Loaded() + { + GameData.StigmataData.Add(ID, this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/ThemeDataAvatarExcel.cs b/Common/Data/Excel/ThemeDataAvatarExcel.cs new file mode 100644 index 0000000..1a74321 --- /dev/null +++ b/Common/Data/Excel/ThemeDataAvatarExcel.cs @@ -0,0 +1,21 @@ +using System.Text.Json.Serialization; + +namespace KianaBH.Data.Excel; + +[ResourceEntity("ThemeData_Avatar.json")] +public class ThemeDataAvatarExcel : ExcelResource +{ + public uint AvatarData { get; set; } + public List BuffList { get; set; } = []; + [JsonPropertyName("avatarIDList")] public List AvatarIDList { get; set; } = []; + + public override int GetId() + { + return (int)AvatarData; + } + + public override void Loaded() + { + GameData.ThemeDataAvatar.Add(GetId(), this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/TutorialDataExcel.cs b/Common/Data/Excel/TutorialDataExcel.cs new file mode 100644 index 0000000..3d34769 --- /dev/null +++ b/Common/Data/Excel/TutorialDataExcel.cs @@ -0,0 +1,20 @@ +using System.Text.Json.Serialization; + +namespace KianaBH.Data.Excel; + +[ResourceEntity("TutorialData.json")] +public class TutorialDataExcel : ExcelResource +{ + [JsonPropertyName("id")] public uint Id { get; set; } + [JsonPropertyName("index")] public uint Index { get; set; } + + public override int GetId() + { + return (int)Id; + } + + public override void Loaded() + { + GameData.TutorialData.Add(GetId(), this); + } +} \ No newline at end of file diff --git a/Common/Data/Excel/WeaponDataExcel.cs b/Common/Data/Excel/WeaponDataExcel.cs new file mode 100644 index 0000000..15c5def --- /dev/null +++ b/Common/Data/Excel/WeaponDataExcel.cs @@ -0,0 +1,25 @@ +using System.Text.Json.Serialization; + +namespace KianaBH.Data.Excel; + +[ResourceEntity("WeaponData.json")] +public class WeaponDataExcel : ExcelResource +{ + public int ID { get; set; } + [JsonPropertyName("weaponMainID")] public int WeaponMainID { get; set; } + [JsonPropertyName("maxLv")] public int MaxLv { get; set; } + [JsonPropertyName("rarity")] public int Rarity { get; set; } + [JsonPropertyName("maxRarity")] public int MaxRarity { get; set; } + [JsonPropertyName("evoID")] public int EvoID { get; set; } + [JsonPropertyName("protect")] public bool Protect { get; set; } + + public override int GetId() + { + return ID; + } + + public override void Loaded() + { + GameData.WeaponData.Add(ID, this); + } +} \ No newline at end of file diff --git a/Common/Data/ExcelResource.cs b/Common/Data/ExcelResource.cs new file mode 100644 index 0000000..084bf7f --- /dev/null +++ b/Common/Data/ExcelResource.cs @@ -0,0 +1,18 @@ +namespace KianaBH.Data; + +public abstract class ExcelResource +{ + public abstract int GetId(); + + public virtual void Loaded() + { + } + + public virtual void Finalized() + { + } + + public virtual void AfterAllDone() + { + } +} \ No newline at end of file diff --git a/Common/Data/GameData.cs b/Common/Data/GameData.cs new file mode 100644 index 0000000..c124bbb --- /dev/null +++ b/Common/Data/GameData.cs @@ -0,0 +1,45 @@ +using KianaBH.Data.Excel; +using KianaBH.Util.Extensions; +using System.Collections.Concurrent; +using System.Text.Json.Serialization; + +namespace KianaBH.Data; + +public static class GameData +{ + public static Dictionary> ActChallengeData { get; private set; } = []; + public static Dictionary ActivityTowerData { get; private set; } = []; + public static Dictionary AffixListData { get; private set; } = []; + public static Dictionary AvatarData { get; private set; } = []; + public static Dictionary AvatarSubSkillData { get; private set; } = []; + public static Dictionary AvatarTutorialData { get; private set; } = []; + public static Dictionary CollectionData { get; private set; } = []; + public static Dictionary CustomHeadData { get; private set; } = []; + public static Dictionary DressData { get; private set; } = []; + public static Dictionary ElfAstraMateData { get; private set; } = []; + public static Dictionary ElfSkillData { get; private set; } = []; + public static Dictionary EntryThemeData { get; private set; } = []; + public static Dictionary EntryThemeItemData { get; private set; } = []; + public static Dictionary FrameData { get; private set; } = []; + public static Dictionary> GeneralActivityStageGroupData { get; private set; } = []; + public static Dictionary GeneralActivityData { get; private set; } = []; + public static Dictionary GodWarEventData { get; private set; } = []; + public static Dictionary GodWarMainAvatarData { get; private set; } = []; + public static List GodWarRelationData { get; private set; } = []; + public static Dictionary GodWarSupportAvatarData { get; private set; } = []; + public static Dictionary GodWarTaleScheduleData { get; private set; } = []; + public static Dictionary GodWarTalentData { get; private set; } = []; + public static Dictionary MaterialData { get; private set; } = []; + public static Dictionary MissionData { get; private set; } = []; + public static Dictionary RecommendPanelData { get; private set; } = []; + public static Dictionary StageDataMain { get; private set; } = []; + public static Dictionary StepMissionCompensationData { get; private set; } = []; + public static Dictionary StigmataData { get; private set; } = []; + public static Dictionary ThemeDataAvatar { get; private set; } = []; + public static Dictionary WeaponData { get; private set; } = []; + public static Dictionary ChapterGroupConfigData { get; private set; } = []; + public static Dictionary PhonePendantData { get; private set; } = []; + public static Dictionary TutorialData { get; private set; } = []; + public static Dictionary CityEventPhotoData { get; private set; } = []; + public static Dictionary RandomPlotData { get; private set; } = []; +} \ No newline at end of file diff --git a/Common/Data/Models/Dispatch/DispatchQuery.cs b/Common/Data/Models/Dispatch/DispatchQuery.cs new file mode 100644 index 0000000..ce06972 --- /dev/null +++ b/Common/Data/Models/Dispatch/DispatchQuery.cs @@ -0,0 +1,13 @@ +using System.ComponentModel.DataAnnotations; +using Microsoft.AspNetCore.Mvc; + +namespace KianaBH.Data.Models.Dispatch; + +public class DispatchQuery +{ + [Required] public string? Version { get; set; } + [FromQuery(Name = "t")] public int Timestamp { get; set; } + public string? Lang { get; set; } + public int Uid { get; set; } + public string? Token { get; set; } +} \ No newline at end of file diff --git a/Common/Data/Models/Dispatch/QueryDispatchModels.cs b/Common/Data/Models/Dispatch/QueryDispatchModels.cs new file mode 100644 index 0000000..ad1655f --- /dev/null +++ b/Common/Data/Models/Dispatch/QueryDispatchModels.cs @@ -0,0 +1,17 @@ +namespace KianaBH.Data.Models.Dispatch; + +public class QueryDispatchResponse +{ + public int Retcode { get; set; } + public List RegionList { get; set; } = []; + + + public class RegionInfo + { + public string? DispatchUrl { get; set; } + public object? Ext { get; set; } + public string? Name { get; set; } + public int Retcode { get; set; } + public string? Title { get; set; } + } +} \ No newline at end of file diff --git a/Common/Data/Models/Dispatch/QueryGatewayModels.cs b/Common/Data/Models/Dispatch/QueryGatewayModels.cs new file mode 100644 index 0000000..a2b0bc6 --- /dev/null +++ b/Common/Data/Models/Dispatch/QueryGatewayModels.cs @@ -0,0 +1,30 @@ +using KianaBH.Util.Extensions; +using KianaBH.Configuration; + +namespace KianaBH.Data.Models.Dispatch; + +public class QueryGatewayResponse +{ + public long ServerCurTime { get; set; } = Extensions.GetUnixSec(); + public int ServerCurTimezone { get; set; } = (int)TimeZoneInfo.Local.GetUtcOffset(DateTime.Now).TotalHours; + public string RegionName { get; set; } = "KianaBH"; + public string Msg { get; set; } = ""; + public bool IsDataReady { get; set; } = true; + public int Retcode { get; set; } + + public string? AccountUrl { get; set; } + public ServerInfo? Gameserver { get; set; } + public ServerInfo? Gateway { get; set; } + public List ExResourceUrlList { get; set; } = []; + public List ExAudioAndVideoUrlList { get; set; } = []; + public List AssetBundleUrlList { get; set; } = []; + public HotfixManfiset? Manifest { get; set; } + public Dictionary Ext { get; set; } = new(); + + public class ServerInfo + { + public string? Ip { get; set; } + public bool IsKcp { get; set; } + public int Port { get; set; } + } +} \ No newline at end of file diff --git a/Common/Data/Models/Sdk/ComboGranterModels.cs b/Common/Data/Models/Sdk/ComboGranterModels.cs new file mode 100644 index 0000000..2716161 --- /dev/null +++ b/Common/Data/Models/Sdk/ComboGranterModels.cs @@ -0,0 +1,34 @@ +using System.Text.Json.Serialization; +using System.ComponentModel.DataAnnotations; +using KianaBH.Util.Extensions; + +namespace KianaBH.Data.Models.Sdk; + +public class ComboGranterData +{ + public string? Uid { get; set; } + public string? Token { get; set; } +} + +public class ComboGranterRequest +{ + [Required] + [JsonConverter(typeof(JsonStringToObjectConverter))] + public ComboGranterData? Data { get; set; } +} + +public class ComboGranterResponse : ResponseBase +{ + public new ComboGranterResponseData? Data { get; set; } + + public class ComboGranterResponseData + { + public uint AccountType { get; set; } + public string? OpenId { get; set; } + public string? ComboId { get; set; } + public string? ComboToken { get; set; } + public bool Heartbeat { get; set; } + public string? Data { get; set; } + } +} + diff --git a/Common/Data/Models/Sdk/DeviceFingerprintController.cs b/Common/Data/Models/Sdk/DeviceFingerprintController.cs new file mode 100644 index 0000000..cf3f937 --- /dev/null +++ b/Common/Data/Models/Sdk/DeviceFingerprintController.cs @@ -0,0 +1,6 @@ +namespace KianaBH.Data.Models.Sdk; +public class GetDeviceFingerprintRequest +{ + public string? DeviceFp { get; set; } +} + diff --git a/Common/Data/Models/Sdk/GameWeatherModels.cs b/Common/Data/Models/Sdk/GameWeatherModels.cs new file mode 100644 index 0000000..9c5ebb8 --- /dev/null +++ b/Common/Data/Models/Sdk/GameWeatherModels.cs @@ -0,0 +1,20 @@ +namespace KianaBH.Data.Models.Sdk; + +public class GetWeatherResponse : ResponseBase +{ + public new GetWeatherResponseData? Data { get; set; } + + public class GetWeatherResponseData + { + public int Timezone { get; set; } + public List Hourly { get; set; } = []; + + public class HourlyWeatherData + { + public int Condition { get; set; } + public int Hour { get; set; } + public string? Date { get; set; } + public int Temp { get; set; } + } + } +} diff --git a/Common/Data/Models/Sdk/MdkShieldModels.cs b/Common/Data/Models/Sdk/MdkShieldModels.cs new file mode 100644 index 0000000..1b0945e --- /dev/null +++ b/Common/Data/Models/Sdk/MdkShieldModels.cs @@ -0,0 +1,42 @@ +namespace KianaBH.Data.Models.Sdk; + +public class MdkShieldLoginRequest +{ + public string? Account { get; set; } + public string? Password { get; set; } + public bool IsCrypto { get; set; } +} + +public class MdkShieldVerifyRequest +{ + public string? Uid { get; set; } + public string? Token { get; set; } +} + +// TODO: Move this to DB instead +public class MdkShieldAccountData +{ + public string? Token { get; set; } + public string? Uid { get; set; } + + public string Email { get; set; } = ""; + public string IsEmailVerify { get; set; } = "0"; + public string AreaCode { get; set; } = ""; + public string Country { get; set; } = ""; + public string Name { get; set; } = ""; + public string Realname { get; set; } = ""; +} + +public class MdkShieldResponse : ResponseBase +{ + public new MdkShieldResponseData? Data { get; set; } + + public class MdkShieldResponseData + { + public MdkShieldAccountData? Account { get; set; } + public bool DeviceGrantRequired { get; set; } + public bool ReactiveRequired { get; set; } + public bool RealpersonRequired { get; set; } + public bool SafeMobileRequeired { get; set; } + } +} diff --git a/Common/Data/Models/Sdk/ResponseBase.cs b/Common/Data/Models/Sdk/ResponseBase.cs new file mode 100644 index 0000000..c3da79a --- /dev/null +++ b/Common/Data/Models/Sdk/ResponseBase.cs @@ -0,0 +1,9 @@ +namespace KianaBH.Data.Models.Sdk; + +public class ResponseBase +{ + public string Message { get; set; } = "OK"; + public bool Success { get; set; } = true; + public int Retcode { get; set; } + public object? Data { get; set; } +} \ No newline at end of file diff --git a/Common/Data/ResourceEntity.cs b/Common/Data/ResourceEntity.cs new file mode 100644 index 0000000..44342a6 --- /dev/null +++ b/Common/Data/ResourceEntity.cs @@ -0,0 +1,33 @@ +namespace KianaBH.Data; + +[AttributeUsage(AttributeTargets.Class, Inherited = false)] +public class ResourceEntity : Attribute +{ + [Obsolete("No effect")] + public ResourceEntity(string fileName, bool isCritical = false, bool isMultifile = false) + { + if (isMultifile) + FileName = new List(fileName.Split(',')); + else + FileName = [fileName]; + IsCritical = isCritical; + } + + + public ResourceEntity(string fileName, bool isMultifile = false) + { + if (isMultifile) + FileName = new List(fileName.Split(',')); + else + FileName = [fileName]; + } + + public ResourceEntity(string fileName) + { + FileName = [fileName]; + } + + public List FileName { get; private set; } + + [Obsolete("No effect")] public bool IsCritical { get; private set; } // deprecated +} \ No newline at end of file diff --git a/Common/Data/ResourceManager.cs b/Common/Data/ResourceManager.cs new file mode 100644 index 0000000..d285d01 --- /dev/null +++ b/Common/Data/ResourceManager.cs @@ -0,0 +1,169 @@ +using KianaBH.Internationalization; +using KianaBH.Util; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System.Reflection; + +namespace KianaBH.Data; + +public class ResourceManager +{ + public static Logger Logger { get; } = new("ResourceManager"); + public static bool IsLoaded { get; set; } + + public static void LoadGameData() + { + LoadExcel(); + } + + public static void LoadExcel() + { + var classes = Assembly.GetExecutingAssembly().GetTypes(); // Get all classes in the assembly + List resList = []; + + foreach (var cls in classes.Where(x => x.IsSubclassOf(typeof(ExcelResource)))) + { + var res = LoadSingleExcelResource(cls); + if (res != null) resList.AddRange(res); + } + + foreach (var cls in resList) cls.AfterAllDone(); + } + + public static List? LoadSingleExcel(Type cls) where T : ExcelResource, new() + { + return LoadSingleExcelResource(cls) as List; + } + + public static List? LoadSingleExcelResource(Type cls) + { + var attribute = (ResourceEntity?)Attribute.GetCustomAttribute(cls, typeof(ResourceEntity)); + + if (attribute == null) return null; + var resource = (ExcelResource)Activator.CreateInstance(cls)!; + var count = 0; + List resList = []; + foreach (var fileName in attribute.FileName) + try + { + var path = ConfigManager.Config.Path.ResourcePath + "/ExcelOutput/" + fileName; + var file = new FileInfo(path); + if (!file.Exists) + { + Logger.Error(I18NManager.Translate("Server.ServerInfo.FailedToReadItem", fileName, + I18NManager.Translate("Word.NotFound"))); + continue; + } + + var json = file.OpenText().ReadToEnd(); + using (var reader = new JsonTextReader(new StringReader(json))) + { + reader.Read(); + switch (reader.TokenType) + { + case JsonToken.StartArray: + { + // array + var jArray = JArray.Parse(json); + foreach (var item in jArray) + { + var res = JsonConvert.DeserializeObject(item.ToString(), cls); + resList.Add((ExcelResource)res!); + ((ExcelResource?)res)?.Loaded(); + count++; + } + + break; + } + case JsonToken.StartObject: + { + // dictionary + var jObject = JObject.Parse(json); + foreach (var (_, obj) in jObject) + { + var instance = JsonConvert.DeserializeObject(obj!.ToString(), cls); + + if (((ExcelResource?)instance)?.GetId() == 0 || (ExcelResource?)instance == null) + { + // Deserialize as JObject to handle nested dictionaries + var nestedObject = JsonConvert.DeserializeObject(obj.ToString()); + + foreach (var nestedItem in nestedObject ?? []) + { + var nestedInstance = + JsonConvert.DeserializeObject(nestedItem.Value!.ToString(), cls); + resList.Add((ExcelResource)nestedInstance!); + ((ExcelResource?)nestedInstance)?.Loaded(); + count++; + } + } + else + { + resList.Add((ExcelResource)instance); + ((ExcelResource)instance).Loaded(); + } + + count++; + } + + break; + } + } + } + + resource.Finalized(); + } + catch (Exception ex) + { + Logger.Error( + I18NManager.Translate("Server.ServerInfo.FailedToReadItem", fileName, + I18NManager.Translate("Word.Error")), ex); + } + + Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadedItems", count.ToString(), cls.Name)); + + return resList; + } + + public static T? LoadCustomFile(string filetype, string filename) + { + var type = I18NManager.Translate("Word." + filetype); + Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadingItem", type)); + FileInfo file = new(ConfigManager.Config.Path.DataPath + $"/{filename}.json"); + T? customFile = default; + if (!file.Exists) + { + Logger.Warn(I18NManager.Translate("Server.ServerInfo.ConfigMissing", type, + $"{ConfigManager.Config.Path.DataPath}/{filename}.json", type)); + return customFile; + } + + try + { + using var reader = file.OpenRead(); + using StreamReader reader2 = new(reader); + var text = reader2.ReadToEnd(); + var json = JsonConvert.DeserializeObject(text); + customFile = json; + } + catch (Exception ex) + { + Logger.Error("Error in reading " + file.Name, ex); + } + + switch (customFile) + { + case Dictionary d: + Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadedItems", d.Count.ToString(), type)); + break; + case Dictionary> di: + Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadedItems", di.Count.ToString(), type)); + break; + default: + Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadedItem", filetype)); + break; + } + + return customFile; + } +} \ No newline at end of file diff --git a/Common/Database/Account/AccountData.cs b/Common/Database/Account/AccountData.cs new file mode 100644 index 0000000..4ba0305 --- /dev/null +++ b/Common/Database/Account/AccountData.cs @@ -0,0 +1,150 @@ +using KianaBH.Enums.Player; +using KianaBH.Util; +using KianaBH.Util.Extensions; +using KianaBH.Util.Security; +using SqlSugar; + +namespace KianaBH.Database.Account; + +[SugarTable("Account")] +public class AccountData : BaseDatabaseDataHelper +{ + public string Username { get; set; } = ""; + public string Password { get; set; } = ""; + public BanTypeEnum BanType { get; set; } + + [SugarColumn(IsJson = true)] public List Permissions { get; set; } = []; + + [SugarColumn(IsNullable = true)] public string? ComboToken { get; set; } + + #region GetAccount + + public static AccountData? GetAccountByUserName(string username) + { + AccountData? result = null; + DatabaseHelper.GetAllInstance()?.ForEach(account => + { + if (account.Username == username) result = account; + }); + return result; + } + + public static AccountData? GetAccountByUid(int uid, bool force = false) + { + var result = DatabaseHelper.GetInstance(uid, force); + return result; + } + + #endregion + + #region Account + + public static void CreateAccount(string username, int uid, string password) + { + var newUid = uid; + if (uid == 0) + { + newUid = 100001; + while (GetAccountByUid(newUid) != null) newUid++; + } + + var account = new AccountData + { + Uid = newUid, + Username = username, + Password = "", + Permissions = [.. ConfigManager.Config.ServerOption.DefaultPermissions + .Select(perm => Enum.TryParse(perm, out PermEnum result) ? result : (PermEnum?)null) + .Where(result => result.HasValue).Select(result => result!.Value)] + }; + SetPassword(account, password); + + DatabaseHelper.CreateInstance(account); + } + + public static void DeleteAccount(int uid) + { + if (GetAccountByUid(uid) == null) return; + DatabaseHelper.DeleteAllInstance(uid); + } + + public static void SetPassword(AccountData account, string password) + { + if (password.Length > 0) + account.Password = Extensions.GetSha256Hash(password); + else + account.Password = ""; + } + + public static bool VerifyPassword(AccountData account, string password) + => account.Password == Extensions.GetSha256Hash(password); + + + #endregion + + #region Permission + + public static bool HasPerm(PermEnum[] perms, int uid) + { + if (uid == (int)ServerEnum.Console) return true; + var account = GetAccountByUid(uid); + if (account?.Permissions == null) return false; + if (account.Permissions.Contains(PermEnum.Admin)) return true; + + return perms.Any(account.Permissions.Contains); + } + + public static void AddPerm(PermEnum[] perms, int uid) + { + if (uid == (int)ServerEnum.Console) return; + var account = GetAccountByUid(uid); + if (account == null) return; + + account.Permissions ??= []; + foreach (var perm in perms) + { + if (!account.Permissions.Contains(perm)) + { + account.Permissions = [.. account.Permissions, perm]; + } + } + } + + public static void RemovePerm(PermEnum[] perms, int uid) + { + if (uid == (int)ServerEnum.Console) return; + var account = GetAccountByUid(uid); + if (account == null) return; + if (account.Permissions == null) return; + + foreach (var perm in perms) + { + if (account.Permissions.Contains(perm)) + { + account.Permissions = account.Permissions.Except([perm]).ToList(); + } + } + } + + public static void CleanPerm(int uid) + { + if (uid == (int)ServerEnum.Console) return; + var account = GetAccountByUid(uid); + if (account == null) return; + + account.Permissions = []; + } + + #endregion + + #region Token + + public string GenerateComboToken() + { + ComboToken = Crypto.CreateSessionKey(Uid.ToString()); + DatabaseHelper.UpdateInstance(this); + return ComboToken; + } + + #endregion +} \ No newline at end of file diff --git a/Common/Database/Avatar/AvatarData.cs b/Common/Database/Avatar/AvatarData.cs new file mode 100644 index 0000000..a0fdccd --- /dev/null +++ b/Common/Database/Avatar/AvatarData.cs @@ -0,0 +1,95 @@ +using SqlSugar; +using KianaBH.Proto; + +namespace KianaBH.Database.Avatar; + +[SugarTable("Avatar")] +public class AvatarData : BaseDatabaseDataHelper +{ + [SugarColumn(IsJson = true)] public List Avatars { get; set; } = []; +} + +public class AvatarInfo +{ + public int AvatarId { get; set; } + public int Star { get; set; } + public int Level { get; set; } + public int Exp { get; set; } + public int Fragment { get; set; } + public int WeaponUniqueId { get; set; } + public int StigmataUniqueId1 { get; set; } + public int StigmataUniqueId2 { get; set; } + public int StigmataUniqueId3 { get; set; } + public List SkillList { get; set; } = []; + public int TouchGoodFeel { get; set; } + public int TodayHasAddGoodFeel { get; set; } + public int StageGoodFeel { get; set; } + public List DressList { get; set; } = []; + public int DressId { get; set; } + public AvatarBindEquipMode Mode { get; set; } = AvatarBindEquipMode.AvatarBindEquipCommon; + public AvatarArtifactDetail? AvatarArtifact { get; set; } + public int SubStar { get; set; } + public long Timestamp { get; set; } + public Proto.Avatar ToProto() + { + var proto = new Proto.Avatar + { + AvatarId = (uint)AvatarId, + Star = (uint)Star, + Level = (uint)Level, + Exp = (uint)Exp, + Fragment = (uint)Fragment, + WeaponUniqueId = (uint)WeaponUniqueId, + StigmataUniqueId1 = (uint)StigmataUniqueId1, + StigmataUniqueId2 = (uint)StigmataUniqueId2, + StigmataUniqueId3 = (uint)StigmataUniqueId3, + TouchGoodfeel = (uint)TouchGoodFeel, + TodayHasAddGoodfeel = (uint)TodayHasAddGoodFeel, + StageGoodfeel = (uint)StageGoodFeel, + DressId = (uint)DressId, + Mode = Mode, + SubStar = (uint)SubStar, + }; + + foreach (var dressId in DressList) + { + proto.DressList.Add((uint)dressId); + } + + foreach (var skill in SkillList) + { + var avatarSkill = new Proto.AvatarSkill + { + SkillId = (uint)skill.SkillId + }; + + avatarSkill.SubSkillList.AddRange(skill.SubSkillList.Select(x => new Proto.AvatarSubSkill + { + SubSkillId = (uint)x.SubSkillId, + Level = x.Level, + IsMask = x.IsMask + })); + + proto.SkillList.Add(avatarSkill); + } + return proto; + } + +} +public class AvatarSkill +{ + public int SkillId { get; set; } + public List SubSkillList { get; set; } = []; +} +public class AvatarSubSkill +{ + public int SubSkillId { get; set; } + public uint Level { get; set; } + public bool IsMask { get; set; } +} +public class AvatarArtifactDetail +{ + public int ArtifactId { get; set; } + public int ArtifactLevel { get; set; } + public bool IsArtifactSwitchOn { get; set; } +} \ No newline at end of file diff --git a/Common/Database/BaseDatabaseDataHelper.cs b/Common/Database/BaseDatabaseDataHelper.cs new file mode 100644 index 0000000..1ea2d77 --- /dev/null +++ b/Common/Database/BaseDatabaseDataHelper.cs @@ -0,0 +1,8 @@ +using SqlSugar; + +namespace KianaBH.Database; + +public abstract class BaseDatabaseDataHelper +{ + [SugarColumn(IsPrimaryKey = true)] public int Uid { get; set; } +} \ No newline at end of file diff --git a/Common/Database/Client/ClientData.cs b/Common/Database/Client/ClientData.cs new file mode 100644 index 0000000..4c336d5 --- /dev/null +++ b/Common/Database/Client/ClientData.cs @@ -0,0 +1,28 @@ +using Google.Protobuf; +using KianaBH.Proto; +using SqlSugar; + +namespace KianaBH.Database.Client; + +[SugarTable("client_data")] +public class ClientData : BaseDatabaseDataHelper +{ + [SugarColumn(IsJson = true)] public List Clients { get; set; } = []; +} + +public class ClientDBData +{ + public uint Id { get; set; } + public ClientDataType Type { get; set; } = ClientDataType.ClientDataNone; + public byte[] Data { get; set; } = Array.Empty(); + public Proto.ClientData ToProto() + { + var proto = new Proto.ClientData + { + Id = Id, + Type = Type, + Data = ByteString.CopyFrom(Data) + }; + return proto; + } +} \ No newline at end of file diff --git a/Common/Database/CustomSerializeService.cs b/Common/Database/CustomSerializeService.cs new file mode 100644 index 0000000..baf4f99 --- /dev/null +++ b/Common/Database/CustomSerializeService.cs @@ -0,0 +1,32 @@ +using Newtonsoft.Json; +using SqlSugar; + +namespace KianaBH.Database; + +public class CustomSerializeService : ISerializeService +{ + private readonly JsonSerializerSettings _jsonSettings; + + public CustomSerializeService() + { + _jsonSettings = new JsonSerializerSettings + { + DefaultValueHandling = DefaultValueHandling.Ignore // ignore default values + }; + } + + public string SerializeObject(object value) + { + return JsonConvert.SerializeObject(value, _jsonSettings); + } + + public T DeserializeObject(string value) + { + return JsonConvert.DeserializeObject(value)!; + } + + public string SugarSerializeObject(object value) + { + return JsonConvert.SerializeObject(value, _jsonSettings); + } +} \ No newline at end of file diff --git a/Common/Database/DatabaseHelper.cs b/Common/Database/DatabaseHelper.cs new file mode 100644 index 0000000..ea4b99d --- /dev/null +++ b/Common/Database/DatabaseHelper.cs @@ -0,0 +1,307 @@ +using KianaBH.Database.Account; +using KianaBH.Internationalization; +using KianaBH.Util; +using SqlSugar; +using System.Collections.Concurrent; +using System.Globalization; + +namespace KianaBH.Database; + +public class DatabaseHelper +{ + public static Logger logger = new("Database"); + public static SqlSugarScope? sqlSugarScope; + public static readonly ConcurrentDictionary> UidInstanceMap = []; + public static readonly List ToSaveUidList = []; + public static long LastSaveTick = DateTime.UtcNow.Ticks; + public static Thread? SaveThread; + public static bool LoadAccount; + public static bool LoadAllData; + + public void Initialize() + { + logger.Info(I18NManager.Translate("Server.ServerInfo.LoadingItem", I18NManager.Translate("Word.Database"))); + var f = new FileInfo(ConfigManager.Config.Path.DatabasePath + "/" + ConfigManager.Config.GameServer.DatabaseName); + if (!f.Exists && f.Directory != null) f.Directory.Create(); + + sqlSugarScope = new SqlSugarScope(new ConnectionConfig + { + ConnectionString = $"Data Source={f.FullName};", + DbType = DbType.Sqlite, + IsAutoCloseConnection = true, + ConfigureExternalServices = new ConfigureExternalServices + { + SerializeService = new CustomSerializeService() + } + }); + + InitializeSqlite(); + + var baseType = typeof(BaseDatabaseDataHelper); + var assembly = typeof(BaseDatabaseDataHelper).Assembly; + var types = assembly.GetTypes().Where(t => t.IsSubclassOf(baseType)); + + var list = sqlSugarScope.Queryable().ToList(); + foreach (var inst in list) + { + if (!UidInstanceMap.TryGetValue(inst.Uid, out var value)) + { + value = []; + UidInstanceMap[inst.Uid] = value; + } + + value.Add(inst); // add to the map + } + + // start dispatch server + LoadAccount = true; + + var res = Parallel.ForEach(list, account => + { + Parallel.ForEach(types, t => + { + if (t == typeof(AccountData)) return; // skip the account data + + try + { + typeof(DatabaseHelper).GetMethod(nameof(InitializeTable))?.MakeGenericMethod(t) + .Invoke(null, [account.Uid]); + } + catch (Exception e) + { + logger.Error("Database initialization error: ", e); + } + + }); // cache the data + }); + + while (!res.IsCompleted) + { + } + + LastSaveTick = DateTime.UtcNow.Ticks; + + SaveThread = new Thread(() => + { + while (true) CalcSaveDatabase(); + }); + SaveThread.Start(); + + LoadAllData = true; + } + + public static void InitializeTable(int uid) where T : BaseDatabaseDataHelper, new() + { + var list = sqlSugarScope?.Queryable() + .Select(x => x) + .Select() + .Where(x => x.Uid == uid) + .ToList(); + + foreach (var inst in list!.Select(instance => (instance as BaseDatabaseDataHelper)!)) + { + if (!UidInstanceMap.TryGetValue(inst.Uid, out var value)) + { + value = []; + UidInstanceMap[inst.Uid] = value; + } + + value.Add(inst); // add to the map + } + } + + public static void InitializeSqlite() + { + var baseType = typeof(BaseDatabaseDataHelper); + var assembly = typeof(BaseDatabaseDataHelper).Assembly; + var types = assembly.GetTypes().Where(t => t.IsSubclassOf(baseType)); + foreach (var type in types) + typeof(DatabaseHelper).GetMethod("InitializeSqliteTable")?.MakeGenericMethod(type).Invoke(null, null); + } + + // DO NOT DEL ReSharper disable once UnusedMember.Global + public static void InitializeSqliteTable() where T : BaseDatabaseDataHelper, new() + { + try + { + sqlSugarScope?.CodeFirst.InitTables(); + } + catch + { + // ignored + } + } + + public static T? GetInstance(int uid, bool forceReload = false) where T : BaseDatabaseDataHelper, new() + { + try + { + if (!forceReload && UidInstanceMap.TryGetValue(uid, out var value)) + { + var instance = value.OfType().FirstOrDefault(); + if (instance != null) return instance; + } + var t = sqlSugarScope?.Queryable() + .Where(x => x.Uid == uid) + .ToList(); + + if (t is { Count: > 0 }) + { + var instance = t[0]; + + if (!UidInstanceMap.TryGetValue(uid, out var list)) + { + list = new List(); + UidInstanceMap[uid] = list; + } + else + { + list.RemoveAll(i => i is T); + } + + list.Add(instance); + return instance; + } + + return null; + + return null; + } + catch (Exception e) + { + logger.Error("Unsupported type", e); + return null; + } + } + + public static T GetInstanceOrCreateNew(int uid) where T : BaseDatabaseDataHelper, new() + { + var instance = GetInstance(uid); + if (instance != null) return instance; + + instance = new T + { + Uid = uid + }; + CreateInstance(instance); + + return instance; + } + + public static List? GetAllInstance() where T : BaseDatabaseDataHelper, new() + { + try + { + return sqlSugarScope?.Queryable() + .Select(x => x) + .ToList(); + } + catch (Exception e) + { + logger.Error("Unsupported type", e); + return null; + } + } + + public static void UpdateInstance(T instance) where T : BaseDatabaseDataHelper, new() + { + sqlSugarScope?.Updateable(instance).ExecuteCommand(); + } + + public static void CreateInstance(T instance) where T : BaseDatabaseDataHelper, new() + { + sqlSugarScope?.Insertable(instance).ExecuteCommand(); + if (!UidInstanceMap.TryGetValue(instance.Uid, out var value)) + { + value = []; + UidInstanceMap[instance.Uid] = value; + } + value.Add(instance); + } + + public static void DeleteInstance(int key) where T : BaseDatabaseDataHelper, new() + { + try + { + sqlSugarScope?.Deleteable().Where(x => x.Uid == key).ExecuteCommand(); + } + catch (Exception e) + { + logger.Error("An error occurred while delete the database", e); + } + } + + public static void DeleteAllInstance(int key) + { + + var value = UidInstanceMap[key]; + var baseType = typeof(BaseDatabaseDataHelper); + var assembly = typeof(BaseDatabaseDataHelper).Assembly; + var types = assembly.GetTypes().Where(t => t.IsSubclassOf(baseType)); + foreach (var type in types) + { + var instance = value.Find(x => x.GetType() == type); + if (instance != null) + typeof(DatabaseHelper).GetMethod("DeleteInstance")?.MakeGenericMethod(type) + .Invoke(null, [key]); + } + + if (UidInstanceMap.TryRemove(key, out var instances)) + ToSaveUidList.RemoveAll(x => x == key); + } + + // Auto save per 5 min + public static void CalcSaveDatabase() + { + if (LastSaveTick + TimeSpan.TicksPerMinute * 5 > DateTime.UtcNow.Ticks) return; + SaveDatabase(); + } + + public static void SaveDatabase() + { + try + { + var prev = DateTime.Now; + var list = ToSaveUidList.ToList(); // copy the list to avoid the exception + foreach (var uid in list) + { + var value = UidInstanceMap[uid]; + var baseType = typeof(BaseDatabaseDataHelper); + var assembly = typeof(BaseDatabaseDataHelper).Assembly; + var types = assembly.GetTypes().Where(t => t.IsSubclassOf(baseType)); + foreach (var type in types) + { + var instance = value.Find(x => x.GetType() == type); + if (instance != null) + typeof(DatabaseHelper).GetMethod("SaveDatabaseType")?.MakeGenericMethod(type) + .Invoke(null, [instance]); + } + } + + var t = (DateTime.Now - prev).TotalSeconds; + logger.Info(I18NManager.Translate("Server.ServerInfo.SaveDatabase", + Math.Round(t, 2).ToString(CultureInfo.InvariantCulture))); + + ToSaveUidList.Clear(); + } + catch (Exception e) + { + logger.Error("An error occurred while saving the database", e); + } + + LastSaveTick = DateTime.UtcNow.Ticks; + } + + // DO NOT DEL ReSharper save database from cache + public static void SaveDatabaseType(T instance) where T : BaseDatabaseDataHelper, new() + { + try + { + sqlSugarScope?.Updateable(instance).ExecuteCommand(); + } + catch (Exception e) + { + logger.Error("An error occurred while saving the database", e); + } + } +} \ No newline at end of file diff --git a/Common/Database/Inventory/InventoryData.cs b/Common/Database/Inventory/InventoryData.cs new file mode 100644 index 0000000..8de8dfc --- /dev/null +++ b/Common/Database/Inventory/InventoryData.cs @@ -0,0 +1,75 @@ +using KianaBH.Proto; +using SqlSugar; +using static System.Runtime.InteropServices.JavaScript.JSType; + +namespace KianaBH.Database.Inventory; + +[SugarTable("InventoryData")] +public class InventoryData : BaseDatabaseDataHelper +{ + [SugarColumn(IsJson = true)] public List MaterialItems { get; set; } = []; + + [SugarColumn(IsJson = true)] public List WeaponItems { get; set; } = []; + + [SugarColumn(IsJson = true)] public List StigmataItems { get; set; } = []; + + public int NextUniqueId { get; set; } = 100; +} + +public class ItemData +{ + public int UniqueId { get; set; } + public int ItemId { get; set; } + public int SubItemId { get; set; } + public int Count { get; set; } + public int Level { get; set; } + public int Exp { get; set; } + public bool Locked { get; set; } + public bool AffixIdentify { get; set; } + public uint CancelLockedTime { get; set; } + public bool Extracted { get; set; } + public int SlotNum { get; set; } + public int Refine { get; set; } + public int Promote { get; set; } + public int Homology { get; set; } + public List QuantumBranchLists { get; set; } = []; + public List RuneLists { get; set; } = []; + public List WaitSelectRuneLists { get; set; } = []; + public List WaitSelectRuneGroupLists { get; set; } = []; + public int EquipAvatar { get; set; } + + + public Material ToMaterialProto() + { + return new Material + { + Id = (uint)ItemId, + Num = (uint)Count + }; + } + + public Weapon ToWeaponProto() + { + return new Weapon + { + Id = (uint)ItemId, + UniqueId = (uint)UniqueId, + Level = (uint)Level, + Exp = (uint)Exp, + IsProtected = Locked, + IsExtracted = Extracted, + }; + } +} + +public class RuneGroup +{ + public int UniqueId { get; set; } + public List RuneLists { get; set; } = []; +} + +public class Rune +{ + public int RuneId { get; set; } + public int Strength { get; set; } +} diff --git a/Common/Database/Lineup/LineupData.cs b/Common/Database/Lineup/LineupData.cs new file mode 100644 index 0000000..46caae9 --- /dev/null +++ b/Common/Database/Lineup/LineupData.cs @@ -0,0 +1,19 @@ +using SqlSugar; + +namespace KianaBH.Database.Lineup; + +[SugarTable("Lineup")] +public class LineupData : BaseDatabaseDataHelper +{ + [SugarColumn(IsJson = true)] public Dictionary Lineups { get; set; } = []; +} + +public class LineupInfo +{ + public uint Id { get; set; } + public string? Name { get; set; } + public uint AstraMateId { get; set; } + public bool IsUsingAstraMate { get; set; } + public List AvatarIds { get; set; } = []; + public List ElfIds { get; set; } = []; +} \ No newline at end of file diff --git a/Common/Database/Player/GuideData.cs b/Common/Database/Player/GuideData.cs new file mode 100644 index 0000000..5bfff84 --- /dev/null +++ b/Common/Database/Player/GuideData.cs @@ -0,0 +1,9 @@ +using SqlSugar; + +namespace KianaBH.Database.Player; + +[SugarTable("player_guide")] +public class GuideData : BaseDatabaseDataHelper +{ + [SugarColumn(IsJson = true)] public List GuideFinishList { get; set; } = []; +} \ No newline at end of file diff --git a/Common/Database/Player/PlayerData.cs b/Common/Database/Player/PlayerData.cs new file mode 100644 index 0000000..0c483d1 --- /dev/null +++ b/Common/Database/Player/PlayerData.cs @@ -0,0 +1,73 @@ +using System.Drawing; +using KianaBH.Proto; +using KianaBH.Util; +using KianaBH.Util.Extensions; +using SqlSugar; + +namespace KianaBH.Database.Player; + +[SugarTable("Player")] +public class PlayerData : BaseDatabaseDataHelper +{ + public string? Name { get; set; } = ""; + public string? Signature { get; set; } = "KianaPS"; + public uint Level { get; set; } = 88; + public uint Exp { get; set; } = 0; + public uint HCoin { get; set; } = 0; + public uint Stamina { get; set; } = 240; + public uint HeadIcon { get; set; } = 161090; + public uint HeadFrame { get; set; } = 200001; + public uint WarshipId { get; set; } = 400004; + public uint PhonePendantId { get; set; } = 350005; + public uint AssistantAvatarId { get; set; } = 101; + public uint BirthDay { get; set; } = 0; + [SugarColumn(IsJson = true)] public WarshipAvatarData WarshipAvatar { get; set; } = new(); + [SugarColumn(IsNullable = true)] public long LastActiveTime { get; set; } + public long RegisterTime { get; set; } = Extensions.GetUnixSec(); + + public static PlayerData? GetPlayerByUid(long uid) + { + var result = DatabaseHelper.GetInstance((int)uid); + return result; + } + public GetMainDataRsp ToProto() + { + return new GetMainDataRsp + { + IsAll = true, + AssistantAvatarId = 0, + Birthday = BirthDay, + Nickname = Name, + Level = Level, + Exp = Exp, + Hcoin = HCoin, + CustomHeadId = HeadIcon, + RegisterTime = (uint)RegisterTime, + WarshipAvatar = new Proto.WarshipAvatarData + { + WarshipFirstAvatarId = 0, + WarshipSecondAvatarId = 0, + }, + SelfDesc = Signature, + UseFrameId = HeadFrame, + OnPhonePendantId = PhonePendantId, + Stamina = Stamina, + StaminaRecoverConfigTime = GameConstants.STAMINA_RECOVERY_TIME, + StaminaRecoverLeftTime = GameConstants.STAMINA_RECOVERY_TIME, + EquipmentSizeLimit = GameConstants.INVENTORY_MAX_EQUIPMENT, + TypeList = { Enumerable.Range(2, 38).Select(i => (uint)i) }, + LevelLockId = 1, + WarshipTheme = new WarshipThemeData + { + WarshipId=0 + }, + TotalLoginDays = 1 + }; + } +} + +public class WarshipAvatarData +{ + public uint FirstAvatarId { get; set; } = 101; + public uint SecondAvatarId { get; set; } = 0; +} \ No newline at end of file diff --git a/Common/Enums/Item/ItemMainTypeEnum.cs b/Common/Enums/Item/ItemMainTypeEnum.cs new file mode 100644 index 0000000..57fab53 --- /dev/null +++ b/Common/Enums/Item/ItemMainTypeEnum.cs @@ -0,0 +1,8 @@ +namespace KianaBH.Enums.Item; + +public enum ItemMainTypeEnum +{ + Material = 1, + Weapon = 2, + Stigmata = 3, +} \ No newline at end of file diff --git a/Common/Enums/Language/ProgramLanguageTypeEnum.cs b/Common/Enums/Language/ProgramLanguageTypeEnum.cs new file mode 100644 index 0000000..6bbf26c --- /dev/null +++ b/Common/Enums/Language/ProgramLanguageTypeEnum.cs @@ -0,0 +1,9 @@ +namespace KianaBH.Enums.Language; + +public enum ProgramLanguageTypeEnum +{ + EN = 0, + CHS = 1, + CHT = 2, + JP = 3 +} \ No newline at end of file diff --git a/Common/Enums/Player/BanTypeEnum.cs b/Common/Enums/Player/BanTypeEnum.cs new file mode 100644 index 0000000..4cad11e --- /dev/null +++ b/Common/Enums/Player/BanTypeEnum.cs @@ -0,0 +1,13 @@ +namespace KianaBH.Enums.Player; + +public enum BanTypeEnum +{ + None = 0, + UseThirdPartySoftware = 1, + ThirdPartySoftware = 2, + AbnormalLogin = 4, + AbnormalAccount = 5, + ViolationTermsService = 6, + AccountRisk = 7, + Unknown = 8 +} \ No newline at end of file diff --git a/Common/Enums/Player/FriendEnum.cs b/Common/Enums/Player/FriendEnum.cs new file mode 100644 index 0000000..919b9a9 --- /dev/null +++ b/Common/Enums/Player/FriendEnum.cs @@ -0,0 +1,7 @@ +namespace KianaBH.Enums.Player; + +public enum ServerEnum +{ + Console = 0, + Chat = 1 +} \ No newline at end of file diff --git a/Common/Enums/Player/OperationEnum.cs b/Common/Enums/Player/OperationEnum.cs new file mode 100644 index 0000000..f2a7e48 --- /dev/null +++ b/Common/Enums/Player/OperationEnum.cs @@ -0,0 +1,9 @@ +namespace KianaBH.Enums.Player; + +public enum OperationEnum +{ + And = 0, + Or = 1, + Not = 2, + Unknow = 3 +} \ No newline at end of file diff --git a/Common/Enums/Player/PermEnum.cs b/Common/Enums/Player/PermEnum.cs new file mode 100644 index 0000000..4453de8 --- /dev/null +++ b/Common/Enums/Player/PermEnum.cs @@ -0,0 +1,9 @@ +namespace KianaBH.Enums.Player; + +public enum PermEnum +{ + Trial = 0, + Support = 1, + Admin = 2, + Other = 10 +} \ No newline at end of file diff --git a/Common/Enums/Player/PlayerStatusEnum.cs b/Common/Enums/Player/PlayerStatusEnum.cs new file mode 100644 index 0000000..2ce79c5 --- /dev/null +++ b/Common/Enums/Player/PlayerStatusEnum.cs @@ -0,0 +1,13 @@ +namespace KianaBH.Enums.Player; + +public enum PlayerStatusEnum +{ + Offline = 0, + Explore = 1, +} + +public enum PlayerSubStatusEnum +{ + None = 0, + Battle = 1 +} \ No newline at end of file diff --git a/Common/Enums/Player/RegionEnum.cs b/Common/Enums/Player/RegionEnum.cs new file mode 100644 index 0000000..d9722e3 --- /dev/null +++ b/Common/Enums/Player/RegionEnum.cs @@ -0,0 +1,29 @@ +namespace KianaBH.Enums.Player; + +public enum BaseRegionEnum +{ + None = 0, + CN = 11, + OS = 2 +} + +public enum RegionEnum +{ + PRODCN = 0, + SANDBOXCN = 1, + PRODOVERSEA = 2, + SANDBOXOVERSEA = 3, + PRODCNPRE = 4, + PRODOVERSEAPRE = 5, + TESTCN = 6, + TESTOVERSEA = 7, + PETCN = 8, + BETACN = 9, + BETACNPRE = 10, + BETAOVERSEA = 11, + PETOS = 12, + HOTFIXCN = 19, + HOTFIXOVERSEA = 20, + UNKNOWN = 21, + UNKNOWN2 = 22, +} \ No newline at end of file diff --git a/Common/Internationalization/I18nManager.cs b/Common/Internationalization/I18nManager.cs new file mode 100644 index 0000000..2bdc84b --- /dev/null +++ b/Common/Internationalization/I18nManager.cs @@ -0,0 +1,102 @@ +using KianaBH.Enums.Language; +using KianaBH.Internationalization.Message; +using KianaBH.Util; +using System.Reflection; + +namespace KianaBH.Internationalization; + +public static class I18NManager +{ + public static Logger Logger = new("I18nManager"); + + public static object Language { get; set; } = new LanguageEN(); + public static Dictionary> PluginLanguages { get; } = []; + + public static void LoadLanguage() + { + var languageStr = "KianaBH.Internationalization.Message.Language" + + ConfigManager.Config.ServerOption.Language; + var languageType = Type.GetType(languageStr); + if (languageType == null) + { + Logger.Warn("Language not found, fallback to EN"); + // fallback to English + languageType = Type.GetType("KianaBH.Internationalization.Message.LanguageEN")!; + } + + var language = Activator.CreateInstance(languageType) ?? throw new Exception("Language not found"); + Language = language; + + Logger.Info(Translate("Server.ServerInfo.LoadedItem", Translate("Word.Language"))); + } + + public static void LoadPluginLanguage(Dictionary> pluginAssemblies) + { + foreach (var (pluginName, types) in pluginAssemblies) + { + var languageType = types.FindAll(x => x.GetCustomAttribute() != null); + if (languageType.Count == 0) // no language to use + continue; + + PluginLanguages.Add(pluginName, []); + foreach (var type in languageType) + { + var attr = type.GetCustomAttribute(); + if (attr == null) continue; + + var language = Activator.CreateInstance(type); + if (language == null) continue; + PluginLanguages[pluginName].Add(attr.LanguageType, language); + } + } + } + + public static string Translate(string key, params string[] args) + { + var pluginLangs = PluginLanguages.Values; + var langs = (from pluginLang in pluginLangs + from o in pluginLang + where o.Key == Enum.Parse(ConfigManager.Config.ServerOption.Language) + select o.Value).ToList(); // get all plugin languages + langs.Add(Language); // add server language + + var result = langs.Select(lang => GetNestedPropertyValue(lang, key)).OfType().FirstOrDefault() ?? key; + + var index = 0; + + return args.Aggregate(result, (current, arg) => current.Replace("{" + index++ + "}", arg)); + } + + public static string TranslateAsCertainLang(string langStr, string key, params string[] args) + { + var languageStr = "KianaBH.Internationalization.Message.Language" + + langStr; + var languageType = Type.GetType(languageStr) ?? + Type.GetType("KianaBH.Internationalization.Message.LanguageEN")!; + var language = Activator.CreateInstance(languageType) ?? throw new Exception("Language not found"); + + List langs = [language]; + + var result = langs.Select(lang => GetNestedPropertyValue(lang, key)).OfType().FirstOrDefault() ?? key; + + var index = 0; + + return args.Aggregate(result, (current, arg) => current.Replace("{" + index++ + "}", arg)); + } + + public static string? GetNestedPropertyValue(object? obj, string propertyName) + { + foreach (var part in propertyName.Split('.')) + { + if (obj == null) return null; + + var type = obj.GetType(); + var property = type.GetProperty(part); + if (property == null) return null; + + obj = property.GetValue(obj, null); + } + + return (string?)obj; + } +} \ No newline at end of file diff --git a/Common/Internationalization/Message/LanguageCHS.cs b/Common/Internationalization/Message/LanguageCHS.cs new file mode 100644 index 0000000..82ef48c --- /dev/null +++ b/Common/Internationalization/Message/LanguageCHS.cs @@ -0,0 +1,527 @@ +namespace KianaBH.Internationalization.Message; + +#region Root + +public class LanguageCHS +{ + public GameTextCHS Game { get; } = new(); + public ServerTextCHS Server { get; } = new(); + public WordTextCHS Word { get; } = new(); // a placeholder for the actual word text +} + +#endregion + +#region Layer 1 + +/// +/// path: Game +/// +public class GameTextCHS +{ + public CommandTextCHS Command { get; } = new(); +} + +/// +/// path: Server +/// +public class ServerTextCHS +{ + public WebTextCHS Web { get; } = new(); + public ServerInfoTextCHS ServerInfo { get; } = new(); +} + +/// +/// path: Word +/// +public class WordTextCHS +{ + public string Rank => "星魂"; + public string Avatar => "角色"; + public string Material => "材料"; + public string Pet => "宠物"; + public string Relic => "遗器"; + public string Equipment => "光锥"; + public string Talent => "行迹"; + public string Banner => "卡池"; + public string Activity => "活动"; + public string CdKey => "兑换码"; + public string VideoKey => "过场动画密钥"; + public string Buff => "祝福"; + public string Miracle => "奇物"; + public string Unlock => "奢侈品"; + public string TrainParty => "派对车厢"; + + // server info + public string Config => "配置文件"; + public string Language => "语言"; + public string Log => "日志"; + public string GameData => "游戏数据"; + public string Cache => "资源缓存"; + public string CustomData => "自定义数据"; + public string Database => "数据库"; + public string Command => "命令"; + public string SSL => "SSL"; + public string Ec2b => "Ec2b"; + public string SdkServer => "Web服务器"; + public string Handler => "包处理器"; + public string Dispatch => "全局分发"; + public string Game => "游戏"; + public string Handbook => "手册"; + public string NotFound => "未找到"; + public string Error => "错误"; + public string FloorInfo => "区域文件"; + public string FloorGroupInfo => "区域组文件"; + public string FloorMissingResult => "传送与世界生成"; + public string FloorGroupMissingResult => "传送、怪物战斗与世界生成"; + public string Mission => "任务"; + public string MissionInfo => "任务文件"; + public string SubMission => "子任务"; + public string SubMissionInfo => "子任务文件"; + public string MazeSkill => "角色秘技"; + public string MazeSkillInfo => "角色秘技文件"; + public string Dialogue => "模拟宇宙事件"; + public string DialogueInfo => "模拟宇宙事件文件"; + public string Performance => "剧情操作"; + public string PerformanceInfo => "剧情操作文件"; + public string RogueChestMap => "模拟宇宙地图"; + public string RogueChestMapInfo => "模拟宇宙地图文件"; + public string ChessRogueRoom => "模拟宇宙DLC"; + public string ChessRogueRoomInfo => "模拟宇宙DLC文件"; + public string SummonUnit => "秘技生成"; + public string SummonUnitInfo => "秘技生成文件"; + public string RogueTournRoom => "差分宇宙"; + public string RogueTournRoomInfo => "差分宇宙房间文件"; + public string TypesOfRogue => "类型的模拟宇宙"; + public string RogueMagicRoom => "不可知域"; + public string RogueMagicRoomInfo => "不可知域房间文件"; + public string RogueDiceSurface => "骰面效果"; + public string RogueDiceSurfaceInfo => "骰面效果文件"; + public string AdventureModifier => "AdventureModifier"; + public string AdventureModifierInfo => "AdventureModifier文件"; + public string RogueMapGen => "RogueMapGen文件"; + public string RogueMiracleGroup => "RogueMiracleGroup文件"; + public string RogueMiracleEffectGen => "RogueMiracleEffectGen文件"; + + public string DatabaseAccount => "数据库账号"; + public string Tutorial => "教程"; +} + +#endregion + +#region Layer 2 + +#region GameText + +/// +/// path: Game.Command +/// +public class CommandTextCHS +{ + public NoticeTextCHS Notice { get; } = new(); + + public GenderTextCHS Gender { get; } = new(); + public AvatarTextCHS Avatar { get; } = new(); + public AnnounceTextCHS Announce { get; } = new(); + public BanTextCHS Ban { get; } = new(); + public GiveTextCHS Give { get; } = new(); + public GiveAllTextCHS GiveAll { get; } = new(); + public LineupTextCHS Lineup { get; } = new(); + public HelpTextCHS Help { get; } = new(); + public KickTextCHS Kick { get; } = new(); + public MissionTextCHS Mission { get; } = new(); + public RelicTextCHS Relic { get; } = new(); + public ReloadTextCHS Reload { get; } = new(); + public RogueTextCHS Rogue { get; } = new(); + public SceneTextCHS Scene { get; } = new(); + public UnlockAllTextCHS UnlockAll { get; } = new(); + public MailTextCHS Mail { get; } = new(); + public RaidTextCHS Raid { get; } = new(); + public AccountTextCHS Account { get; } = new(); + public UnstuckTextCHS Unstuck { get; } = new(); + public SetlevelTextCHS Setlevel { get; } = new(); + public PermissionTextCHS Permission { get; } = new(); +} + +#endregion + +#region ServerText + +/// +/// path: Server.Web +/// +public class WebTextCHS +{ + public string Maintain => "服务器正在维修, 请稍后尝试。"; +} + +/// +/// path: Server.ServerInfo +/// +public class ServerInfoTextCHS +{ + public string Shutdown => "关闭中…"; + public string CancelKeyPressed => "已按下取消键 (Ctrl + C), 服务器即将关闭…"; + public string StartingServer => "正在启动 KianaBH"; + public string CurrentVersion => "当前服务端支持的版本: {0}"; + public string InvalidVersion => "当前为不受支持的游戏版本 {0}\n请更新游戏到 {1}"; + public string LoadingItem => "正在加载 {0}…"; + public string GeneratingItem => "正在生成 {0}…"; + public string WaitingItem => "正在等待进程 {0} 完成…"; + public string RegisterItem => "注册了 {0} 个 {1}。"; + public string FailedToLoadItem => "加载 {0} 失败。"; + public string NewClientSecretKey => "客户端密钥不存在, 正在生成新的客户端密钥。"; + public string FailedToInitializeItem => "初始化 {0} 失败。"; + public string FailedToReadItem => "读取 {0} 失败, 文件{1}"; + public string GeneratedItem => "已生成 {0}。"; + public string LoadedItem => "已加载 {0}。"; + public string LoadedItems => "已加载 {0} 个 {1}。"; + public string ServerRunning => "{0} 服务器正在监听 {1}"; + public string ServerStarted => "启动完成!用时 {0}s, 击败了99%的用户, 输入 ‘help’ 来获取命令帮助"; // 玩梗, 考虑英语版本将其本土化 + public string MissionEnabled => "任务系统已启用, 此功能仍在开发中, 且可能不会按预期工作, 如果遇见任何bug, 请汇报给开发者。"; + public string KeyStoreError => "SSL证书不存在, 已关闭SSL功能。"; + public string CacheLoadSkip => "已跳过缓存加载。"; + + public string ConfigMissing => "{0} 缺失, 请检查你的资源文件夹: {1}, {2} 可能不能使用。"; + public string UnloadedItems => "卸载了所有 {0}。"; + public string SaveDatabase => "已保存数据库, 用时 {0}s"; + public string WaitForAllDone => "现在还不可以进入游戏, 请等待所有项目加载完成后再试"; + + public string UnhandledException => "发生未经处理的异常: {0}"; +} + +#endregion + +#endregion + +#region Layer 3 + +#region CommandText + +/// +/// path: Game.Command.Notice +/// +public class NoticeTextCHS +{ + public string PlayerNotFound => "未找到玩家!"; + public string InvalidArguments => "无效的参数!"; + public string NoPermission => "你没有权限这么做!"; + public string CommandNotFound => "未找到命令! 输入 '/help' 来获取帮助"; + public string TargetOffline => "目标 {0}({1}) 离线了!清除当前目标"; + public string TargetFound => "找到目标 {0}({1}), 下一次命令将默认对其执行"; + public string TargetNotFound => "未找到目标 {0}!"; + public string InternalError => "在处理命令时发生了内部错误: {0}!"; +} + +/// +/// path: Game.Command.Gender +/// +public class GenderTextCHS +{ + public string Desc => "切换主角的性别"; + public string Usage => "用法: /gender [man/woman]"; + public string GenderNotSpecified => "性别不存在!"; + public string GenderChanged => "性别已更改!"; +} + +/// +/// path: Game.Command.UnlockAll +/// +public class UnlockAllTextCHS +{ + public string Desc => + "解锁所有在类别内的对象\n" + + "使用 /unlockall mission 以完成所有任务, 使用后会被踢出, 重新登录后可能会被教程卡住, 请谨慎使用\n" + + "使用 /unlockall tutorial 以解锁所有教程, 使用后会被踢出, 用于部分界面卡住无法行动的情况\n" + + "使用 /unlockall rogue 以解锁所有类型模拟宇宙, 使用后会被踢出, 建议与 /unlockall tutorial 搭配使用以获取更好效果"; + public string Usage => "用法: /unlockall [mission/tutorial/rogue]"; + public string UnlockedAll => "已解锁/完成所有{0}!"; +} + +/// +/// path: Game.Command.Avatar +/// +public class AvatarTextCHS +{ + public string Desc => "设定玩家已有角色的属性, -1为所有已拥有角色"; + public string Usage => + "用法: /avatar talent [角色ID/-1] [行迹等级]\n" + + "用法: /avatar rank [角色ID/-1] [星魂]\n" + + "用法: /avatar level [角色ID/-1] [角色等级]"; + public string InvalidLevel => "{0} 等级无效!"; + public string AllAvatarsLevelSet => "已将全部角色 {0} 等级设置为 {1}."; + public string AvatarLevelSet => "已将 {0} 角色 {1} 等级设置为 {2}."; + public string AvatarNotFound => "角色不存在!"; +} + +/// +/// path: Game.Command.Give +/// +public class GiveTextCHS +{ + public string Desc => "给予玩家物品"; + public string Usage => "用法: /give [物品ID] l[等级] x[数量] r[叠影]"; + public string ItemNotFound => "未找到物品!"; + public string GiveItem => "已给予 {0} {1} 个物品 {2}."; +} + +/// +/// path: Game.Command.GiveAll +/// +public class GiveAllTextCHS +{ + public string Desc => "给予玩家全部指定类型的物品"; + public string Usage => + "用法: /giveall avatar r[星魂] l[等级]\n" + + "用法: /giveall material x[数量]\n" + + "用法: /giveall equipment r[叠影] l[等级] x[数量]\n" + + "用法: /giveall relic x[数量]\n" + + "用法: /giveall unlock\n" + + "用法: /giveall train\n" + + "用法: /giveall path"; + public string GiveAllItems => "已给予所有 {0}, 各 {1} 个."; +} + +/// +/// path: Game.Command.Lineup +/// +public class LineupTextCHS +{ + public string Desc => "管理玩家的队伍信息"; + public string Usage => + "用法: /lineup mp\n" + + "用法: /lineup sp\n" + + "用法: /lineup heal"; + public string GainedMp => "成功恢复秘技点!"; + public string GainedSp => "成功恢复能量!"; + public string HealedAllAvatars => "成功治愈当前队伍中的所有角色!"; +} + +/// +/// path: Game.Command.Help +/// +public class HelpTextCHS +{ + public string Desc => "显示帮助信息"; + public string Usage => + "用法: /help\n" + + "用法: /help [命令]"; + public string Commands => "命令: "; + public string CommandPermission => "所需权限: "; + public string CommandAlias => "命令别名: "; +} + +/// +/// path: Game.Command.Kick +/// +public class KickTextCHS +{ + public string Desc => "踢出玩家"; + public string Usage => "用法: /kick"; + public string PlayerKicked => "玩家 {0} 已被踢出!"; +} + +/// +/// path: Game.Command.Mission +/// +public class MissionTextCHS +{ + public string Desc => + "管理玩家的任务\n" + + "使用 pass 完成当前正在进行的所有任务, 此命令易造成严重卡顿, 请尽量使用 /mission finish 替代\n" + + "使用 finish [子任务ID] 完成指定子任务, 请浏览 handbook 来获取子任务ID\n" + + "使用 finishmain [主任务ID] 完成指定主任务, 请浏览 handbook 来获取主任务ID\n" + + "使用 running [-all] 获取正在追踪的任务, 增加'-all'则显示所有正在进行的任务以及可能卡住的任务, 使用后可能会出现较长任务列表, 请注意甄别\n" + + "使用 reaccept [主任务ID] 可重新进行指定主任务, 请浏览 handbook 来获取主任务ID"; + public string Usage => + "用法: /mission pass\n" + + "用法: /mission finish [子任务ID]\n" + + "用法: /mission running [-all]\n" + + "用法: /mission reaccept [主任务ID]\n" + + "用法: /mission finishmain [主任务ID]"; + public string AllMissionsFinished => "所有任务已完成!"; + public string AllRunningMissionsFinished => "共 {0} 个进行中的任务已完成!"; + public string MissionFinished => "任务 {0} 已完成!"; + public string InvalidMissionId => "无效的任务ID!"; + public string NoRunningMissions => "没有正在进行的任务!"; + public string RunningMissions => "正在进行的任务: "; + public string PossibleStuckMissions => "可能卡住的任务: "; + public string MainMission => "主任务"; + public string MissionReAccepted => "重新接受任务 {0}."; +} + +/// +/// path: Game.Command.Relic +/// +public class RelicTextCHS +{ + public string Desc => "管理玩家的遗器, 等级限制: 1 ≤ 等级 ≤ 9999"; + public string Usage => "用法: /relic [遗器ID] [主词条ID] [ID1:等级] [ID2:等级] l[等级] x[数量]"; + public string RelicNotFound => "遗器不存在!"; + public string InvalidMainAffixId => "主词条ID无效!"; + public string InvalidSubAffixId => "副词条ID无效!"; + public string RelicGiven => "给予玩家 {0} {1} 个遗器 {2}."; +} + +/// +/// path: Game.Command.Reload +/// +public class ReloadTextCHS +{ + public string Desc => "重新加载指定的配置"; + public string Usage => "用法: /reload [banner/activity]"; + public string ConfigReloaded => "配置 {0} 已重新加载!"; +} + +/// +/// path: Game.Command.Rogue +/// +public class RogueTextCHS +{ + public string Desc => "管理模拟宇宙数据, -1意为所有已拥有祝福, buff获取祝福, enhance强化祝福"; + public string Usage => + "用法: /rogue money [宇宙碎片数量]\n" + + "用法: /rogue buff [祝福ID/-1]\n" + + "用法: /rogue miracle [奇物ID]\n" + + "用法: /rogue enhance [祝福ID/-1]\n" + + "用法: /rogue unstuck - 脱离事件"; + public string PlayerGainedMoney => "已获得 {0} 宇宙碎片."; + public string PlayerGainedAllItems => "已获得所有{0}."; + public string PlayerGainedItem => "已获得{0} {1}."; + public string PlayerEnhancedBuff => "已强化祝福 {0}."; + public string PlayerEnhancedAllBuffs => "已强化所有祝福."; + public string PlayerUnstuck => "已脱离事件."; + public string NotFoundItem => "未找到 {0}!"; + public string PlayerNotInRogue => "玩家不在模拟宇宙中!"; +} + +/// +/// path: Game.Command.Scene +/// +public class SceneTextCHS +{ + public string Desc => + "管理玩家场景\n" + + "使用 PlaneId 默认进入指定场景\n" + + "使用 group 来获取组, 使用 prop 来设置道具状态, 在 PropStateEnum 获取状态列表\n" + + "使用 unlockall 来解锁场景内所有道具(open状态), 可能导致游戏加载卡条, 使用 /scene reset 解决\n" + + "使用 reload 来重新加载当前场景, 并回到初始位置\n" + + "使用 reset 来重置指定场景所有道具状态"; + public string Usage => + "用法: /scene [PlaneId]\n" + + "用法: /scene cur\n" + + "用法: /scene reload\n" + + "用法: /scene group\n" + + "用法: /scene unlockall\n" + + "用法: /scene reset [PlaneId]" + + "用法: /scene prop [组ID] [道具ID] [状态]\n" + + "用法: /scene remove [实体ID]\n"; + + public string LoadedGroups => "已加载组: {0}."; + public string PropStateChanged => "道具: {0} 的状态已设置为 {1}."; + public string PropNotFound => "未找到道具!"; + public string EntityRemoved => "实体 {0} 已被移除."; + public string EntityNotFound => "未找到实体!"; + public string AllPropsUnlocked => "所有道具已解锁!"; + public string SceneChanged => "已进入场景 {0}."; + public string SceneReloaded => "场景已重新加载!"; + public string SceneReset => "已重置场景 {0} 中所有道具状态!"; + public string CurrentScene => "当前场景 EntryId: {0}, PlaneId: {1}, FloorId: {2}."; +} + +/// +/// path: Game.Command.Mail +/// +public class MailTextCHS +{ + public string Desc => "发送邮件"; + public string Usage => "用法: /mail [发送名称] [标题] [内容] [ID1:数量,ID2:数量]"; + public string MailSent => "邮件已发送!"; +} + +/// +/// path: Game.Command.Raid +/// +public class RaidTextCHS +{ + public string Desc => "管理玩家的任务临时场景"; + public string Usage => "用法: /raid leave"; + public string Leaved => "已离开临时场景!"; +} + +/// +/// path: Game.Command.Account +/// +public class AccountTextCHS +{ + public string Desc => "管理数据库账号"; + public string Usage => + "用法: /account create [用户名] [UID] [密码]\n" + + "用法: /account delete [UID]"; + public string InvalidUid => "UID无效!"; + public string InvalidAccount => "账号 {0} 无效!"; + public string CreateSuccess => "账号 {0} 创建成功!"; + public string DeleteSuccess => "账号 {0} 删除成功!"; +} + +/// +/// path: Game.Command.Announce +/// +public class AnnounceTextCHS +{ + public string Desc => "发送弹窗公告"; + public string Usage => "用法: /announce [Text] [Color]"; + public string SendSuccess => "发送成功!"; +} + +/// +/// path: Game.Command.Ban +/// +public class BanTextCHS +{ + public string Desc => "封禁或解封用户"; + public string Usage => "用法: /ban [add/delete]"; + public string BanSuccess => "账号已封禁!"; + public string UnBanSuccess => "账号已解封!"; +} + +/// +/// path: Game.Command.Unstuck +/// +public class UnstuckTextCHS +{ + public string Desc => "将玩家传送回默认场景"; + public string Usage => "用法: /unstuck [UID]"; + public string UnstuckSuccess => "已成功将该玩家传送回默认场景."; + public string UidNotExist => "该UID不存在!"; + public string PlayerIsOnline => "该玩家目前在线上!"; +} + +/// +/// path: Game.Command.Setlevel +/// +public class SetlevelTextCHS +{ + public string Desc => "设定玩家等级"; + public string Usage => "用法: /setlevel [等级]"; + public string SetlevelSuccess => "等级设定成功!"; +} + +/// +/// path: Game.Command.Permission +/// +public class PermissionTextCHS +{ + public string Desc => "管理玩家权限"; + public string Usage => + "用法: /permission add [权限]\n" + + "用法: /permission remove [权限]\n" + + "用法: /permission clean [权限]"; + public string InvalidPerm => "权限 {0} 不存在!"; + public string Added => "已添加权限 {0} 到玩家 {1}!"; + public string Removed => "已移除玩家 {0} 的权限 {1}!"; + public string Cleaned => "已清除玩家 {0} 的所有权限!"; +} + +#endregion + +#endregion \ No newline at end of file diff --git a/Common/Internationalization/Message/LanguageCHT.cs b/Common/Internationalization/Message/LanguageCHT.cs new file mode 100644 index 0000000..9e46c70 --- /dev/null +++ b/Common/Internationalization/Message/LanguageCHT.cs @@ -0,0 +1,530 @@ +namespace KianaBH.Internationalization.Message; + +#region Root + +public class LanguageCHT +{ + public GameTextCHT Game { get; } = new(); + public ServerTextCHT Server { get; } = new(); + public WordTextCHT Word { get; } = new(); // a placeholder for the actual word text +} + +#endregion + +#region Layer 1 + +/// +/// path: Game +/// +public class GameTextCHT +{ + public CommandTextCHT Command { get; } = new(); +} + +/// +/// path: Server +/// +public class ServerTextCHT +{ + public WebTextCHT Web { get; } = new(); + public ServerInfoTextCHT ServerInfo { get; } = new(); +} + +/// +/// path: Word +/// +public class WordTextCHT +{ + public string Rank => "星魂"; + public string Avatar => "角色"; + public string Material => "材料"; + public string Pet => "寵物"; + public string Relic => "遺器"; + public string Equipment => "光錐"; + public string Talent => "行跡"; + public string Banner => "卡池"; + public string Activity => "活動"; + public string CdKey => "兌換碼"; + public string VideoKey => "過場動畫金鑰"; + public string Buff => "祝福"; + public string Miracle => "奇物"; + public string Unlock => "奢侈品"; + public string TrainParty => "派對車廂"; + + // server info + public string Config => "配置文件"; + public string Language => "語言"; + public string Log => "日誌"; + public string GameData => "遊戲數據"; + public string Cache => "資源緩存"; + public string CustomData => "自定義數據"; + public string Database => "數據庫"; + public string Command => "命令"; + public string SSL => "SSL"; + public string Ec2b => "Ec2b"; + public string SdkServer => "Web服務器"; + public string Handler => "包處理器"; + public string Dispatch => "全局分發"; + public string Game => "遊戲"; + public string Handbook => "手冊"; + public string NotFound => "未找到"; + public string Error => "錯誤"; + public string FloorInfo => "區域文件"; + public string FloorGroupInfo => "區域組文件"; + public string FloorMissingResult => "傳送與世界生成"; + public string FloorGroupMissingResult => "傳送、怪物戰鬥與世界生成"; + public string Mission => "任務"; + public string MissionInfo => "任務文件"; + public string SubMission => "子任務"; + public string SubMissionInfo => "子任務文件"; + public string MazeSkill => "角色秘技"; + public string MazeSkillInfo => "角色秘技文件"; + public string Dialogue => "模擬宇宙事件"; + public string DialogueInfo => "模擬宇宙事件文件"; + public string Performance => "劇情操作"; + public string PerformanceInfo => "劇情操作文件"; + public string RogueChestMap => "模擬宇宙地圖"; + public string RogueChestMapInfo => "模擬宇宙地圖文件"; + public string ChessRogueRoom => "模擬宇宙DLC"; + public string ChessRogueRoomInfo => "模擬宇宙DLC文件"; + public string SummonUnit => "秘技生成"; + public string SummonUnitInfo => "秘技生成文件"; + public string RogueTournRoom => "差分宇宙"; + public string RogueTournRoomInfo => "差分宇宙房間文件"; + public string TypesOfRogue => "類型的模擬宇宙"; + public string RogueMagicRoom => "不可知域"; + public string RogueMagicRoomInfo => "不可知域房間文件"; + public string RogueDiceSurface => "骰面效果"; + public string RogueDiceSurfaceInfo => "骰面效果文件"; + public string AdventureModifier => "AdventureModifier"; + public string AdventureModifierInfo => "AdventureModifier文件"; + public string RogueMapGen => "RogueMapGen文件"; + public string RogueMiracleGroup => "RogueMiracleGroup文件"; + public string RogueMiracleEffectGen => "RogueMiracleEffectGen文件"; + + public string DatabaseAccount => "數據庫賬號"; + public string Tutorial => "教程"; +} + +#endregion + +#region Layer 2 + +#region GameText + +/// +/// path: Game.Command +/// +public class CommandTextCHT +{ + public NoticeTextCHT Notice { get; } = new(); + + public GenderTextCHT Gender { get; } = new(); + public AvatarTextCHT Avatar { get; } = new(); + public AnnounceTextCHT Announce { get; } = new(); + public BanTextCHT Ban { get; } = new(); + public GiveTextCHT Give { get; } = new(); + public GiveAllTextCHT GiveAll { get; } = new(); + public LineupTextCHT Lineup { get; } = new(); + public HelpTextCHT Help { get; } = new(); + public KickTextCHT Kick { get; } = new(); + public MissionTextCHT Mission { get; } = new(); + public RelicTextCHT Relic { get; } = new(); + public ReloadTextCHT Reload { get; } = new(); + public RogueTextCHT Rogue { get; } = new(); + public SceneTextCHT Scene { get; } = new(); + public UnlockAllTextCHT UnlockAll { get; } = new(); + public MailTextCHT Mail { get; } = new(); + public RaidTextCHT Raid { get; } = new(); + public AccountTextCHT Account { get; } = new(); + public UnstuckTextCHT Unstuck { get; } = new(); + public SetlevelTextCHT Setlevel { get; } = new(); + public PermissionTextCHT Permission { get; } = new(); +} + +#endregion + +#region ServerText + +/// +/// path: Server.Web +/// +public class WebTextCHT +{ + public string Maintain => "服務器正在維修, 請稍後嘗試。"; +} + +/// +/// path: Server.ServerInfo +/// +public class ServerInfoTextCHT +{ + public string Shutdown => "關閉中…"; + public string CancelKeyPressed => "已按下取消鍵 (Ctrl + C), 服務器即將關閉…"; + public string StartingServer => "正在啟動 KianaBH"; + public string CurrentVersion => "當前服務端支援的版本: {0}"; + public string InvalidVersion => "目前為不受支援的遊戲版本 {0}\n請更新遊戲到 {1}"; + public string LoadingItem => "正在加載 {0}…"; + public string GeneratingItem => "正在生成 {0}…"; + public string WaitingItem => "正在等待進程 {0} 完成…"; + public string RegisterItem => "註冊了 {0} 個 {1}。"; + public string FailedToLoadItem => "加載 {0} 失敗。"; + public string NewClientSecretKey => "客戶端密鑰不存在, 正在生成新的客戶端密鑰。"; + public string FailedToInitializeItem => "初始化 {0} 失敗。"; + public string FailedToReadItem => "讀取 {0} 失敗, 文件{1}"; + public string GeneratedItem => "已生成 {0}。"; + public string LoadedItem => "已加載 {0}。"; + public string LoadedItems => "已加載 {0} 個 {1}。"; + public string ServerRunning => "{0} 服務器正在監聽 {1}"; + public string ServerStarted => "啟動完成!用時 {0}s, 擊敗了99%的用戶, 輸入 『help』 來獲取命令幫助"; // 玩梗, 考慮英語版本將其本土化 + public string MissionEnabled => "任務系統已啟用, 此功能仍在開發中, 且可能不會按預期工作, 如果遇見任何bug, 請匯報給開發者。"; + public string KeyStoreError => "SSL證書不存在, 已關閉SSL功能。"; + public string CacheLoadSkip => "已跳過緩存加載。"; + + public string ConfigMissing => "{0} 缺失, 請檢查你的資源文件夾: {1}, {2} 可能不能使用。"; + public string UnloadedItems => "卸載了所有 {0}。"; + public string SaveDatabase => "已保存數據庫, 用時 {0}s"; + public string WaitForAllDone => "現在還不可以進入遊戲, 請等待所有項目加載完成後再試"; + + public string UnhandledException => "發生未經處理的異常: {0}"; +} + +#endregion + +#endregion + +#region Layer 3 + +#region CommandText + +/// +/// path: Game.Command.Notice +/// +public class NoticeTextCHT +{ + public string PlayerNotFound => "未找到玩家!"; + public string InvalidArguments => "無效的參數!"; + public string NoPermission => "你沒有權限這麽做!"; + public string CommandNotFound => "未找到命令! 輸入 '/help' 來獲取幫助"; + public string TargetOffline => "目標 {0}({1}) 離線了!清除當前目標"; + public string TargetFound => "找到目標 {0}({1}), 下一次命令將默認對其執行"; + public string TargetNotFound => "未找到目標 {0}!"; + public string InternalError => "在處理命令時發生了內部錯誤: {0}!"; +} + +/// +/// path: Game.Command.Gender +/// +public class GenderTextCHT +{ + public string Desc => "切換主角的性別"; + public string Usage => "用法: /gender [man/woman]"; + public string GenderNotSpecified => "性別不存在!"; + public string GenderChanged => "性別已更改!"; +} + +/// +/// path: Game.Command.UnlockAll +/// +public class UnlockAllTextCHT +{ + public string Desc => + "解鎖所有在類別內的對象\n" + + "使用 /unlockall mission 以完成所有任務, 使用後會被踢出, 重新登錄後可能會被教程卡住, 請謹慎使用\n" + + "使用 /unlockall tutorial 以解鎖所有教程, 使用後會被踢出, 用於部分界面卡住無法行動的情況\n" + + "使用 /unlockall rogue 以解鎖所有類型模擬宇宙, 使用後會被踢出, 建議與 /unlockall tutorial 搭配使用以獲取更好效果"; + + public string Usage => "用法: /unlockall [mission/tutorial/rogue]"; + public string UnlockedAll => "已解鎖/完成所有{0}!"; +} + +/// +/// path: Game.Command.Avatar +/// +public class AvatarTextCHT +{ + public string Desc => "設定玩家已有角色的屬性, -1意為所有已擁有角色"; + + public string Usage => + "用法: /avatar talent [角色ID/-1] [行跡等級]\n" + + "用法: /avatar rank [角色ID/-1] [星魂]\n" + + "用法: /avatar level [角色ID/-1] [角色等級]"; + public string InvalidLevel => "{0}等級無效!"; + public string AllAvatarsLevelSet => "已將全部角色 {0}等級設置為 {1}."; + public string AvatarLevelSet => "已將 {0} 角色 {1}等級設置為 {2}."; + public string AvatarNotFound => "角色不存在!"; +} + +/// +/// path: Game.Command.Give +/// +public class GiveTextCHT +{ + public string Desc => "給予玩家物品"; + public string Usage => "用法: /give [物品ID] l[等級] x[數量] r[疊影]"; + public string ItemNotFound => "未找到物品!"; + public string GiveItem => "給予 @{0} {1} 個物品 {2}."; +} + +/// +/// path: Game.Command.GiveAll +/// +public class GiveAllTextCHT +{ + public string Desc => "給予玩家全部指定類型的物品"; + public string Usage => + "用法: /giveall avatar r[星魂] l[等級]\n" + + "用法: /giveall material x[數量]\n" + + "用法: /giveall equipment r[叠影] l[等級] x[數量]\n" + + "用法: /giveall relic l<等級> x<數量>\n" + + "用法: /giveall unlock\n" + + "用法: /giveall train\n" + + "用法: /giveall path"; + public string GiveAllItems => "已給予所有 {0}, 各 {1} 個."; +} + +/// +/// path: Game.Command.Lineup +/// +public class LineupTextCHT +{ + public string Desc => "管理玩家的隊伍資訊"; + public string Usage => + "用法: /lineup mp\n" + + "用法: /lineup sp\n" + + "用法: /lineup heal"; + public string GainedMp => "成功恢復秘技點!"; + public string GainedSp => "成功恢復能量!"; + public string HealedAllAvatars => "成功治愈當前隊伍中的所有角色!"; +} + +/// +/// path: Game.Command.Help +/// +public class HelpTextCHT +{ + public string Desc => "顯示幫助信息"; + public string Usage => + "用法: /help\n" + + "用法: /help [命令]"; + public string Commands => "命令: "; + public string CommandPermission => "所需權限: "; + public string CommandAlias => "命令別名: "; +} + +/// +/// path: Game.Command.Kick +/// +public class KickTextCHT +{ + public string Desc => "踢出玩家"; + public string Usage => "用法: /kick"; + public string PlayerKicked => "玩家 {0} 已被踢出!"; +} + +/// +/// path: Game.Command.Mission +/// +public class MissionTextCHT +{ + public string Desc => + "管理玩家的任務\n" + + "使用 pass 完成當前正在進行的所有任務, 此命令易造成嚴重卡頓, 請盡量使用 /mission finish 替代\n" + + "使用 finish [子任務ID] 完成指定子任務, 請流覽 handbook 來獲取子任務ID\n" + + "使用 finishmain [主任務ID] 完成指定主任務, 請流覽 handbook 來獲取主任務ID\n" + + "使用 running [-all] 獲取正在追蹤的任務, 增加'-all'則顯示所有正在進行的任務以及可能卡住的任務, 使用後可能會出現較長任務清單, 請注意甄別\n" + + "使用 reaccept [主任務ID] 可重新進行指定主任務, 請流覽 handbook 來獲取主任務ID"; + + public string Usage => + "用法: /mission pass\n" + + "用法: /mission finish [子任務]\n" + + "用法: /mission running [-all]\n" + + "用法: /mission reaccept [主任務ID]\n" + + "用法: /mission finishmain [主任務ID]"; + public string AllMissionsFinished => "所有任務已完成!"; + public string AllRunningMissionsFinished => "共 {0} 個進行中的任務已完成!"; + public string MissionFinished => "任務 {0} 已完成!"; + public string InvalidMissionId => "無效的任務ID!"; + public string NoRunningMissions => "沒有正在進行的任務!"; + public string RunningMissions => "正在進行的任務: "; + public string PossibleStuckMissions => "可能卡住的任務: "; + public string MainMission => "主任務"; + public string MissionReAccepted => "重新接受任務 {0}."; +} + +/// +/// path: Game.Command.Relic +/// +public class RelicTextCHT +{ + public string Desc => "管理玩家的遺器, 等級限製: 1 ≤ 等級 ≤ 9999"; + public string Usage => "用法: /relic [遺器ID] [主詞條ID] [ID1:等級] [ID2:等級] l[等級] x[數量]"; + public string RelicNotFound => "遺器不存在!"; + public string InvalidMainAffixId => "主詞條ID無效!"; + public string InvalidSubAffixId => "副詞條ID無效!"; + public string RelicGiven => "給予玩家 @{0} {1} 個遺器 {2}, 主詞條 {3}."; +} + +/// +/// path: Game.Command.Reload +/// +public class ReloadTextCHT +{ + public string Desc => "重新加載指定的配置"; + public string Usage => "用法: /reload [banner/activity]"; + public string ConfigReloaded => "配置 {0} 已重新加載!"; +} + +/// +/// path: Game.Command.Rogue +/// +public class RogueTextCHT +{ + public string Desc => "管理模擬宇宙數據, -1意為所有已擁有祝福, buff來獲取祝福, enhance強化祝福"; + + public string Usage => + "用法: /rogue money [宇宙碎片數量]\n" + + "用法: /rogue buff [祝福ID/-1]\n" + + "用法: /rogue miracle [奇物ID]\n" + + "用法: /rogue enhance [祝福ID/-1]\n" + + "用法: /rogue unstuck - 脫離事件"; + public string PlayerGainedMoney => "已獲得 {0} 宇宙碎片."; + public string PlayerGainedAllItems => "已獲得所有{0}."; + public string PlayerGainedItem => "已獲得{0} {1}."; + public string PlayerEnhancedBuff => "已強化祝福 {0}."; + public string PlayerEnhancedAllBuffs => "已強化所有祝福."; + public string PlayerUnstuck => "已脫離事件."; + public string NotFoundItem => "未找到 {0}!"; + public string PlayerNotInRogue => "玩家不在模擬宇宙中!"; +} + +/// +/// path: Game.Command.Scene +/// +public class SceneTextCHT +{ + public string Desc => + "管理玩家場景\n" + + "使用 PlaneId 預設進入指定場景\n" + + "使用 group 來獲取組, 使用 prop 來設置道具狀態, 在 PropStateEnum 獲取狀態列表\n" + + "使用 unlockall 來解鎖場景內所有道具(open狀態), 可能導致遊戲加載卡條, 使用 /scene reset 解決\n" + + "使用 reload 來重新加載當前場景, 並回到初始位置\n" + + "使用 reset 來重置指定場景所有道具狀態"; + public string Usage => + "用法: /scene [entryId]\n" + + "用法: /scene cur\n" + + "用法: /scene reload\n" + + "用法: /scene group\n" + + "用法: /scene unlockall\n" + + "用法: /scene reset [floorId]" + + "用法: /scene prop [組ID] [道具ID] [狀態]\n" + + "用法: /scene remove [實體ID]\n"; + public string LoadedGroups => "已加載組: {0}."; + public string PropStateChanged => "道具: {0} 的狀態已設置為 {1}."; + public string PropNotFound => "未找到道具!"; + public string EntityRemoved => "實體 {0} 已被移除."; + public string EntityNotFound => "未找到實體!"; + public string AllPropsUnlocked => "所有道具已解鎖!"; + public string SceneChanged => "已進入場景 {0}."; + public string SceneReloaded => "場景已重新加載!"; + public string SceneReset => "已重置場景 {0} 中所有道具狀態!"; + public string CurrentScene => "當前場景Entry Id: {0}, Plane Id: {1}, Floor Id: {2}."; +} + +/// +/// path: Game.Command.Mail +/// +public class MailTextCHT +{ + public string Desc => "發送郵件"; + public string Usage => "用法: /mail [發送名稱] [標題] [內容] [ID1:數量,ID2:數量]"; + public string MailSent => "郵件已發送!"; +} + +/// +/// path: Game.Command.Raid +/// +public class RaidTextCHT +{ + public string Desc => "管理玩家的任務臨時場景"; + public string Usage => "用法: /raid leave"; + public string Leaved => "已離開臨時場景!"; +} + +/// +/// path: Game.Command.Account +/// +public class AccountTextCHT +{ + public string Desc => "管理資料庫帳號"; + public string Usage => + "用法: /account create [用户名] [UID] [密碼]\n" + + "用法: /account delete [UID]"; + public string InvalidUid => "UID無效!"; + public string InvalidAccount => "帳號 {0} 無效!"; + public string CreateSuccess => "賬號 {0} 創建成功!"; + public string DeleteSuccess => "賬號 {0} 刪除成功!"; +} + +/// +/// path: Game.Command.Announce +/// +public class AnnounceTextCHT +{ + public string Desc => "發送彈窗公告"; + public string Usage => "用法: /announce [Text] [Color]"; + public string SendSuccess => "發送成功!"; +} + +/// +/// path: Game.Command.Ban +/// +public class BanTextCHT +{ + public string Desc => "封禁或解封用户"; + public string Usage => "用法: /ban [add/delete]"; + public string BanSuccess => "帳號已封禁!"; + public string UnBanSuccess => "帳號已解封!"; +} + +/// +/// path: Game.Command.Unstuck +/// +public class UnstuckTextCHT +{ + public string Desc => "將玩家傳送回默認場景"; + public string Usage => "用法: /unstuck [UID]"; + public string UnstuckSuccess => "已成功將該玩家傳送回默認場景"; + public string UidNotExist => "該UID不存在!"; + public string PlayerIsOnline => "該玩家目前在線上!"; +} + +/// +/// path: Game.Command.Setlevel +/// +public class SetlevelTextCHT +{ + public string Desc => "設定玩家等級"; + public string Usage => "用法: /setlevel [等級]"; + public string SetlevelSuccess => "等級設定成功!"; +} + +/// +/// path: Game.Command.Permission +/// +public class PermissionTextCHT +{ + public string Desc => "管理玩家權限"; + public string Usage => + "用法: /permission add [權限]\n" + + "用法: /permission remove [權限]\n" + + "用法: /permission clean [權限]"; + public string InvalidPerm => "權限 {0} 不存在!"; + public string Added => "已添加權限 {0} 到玩家 {1}!"; + public string Removed => "已移除玩家 {0} 的權限 {1}!"; + public string Cleaned => "已清除玩家 {0} 的所有權限!"; +} + +#endregion + +#endregion \ No newline at end of file diff --git a/Common/Internationalization/Message/LanguageEN.cs b/Common/Internationalization/Message/LanguageEN.cs new file mode 100644 index 0000000..7fd126a --- /dev/null +++ b/Common/Internationalization/Message/LanguageEN.cs @@ -0,0 +1,570 @@ +namespace KianaBH.Internationalization.Message; + +#region Root + +public class LanguageEN +{ + public GameTextEN Game { get; } = new(); + public ServerTextEN Server { get; } = new(); + public WordTextEN Word { get; } = new(); // a placeholder for the actual word text +} + +#endregion + +#region Layer 1 + +/// +/// path: Game +/// +public class GameTextEN +{ + public CommandTextEN Command { get; } = new(); +} + +/// +/// path: Server +/// +public class ServerTextEN +{ + public WebTextEN Web { get; } = new(); + public ServerInfoTextEN ServerInfo { get; } = new(); +} + +/// +/// path: Word +/// +public class WordTextEN +{ + public string Rank => "Rank"; + public string Avatar => "Avatar"; + public string Material => "Material"; + public string Pet => "Pet"; + public string Relic => "Relic"; + public string Equipment => "Light Cone"; + public string Talent => "Talent"; + public string Banner => "Gacha"; + public string Activity => "Activity"; + public string CdKey => "CdKey"; + public string VideoKey => "VideoKey"; + public string Buff => "Blessing"; + public string Miracle => "Curio"; + public string Unlock => "Luxury"; + public string TrainParty => "TrainParty"; + + // server info + public string Config => "Config File"; + public string Language => "Language"; + public string Log => "Log"; + public string GameData => "Game Data"; + public string Cache => "Resource Cache"; + public string CustomData => "Custom Data"; + public string Database => "Database"; + public string Command => "Command"; + public string SSL => "SSL"; + public string Ec2b => "Ec2b"; + public string SdkServer => "Web Server"; + public string Handler => "Packet Handler"; + public string Dispatch => "Global Dispatch"; + public string Game => "Game"; + public string Handbook => "Handbook"; + public string NotFound => "Not Found"; + public string Error => "Error"; + public string FloorInfo => "Floor File"; + public string FloorGroupInfo => "Floor Group File"; + public string FloorMissingResult => "Teleportation and World Generation"; + public string FloorGroupMissingResult => "Teleportation, Monster Battles, and World Generation"; + public string Mission => "Mission"; + public string MissionInfo => "Mission File"; + public string SubMission => "Sub Mission"; + public string SubMissionInfo => "Sub Mission File"; + public string MazeSkill => "Maze Skill"; + public string MazeSkillInfo => "Maze Skill File"; + public string Dialogue => "Simulated Universe Event"; + public string DialogueInfo => "Simulated Universe Event File"; + public string Performance => "Performance"; + public string PerformanceInfo => "Performance File"; + public string RogueChestMap => "Simulated Universe Map"; + public string RogueChestMapInfo => "Simulated Universe Map File"; + public string ChessRogueRoom => "Simulated Universe DLC"; + public string ChessRogueRoomInfo => "Simulated Universe DLC File"; + public string SummonUnit => "Summon Unit"; + public string SummonUnitInfo => "Summon Unit File"; + public string RogueTournRoom => "Divergent Rogue Room"; + public string RogueTournRoomInfo => "Divergent Rogue Room File"; + public string TypesOfRogue => "types of rogue"; + public string RogueMagicRoom => "Unknowable Domain Room"; + public string RogueMagicRoomInfo => "Unknowable Domain Room File"; + public string RogueDiceSurface => "Dice Surface Effect"; + public string RogueDiceSurfaceInfo => "Dice Surface Effect File"; + public string AdventureModifier => "AdventureModifier"; + public string AdventureModifierInfo => "AdventureModifier File"; + public string RogueMapGen => "RogueMapGen File"; + public string RogueMiracleGroup => "RogueMiracleGroup File"; + public string RogueMiracleEffectGen => "RogueMiracleEffectGen File"; + + public string DatabaseAccount => "Database Account"; + public string Tutorial => "Tutorial"; +} + +#endregion + +#region Layer 2 + +#region GameText + +/// +/// path: Game.Command +/// +public class CommandTextEN +{ + public NoticeTextEN Notice { get; } = new(); + + public GenderTextEN Gender { get; } = new(); + public AvatarTextEN Avatar { get; } = new(); + public AnnounceTextEN Announce { get; } = new(); + public BanTextEN Ban { get; } = new(); + public GiveTextEN Give { get; } = new(); + public GiveAllTextEN GiveAll { get; } = new(); + public LineupTextEN Lineup { get; } = new(); + public HelpTextEN Help { get; } = new(); + public KickTextEN Kick { get; } = new(); + public MissionTextEN Mission { get; } = new(); + public RelicTextEN Relic { get; } = new(); + public ReloadTextEN Reload { get; } = new(); + public RogueTextEN Rogue { get; } = new(); + public SceneTextEN Scene { get; } = new(); + public UnlockAllTextEN UnlockAll { get; } = new(); + public MailTextEN Mail { get; } = new(); + public RaidTextEN Raid { get; } = new(); + public AccountTextEN Account { get; } = new(); + public UnstuckTextEN Unstuck { get; } = new(); + public SetlevelTextEN Setlevel { get; } = new(); + public PermissionTextEN Permission { get; } = new(); + public RemoveItemTextEN RemoveItem { get; } = new(); + public SkipTextEN Skip { get; } = new(); +} + +#endregion + +#region ServerTextEN + +/// +/// path: Server.Web +/// +public class WebTextEN +{ + public string Maintain => "The server is undergoing maintenance, please try again later."; +} + +/// +/// path: Server.ServerInfo +/// +public class ServerInfoTextEN +{ + public string Shutdown => "Shutting down..."; + public string CancelKeyPressed => "Cancel key pressed (Ctrl + C), server shutting down..."; + public string StartingServer => "Starting KianaBH"; + public string CurrentVersion => "Server supported versions: {0}"; + public string InvalidVersion => "Unsupported game version {0}\nPlease update game to {1}"; + public string LoadingItem => "Loading {0}..."; + public string GeneratingItem => "Building {0}..."; + public string WaitingItem => "Waiting for process {0} to complete..."; + public string RegisterItem => "Registered {0} {1}(s)."; + public string FailedToLoadItem => "Failed to load {0}."; + public string NewClientSecretKey => "Client Secret Key does not exist and a new Client Secret Key is being generated."; + public string FailedToInitializeItem => "Failed to initialize {0}."; + public string FailedToReadItem => "Failed to read {0}, file {1}"; + public string GeneratedItem => "Generated {0}."; + public string LoadedItem => "Loaded {0}."; + public string LoadedItems => "Loaded {0} {1}(s)."; + public string ServerRunning => "{0} server listening on {1}"; + + public string ServerStarted => + "Startup complete! Took {0}s, better than 99% of users. Type 'help' for command help"; // This is a meme, consider localpermissiong in English + + public string MissionEnabled => + "Mission system enabled. This feature is still in development and may not work as expected. Please report any bugs to the developers."; + public string KeyStoreError => "The SSL certificate does not exist, SSL functionality has been disabled."; + public string CacheLoadSkip => "Skipped cache loading."; + + public string ConfigMissing => "{0} is missing. Please check your resource folder: {1}, {2} may not be available."; + public string UnloadedItems => "Unloaded all {0}."; + public string SaveDatabase => "Database saved in {0}s"; + + public string WaitForAllDone => + "You cannot enter the game yet. Please wait for all items to load before trying again"; + + public string UnhandledException => "An unhandled exception occurred: {0}"; +} + +#endregion + +#endregion + +#region Layer 3 + +#region CommandText + +/// +/// path: Game.Command.Notice +/// +public class NoticeTextEN +{ + public string PlayerNotFound => "Player tidak ditemukan!"; + public string InvalidArguments => "Argumen command ngawur!"; + public string NoPermission => "Ga ada akses buat make command ini!"; + public string CommandNotFound => "Ga ketemu itu command. Ketik '/help' untuk cek command yang ada."; + public string TargetNotFound => "Target {0} tidak ditemukan!"; + public string TargetOffline => "Target {0}({1}) lagi offline! Target akan di clear."; + public string TargetFound => "Online player {0}({1}) ditemukan, command selanjutnya bakal target dia secara default."; + public string InternalError => "Error menjalankan command! {0}"; +} + +/// +/// path: Game.Command.Gender +/// +public class GenderTextEN +{ + public string Desc => "Ganti gender & path"; + public string Usage => "Pengunaan: /gender [man/woman] [id path]"; + public string GenderNotSpecified => "Gender tidak ditemukan!"; + public string GenderChanged => "Gender telah diganti!"; +} + +/// +/// path: Game.Command.UnlockAll +/// +public class UnlockAllTextEN +{ + public string Desc => + "Sesuai nama, unlock semuanya." + + "'/unlockall mission' buat finish all missions. Nanti bakal di kick setelah jalanin. Ada kemungkinan bakal stuck di tutorial, gunakan dengan hati-hati" + + "'/unlockall tutorial' buat unlock all tutorials. Nanti bakal di kick setelah jalanin. Dipakai untuk ketika stuck in some pages\n" + + "'/unlockall rogue' buat unlock all rogue types. Nanti bakal di kick setelah jalanin. Pakai bersamaan dengan '/unlockall tutorial' untuk dapatkan performance yg lebih baik"; + public string Usage => "Penggunaan: /unlockall [mission/tutorial/rogue]"; + public string UnlockedAll => "Unlocked All {0}!"; +} + +/// +/// path: Game.Command.Avatar +/// +public class AvatarTextEN +{ + public string Desc => "Set properti untuk karakter yang dimiliki. Untuk target semua karakter, set Avatar ID ke -1 ya!"; + public string Usage => + "Penggunaan: /avatar talent [Avatar ID/-1] [Talent Level]\n" + + "Penggunaan: /avatar rank [Avatar ID/-1] [Rank]\n" + + "Penggunaan: /avatar level [Avatar ID/-1] [Avatar Level]"; + public string InvalidLevel => "Invalid {0} level!"; + public string AllAvatarsLevelSet => "Semua karakter {0}nya telah di set ke level {1}."; + public string AvatarLevelSet => "Karakter {0} {1}nya telah di set ke level {2}"; + public string AvatarNotFound => "Karakter tidak ditemukan!"; +} + +/// +/// path: Game.Command.Give +/// +public class GiveTextEN +{ + public string Desc => "Untuk memberi item ke player. Jangan pakai ini untuk relic."; + public string Usage => "Penggunaan: /give [item ID] l[level] x[jumlah] r[rank]"; + public string ItemNotFound => "Item tidak ditemukan!"; + public string GiveItem => "Telah diberi {0} {1} item {2}."; +} + +/// +/// path: Game.Command.GiveAll +/// +public class GiveAllTextEN +{ + public string Desc => "Untuk memberi player semua jenis item."; + public string Usage => + "Penggunaan: /giveall avatar r[rank] l[level]\n" + + "Penggunaan: /giveall material x[jumlah]\n" + + "Penggunaan: /giveall equipment r[rank] l[level] x[jumlah]\n" + + "Penggunaan: /giveall relic x[jumlah]\n" + + "Penggunaan: /giveall unlock\n" + + "Penggunaan: /giveall train\n" + + "Penggunaan: /giveall path"; + public string GiveAllItems => "Telah diberikan semua {0}, masing-masing berjumlah {1}"; +} + +/// +/// path: Game.Command.Lineup +/// +public class LineupTextEN +{ + public string Desc => "Atur properti overworld lineup. Mp = tech point, Sp = energy, heal ya heal."; + public string Usage => + "Penggunaan: /lineup mp\n" + + "Penggunaan: /lineup sp\n" + + "Penggunaan: /lineup heal"; + public string GainedMp => "Player telah diberikan tech points!"; + public string GainedSp => "Player telah diberikan energy!"; + public string HealedAllAvatars => "Satu lineup telah di heal!"; +} + +/// +/// path: Game.Command.Help +/// +public class HelpTextEN +{ + public string Desc => "Show help information"; + public string Usage => + "Penggunaan: /help\n" + + "Penggunaan: /help [cmd]"; + public string Commands => "Commands: "; + public string CommandUsage => "Penggunaan: "; + public string CommandPermission => "Level Permission Untuk Akses: "; + public string CommandAlias => "Command Alias:"; +} + +/// +/// path: Game.Command.Kick +/// +public class KickTextEN +{ + public string Desc => "Kick out player"; + public string Usage => "Penggunaan: /kick"; + public string PlayerKicked => "Player {0} telah di kick!"; +} + +/// +/// path: Game.Command.Mission +/// +public class MissionTextEN +{ + public string Desc => + "Mengelola misi pemain\n" + + "Gunakan 'pass' untuk menyelesaikan semua misi yang sedang berjalan, perintah ini dapat menyebabkan lag yang parah, harap gunakan '/mission finish' sebagai gantinya\n" + + "Gunakan 'finish [SubMissionID]' untuk menyelesaikan sub-misi tertentu, silakan cari ID sub-misi di buku panduan\n" + + "Gunakan 'finishmain [MainMissionID]' untuk menyelesaikan misi utama tertentu, silakan cari ID misi utama di buku panduan\n" + + "Gunakan 'running <-all>' untuk melihat misi yang sedang dilacak, menambahkan '-all' akan menampilkan semua misi yang sedang berjalan dan kemungkinan misi yang macet, setelah digunakan, daftar misi yang lebih panjang mungkin muncul, harap diperhatikan\n" + + "Gunakan 'reaccept' untuk menerima kembali misi utama tertentu, silakan cari ID misi utama di buku panduan"; + + public string Usage => + "Penggunaan: /mission pass\n" + + "Penggunaan: /mission finish [ID Sub Misi]\n" + + "Penggunaan: /mission running\n" + + "Penggunaan: /mission reaccept [ID Misi Utama]\n" + + "Penggunaan: /mission finishmain [ID Misi Utama]"; + + public string AllMissionsFinished => "Semua tugas telah diselesaikan!"; + public string AllRunningMissionsFinished => "Sebanyak {0} tugas yang sedang berjalan telah diselesaikan!"; + public string MissionFinished => "Tugas {0} telah diselesaikan!"; + public string InvalidMissionId => "ID tugas tidak valid!"; + public string NoRunningMissions => "Tidak ada tugas yang sedang berjalan!"; + public string RunningMissions => "Tugas yang sedang berjalan: "; + public string PossibleStuckMissions => "Tugas yang kemungkinan macet: "; + public string MainMission => "Tugas utama"; + public string MissionReAccepted => "Tugas {0} telah diterima kembali!"; +} + + +/// +/// path: Game.Command.Relic +/// +public class RelicTextEN +{ + public string Desc => "Mengelola relic pemain, Batas level: 1 ≤ Level ≤ 9999"; + public string Usage => + "Penggunaan: /relic [ID relic] [ID main affix] [ID sub affix:jumlah roll] l[level] x[jumlah]\n" + + "Catatan:\n" + + "- 'ID sub affix:jumlah roll' dapat diulang hingga 4 kali.\n" + + "- Jika tidak diberikan, sub affix akan dipilih secara acak."; + public string RelicNotFound => "Relic tidak ditemukan!"; + public string InvalidMainAffixId => "ID main affix tidak valid!"; + public string InvalidSubAffixId => "ID sub affix tidak valid!"; + public string RelicGiven => "Memberikan kepada pemain @{0} {1} relic {2}, main affix {3}."; +} + + +/// +/// path: Game.Command.Reload +/// +public class ReloadTextEN +{ + public string Desc => "Muat ulang konfigurasi yang ditentukan"; + public string Usage => "Penggunaan: /reload [banner/activity]"; + public string ConfigReloaded => "Konfigurasi {0} telah dimuat ulang!"; +} + +/// +/// path: Game.Command.Rogue +/// +public class RogueTextEN +{ + public string Desc => "Command ini tidak work. Digunakan untuk mengelola data pemain dalam simulated universe, -1 berarti semua blessing, 'buff' untuk mendapatkan blessing, 'enhance' untuk meningkatkan blessing"; + public string Usage => + "Penggunaan: /rogue money [Jumlah Universe Debris]\n" + + "Penggunaan: /rogue buff [ID blessing/-1]\n" + + "Penggunaan: /rogue miracle [ID miracle]\n" + + "Penggunaan: /rogue enhance [ID blessing/-1]\n" + + "Penggunaan: /rogue unstuck - Keluar dari event"; + public string PlayerGainedMoney => "Pemain mendapatkan {0} universe debris."; + public string PlayerGainedAllItems => "Pemain mendapatkan semua {0}."; + public string PlayerGainedItem => "Pemain mendapatkan {0} {1}."; + public string PlayerEnhancedBuff => "Pemain meningkatkan blessing {0}."; + public string PlayerEnhancedAllBuffs => "Pemain meningkatkan semua blessing."; + public string PlayerUnstuck => "Pemain keluar dari event."; + public string NotFoundItem => "{0} tidak ditemukan!"; + public string PlayerNotInRogue => "Pemain tidak berada dalam simulated universe!"; +} + +/// +/// path: Game.Command.Scene +/// +public class SceneTextEN +{ + public string Desc => + "Mengelola scene pemain\n" + + "Catatan: Sebagian besar perintah dalam grup ini digunakan untuk debugging. Pastikan Anda memahami apa yang Anda lakukan sebelum menggunakan perintah apa pun.\n" + + "Gunakan 'prop' untuk mengatur status sebuah prop. Untuk daftar status, lihat Common/Enums/Scene/PropStateEnum.cs\n" + + "Gunakan 'unlockall' untuk membuka semua prop dalam scene (misalnya, mengatur semua prop yang dapat dibuka ke status 'open'). Perintah ini dapat menyebabkan game terhenti di 90% saat memuat. Gunakan '/scene reset ' untuk mengatasi masalah ini.\n" + + "Gunakan 'change' untuk memasuki scene tertentu. Untuk EntryId, lihat Resources/MapEntrance.json\n" + + "Gunakan 'reload' untuk memuat ulang scene saat ini dan kembali ke posisi awal.\n" + + "Gunakan 'reset' untuk mengatur ulang status semua prop dalam scene yang ditentukan. Untuk mengetahui FloorId saat ini, gunakan '/scene cur'."; + + public string Usage => + "Penggunaan: /scene [entry id]\n" + + "Penggunaan: /scene cur\n" + + "Penggunaan: /scene reload\n" + + "Penggunaan: /scene group\n" + + "Penggunaan: /scene unlockall\n" + + "Penggunaan: /scene reset [floor id]\n" + + "Penggunaan: /scene prop [group id] [prop id] [state]\n" + + "Penggunaan: /scene remove [entity id]\n"; + public string LoadedGroups => "Grup yang dimuat: {0}."; + public string PropStateChanged => "Prop: {0} diatur ke status {1}."; + public string PropNotFound => "Prop tidak ditemukan!"; + public string EntityRemoved => "Entity {0} telah dihapus."; + public string EntityNotFound => "Entity tidak ditemukan!"; + public string AllPropsUnlocked => "Semua prop telah dibuka!"; + public string SceneChanged => "Memasuki scene {0}."; + public string SceneReloaded => "Scene telah dimuat ulang!"; + public string SceneReset => "Status prop di floor {0} telah direset!"; + public string CurrentScene => "Scene saat ini Entry Id: {0}, Plane Id: {1}, Floor Id: {2}."; +} + +/// +/// path: Game.Command.Mail +/// +public class MailTextEN +{ + public string Desc => "Mengelola mail pemain"; + public string Usage => "Penggunaan: /mail [namaPengirim] [judul] [isi] [ID1:jumlah,ID2:jumlah]"; + public string MailSent => "Surat telah dikirim!"; +} + +/// +/// path: Game.Command.Raid +/// +public class RaidTextEN +{ + public string Desc => "Mengelola scene sementara pemain"; + public string Usage => "Penggunaan: /raid leave"; + public string Leaved => "Keluar dari scene sementara!"; +} + +/// +/// path: Game.Command.Account +/// +public class AccountTextEN +{ + public string Desc => "Mengelola akun database"; + public string Usage => + "Penggunaan: /account create [username] [UID] [password]\n" + + "Penggunaan: /account delete [UID]"; + public string InvalidUid => "Argumen UID tidak valid!"; + public string InvalidAccount => "Akun {0} tidak valid!"; + public string CreateSuccess => "Akun {0} berhasil dibuat!"; + public string DeleteSuccess => "Akun {0} berhasil dihapus!"; +} + +/// +/// path: Game.Command.Announce +/// +public class AnnounceTextEN +{ + public string Desc => "Mengirim pengumuman sistem pusat"; + public string Usage => "Penggunaan: /announce [Teks] [Warna]"; + public string SendSuccess => "Pengumuman berhasil dikirim!"; +} + +/// +/// path: Game.Command.Ban +/// +public class BanTextEN +{ + public string Desc => "Blokir atau buka blokir pengguna"; + public string Usage => "Penggunaan: /ban [add/delete]"; + public string BanSuccess => "Akun telah diblokir!"; + public string UnBanSuccess => "Akun telah dibuka blokirnya!"; +} + +/// +/// path: Game.Command.Unstuck +/// +public class UnstuckTextEN +{ + public string Desc => "Teleport pemain kembali ke lokasi default"; + public string Usage => "Penggunaan: /unstuck [UID]"; + public string UnstuckSuccess => "Berhasil memindahkan pemain kembali ke lokasi default."; + public string UidNotExist => "UID tidak ditemukan!"; + public string PlayerIsOnline => "Pemain sedang online!"; +} + +/// +/// path: Game.Command.Setlevel +/// +public class SetlevelTextEN +{ + public string Desc => "Mengatur level pemain"; + public string Usage => "Penggunaan: /setlevel [Level]"; + public string SetlevelSuccess => "Berhasil mengatur level pemain!"; +} + +/// +/// path: Game.Command.Permission +/// +public class PermissionTextEN +{ + public string Desc => "Mengelola permission pemain"; + public string Usage => + "Penggunaan: /permission add [permission]\n" + + "Penggunaan: /permission remove [permission]\n" + + "Penggunaan: /permission clean [permission]"; + public string InvalidPerm => "Permission {0} tidak ditemukan!"; + public string Added => "Menambahkan permission {0} ke pemain {1}!"; + public string Removed => "Menghapus permission {1} dari pemain {0}!"; + public string Cleaned => "Menghapus semua permission dari pemain {0}!"; +} + +/// +/// path: Game.Command.RemoveItem +/// +public class RemoveItemTextEN +{ + public string Desc => "Menghapus Relic atau Lightcone"; + public string Usage => + "Penggunaan: /remove relic\n" + + "Penggunaan: /remove lightcone"; + public string InvalidPerm => "Permission {0} tidak ditemukan!"; + public string RemovedRelics => "Relic telah dihapus dari pemain {0}!"; + public string RemovedLightcones => "Lightcone telah dihapus dari pemain {0}!"; +} + +/// +/// path: Game.Command.Skip +/// +public class SkipTextEN +{ + public string Desc => "Skip 1st half MOC / PF / AS dan langsung ke 2nd half"; + public string Usage => "Penggunaan: /skip" ; + public string Success => "Berhasil menyetel skip 1st half ke {0}!"; +} + + +#endregion + +#endregion \ No newline at end of file diff --git a/Common/Internationalization/PluginLanguageAttribute.cs b/Common/Internationalization/PluginLanguageAttribute.cs new file mode 100644 index 0000000..b508d40 --- /dev/null +++ b/Common/Internationalization/PluginLanguageAttribute.cs @@ -0,0 +1,9 @@ +using KianaBH.Enums.Language; + +namespace KianaBH.Internationalization; + +[AttributeUsage(AttributeTargets.Class)] +public class PluginLanguageAttribute(ProgramLanguageTypeEnum languageType) : Attribute +{ + public ProgramLanguageTypeEnum LanguageType { get; } = languageType; +} \ No newline at end of file diff --git a/Common/Util/ConfigManager.cs b/Common/Util/ConfigManager.cs new file mode 100644 index 0000000..b00f365 --- /dev/null +++ b/Common/Util/ConfigManager.cs @@ -0,0 +1,99 @@ +using KianaBH.Configuration; +using KianaBH.Internationalization; +using Newtonsoft.Json; +using KianaBH.Util.Extensions; + +namespace KianaBH.Util; + +public static class ConfigManager +{ + public static readonly Logger Logger = new("ConfigManager"); + public static ConfigContainer Config { get; private set; } = new(); + private static readonly string ConfigFilePath = Config.Path.ConfigPath + "/Config.json"; + public static HotfixContainer Hotfix { get; private set; } = new(); + private static readonly string HotfixFilePath = Config.Path.ConfigPath + "/Hotfix.json"; + + public static void LoadConfig() + { + LoadConfigData(); + LoadHotfixData(); + } + + private static void LoadConfigData() + { + var file = new FileInfo(ConfigFilePath); + if (!file.Exists) + { + Config = new() + { + ServerOption = + { + Language = Extensions.Extensions.GetCurrentLanguage() + } + }; + + Logger.Info("Current Language is " + Config.ServerOption.Language); + SaveData(Config, ConfigFilePath); + } + + using (var stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + using (var reader = new StreamReader(stream)) + { + var json = reader.ReadToEnd(); + Config = JsonConvert.DeserializeObject(json)!; + } + + SaveData(Config, ConfigFilePath); + } + + private static void LoadHotfixData() + { + var file = new FileInfo(HotfixFilePath); + + // Generate all necessary versions + var verList = Extensions.Extensions.GetSupportVersions(); + + Logger.Info(I18NManager.Translate("Server.ServerInfo.CurrentVersion", + verList.Aggregate((current, next) => $"{current}, {next}"))); + + if (!file.Exists) + { + Hotfix = new HotfixContainer(); + SaveData(Hotfix, HotfixFilePath); + file.Refresh(); + } + + using (var stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + using (var reader = new StreamReader(stream)) + { + var json = reader.ReadToEnd(); + Hotfix = JsonConvert.DeserializeObject(json)!; + } + + foreach (var version in verList) + if (!Hotfix.Hotfixes.TryGetValue(version, out var _)) + Hotfix.Hotfixes[version] = new(); + + SaveData(Hotfix, HotfixFilePath); + } + + private static void SaveData(object data, string path) + { + var json = JsonConvert.SerializeObject(data, Formatting.Indented); + using var stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.ReadWrite); + using var writer = new StreamWriter(stream); + writer.Write(json); + } + + public static void InitDirectories() + { + foreach (var property in Config.Path.GetType().GetProperties()) + { + var dir = property.GetValue(Config.Path)?.ToString(); + + if (!string.IsNullOrEmpty(dir)) + if (!string.IsNullOrEmpty(dir) && !Directory.Exists(dir)) + Directory.CreateDirectory(dir); + } + } +} \ No newline at end of file diff --git a/Common/Util/Crpyto/DispatchEncryption.cs b/Common/Util/Crpyto/DispatchEncryption.cs new file mode 100644 index 0000000..23e7dda --- /dev/null +++ b/Common/Util/Crpyto/DispatchEncryption.cs @@ -0,0 +1,35 @@ +using System.Security.Cryptography; +using System.Text; +using System.Text.Json; + +namespace KianaBH.Util.Crypto; + +public static class DispatchEncryption +{ + private static readonly JsonSerializerOptions JsonSerializerOptions = new() + { + PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower + }; + + public static string? EncryptDispatchContent(string version, object? data) + { + if (!ConfigManager.Hotfix.AesKeys.TryGetValue(version, out var aesKey)) + return null; + + var serializedData = JsonSerializer.Serialize(data, JsonSerializerOptions); + var keyBytes = aesKey.Split(' ') + .Select(b => Convert.ToByte(b, 16)) + .ToArray(); + + using var aes = Aes.Create(); + aes.Mode = CipherMode.ECB; + aes.Padding = PaddingMode.PKCS7; + aes.Key = keyBytes; + + var encryptor = aes.CreateEncryptor(); + var dataBytes = Encoding.UTF8.GetBytes(serializedData); + var encryptedBytes = encryptor.TransformFinalBlock(dataBytes, 0, dataBytes.Length); + + return Convert.ToBase64String(encryptedBytes); + } +} \ No newline at end of file diff --git a/Common/Util/Extensions/Extensions.cs b/Common/Util/Extensions/Extensions.cs new file mode 100644 index 0000000..f112182 --- /dev/null +++ b/Common/Util/Extensions/Extensions.cs @@ -0,0 +1,232 @@ +using KianaBH.Proto; +using Newtonsoft.Json; +using System.Buffers.Binary; +using System.Globalization; +using System.Security.Cryptography; +using System.Text; +using System.Text.RegularExpressions; + +namespace KianaBH.Util.Extensions; + +public static partial class Extensions +{ + #region Regex + + [GeneratedRegex(@"CN|OS|BETA|PROD|CECREATION|Android|Win|iOS")] + public static partial Regex VersionRegex(); + + [GeneratedRegex(@"(?<=Avatar_)(.*?)(?=_Config)")] + public static partial Regex AvatarConfigRegex(); + + [GeneratedRegex(@"(?<=Avatar_RogueBattleevent)(.*?)(?=_Config.json)")] + public static partial Regex BattleEventDataRegex(); + + [GeneratedRegex(@"coin(\d+)tier")] + public static partial Regex ProductRegex(); + + #endregion + + public static string GetCurrentLanguage() + { + var uiCulture = CultureInfo.CurrentUICulture; + return uiCulture.Name switch + { + "zh-CN" => "CHS", + "zh-TW" => "CHT", + "ja-JP" => "JP", + _ => "EN" + }; + } + + public static List GetSupportVersions() + { + var verList = new List(); + if (GameConstants.GAME_VERSION[^1] == '5') + for (var i = 1; i < 6; i++) + verList.Add(GameConstants.GAME_VERSION + i.ToString()); + else + verList.Add(GameConstants.GAME_VERSION); + + return verList; + } + + public static T RandomElement(this List values) + { + var index = new Random().Next(values.Count); + return values[index]; + } + + public static string RandomKey(int length) + { + const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + var random = new Random(); + return new string(Enumerable.Repeat(chars, length) + .Select(s => s[random.Next(s.Length)]).ToArray()); + } + + public static ICollection Clone(this ICollection values) + { + List list = [.. values]; + + return list; + } + + public static int RandomInt(int from, int to) + { + return new Random().Next(from, to); + } + + public static string GetSha256Hash(string input) + { + byte[] bytes = SHA256.HashData(Encoding.UTF8.GetBytes(input)); + var builder = new StringBuilder(); + for (int i = 0; i < bytes.Length; i++) builder.Append(bytes[i].ToString("x2")); + return builder.ToString(); + } + + public static void SafeAdd(this List list, T item) + { + if (!list.Contains(item)) list.Add(item); + } + + public static void SafeAddRange(this List list, List item) + { + foreach (var i in item) list.SafeAdd(i); + } + + public static long GetUnixSec() + { + return DateTimeOffset.UtcNow.ToUnixTimeSeconds(); + } + + public static long ToUnixSec(this DateTime dt) + { + return new DateTimeOffset(dt).ToUnixTimeSeconds(); + } + + public static long GetUnixMs() + { + return DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); + } + + public static string ToArrayString(this List list) + { + return list.JoinFormat(", ", ""); + } + + public static string ToJsonString(this Dictionary dic) where TK : notnull + { + return JsonConvert.SerializeObject(dic); + } + + public static byte[] StringToByteArray(string hex) + { + if (hex.Length % 2 == 1) + throw new Exception("The binary key cannot have an odd number of digits"); + + byte[] arr = new byte[hex.Length >> 1]; + + for (int i = 0; i < hex.Length >> 1; ++i) + { + arr[i] = (byte)((GetHexVal(hex[i << 1]) << 4) + (GetHexVal(hex[(i << 1) + 1]))); + } + + return arr; + } + + public static int GetHexVal(char hex) + { + int val = (int)hex; + //For uppercase A-F letters: + //return val - (val < 58 ? 48 : 55); + //For lowercase a-f letters: + //return val - (val < 58 ? 48 : 87); + //Or the two combined, but a bit slower: + return val - (val < 58 ? 48 : (val < 97 ? 55 : 87)); + } + + #region Kcp Utils + + public static string JoinFormat(this IEnumerable list, string separator, + string formatString) + { + formatString = string.IsNullOrWhiteSpace(formatString) ? "{0}" : formatString; + return string.Join(separator, + list.Select(item => string.Format(formatString, item))); + } + + public static void WriteConvID(this BinaryWriter bw, long convId) + { + //bw.Write(convId); + bw.Write((int)(convId >> 32)); + bw.Write((int)(convId & 0xFFFFFFFF)); + } + + public static long GetNextAvailableIndex(this SortedList sortedList) + { + long key = 1; + long count = sortedList.Count; + long counter = 0; + do + { + if (count == 0) break; + var nextKeyInList = sortedList.Keys.ElementAt((Index)counter++); + if (key != nextKeyInList) break; + key = nextKeyInList + 1; + } while (count != 1 && counter != count && key == sortedList.Keys.ElementAt((Index)counter)); + + return key; + } + + public static long AddNext(this SortedList sortedList, T item) + { + var key = sortedList.GetNextAvailableIndex(); + sortedList.Add(key, item); + return key; + } + + public static int ReadInt32BE(this BinaryReader br) + { + return BinaryPrimitives.ReadInt32BigEndian(br.ReadBytes(sizeof(int))); + } + + public static uint ReadUInt32BE(this BinaryReader br) + { + return BinaryPrimitives.ReadUInt32BigEndian(br.ReadBytes(sizeof(uint))); + } + + public static ushort ReadUInt16BE(this BinaryReader br) + { + return BinaryPrimitives.ReadUInt16BigEndian(br.ReadBytes(sizeof(ushort))); + } + + public static void WriteUInt16BE(this BinaryWriter bw, ushort value) + { + Span data = stackalloc byte[sizeof(ushort)]; + BinaryPrimitives.WriteUInt16BigEndian(data, value); + bw.Write(data); + } + + public static void WriteInt32BE(this BinaryWriter bw, int value) + { + Span data = stackalloc byte[sizeof(int)]; + BinaryPrimitives.WriteInt32BigEndian(data, value); + bw.Write(data); + } + + public static void WriteUInt32BE(this BinaryWriter bw, uint value) + { + Span data = stackalloc byte[sizeof(uint)]; + BinaryPrimitives.WriteUInt32BigEndian(data, value); + bw.Write(data); + } + + public static void WriteUInt64BE(this BinaryWriter bw, ulong value) + { + Span data = stackalloc byte[sizeof(ulong)]; + BinaryPrimitives.WriteUInt64BigEndian(data, value); + bw.Write(data); + } + + #endregion +} \ No newline at end of file diff --git a/Common/Util/Extensions/JsonStringToObjectConverter.cs b/Common/Util/Extensions/JsonStringToObjectConverter.cs new file mode 100644 index 0000000..80b4e21 --- /dev/null +++ b/Common/Util/Extensions/JsonStringToObjectConverter.cs @@ -0,0 +1,24 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace KianaBH.Util.Extensions; + +public class JsonStringToObjectConverter : JsonConverter where T : class +{ + public override T? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType != JsonTokenType.String) + return JsonSerializer.Deserialize(ref reader, options); + + var jsonString = reader.GetString(); + return !string.IsNullOrEmpty(jsonString) + ? JsonSerializer.Deserialize(jsonString, options) + : null; + } + + public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options) + { + var json = JsonSerializer.Serialize(value, options); + writer.WriteStringValue(json); + } +} \ No newline at end of file diff --git a/Common/Util/GameConstants.cs b/Common/Util/GameConstants.cs new file mode 100644 index 0000000..c3d71d9 --- /dev/null +++ b/Common/Util/GameConstants.cs @@ -0,0 +1,11 @@ +namespace KianaBH.Util; + +public static class GameConstants +{ + public const string GAME_VERSION = "8.2.0"; + public const int MAX_STAMINA = 300; + public const int STAMINA_RECOVERY_TIME = 360; // 6 minutes + public const int STAMINA_RESERVE_RECOVERY_TIME = 1080; // 18 minutes + public const int INVENTORY_MAX_EQUIPMENT = 1000; + public const int MAX_LINEUP_COUNT = 9; +} \ No newline at end of file diff --git a/Common/Util/IConsole.cs b/Common/Util/IConsole.cs new file mode 100644 index 0000000..8c8f582 --- /dev/null +++ b/Common/Util/IConsole.cs @@ -0,0 +1,185 @@ +using Kodnix.Character; + +namespace KianaBH.Util; + +public class IConsole +{ + public static readonly string PrefixContent = "[KianaBH]> "; + public static readonly string Prefix = $"\u001b[38;2;255;192;203m{PrefixContent}\u001b[0m"; + private static readonly int HistoryMaxCount = 10; + + public static List Input { get; set; } = []; + private static int CursorIndex { get; set; } = 0; + private static readonly List InputHistory = []; + private static int HistoryIndex = -1; + + public static event Action? OnConsoleExcuteCommand; + + public static void InitConsole() + { + Console.Title = ConfigManager.Config.GameServer.GameServerName; + } + + public static int GetWidth(string str) + => str.ToCharArray().Sum(EastAsianWidth.GetLength); + + public static void RedrawInput(List input, bool hasPrefix = true) + => RedrawInput(new string([.. input]), hasPrefix); + + public static void RedrawInput(string input, bool hasPrefix = true) + { + var length = GetWidth(input); + if (hasPrefix) + { + input = Prefix + input; + length += GetWidth(PrefixContent); + } + + if (Console.GetCursorPosition().Left > 0) + Console.SetCursorPosition(0, Console.CursorTop); + + Console.Write(input + new string(' ', Console.BufferWidth - length)); + Console.SetCursorPosition(length, Console.CursorTop); + } + + #region Handlers + + public static void HandleEnter() + { + var input = new string([.. Input]); + if (string.IsNullOrWhiteSpace(input)) return; + + // New line + Console.WriteLine(); + Input = []; + CursorIndex = 0; + if (InputHistory.Count >= HistoryMaxCount) + InputHistory.RemoveAt(0); + InputHistory.Add(input); + HistoryIndex = InputHistory.Count; + + // Handle command + if (input.StartsWith('/')) input = input[1..].Trim(); + OnConsoleExcuteCommand?.Invoke(input); + } + + public static void HandleBackspace() + { + if (CursorIndex <= 0) return; + CursorIndex--; + var targetWidth = GetWidth(Input[CursorIndex].ToString()); + Input.RemoveAt(CursorIndex); + + var (left, _) = Console.GetCursorPosition(); + Console.SetCursorPosition(left - targetWidth, Console.CursorTop); + var remain = new string([.. Input.Skip(CursorIndex)]); + Console.Write(remain + new string(' ', targetWidth)); + Console.SetCursorPosition(left - targetWidth, Console.CursorTop); + } + + public static void HandleUpArrow() + { + if (InputHistory.Count == 0) return; + + if (HistoryIndex > 0) + { + HistoryIndex--; + var history = InputHistory[HistoryIndex]; + Input = [.. history]; + CursorIndex = Input.Count; + RedrawInput(Input); + } + } + + public static void HandleDownArrow() + { + if (HistoryIndex >= InputHistory.Count) return; + + HistoryIndex++; + if (HistoryIndex >= InputHistory.Count) + { + HistoryIndex = InputHistory.Count; + Input = []; + CursorIndex = 0; + } + else + { + var history = InputHistory[HistoryIndex]; + Input = [.. history]; + CursorIndex = Input.Count; + } + RedrawInput(Input); + } + + public static void HandleLeftArrow() + { + if (CursorIndex <= 0) return; + + var (left, _) = Console.GetCursorPosition(); + CursorIndex--; + Console.SetCursorPosition(left - GetWidth(Input[CursorIndex].ToString()), Console.CursorTop); + } + + public static void HandleRightArrow() + { + if (CursorIndex >= Input.Count) return; + + var (left, _) = Console.GetCursorPosition(); + CursorIndex++; + Console.SetCursorPosition(left + GetWidth(Input[CursorIndex - 1].ToString()), Console.CursorTop); + } + + public static void HandleInput(ConsoleKeyInfo keyInfo) + { + if (char.IsControl(keyInfo.KeyChar)) return; + if (Input.Count >= (Console.BufferWidth - PrefixContent.Length)) return; + HandleInput(keyInfo.KeyChar); + } + + public static void HandleInput(char keyChar) + { + Input.Insert(CursorIndex, keyChar); + CursorIndex++; + + var (left, _) = Console.GetCursorPosition(); + Console.Write(new string([.. Input.Skip(CursorIndex - 1)])); + Console.SetCursorPosition(left + GetWidth(keyChar.ToString()), Console.CursorTop); + } + + #endregion + + public static string ListenConsole() + { + while (true) + { + ConsoleKeyInfo keyInfo; + try { keyInfo = Console.ReadKey(true); } + catch (InvalidOperationException) { continue; } + + switch (keyInfo.Key) + { + case ConsoleKey.Enter: + HandleEnter(); + break; + case ConsoleKey.Backspace: + HandleBackspace(); + break; + case ConsoleKey.LeftArrow: + HandleLeftArrow(); + break; + case ConsoleKey.RightArrow: + HandleRightArrow(); + break; + case ConsoleKey.UpArrow: + HandleUpArrow(); + break; + case ConsoleKey.DownArrow: + HandleDownArrow(); + break; + default: + HandleInput(keyInfo); + break; + } + } + } +} \ No newline at end of file diff --git a/Common/Util/Logger.cs b/Common/Util/Logger.cs new file mode 100644 index 0000000..049cae5 --- /dev/null +++ b/Common/Util/Logger.cs @@ -0,0 +1,109 @@ +using Spectre.Console; +using System.Diagnostics; + +namespace KianaBH.Util; + +public class Logger(string moduleName) +{ + private static FileInfo? LogFile; + private static readonly object _lock = new(); + private readonly string ModuleName = moduleName; + + public void Log(string message, LoggerLevel level) + { + lock (_lock) + { + var savedInput = IConsole.Input.ToList(); // Copy + IConsole.RedrawInput("", false); + AnsiConsole.MarkupLine($"[[[bold deepskyblue3_1]{DateTime.Now:HH:mm:ss}[/]]] " + + $"[[[gray]{ModuleName}[/]]] [[[{(ConsoleColor)level}]{level}[/]]] " + + $"{message.Replace("[", "[[").Replace("]", "]]")}"); + IConsole.RedrawInput(savedInput); + + var logMessage = $"[{DateTime.Now:HH:mm:ss}] [{ModuleName}] [{level}] {message}"; + WriteToFile(logMessage); + } + } + + public void Info(string message, Exception? e = null) + { + Log(message, LoggerLevel.INFO); + if (e != null) + { + Log(e.Message, LoggerLevel.INFO); + Log(e.StackTrace!, LoggerLevel.INFO); + } + } + + public void Warn(string message, Exception? e = null) + { + Log(message, LoggerLevel.WARN); + if (e != null) + { + Log(e.Message, LoggerLevel.WARN); + Log(e.StackTrace!, LoggerLevel.WARN); + } + } + + public void Error(string message, Exception? e = null) + { + Log(message, LoggerLevel.ERROR); + if (e != null) + { + Log(e.Message, LoggerLevel.ERROR); + Log(e.StackTrace!, LoggerLevel.ERROR); + } + } + + public void Fatal(string message, Exception? e = null) + { + Log(message, LoggerLevel.FATAL); + if (e != null) + { + Log(e.Message, LoggerLevel.FATAL); + Log(e.StackTrace!, LoggerLevel.FATAL); + } + } + + public void Debug(string message, Exception? e = null) + { + Log(message, LoggerLevel.DEBUG); + if (e != null) + { + Log(e.Message, LoggerLevel.DEBUG); + Log(e.StackTrace!, LoggerLevel.DEBUG); + } + } + + public static void SetLogFile(FileInfo file) + { + LogFile = file; + } + + public static void WriteToFile(string message) + { + try + { + if (LogFile == null) throw new Exception("LogFile is not set"); + using var sw = LogFile.AppendText(); + sw.WriteLine(message); + } + catch + { + } + } + + public static Logger GetByClassName() + { + return new Logger(new StackTrace().GetFrame(1)?.GetMethod()?.ReflectedType?.Name ?? ""); + } +} + +public enum LoggerLevel +{ + INFO = ConsoleColor.Cyan, + WARN = ConsoleColor.Yellow, + ERROR = ConsoleColor.Red, + FATAL = ConsoleColor.DarkRed, + DEBUG = ConsoleColor.Blue +} diff --git a/Common/Util/LoggingMiddleware.cs b/Common/Util/LoggingMiddleware.cs new file mode 100644 index 0000000..9f7a44e --- /dev/null +++ b/Common/Util/LoggingMiddleware.cs @@ -0,0 +1,34 @@ +using KianaBH.Util; +using Microsoft.AspNetCore.Http; + +namespace KianaBH.SdkServer.Utils; + +public class RequestLoggingMiddleware(RequestDelegate next) +{ + public async Task InvokeAsync(HttpContext context, Logger logger) + { + var request = context.Request; + var method = request.Method; + var path = request.Path + request.QueryString; + + await next(context); + + var statusCode = context.Response.StatusCode; + + if (path.StartsWith("/report") || path.Contains("/log/") || path == "/alive") + return; + + if (statusCode == 200) + { + logger.Info($"{method} {path} => {statusCode}"); + } + else if (statusCode == 404) + { + logger.Warn($"{method} {path} => {statusCode}"); + } + else + { + logger.Error($"{method} {path} => {statusCode}"); + } + } +} \ No newline at end of file diff --git a/Common/Util/Security/Crypto.cs b/Common/Util/Security/Crypto.cs new file mode 100644 index 0000000..44955ad --- /dev/null +++ b/Common/Util/Security/Crypto.cs @@ -0,0 +1,29 @@ +using System.Security.Cryptography; +using System.Text; + +namespace KianaBH.Util.Security; + +public class Crypto +{ + private static readonly Random SecureRandom = new(); + + // Simple way to create a unique session key + public static string CreateSessionKey(string accountUid) + { + var random = new byte[64]; + SecureRandom.NextBytes(random); + + var temp = accountUid + "." + DateTime.Now.Ticks + "." + SecureRandom; + + try + { + var bytes = SHA512.HashData(Encoding.UTF8.GetBytes(temp)); + return Convert.ToBase64String(bytes); + } + catch + { + var bytes = SHA512.HashData(Encoding.UTF8.GetBytes(temp)); + return Convert.ToBase64String(bytes); + } + } +} \ No newline at end of file diff --git a/Config/Config.json b/Config/Config.json new file mode 100644 index 0000000..d9b6ffa --- /dev/null +++ b/Config/Config.json @@ -0,0 +1,64 @@ +{ + "HttpServer": { + "BindAddress": "0.0.0.0", + "PublicAddress": "127.0.0.1", + "Port": 619, + "UseSSL": true + }, + "Key": { + "KeyStoreFile": "FireflyDH.pfx", + "KeyStorePassword": "lethe", + "Ec2bKeyFile": "ClientSecretKey.ec2b" + }, + "GameServer": { + "BindAddress": "0.0.0.0", + "PublicAddress": "127.0.0.1", + "Port": 2007, + "KcpAliveMs": 45000, + "DatabaseName": "firefly.db", + "GameServerId": "FireflyDH", + "GameServerName": "FireflyDH", + "UsePacketEncryption": true + }, + "Path": { + "ResourcePath": "Resources", + "ConfigPath": "Config", + "DatabasePath": "Config/Database", + "HandbookPath": "Config/Handbook", + "LogPath": "Config/Logs", + "KeyPath": "Config/Keys", + "DataPath": "Config/Data" + }, + "ServerOption": { + "EnableMission": false, + "DefaultGender": "Woman", + "Language": "EN", + "FallbackLanguage": "EN", + "Region": "BETAOVERSEA", + "DefaultPermissions": [ + "Admin" + ], + "ServerBanner": { + "EnableBanner": true, + "Content": "Welcome to FireflyDH!", + "AdminContent": "Welcome to FireflyDH (Admin Access)!" + }, + "ServerProfile": { + "Name": "Server", + "Uid": 80, + "Signature": "Type /help for a list of commands", + "Level": 1, + "HeadIcon": 200105, + "ChatBubbleId": 220001, + "DisplayAvatarId": 1001, + "DisplayAvatarLevel": 1 + }, + "AutoCreateUser": true, + "UseRealPassword": true, + "SavePersonalDebugFile": false, + "UseCache": true + }, + "MuipServer": { + "AdminKey": "8f52aa3f-ad56-4d48-acc8-651151e4d989" + } +} \ No newline at end of file diff --git a/Config/Hotfix.json b/Config/Hotfix.json new file mode 100644 index 0000000..f5a8aaa --- /dev/null +++ b/Config/Hotfix.json @@ -0,0 +1,35 @@ +{ + "Region": "None", + "HotfixData": { + "3.1.51": { + "AssetBundleUrl": "", + "ExResourceUrl": "", + "LuaUrl": "", + "IfixUrl": "" + }, + "3.1.52": { + "AssetBundleUrl": "", + "ExResourceUrl": "", + "LuaUrl": "", + "IfixUrl": "" + }, + "3.1.53": { + "AssetBundleUrl": "", + "ExResourceUrl": "", + "LuaUrl": "", + "IfixUrl": "" + }, + "3.1.54": { + "AssetBundleUrl": "", + "ExResourceUrl": "", + "LuaUrl": "", + "IfixUrl": "" + }, + "3.1.55": { + "AssetBundleUrl": "", + "ExResourceUrl": "", + "LuaUrl": "", + "IfixUrl": "" + } + } +} \ No newline at end of file diff --git a/GameServer/Command/CommandArg.cs b/GameServer/Command/CommandArg.cs new file mode 100644 index 0000000..d5c8915 --- /dev/null +++ b/GameServer/Command/CommandArg.cs @@ -0,0 +1,79 @@ +using KianaBH.Database.Account; +using KianaBH.GameServer.Server; +using KianaBH.Internationalization; + +namespace KianaBH.GameServer.Command; + +public class CommandArg +{ + public string RawArg { get; } = ""; + public List Args { get; } = []; + public List Attributes { get; } = []; + public ICommandSender Sender { get; } + public int TargetUid { get; set; } = 0; + public Connection? Target { get; set; } + + public CommandArg(string rawArg, ICommandSender sender) + { + Sender = sender; + RawArg = rawArg; + foreach (var arg in rawArg.Split(' ')) + { + if (string.IsNullOrEmpty(arg)) continue; + Args.Add(arg); + } + } + + public async ValueTask SendMsg(string msg) + { + await Sender.SendMsg(msg); + } + + public int GetInt(int index) + { + if (Args.Count <= index) return 0; + if (int.TryParse(Args[index], out var res)) + return res; + return 0; + } + + public async ValueTask GetOption(char pre, string def = "1") + { + var opStr = Args.FirstOrDefault(x => x[0] == pre)?[1..] ?? def; + if (!int.TryParse(opStr, out var op)) + { + await SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments")); + return null; + } + return op; + } + + public async ValueTask CheckArgCnt(int start, int? end = null) + { + end ??= start; + if (Args.Count >= start && Args.Count <= end) return true; + await SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments")); + return false; + } + + public async ValueTask CheckTarget() + { + if (AccountData.GetAccountByUid(TargetUid) == null) + { + await SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound")); + return false; + } + return true; + } + + public async ValueTask CheckOnlineTarget(bool sendMsg = true) + { + if (Target == null) + { + if (sendMsg) + await SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound")); + return false; + } + return true; + } +} \ No newline at end of file diff --git a/GameServer/Command/CommandAttribute.cs b/GameServer/Command/CommandAttribute.cs new file mode 100644 index 0000000..9697584 --- /dev/null +++ b/GameServer/Command/CommandAttribute.cs @@ -0,0 +1,25 @@ +using KianaBH.Enums.Player; + +namespace KianaBH.GameServer.Command; + +[AttributeUsage(AttributeTargets.Class)] +public class CommandInfoAttribute( + string name, string desc, string usage, string[] alias, PermEnum[] perm) : Attribute +{ + public string Name { get; } = name; + public string Description { get; } = desc; + public string Usage { get; } = usage; + public PermEnum[] Perm { get; } = perm; + public string[] Alias { get; } = alias; +} + +[AttributeUsage(AttributeTargets.Method)] +public class CommandDefaultAttribute : Attribute +{ +} + +[AttributeUsage(AttributeTargets.Method)] +public class CommandMethodAttribute(string method) : Attribute +{ + public string MethodName { get; } = method; +} \ No newline at end of file diff --git a/GameServer/Command/CommandExecutor.cs b/GameServer/Command/CommandExecutor.cs new file mode 100644 index 0000000..5dfda63 --- /dev/null +++ b/GameServer/Command/CommandExecutor.cs @@ -0,0 +1,19 @@ + +namespace KianaBH.GameServer.Command; + +public static class CommandExecutor +{ + public delegate void RunCommand(ICommandSender sender, string cmd); + + public static event RunCommand? OnRunCommand; + + public static void ExecuteCommand(ICommandSender sender, string cmd) + { + OnRunCommand?.Invoke(sender, cmd); + } + + public static void ConsoleExcuteCommand(string input) + { + CommandManager.HandleCommand(input, new ConsoleCommandSender(CommandManager.Logger)); + } +} \ No newline at end of file diff --git a/GameServer/Command/CommandInterface.cs b/GameServer/Command/CommandInterface.cs new file mode 100644 index 0000000..5c648aa --- /dev/null +++ b/GameServer/Command/CommandInterface.cs @@ -0,0 +1,3 @@ +namespace KianaBH.GameServer.Command; + +public interface ICommands; \ No newline at end of file diff --git a/GameServer/Command/CommandManager.cs b/GameServer/Command/CommandManager.cs new file mode 100644 index 0000000..db34e41 --- /dev/null +++ b/GameServer/Command/CommandManager.cs @@ -0,0 +1,126 @@ +using KianaBH.Database.Account; +using KianaBH.Enums.Player; +using KianaBH.GameServer.Server; +using KianaBH.Internationalization; +using KianaBH.KcpSharp; +using KianaBH.Util; +using System.Reflection; + +namespace KianaBH.GameServer.Command; + +public class CommandManager +{ + public static Logger Logger { get; } = new("CommandManager"); + + public static Dictionary Commands { get; } = []; + public static Dictionary CommandInfo { get; } = []; + public static Dictionary CommandAlias { get; } = []; // + + public static void RegisterCommands() + { + foreach (var type in Assembly.GetExecutingAssembly().GetTypes()) + if (typeof(ICommands).IsAssignableFrom(type) && !type.IsAbstract) + RegisterCommand(type); + + Logger.Info(I18NManager.Translate("Server.ServerInfo.RegisterItem", Commands.Count.ToString(), + I18NManager.Translate("Word.Command"))); + } + + public static void RegisterCommand(Type type) + { + var attr = type.GetCustomAttribute(); + if (attr == null) return; + var instance = Activator.CreateInstance(type); + if (instance is not ICommands command) return; + Commands.Add(attr.Name, command); + CommandInfo.Add(attr.Name, attr); + + // register alias + foreach (var alias in attr.Alias) // add alias + CommandAlias.Add(alias, attr.Name); + } + + public static async void HandleCommand(string input, ICommandSender sender) + { + try + { + var argInfo = new CommandArg(input, sender); + var target = sender.GetSender(); + + foreach (var arg in argInfo.Args.ToList()) // Copy + { + switch (arg[0]) + { + case '-': + argInfo.Attributes.Add(arg[1..]); + break; + case '@': + _ = int.TryParse(arg[1..], out target); + argInfo.Args.Remove(arg); + break; + } + } + argInfo.TargetUid = target; + if (KcpListener.Connections.Values.ToList().Find(item => + (item as Connection)?.Player?.Uid == target) is Connection con) + argInfo.Target = con; + + // find register cmd + var cmdName = argInfo.Args[0]; + if (CommandAlias.TryGetValue(cmdName, out var fullName)) cmdName = fullName; + if (!Commands.TryGetValue(cmdName, out var command)) + { + await sender.SendMsg(I18NManager.Translate("Game.Command.Notice.CommandNotFound")); + return; + } + argInfo.Args.RemoveAt(0); + var cmdInfo = CommandInfo[cmdName]; + + // Check cmd perms + if (!AccountData.HasPerm(cmdInfo.Perm, sender.GetSender())) + { + await sender.SendMsg(I18NManager.Translate("Game.Command.Notice.NoPermission")); + return; + } + if (argInfo.Target?.Player?.Uid != sender.GetSender() && !AccountData.HasPerm([PermEnum.Other], sender.GetSender())) + { + await sender.SendMsg(I18NManager.Translate("Game.Command.Notice.NoPermission")); + return; + } + + // find CommandMethodAttribute + var isFound = false; + foreach (var methodInfo in command.GetType().GetMethods()) + { + var attr = methodInfo.GetCustomAttribute(); + if (attr == null) continue; + if (argInfo.Args.Count > 0 && attr.MethodName == argInfo.Args[0]) + { + argInfo.Args.RemoveAt(0); + isFound = true; + methodInfo.Invoke(command, [argInfo]); + break; + } + } + if (isFound) return; + + // find CommandDefaultAttribute + foreach (var methodInfo in command.GetType().GetMethods()) + { + var attr = methodInfo.GetCustomAttribute(); + if (attr == null) continue; + isFound = true; + methodInfo.Invoke(command, [argInfo]); + break; + } + if (isFound) return; + + // failed to find method + await sender.SendMsg(I18NManager.Translate(cmdInfo.Usage)); + } + catch (Exception ex) + { + Logger.Error(I18NManager.Translate("Game.Command.Notice.InternalError", ex.ToString())); + } + } +} \ No newline at end of file diff --git a/GameServer/Command/CommandSender.cs b/GameServer/Command/CommandSender.cs new file mode 100644 index 0000000..4a06ce4 --- /dev/null +++ b/GameServer/Command/CommandSender.cs @@ -0,0 +1,41 @@ +using KianaBH.Enums.Player; +using KianaBH.GameServer.Game.Player; +using KianaBH.Util; + +namespace KianaBH.GameServer.Command; + +public interface ICommandSender +{ + public ValueTask SendMsg(string msg); + + public int GetSender(); +} + +public class ConsoleCommandSender(Logger logger) : ICommandSender +{ + public async ValueTask SendMsg(string msg) + { + logger.Info(msg); + await Task.CompletedTask; + } + + public int GetSender() + { + return (int)ServerEnum.Console; + } +} + +public class PlayerCommandSender(PlayerInstance player) : ICommandSender +{ + public PlayerInstance Player = player; + + public async ValueTask SendMsg(string msg) + { + // TODO SEND MSG + } + + public int GetSender() + { + return Player.Uid; + } +} \ No newline at end of file diff --git a/GameServer/Game/Avatar/AvatarManager.cs b/GameServer/Game/Avatar/AvatarManager.cs new file mode 100644 index 0000000..6350d49 --- /dev/null +++ b/GameServer/Game/Avatar/AvatarManager.cs @@ -0,0 +1,63 @@ +using KianaBH.Data; +using KianaBH.Data.Excel; +using KianaBH.Database; +using KianaBH.Database.Avatar; +using KianaBH.Enums.Item; +using KianaBH.GameServer.Game.Player; +using KianaBH.GameServer.Server.Packet.Send.Avatar; +using KianaBH.Util.Extensions; + + +namespace KianaBH.GameServer.Game.Avatar; + +public class AvatarManager(PlayerInstance player) : BasePlayerManager(player) +{ + public AvatarData AvatarData { get; } = DatabaseHelper.GetInstanceOrCreateNew(player.Uid); + public async ValueTask AddAvatar(int avatarId, bool sync = true) + { + GameData.AvatarData.TryGetValue(avatarId, out var avatarExcel); + if (avatarExcel == null) return null; + + var avatar = new AvatarInfo + { + Level = 1, + Timestamp = Extensions.GetUnixSec(), + Star = avatarExcel.UnlockStar, + DressId = avatarExcel.DefaultDressId, + DressList = {avatarExcel.DefaultDressId}, + AvatarId = avatarExcel.AvatarID, + }; + + foreach (var skill in avatarExcel.SkillList) + { + avatar.SkillList.Add(new AvatarSkill + { + SkillId = skill + }); + }; + + var weapon = GameData.WeaponData.TryGetValue(avatarExcel.InitialWeapon, out var weaponConfig); + if (weaponConfig != null) + { + var item = await Player.InventoryManager!.AddItem(avatarExcel.InitialWeapon, 1, ItemMainTypeEnum.Weapon, weaponConfig.MaxLv, avatarId); + if (item != null) + { + avatar.WeaponUniqueId = item!.UniqueId; + }; + }; + + + + AvatarData.Avatars.Add(avatar); + + if (sync) await Player.SendPacket(new PacketGetAvatarDataRsp(new List { avatar }, false)); + + return avatarExcel; + } + + public AvatarInfo? GetAvatar(uint avatarId) + { + + return AvatarData.Avatars.Find(avatar => avatar.AvatarId == avatarId); + } +} \ No newline at end of file diff --git a/GameServer/Game/BasePlayerManager.cs b/GameServer/Game/BasePlayerManager.cs new file mode 100644 index 0000000..9e39110 --- /dev/null +++ b/GameServer/Game/BasePlayerManager.cs @@ -0,0 +1,8 @@ +using KianaBH.GameServer.Game.Player; + +namespace KianaBH.GameServer.Game; + +public class BasePlayerManager(PlayerInstance player) +{ + public PlayerInstance Player { get; private set; } = player; +} \ No newline at end of file diff --git a/GameServer/Game/Inventory/InventoryManager.cs b/GameServer/Game/Inventory/InventoryManager.cs new file mode 100644 index 0000000..f573add --- /dev/null +++ b/GameServer/Game/Inventory/InventoryManager.cs @@ -0,0 +1,86 @@ +using KianaBH.Data; +using KianaBH.Database; +using KianaBH.Database.Inventory; +using KianaBH.Enums.Item; +using KianaBH.GameServer.Game.Player; +using KianaBH.Proto; +using KianaBH.Util; +using static KianaBH.Proto.MasterPupilRetcode.Types; + +namespace KianaBH.GameServer.Game.Inventory; + +public class InventoryManager(PlayerInstance player) : BasePlayerManager(player) +{ + public InventoryData Data = DatabaseHelper.GetInstanceOrCreateNew(player.Uid); + + public async ValueTask AddItem(int itemId, int count, ItemMainTypeEnum type, int level = 1, int equipAvatar = 0, bool notify = true, + bool sync = true) + { + ItemData? itemData = null; + + switch (type) + { + case ItemMainTypeEnum.Material: + GameData.MaterialData.TryGetValue(itemId, out var materialConfig); + if (materialConfig == null) return null; + itemData = await PutItem(itemId, count, type); + break; + case ItemMainTypeEnum.Weapon: + GameData.WeaponData.TryGetValue(itemId, out var weaponConfig); + if (weaponConfig == null) return null; + itemData = await PutItem(itemId, 1, type, level, equipAvatar: equipAvatar, uniqueId: ++Data.NextUniqueId); + break; + default: + break; + } + + return itemData; + } + + public async ValueTask PutItem(int itemId, int count, ItemMainTypeEnum type, int level = 0, + int exp = 0, int equipAvatar = 0, int uniqueId = 0) + { + var item = new ItemData + { + ItemId = itemId, + Count = count, + Level = level, + Exp = exp, + EquipAvatar = equipAvatar, + }; + + if (uniqueId > 0) item.UniqueId = uniqueId; + + switch (type) + { + case ItemMainTypeEnum.Material: + var oldItem = Data.MaterialItems.Find(x => x.ItemId == itemId); + if (oldItem != null) + { + oldItem.Count += count; + item = oldItem; + break; + } + + Data.MaterialItems.Add(item); + break; + case ItemMainTypeEnum.Weapon: + if (Data.WeaponItems.Count + 1 > GameConstants.INVENTORY_MAX_EQUIPMENT) + { + return item; + } + + Data.WeaponItems.Add(item); + break; + case ItemMainTypeEnum.Stigmata: + if (Data.StigmataItems.Count + 1 > GameConstants.INVENTORY_MAX_EQUIPMENT) + { + return item; + } + Data.StigmataItems.Add(item); + break; + } + + return item; + } +} \ No newline at end of file diff --git a/GameServer/Game/Player/PlayerInstance.cs b/GameServer/Game/Player/PlayerInstance.cs new file mode 100644 index 0000000..174112a --- /dev/null +++ b/GameServer/Game/Player/PlayerInstance.cs @@ -0,0 +1,110 @@ +using KianaBH.Data; +using KianaBH.Database; +using KianaBH.Database.Account; +using KianaBH.Database.Client; +using KianaBH.Database.Player; +using KianaBH.GameServer.Game.Avatar; +using KianaBH.GameServer.Game.Inventory; +using KianaBH.GameServer.Server; +using KianaBH.KcpSharp; +using KianaBH.Util.Extensions; + +namespace KianaBH.GameServer.Game.Player; + +public class PlayerInstance(PlayerData data) +{ + public AvatarManager? AvatarManager { get; private set; } + public InventoryManager? InventoryManager { get; private set; } + + public static readonly List _playerInstances = []; + public PlayerData Data { get; set; } = data; + public ClientData? ClientData { get; private set; } + public GuideData? GuideData { get; private set; } + public int Uid { get; set; } + public Connection? Connection { get; set; } + public bool Initialized { get; set; } + public bool IsNewPlayer { get; set; } + public int GetMissionDataRequestCount = 0; + + #region Initializers + public PlayerInstance(int uid) : this(new PlayerData { Uid = uid }) + { + // new player + IsNewPlayer = true; + Data.Name = AccountData.GetAccountByUid(uid)?.Username; + + DatabaseHelper.CreateInstance(Data); + + var t = Task.Run(async () => + { + await InitialPlayerManager(); + await AvatarManager!.AddAvatar(101); + GuideData?.GuideFinishList.AddRange(GameData.TutorialData.Values.Select(x => x.Id)); + }); + t.Wait(); + + Initialized = true; + + } + private async ValueTask InitialPlayerManager() + { + Uid = Data.Uid; + AvatarManager = new AvatarManager(this); + InventoryManager = new InventoryManager(this); + ClientData = InitializeDatabase(); + GuideData = InitializeDatabase(); + Data.LastActiveTime = Extensions.GetUnixSec(); + + await Task.CompletedTask; + } + public T InitializeDatabase() where T : BaseDatabaseDataHelper, new() + { + var instance = DatabaseHelper.GetInstanceOrCreateNew(Uid); + return instance!; + } + + #endregion + + #region Network + public async ValueTask OnGetToken() + { + if (!Initialized) await InitialPlayerManager(); + } + + public async ValueTask OnLogin() + { + _playerInstances.Add(this); + await Task.CompletedTask; + } + + public static PlayerInstance? GetPlayerInstanceByUid(long uid) + => _playerInstances.FirstOrDefault(player => player.Uid == uid); + public void OnLogoutAsync() + { + _playerInstances.Remove(this); + } + public async ValueTask SendPacket(BasePacket packet) + { + if (Connection?.IsOnline == true) await Connection.SendPacket(packet); + } + + #endregion + + #region Actions + public async ValueTask OnHeartBeat() + { + DatabaseHelper.ToSaveUidList.SafeAdd(Uid); + await Task.CompletedTask; + } + + #endregion + + #region Serialization + + public Proto.GetMainDataRsp ToProto() + { + return Data.ToProto(); + } + + #endregion +} \ No newline at end of file diff --git a/GameServer/GameServer.csproj b/GameServer/GameServer.csproj new file mode 100644 index 0000000..e7e5d7b --- /dev/null +++ b/GameServer/GameServer.csproj @@ -0,0 +1,22 @@ + + + + Library + net9.0 + enable + enable + false + KianaBH.GameServer + + true + KianaGameServer + + + + + + + + + + diff --git a/GameServer/Server/Connection.cs b/GameServer/Server/Connection.cs new file mode 100644 index 0000000..493d7da --- /dev/null +++ b/GameServer/Server/Connection.cs @@ -0,0 +1,189 @@ +using KianaBH.GameServer.Game.Player; +using KianaBH.GameServer.Server.Packet; +using KianaBH.KcpSharp; +using KianaBH.KcpSharp.Base; +using KianaBH.Proto; +using KianaBH.Util; +using KianaBH.Util.Extensions; +using KianaBH.Util.Security; +using Google.Protobuf; +using Google.Protobuf.Reflection; +using System.Buffers; +using System.Net; +using System.Reflection; +using Newtonsoft.Json.Linq; +using System.Reflection.PortableExecutable; +using System.Net.Sockets; +using System.Reflection.Emit; + +namespace KianaBH.GameServer.Server; + +public class Connection(KcpConversation conversation, IPEndPoint remote) : KcpConnection(conversation, remote) +{ + private static readonly Logger Logger = new("GameServer"); + + public PlayerInstance? Player { get; set; } + + private static readonly HashSet DummyPacketNames = + [ + "AddGoodfeelReq", "ArkPlusActivityGetDataReq", "BuffAssistGetActivityReq", "BwWorldCampActivityGetDataReq", + "ChatworldBeastGetActivityReq", "ChatworldGetPrayInfoReq", "ClientReportReq", "GetAdventureGroupReq", + "GetArmadaDataReq", "GetArmadaStageScoreActivityReq", "GetAskAddFriendListReq", "GetAssistantFrozenListReq", + "GetAvatarMissionActivityReq", "GetBattlePassMissionPanelReq", "GetBlackListReq", "GetCardProductInfoReq", + "GetChapterActivityDataReq", "GetChapterCompensationInfoReq", "GetChatgroupListReq", "GetClientMailDataReq", + "GetConsignedOrderDataReq", "GetCurrencyExchangeInfoReq", "GetExtractReforgeActivityReq", + "GetFarmActivityDataReq", "GetFriendListReq", "GetFriendRemarkListReq", "GetGachaDisplayReq", + "GetGardenScheduleReq", "GetGobackReq", "GetGratuityActivityReq", "GetMasterPupilCardReq", + "GetMasterPupilDataReq", "GetMasterPupilMainDataReq", "GetMosaicActivityReq", "GetNewbieActivityReq", + "GetNinjaActivityReq", "GetOfflineResourceDataReq", "GetOpenworldQuestActivityReq", + "GetRaffleActivityReq", "GetRankScheduleDataReq", "GetRecommendFriendListReq", "GetRecommendGoodsReq", + "GetRoomDataReq", "GetRpgTaleReq", "GetScratchTicketReq", "GetSecurityPasswordReq", "GetShoppingMallListReq", + "GetStageChapterReq", "GetSupportActivityReq", "GetSurveyDataReq", + "GetTradingCardActivityReq", "GetTvtActivityReq", "GetWeeklyRoutineActivityReq", "GrandKeyActivateSkillReq", + "MassiveWarGetActivityReq", "OpenworldGetMechaTeamReq", "OpenworldHuntActivityGetDataReq", + "PjmsGetAchievementDataReq", "PjmsGetConditionDataReq", "PjmsGetCurWorldReq", "PjmsGetStoryDataReq", + "ReunionCookGetActivityReq", "SimplifiedGodWarGetActivityReq", + "StageInnerDataReportReq", "SusannaTrialGetActivityReq", "ThemeWantedRefreshTicketReq", + "UpdateMissionProgressReq", "WaveRushGetActivityReq" + ]; + + public override async void Start() + { + Logger.Info($"New connection from {RemoteEndPoint}."); + State = SessionStateEnum.WAITING_FOR_TOKEN; + await ReceiveLoop(); + } + + public override async void Stop(bool isServerStop = false) + { + //if (isServerStop) await Player!.SendPacket(new PacketPlayerKickOutScNotify(KickType.KickLoginWhiteTimeout)); + Player?.OnLogoutAsync(); + KcpListener.UnregisterConnection(this); + base.Stop(isServerStop); + } + + protected async Task ReceiveLoop() + { + while (!CancelToken.IsCancellationRequested) + { + // WaitToReceiveAsync call completes when there is at least one message is received or the transport is closed. + var result = await Conversation.WaitToReceiveAsync(CancelToken.Token); + if (result.TransportClosed) + { + Logger.Debug("Connection was closed"); + break; + } + + var buffer = ArrayPool.Shared.Rent(result.BytesReceived); + try + { + // TryReceive should not return false here, unless the transport is closed. + // So we don't need to check for result.TransportClosed. + if (!Conversation.TryReceive(buffer, out result)) + { + Logger.Error("Failed to receive packet"); + break; + } + + await ProcessMessageAsync(buffer.AsMemory(0, result.BytesReceived)); + } + catch (Exception ex) + { + Logger.Error("Packet parse error", ex); + } + finally + { + ArrayPool.Shared.Return(buffer); + } + } + + Stop(); + } + + // DO THE PROCESSING OF THE GAME PACKET + private async Task ProcessMessageAsync(Memory data) + { + var gamePacket = data.ToArray(); + + await using MemoryStream ms = new(gamePacket); + using BinaryReader br = new(ms); + + // Handle + try + { + while (br.BaseStream.Position < br.BaseStream.Length) + { + // Length + if (br.BaseStream.Length - br.BaseStream.Position < 32) return; + // Packet sanity check + var headMagic = br.ReadUInt32BE(); + if (headMagic != 0x01234567) + { + Logger.Error($"Bad Data Package Received: got 0x{headMagic:X}, expect 0x01234567"); + return; // Bad packet + } + + var packetVersion = br.ReadUInt16BE(); + var ClientVersion = br.ReadUInt16BE(); + var PacketId = br.ReadUInt32BE(); + var UserId = br.ReadUInt32BE(); + var UserIp = br.ReadUInt32BE(); + var Sign = br.ReadUInt32BE(); + var SignType = br.ReadUInt16BE(); + var CmdId = br.ReadUInt16BE(); + var HeaderLength = br.ReadUInt16BE(); + var BodyLength = br.ReadUInt32BE(); + + // Data + var header = br.ReadBytes(HeaderLength); + var Body = br.ReadBytes((int)BodyLength); + var TailMagic = br.ReadUInt32BE(); + LogPacket("Recv", CmdId, Body); + await HandlePacket(CmdId, header, Body); + } + } + catch (Exception e) + { + Logger.Error(e.Message, e); + } + } + + private async Task HandlePacket(ushort opcode, byte[] header, byte[] payload) + { + var packetName = LogMap.GetValueOrDefault(opcode); + if (DummyPacketNames.Contains(packetName!)) + { + await SendDummy(packetName!); + Logger.Info($"[Dummy] Send Dummy {packetName}"); + return; + } + + // Find the Handler for this opcode + var handler = HandlerManager.GetHandler(opcode); + if (handler != null) + { + // Handle + // Make sure session is ready for packets + var state = State; + try + { + await handler.OnHandle(this, header, payload); + } + catch (Exception e) + { + Logger.Error(e.Message, e); + } + return; + } + } + + private async Task SendDummy(string packetName) + { + var respName = packetName.Replace("Req", "Rsp"); // Get the response packet name + if (respName == packetName) return; // do not send rsp when resp name = recv name + var respOpcode = LogMap.FirstOrDefault(x => x.Value == respName).Key; // Get the response opcode + + // Send Rsp + await SendPacket(respOpcode); + } +} \ No newline at end of file diff --git a/GameServer/Server/Listener.cs b/GameServer/Server/Listener.cs new file mode 100644 index 0000000..6a9d85e --- /dev/null +++ b/GameServer/Server/Listener.cs @@ -0,0 +1,13 @@ +using KianaBH.KcpSharp; + +namespace KianaBH.GameServer.Server; + +public class Listener : KcpListener +{ + public static Connection? GetActiveConnection(int uid) + { + var con = Connections.Values.FirstOrDefault(c => + (c as Connection)?.Player?.Uid == uid && c.State == SessionStateEnum.ACTIVE) as Connection; + return con; + } +} \ No newline at end of file diff --git a/GameServer/Server/Packet/Handler.cs b/GameServer/Server/Packet/Handler.cs new file mode 100644 index 0000000..b3e602e --- /dev/null +++ b/GameServer/Server/Packet/Handler.cs @@ -0,0 +1,6 @@ +namespace KianaBH.GameServer.Server.Packet; + +public abstract class Handler +{ + public abstract Task OnHandle(Connection connection, byte[] header, byte[] data); +} \ No newline at end of file diff --git a/GameServer/Server/Packet/HandlerManager.cs b/GameServer/Server/Packet/HandlerManager.cs new file mode 100644 index 0000000..d896607 --- /dev/null +++ b/GameServer/Server/Packet/HandlerManager.cs @@ -0,0 +1,31 @@ +using System.Reflection; + +namespace KianaBH.GameServer.Server.Packet; + +public static class HandlerManager +{ + public static Dictionary handlers = []; + + public static void Init() + { + var classes = Assembly.GetExecutingAssembly().GetTypes(); // Get all classes in the assembly + foreach (var cls in classes) + { + var attribute = (Opcode?)Attribute.GetCustomAttribute(cls, typeof(Opcode)); + + if (attribute != null) handlers.Add(attribute.CmdId, (Handler)Activator.CreateInstance(cls)!); + } + } + + public static Handler? GetHandler(int cmdId) + { + try + { + return handlers[cmdId]; + } + catch + { + return null; + } + } +} \ No newline at end of file diff --git a/GameServer/Server/Packet/Opcode.cs b/GameServer/Server/Packet/Opcode.cs new file mode 100644 index 0000000..3a67287 --- /dev/null +++ b/GameServer/Server/Packet/Opcode.cs @@ -0,0 +1,7 @@ +namespace KianaBH.GameServer.Server.Packet; + +[AttributeUsage(AttributeTargets.Class)] +public class Opcode(int cmdId) : Attribute +{ + public int CmdId = cmdId; +} \ No newline at end of file diff --git a/GameServer/Server/Packet/Recv/Activity/HandlerArkPlusActivityGetDataReq.cs b/GameServer/Server/Packet/Recv/Activity/HandlerArkPlusActivityGetDataReq.cs new file mode 100644 index 0000000..2f6b2ef --- /dev/null +++ b/GameServer/Server/Packet/Recv/Activity/HandlerArkPlusActivityGetDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Activity; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Activity; + +[Opcode(CmdIds.ArkPlusActivityGetDataReq)] +public class HandlerArkPlusActivityGetDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketArkPlusActivityGetDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Activity/HandlerBuffAssistGetActivityReq.cs b/GameServer/Server/Packet/Recv/Activity/HandlerBuffAssistGetActivityReq.cs new file mode 100644 index 0000000..ea5191e --- /dev/null +++ b/GameServer/Server/Packet/Recv/Activity/HandlerBuffAssistGetActivityReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Activity; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Activity; + +[Opcode(CmdIds.BuffAssistGetActivityReq)] +public class HandlerBuffAssistGetActivityReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketBuffAssistGetActivityRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Activity/HandlerGeneralActivityGetMainInfoReq.cs b/GameServer/Server/Packet/Recv/Activity/HandlerGeneralActivityGetMainInfoReq.cs new file mode 100644 index 0000000..92aaca5 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Activity/HandlerGeneralActivityGetMainInfoReq.cs @@ -0,0 +1,14 @@ +using KianaBH.GameServer.Server.Packet.Send.Activity; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Activity; + +[Opcode(CmdIds.GeneralActivityGetMainInfoReq)] +public class HandlerGeneralActivityGetMainInfoReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = GeneralActivityGetMainInfoReq.Parser.ParseFrom(data); + await connection.SendPacket(new PacketGeneralActivityGetMainInfoRsp(req.ActivityIdList)); + } +} diff --git a/GameServer/Server/Packet/Recv/Activity/HandlerGeneralActivityGetScheduleReq.cs b/GameServer/Server/Packet/Recv/Activity/HandlerGeneralActivityGetScheduleReq.cs new file mode 100644 index 0000000..f919c62 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Activity/HandlerGeneralActivityGetScheduleReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Activity; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Activity; + +[Opcode(CmdIds.GeneralActivityGetScheduleReq)] +public class HandlerGeneralActivityGetScheduleReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGeneralActivityGetScheduleRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Activity/HandlerGetActivityMainDataReq.cs b/GameServer/Server/Packet/Recv/Activity/HandlerGetActivityMainDataReq.cs new file mode 100644 index 0000000..9093d3b --- /dev/null +++ b/GameServer/Server/Packet/Recv/Activity/HandlerGetActivityMainDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Activity; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Activity; + +[Opcode(CmdIds.GetActivityMainDataReq)] +public class HandlerGetActivityMainDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetActivityMainDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Activity/HandlerGetActivityRewardStatisticDataReq.cs b/GameServer/Server/Packet/Recv/Activity/HandlerGetActivityRewardStatisticDataReq.cs new file mode 100644 index 0000000..160975e --- /dev/null +++ b/GameServer/Server/Packet/Recv/Activity/HandlerGetActivityRewardStatisticDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Activity; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Activity; + +[Opcode(CmdIds.GetActivityRewardStatisticDataReq)] +public class HandlerGetActivityRewardStatisticDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetActivityRewardStatisticDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Activity/HandlerGetBulletinActivityMissionReq.cs b/GameServer/Server/Packet/Recv/Activity/HandlerGetBulletinActivityMissionReq.cs new file mode 100644 index 0000000..a0ebb65 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Activity/HandlerGetBulletinActivityMissionReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Activity; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Activity; + +[Opcode(CmdIds.GetBulletinActivityMissionReq)] +public class HandlerGetBulletinActivityMissionReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetBulletinActivityMissionRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Activity/HandlerGetBulletinReq.cs b/GameServer/Server/Packet/Recv/Activity/HandlerGetBulletinReq.cs new file mode 100644 index 0000000..0903383 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Activity/HandlerGetBulletinReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Activity; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Activity; + +[Opcode(CmdIds.GetBulletinReq)] +public class HandlerGetBulletinReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetBulletinRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Activity/HandlerGetChapterActivityDataReq.cs b/GameServer/Server/Packet/Recv/Activity/HandlerGetChapterActivityDataReq.cs new file mode 100644 index 0000000..3d8476c --- /dev/null +++ b/GameServer/Server/Packet/Recv/Activity/HandlerGetChapterActivityDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Activity; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Activity; + +[Opcode(CmdIds.GetChapterActivityDataReq)] +public class HandlerGetChapterActivityDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetChapterActivityDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Activity/HandlerGetChapterCompensationInfoReq.cs b/GameServer/Server/Packet/Recv/Activity/HandlerGetChapterCompensationInfoReq.cs new file mode 100644 index 0000000..24102f1 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Activity/HandlerGetChapterCompensationInfoReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Activity; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Activity; + +[Opcode(CmdIds.GetChapterCompensationInfoReq)] +public class HandlerGetChapterCompensationInfoReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetChapterCompensationInfoRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Activity/HandlerGetDropLimitActivityReq.cs b/GameServer/Server/Packet/Recv/Activity/HandlerGetDropLimitActivityReq.cs new file mode 100644 index 0000000..16705f0 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Activity/HandlerGetDropLimitActivityReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Activity; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Activity; + +[Opcode(CmdIds.GetDropLimitActivityReq)] +public class HandlerGetDropLimitActivityReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetDropLimitActivityRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Activity/HandlerGetExtractReforgeActivityReq.cs b/GameServer/Server/Packet/Recv/Activity/HandlerGetExtractReforgeActivityReq.cs new file mode 100644 index 0000000..0b239c7 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Activity/HandlerGetExtractReforgeActivityReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Activity; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Activity; + +[Opcode(CmdIds.GetExtractReforgeActivityReq)] +public class HandlerGetExtractReforgeActivityReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetExtractReforgeActivityRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Activity/HandlerGetFarmActivityDataReq.cs b/GameServer/Server/Packet/Recv/Activity/HandlerGetFarmActivityDataReq.cs new file mode 100644 index 0000000..8899c0a --- /dev/null +++ b/GameServer/Server/Packet/Recv/Activity/HandlerGetFarmActivityDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Activity; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Activity; + +[Opcode(CmdIds.GetFarmActivityDataReq)] +public class HandlerGetFarmActivityDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetFarmActivityDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Activity/HandlerGetGardenScheduleReq.cs b/GameServer/Server/Packet/Recv/Activity/HandlerGetGardenScheduleReq.cs new file mode 100644 index 0000000..a3f1ce6 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Activity/HandlerGetGardenScheduleReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Activity; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Activity; + +[Opcode(CmdIds.GetGardenScheduleReq)] +public class HandlerGetGardenScheduleReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetGardenScheduleRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Activity/HandlerGetInviteActivityInviteeDataReq.cs b/GameServer/Server/Packet/Recv/Activity/HandlerGetInviteActivityInviteeDataReq.cs new file mode 100644 index 0000000..a11f713 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Activity/HandlerGetInviteActivityInviteeDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Activity; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Activity; + +[Opcode(CmdIds.GetInviteActivityInviteeDataReq)] +public class HandlerGetInviteActivityInviteeDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetInviteActivityInviteeDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Activity/HandlerGetInviteActivityInviterDataReq.cs b/GameServer/Server/Packet/Recv/Activity/HandlerGetInviteActivityInviterDataReq.cs new file mode 100644 index 0000000..678d71e --- /dev/null +++ b/GameServer/Server/Packet/Recv/Activity/HandlerGetInviteActivityInviterDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Activity; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Activity; + +[Opcode(CmdIds.GetInviteActivityInviterDataReq)] +public class HandlerGetInviteActivityInviterDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetInviteActivityInviterDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Activity/HandlerGetLoginActivityReq.cs b/GameServer/Server/Packet/Recv/Activity/HandlerGetLoginActivityReq.cs new file mode 100644 index 0000000..2a49f00 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Activity/HandlerGetLoginActivityReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Activity; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Activity; + +[Opcode(CmdIds.GetLoginActivityReq)] +public class HandlerGetLoginActivityReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetLoginActivityRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Activity/HandlerGetMosaicActivityReq.cs b/GameServer/Server/Packet/Recv/Activity/HandlerGetMosaicActivityReq.cs new file mode 100644 index 0000000..9ca6e1b --- /dev/null +++ b/GameServer/Server/Packet/Recv/Activity/HandlerGetMosaicActivityReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Activity; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Activity; + +[Opcode(CmdIds.GetMosaicActivityReq)] +public class HandlerGetMosaicActivityReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetMosaicActivityRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Activity/HandlerGetNewbieActivityReq.cs b/GameServer/Server/Packet/Recv/Activity/HandlerGetNewbieActivityReq.cs new file mode 100644 index 0000000..61ddf68 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Activity/HandlerGetNewbieActivityReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Activity; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Activity; + +[Opcode(CmdIds.GetNewbieActivityReq)] +public class HandlerGetNewbieActivityReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetNewbieActivityRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Activity/HandlerGetNinjaActivityReq.cs b/GameServer/Server/Packet/Recv/Activity/HandlerGetNinjaActivityReq.cs new file mode 100644 index 0000000..8ea23e0 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Activity/HandlerGetNinjaActivityReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Activity; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Activity; + +[Opcode(CmdIds.GetNinjaActivityReq)] +public class HandlerGetNinjaActivityReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetNinjaActivityRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Activity/HandlerGetThemeWantedReq.cs b/GameServer/Server/Packet/Recv/Activity/HandlerGetThemeWantedReq.cs new file mode 100644 index 0000000..50eaf9e --- /dev/null +++ b/GameServer/Server/Packet/Recv/Activity/HandlerGetThemeWantedReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Activity; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Activity; + +[Opcode(CmdIds.GetThemeWantedReq)] +public class HandlerGetThemeWantedReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetThemeWantedRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Adventure/HandlerGetAdventureGroupReq.cs b/GameServer/Server/Packet/Recv/Adventure/HandlerGetAdventureGroupReq.cs new file mode 100644 index 0000000..7285f32 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Adventure/HandlerGetAdventureGroupReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Adventure; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Adventure; + +[Opcode(CmdIds.GetAdventureGroupReq)] +public class HandlerGetAdventureGroupReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetAdventureGroupRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Adventure/HandlerGetAdventureStorySweepInfoReq.cs b/GameServer/Server/Packet/Recv/Adventure/HandlerGetAdventureStorySweepInfoReq.cs new file mode 100644 index 0000000..f1d30e5 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Adventure/HandlerGetAdventureStorySweepInfoReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Adventure; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Adventure; + +[Opcode(CmdIds.GetAdventureStorySweepInfoReq)] +public class HandlerGetAdventureStorySweepInfoReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetAdventureStorySweepInfoRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Adventure/HandlerGetConsignedOrderDataReq.cs b/GameServer/Server/Packet/Recv/Adventure/HandlerGetConsignedOrderDataReq.cs new file mode 100644 index 0000000..0cfe9c2 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Adventure/HandlerGetConsignedOrderDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Adventure; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Adventure; + +[Opcode(CmdIds.GetConsignedOrderDataReq)] +public class HandlerGetConsignedOrderDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetConsignedOrderDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Armada/HandlerGetArmadaActivityListReq.cs b/GameServer/Server/Packet/Recv/Armada/HandlerGetArmadaActivityListReq.cs new file mode 100644 index 0000000..202437a --- /dev/null +++ b/GameServer/Server/Packet/Recv/Armada/HandlerGetArmadaActivityListReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Armada; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Armada; + +[Opcode(CmdIds.GetArmadaActivityListReq)] +public class HandlerGetArmadaActivityListReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetArmadaActivityListRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Armada/HandlerGetArmadaDataReq.cs b/GameServer/Server/Packet/Recv/Armada/HandlerGetArmadaDataReq.cs new file mode 100644 index 0000000..782caae --- /dev/null +++ b/GameServer/Server/Packet/Recv/Armada/HandlerGetArmadaDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Armada; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Armada; + +[Opcode(CmdIds.GetArmadaDataReq)] +public class HandlerGetArmadaDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetArmadaDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Armada/HandlerGetArmadaStageScoreActivityReq.cs b/GameServer/Server/Packet/Recv/Armada/HandlerGetArmadaStageScoreActivityReq.cs new file mode 100644 index 0000000..c1fe415 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Armada/HandlerGetArmadaStageScoreActivityReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Armada; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Armada; + +[Opcode(CmdIds.GetArmadaStageScoreActivityReq)] +public class HandlerGetArmadaStageScoreActivityReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetArmadaStageScoreActivityRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Auth/HandlerGetAuthkeyReq.cs b/GameServer/Server/Packet/Recv/Auth/HandlerGetAuthkeyReq.cs new file mode 100644 index 0000000..3d2cb31 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Auth/HandlerGetAuthkeyReq.cs @@ -0,0 +1,14 @@ +using KianaBH.GameServer.Server.Packet.Send.Auth; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Auth; + +[Opcode(CmdIds.GetAuthkeyReq)] +public class HandlerGetAuthkeyReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = GetAuthkeyReq.Parser.ParseFrom(data); + await connection.SendPacket(new PacketGetAuthkeyRsp(req.AuthAppid)); + } +} diff --git a/GameServer/Server/Packet/Recv/Avatar/HandlerAddCustomAvatarTeamReq.cs b/GameServer/Server/Packet/Recv/Avatar/HandlerAddCustomAvatarTeamReq.cs new file mode 100644 index 0000000..d8603ed --- /dev/null +++ b/GameServer/Server/Packet/Recv/Avatar/HandlerAddCustomAvatarTeamReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Avatar; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Avatar; + +[Opcode(CmdIds.AddCustomAvatarTeamReq)] +public class HandlerAddCustomAvatarTeamReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketAddCustomAvatarTeamRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Avatar/HandlerAvatarSubSkillLevelUpReq.cs b/GameServer/Server/Packet/Recv/Avatar/HandlerAvatarSubSkillLevelUpReq.cs new file mode 100644 index 0000000..d21790b --- /dev/null +++ b/GameServer/Server/Packet/Recv/Avatar/HandlerAvatarSubSkillLevelUpReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Avatar; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Avatar; + +[Opcode(CmdIds.AvatarSubSkillLevelUpReq)] +public class HandlerAvatarSubSkillLevelUpReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketAvatarSubSkillLevelUpRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Avatar/HandlerDelCustomAvatarTeamReq.cs b/GameServer/Server/Packet/Recv/Avatar/HandlerDelCustomAvatarTeamReq.cs new file mode 100644 index 0000000..2242bf7 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Avatar/HandlerDelCustomAvatarTeamReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Avatar; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Avatar; + +[Opcode(CmdIds.DelCustomAvatarTeamReq)] +public class HandlerDelCustomAvatarTeamReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketDelCustomAvatarTeamRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Avatar/HandlerDressEquipmentReq.cs b/GameServer/Server/Packet/Recv/Avatar/HandlerDressEquipmentReq.cs new file mode 100644 index 0000000..6778211 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Avatar/HandlerDressEquipmentReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Avatar; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Avatar; + +[Opcode(CmdIds.DressEquipmentReq)] +public class HandlerDressEquipmentReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketDressEquipmentRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Avatar/HandlerGetAvatarDataReq.cs b/GameServer/Server/Packet/Recv/Avatar/HandlerGetAvatarDataReq.cs new file mode 100644 index 0000000..3040dc4 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Avatar/HandlerGetAvatarDataReq.cs @@ -0,0 +1,25 @@ +using KianaBH.Database.Avatar; +using KianaBH.GameServer.Game.Player; +using KianaBH.GameServer.Server.Packet.Send.Avatar; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Avatar; + +[Opcode(CmdIds.GetAvatarDataReq)] +public class HandlerGetAvatarDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = GetAvatarDataReq.Parser.ParseFrom(data); + var player = connection.Player!; + var avatars = req.AvatarIdList.Any(id => id != 0) + ? req.AvatarIdList + .Select(id => player.AvatarManager!.GetAvatar(id)) + .Where(avatar => avatar != null) + .ToList()! + : player.AvatarManager?.AvatarData?.Avatars?.ToList(); + + bool isAll = !req.AvatarIdList.Any(id => id != 0); + await connection.SendPacket(new PacketGetAvatarDataRsp(avatars!, isAll)); + } +} diff --git a/GameServer/Server/Packet/Recv/Avatar/HandlerGetAvatarMissionActivityReq.cs b/GameServer/Server/Packet/Recv/Avatar/HandlerGetAvatarMissionActivityReq.cs new file mode 100644 index 0000000..b1d0307 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Avatar/HandlerGetAvatarMissionActivityReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Avatar; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Avatar; + +[Opcode(CmdIds.GetAvatarMissionActivityReq)] +public class HandlerGetAvatarMissionActivityReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetAvatarMissionActivityRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Avatar/HandlerGetAvatarRollDataReq.cs b/GameServer/Server/Packet/Recv/Avatar/HandlerGetAvatarRollDataReq.cs new file mode 100644 index 0000000..cf9e51d --- /dev/null +++ b/GameServer/Server/Packet/Recv/Avatar/HandlerGetAvatarRollDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Avatar; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Avatar; + +[Opcode(CmdIds.GetAvatarRollDataReq)] +public class HandlerGetAvatarRollDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetAvatarRollDataRsp(connection.Player!)); + } +} diff --git a/GameServer/Server/Packet/Recv/Avatar/HandlerGetAvatarTeamDataReq.cs b/GameServer/Server/Packet/Recv/Avatar/HandlerGetAvatarTeamDataReq.cs new file mode 100644 index 0000000..8fc31f3 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Avatar/HandlerGetAvatarTeamDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Avatar; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Avatar; + +[Opcode(CmdIds.GetAvatarTeamDataReq)] +public class HandlerGetAvatarTeamDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetAvatarTeamDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Avatar/HandlerUpdateCustomAvatarTeamReq.cs b/GameServer/Server/Packet/Recv/Avatar/HandlerUpdateCustomAvatarTeamReq.cs new file mode 100644 index 0000000..013a9da --- /dev/null +++ b/GameServer/Server/Packet/Recv/Avatar/HandlerUpdateCustomAvatarTeamReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Avatar; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Avatar; + +[Opcode(CmdIds.UpdateCustomAvatarTeamReq)] +public class HandlerUpdateCustomAvatarTeamReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketUpdateCustomAvatarTeamRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Battle/HandlerGetBuffEffectReq.cs b/GameServer/Server/Packet/Recv/Battle/HandlerGetBuffEffectReq.cs new file mode 100644 index 0000000..a11fc7b --- /dev/null +++ b/GameServer/Server/Packet/Recv/Battle/HandlerGetBuffEffectReq.cs @@ -0,0 +1,14 @@ +using KianaBH.GameServer.Server.Packet.Send.Battle; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Battle; + +[Opcode(CmdIds.GetBuffEffectReq)] +public class HandlerGetBuffEffectReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = GetBuffEffectReq.Parser.ParseFrom(data); + await connection.SendPacket(new PacketGetBuffEffectRsp(req.EffectIdList)); + } +} diff --git a/GameServer/Server/Packet/Recv/BattlePass/HandlerGetBattlePassMissionPanelReq.cs b/GameServer/Server/Packet/Recv/BattlePass/HandlerGetBattlePassMissionPanelReq.cs new file mode 100644 index 0000000..31e4605 --- /dev/null +++ b/GameServer/Server/Packet/Recv/BattlePass/HandlerGetBattlePassMissionPanelReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.BattlePass; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.BattlePass; + +[Opcode(CmdIds.GetBattlePassMissionPanelReq)] +public class HandlerGetBattlePassMissionPanelReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetBattlePassMissionPanelRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Challenge/HandlerGetChallengeStepCompensationInfoReq.cs b/GameServer/Server/Packet/Recv/Challenge/HandlerGetChallengeStepCompensationInfoReq.cs new file mode 100644 index 0000000..143d7a3 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Challenge/HandlerGetChallengeStepCompensationInfoReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Challenge; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Challenge; + +[Opcode(CmdIds.GetChallengeStepCompensationInfoReq)] +public class HandlerGetChallengeStepCompensationInfoReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetChallengeStepCompensationInfoRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Chapter/HandlerChapterArkGetDataReq.cs b/GameServer/Server/Packet/Recv/Chapter/HandlerChapterArkGetDataReq.cs new file mode 100644 index 0000000..48b510c --- /dev/null +++ b/GameServer/Server/Packet/Recv/Chapter/HandlerChapterArkGetDataReq.cs @@ -0,0 +1,14 @@ +using KianaBH.GameServer.Server.Packet.Send.Chapter; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Chapter; + +[Opcode(CmdIds.ChapterArkGetDataReq)] +public class HandlerChapterArkGetDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = ChapterArkGetDataReq.Parser.ParseFrom(data); + await connection.SendPacket(new PacketChapterArkGetDataRsp(req.ChapterId)); + } +} diff --git a/GameServer/Server/Packet/Recv/Chapter/HandlerChapterBwWorldGetDataReq.cs b/GameServer/Server/Packet/Recv/Chapter/HandlerChapterBwWorldGetDataReq.cs new file mode 100644 index 0000000..6072d2b --- /dev/null +++ b/GameServer/Server/Packet/Recv/Chapter/HandlerChapterBwWorldGetDataReq.cs @@ -0,0 +1,14 @@ +using KianaBH.GameServer.Server.Packet.Send.Chapter; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Chapter; + +[Opcode(CmdIds.ChapterBwWorldGetDataReq)] +public class HandlerChapterBwWorldGetDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = ChapterBwWorldGetDataReq.Parser.ParseFrom(data); + await connection.SendPacket(new PacketChapterBwWorldGetDataRsp(req.ChapterId)); + } +} diff --git a/GameServer/Server/Packet/Recv/Chapter/HandlerChapterGroupGetDataReq.cs b/GameServer/Server/Packet/Recv/Chapter/HandlerChapterGroupGetDataReq.cs new file mode 100644 index 0000000..e78732e --- /dev/null +++ b/GameServer/Server/Packet/Recv/Chapter/HandlerChapterGroupGetDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Chapter; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Chapter; + +[Opcode(CmdIds.ChapterGroupGetDataReq)] +public class HandlerChapterGroupGetDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketChapterGroupGetDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Chapter/HandlerChapterKnightRichManGetDataReq.cs b/GameServer/Server/Packet/Recv/Chapter/HandlerChapterKnightRichManGetDataReq.cs new file mode 100644 index 0000000..c65de17 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Chapter/HandlerChapterKnightRichManGetDataReq.cs @@ -0,0 +1,14 @@ +using KianaBH.GameServer.Server.Packet.Send.Chapter; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Chapter; + +[Opcode(CmdIds.ChapterKnightRichManGetDataReq)] +public class HandlerChapterKnightRichManGetDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = ChapterKnightRichManGetDataReq.Parser.ParseFrom(data); + await connection.SendPacket(new PacketChapterKnightRichManGetDataRsp(req.RichManId)); + } +} diff --git a/GameServer/Server/Packet/Recv/Chapter/HandlerGetEliteChapterCompensationInfoReq.cs b/GameServer/Server/Packet/Recv/Chapter/HandlerGetEliteChapterCompensationInfoReq.cs new file mode 100644 index 0000000..79e1b43 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Chapter/HandlerGetEliteChapterCompensationInfoReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Chapter; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Chapter; + +[Opcode(CmdIds.GetEliteChapterCompensationInfoReq)] +public class HandlerGetEliteChapterCompensationInfoReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetEliteChapterCompensationInfoRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Chat/HandlerChatworldBeastGetActivityReq.cs b/GameServer/Server/Packet/Recv/Chat/HandlerChatworldBeastGetActivityReq.cs new file mode 100644 index 0000000..5e28fe3 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Chat/HandlerChatworldBeastGetActivityReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Chat; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Chat; + +[Opcode(CmdIds.ChatworldBeastGetActivityReq)] +public class HandlerChatworldBeastGetActivityReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketChatworldBeastGetActivityRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Chat/HandlerChatworldGetActivityScheduleReq.cs b/GameServer/Server/Packet/Recv/Chat/HandlerChatworldGetActivityScheduleReq.cs new file mode 100644 index 0000000..fb214a1 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Chat/HandlerChatworldGetActivityScheduleReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Chat; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Chat; + +[Opcode(CmdIds.ChatworldGetActivityScheduleReq)] +public class HandlerChatworldGetActivityScheduleReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketChatworldGetActivityScheduleRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Chat/HandlerChatworldGetPrayInfoReq.cs b/GameServer/Server/Packet/Recv/Chat/HandlerChatworldGetPrayInfoReq.cs new file mode 100644 index 0000000..cd7f528 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Chat/HandlerChatworldGetPrayInfoReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Chat; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Chat; + +[Opcode(CmdIds.ChatworldGetPrayInfoReq)] +public class HandlerChatworldGetPrayInfoReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketChatworldGetPrayInfoRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Chat/HandlerEnterWorldChatroomReq.cs b/GameServer/Server/Packet/Recv/Chat/HandlerEnterWorldChatroomReq.cs new file mode 100644 index 0000000..57ae0fb --- /dev/null +++ b/GameServer/Server/Packet/Recv/Chat/HandlerEnterWorldChatroomReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Chat; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Chat; + +[Opcode(CmdIds.EnterWorldChatroomReq)] +public class HandlerEnterWorldChatroomReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketEnterWorldChatroomRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Chat/HandlerGetChatgroupListReq.cs b/GameServer/Server/Packet/Recv/Chat/HandlerGetChatgroupListReq.cs new file mode 100644 index 0000000..2369234 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Chat/HandlerGetChatgroupListReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Chat; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Chat; + +[Opcode(CmdIds.GetChatgroupListReq)] +public class HandlerGetChatgroupListReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetChatgroupListRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Client/HandlerClientReportReq.cs b/GameServer/Server/Packet/Recv/Client/HandlerClientReportReq.cs new file mode 100644 index 0000000..9c48f17 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Client/HandlerClientReportReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Client; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Client; + +[Opcode(CmdIds.ClientReportReq)] +public class HandlerClientReportReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketClientReportRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Client/HandlerGetClientDataReq.cs b/GameServer/Server/Packet/Recv/Client/HandlerGetClientDataReq.cs new file mode 100644 index 0000000..dd2373f --- /dev/null +++ b/GameServer/Server/Packet/Recv/Client/HandlerGetClientDataReq.cs @@ -0,0 +1,15 @@ +using KianaBH.GameServer.Server.Packet.Send.Client; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Client; + +[Opcode(CmdIds.GetClientDataReq)] +public class HandlerGetClientDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = GetClientDataReq.Parser.ParseFrom(data); + + await connection.SendPacket(new PacketGetClientDataRsp(req.Id,req.Type, connection.Player!)); + } +} diff --git a/GameServer/Server/Packet/Recv/Client/HandlerGetClientMailDataReq.cs b/GameServer/Server/Packet/Recv/Client/HandlerGetClientMailDataReq.cs new file mode 100644 index 0000000..1beb110 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Client/HandlerGetClientMailDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Client; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Client; + +[Opcode(CmdIds.GetClientMailDataReq)] +public class HandlerGetClientMailDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetClientMailDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Client/HandlerGetClientSettingReq.cs b/GameServer/Server/Packet/Recv/Client/HandlerGetClientSettingReq.cs new file mode 100644 index 0000000..2020fa1 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Client/HandlerGetClientSettingReq.cs @@ -0,0 +1,14 @@ +using KianaBH.GameServer.Server.Packet.Send.Client; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Client; + +[Opcode(CmdIds.GetClientSettingReq)] +public class HandlerGetClientSettingReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = GetClientSettingReq.Parser.ParseFrom(data); + await connection.SendPacket(new PacketGetClientSettingRsp(req.ClientSettingType)); + } +} diff --git a/GameServer/Server/Packet/Recv/Client/HandlerKeepAliveNotify.cs b/GameServer/Server/Packet/Recv/Client/HandlerKeepAliveNotify.cs new file mode 100644 index 0000000..b2827fa --- /dev/null +++ b/GameServer/Server/Packet/Recv/Client/HandlerKeepAliveNotify.cs @@ -0,0 +1,13 @@ +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Client; + +[Opcode(CmdIds.KeepAliveNotify)] +public class HandlerKeepAliveNotify : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.Player!.OnHeartBeat(); + await connection.SendPacket(CmdIds.KeepAliveNotify); + } +} diff --git a/GameServer/Server/Packet/Recv/Client/HandlerReportClientDataVersionReq.cs b/GameServer/Server/Packet/Recv/Client/HandlerReportClientDataVersionReq.cs new file mode 100644 index 0000000..bd09e26 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Client/HandlerReportClientDataVersionReq.cs @@ -0,0 +1,14 @@ +using KianaBH.GameServer.Server.Packet.Send.Client; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Client; + +[Opcode(CmdIds.ReportClientDataVersionReq)] +public class HandlerReportClientDataVersionReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = ReportClientDataVersionReq.Parser.ParseFrom(data); + await connection.SendPacket(new PacketReportClientDataVersionRsp(req.Version)); + } +} diff --git a/GameServer/Server/Packet/Recv/Client/HandlerSetClientDataReq.cs b/GameServer/Server/Packet/Recv/Client/HandlerSetClientDataReq.cs new file mode 100644 index 0000000..3b284ec --- /dev/null +++ b/GameServer/Server/Packet/Recv/Client/HandlerSetClientDataReq.cs @@ -0,0 +1,27 @@ +using KianaBH.GameServer.Game.Player; +using KianaBH.GameServer.Server.Packet.Send.Client; +using KianaBH.Proto; +using KianaBH.Database.Client; + +namespace KianaBH.GameServer.Server.Packet.Recv.Client; + +[Opcode(CmdIds.SetClientDataReq)] +public class HandlerSetClientDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = SetClientDataReq.Parser.ParseFrom(data); + PlayerInstance player = connection.Player!; + var clientData = player.ClientData!.Clients.FirstOrDefault(c => c.Id == req.ClientData.Id && c.Type == req.ClientData.Type); + if (clientData == null) + { + player.ClientData.Clients.Add(new ClientDBData + { + Id = req.ClientData.Id, + Type = req.ClientData.Type, + Data = req.ClientData.Data.ToByteArray(), + }); + } + await connection.SendPacket(new PacketSetClientDataRsp(req.ClientData.Id,req.ClientData.Type)); + } +} diff --git a/GameServer/Server/Packet/Recv/Collection/HandlerGetCollectionListReq.cs b/GameServer/Server/Packet/Recv/Collection/HandlerGetCollectionListReq.cs new file mode 100644 index 0000000..1cb7b72 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Collection/HandlerGetCollectionListReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Collection; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Collection; + +[Opcode(CmdIds.GetCollectionListReq)] +public class HandlerGetCollectionListReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetCollectionListRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/DLC/HandlerGetDLCAvatarReq.cs b/GameServer/Server/Packet/Recv/DLC/HandlerGetDLCAvatarReq.cs new file mode 100644 index 0000000..bf56f9c --- /dev/null +++ b/GameServer/Server/Packet/Recv/DLC/HandlerGetDLCAvatarReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.DLC; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.DLC; + +[Opcode(CmdIds.GetDLCAvatarReq)] +public class HandlerGetDLCAvatarReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetDLCAvatarRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/DLC/HandlerGetDLCReq.cs b/GameServer/Server/Packet/Recv/DLC/HandlerGetDLCReq.cs new file mode 100644 index 0000000..656a5df --- /dev/null +++ b/GameServer/Server/Packet/Recv/DLC/HandlerGetDLCReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.DLC; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.DLC; + +[Opcode(CmdIds.GetDLCReq)] +public class HandlerGetDLCReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetDLCRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/DLC/HandlerGetDLCTowerReq.cs b/GameServer/Server/Packet/Recv/DLC/HandlerGetDLCTowerReq.cs new file mode 100644 index 0000000..5c40bff --- /dev/null +++ b/GameServer/Server/Packet/Recv/DLC/HandlerGetDLCTowerReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.DLC; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.DLC; + +[Opcode(CmdIds.GetDLCTowerReq)] +public class HandlerGetDLCTowerReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetDLCTowerRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dorm/HandlerGetDormDataReq.cs b/GameServer/Server/Packet/Recv/Dorm/HandlerGetDormDataReq.cs new file mode 100644 index 0000000..a314ba6 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dorm/HandlerGetDormDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dorm; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dorm; + +[Opcode(CmdIds.GetDormDataReq)] +public class HandlerGetDormDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetDormDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetPlotListReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetPlotListReq.cs new file mode 100644 index 0000000..d2f49f1 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetPlotListReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetPlotListReq)] +public class HandlerGetPlotListReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetPlotListRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetPrivilegeInfoReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetPrivilegeInfoReq.cs new file mode 100644 index 0000000..6398c60 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetPrivilegeInfoReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetPrivilegeInfoReq)] +public class HandlerGetPrivilegeInfoReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetPrivilegeInfoRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetProductListReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetProductListReq.cs new file mode 100644 index 0000000..1dfb334 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetProductListReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetProductListReq)] +public class HandlerGetProductListReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetProductListRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetProductRecommendListReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetProductRecommendListReq.cs new file mode 100644 index 0000000..770064f --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetProductRecommendListReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetProductRecommendListReq)] +public class HandlerGetProductRecommendListReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetProductRecommendListRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetRaffleActivityReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetRaffleActivityReq.cs new file mode 100644 index 0000000..f539a7a --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetRaffleActivityReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetRaffleActivityReq)] +public class HandlerGetRaffleActivityReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetRaffleActivityRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetRankScheduleDataReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetRankScheduleDataReq.cs new file mode 100644 index 0000000..16a8da5 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetRankScheduleDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetRankScheduleDataReq)] +public class HandlerGetRankScheduleDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetRankScheduleDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetRecommendFriendListReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetRecommendFriendListReq.cs new file mode 100644 index 0000000..a2eea50 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetRecommendFriendListReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetRecommendFriendListReq)] +public class HandlerGetRecommendFriendListReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetRecommendFriendListRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetRecommendGoodsReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetRecommendGoodsReq.cs new file mode 100644 index 0000000..b6de7e1 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetRecommendGoodsReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetRecommendGoodsReq)] +public class HandlerGetRecommendGoodsReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetRecommendGoodsRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetRewardLineActivityReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetRewardLineActivityReq.cs new file mode 100644 index 0000000..d455ae4 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetRewardLineActivityReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetRewardLineActivityReq)] +public class HandlerGetRewardLineActivityReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetRewardLineActivityRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetRoomDataReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetRoomDataReq.cs new file mode 100644 index 0000000..a62fde3 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetRoomDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetRoomDataReq)] +public class HandlerGetRoomDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetRoomDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetRpgTaleReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetRpgTaleReq.cs new file mode 100644 index 0000000..3131fa7 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetRpgTaleReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetRpgTaleReq)] +public class HandlerGetRpgTaleReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetRpgTaleRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetScratchTicketReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetScratchTicketReq.cs new file mode 100644 index 0000000..11251eb --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetScratchTicketReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetScratchTicketReq)] +public class HandlerGetScratchTicketReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetScratchTicketRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetSecurityPasswordReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetSecurityPasswordReq.cs new file mode 100644 index 0000000..7884d89 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetSecurityPasswordReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetSecurityPasswordReq)] +public class HandlerGetSecurityPasswordReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetSecurityPasswordRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetShopListReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetShopListReq.cs new file mode 100644 index 0000000..020a0fa --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetShopListReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetShopListReq)] +public class HandlerGetShopListReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetShopListRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetShoppingMallListReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetShoppingMallListReq.cs new file mode 100644 index 0000000..adf5f2d --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetShoppingMallListReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetShoppingMallListReq)] +public class HandlerGetShoppingMallListReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetShoppingMallListRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetSupportActivityReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetSupportActivityReq.cs new file mode 100644 index 0000000..81f8ae8 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetSupportActivityReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetSupportActivityReq)] +public class HandlerGetSupportActivityReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetSupportActivityRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetSurveyDataReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetSurveyDataReq.cs new file mode 100644 index 0000000..4b22097 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetSurveyDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetSurveyDataReq)] +public class HandlerGetSurveyDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetSurveyDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetTowerRaidActivityReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetTowerRaidActivityReq.cs new file mode 100644 index 0000000..d8537b6 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetTowerRaidActivityReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetTowerRaidActivityReq)] +public class HandlerGetTowerRaidActivityReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetTowerRaidActivityRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetTradingCardActivityReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetTradingCardActivityReq.cs new file mode 100644 index 0000000..cd2013c --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetTradingCardActivityReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetTradingCardActivityReq)] +public class HandlerGetTradingCardActivityReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetTradingCardActivityRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetTrialAvatarReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetTrialAvatarReq.cs new file mode 100644 index 0000000..df3e36c --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetTrialAvatarReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetTrialAvatarReq)] +public class HandlerGetTrialAvatarReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetTrialAvatarRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetVipRewardDataReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetVipRewardDataReq.cs new file mode 100644 index 0000000..d89f29b --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetVipRewardDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetVipRewardDataReq)] +public class HandlerGetVipRewardDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetVipRewardDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Dummy/HandlerGetVirtualAvatarGroupDetailReq.cs b/GameServer/Server/Packet/Recv/Dummy/HandlerGetVirtualAvatarGroupDetailReq.cs new file mode 100644 index 0000000..2e23790 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Dummy/HandlerGetVirtualAvatarGroupDetailReq.cs @@ -0,0 +1,14 @@ +using KianaBH.GameServer.Server.Packet.Send.Dummy; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Dummy; + +[Opcode(CmdIds.GetVirtualAvatarGroupDetailReq)] +public class HandlerGetVirtualAvatarGroupDetailReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = GetVirtualAvatarGroupDetailReq.Parser.ParseFrom(data); + await connection.SendPacket(new PacketGetVirtualAvatarGroupDetailRsp(req.GroupId)); + } +} diff --git a/GameServer/Server/Packet/Recv/Elf/HandlerGetElfDataReq.cs b/GameServer/Server/Packet/Recv/Elf/HandlerGetElfDataReq.cs new file mode 100644 index 0000000..7ccf87f --- /dev/null +++ b/GameServer/Server/Packet/Recv/Elf/HandlerGetElfDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Elf; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Elf; + +[Opcode(CmdIds.GetElfDataReq)] +public class HandlerGetElfDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetElfDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Endless/HandlerGetEndlessStatusReq.cs b/GameServer/Server/Packet/Recv/Endless/HandlerGetEndlessStatusReq.cs new file mode 100644 index 0000000..80c1d55 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Endless/HandlerGetEndlessStatusReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Endless; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Endless; + +[Opcode(CmdIds.GetEndlessStatusReq)] +public class HandlerGetEndlessStatusReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetEndlessStatusRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Event/HandlerGetGalInteractTriggerEventReq.cs b/GameServer/Server/Packet/Recv/Event/HandlerGetGalInteractTriggerEventReq.cs new file mode 100644 index 0000000..19ac7b5 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Event/HandlerGetGalInteractTriggerEventReq.cs @@ -0,0 +1,14 @@ +using KianaBH.GameServer.Server.Packet.Send.Event; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Event; + +[Opcode(CmdIds.GetGalInteractTriggerEventReq)] +public class HandlerGetGalInteractTriggerEventReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = GetGalInteractTriggerEventReq.Parser.ParseFrom(data); + await connection.SendPacket(new PacketGetGalInteractTriggerEventRsp(req.AvatarId)); + } +} diff --git a/GameServer/Server/Packet/Recv/ExBoss/HandlerExBossStageBeginReq.cs b/GameServer/Server/Packet/Recv/ExBoss/HandlerExBossStageBeginReq.cs new file mode 100644 index 0000000..c3a0e2d --- /dev/null +++ b/GameServer/Server/Packet/Recv/ExBoss/HandlerExBossStageBeginReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.ExBoss; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.ExBoss; + +[Opcode(CmdIds.ExBossStageBeginReq)] +public class HandlerExBossStageBeginReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketExBossStageBeginRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/ExBoss/HandlerExBossStageEndReq.cs b/GameServer/Server/Packet/Recv/ExBoss/HandlerExBossStageEndReq.cs new file mode 100644 index 0000000..c4efe95 --- /dev/null +++ b/GameServer/Server/Packet/Recv/ExBoss/HandlerExBossStageEndReq.cs @@ -0,0 +1,14 @@ +using KianaBH.GameServer.Server.Packet.Send.ExBoss; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.ExBoss; + +[Opcode(CmdIds.ExBossStageEndReq)] +public class HandlerExBossStageEndReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = ExBossStageEndReq.Parser.ParseFrom(data); + await connection.SendPacket(new PacketExBossStageEndRsp(req.BossId,req.EndStatus)); + } +} diff --git a/GameServer/Server/Packet/Recv/ExBoss/HandlerGetExBossInfoReq.cs b/GameServer/Server/Packet/Recv/ExBoss/HandlerGetExBossInfoReq.cs new file mode 100644 index 0000000..6706b90 --- /dev/null +++ b/GameServer/Server/Packet/Recv/ExBoss/HandlerGetExBossInfoReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.ExBoss; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.ExBoss; + +[Opcode(CmdIds.GetExBossInfoReq)] +public class HandlerGetExBossInfoReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetExBossInfoRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/ExBoss/HandlerGetExBossRankReq.cs b/GameServer/Server/Packet/Recv/ExBoss/HandlerGetExBossRankReq.cs new file mode 100644 index 0000000..046193a --- /dev/null +++ b/GameServer/Server/Packet/Recv/ExBoss/HandlerGetExBossRankReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.ExBoss; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.ExBoss; + +[Opcode(CmdIds.GetExBossRankReq)] +public class HandlerGetExBossRankReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetExBossRankRsp(connection.Player!)); + } +} diff --git a/GameServer/Server/Packet/Recv/ExBoss/HandlerGetExBossScheduleReq.cs b/GameServer/Server/Packet/Recv/ExBoss/HandlerGetExBossScheduleReq.cs new file mode 100644 index 0000000..4af729d --- /dev/null +++ b/GameServer/Server/Packet/Recv/ExBoss/HandlerGetExBossScheduleReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.ExBoss; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.ExBoss; + +[Opcode(CmdIds.GetExBossScheduleReq)] +public class HandlerGetExBossScheduleReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetExBossScheduleRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Exchange/HandlerGetCurrencyExchangeInfoReq.cs b/GameServer/Server/Packet/Recv/Exchange/HandlerGetCurrencyExchangeInfoReq.cs new file mode 100644 index 0000000..986dbca --- /dev/null +++ b/GameServer/Server/Packet/Recv/Exchange/HandlerGetCurrencyExchangeInfoReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Exchange; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Exchange; + +[Opcode(CmdIds.GetCurrencyExchangeInfoReq)] +public class HandlerGetCurrencyExchangeInfoReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetCurrencyExchangeInfoRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Friend/HandlerGetAskAddFriendListReq.cs b/GameServer/Server/Packet/Recv/Friend/HandlerGetAskAddFriendListReq.cs new file mode 100644 index 0000000..7704b7a --- /dev/null +++ b/GameServer/Server/Packet/Recv/Friend/HandlerGetAskAddFriendListReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Friend; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Friend; + +[Opcode(CmdIds.GetAskAddFriendListReq)] +public class HandlerGetAskAddFriendListReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetAskAddFriendListRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Friend/HandlerGetFriendListReq.cs b/GameServer/Server/Packet/Recv/Friend/HandlerGetFriendListReq.cs new file mode 100644 index 0000000..8e23fde --- /dev/null +++ b/GameServer/Server/Packet/Recv/Friend/HandlerGetFriendListReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Friend; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Friend; + +[Opcode(CmdIds.GetFriendListReq)] +public class HandlerGetFriendListReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetFriendListRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Friend/HandlerGetFriendRemarkListReq.cs b/GameServer/Server/Packet/Recv/Friend/HandlerGetFriendRemarkListReq.cs new file mode 100644 index 0000000..f2410f4 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Friend/HandlerGetFriendRemarkListReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Friend; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Friend; + +[Opcode(CmdIds.GetFriendRemarkListReq)] +public class HandlerGetFriendRemarkListReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetFriendRemarkListRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Gacha/HandlerGetGachaDisplayReq.cs b/GameServer/Server/Packet/Recv/Gacha/HandlerGetGachaDisplayReq.cs new file mode 100644 index 0000000..ec6157a --- /dev/null +++ b/GameServer/Server/Packet/Recv/Gacha/HandlerGetGachaDisplayReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Gacha; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Gacha; + +[Opcode(CmdIds.GetGachaDisplayReq)] +public class HandlerGetGachaDisplayReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetGachaDisplayRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/GodWar/HandlerGetGobackReq.cs b/GameServer/Server/Packet/Recv/GodWar/HandlerGetGobackReq.cs new file mode 100644 index 0000000..9679d8c --- /dev/null +++ b/GameServer/Server/Packet/Recv/GodWar/HandlerGetGobackReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.GodWar; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.GodWar; + +[Opcode(CmdIds.GetGobackReq)] +public class HandlerGetGobackReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetGobackRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/GodWar/HandlerGetGodWarLobbyReq.cs b/GameServer/Server/Packet/Recv/GodWar/HandlerGetGodWarLobbyReq.cs new file mode 100644 index 0000000..a3df3bf --- /dev/null +++ b/GameServer/Server/Packet/Recv/GodWar/HandlerGetGodWarLobbyReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.GodWar; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.GodWar; + +[Opcode(CmdIds.GetGodWarLobbyReq)] +public class HandlerGetGodWarLobbyReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetGodWarLobbyRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/GodWar/HandlerGetGodWarReq.cs b/GameServer/Server/Packet/Recv/GodWar/HandlerGetGodWarReq.cs new file mode 100644 index 0000000..e6237bf --- /dev/null +++ b/GameServer/Server/Packet/Recv/GodWar/HandlerGetGodWarReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.GodWar; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.GodWar; + +[Opcode(CmdIds.GetGodWarReq)] +public class HandlerGetGodWarReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetGodWarRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/GodWar/HandlerGetGrandKeyReq.cs b/GameServer/Server/Packet/Recv/GodWar/HandlerGetGrandKeyReq.cs new file mode 100644 index 0000000..d4ae4a7 --- /dev/null +++ b/GameServer/Server/Packet/Recv/GodWar/HandlerGetGrandKeyReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.GodWar; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.GodWar; + +[Opcode(CmdIds.GetGrandKeyReq)] +public class HandlerGetGrandKeyReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetGrandKeyRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/GodWar/HandlerRefreshGodWarTicketReq.cs b/GameServer/Server/Packet/Recv/GodWar/HandlerRefreshGodWarTicketReq.cs new file mode 100644 index 0000000..62906de --- /dev/null +++ b/GameServer/Server/Packet/Recv/GodWar/HandlerRefreshGodWarTicketReq.cs @@ -0,0 +1,14 @@ +using KianaBH.GameServer.Server.Packet.Send.GodWar; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.GodWar; + +[Opcode(CmdIds.RefreshGodWarTicketReq)] +public class HandlerRefreshGodWarTicketReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = RefreshGodWarTicketReq.Parser.ParseFrom(data); + await connection.SendPacket(new PacketRefreshGodWarTicketRsp(req.GodWarId)); + } +} diff --git a/GameServer/Server/Packet/Recv/Goods/HandlerAddGoodfeelReq.cs b/GameServer/Server/Packet/Recv/Goods/HandlerAddGoodfeelReq.cs new file mode 100644 index 0000000..d0b0fdc --- /dev/null +++ b/GameServer/Server/Packet/Recv/Goods/HandlerAddGoodfeelReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Goods; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Goods; + +[Opcode(CmdIds.AddGoodfeelReq)] +public class HandlerAddGoodfeelReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketAddGoodfeelRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Guide/HandlerFinishGuideReportReq.cs b/GameServer/Server/Packet/Recv/Guide/HandlerFinishGuideReportReq.cs new file mode 100644 index 0000000..e9a1223 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Guide/HandlerFinishGuideReportReq.cs @@ -0,0 +1,20 @@ +using KianaBH.GameServer.Server.Packet.Send.Guide; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Guide; + +[Opcode(CmdIds.FinishGuideReportReq)] +public class HandlerFinishGuideReportReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = FinishGuideReportReq.Parser.ParseFrom(data); + foreach (var groupId in req.GuideIdList) + { + if (!connection.Player!.GuideData!.GuideFinishList.Contains(groupId)) + connection.Player.GuideData.GuideFinishList.Add(groupId); + } + + await connection.SendPacket(new PacketFinishGuideReportRsp(connection.Player!)); + } +} diff --git a/GameServer/Server/Packet/Recv/Guide/HandlerGetFinishGuideDataReq.cs b/GameServer/Server/Packet/Recv/Guide/HandlerGetFinishGuideDataReq.cs new file mode 100644 index 0000000..ee43d2f --- /dev/null +++ b/GameServer/Server/Packet/Recv/Guide/HandlerGetFinishGuideDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Guide; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Guide; + +[Opcode(CmdIds.GetFinishGuideDataReq)] +public class HandlerGetFinishGuideDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetFinishGuideDataRsp(connection.Player!)); + } +} diff --git a/GameServer/Server/Packet/Recv/Item/HandlerGetEquipmentDataReq.cs b/GameServer/Server/Packet/Recv/Item/HandlerGetEquipmentDataReq.cs new file mode 100644 index 0000000..64231dd --- /dev/null +++ b/GameServer/Server/Packet/Recv/Item/HandlerGetEquipmentDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Item; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Item; + +[Opcode(CmdIds.GetEquipmentDataReq)] +public class HandlerGetEquipmentDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetEquipmentDataRsp(connection.Player!)); + } +} diff --git a/GameServer/Server/Packet/Recv/Item/HandlerGetEquipmentForgeDataReq.cs b/GameServer/Server/Packet/Recv/Item/HandlerGetEquipmentForgeDataReq.cs new file mode 100644 index 0000000..289b9b0 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Item/HandlerGetEquipmentForgeDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Item; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Item; + +[Opcode(CmdIds.GetEquipmentForgeDataReq)] +public class HandlerGetEquipmentForgeDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetEquipmentForgeDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Item/HandlerGetHasGotFurnitureIdListReq.cs b/GameServer/Server/Packet/Recv/Item/HandlerGetHasGotFurnitureIdListReq.cs new file mode 100644 index 0000000..50c9e06 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Item/HandlerGetHasGotFurnitureIdListReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Item; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Item; + +[Opcode(CmdIds.GetHasGotFurnitureIdListReq)] +public class HandlerGetHasGotFurnitureIdListReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetHasGotFurnitureIdListRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Item/HandlerGetHasGotItemIdListReq.cs b/GameServer/Server/Packet/Recv/Item/HandlerGetHasGotItemIdListReq.cs new file mode 100644 index 0000000..15f4949 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Item/HandlerGetHasGotItemIdListReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Item; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Item; + +[Opcode(CmdIds.GetHasGotItemIdListReq)] +public class HandlerGetHasGotItemIdListReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetHasGotItemIdListRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/MasterPupil/HandlerGetMasterPupilApplyReq.cs b/GameServer/Server/Packet/Recv/MasterPupil/HandlerGetMasterPupilApplyReq.cs new file mode 100644 index 0000000..207de72 --- /dev/null +++ b/GameServer/Server/Packet/Recv/MasterPupil/HandlerGetMasterPupilApplyReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.MasterPupil; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.MasterPupil; + +[Opcode(CmdIds.GetMasterPupilApplyReq)] +public class HandlerGetMasterPupilApplyReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetMasterPupilApplyRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/MasterPupil/HandlerGetMasterPupilCardReq.cs b/GameServer/Server/Packet/Recv/MasterPupil/HandlerGetMasterPupilCardReq.cs new file mode 100644 index 0000000..7eb5e1e --- /dev/null +++ b/GameServer/Server/Packet/Recv/MasterPupil/HandlerGetMasterPupilCardReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.MasterPupil; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.MasterPupil; + +[Opcode(CmdIds.GetMasterPupilCardReq)] +public class HandlerGetMasterPupilCardReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetMasterPupilCardRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/MasterPupil/HandlerGetMasterPupilDataReq.cs b/GameServer/Server/Packet/Recv/MasterPupil/HandlerGetMasterPupilDataReq.cs new file mode 100644 index 0000000..6ff7ba8 --- /dev/null +++ b/GameServer/Server/Packet/Recv/MasterPupil/HandlerGetMasterPupilDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.MasterPupil; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.MasterPupil; + +[Opcode(CmdIds.GetMasterPupilDataReq)] +public class HandlerGetMasterPupilDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetMasterPupilDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/MasterPupil/HandlerGetMasterPupilMainDataReq.cs b/GameServer/Server/Packet/Recv/MasterPupil/HandlerGetMasterPupilMainDataReq.cs new file mode 100644 index 0000000..30e6fc5 --- /dev/null +++ b/GameServer/Server/Packet/Recv/MasterPupil/HandlerGetMasterPupilMainDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.MasterPupil; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.MasterPupil; + +[Opcode(CmdIds.GetMasterPupilMainDataReq)] +public class HandlerGetMasterPupilMainDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetMasterPupilMainDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Mission/HandlerGetMissionDataReq.cs b/GameServer/Server/Packet/Recv/Mission/HandlerGetMissionDataReq.cs new file mode 100644 index 0000000..b57df2e --- /dev/null +++ b/GameServer/Server/Packet/Recv/Mission/HandlerGetMissionDataReq.cs @@ -0,0 +1,64 @@ +using KianaBH.Data; +using KianaBH.GameServer.Server.Packet.Send.Mission; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Mission; + +[Opcode(CmdIds.GetMissionDataReq)] +public class HandlerGetMissionDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var player = connection.Player!; + + var missionTable = GameData.MissionData; + var missionList = missionTable.Values.ToList(); + const int chunkSize = 3000; + + var totalChunks = (int)Math.Ceiling((double)missionList.Count / chunkSize); + var requestCount = player.GetMissionDataRequestCount; + + while (requestCount < totalChunks - 1) + { + var selectedMissions = missionList + .Skip(requestCount * chunkSize) + .Take(chunkSize); + + var missions = selectedMissions.Select(m => new Proto.Mission + { + MissionId = m.Id, + Status = MissionStatus.MissionClose, + Priority = m.Priority, + Progress = m.TotalProgress, + BeginTime = 0, + EndTime = 2073239999, + CycleId = 1, + }).ToList(); + + await connection.SendPacket(new PacketGetMissionDataRsp(missions,false)); + + requestCount++; + player.GetMissionDataRequestCount = requestCount; + } + + // Last chunk + var lastMissions = missionList + .Skip(requestCount * chunkSize) + .Take(chunkSize); + + var lastMissionList = lastMissions.Select(m => new Proto.Mission + { + MissionId = m.Id, + Status = MissionStatus.MissionClose, + Priority = m.Priority, + Progress = m.TotalProgress, + BeginTime = 0, + EndTime = 2073239999, + CycleId = 1, + }).ToList(); + + player.GetMissionDataRequestCount = requestCount + 1; + + await connection.SendPacket(new PacketGetMissionDataRsp(lastMissionList,true)); + } +} diff --git a/GameServer/Server/Packet/Recv/Mission/HandlerGetMissionGroupMainInfoReq.cs b/GameServer/Server/Packet/Recv/Mission/HandlerGetMissionGroupMainInfoReq.cs new file mode 100644 index 0000000..701eb29 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Mission/HandlerGetMissionGroupMainInfoReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Mission; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Mission; + +[Opcode(CmdIds.GetMissionGroupMainInfoReq)] +public class HandlerGetMissionGroupMainInfoReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetMissionGroupMainInfoRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Mission/HandlerGetMissionThemeDataReq.cs b/GameServer/Server/Packet/Recv/Mission/HandlerGetMissionThemeDataReq.cs new file mode 100644 index 0000000..a4cdbb8 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Mission/HandlerGetMissionThemeDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Mission; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Mission; + +[Opcode(CmdIds.GetMissionThemeDataReq)] +public class HandlerGetMissionThemeDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetMissionThemeDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Mission/HandlerGetRecommendMissionPanelListReq.cs b/GameServer/Server/Packet/Recv/Mission/HandlerGetRecommendMissionPanelListReq.cs new file mode 100644 index 0000000..7ca95f7 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Mission/HandlerGetRecommendMissionPanelListReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Mission; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Mission; + +[Opcode(CmdIds.GetRecommendMissionPanelListReq)] +public class HandlerGetRecommendMissionPanelListReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetRecommendMissionPanelListRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/OpenWorld/HandlerGetNewOpenworldReq.cs b/GameServer/Server/Packet/Recv/OpenWorld/HandlerGetNewOpenworldReq.cs new file mode 100644 index 0000000..41de112 --- /dev/null +++ b/GameServer/Server/Packet/Recv/OpenWorld/HandlerGetNewOpenworldReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.OpenWorld; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.OpenWorld; + +[Opcode(CmdIds.GetNewOpenworldReq)] +public class HandlerGetNewOpenworldReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetNewOpenworldRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/OpenWorld/HandlerGetOpenworldEndlessDataReq.cs b/GameServer/Server/Packet/Recv/OpenWorld/HandlerGetOpenworldEndlessDataReq.cs new file mode 100644 index 0000000..3138c6f --- /dev/null +++ b/GameServer/Server/Packet/Recv/OpenWorld/HandlerGetOpenworldEndlessDataReq.cs @@ -0,0 +1,14 @@ +using KianaBH.GameServer.Server.Packet.Send.OpenWorld; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.OpenWorld; + +[Opcode(CmdIds.GetOpenworldEndlessDataReq)] +public class HandlerGetOpenworldEndlessDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = GetOpenworldEndlessDataReq.Parser.ParseFrom(data); + await connection.SendPacket(new PacketGetOpenworldEndlessDataRsp(req.Level,req.Type)); + } +} diff --git a/GameServer/Server/Packet/Recv/OpenWorld/HandlerGetOpenworldMechaDefenseReq.cs b/GameServer/Server/Packet/Recv/OpenWorld/HandlerGetOpenworldMechaDefenseReq.cs new file mode 100644 index 0000000..1edfb5f --- /dev/null +++ b/GameServer/Server/Packet/Recv/OpenWorld/HandlerGetOpenworldMechaDefenseReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.OpenWorld; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.OpenWorld; + +[Opcode(CmdIds.GetOpenworldMechaDefenseReq)] +public class HandlerGetOpenworldMechaDefenseReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetOpenworldMechaDefenseRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/OpenWorld/HandlerGetOpenworldQuestActivityReq.cs b/GameServer/Server/Packet/Recv/OpenWorld/HandlerGetOpenworldQuestActivityReq.cs new file mode 100644 index 0000000..79a14b8 --- /dev/null +++ b/GameServer/Server/Packet/Recv/OpenWorld/HandlerGetOpenworldQuestActivityReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.OpenWorld; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.OpenWorld; + +[Opcode(CmdIds.GetOpenworldQuestActivityReq)] +public class HandlerGetOpenworldQuestActivityReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetOpenworldQuestActivityRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetAchievementDataReq.cs b/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetAchievementDataReq.cs new file mode 100644 index 0000000..8375e98 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetAchievementDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Pjms; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Pjms; + +[Opcode(CmdIds.PjmsGetAchievementDataReq)] +public class HandlerPjmsGetAchievementDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketPjmsGetAchievementDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetActivityPanelReq.cs b/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetActivityPanelReq.cs new file mode 100644 index 0000000..20ddc69 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetActivityPanelReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Pjms; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Pjms; + +[Opcode(CmdIds.PjmsGetActivityPanelReq)] +public class HandlerPjmsGetActivityPanelReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketPjmsGetActivityPanelRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetChapterDataReq.cs b/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetChapterDataReq.cs new file mode 100644 index 0000000..10b3cd5 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetChapterDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Pjms; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Pjms; + +[Opcode(CmdIds.PjmsGetChapterDataReq)] +public class HandlerPjmsGetChapterDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketPjmsGetChapterDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetConditionDataReq.cs b/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetConditionDataReq.cs new file mode 100644 index 0000000..77a72a5 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetConditionDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Pjms; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Pjms; + +[Opcode(CmdIds.PjmsGetConditionDataReq)] +public class HandlerPjmsGetConditionDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketPjmsGetConditionDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetCurWorldReq.cs b/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetCurWorldReq.cs new file mode 100644 index 0000000..7685af8 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetCurWorldReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Pjms; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Pjms; + +[Opcode(CmdIds.PjmsGetCurWorldReq)] +public class HandlerPjmsGetCurWorldReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketPjmsGetCurWorldRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetMainDataReq.cs b/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetMainDataReq.cs new file mode 100644 index 0000000..2323e98 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetMainDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Pjms; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Pjms; + +[Opcode(CmdIds.PjmsGetMainDataReq)] +public class HandlerPjmsGetMainDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketPjmsGetMainDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetResidentStageDataReq.cs b/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetResidentStageDataReq.cs new file mode 100644 index 0000000..c4a38cd --- /dev/null +++ b/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetResidentStageDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Pjms; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Pjms; + +[Opcode(CmdIds.PjmsGetResidentStageDataReq)] +public class HandlerPjmsGetResidentStageDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketPjmsGetResidentStageDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetStoryDataReq.cs b/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetStoryDataReq.cs new file mode 100644 index 0000000..33949ea --- /dev/null +++ b/GameServer/Server/Packet/Recv/Pjms/HandlerPjmsGetStoryDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Pjms; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Pjms; + +[Opcode(CmdIds.PjmsGetStoryDataReq)] +public class HandlerPjmsGetStoryDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketPjmsGetStoryDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Player/HandlerGetAssistantFrozenListReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerGetAssistantFrozenListReq.cs new file mode 100644 index 0000000..ccfe985 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Player/HandlerGetAssistantFrozenListReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Player; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Player; + +[Opcode(CmdIds.GetAssistantFrozenListReq)] +public class HandlerGetAssistantFrozenListReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetAssistantFrozenListRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Player/HandlerGetBlackListReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerGetBlackListReq.cs new file mode 100644 index 0000000..91b879b --- /dev/null +++ b/GameServer/Server/Packet/Recv/Player/HandlerGetBlackListReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Player; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Player; + +[Opcode(CmdIds.GetBlackListReq)] +public class HandlerGetBlackListReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetBlackListRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Player/HandlerGetConfigReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerGetConfigReq.cs new file mode 100644 index 0000000..a2e0e61 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Player/HandlerGetConfigReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Player; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Player; + +[Opcode(CmdIds.GetConfigReq)] +public class HandlerGetConfigReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetConfigRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Player/HandlerGetCustomHeadDataReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerGetCustomHeadDataReq.cs new file mode 100644 index 0000000..bf4b63a --- /dev/null +++ b/GameServer/Server/Packet/Recv/Player/HandlerGetCustomHeadDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Player; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Player; + +[Opcode(CmdIds.GetCustomHeadDataReq)] +public class HandlerGetCustomHeadDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetCustomHeadDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Player/HandlerGetEmojiDataReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerGetEmojiDataReq.cs new file mode 100644 index 0000000..b94a855 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Player/HandlerGetEmojiDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Player; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Player; + +[Opcode(CmdIds.GetEmojiDataReq)] +public class HandlerGetEmojiDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetEmojiDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Player/HandlerGetFrameDataReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerGetFrameDataReq.cs new file mode 100644 index 0000000..a3bca07 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Player/HandlerGetFrameDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Player; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Player; + +[Opcode(CmdIds.GetFrameDataReq)] +public class HandlerGetFrameDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetFrameDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Player/HandlerGetMainDataReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerGetMainDataReq.cs new file mode 100644 index 0000000..057a960 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Player/HandlerGetMainDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Player; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Player; + +[Opcode(CmdIds.GetMainDataReq)] +public class HandlerGetMainDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetMainDataRsp(connection.Player!)); + } +} diff --git a/GameServer/Server/Packet/Recv/Player/HandlerGetMedalDataReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerGetMedalDataReq.cs new file mode 100644 index 0000000..d5d295d --- /dev/null +++ b/GameServer/Server/Packet/Recv/Player/HandlerGetMedalDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Player; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Player; + +[Opcode(CmdIds.GetMedalDataReq)] +public class HandlerGetMedalDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetMedalDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Player/HandlerGetOfflineResourceDataReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerGetOfflineResourceDataReq.cs new file mode 100644 index 0000000..9b929ba --- /dev/null +++ b/GameServer/Server/Packet/Recv/Player/HandlerGetOfflineResourceDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Player; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Player; + +[Opcode(CmdIds.GetOfflineResourceDataReq)] +public class HandlerGetOfflineResourceDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetOfflineResourceDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Player/HandlerGetPediaReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerGetPediaReq.cs new file mode 100644 index 0000000..ddfc517 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Player/HandlerGetPediaReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Player; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Player; + +[Opcode(CmdIds.GetPediaReq)] +public class HandlerGetPediaReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetPediaRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Player/HandlerGetPhonePendantDataReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerGetPhonePendantDataReq.cs new file mode 100644 index 0000000..b86d660 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Player/HandlerGetPhonePendantDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Player; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Player; + +[Opcode(CmdIds.GetPhonePendantDataReq)] +public class HandlerGetPhonePendantDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetPhonePendantDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Player/HandlerGetPhotoDataReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerGetPhotoDataReq.cs new file mode 100644 index 0000000..89d93b8 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Player/HandlerGetPhotoDataReq.cs @@ -0,0 +1,14 @@ +using KianaBH.GameServer.Server.Packet.Send.Player; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Player; + +[Opcode(CmdIds.GetPhotoDataReq)] +public class HandlerGetPhotoDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = GetPhotoDataReq.Parser.ParseFrom(data); + await connection.SendPacket(new PacketGetPhotoDataRsp(req.Type)); + } +} diff --git a/GameServer/Server/Packet/Recv/Player/HandlerGetPlayerCardReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerGetPlayerCardReq.cs new file mode 100644 index 0000000..6f2d3bf --- /dev/null +++ b/GameServer/Server/Packet/Recv/Player/HandlerGetPlayerCardReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Player; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Player; + +[Opcode(CmdIds.GetPlayerCardReq)] +public class HandlerGetPlayerCardReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetPlayerCardRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Player/HandlerGetPlayerTokenReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerGetPlayerTokenReq.cs new file mode 100644 index 0000000..9d85eb7 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Player/HandlerGetPlayerTokenReq.cs @@ -0,0 +1,47 @@ +using KianaBH.Data; +using KianaBH.Database; +using KianaBH.Database.Account; +using KianaBH.Database.Player; +using KianaBH.GameServer.Game.Player; +using KianaBH.GameServer.Server.Packet.Send.Player; +using KianaBH.KcpSharp; +using KianaBH.Proto; +using KianaBH.Util; + +namespace KianaBH.GameServer.Server.Packet.Recv.Player; + +[Opcode(CmdIds.GetPlayerTokenReq)] +public class HandlerGetPlayerTokenReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = GetPlayerTokenReq.Parser.ParseFrom(data); + var account = AccountData.GetAccountByUid(int.Parse(req.AccountUid)); + if (account == null) + { + await connection.SendPacket(new PacketGetPlayerTokenRsp(GetPlayerTokenRsp.Types.Retcode.AccountTypeError)); + return; + } + if (!ResourceManager.IsLoaded) + // resource manager not loaded, return + return; + var prev = Listener.GetActiveConnection(account.Uid); + if (prev != null) + { + await connection.SendPacket(new PacketGetPlayerTokenRsp(GetPlayerTokenRsp.Types.Retcode.ForbidVisitor)); + prev.Stop(); + } + + connection.State = SessionStateEnum.WAITING_FOR_LOGIN; + var pd = DatabaseHelper.GetInstance(int.Parse(req.AccountUid)); + connection.Player = pd == null ? new PlayerInstance(int.Parse(req.AccountUid)) : new PlayerInstance(pd); + + connection.DebugFile = Path.Combine(ConfigManager.Config.Path.LogPath, "Debug/", $"{req.AccountUid}/", + $"Debug-{DateTime.Now:yyyy-MM-dd HH-mm-ss}.log"); + + await connection.Player.OnGetToken(); + connection.Player.Connection = connection; + + await connection.SendPacket(new PacketGetPlayerTokenRsp(connection.Player!,req.Token,req.AccountType)); + } +} \ No newline at end of file diff --git a/GameServer/Server/Packet/Recv/Player/HandlerGetRegionUidRangeReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerGetRegionUidRangeReq.cs new file mode 100644 index 0000000..0a15cc3 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Player/HandlerGetRegionUidRangeReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Player; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Player; + +[Opcode(CmdIds.GetRegionUidRangeReq)] +public class HandlerGetRegionUidRangeReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetRegionUidRangeRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Player/HandlerGetThemeDataReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerGetThemeDataReq.cs new file mode 100644 index 0000000..188c8d1 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Player/HandlerGetThemeDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Player; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Player; + +[Opcode(CmdIds.GetThemeDataReq)] +public class HandlerGetThemeDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetThemeDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Player/HandlerPlayerLoginReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerPlayerLoginReq.cs new file mode 100644 index 0000000..584015b --- /dev/null +++ b/GameServer/Server/Packet/Recv/Player/HandlerPlayerLoginReq.cs @@ -0,0 +1,16 @@ +using KianaBH.GameServer.Server.Packet.Send.Player; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Player; + +[Opcode(CmdIds.PlayerLoginReq)] +public class HandlerPlayerLoginReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + connection.State = SessionStateEnum.ACTIVE; + await connection.Player!.OnLogin(); + await connection.SendPacket(new PacketPlayerLoginRsp(connection.Player!)); + } +} diff --git a/GameServer/Server/Packet/Recv/Player/HandlerSyncTimeReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerSyncTimeReq.cs new file mode 100644 index 0000000..d2c0c11 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Player/HandlerSyncTimeReq.cs @@ -0,0 +1,14 @@ +using KianaBH.GameServer.Server.Packet.Send.Player; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Player; + +[Opcode(CmdIds.SyncTimeReq)] +public class HandlerSyncTimeReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = SyncTimeReq.Parser.ParseFrom(data); + await connection.SendPacket(new PacketSyncTimeRsp(req.Seq)); + } +} diff --git a/GameServer/Server/Packet/Recv/Player/HandlerTakeGalInteractTriggerEventReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerTakeGalInteractTriggerEventReq.cs new file mode 100644 index 0000000..1bc6e9e --- /dev/null +++ b/GameServer/Server/Packet/Recv/Player/HandlerTakeGalInteractTriggerEventReq.cs @@ -0,0 +1,14 @@ +using KianaBH.GameServer.Server.Packet.Send.Player; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Player; + +[Opcode(CmdIds.TakeGalInteractTriggerEventReq)] +public class HandlerTakeGalInteractTriggerEventReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = TakeGalInteractTriggerEventReq.Parser.ParseFrom(data); + await connection.SendPacket(new PacketTakeGalInteractTriggerEventRsp(req.AvatarId,req.EventId)); + } +} diff --git a/GameServer/Server/Packet/Recv/Product/HandlerGetCardProductInfoReq.cs b/GameServer/Server/Packet/Recv/Product/HandlerGetCardProductInfoReq.cs new file mode 100644 index 0000000..7597446 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Product/HandlerGetCardProductInfoReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Product; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Product; + +[Opcode(CmdIds.GetCardProductInfoReq)] +public class HandlerGetCardProductInfoReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetCardProductInfoRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Stage/HandlerGetStageActDifficultyReq.cs b/GameServer/Server/Packet/Recv/Stage/HandlerGetStageActDifficultyReq.cs new file mode 100644 index 0000000..49943e0 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Stage/HandlerGetStageActDifficultyReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Stage; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Stage; + +[Opcode(CmdIds.GetStageActDifficultyReq)] +public class HandlerGetStageActDifficultyReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetStageActDifficultyRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Stage/HandlerGetStageChapterReq.cs b/GameServer/Server/Packet/Recv/Stage/HandlerGetStageChapterReq.cs new file mode 100644 index 0000000..0d3eadc --- /dev/null +++ b/GameServer/Server/Packet/Recv/Stage/HandlerGetStageChapterReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Stage; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Stage; + +[Opcode(CmdIds.GetStageChapterReq)] +public class HandlerGetStageChapterReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetStageChapterRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Stage/HandlerGetStageDataReq.cs b/GameServer/Server/Packet/Recv/Stage/HandlerGetStageDataReq.cs new file mode 100644 index 0000000..1030ebf --- /dev/null +++ b/GameServer/Server/Packet/Recv/Stage/HandlerGetStageDataReq.cs @@ -0,0 +1,14 @@ +using KianaBH.GameServer.Server.Packet.Send.Stage; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Stage; + +[Opcode(CmdIds.GetStageDataReq)] +public class HandlerGetStageDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = GetStageDataReq.Parser.ParseFrom(data); + await connection.SendPacket(new PacketGetStageDataRsp(req.StageIdList)); + } +} diff --git a/GameServer/Server/Packet/Recv/Stage/HandlerGetStageDropDisplayReq.cs b/GameServer/Server/Packet/Recv/Stage/HandlerGetStageDropDisplayReq.cs new file mode 100644 index 0000000..0e27ca0 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Stage/HandlerGetStageDropDisplayReq.cs @@ -0,0 +1,14 @@ +using KianaBH.GameServer.Server.Packet.Send.Stage; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Stage; + +[Opcode(CmdIds.GetStageDropDisplayReq)] +public class HandlerGetStageDropDisplayReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = GetStageDropDisplayReq.Parser.ParseFrom(data); + await connection.SendPacket(new PacketGetStageDropDisplayRsp(req.StageIdList)); + } +} diff --git a/GameServer/Server/Packet/Recv/Stage/HandlerGetStageRecommendAvatarReq.cs b/GameServer/Server/Packet/Recv/Stage/HandlerGetStageRecommendAvatarReq.cs new file mode 100644 index 0000000..76a1562 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Stage/HandlerGetStageRecommendAvatarReq.cs @@ -0,0 +1,14 @@ +using KianaBH.GameServer.Server.Packet.Send.Stage; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Stage; + +[Opcode(CmdIds.GetStageRecommendAvatarReq)] +public class HandlerGetStageRecommendAvatarReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = GetStageRecommendAvatarReq.Parser.ParseFrom(data); + await connection.SendPacket(new PacketGetStageRecommendAvatarRsp(req.IdList,req.Type)); + } +} diff --git a/GameServer/Server/Packet/Recv/Stage/HandlerStageBeginReq.cs b/GameServer/Server/Packet/Recv/Stage/HandlerStageBeginReq.cs new file mode 100644 index 0000000..c172164 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Stage/HandlerStageBeginReq.cs @@ -0,0 +1,14 @@ +using KianaBH.GameServer.Server.Packet.Send.Stage; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Stage; + +[Opcode(CmdIds.StageBeginReq)] +public class HandlerStageBeginReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = StageBeginReq.Parser.ParseFrom(data); + await connection.SendPacket(new PacketStageBeginRsp(req.StageId)); + } +} diff --git a/GameServer/Server/Packet/Recv/Stage/HandlerStageEndReq.cs b/GameServer/Server/Packet/Recv/Stage/HandlerStageEndReq.cs new file mode 100644 index 0000000..5befb48 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Stage/HandlerStageEndReq.cs @@ -0,0 +1,18 @@ +using KianaBH.GameServer.Server.Packet.Send.Stage; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Stage; + +[Opcode(CmdIds.StageEndReq)] +public class HandlerStageEndReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var req = StageEndReq.Parser.ParseFrom(data); + MemoryStream ms = new(req.Body.ToByteArray()); + using BinaryReader br = new(ms); + byte[] body = br.ReadBytes((int)ms.Length); + var reqBody = StageEndReqBody.Parser.ParseFrom(body); + await connection.SendPacket(new PacketStageEndRsp(reqBody.StageId,reqBody.EndStatus)); + } +} diff --git a/GameServer/Server/Packet/Recv/Stage/HandlerStageInnerDataReportReq.cs b/GameServer/Server/Packet/Recv/Stage/HandlerStageInnerDataReportReq.cs new file mode 100644 index 0000000..8eef27d --- /dev/null +++ b/GameServer/Server/Packet/Recv/Stage/HandlerStageInnerDataReportReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Stage; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Stage; + +[Opcode(CmdIds.StageInnerDataReportReq)] +public class HandlerStageInnerDataReportReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketStageInnerDataReportRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Story/HandlerGetExtraStoryDataReq.cs b/GameServer/Server/Packet/Recv/Story/HandlerGetExtraStoryDataReq.cs new file mode 100644 index 0000000..c600f2d --- /dev/null +++ b/GameServer/Server/Packet/Recv/Story/HandlerGetExtraStoryDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Story; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Story; + +[Opcode(CmdIds.GetExtraStoryDataReq)] +public class HandlerGetExtraStoryDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetExtraStoryDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerGetWebActivityInfoReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerGetWebActivityInfoReq.cs new file mode 100644 index 0000000..ae1f275 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerGetWebActivityInfoReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.GetWebActivityInfoReq)] +public class HandlerGetWebActivityInfoReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetWebActivityInfoRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerGetWeekDayActivityDataReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerGetWeekDayActivityDataReq.cs new file mode 100644 index 0000000..e47461a --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerGetWeekDayActivityDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.GetWeekDayActivityDataReq)] +public class HandlerGetWeekDayActivityDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetWeekDayActivityDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerGetWeeklyReportReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerGetWeeklyReportReq.cs new file mode 100644 index 0000000..f180233 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerGetWeeklyReportReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.GetWeeklyReportReq)] +public class HandlerGetWeeklyReportReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetWeeklyReportRsp(connection.Player!)); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerGetWeeklyRoutineActivityReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerGetWeeklyRoutineActivityReq.cs new file mode 100644 index 0000000..72fe5d2 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerGetWeeklyRoutineActivityReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.GetWeeklyRoutineActivityReq)] +public class HandlerGetWeeklyRoutineActivityReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetWeeklyRoutineActivityRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerGetWikiDataReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerGetWikiDataReq.cs new file mode 100644 index 0000000..4aaebaa --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerGetWikiDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.GetWikiDataReq)] +public class HandlerGetWikiDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetWikiDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerGetWorldMapDataReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerGetWorldMapDataReq.cs new file mode 100644 index 0000000..8301f89 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerGetWorldMapDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.GetWorldMapDataReq)] +public class HandlerGetWorldMapDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetWorldMapDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerGetWorldMapRecommendReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerGetWorldMapRecommendReq.cs new file mode 100644 index 0000000..fecba60 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerGetWorldMapRecommendReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.GetWorldMapRecommendReq)] +public class HandlerGetWorldMapRecommendReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetWorldMapRecommendRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerGrandKeyActivateSkillReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerGrandKeyActivateSkillReq.cs new file mode 100644 index 0000000..11f35d1 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerGrandKeyActivateSkillReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.GrandKeyActivateSkillReq)] +public class HandlerGrandKeyActivateSkillReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGrandKeyActivateSkillRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerLoginWishGetMainDataReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerLoginWishGetMainDataReq.cs new file mode 100644 index 0000000..64bbfcf --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerLoginWishGetMainDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.LoginWishGetMainDataReq)] +public class HandlerLoginWishGetMainDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketLoginWishGetMainDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerOpenworldGetMechaTeamReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerOpenworldGetMechaTeamReq.cs new file mode 100644 index 0000000..d440670 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerOpenworldGetMechaTeamReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.OpenworldGetMechaTeamReq)] +public class HandlerOpenworldGetMechaTeamReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketOpenworldGetMechaTeamRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerOpenworldHuntActivityGetDataReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerOpenworldHuntActivityGetDataReq.cs new file mode 100644 index 0000000..76a40bb --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerOpenworldHuntActivityGetDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.OpenworldHuntActivityGetDataReq)] +public class HandlerOpenworldHuntActivityGetDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketOpenworldHuntActivityGetDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerRaidReplaceGetDataReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerRaidReplaceGetDataReq.cs new file mode 100644 index 0000000..399789d --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerRaidReplaceGetDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.RaidReplaceGetDataReq)] +public class HandlerRaidReplaceGetDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketRaidReplaceGetDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerRefineStigmataRuneReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerRefineStigmataRuneReq.cs new file mode 100644 index 0000000..63ee138 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerRefineStigmataRuneReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.RefineStigmataRuneReq)] +public class HandlerRefineStigmataRuneReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketRefineStigmataRuneRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerRefreshAvatarSkillReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerRefreshAvatarSkillReq.cs new file mode 100644 index 0000000..82e6bbc --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerRefreshAvatarSkillReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.RefreshAvatarSkillReq)] +public class HandlerRefreshAvatarSkillReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketRefreshAvatarSkillRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerReunionCookGetActivityReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerReunionCookGetActivityReq.cs new file mode 100644 index 0000000..167508d --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerReunionCookGetActivityReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.ReunionCookGetActivityReq)] +public class HandlerReunionCookGetActivityReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketReunionCookGetActivityRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerSanctuaryGetMainInfoReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerSanctuaryGetMainInfoReq.cs new file mode 100644 index 0000000..552cfad --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerSanctuaryGetMainInfoReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.SanctuaryGetMainInfoReq)] +public class HandlerSanctuaryGetMainInfoReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketSanctuaryGetMainInfoRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerSelectGodWarChallengeAvatarReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerSelectGodWarChallengeAvatarReq.cs new file mode 100644 index 0000000..48e9e52 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerSelectGodWarChallengeAvatarReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.SelectGodWarChallengeAvatarReq)] +public class HandlerSelectGodWarChallengeAvatarReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketSelectGodWarChallengeAvatarRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerSelectNewStigmataRuneReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerSelectNewStigmataRuneReq.cs new file mode 100644 index 0000000..281ecc5 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerSelectNewStigmataRuneReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.SelectNewStigmataRuneReq)] +public class HandlerSelectNewStigmataRuneReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketSelectNewStigmataRuneRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerSetDressReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerSetDressReq.cs new file mode 100644 index 0000000..ca163be --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerSetDressReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.SetDressReq)] +public class HandlerSetDressReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketSetDressRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerSetWarshipReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerSetWarshipReq.cs new file mode 100644 index 0000000..afb3a75 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerSetWarshipReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.SetWarshipReq)] +public class HandlerSetWarshipReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketSetWarshipRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerSimplifiedGodWarGetActivityReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerSimplifiedGodWarGetActivityReq.cs new file mode 100644 index 0000000..42e94de --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerSimplifiedGodWarGetActivityReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.SimplifiedGodWarGetActivityReq)] +public class HandlerSimplifiedGodWarGetActivityReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketSimplifiedGodWarGetActivityRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerSusannaTrialGetActivityReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerSusannaTrialGetActivityReq.cs new file mode 100644 index 0000000..595e2d1 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerSusannaTrialGetActivityReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.SusannaTrialGetActivityReq)] +public class HandlerSusannaTrialGetActivityReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketSusannaTrialGetActivityRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerThemeWantedRefreshTicketReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerThemeWantedRefreshTicketReq.cs new file mode 100644 index 0000000..4fd2ce3 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerThemeWantedRefreshTicketReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.ThemeWantedRefreshTicketReq)] +public class HandlerThemeWantedRefreshTicketReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketThemeWantedRefreshTicketRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerTriggerGodWarEventReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerTriggerGodWarEventReq.cs new file mode 100644 index 0000000..7eef551 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerTriggerGodWarEventReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.TriggerGodWarEventReq)] +public class HandlerTriggerGodWarEventReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketTriggerGodWarEventRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerUltraEndlessEnterSiteReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerUltraEndlessEnterSiteReq.cs new file mode 100644 index 0000000..6fc74cd --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerUltraEndlessEnterSiteReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.UltraEndlessEnterSiteReq)] +public class HandlerUltraEndlessEnterSiteReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketUltraEndlessEnterSiteRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerUltraEndlessGetMainDataReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerUltraEndlessGetMainDataReq.cs new file mode 100644 index 0000000..5fb6672 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerUltraEndlessGetMainDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.UltraEndlessGetMainDataReq)] +public class HandlerUltraEndlessGetMainDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketUltraEndlessGetMainDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerUltraEndlessGetTopRankReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerUltraEndlessGetTopRankReq.cs new file mode 100644 index 0000000..7d875d3 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerUltraEndlessGetTopRankReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.UltraEndlessGetTopRankReq)] +public class HandlerUltraEndlessGetTopRankReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketUltraEndlessGetTopRankRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerUltraEndlessReportSiteFloorReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerUltraEndlessReportSiteFloorReq.cs new file mode 100644 index 0000000..ef59964 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerUltraEndlessReportSiteFloorReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.UltraEndlessReportSiteFloorReq)] +public class HandlerUltraEndlessReportSiteFloorReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketUltraEndlessReportSiteFloorRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerUpdateMissionProgressReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerUpdateMissionProgressReq.cs new file mode 100644 index 0000000..dc2bef8 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerUpdateMissionProgressReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.UpdateMissionProgressReq)] +public class HandlerUpdateMissionProgressReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketUpdateMissionProgressRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Test/HandlerWaveRushGetActivityReq.cs b/GameServer/Server/Packet/Recv/Test/HandlerWaveRushGetActivityReq.cs new file mode 100644 index 0000000..46f801a --- /dev/null +++ b/GameServer/Server/Packet/Recv/Test/HandlerWaveRushGetActivityReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Test; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Test; + +[Opcode(CmdIds.WaveRushGetActivityReq)] +public class HandlerWaveRushGetActivityReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketWaveRushGetActivityRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Warship/HandlerGetWarshipDataReq.cs b/GameServer/Server/Packet/Recv/Warship/HandlerGetWarshipDataReq.cs new file mode 100644 index 0000000..9da8b92 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Warship/HandlerGetWarshipDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Warship; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Warship; + +[Opcode(CmdIds.GetWarshipDataReq)] +public class HandlerGetWarshipDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetWarshipDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Warship/HandlerGetWarshipItemDataReq.cs b/GameServer/Server/Packet/Recv/Warship/HandlerGetWarshipItemDataReq.cs new file mode 100644 index 0000000..dde856c --- /dev/null +++ b/GameServer/Server/Packet/Recv/Warship/HandlerGetWarshipItemDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Warship; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Warship; + +[Opcode(CmdIds.GetWarshipItemDataReq)] +public class HandlerGetWarshipItemDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetWarshipItemDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Warship/HandlerGetWarshipTrialDataReq.cs b/GameServer/Server/Packet/Recv/Warship/HandlerGetWarshipTrialDataReq.cs new file mode 100644 index 0000000..7d001df --- /dev/null +++ b/GameServer/Server/Packet/Recv/Warship/HandlerGetWarshipTrialDataReq.cs @@ -0,0 +1,13 @@ +using KianaBH.GameServer.Server.Packet.Send.Warship; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Warship; + +[Opcode(CmdIds.GetWarshipTrialDataReq)] +public class HandlerGetWarshipTrialDataReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + await connection.SendPacket(new PacketGetWarshipTrialDataRsp()); + } +} diff --git a/GameServer/Server/Packet/Recv/Warship/HandlerSetWarshipAvatarReq.cs b/GameServer/Server/Packet/Recv/Warship/HandlerSetWarshipAvatarReq.cs new file mode 100644 index 0000000..a594998 --- /dev/null +++ b/GameServer/Server/Packet/Recv/Warship/HandlerSetWarshipAvatarReq.cs @@ -0,0 +1,21 @@ +using KianaBH.GameServer.Server.Packet.Send.Player; +using KianaBH.GameServer.Server.Packet.Send.Warship; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Recv.Warship; + +[Opcode(CmdIds.SetWarshipAvatarReq)] +public class HandlerSetWarshipAvatarReq : Handler +{ + public override async Task OnHandle(Connection connection, byte[] header, byte[] data) + { + var player = connection.Player!; + var req = SetWarshipAvatarReq.Parser.ParseFrom(data); + + player.Data.WarshipAvatar.FirstAvatarId = req.FirstAvatarId; + player.Data.WarshipAvatar.SecondAvatarId = req.SecondAvatarId; + + await connection.SendPacket(new PacketGetMainDataRsp(req.FirstAvatarId,req.SecondAvatarId)); + await connection.SendPacket(CmdIds.SetWarshipAvatarRsp); + } +} diff --git a/GameServer/Server/Packet/Send/Activity/PacketArkPlusActivityGetDataRsp.cs b/GameServer/Server/Packet/Send/Activity/PacketArkPlusActivityGetDataRsp.cs new file mode 100644 index 0000000..15fb3d0 --- /dev/null +++ b/GameServer/Server/Packet/Send/Activity/PacketArkPlusActivityGetDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +public class PacketArkPlusActivityGetDataRsp : BasePacket +{ + public PacketArkPlusActivityGetDataRsp() : base(CmdIds.ArkPlusActivityGetDataRsp) + { + var proto = new ArkPlusActivityGetDataRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Activity/PacketBuffAssistGetActivityRsp.cs b/GameServer/Server/Packet/Send/Activity/PacketBuffAssistGetActivityRsp.cs new file mode 100644 index 0000000..5be5600 --- /dev/null +++ b/GameServer/Server/Packet/Send/Activity/PacketBuffAssistGetActivityRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +public class PacketBuffAssistGetActivityRsp : BasePacket +{ + public PacketBuffAssistGetActivityRsp() : base(CmdIds.BuffAssistGetActivityRsp) + { + var proto = new BuffAssistGetActivityRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Activity/PacketGeneralActivityGetMainInfoRsp.cs b/GameServer/Server/Packet/Send/Activity/PacketGeneralActivityGetMainInfoRsp.cs new file mode 100644 index 0000000..cda404f --- /dev/null +++ b/GameServer/Server/Packet/Send/Activity/PacketGeneralActivityGetMainInfoRsp.cs @@ -0,0 +1,107 @@ +using Google.Protobuf.Collections; +using KianaBH.Data; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +public class PacketGeneralActivityGetMainInfoRsp : BasePacket +{ + public PacketGeneralActivityGetMainInfoRsp(RepeatedField ActivityIdList) : base(CmdIds.GeneralActivityGetMainInfoRsp) + { + var activityList = ActivityIdList.Select(activityId => + { + GameData.GeneralActivityData + .TryGetValue((int)activityId, out var series); + + var activity = new GeneralActivity + { + GeneralBasicInfo = new GeneralActivityBasicInfo + { + ActivityId = activityId, + ScheduleId = series?.Series ?? 0, + SeriesActivityId ={ activityId } + } + }; + + GameData.GeneralActivityStageGroupData + .TryGetValue((int)activityId, out var activityStage); + + if (activityStage != null) + { + activity.ActivityStage = new GeneralActivityStage + { + StageGroupScheduleList = + { + activityStage.Select(x => new GeneralActivityStageGroupScheduleInfo + { + BeginTime = 1593223200, + EndTime = 1913140799, + StageGroupId = x.StageGroupId + }) + + } + }; + } + return activity; + }); + + var proto = new GeneralActivityGetMainInfoRsp + { + ActivityList = { activityList } + }; + + SetData(proto); + } +} + + + +//using Google.Protobuf.Collections; +//using KianaBH.Data; +//using KianaBH.KcpSharp; +//using KianaBH.Proto; +//using KianaBH.Util.Extensions; + +//namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +//public class PacketGeneralActivityGetMainInfoRsp : BasePacket +//{ +// public PacketGeneralActivityGetMainInfoRsp(RepeatedField ActivityIdList) : base(CmdIds.GeneralActivityGetMainInfoRsp) +// { +// var proto = new GeneralActivityGetMainInfoRsp(); + +// foreach (var Id in ActivityIdList) +// { +// var ActivityData = GameData.GeneralActivityData.TryGetValue((int)Id, out var Data); +// var Activity = new GeneralActivity +// { +// GeneralBasicInfo = new GeneralActivityBasicInfo +// { +// ActivityId = Id, +// ScheduleId = Data!.Series, +// SeriesActivityId = { Id }, +// } +// }; +// var GeneralStageData = GameData.GeneralActivityStageGroupData.TryGetValue((int)Id, out var StageData); +// if (StageData != null) +// { +// Activity.ActivityStage = new GeneralActivityStage +// { +// StageGroupScheduleList = +// { +// StageData.Select(x => new GeneralActivityStageGroupScheduleInfo +// { +// BeginTime = (uint)Extensions.GetUnixSec(), +// EndTime = (uint)Extensions.GetUnixSec() + 1800, +// StageGroupId = x.StageGroupID +// }) +// } +// }; +// } +// proto.ActivityList.Add(Activity); +// } + +// SetData(proto); +// } +//} diff --git a/GameServer/Server/Packet/Send/Activity/PacketGeneralActivityGetScheduleRsp.cs b/GameServer/Server/Packet/Send/Activity/PacketGeneralActivityGetScheduleRsp.cs new file mode 100644 index 0000000..028538f --- /dev/null +++ b/GameServer/Server/Packet/Send/Activity/PacketGeneralActivityGetScheduleRsp.cs @@ -0,0 +1,42 @@ +using KianaBH.Data; +using KianaBH.KcpSharp; +using KianaBH.Proto; +using KianaBH.Util.Extensions; + +namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +public class PacketGeneralActivityGetScheduleRsp : BasePacket +{ + public PacketGeneralActivityGetScheduleRsp() : base(CmdIds.GeneralActivityGetScheduleRsp) + { + // TODO : Add new character tutorial + + var time = (uint)Extensions.GetUnixSec() + 3600 * 24 * 7; + + var proto = new GeneralActivityGetScheduleRsp(); + + foreach (var tutorial in GameData.AvatarTutorialData.Values) + { + proto.ScheduleList.Add(new GeneralActivityScheduleInfo + { + ActivityId = tutorial.ActivityID, + SettleTime = time, + EndDayTime = time, + EndTime = time, + }); + } + + foreach (var tower in GameData.ActivityTowerData.Values) + { + proto.ScheduleList.Add(new GeneralActivityScheduleInfo + { + ActivityId = tower.ActivityID, + SettleTime = time, + EndDayTime = time, + EndTime = time, + }); + } + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Activity/PacketGetActivityMainDataRsp.cs b/GameServer/Server/Packet/Send/Activity/PacketGetActivityMainDataRsp.cs new file mode 100644 index 0000000..f02dd60 --- /dev/null +++ b/GameServer/Server/Packet/Send/Activity/PacketGetActivityMainDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +public class PacketGetActivityMainDataRsp : BasePacket +{ + public PacketGetActivityMainDataRsp() : base(CmdIds.GetActivityMainDataRsp) + { + var proto = new GetActivityMainDataRsp + { + ActivityModuleTypeList = { Enumerable.Range(1, 72).Select(i => (uint)i) } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Activity/PacketGetActivityRewardStatisticDataRsp.cs b/GameServer/Server/Packet/Send/Activity/PacketGetActivityRewardStatisticDataRsp.cs new file mode 100644 index 0000000..e2b9d2e --- /dev/null +++ b/GameServer/Server/Packet/Send/Activity/PacketGetActivityRewardStatisticDataRsp.cs @@ -0,0 +1,29 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +public class PacketGetActivityRewardStatisticDataRsp : BasePacket +{ + public PacketGetActivityRewardStatisticDataRsp() : base(CmdIds.GetActivityRewardStatisticDataRsp) + { + // TODO: Hardcoded + + var proto = new GetActivityRewardStatisticDataRsp + { + ActivityRewardData = new ActivityRewardStatisticData + { + Id = 118, + ItemDataList = + { + Enumerable.Range(506, 3).Select(i => new ActivityRewardStatisticItemData + { + ShowId = (uint)i + }) + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Activity/PacketGetBulletinActivityMissionRsp.cs b/GameServer/Server/Packet/Send/Activity/PacketGetBulletinActivityMissionRsp.cs new file mode 100644 index 0000000..68253d7 --- /dev/null +++ b/GameServer/Server/Packet/Send/Activity/PacketGetBulletinActivityMissionRsp.cs @@ -0,0 +1,399 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +public class PacketGetBulletinActivityMissionRsp : BasePacket +{ + public PacketGetBulletinActivityMissionRsp() : base(CmdIds.GetBulletinActivityMissionRsp) + { + // TODO: Hardcoded + + var proto = new GetBulletinActivityMissionRsp + { + MissionGroupList = + { + new BulletinMissionGroup + { + ActivityId = 5931 + }, + new BulletinMissionGroup + { + ActivityId = 5938, + MissionList = + { + new PanelMissionData + { + MissionId = 115679, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729828800, + CycleId = 20006997, + EndTime = 1880308800 + } + } + } + } + }, + new BulletinMissionGroup + { + ActivityId = 5941, + MissionList = + { + new PanelMissionData + { + MissionId = 687511, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729828800, + CycleId = 20007074, + EndTime = 1880308800 + } + } + } + } + }, + new BulletinMissionGroup + { + ActivityId = 5943, + MissionList = + { + new PanelMissionData + { + MissionId = 687521, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729828800, + CycleId = 20007081, + EndTime = 1880308800 + } + } + } + } + }, + new BulletinMissionGroup + { + ActivityId = 5944, + MissionList = + { + new PanelMissionData + { + MissionId = 687530, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729108800, + CycleId = 20007089, + EndTime = 1880308800 + } + } + } + } + }, + new BulletinMissionGroup + { + ActivityId = 5949, + MissionList = + { + new PanelMissionData + { + MissionId = 687546, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729108800, + CycleId = 20007106, + EndTime = 1880308800 + } + } + }, + new PanelMissionData + { + MissionId = 687549, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729108800, + CycleId = 20007109, + EndTime = 1880308800 + } + } + }, + new PanelMissionData + { + MissionId = 687566, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729108800, + CycleId = 20007126, + EndTime = 1880308800 + } + } + }, + new PanelMissionData + { + MissionId = 687563, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729108800, + CycleId = 20007123, + EndTime = 1880308800 + } + } + }, + new PanelMissionData + { + MissionId = 687564, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729108800, + CycleId = 20007124, + EndTime = 1880308800 + } + } + }, + new PanelMissionData + { + MissionId = 687565, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729108800, + CycleId = 20007125, + EndTime = 1880308800 + } + } + }, + new PanelMissionData + { + MissionId = 687562, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729108800, + CycleId = 20007122, + EndTime = 1880308800 + } + } + }, + new PanelMissionData + { + MissionId = 687554, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729108800, + CycleId = 20007114, + EndTime = 1880308800 + } + } + }, + new PanelMissionData + { + MissionId = 687555, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729108800, + CycleId = 20007115, + EndTime = 1880308800 + } + } + }, + new PanelMissionData + { + MissionId = 687567, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729108800, + CycleId = 20007127, + EndTime = 1880308800 + } + } + }, + new PanelMissionData + { + MissionId = 687550, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729108800, + CycleId = 20007110, + EndTime = 1880308800 + } + } + }, + new PanelMissionData + { + MissionId = 687551, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729108800, + CycleId = 20007111, + EndTime = 1880308800 + } + } + }, + new PanelMissionData + { + MissionId = 687552, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729108800, + CycleId = 20007112, + EndTime = 1880308800 + } + } + }, + new PanelMissionData + { + MissionId = 687553, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729108800, + CycleId = 20007113, + EndTime = 1880308800 + } + } + }, + new PanelMissionData + { + MissionId = 687560, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729108800, + CycleId = 20007120, + EndTime = 1880308800 + } + } + }, + new PanelMissionData + { + MissionId = 687561, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729108800, + CycleId = 20007121, + EndTime = 1880308800 + } + } + }, + new PanelMissionData + { + MissionId = 687545, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729108800, + CycleId = 20007105, + EndTime = 1880308800 + } + } + } + } + }, + new BulletinMissionGroup + { + ActivityId = 5952 + }, + new BulletinMissionGroup + { + ActivityId = 5953, + MissionList = + { + new PanelMissionData + { + MissionId = 687608, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729108800, + CycleId = 20007187, + EndTime = 1880308800 + } + } + }, + new PanelMissionData + { + MissionId = 687620, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729108800, + CycleId = 20007141, + EndTime = 1880308800 + } + } + }, + new PanelMissionData + { + MissionId = 687716, + CycleList = + { + new PanelMissionData.Types.PanelMissionCycleData + { + BeginTime = 1729108800, + CycleId = 20007143, + EndTime = 1880308800 + } + } + } + } + }, + new BulletinMissionGroup + { + ActivityId = 5959 + }, + new BulletinMissionGroup + { + ActivityId = 5962 + }, + new BulletinMissionGroup + { + ActivityId = 5963 + }, + new BulletinMissionGroup + { + ActivityId = 5964 + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Activity/PacketGetBulletinRsp.cs b/GameServer/Server/Packet/Send/Activity/PacketGetBulletinRsp.cs new file mode 100644 index 0000000..81d6e23 --- /dev/null +++ b/GameServer/Server/Packet/Send/Activity/PacketGetBulletinRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +public class PacketGetBulletinRsp : BasePacket +{ + public PacketGetBulletinRsp() : base(CmdIds.GetBulletinRsp) + { + var proto = new GetBulletinRsp + { + IsAll = true, + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Activity/PacketGetChapterActivityDataRsp.cs b/GameServer/Server/Packet/Send/Activity/PacketGetChapterActivityDataRsp.cs new file mode 100644 index 0000000..1ad6a5a --- /dev/null +++ b/GameServer/Server/Packet/Send/Activity/PacketGetChapterActivityDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +public class PacketGetChapterActivityDataRsp : BasePacket +{ + public PacketGetChapterActivityDataRsp() : base(CmdIds.GetChapterActivityDataRsp) + { + var proto = new GetChapterActivityDataRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Activity/PacketGetChapterCompensationInfoRsp.cs b/GameServer/Server/Packet/Send/Activity/PacketGetChapterCompensationInfoRsp.cs new file mode 100644 index 0000000..4696cac --- /dev/null +++ b/GameServer/Server/Packet/Send/Activity/PacketGetChapterCompensationInfoRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +public class PacketGetChapterCompensationInfoRsp : BasePacket +{ + public PacketGetChapterCompensationInfoRsp() : base(CmdIds.GetChapterCompensationInfoRsp) + { + var proto = new GetChapterCompensationInfoRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Activity/PacketGetDropLimitActivityRsp.cs b/GameServer/Server/Packet/Send/Activity/PacketGetDropLimitActivityRsp.cs new file mode 100644 index 0000000..3e52c8d --- /dev/null +++ b/GameServer/Server/Packet/Send/Activity/PacketGetDropLimitActivityRsp.cs @@ -0,0 +1,136 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +public class PacketGetDropLimitActivityRsp : BasePacket +{ + public PacketGetDropLimitActivityRsp() : base(CmdIds.GetDropLimitActivityRsp) + { + // TODO: Hardcoded + + var proto = new GetDropLimitActivityRsp + { + DropLimitActivityList = + { + new DropLimitActivity + { + ActivityId = 1, + BeginTime = 1576029600, + EndTime = 1891735200, + DropLimitGotNumList = + { + new DropLimitItem { LimitId = 101 }, + new DropLimitItem { LimitId = 201 }, + new DropLimitItem { LimitId = 301 }, + new DropLimitItem { LimitId = 401 } + } + }, + new DropLimitActivity + { + ActivityId = 38, + BeginTime = 1624500000, + EndTime = 2068056000, + DropLimitGotNumList = + { + new DropLimitItem { LimitId = 3001 }, + new DropLimitItem { LimitId = 3002, GotNum = 3800 }, + new DropLimitItem { LimitId = 3003, GotNum = 1500 }, + new DropLimitItem { LimitId = 3004, GotNum = 1500 }, + new DropLimitItem { LimitId = 3005, GotNum = 1500 }, + new DropLimitItem { LimitId = 3006, GotNum = 1500 }, + new DropLimitItem { LimitId = 3007, GotNum = 1500 }, + new DropLimitItem { LimitId = 3008, GotNum = 1500 }, + new DropLimitItem { LimitId = 3010, GotNum = 1500 }, + new DropLimitItem { LimitId = 3013, GotNum = 1500 }, + new DropLimitItem { LimitId = 3014, GotNum = 1500 }, + new DropLimitItem { LimitId = 3015, GotNum = 1500 }, + new DropLimitItem { LimitId = 3016, GotNum = 1500 }, + new DropLimitItem { LimitId = 3017, GotNum = 1500 }, + new DropLimitItem { LimitId = 3019, GotNum = 1500 }, + new DropLimitItem { LimitId = 3021, GotNum = 1500 }, + new DropLimitItem { LimitId = 3022, GotNum = 1500 }, + new DropLimitItem { LimitId = 3026, GotNum = 1500 }, + new DropLimitItem { LimitId = 3027, GotNum = 1500 }, + new DropLimitItem { LimitId = 3028, GotNum = 1500 }, + new DropLimitItem { LimitId = 3031, GotNum = 1500 }, + new DropLimitItem { LimitId = 3032, GotNum = 1500 }, + new DropLimitItem { LimitId = 3035, GotNum = 1500 }, + new DropLimitItem { LimitId = 3036, GotNum = 1500 }, + new DropLimitItem { LimitId = 3040, GotNum = 210 }, + new DropLimitItem { LimitId = 3042, GotNum = 1500 }, + new DropLimitItem { LimitId = 3043, GotNum = 1500 }, + new DropLimitItem { LimitId = 3045, GotNum = 430 }, + new DropLimitItem { LimitId = 3047, GotNum = 430 }, + new DropLimitItem { LimitId = 3048, GotNum = 430 }, + new DropLimitItem { LimitId = 3049, GotNum = 1500 }, + new DropLimitItem { LimitId = 3050, GotNum = 430 }, + new DropLimitItem { LimitId = 3051, GotNum = 465 }, + new DropLimitItem { LimitId = 3052, GotNum = 465 }, + new DropLimitItem { LimitId = 3054, GotNum = 505 }, + new DropLimitItem { LimitId = 3055, GotNum = 505 } + } + }, + new DropLimitActivity + { + ActivityId = 42, + BeginTime = 1634004000, + EndTime = 1891735200, + DropLimitGotNumList = + { + new DropLimitItem { LimitId = 408 } + } + }, + new DropLimitActivity + { + ActivityId = 45, + BeginTime = 1644264000, + EndTime = 1975780800, + DropLimitGotNumList = + { + new DropLimitItem { LimitId = 4001 } + } + }, + new DropLimitActivity + { + ActivityId = 47, + BeginTime = 1668045600, + EndTime = 1976558400, + DropLimitGotNumList = + { + new DropLimitItem { LimitId = 4003, GotNum = 360 } + } + }, + new DropLimitActivity + { + ActivityId = 48, + BeginTime = 1668045600, + EndTime = 1976558400, + DropLimitGotNumList = + { + new DropLimitItem { LimitId = 4006 } + } + }, + new DropLimitActivity + { + ActivityId = 49, + BeginTime = 1668045600, + EndTime = 1976558400, + DropLimitGotNumList = + { + new DropLimitItem { LimitId = 4010, GotNum = 1050 }, + new DropLimitItem { LimitId = 4012, GotNum = 600 } + } + }, + new DropLimitActivity + { + ActivityId = 50, + BeginTime = 1673740800, + EndTime = 1976558400 + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Activity/PacketGetExtractReforgeActivityRsp.cs b/GameServer/Server/Packet/Send/Activity/PacketGetExtractReforgeActivityRsp.cs new file mode 100644 index 0000000..b26bfcc --- /dev/null +++ b/GameServer/Server/Packet/Send/Activity/PacketGetExtractReforgeActivityRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +public class PacketGetExtractReforgeActivityRsp : BasePacket +{ + public PacketGetExtractReforgeActivityRsp() : base(CmdIds.GetExtractReforgeActivityRsp) + { + var proto = new GetExtractReforgeActivityRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Activity/PacketGetFarmActivityDataRsp.cs b/GameServer/Server/Packet/Send/Activity/PacketGetFarmActivityDataRsp.cs new file mode 100644 index 0000000..d1607d1 --- /dev/null +++ b/GameServer/Server/Packet/Send/Activity/PacketGetFarmActivityDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +public class PacketGetFarmActivityDataRsp : BasePacket +{ + public PacketGetFarmActivityDataRsp() : base(CmdIds.GetFarmActivityDataRsp) + { + var proto = new GetFarmActivityDataRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Activity/PacketGetGardenScheduleRsp.cs b/GameServer/Server/Packet/Send/Activity/PacketGetGardenScheduleRsp.cs new file mode 100644 index 0000000..26846ab --- /dev/null +++ b/GameServer/Server/Packet/Send/Activity/PacketGetGardenScheduleRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +public class PacketGetGardenScheduleRsp : BasePacket +{ + public PacketGetGardenScheduleRsp() : base(CmdIds.GetGardenScheduleRsp) + { + var proto = new GetGardenScheduleRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Activity/PacketGetInviteActivityInviteeDataRsp.cs b/GameServer/Server/Packet/Send/Activity/PacketGetInviteActivityInviteeDataRsp.cs new file mode 100644 index 0000000..0663688 --- /dev/null +++ b/GameServer/Server/Packet/Send/Activity/PacketGetInviteActivityInviteeDataRsp.cs @@ -0,0 +1,25 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +public class PacketGetInviteActivityInviteeDataRsp : BasePacket +{ + public PacketGetInviteActivityInviteeDataRsp() : base(CmdIds.GetInviteActivityInviteeDataRsp) + { + // TODO: Hardcoded + var proto = new GetInviteActivityInviteeDataRsp + { + InviteeActivityInfoList = + { + new InviteeActivity + { + ScheduleId = 2, + ActivityType = InviteeActivityType.Goback + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Activity/PacketGetInviteActivityInviterDataRsp.cs b/GameServer/Server/Packet/Send/Activity/PacketGetInviteActivityInviterDataRsp.cs new file mode 100644 index 0000000..820f88a --- /dev/null +++ b/GameServer/Server/Packet/Send/Activity/PacketGetInviteActivityInviterDataRsp.cs @@ -0,0 +1,29 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +public class PacketGetInviteActivityInviterDataRsp : BasePacket +{ + public PacketGetInviteActivityInviterDataRsp() : base(CmdIds.GetInviteActivityInviterDataRsp) + { + // TODO: Hardcoded + var proto = new GetInviteActivityInviterDataRsp + { + InviterActivityInfoList = + { + new InviterActivity + { + ScheduleId = 4 + }, + new InviterActivity + { + ScheduleId = 103 + } + }, + MyInviteCode = "17263334YG" + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Activity/PacketGetLoginActivityRsp.cs b/GameServer/Server/Packet/Send/Activity/PacketGetLoginActivityRsp.cs new file mode 100644 index 0000000..832d7cf --- /dev/null +++ b/GameServer/Server/Packet/Send/Activity/PacketGetLoginActivityRsp.cs @@ -0,0 +1,30 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; +using KianaBH.Util.Extensions; + +namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +public class PacketGetLoginActivityRsp : BasePacket +{ + public PacketGetLoginActivityRsp() : base(CmdIds.GetLoginActivityRsp) + { + // TODO: Hardcoded + var now = (uint)Extensions.GetUnixSec(); + + var proto = new GetLoginActivityRsp + { + LoginList = + { + new LoginActivityData + { + Id = 581, + LoginDays = now, + AcceptTime = now, + DurationEndTime = now + 604800 * 2 + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Activity/PacketGetMosaicActivityRsp.cs b/GameServer/Server/Packet/Send/Activity/PacketGetMosaicActivityRsp.cs new file mode 100644 index 0000000..7a46884 --- /dev/null +++ b/GameServer/Server/Packet/Send/Activity/PacketGetMosaicActivityRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +public class PacketGetMosaicActivityRsp : BasePacket +{ + public PacketGetMosaicActivityRsp() : base(CmdIds.GetMosaicActivityRsp) + { + var proto = new GetMosaicActivityRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Activity/PacketGetNewbieActivityRsp.cs b/GameServer/Server/Packet/Send/Activity/PacketGetNewbieActivityRsp.cs new file mode 100644 index 0000000..da3151b --- /dev/null +++ b/GameServer/Server/Packet/Send/Activity/PacketGetNewbieActivityRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +public class PacketGetNewbieActivityRsp : BasePacket +{ + public PacketGetNewbieActivityRsp() : base(CmdIds.GetNewbieActivityRsp) + { + var proto = new GetNewbieActivityRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Activity/PacketGetNinjaActivityRsp.cs b/GameServer/Server/Packet/Send/Activity/PacketGetNinjaActivityRsp.cs new file mode 100644 index 0000000..05ed87e --- /dev/null +++ b/GameServer/Server/Packet/Send/Activity/PacketGetNinjaActivityRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +public class PacketGetNinjaActivityRsp : BasePacket +{ + public PacketGetNinjaActivityRsp() : base(CmdIds.GetNinjaActivityRsp) + { + var proto = new GetNinjaActivityRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Activity/PacketGetThemeWantedRsp.cs b/GameServer/Server/Packet/Send/Activity/PacketGetThemeWantedRsp.cs new file mode 100644 index 0000000..b78c90d --- /dev/null +++ b/GameServer/Server/Packet/Send/Activity/PacketGetThemeWantedRsp.cs @@ -0,0 +1,48 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Activity; + +public class PacketGetThemeWantedRsp : BasePacket +{ + public PacketGetThemeWantedRsp() : base(CmdIds.GetThemeWantedRsp) + { + // TODO: Hardcoded + + var proto = new GetThemeWantedRsp + { + ThemeWantedActivity = new ThemeWantedActivity + { + ActivityId = 11105, + OpenStageGroupIdList = { 17, 18, 19, 20 }, + ScheduleId = 5, + StageGroupInfoList = + { + new ThemeWantedStageGroupInfo + { + Progress = 8, + StageGroupId = 17 + }, + new ThemeWantedStageGroupInfo + { + NotPassProgressList = { 7 }, + Progress = 7, + StageGroupId = 18 + }, + new ThemeWantedStageGroupInfo + { + Progress = 8, + StageGroupId = 19 + }, + new ThemeWantedStageGroupInfo + { + Progress = 8, + StageGroupId = 20 + }, + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Adventure/PacketGetAdventureGroupRsp.cs b/GameServer/Server/Packet/Send/Adventure/PacketGetAdventureGroupRsp.cs new file mode 100644 index 0000000..ba9a31a --- /dev/null +++ b/GameServer/Server/Packet/Send/Adventure/PacketGetAdventureGroupRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Adventure; + +public class PacketGetAdventureGroupRsp : BasePacket +{ + public PacketGetAdventureGroupRsp() : base(CmdIds.GetAdventureGroupRsp) + { + var proto = new GetAdventureGroupRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Adventure/PacketGetAdventureStorySweepInfoRsp.cs b/GameServer/Server/Packet/Send/Adventure/PacketGetAdventureStorySweepInfoRsp.cs new file mode 100644 index 0000000..80c459c --- /dev/null +++ b/GameServer/Server/Packet/Send/Adventure/PacketGetAdventureStorySweepInfoRsp.cs @@ -0,0 +1,57 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Adventure; + +public class PacketGetAdventureStorySweepInfoRsp : BasePacket +{ + public PacketGetAdventureStorySweepInfoRsp() : base(CmdIds.GetAdventureStorySweepInfoRsp) + { + // TODO: Hardcoded + + var proto = new GetAdventureStorySweepInfoRsp + { + StorySweepList = + { + new IslandStorySweepData + { + AvatarIdList = + { + 20401, + 20301, + 20201 + }, + IsFinished = true, + OverTime = 1719938652, + SweepId = 282 + }, + new IslandStorySweepData + { + AvatarIdList = + { + 3701, + 3601, + 3501 + }, + IsFinished = true, + OverTime = 1719938654, + SweepId = 282 + }, + new IslandStorySweepData + { + AvatarIdList = + { + 3301, + 3201, + 3101 + }, + IsFinished = true, + OverTime = 1719938655, + SweepId = 282 + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Adventure/PacketGetConsignedOrderDataRsp.cs b/GameServer/Server/Packet/Send/Adventure/PacketGetConsignedOrderDataRsp.cs new file mode 100644 index 0000000..d335e54 --- /dev/null +++ b/GameServer/Server/Packet/Send/Adventure/PacketGetConsignedOrderDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Adventure; + +public class PacketGetConsignedOrderDataRsp : BasePacket +{ + public PacketGetConsignedOrderDataRsp() : base(CmdIds.GetConsignedOrderDataRsp) + { + var proto = new GetConsignedOrderDataRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Armada/PacketGetArmadaActivityListRsp.cs b/GameServer/Server/Packet/Send/Armada/PacketGetArmadaActivityListRsp.cs new file mode 100644 index 0000000..e5e1e86 --- /dev/null +++ b/GameServer/Server/Packet/Send/Armada/PacketGetArmadaActivityListRsp.cs @@ -0,0 +1,27 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Armada; + +public class PacketGetArmadaActivityListRsp : BasePacket +{ + public PacketGetArmadaActivityListRsp() : base(CmdIds.GetArmadaActivityListRsp) + { + // TODO: Hardcoded + + var proto = new GetArmadaActivityListRsp + { + ActivityList = + { + new ArmadaActivity + { + BeginTime = 0, + EndTime = 1880308800, + Type = ArmadaActivityType.ArmadaActivityArmadaStageScoreActivity + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Armada/PacketGetArmadaDataRsp.cs b/GameServer/Server/Packet/Send/Armada/PacketGetArmadaDataRsp.cs new file mode 100644 index 0000000..acca533 --- /dev/null +++ b/GameServer/Server/Packet/Send/Armada/PacketGetArmadaDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Armada; + +public class PacketGetArmadaDataRsp : BasePacket +{ + public PacketGetArmadaDataRsp() : base(CmdIds.GetArmadaDataRsp) + { + var proto = new GetArmadaDataRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Armada/PacketGetArmadaStageScoreActivityRsp.cs b/GameServer/Server/Packet/Send/Armada/PacketGetArmadaStageScoreActivityRsp.cs new file mode 100644 index 0000000..74d51a7 --- /dev/null +++ b/GameServer/Server/Packet/Send/Armada/PacketGetArmadaStageScoreActivityRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Armada; + +public class PacketGetArmadaStageScoreActivityRsp : BasePacket +{ + public PacketGetArmadaStageScoreActivityRsp() : base(CmdIds.GetArmadaStageScoreActivityRsp) + { + var proto = new GetArmadaStageScoreActivityRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Auth/PacketGetAuthkeyRsp.cs b/GameServer/Server/Packet/Send/Auth/PacketGetAuthkeyRsp.cs new file mode 100644 index 0000000..fecee3a --- /dev/null +++ b/GameServer/Server/Packet/Send/Auth/PacketGetAuthkeyRsp.cs @@ -0,0 +1,20 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Auth; + +public class PacketGetAuthkeyRsp : BasePacket +{ + public PacketGetAuthkeyRsp(string AuthAppid) : base(CmdIds.GetAuthkeyRsp) + { + var proto = new GetAuthkeyRsp + { + AuthAppid = AuthAppid, + Authkey = "0", + SignType = 2, + AuthkeyVer = 1, + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Avatar/PacketAddCustomAvatarTeamRsp.cs b/GameServer/Server/Packet/Send/Avatar/PacketAddCustomAvatarTeamRsp.cs new file mode 100644 index 0000000..0369d5e --- /dev/null +++ b/GameServer/Server/Packet/Send/Avatar/PacketAddCustomAvatarTeamRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Avatar; + +public class PacketAddCustomAvatarTeamRsp : BasePacket +{ + public PacketAddCustomAvatarTeamRsp() : base(CmdIds.AddCustomAvatarTeamRsp) + { + var proto = new AddCustomAvatarTeamRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Avatar/PacketAvatarSubSkillLevelUpRsp.cs b/GameServer/Server/Packet/Send/Avatar/PacketAvatarSubSkillLevelUpRsp.cs new file mode 100644 index 0000000..681e3fb --- /dev/null +++ b/GameServer/Server/Packet/Send/Avatar/PacketAvatarSubSkillLevelUpRsp.cs @@ -0,0 +1,18 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Avatar; + +public class PacketAvatarSubSkillLevelUpRsp : BasePacket +{ + public PacketAvatarSubSkillLevelUpRsp() : base(CmdIds.AvatarSubSkillLevelUpRsp) + { + // TODO: Implement + var proto = new AvatarSubSkillLevelUpRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Avatar/PacketDelCustomAvatarTeamRsp.cs b/GameServer/Server/Packet/Send/Avatar/PacketDelCustomAvatarTeamRsp.cs new file mode 100644 index 0000000..fb799fd --- /dev/null +++ b/GameServer/Server/Packet/Send/Avatar/PacketDelCustomAvatarTeamRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Avatar; + +public class PacketDelCustomAvatarTeamRsp : BasePacket +{ + public PacketDelCustomAvatarTeamRsp() : base(CmdIds.DelCustomAvatarTeamRsp) + { + var proto = new DelCustomAvatarTeamRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Avatar/PacketDressEquipmentRsp.cs b/GameServer/Server/Packet/Send/Avatar/PacketDressEquipmentRsp.cs new file mode 100644 index 0000000..e250cb9 --- /dev/null +++ b/GameServer/Server/Packet/Send/Avatar/PacketDressEquipmentRsp.cs @@ -0,0 +1,18 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Avatar; + +public class PacketDressEquipmentRsp : BasePacket +{ + public PacketDressEquipmentRsp() : base(CmdIds.DressEquipmentRsp) + { + // TODO: Implement + var proto = new DressEquipmentRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Avatar/PacketGetAvatarDataRsp.cs b/GameServer/Server/Packet/Send/Avatar/PacketGetAvatarDataRsp.cs new file mode 100644 index 0000000..e0e5bce --- /dev/null +++ b/GameServer/Server/Packet/Send/Avatar/PacketGetAvatarDataRsp.cs @@ -0,0 +1,19 @@ +using Google.Protobuf.Collections; +using KianaBH.Database.Avatar; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Avatar; + +public class PacketGetAvatarDataRsp : BasePacket +{ + public PacketGetAvatarDataRsp(List Avatars, bool IsAll) : base(CmdIds.GetAvatarDataRsp) + { + var proto = new GetAvatarDataRsp + { + AvatarList = { Avatars.Select(avatar => avatar.ToProto()) }, + IsAll = IsAll + }; + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Avatar/PacketGetAvatarMissionActivityRsp.cs b/GameServer/Server/Packet/Send/Avatar/PacketGetAvatarMissionActivityRsp.cs new file mode 100644 index 0000000..d43bd3a --- /dev/null +++ b/GameServer/Server/Packet/Send/Avatar/PacketGetAvatarMissionActivityRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Avatar; + +public class PacketGetAvatarMissionActivityRsp : BasePacket +{ + public PacketGetAvatarMissionActivityRsp() : base(CmdIds.GetAvatarMissionActivityRsp) + { + var proto = new GetAvatarMissionActivityRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Avatar/PacketGetAvatarRollDataRsp.cs b/GameServer/Server/Packet/Send/Avatar/PacketGetAvatarRollDataRsp.cs new file mode 100644 index 0000000..b7bebff --- /dev/null +++ b/GameServer/Server/Packet/Send/Avatar/PacketGetAvatarRollDataRsp.cs @@ -0,0 +1,161 @@ +using KianaBH.GameServer.Game.Player; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Avatar; + +public class PacketGetAvatarRollDataRsp : BasePacket +{ + public PacketGetAvatarRollDataRsp(PlayerInstance player) : base(CmdIds.GetAvatarRollDataRsp) + { + //var proto = new GetAvatarRollDataRsp + //{ + // IsAll = true, + // RollList = + // { + // player.AvatarManager?.AvatarData?.Avatars? + // .Select(avatar => new AvatarRoll + // { + // AvatarId = avatar.AvatarId, + // IsUnlock = true + // }) + // } + //}; + + var proto = new GetAvatarRollDataRsp + { + IsAll = true, + RollList = + { + new AvatarRoll { AvatarId = 101, IsUnlock = true }, + new AvatarRoll { AvatarId = 102, IsUnlock = true }, + new AvatarRoll { AvatarId = 103, IsUnlock = true }, + new AvatarRoll { AvatarId = 104, IsUnlock = true }, + new AvatarRoll { AvatarId = 105, IsUnlock = true }, + new AvatarRoll { AvatarId = 106, IsUnlock = true }, + new AvatarRoll { AvatarId = 111, IsUnlock = true }, + new AvatarRoll { AvatarId = 112, IsUnlock = true }, + new AvatarRoll { AvatarId = 113, IsUnlock = true }, + new AvatarRoll { AvatarId = 114, IsUnlock = true }, + new AvatarRoll { AvatarId = 201, IsUnlock = true }, + new AvatarRoll { AvatarId = 202, IsUnlock = true }, + new AvatarRoll { AvatarId = 203, IsUnlock = true }, + new AvatarRoll { AvatarId = 204, IsUnlock = true }, + new AvatarRoll { AvatarId = 205, IsUnlock = true }, + new AvatarRoll { AvatarId = 206, IsUnlock = true }, + new AvatarRoll { AvatarId = 211, IsUnlock = true }, + new AvatarRoll { AvatarId = 212, IsUnlock = true }, + new AvatarRoll { AvatarId = 213, IsUnlock = true }, + new AvatarRoll { AvatarId = 214, IsUnlock = true }, + new AvatarRoll { AvatarId = 301, IsUnlock = true }, + new AvatarRoll { AvatarId = 302, IsUnlock = true }, + new AvatarRoll { AvatarId = 303, IsUnlock = true }, + new AvatarRoll { AvatarId = 311, IsUnlock = true }, + new AvatarRoll { AvatarId = 312, IsUnlock = true }, + new AvatarRoll { AvatarId = 313, IsUnlock = true }, + new AvatarRoll { AvatarId = 314, IsUnlock = true }, + new AvatarRoll { AvatarId = 317, IsUnlock = true }, + new AvatarRoll { AvatarId = 401, IsUnlock = true }, + new AvatarRoll { AvatarId = 402, IsUnlock = true }, + new AvatarRoll { AvatarId = 403, IsUnlock = true }, + new AvatarRoll { AvatarId = 404, IsUnlock = true }, + new AvatarRoll { AvatarId = 411, IsUnlock = true }, + new AvatarRoll { AvatarId = 412, IsUnlock = true }, + new AvatarRoll { AvatarId = 421, IsUnlock = true }, + new AvatarRoll { AvatarId = 422, IsUnlock = true }, + new AvatarRoll { AvatarId = 501, IsUnlock = true }, + new AvatarRoll { AvatarId = 502, IsUnlock = true }, + new AvatarRoll { AvatarId = 503, IsUnlock = true }, + new AvatarRoll { AvatarId = 504, IsUnlock = true }, + new AvatarRoll { AvatarId = 506, IsUnlock = true }, + new AvatarRoll { AvatarId = 507, IsUnlock = true }, + new AvatarRoll { AvatarId = 511, IsUnlock = true }, + new AvatarRoll { AvatarId = 601, IsUnlock = true }, + new AvatarRoll { AvatarId = 602, IsUnlock = true }, + new AvatarRoll { AvatarId = 603, IsUnlock = true }, + new AvatarRoll { AvatarId = 604, IsUnlock = true }, + new AvatarRoll { AvatarId = 611, IsUnlock = true }, + new AvatarRoll { AvatarId = 612, IsUnlock = true }, + new AvatarRoll { AvatarId = 702, IsUnlock = true }, + new AvatarRoll { AvatarId = 703, IsUnlock = true }, + new AvatarRoll { AvatarId = 705, IsUnlock = true }, + new AvatarRoll { AvatarId = 706, IsUnlock = true }, + new AvatarRoll { AvatarId = 711, IsUnlock = true }, + new AvatarRoll { AvatarId = 712, IsUnlock = true }, + new AvatarRoll { AvatarId = 713, IsUnlock = true }, + new AvatarRoll { AvatarId = 714, IsUnlock = true }, + new AvatarRoll { AvatarId = 801, IsUnlock = true }, + new AvatarRoll { AvatarId = 802, IsUnlock = true }, + new AvatarRoll { AvatarId = 803, IsUnlock = true }, + new AvatarRoll { AvatarId = 2201, IsUnlock = true }, + new AvatarRoll { AvatarId = 2202, IsUnlock = true }, + new AvatarRoll { AvatarId = 2401, IsUnlock = true }, + new AvatarRoll { AvatarId = 2501, IsUnlock = true }, + new AvatarRoll { AvatarId = 2601, IsUnlock = true }, + new AvatarRoll { AvatarId = 2801, IsUnlock = true }, + new AvatarRoll { AvatarId = 2901, IsUnlock = true }, + new AvatarRoll { AvatarId = 2902, IsUnlock = true }, + new AvatarRoll { AvatarId = 3101, IsUnlock = true }, + new AvatarRoll { AvatarId = 3201, IsUnlock = true }, + new AvatarRoll { AvatarId = 3301, IsUnlock = true }, + new AvatarRoll { AvatarId = 3501, IsUnlock = true }, + new AvatarRoll { AvatarId = 3601, IsUnlock = true }, + new AvatarRoll { AvatarId = 3701, IsUnlock = true }, + new AvatarRoll { AvatarId = 20201, IsUnlock = true }, + new AvatarRoll { AvatarId = 20301, IsUnlock = true }, + new AvatarRoll { AvatarId = 20401, IsUnlock = true }, + new AvatarRoll { AvatarId = 70005, Progress = 18 }, + new AvatarRoll { AvatarId = 70006, Progress = 18 }, + new AvatarRoll { AvatarId = 70010, Progress = 18 }, + new AvatarRoll + { + AvatarId = 70011, + HasTakeGroupList = { 111 }, + Progress = 33 + }, + new AvatarRoll + { + AvatarId = 70019, + HasTakeGroupList = { 191, 192 }, + Progress = 87 + }, + new AvatarRoll + { + AvatarId = 70022, + HasTakeGroupList = { 221, 222 }, + IsUnlock = true, + Progress = 68 + }, + new AvatarRoll + { + AvatarId = 70025, + HasTakeGroupList = { 251, 252 }, + Progress = 87 + }, + new AvatarRoll + { + AvatarId = 70030, + HasTakeGroupList = { 301, 302 }, + Progress = 87 + }, + new AvatarRoll + { + AvatarId = 70032, + HasTakeGroupList = { 321 }, + Progress = 33 + }, + new AvatarRoll { AvatarId = 70038, Progress = 21 }, + new AvatarRoll { AvatarId = 70065, Progress = 33 }, + new AvatarRoll + { + AvatarId = 70080, + HasTakeGroupList = { 801, 802 }, + IsUnlock = true, + Progress = 63 + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Avatar/PacketGetAvatarTeamDataRsp.cs b/GameServer/Server/Packet/Send/Avatar/PacketGetAvatarTeamDataRsp.cs new file mode 100644 index 0000000..ca78954 --- /dev/null +++ b/GameServer/Server/Packet/Send/Avatar/PacketGetAvatarTeamDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Avatar; + +public class PacketGetAvatarTeamDataRsp : BasePacket +{ + public PacketGetAvatarTeamDataRsp() : base(CmdIds.GetAvatarTeamDataRsp) + { + var proto = new GetAvatarTeamDataRsp // TODO: Add Lineup + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Avatar/PacketUpdateCustomAvatarTeamRsp.cs b/GameServer/Server/Packet/Send/Avatar/PacketUpdateCustomAvatarTeamRsp.cs new file mode 100644 index 0000000..26b1867 --- /dev/null +++ b/GameServer/Server/Packet/Send/Avatar/PacketUpdateCustomAvatarTeamRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Avatar; + +public class PacketUpdateCustomAvatarTeamRsp : BasePacket +{ + public PacketUpdateCustomAvatarTeamRsp() : base(CmdIds.UpdateCustomAvatarTeamRsp) + { + var proto = new UpdateCustomAvatarTeamRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Battle/PacketGetBuffEffectRsp.cs b/GameServer/Server/Packet/Send/Battle/PacketGetBuffEffectRsp.cs new file mode 100644 index 0000000..23e819c --- /dev/null +++ b/GameServer/Server/Packet/Send/Battle/PacketGetBuffEffectRsp.cs @@ -0,0 +1,27 @@ +using Google.Protobuf.Collections; +using KianaBH.KcpSharp; +using KianaBH.Proto; +using KianaBH.Util.Extensions; + +namespace KianaBH.GameServer.Server.Packet.Send.Battle; + +public class PacketGetBuffEffectRsp : BasePacket +{ + public PacketGetBuffEffectRsp(RepeatedField EffectIdList) : base(CmdIds.GetBuffEffectRsp) + { + var proto = new GetBuffEffectRsp + { + AuraEffectList = { EffectIdList }, + EffectList = + { + EffectIdList.Select(id => new BuffEffect + { + EffectId = id, + EndTime = (uint)Extensions.GetUnixSec() + 3600, + }) + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/BattlePass/PacketGetBattlePassMissionPanelRsp.cs b/GameServer/Server/Packet/Send/BattlePass/PacketGetBattlePassMissionPanelRsp.cs new file mode 100644 index 0000000..2b3686d --- /dev/null +++ b/GameServer/Server/Packet/Send/BattlePass/PacketGetBattlePassMissionPanelRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.BattlePass; + +public class PacketGetBattlePassMissionPanelRsp : BasePacket +{ + public PacketGetBattlePassMissionPanelRsp() : base(CmdIds.GetBattlePassMissionPanelRsp) + { + var proto = new GetBattlePassMissionPanelRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Challenge/PacketGetChallengeStepCompensationInfoRsp.cs b/GameServer/Server/Packet/Send/Challenge/PacketGetChallengeStepCompensationInfoRsp.cs new file mode 100644 index 0000000..a545e69 --- /dev/null +++ b/GameServer/Server/Packet/Send/Challenge/PacketGetChallengeStepCompensationInfoRsp.cs @@ -0,0 +1,38 @@ +using KianaBH.Data; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Challenge; + +public class PacketGetChallengeStepCompensationInfoRsp : BasePacket +{ + public PacketGetChallengeStepCompensationInfoRsp() : base(CmdIds.GetChallengeStepCompensationInfoRsp) + { + var proto = new GetChallengeStepCompensationInfoRsp + { + CompensationList = + { + GameData.StepMissionCompensationData.Values + .Select(m => new ChallengeStepCompensation + { + CompensationId = m.CompensationId, + IsTakeCompensation = true, + NewChallengeStepCompensationList = + { + m.NewChallengeStepIdList.Select(id => new StepCompensation { StepId = id }) + }, + OldChallengeStepCompensationList = + { + m.OldChallengeStepIdList.Select(id => new StepCompensation { StepId = id }) + }, + MainlineStepCompensationList = + { + m.MainLineStepIdList.Select(id => new StepCompensation { StepId = id }) + }, + }) + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Chapter/PacketChapterArkGetDataRsp.cs b/GameServer/Server/Packet/Send/Chapter/PacketChapterArkGetDataRsp.cs new file mode 100644 index 0000000..ba804da --- /dev/null +++ b/GameServer/Server/Packet/Send/Chapter/PacketChapterArkGetDataRsp.cs @@ -0,0 +1,44 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Chapter; + +public class PacketChapterArkGetDataRsp : BasePacket +{ + public PacketChapterArkGetDataRsp(uint ChapterId) : base(CmdIds.ChapterArkGetDataRsp) + { + // TODO: Hardcoded + + var avatarList = new List { 1, 2, 3, 4, 5 }; + + var proto = new ChapterArkGetDataRsp + { + ChapterArk = new ChapterArk + { + ChapterId = ChapterId, + AvatarList = { avatarList }, + IsFinishOpening = true, + RoleList = + { + avatarList.Select(id => new ChapterArkRoleInfo + { + Id = id, + Level = 30 + }) + }, + SkillList = + { + Enumerable.Range(1, 5) + .SelectMany(i => Enumerable.Range(1, 12) + .Select(j => new ChapterArkSkillInfo + { + Id = (uint)(i * 100 + j), + Level = (uint)(j > 3 ? 3 : 1) + })) + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Chapter/PacketChapterBwWorldGetDataRsp.cs b/GameServer/Server/Packet/Send/Chapter/PacketChapterBwWorldGetDataRsp.cs new file mode 100644 index 0000000..a47d0d3 --- /dev/null +++ b/GameServer/Server/Packet/Send/Chapter/PacketChapterBwWorldGetDataRsp.cs @@ -0,0 +1,20 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Chapter; + +public class PacketChapterBwWorldGetDataRsp : BasePacket +{ + public PacketChapterBwWorldGetDataRsp(uint ChapterId) : base(CmdIds.ChapterBwWorldGetDataRsp) + { + var proto = new ChapterBwWorldGetDataRsp + { + ChapterBwWorld = new ChapterBwWorld + { + ChapterId = ChapterId + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Chapter/PacketChapterGroupGetDataRsp.cs b/GameServer/Server/Packet/Send/Chapter/PacketChapterGroupGetDataRsp.cs new file mode 100644 index 0000000..4cda38f --- /dev/null +++ b/GameServer/Server/Packet/Send/Chapter/PacketChapterGroupGetDataRsp.cs @@ -0,0 +1,35 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; +using KianaBH.Data; + +namespace KianaBH.GameServer.Server.Packet.Send.Chapter; + +public class PacketChapterGroupGetDataRsp : BasePacket +{ + public PacketChapterGroupGetDataRsp() : base(CmdIds.ChapterGroupGetDataRsp) + { + var proto = new ChapterGroupGetDataRsp + { + IsAll = true, + ChapterGroupList = + { + GameData.ChapterGroupConfigData.Select(x => new ChapterGroup + { + Id = (uint)x.Key, + SiteList = + { + x.Value.SiteList.Select(siteId => new ChapterGroupSite + { + ChapterId = (uint)siteId, + SiteId = (uint)siteId, + Status = ChapterGroupSiteStatus.Finished, + }) + } + + }) + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Chapter/PacketChapterKnightRichManGetDataRsp.cs b/GameServer/Server/Packet/Send/Chapter/PacketChapterKnightRichManGetDataRsp.cs new file mode 100644 index 0000000..c2a1b54 --- /dev/null +++ b/GameServer/Server/Packet/Send/Chapter/PacketChapterKnightRichManGetDataRsp.cs @@ -0,0 +1,19 @@ +using Azure.Core; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Chapter; + +public class PacketChapterKnightRichManGetDataRsp : BasePacket +{ + public PacketChapterKnightRichManGetDataRsp(uint RichManId) : base(CmdIds.ChapterKnightRichManGetDataRsp) + { + var proto = new ChapterKnightRichManGetDataRsp + { + RichManId = RichManId, + Retcode = ChapterKnightRichManGetDataRsp.Types.Retcode.NotOpen, // set to NotOpen to prevent null reference error pop up + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Chapter/PacketGetEliteChapterCompensationInfoRsp.cs b/GameServer/Server/Packet/Send/Chapter/PacketGetEliteChapterCompensationInfoRsp.cs new file mode 100644 index 0000000..5ffc262 --- /dev/null +++ b/GameServer/Server/Packet/Send/Chapter/PacketGetEliteChapterCompensationInfoRsp.cs @@ -0,0 +1,25 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Chapter; + +public class PacketGetEliteChapterCompensationInfoRsp : BasePacket +{ + public PacketGetEliteChapterCompensationInfoRsp() : base(CmdIds.GetEliteChapterCompensationInfoRsp) + { + // TODO: Hardcoded + var proto = new GetEliteChapterCompensationInfoRsp + { + ChapterList = + { + Enumerable.Range(1, 35).Select(i => new EliteChapterCompensationInfo + { + ChapterId = (uint)i, + HasTakenCompensation = true + }) + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Chat/PacketChatworldBeastGetActivityRsp.cs b/GameServer/Server/Packet/Send/Chat/PacketChatworldBeastGetActivityRsp.cs new file mode 100644 index 0000000..b7cabfd --- /dev/null +++ b/GameServer/Server/Packet/Send/Chat/PacketChatworldBeastGetActivityRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Chat; + +public class PacketChatworldBeastGetActivityRsp : BasePacket +{ + public PacketChatworldBeastGetActivityRsp() : base(CmdIds.ChatworldBeastGetActivityRsp) + { + var proto = new ChatworldBeastGetActivityRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Chat/PacketChatworldGetActivityScheduleRsp.cs b/GameServer/Server/Packet/Send/Chat/PacketChatworldGetActivityScheduleRsp.cs new file mode 100644 index 0000000..db79e90 --- /dev/null +++ b/GameServer/Server/Packet/Send/Chat/PacketChatworldGetActivityScheduleRsp.cs @@ -0,0 +1,19 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Chat; + +public class PacketChatworldGetActivityScheduleRsp : BasePacket +{ + public PacketChatworldGetActivityScheduleRsp() : base(CmdIds.ChatworldGetActivityScheduleRsp) + { + // TODO: Hardcoded + + var proto = new ChatworldGetActivityScheduleRsp + { + SceneId = 111 + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Chat/PacketChatworldGetPrayInfoRsp.cs b/GameServer/Server/Packet/Send/Chat/PacketChatworldGetPrayInfoRsp.cs new file mode 100644 index 0000000..99b9cec --- /dev/null +++ b/GameServer/Server/Packet/Send/Chat/PacketChatworldGetPrayInfoRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Chat; + +public class PacketChatworldGetPrayInfoRsp : BasePacket +{ + public PacketChatworldGetPrayInfoRsp() : base(CmdIds.ChatworldGetPrayInfoRsp) + { + var proto = new ChatworldGetPrayInfoRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Chat/PacketEnterWorldChatroomRsp.cs b/GameServer/Server/Packet/Send/Chat/PacketEnterWorldChatroomRsp.cs new file mode 100644 index 0000000..246637b --- /dev/null +++ b/GameServer/Server/Packet/Send/Chat/PacketEnterWorldChatroomRsp.cs @@ -0,0 +1,19 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Chat; + +public class PacketEnterWorldChatroomRsp : BasePacket +{ + public PacketEnterWorldChatroomRsp() : base(CmdIds.EnterWorldChatroomRsp) + { + // TODO: Hardcoded + var proto = new EnterWorldChatroomRsp + { + ChatroomId = 1, + PlayerNum = 69 + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Chat/PacketGetChatgroupListRsp.cs b/GameServer/Server/Packet/Send/Chat/PacketGetChatgroupListRsp.cs new file mode 100644 index 0000000..a3f78c9 --- /dev/null +++ b/GameServer/Server/Packet/Send/Chat/PacketGetChatgroupListRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Chat; + +public class PacketGetChatgroupListRsp : BasePacket +{ + public PacketGetChatgroupListRsp() : base(CmdIds.GetChatgroupListRsp) + { + var proto = new GetChatgroupListRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Client/PacketClientReportRsp.cs b/GameServer/Server/Packet/Send/Client/PacketClientReportRsp.cs new file mode 100644 index 0000000..a95c851 --- /dev/null +++ b/GameServer/Server/Packet/Send/Client/PacketClientReportRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Client; + +public class PacketClientReportRsp : BasePacket +{ + public PacketClientReportRsp() : base(CmdIds.ClientReportRsp) + { + var proto = new ClientReportRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Client/PacketGetClientDataRsp.cs b/GameServer/Server/Packet/Send/Client/PacketGetClientDataRsp.cs new file mode 100644 index 0000000..a213080 --- /dev/null +++ b/GameServer/Server/Packet/Send/Client/PacketGetClientDataRsp.cs @@ -0,0 +1,21 @@ +using KianaBH.GameServer.Game.Player; +using KianaBH.KcpSharp; +using KianaBH.Proto; +using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database; + +namespace KianaBH.GameServer.Server.Packet.Send.Client; + +public class PacketGetClientDataRsp : BasePacket +{ + public PacketGetClientDataRsp(uint id, ClientDataType type, PlayerInstance player) : base(CmdIds.GetClientDataRsp) + { + var proto = new GetClientDataRsp + { + Id = id, + Type = type, + ClientDataList = { player.ClientData!.Clients.Select(x => x.ToProto()) } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Client/PacketGetClientMailDataRsp.cs b/GameServer/Server/Packet/Send/Client/PacketGetClientMailDataRsp.cs new file mode 100644 index 0000000..38fd136 --- /dev/null +++ b/GameServer/Server/Packet/Send/Client/PacketGetClientMailDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Client; + +public class PacketGetClientMailDataRsp : BasePacket +{ + public PacketGetClientMailDataRsp() : base(CmdIds.GetClientMailDataRsp) + { + var proto = new GetClientMailDataRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Client/PacketGetClientSettingRsp.cs b/GameServer/Server/Packet/Send/Client/PacketGetClientSettingRsp.cs new file mode 100644 index 0000000..6d9e523 --- /dev/null +++ b/GameServer/Server/Packet/Send/Client/PacketGetClientSettingRsp.cs @@ -0,0 +1,18 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Client; + +public class PacketGetClientSettingRsp : BasePacket +{ + public PacketGetClientSettingRsp(uint ClientSettingType) : base(CmdIds.GetClientSettingRsp) + { + var proto = new GetClientSettingRsp + { + ClientSettingType = ClientSettingType, + IsWeeklyGuideSwitchOn = true, + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Client/PacketReportClientDataVersionRsp.cs b/GameServer/Server/Packet/Send/Client/PacketReportClientDataVersionRsp.cs new file mode 100644 index 0000000..3575798 --- /dev/null +++ b/GameServer/Server/Packet/Send/Client/PacketReportClientDataVersionRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Client; + +public class PacketReportClientDataVersionRsp : BasePacket +{ + public PacketReportClientDataVersionRsp(uint version) : base(CmdIds.ReportClientDataVersionRsp) + { + var proto = new ReportClientDataVersionRsp + { + ServerVersion = version + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Client/PacketSetClientDataRsp.cs b/GameServer/Server/Packet/Send/Client/PacketSetClientDataRsp.cs new file mode 100644 index 0000000..11a32de --- /dev/null +++ b/GameServer/Server/Packet/Send/Client/PacketSetClientDataRsp.cs @@ -0,0 +1,18 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Client; + +public class PacketSetClientDataRsp : BasePacket +{ + public PacketSetClientDataRsp(uint Id, ClientDataType Type) : base(CmdIds.SetClientDataRsp) + { + var proto = new SetClientDataRsp + { + Id = Id, + Type = Type + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Collection/PacketGetCollectionListRsp.cs b/GameServer/Server/Packet/Send/Collection/PacketGetCollectionListRsp.cs new file mode 100644 index 0000000..58dff5b --- /dev/null +++ b/GameServer/Server/Packet/Send/Collection/PacketGetCollectionListRsp.cs @@ -0,0 +1,21 @@ +using KianaBH.Data; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Collection; + +public class PacketGetCollectionListRsp : BasePacket +{ + public PacketGetCollectionListRsp() : base(CmdIds.GetCollectionListRsp) + { + var collections = GameData.CollectionData.Keys.Select(key => (uint)key); + + var proto = new GetCollectionListRsp + { + CollectionIdList = { collections }, + ActiveCollectionIdList = { collections }, + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/DLC/PacketGetDLCAvatarRsp.cs b/GameServer/Server/Packet/Send/DLC/PacketGetDLCAvatarRsp.cs new file mode 100644 index 0000000..5b24f13 --- /dev/null +++ b/GameServer/Server/Packet/Send/DLC/PacketGetDLCAvatarRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.DLC; + +public class PacketGetDLCAvatarRsp : BasePacket +{ + public PacketGetDLCAvatarRsp() : base(CmdIds.GetDLCAvatarRsp) + { + var proto = new GetDLCAvatarRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/DLC/PacketGetDLCRsp.cs b/GameServer/Server/Packet/Send/DLC/PacketGetDLCRsp.cs new file mode 100644 index 0000000..86db1f9 --- /dev/null +++ b/GameServer/Server/Packet/Send/DLC/PacketGetDLCRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.DLC; + +public class PacketGetDLCRsp : BasePacket +{ + public PacketGetDLCRsp() : base(CmdIds.GetDLCRsp) + { + var proto = new GetDLCRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/DLC/PacketGetDLCTowerRsp.cs b/GameServer/Server/Packet/Send/DLC/PacketGetDLCTowerRsp.cs new file mode 100644 index 0000000..fc32d5e --- /dev/null +++ b/GameServer/Server/Packet/Send/DLC/PacketGetDLCTowerRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.DLC; + +public class PacketGetDLCTowerRsp : BasePacket +{ + public PacketGetDLCTowerRsp() : base(CmdIds.GetDLCTowerRsp) + { + var proto = new GetDLCTowerRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dorm/PacketGetDormDataRsp.cs b/GameServer/Server/Packet/Send/Dorm/PacketGetDormDataRsp.cs new file mode 100644 index 0000000..9e26900 --- /dev/null +++ b/GameServer/Server/Packet/Send/Dorm/PacketGetDormDataRsp.cs @@ -0,0 +1,218 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dorm; + +public class PacketGetDormDataRsp : BasePacket +{ + public PacketGetDormDataRsp() : base(CmdIds.GetDormDataRsp) + { + // TODO: Hardcoded + var proto = new GetDormDataRsp + { + DepotFurnitureList = + { + new DepotFurniture { Id = 140001, Num = 1 }, + new DepotFurniture { Id = 140002, Num = 1 }, + new DepotFurniture { Id = 140003, Num = 1 }, + new DepotFurniture { Id = 140010, Num = 1 }, + new DepotFurniture { Id = 140012, Num = 1 }, + new DepotFurniture { Id = 140013, Num = 1 }, + new DepotFurniture { Id = 140015, Num = 1 }, + new DepotFurniture { Id = 140016, Num = 1 }, + new DepotFurniture { Id = 140201, Num = 1 }, + new DepotFurniture { Id = 140202, Num = 1 }, + new DepotFurniture { Id = 140213, Num = 1 }, + new DepotFurniture { Id = 140215, Num = 1 }, + new DepotFurniture { Id = 140216, Num = 1 }, + new DepotFurniture { Id = 140601, Num = 1 }, + new DepotFurniture { Id = 140603, Num = 1 }, + new DepotFurniture { Id = 140801, Num = 1 }, + new DepotFurniture { Id = 140802, Num = 1 }, + new DepotFurniture { Id = 140806, Num = 1 }, + new DepotFurniture { Id = 140810, Num = 1 }, + new DepotFurniture { Id = 140812, Num = 1 }, + new DepotFurniture { Id = 140813, Num = 1 }, + new DepotFurniture { Id = 140814, Num = 1 }, + new DepotFurniture { Id = 140815, Num = 1 }, + new DepotFurniture { Id = 140816, Num = 1 }, + new DepotFurniture { Id = 140817, Num = 1 }, + new DepotFurniture { Id = 140818, Num = 1 }, + new DepotFurniture { Id = 140819, Num = 1 }, + new DepotFurniture { Id = 140820, Num = 1 }, + new DepotFurniture { Id = 140822, Num = 1 }, + new DepotFurniture { Id = 141501, Num = 1 }, + new DepotFurniture { Id = 141601, Num = 1 }, + new DepotFurniture { Id = 141606, Num = 1 }, + new DepotFurniture { Id = 141615, Num = 1 }, + new DepotFurniture { Id = 141619, Num = 1 }, + new DepotFurniture { Id = 141620, Num = 1 }, + new DepotFurniture { Id = 141621, Num = 1 }, + new DepotFurniture { Id = 141622, Num = 1 }, + new DepotFurniture { Id = 141701, Num = 1 }, + new DepotFurniture { Id = 141702, Num = 1 }, + new DepotFurniture { Id = 141703, Num = 1 }, + new DepotFurniture { Id = 141704, Num = 1 }, + new DepotFurniture { Id = 141709, Num = 1 }, + new DepotFurniture { Id = 141713, Num = 1 }, + new DepotFurniture { Id = 141801, Num = 1 }, + new DepotFurniture { Id = 141802, Num = 1 }, + new DepotFurniture { Id = 141804, Num = 1 }, + new DepotFurniture { Id = 141805, Num = 1 }, + new DepotFurniture { Id = 141807, Num = 1 }, + new DepotFurniture { Id = 141808, Num = 1 }, + new DepotFurniture { Id = 141809, Num = 1 }, + new DepotFurniture { Id = 141810, Num = 1 }, + new DepotFurniture { Id = 141811, Num = 1 }, + new DepotFurniture { Id = 141812, Num = 1 }, + new DepotFurniture { Id = 141814, Num = 1 }, + new DepotFurniture { Id = 141815, Num = 1 }, + new DepotFurniture { Id = 146120, Num = 1 }, + new DepotFurniture { Id = 146620, Num = 1 } + }, + EventList = + { + new DormEvent { AvatarId = 101, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 102, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 103, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 104, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 105, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 106, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 111, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 112, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 113, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 114, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 201, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 202, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 203, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 204, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 205, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 206, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 211, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 212, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 213, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 214, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 301, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 302, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 303, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 311, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 312, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 313, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 314, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 317, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 401, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 402, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 403, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 404, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 411, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 412, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 421, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 422, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 501, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 502, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 503, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 504, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 506, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 507, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 511, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 601, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 602, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 603, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 604, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 611, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 612, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 702, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 703, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 705, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 706, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 711, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 712, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 713, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 714, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 801, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 802, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 803, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 2201, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 2202, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 2401, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 2501, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 2601, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 2801, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 2901, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 2902, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 3101, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 3201, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 3301, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 3501, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 3601, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 3701, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 20201, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 20301, EventIdList = { 10007, 10011 } }, + new DormEvent { AvatarId = 20401, EventIdList = { 10007, 10011 } } + }, + HouseList = + { + new DormHouse + { + Id = 101, + Level = 39, + Name = "HitLey", + RoomList = + { + new DormRoom + { + AvatarList = { 412, 705, 802, 2201, 2401 }, + FurnitureList = + { + new Furniture { Id = 140015 }, + new Furniture { Id = 140013 }, + new Furniture { Id = 140016 } + }, + Id = 1011 + }, + new DormRoom + { + AvatarList = { 105, 113, 205, 313, 612 }, + FurnitureList = + { + new Furniture { Id = 140808, PosX = 1, PosY = 22 }, + new Furniture { Id = 140809, Location = 3, PosX = 7, PosY = 5 }, + new Furniture { Direction = 3, Id = 140803, PosX = 1, PosY = 15 }, + new Furniture { Direction = 1, Id = 140811, PosX = 5, PosY = 14 }, + new Furniture { Id = 141610, PosX = 2, PosY = 8 }, + new Furniture { Id = 140812, PosX = 4, PosY = 4 }, + new Furniture { Id = 141806, PosX = 9, PosY = 7 }, + new Furniture { Id = 141803, PosX = 11, PosY = 12 }, + new Furniture { Id = 140821, Location = 2, PosX = 7, PosY = 3 }, + new Furniture { Id = 140002, PosX = 26, PosY = 2 }, + new Furniture { Id = 140804, PosX = 24, PosY = 17 }, + new Furniture { Id = 140805, PosX = 25, PosY = 15 }, + new Furniture { Id = 140807, PosX = 23, PosY = 5 }, + new Furniture { Id = 140825 }, + new Furniture { Id = 140824 }, + new Furniture { Id = 140823 } + }, + Id = 1012 + }, + new DormRoom + { + FurnitureList = + { + new Furniture { Id = 140015 }, + new Furniture { Id = 140013 }, + new Furniture { Id = 140016 } + }, + Id = 1013 + } + } + } + }, + IsAllowVisit = true, + ShowHouse = 101, + ShowRoom = 1012, + VisitAvatar = 101 + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetPlotListRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetPlotListRsp.cs new file mode 100644 index 0000000..66a69a1 --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetPlotListRsp.cs @@ -0,0 +1,4285 @@ +using KianaBH.Data; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetPlotListRsp : BasePacket +{ + public PacketGetPlotListRsp() : base(CmdIds.GetPlotListRsp) + { + //var proto = new GetPlotListRsp + //{ + // PlotList = { GameData.RandomPlotData.Keys.Select(key => (uint)key) } + //}; + + //TODO: Hardcoded + + var proto = new GetPlotListRsp + { + PlotList = + { + 40285, + 40287, + 40288, + 40289, + 40290, + 40291, + 40292, + 40293, + 40294, + 40295, + 40296, + 40297, + 40300, + 40301, + 40303, + 40306, + 40307, + 40308, + 40309, + 40310, + 40311, + 40312, + 40313, + 40314, + 40315, + 40316, + 40317, + 40318, + 40319, + 40321, + 40322, + 40324, + 40325, + 40326, + 40327, + 40329, + 40330, + 40331, + 40334, + 40336, + 40337, + 40338, + 40339, + 40340, + 40341, + 40342, + 40343, + 40344, + 40345, + 40346, + 40347, + 40348, + 40349, + 40350, + 40351, + 40371, + 40372, + 40373, + 40374, + 40375, + 40376, + 40377, + 40388, + 40389, + 40390, + 40391, + 40392, + 40393, + 40394, + 40395, + 40396, + 40397, + 40398, + 40399, + 40400, + 40401, + 40402, + 40403, + 40404, + 40405, + 40406, + 40420, + 40421, + 40422, + 40423, + 40424, + 40425, + 40426, + 40427, + 40428, + 40429, + 40430, + 40431, + 40432, + 40433, + 40434, + 40435, + 40436, + 40437, + 40438, + 40439, + 40440, + 40441, + 40442, + 40443, + 40444, + 40445, + 40446, + 40447, + 40448, + 40449, + 40450, + 40451, + 40452, + 40453, + 40454, + 40455, + 40456, + 40457, + 40458, + 40459, + 40460, + 40461, + 40462, + 40463, + 40480, + 40546, + 40548, + 40549, + 40550, + 40551, + 40552, + 40553, + 40554, + 40556, + 40558, + 40559, + 40560, + 40561, + 40562, + 40564, + 40565, + 40566, + 40575, + 40576, + 40577, + 40578, + 40579, + 40580, + 40581, + 40582, + 40583, + 40584, + 40585, + 40586, + 40587, + 40588, + 40589, + 40590, + 40591, + 40592, + 40594, + 40595, + 40597, + 40598, + 40602, + 40603, + 40606, + 40607, + 40608, + 40609, + 40610, + 40611, + 40612, + 40613, + 40614, + 40615, + 40616, + 40618, + 40619, + 40620, + 40621, + 40622, + 40640, + 40641, + 40645, + 40646, + 40647, + 40648, + 40649, + 40650, + 40651, + 40652, + 40654, + 40656, + 40726, + 40729, + 40730, + 40731, + 40732, + 40733, + 40736, + 40739, + 40740, + 40741, + 40742, + 40743, + 40744, + 40746, + 40747, + 40748, + 40749, + 40750, + 40752, + 40753, + 40754, + 40755, + 40756, + 40757, + 40759, + 40760, + 40761, + 40762, + 40763, + 40764, + 40797, + 40798, + 40799, + 40800, + 40801, + 40802, + 40803, + 40804, + 40805, + 40806, + 40807, + 40808, + 40809, + 40810, + 40811, + 40812, + 40813, + 40814, + 40815, + 40816, + 40817, + 40818, + 40819, + 40820, + 40821, + 40822, + 40823, + 40824, + 40825, + 40826, + 40828, + 40829, + 40830, + 40831, + 40832, + 40833, + 40863, + 40864, + 40865, + 40866, + 40867, + 40868, + 40869, + 40870, + 40871, + 40873, + 40874, + 40875, + 40876, + 40877, + 40878, + 40879, + 40880, + 40881, + 40883, + 40884, + 40885, + 40886, + 40887, + 40888, + 40889, + 40890, + 40891, + 40892, + 40893, + 40894, + 40895, + 40896, + 40897, + 40898, + 40899, + 40900, + 40901, + 40902, + 40903, + 40907, + 40908, + 40909, + 40911, + 40913, + 40914, + 40915, + 40916, + 40917, + 40918, + 40919, + 40920, + 40921, + 40922, + 40923, + 40924, + 40925, + 40926, + 40927, + 40929, + 40931, + 40933, + 40934, + 40935, + 40936, + 40938, + 40940, + 40941, + 40942, + 40943, + 40944, + 40945, + 40946, + 40947, + 40948, + 40949, + 40951, + 40955, + 40956, + 40957, + 40958, + 40959, + 40960, + 40961, + 40962, + 40963, + 40964, + 40965, + 40968, + 40969, + 40970, + 40971, + 40972, + 40973, + 40975, + 40976, + 40977, + 40978, + 40979, + 40980, + 40991, + 40992, + 48500, + 48501, + 48502, + 48504, + 48505, + 48506, + 48507, + 48510, + 48511, + 48514, + 48515, + 48518, + 48519, + 48520, + 48522, + 48523, + 48526, + 48527, + 48528, + 48529, + 48530, + 48531, + 48532, + 48533, + 48535, + 48536, + 48537, + 48538, + 48539, + 48540, + 48541, + 48542, + 48543, + 48544, + 48545, + 48546, + 48547, + 48548, + 48549, + 48550, + 48563, + 48564, + 48565, + 48566, + 48567, + 48568, + 48569, + 48570, + 48571, + 48572, + 48573, + 48574, + 48575, + 48576, + 48578, + 48579, + 48580, + 48583, + 48601, + 48602, + 48603, + 48604, + 48605, + 48606, + 48607, + 48608, + 48646, + 48649, + 48650, + 48651, + 48652, + 48653, + 48654, + 48655, + 48656, + 48657, + 48658, + 48659, + 48660, + 48661, + 48662, + 48663, + 48664, + 48665, + 48667, + 48668, + 48669, + 48670, + 48671, + 48672, + 48673, + 48674, + 48675, + 48676, + 48677, + 48678, + 48679, + 48680, + 48681, + 48682, + 48683, + 48693, + 48694, + 48698, + 48699, + 48700, + 48701, + 48702, + 48704, + 48705, + 48706, + 48707, + 48708, + 48709, + 48710, + 48711, + 48712, + 48713, + 48714, + 48715, + 48716, + 48717, + 48718, + 48719, + 48720, + 48721, + 48722, + 48723, + 48724, + 48725, + 48726, + 48727, + 48728, + 48729, + 48730, + 48731, + 48732, + 48733, + 48738, + 48740, + 48741, + 48742, + 48743, + 48744, + 48745, + 48746, + 48747, + 48749, + 48750, + 48751, + 48752, + 48753, + 48754, + 48755, + 48757, + 48758, + 48761, + 48762, + 48765, + 48766, + 48767, + 48779, + 48780, + 48781, + 48782, + 48783, + 48784, + 48785, + 48790, + 48791, + 48792, + 48793, + 48795, + 48796, + 48797, + 48798, + 48800, + 48803, + 48804, + 48805, + 48807, + 48808, + 48809, + 48810, + 48812, + 48813, + 48814, + 48815, + 48817, + 48819, + 48820, + 48821, + 48822, + 48823, + 48824, + 48825, + 48826, + 48827, + 48828, + 48830, + 48831, + 48832, + 48833, + 48834, + 48835, + 48836, + 48837, + 48838, + 48839, + 48841, + 48842, + 48847, + 48851, + 48852, + 48853, + 48856, + 48866, + 48867, + 48868, + 48869, + 48871, + 48872, + 48873, + 48874, + 48875, + 48876, + 48877, + 48878, + 48879, + 48880, + 48881, + 48882, + 48883, + 48884, + 48885, + 48886, + 48887, + 48888, + 48889, + 48890, + 48891, + 48893, + 48894, + 48895, + 48896, + 48897, + 48898, + 48899, + 48900, + 48901, + 48902, + 48903, + 48904, + 48905, + 48906, + 48907, + 48908, + 48910, + 48912, + 48913, + 48920, + 48921, + 48922, + 48923, + 48924, + 48925, + 48926, + 48928, + 48931, + 48932, + 48933, + 48934, + 48935, + 48936, + 48937, + 48938, + 48940, + 48941, + 48943, + 48944, + 48945, + 48946, + 48947, + 48948, + 48949, + 48950, + 48951, + 48952, + 48953, + 48954, + 48955, + 48956, + 48957, + 48965, + 48966, + 48967, + 48968, + 48969, + 48970, + 48971, + 48972, + 48973, + 48974, + 48975, + 48976, + 48977, + 48978, + 48980, + 48981, + 48983, + 48984, + 49002, + 49003, + 49004, + 49005, + 49007, + 49008, + 49009, + 49012, + 49013, + 49014, + 49015, + 49016, + 49017, + 49019, + 49020, + 49021, + 49022, + 49023, + 49024, + 49026, + 49027, + 49028, + 49029, + 49030, + 49032, + 49033, + 49034, + 49035, + 49036, + 49037, + 49038, + 49039, + 49040, + 49041, + 49042, + 49043, + 49044, + 49045, + 49047, + 49048, + 49051, + 49052, + 49053, + 49055, + 49056, + 49057, + 49058, + 49060, + 49068, + 49069, + 49070, + 49071, + 49072, + 49073, + 49074, + 49075, + 49076, + 49077, + 49079, + 49082, + 49083, + 49084, + 49085, + 49086, + 49087, + 49088, + 49089, + 49090, + 49091, + 49092, + 49093, + 49094, + 49096, + 49097, + 49098, + 49099, + 49100, + 49102, + 49103, + 49104, + 49105, + 49106, + 49108, + 49109, + 49110, + 49111, + 49112, + 49113, + 49120, + 49122, + 49123, + 49124, + 49125, + 49126, + 49127, + 49128, + 49129, + 49130, + 49131, + 49132, + 49133, + 49135, + 49136, + 49147, + 49148, + 49149, + 49150, + 49151, + 49152, + 49153, + 49154, + 49155, + 49156, + 49157, + 49160, + 49161, + 49162, + 49163, + 49164, + 49165, + 49166, + 49167, + 49168, + 49169, + 49170, + 49171, + 49172, + 49173, + 49174, + 49175, + 49176, + 49177, + 49178, + 49179, + 49180, + 49181, + 49182, + 49183, + 49187, + 49188, + 49190, + 49191, + 49192, + 49193, + 49194, + 49195, + 49196, + 49197, + 49198, + 49199, + 49200, + 49201, + 49204, + 49205, + 49206, + 49208, + 49210, + 49211, + 49213, + 49214, + 49215, + 49216, + 49217, + 49218, + 49219, + 49220, + 49221, + 49222, + 49231, + 49232, + 49233, + 49234, + 49235, + 49236, + 49237, + 49238, + 49239, + 49240, + 49241, + 49242, + 49243, + 49244, + 49245, + 49246, + 49247, + 49248, + 49257, + 49258, + 49290, + 49325, + 49326, + 49329, + 49331, + 49333, + 49334, + 49335, + 49337, + 49338, + 49340, + 49345, + 49346, + 49347, + 49348, + 49350, + 49351, + 49352, + 49353, + 49354, + 49355, + 49356, + 49357, + 49358, + 49359, + 49362, + 49363, + 49366, + 49367, + 49370, + 49371, + 49372, + 49373, + 49374, + 49375, + 49376, + 49377, + 49378, + 49379, + 49380, + 49381, + 49382, + 49383, + 49384, + 49385, + 49386, + 49387, + 49388, + 49389, + 49390, + 49391, + 49393, + 49394, + 49395, + 49399, + 49400, + 49401, + 49402, + 49403, + 49405, + 49406, + 49410, + 49411, + 49412, + 49414, + 49415, + 49421, + 49422, + 49423, + 49424, + 49425, + 49426, + 49427, + 49428, + 49430, + 49431, + 49432, + 49433, + 49434, + 49435, + 49436, + 49438, + 49439, + 49440, + 49441, + 49442, + 49443, + 49444, + 49445, + 49446, + 49447, + 49448, + 49449, + 49450, + 49451, + 49452, + 49453, + 49454, + 49456, + 49457, + 49458, + 49459, + 49460, + 49461, + 49462, + 49463, + 49464, + 49465, + 49466, + 49467, + 49506, + 49507, + 49508, + 49509, + 49510, + 49511, + 49512, + 49513, + 49514, + 49515, + 49516, + 49517, + 49518, + 49519, + 49520, + 49521, + 49522, + 49524, + 49525, + 49526, + 49531, + 49532, + 49533, + 49534, + 49535, + 49536, + 49537, + 49538, + 49539, + 49540, + 49541, + 49542, + 49543, + 49544, + 49545, + 49546, + 49547, + 49548, + 49549, + 49550, + 49551, + 49552, + 49553, + 49561, + 49562, + 49563, + 49567, + 49571, + 49572, + 49573, + 49580, + 49581, + 49582, + 49584, + 49585, + 49586, + 49587, + 49589, + 49590, + 49591, + 49592, + 49593, + 49594, + 49595, + 49596, + 49597, + 49598, + 49599, + 49600, + 49601, + 49602, + 49603, + 49604, + 49605, + 49606, + 49608, + 49609, + 49610, + 49611, + 49612, + 49614, + 49615, + 49616, + 49619, + 49620, + 49622, + 49623, + 49624, + 49625, + 49626, + 49627, + 49628, + 49629, + 49630, + 49631, + 49632, + 49633, + 49634, + 49635, + 49636, + 49637, + 49638, + 49639, + 49640, + 49641, + 49642, + 49643, + 49644, + 49649, + 49650, + 49651, + 49652, + 49654, + 49655, + 49656, + 49658, + 49659, + 49660, + 49661, + 49662, + 49663, + 49665, + 49666, + 49667, + 49668, + 49669, + 49671, + 49673, + 49674, + 49675, + 49676, + 49678, + 49679, + 49680, + 49681, + 49682, + 49684, + 49685, + 49686, + 49687, + 49688, + 49689, + 49691, + 49692, + 49693, + 49694, + 49695, + 49697, + 49698, + 49699, + 49700, + 49701, + 49702, + 49703, + 49704, + 49707, + 49709, + 49710, + 49711, + 49713, + 49714, + 49715, + 49716, + 49718, + 49719, + 49721, + 49724, + 49725, + 49726, + 49727, + 49728, + 49729, + 49730, + 49732, + 49733, + 49736, + 49739, + 49741, + 49742, + 49743, + 49744, + 49749, + 49750, + 49751, + 49752, + 49753, + 49754, + 49755, + 49756, + 49757, + 49758, + 49759, + 49760, + 49761, + 49763, + 49764, + 49765, + 49767, + 49768, + 49770, + 49771, + 49772, + 49773, + 49774, + 49775, + 49776, + 49777, + 49778, + 49779, + 49781, + 49782, + 49783, + 49784, + 49786, + 49788, + 49789, + 49790, + 49791, + 49792, + 49793, + 49795, + 49797, + 49798, + 49799, + 49800, + 49801, + 49802, + 49803, + 49804, + 49805, + 49806, + 49807, + 49809, + 49810, + 49811, + 49812, + 49813, + 49814, + 49815, + 49816, + 49817, + 49818, + 49819, + 49820, + 49821, + 49822, + 49823, + 49824, + 49825, + 49826, + 49827, + 49828, + 49829, + 49830, + 49831, + 49832, + 49833, + 49834, + 49840, + 49842, + 49843, + 49844, + 49845, + 49846, + 49847, + 49848, + 49849, + 49850, + 49851, + 49853, + 49854, + 49855, + 49856, + 49857, + 49858, + 49859, + 49860, + 49861, + 49862, + 49863, + 49865, + 49866, + 49867, + 49868, + 49869, + 49870, + 49871, + 49872, + 49873, + 49874, + 49876, + 49877, + 49878, + 49879, + 49880, + 49881, + 49882, + 49883, + 49884, + 49885, + 49886, + 49887, + 49888, + 49889, + 49890, + 49891, + 49892, + 49893, + 49894, + 49895, + 49896, + 49897, + 49898, + 49899, + 49900, + 49901, + 49902, + 49903, + 49904, + 49909, + 49910, + 49911, + 49912, + 49913, + 49915, + 49916, + 49917, + 49918, + 49919, + 49920, + 49921, + 49922, + 49923, + 49924, + 49926, + 49927, + 49928, + 49930, + 49931, + 49932, + 49933, + 49935, + 49938, + 49941, + 49942, + 49943, + 49944, + 49945, + 49946, + 49947, + 49948, + 49949, + 49950, + 49951, + 49953, + 49954, + 49955, + 49956, + 49957, + 49959, + 49960, + 49961, + 49962, + 49963, + 49964, + 49965, + 49966, + 49968, + 49969, + 49972, + 49976, + 49977, + 49978, + 49979, + 49981, + 49984, + 49985, + 49986, + 49988, + 49989, + 49990, + 49991, + 49992, + 49993, + 49994, + 49995, + 49997, + 50001, + 50002, + 50003, + 50004, + 50005, + 50006, + 50009, + 50010, + 50012, + 50013, + 50014, + 50015, + 50016, + 50017, + 50018, + 50019, + 50020, + 50021, + 50022, + 50023, + 50092, + 50093, + 51001, + 51002, + 51003, + 51004, + 51005, + 51006, + 51008, + 51009, + 51010, + 51011, + 51012, + 51013, + 51016, + 52022, + 52028, + 54000, + 54001, + 54002, + 54003, + 54004, + 54005, + 54006, + 54007, + 54009, + 54010, + 54011, + 54012, + 54013, + 54014, + 54015, + 54016, + 54017, + 54018, + 54019, + 54020, + 54021, + 54022, + 54023, + 54024, + 54025, + 54026, + 54027, + 54028, + 54029, + 54031, + 54032, + 54033, + 54034, + 54035, + 54036, + 54037, + 54038, + 54039, + 54041, + 54043, + 54044, + 54046, + 54048, + 54049, + 54050, + 54059, + 54060, + 54061, + 54062, + 54063, + 54064, + 54065, + 54066, + 54067, + 54068, + 54069, + 54070, + 54071, + 54072, + 54073, + 54074, + 54075, + 54076, + 54077, + 54078, + 54079, + 54080, + 54081, + 54082, + 54083, + 54084, + 54085, + 54086, + 54087, + 54088, + 54089, + 54090, + 54091, + 54092, + 54093, + 54094, + 54095, + 54096, + 54097, + 54098, + 54101, + 54102, + 54103, + 54105, + 54107, + 54108, + 54109, + 54110, + 54113, + 54114, + 54115, + 54116, + 54117, + 54118, + 54119, + 54121, + 54123, + 54124, + 54125, + 54126, + 54127, + 54131, + 54132, + 54134, + 54136, + 54137, + 54138, + 54139, + 54140, + 54142, + 54143, + 54144, + 54145, + 54147, + 54149, + 54150, + 54152, + 54154, + 54155, + 54156, + 54157, + 54158, + 54159, + 54160, + 54162, + 54165, + 54166, + 54167, + 54170, + 54171, + 54173, + 54174, + 54175, + 54176, + 54177, + 54178, + 54179, + 54180, + 54181, + 54182, + 54183, + 54184, + 54185, + 54187, + 54188, + 54193, + 54195, + 54197, + 54198, + 54199, + 54201, + 54202, + 54203, + 54204, + 54205, + 54206, + 54207, + 54211, + 54212, + 54215, + 54216, + 54217, + 54218, + 54219, + 54220, + 54221, + 54222, + 54223, + 54224, + 54226, + 54227, + 54228, + 54229, + 54230, + 54231, + 54232, + 54234, + 54241, + 54242, + 54243, + 54244, + 54245, + 54246, + 54247, + 54248, + 54249, + 54250, + 54251, + 54252, + 54253, + 54254, + 54255, + 54256, + 54257, + 54258, + 54259, + 54260, + 54261, + 54262, + 54263, + 54264, + 54265, + 54266, + 54267, + 54268, + 54269, + 54270, + 54271, + 54272, + 54273, + 54274, + 54275, + 54276, + 54277, + 54278, + 54279, + 54280, + 54281, + 54282, + 54283, + 54284, + 54285, + 54286, + 54287, + 54288, + 54289, + 54290, + 54291, + 54292, + 54293, + 54294, + 54295, + 54296, + 54297, + 54298, + 54299, + 54300, + 54301, + 54302, + 54303, + 54304, + 54305, + 54306, + 54307, + 54308, + 54309, + 54310, + 54311, + 54312, + 54313, + 54315, + 54316, + 54317, + 54318, + 54319, + 54320, + 54321, + 54322, + 54323, + 54324, + 54325, + 54326, + 54327, + 54328, + 54329, + 54330, + 54332, + 54333, + 54334, + 54335, + 54336, + 54337, + 54338, + 54339, + 54340, + 54341, + 54342, + 54343, + 54344, + 54345, + 54346, + 54347, + 54348, + 54349, + 54350, + 54351, + 54352, + 54353, + 54354, + 54355, + 54356, + 54357, + 54358, + 54359, + 54360, + 54361, + 54362, + 54363, + 54364, + 54365, + 54366, + 54367, + 54368, + 54369, + 54370, + 54371, + 54372, + 54373, + 54374, + 54375, + 54376, + 54377, + 54378, + 54379, + 54380, + 54381, + 54382, + 54383, + 54384, + 54385, + 54386, + 54387, + 54388, + 54389, + 54390, + 54391, + 54392, + 54393, + 54394, + 54395, + 54396, + 54397, + 54398, + 54399, + 54400, + 54401, + 54402, + 54403, + 54404, + 54405, + 54406, + 54407, + 54408, + 54409, + 54410, + 54411, + 54412, + 54413, + 54414, + 54415, + 54416, + 54417, + 54418, + 54419, + 54420, + 54421, + 54422, + 54423, + 54424, + 54425, + 54426, + 54427, + 54428, + 54429, + 54430, + 54431, + 54432, + 54433, + 54434, + 54435, + 54436, + 54437, + 54438, + 54439, + 54440, + 54441, + 54442, + 54443, + 54444, + 54445, + 54446, + 54447, + 54448, + 54449, + 54450, + 54451, + 54452, + 54453, + 54454, + 54455, + 54456, + 54457, + 54458, + 54459, + 54460, + 54461, + 54462, + 54463, + 54464, + 54465, + 54466, + 54467, + 54468, + 54469, + 54470, + 54471, + 54472, + 54473, + 54474, + 54475, + 54476, + 54477, + 54478, + 54479, + 54480, + 54481, + 54482, + 54483, + 54484, + 54485, + 54486, + 54487, + 54488, + 54489, + 54490, + 54491, + 54492, + 54493, + 54494, + 54495, + 54496, + 54497, + 54498, + 54499, + 54500, + 54501, + 54502, + 54503, + 54504, + 54505, + 54506, + 54507, + 54508, + 54509, + 54510, + 54511, + 54512, + 54513, + 54514, + 54515, + 54516, + 54517, + 54518, + 54519, + 54520, + 54521, + 54522, + 54523, + 54524, + 54525, + 54526, + 54527, + 54528, + 54529, + 54530, + 54531, + 54532, + 54533, + 54534, + 54535, + 54536, + 54537, + 54538, + 54539, + 54540, + 54541, + 54542, + 54543, + 54544, + 54545, + 54546, + 54547, + 54548, + 54549, + 54550, + 54551, + 54552, + 54553, + 54554, + 54555, + 54556, + 54557, + 54558, + 54559, + 54560, + 54561, + 54562, + 54563, + 54564, + 54565, + 54566, + 54567, + 54568, + 54569, + 54570, + 54571, + 54572, + 54573, + 54574, + 54575, + 54576, + 54577, + 54578, + 54579, + 54581, + 54582, + 54583, + 54584, + 54585, + 54586, + 54587, + 54588, + 54589, + 54590, + 54591, + 54593, + 54594, + 54595, + 54596, + 54597, + 54598, + 54599, + 54600, + 54601, + 54602, + 54603, + 54604, + 54605, + 54606, + 54613, + 54620, + 54621, + 54622, + 54623, + 54624, + 54625, + 54626, + 54627, + 54628, + 54629, + 54630, + 54631, + 54632, + 54633, + 54634, + 54635, + 54636, + 54637, + 54638, + 54643, + 54644, + 54645, + 54646, + 54647, + 54648, + 54649, + 54650, + 54651, + 54652, + 54653, + 54654, + 54657, + 54658, + 54660, + 54661, + 54663, + 54666, + 54667, + 54668, + 54669, + 54670, + 54671, + 54672, + 54676, + 54677, + 54678, + 54679, + 54680, + 54682, + 54683, + 54684, + 54685, + 54686, + 54687, + 54688, + 54690, + 54691, + 54692, + 54694, + 54695, + 54696, + 54697, + 54698, + 54699, + 54700, + 54701, + 54702, + 54703, + 54704, + 54705, + 54706, + 54707, + 54710, + 54711, + 54712, + 54713, + 54714, + 54715, + 54716, + 54717, + 54719, + 54720, + 54721, + 54722, + 54723, + 54724, + 54726, + 54727, + 54728, + 54729, + 54730, + 54732, + 54733, + 54734, + 54735, + 54736, + 54738, + 54740, + 54742, + 54745, + 54755, + 54756, + 54757, + 54758, + 54759, + 54781, + 54782, + 54783, + 54784, + 54785, + 54786, + 54787, + 54789, + 54790, + 54791, + 54792, + 54793, + 54794, + 54795, + 54797, + 54798, + 54799, + 54800, + 54801, + 54802, + 54803, + 54804, + 54805, + 54806, + 54807, + 54808, + 54809, + 54810, + 54811, + 54812, + 54813, + 54814, + 54815, + 54816, + 54817, + 54818, + 54819, + 54820, + 54821, + 54822, + 54823, + 54824, + 54825, + 54826, + 54827, + 54828, + 54829, + 54830, + 54831, + 54832, + 54833, + 54834, + 54835, + 54836, + 54837, + 54838, + 54843, + 54845, + 54846, + 54847, + 54852, + 54853, + 54854, + 54855, + 54856, + 54857, + 54858, + 54859, + 54860, + 54861, + 54862, + 54863, + 54864, + 54865, + 54866, + 54867, + 54868, + 54869, + 54870, + 54871, + 54873, + 54874, + 54875, + 54876, + 54877, + 54878, + 54880, + 54881, + 54882, + 54883, + 54884, + 54885, + 54886, + 54887, + 54888, + 54889, + 54890, + 54891, + 54892, + 54893, + 54894, + 54895, + 54896, + 54897, + 54898, + 55000, + 55001, + 55002, + 55006, + 55007, + 55008, + 55009, + 55010, + 55011, + 55012, + 55013, + 55014, + 55015, + 55016, + 55017, + 55018, + 55019, + 55020, + 55021, + 55023, + 55024, + 55025, + 55026, + 55027, + 55028, + 55029, + 55030, + 55031, + 55032, + 55033, + 55034, + 55035, + 55036, + 55037, + 55038, + 55041, + 55042, + 55043, + 55044, + 55045, + 55046, + 55047, + 55048, + 55049, + 55050, + 55051, + 55052, + 55053, + 55054, + 55055, + 55056, + 55058, + 55059, + 55060, + 55061, + 55062, + 55063, + 55064, + 55065, + 55066, + 55067, + 55068, + 55069, + 55070, + 55071, + 55072, + 55073, + 55074, + 55075, + 55076, + 55077, + 55078, + 55079, + 55080, + 55081, + 55082, + 55083, + 55084, + 55085, + 55086, + 55087, + 55088, + 55089, + 55090, + 55091, + 55092, + 55093, + 55094, + 55095, + 55096, + 55097, + 55098, + 55099, + 55100, + 55101, + 55102, + 55103, + 55104, + 55105, + 55106, + 55107, + 55108, + 55109, + 55110, + 55111, + 55112, + 55113, + 55114, + 55117, + 55118, + 55119, + 55120, + 55121, + 55122, + 55123, + 55124, + 55125, + 55126, + 55130, + 55131, + 55132, + 55133, + 55134, + 55135, + 55136, + 55137, + 55140, + 55141, + 55142, + 55143, + 55144, + 55145, + 55146, + 55160, + 55161, + 55162, + 55163, + 55164, + 55165, + 55166, + 55167, + 55168, + 55169, + 55170, + 55171, + 55172, + 55173, + 55174, + 55175, + 55176, + 55177, + 55178, + 55179, + 55181, + 55182, + 55183, + 55195, + 55196, + 55197, + 55198, + 55199, + 55200, + 55202, + 55203, + 55204, + 55205, + 55206, + 55208, + 55209, + 55210, + 55211, + 55212, + 55213, + 55214, + 55215, + 55216, + 55217, + 55218, + 55219, + 55220, + 55221, + 55222, + 55223, + 55224, + 55225, + 55226, + 55227, + 55228, + 55229, + 55230, + 55231, + 55232, + 55233, + 55234, + 55235, + 55236, + 55237, + 55238, + 55239, + 55240, + 55241, + 55242, + 55243, + 55244, + 55245, + 55246, + 55247, + 55248, + 55249, + 55250, + 55251, + 55252, + 55253, + 55254, + 55257, + 55258, + 55259, + 55260, + 55261, + 55262, + 55264, + 55265, + 55266, + 55267, + 55268, + 55269, + 55270, + 55271, + 55272, + 55273, + 55274, + 55275, + 55276, + 55277, + 55278, + 55279, + 55280, + 55282, + 55284, + 55286, + 55288, + 55290, + 55291, + 55292, + 55293, + 55294, + 55295, + 55296, + 55396, + 55397, + 55398, + 55399, + 55400, + 55401, + 55407, + 55408, + 55409, + 55410, + 55417, + 55418, + 55422, + 55423, + 55424, + 55425, + 55426, + 55427, + 55428, + 55429, + 55431, + 55432, + 55433, + 55434, + 55435, + 55436, + 55437, + 55439, + 55441, + 55442, + 55443, + 55444, + 55445, + 55448, + 55449, + 55450, + 55451, + 55452, + 55453, + 55455, + 55456, + 55457, + 55459, + 55460, + 55461, + 55462, + 55463, + 55464, + 55465, + 55466, + 55467, + 55468, + 55469, + 55470, + 55471, + 55472, + 55474, + 55481, + 55482, + 55483, + 55484, + 55485, + 55486, + 55487, + 55488, + 55489, + 55490, + 55491, + 55492, + 55494, + 55495, + 55496, + 55497, + 55498, + 55499, + 55500, + 55501, + 55502, + 55504, + 55505, + 55506, + 55507, + 55508, + 55509, + 55510, + 55511, + 55512, + 55513, + 55514, + 55515, + 55526, + 55527, + 55528, + 55529, + 55530, + 55531, + 55532, + 55533, + 55534, + 55535, + 55537, + 55538, + 55539, + 55540, + 55541, + 55542, + 55543, + 55544, + 55545, + 55546, + 55547, + 55548, + 55549, + 55550, + 55551, + 55552, + 55553, + 55554, + 55557, + 55558, + 55559, + 55560, + 55561, + 55562, + 55563, + 55564, + 55565, + 55566, + 55567, + 55568, + 55569, + 55570, + 55572, + 55574, + 55575, + 55576, + 55577, + 55578, + 55579, + 55580, + 55581, + 55582, + 55583, + 55584, + 55585, + 55586, + 55587, + 55588, + 55598, + 55601, + 55603, + 55604, + 55605, + 55606, + 55607, + 55608, + 55609, + 55610, + 55611, + 55612, + 55613, + 55616, + 55617, + 55618, + 55619, + 55620, + 55621, + 55622, + 55623, + 55624, + 55625, + 55626, + 55627, + 55629, + 55630, + 55631, + 55632, + 55633, + 55634, + 55635, + 55636, + 55637, + 55638, + 55639, + 55640, + 55641, + 55642, + 55643, + 55644, + 55645, + 55646, + 55647, + 55648, + 55649, + 55650, + 55651, + 55652, + 55653, + 55654, + 55655, + 55656, + 55657, + 55658, + 55659, + 55660, + 55661, + 55662, + 55663, + 55664, + 55665, + 55666, + 55667, + 55668, + 55669, + 55670, + 55671, + 55672, + 55673, + 55674, + 55675, + 55676, + 55677, + 55678, + 55679, + 55680, + 55681, + 55682, + 55683, + 55684, + 55685, + 55686, + 55687, + 55688, + 55689, + 55690, + 55691, + 55692, + 55693, + 55694, + 55695, + 55696, + 55697, + 55698, + 55699, + 55700, + 55701, + 55702, + 55703, + 55704, + 55705, + 55706, + 55707, + 55708, + 55709, + 55710, + 55711, + 55712, + 55713, + 55714, + 55715, + 55716, + 55717, + 55718, + 55719, + 55720, + 55721, + 55722, + 55723, + 55724, + 55725, + 55726, + 55727, + 55728, + 55729, + 55730, + 55731, + 55732, + 55733, + 55734, + 55735, + 55736, + 55737, + 55738, + 55739, + 55740, + 55741, + 55742, + 55743, + 55744, + 55745, + 55746, + 55748, + 55749, + 55750, + 55751, + 55752, + 55753, + 55755, + 55756, + 55757, + 55758, + 55759, + 55760, + 55761, + 55762, + 55763, + 55764, + 55765, + 55766, + 55767, + 55768, + 55769, + 55770, + 55771, + 55772, + 55773, + 55774, + 55775, + 55776, + 55777, + 55778, + 55779, + 55780, + 55781, + 55782, + 55783, + 55784, + 55785, + 55786, + 55787, + 55788, + 55789, + 55790, + 55791, + 55794, + 55795, + 55796, + 55797, + 55798, + 55799, + 55800, + 55801, + 55802, + 55803, + 55804, + 55805, + 55806, + 55807, + 55808, + 55809, + 55810, + 55811, + 55812, + 55813, + 55814, + 55815, + 55816, + 55817, + 55818, + 55819, + 55820, + 55821, + 55822, + 55823, + 55824, + 55825, + 55826, + 55827, + 55828, + 55829, + 55830, + 55831, + 55832, + 55833, + 55834, + 55835, + 55836, + 55837, + 55838, + 55839, + 55840, + 55841, + 55842, + 55843, + 55844, + 55845, + 55846, + 55847, + 55848, + 55849, + 55850, + 55851, + 55852, + 55853, + 55854, + 55855, + 55856, + 55857, + 55858, + 55859, + 55860, + 55861, + 55862, + 55863, + 55864, + 55865, + 55866, + 55867, + 55868, + 55869, + 55870, + 55871, + 55872, + 55873, + 55874, + 55875, + 55876, + 55877, + 55878, + 55879, + 55880, + 55881, + 55882, + 55883, + 55884, + 55885, + 55886, + 55887, + 55888, + 55889, + 55890, + 55891, + 55892, + 55893, + 55894, + 55895, + 55896, + 55897, + 55898, + 55899, + 55900, + 55901, + 55903, + 55904, + 55905, + 55906, + 55907, + 55908, + 55909, + 55910, + 55911, + 55912, + 55913, + 55918, + 55919, + 55926, + 55927, + 55929, + 55930, + 55931, + 55932, + 55933, + 55934, + 55935, + 55936, + 55937, + 55943, + 55944, + 55945, + 55946, + 55947, + 55951, + 55952, + 55953, + 55954, + 55955, + 55956, + 55957, + 55958, + 55959, + 55960, + 55961, + 55962, + 55963, + 55964, + 55965, + 55966, + 55967, + 55968, + 55969, + 55970, + 55971, + 55972, + 55973, + 55974, + 55975, + 55976, + 55977, + 55978, + 55979, + 55981, + 55982, + 55983, + 55984, + 55985, + 55986, + 55988, + 55989, + 55990, + 55991, + 55992, + 55993, + 55994, + 55995, + 56012, + 56013, + 56014, + 56015, + 56016, + 56017, + 56018, + 56019, + 56020, + 56024, + 56025, + 56028, + 56037, + 56038, + 56039, + 56045, + 56046, + 56048, + 56049, + 56051, + 56053, + 56055, + 56057, + 56058, + 56059, + 56086, + 56100, + 56109, + 56110, + 56111, + 56112, + 56113, + 56114, + 56115, + 56116, + 56117, + 56118, + 56119, + 56120, + 56121, + 56122, + 56123, + 56124, + 56125, + 56126, + 56127, + 56128, + 56129, + 56130, + 56131, + 56132, + 56133, + 56134, + 56135, + 56136, + 56137, + 56138, + 56139, + 56140, + 56141, + 56142, + 56143, + 56144, + 56145, + 56146, + 56147, + 56161, + 56162, + 56163, + 56164, + 56165, + 56166, + 56167, + 56168, + 56169, + 56170, + 56171, + 56172, + 56173, + 56174, + 56175, + 56176, + 56177, + 56178, + 56179, + 56180, + 56181, + 56182, + 56183, + 56184, + 56185, + 56187, + 56188, + 56189, + 56190, + 56191, + 56192, + 56193, + 56194, + 56195, + 56196, + 56197, + 56198, + 56199, + 56200, + 56201, + 56202, + 56203, + 56204, + 56205, + 56206, + 56207, + 56208, + 56209, + 56211, + 56212, + 56213, + 56214, + 56215, + 56216, + 56217, + 56218, + 56219, + 56220, + 56222, + 56223, + 56224, + 56225, + 56226, + 56227, + 56228, + 56229, + 56231, + 56232, + 56233, + 56234, + 56235, + 56236, + 56237, + 56238, + 56239, + 56240, + 56241, + 56242, + 56243, + 56244, + 56245, + 56246, + 56247, + 56255, + 56256, + 56257, + 56258, + 56259, + 56260, + 56261, + 56262, + 56263, + 56264, + 56265, + 56267, + 56268, + 56269, + 56270, + 56271, + 56272, + 56273, + 56274, + 56275, + 56277, + 56278, + 56279, + 56280, + 56281, + 56282, + 56283, + 56284, + 56306, + 56307, + 56308, + 56309, + 56310, + 56311, + 56312, + 56313, + 56314, + 56315, + 56316, + 56317, + 56318, + 56319, + 56320, + 56321, + 56322, + 56323, + 56324, + 56325, + 56326, + 56327, + 56328, + 56329, + 56330, + 56331, + 56332, + 56333, + 56334, + 56336, + 56337, + 56338, + 56340, + 56341, + 56342, + 56343, + 56344, + 56345, + 56346, + 56347, + 56348, + 56349, + 56350, + 56351, + 56353, + 56354, + 56355, + 56356, + 56357, + 56358, + 56359, + 56360, + 56361, + 56362, + 56376, + 56377, + 56378, + 56379, + 56380, + 56381, + 56382, + 56384, + 56385, + 56386, + 56387, + 56388, + 56389, + 56390, + 56391, + 56392, + 56393, + 56394, + 56395, + 56396, + 56397, + 56398, + 56399, + 56400, + 56401, + 56402, + 56403, + 56404, + 56405, + 56416, + 56417, + 56418, + 56419, + 56420, + 56421, + 56422, + 56423, + 56424, + 56425, + 56426, + 56427, + 56428, + 56429, + 56430, + 56431, + 56432, + 56433, + 56435, + 56436, + 56437, + 56438, + 56439, + 56440, + 56441, + 56442, + 56443, + 56444, + 56445, + 56446, + 56447, + 56448, + 56449, + 56452, + 56455, + 56456, + 56457, + 56458, + 56459, + 56460, + 56461, + 56462, + 56463, + 56464, + 56465, + 56466, + 56467, + 56468, + 56469, + 56470, + 56471, + 56472, + 56473, + 56474, + 56475, + 56476, + 56477, + 56478, + 56479, + 56480, + 56481, + 56482, + 56483, + 56484, + 56485, + 56486, + 56487, + 56488, + 56491, + 56492, + 56493, + 56494, + 56495, + 56496, + 56497, + 56498, + 56499, + 56500, + 56501, + 56502, + 56503, + 56504, + 56505, + 56506, + 56507, + 56508, + 56509, + 56510, + 56511, + 56512, + 56513, + 56514, + 56515, + 56516, + 56517, + 56518, + 56519, + 56520, + 56521, + 56522, + 56523, + 56524, + 56525, + 56526, + 56527, + 56528, + 56529, + 56530, + 56532, + 56533, + 56534, + 56535, + 56536, + 56596, + 56597, + 56598, + 56599, + 56600, + 56601, + 56602, + 56603, + 56604, + 56605, + 56606, + 56607, + 56608, + 56612, + 56613, + 56614, + 56615, + 56616, + 56617, + 56618, + 56619, + 56620, + 56621, + 56622, + 56623, + 56624, + 56625, + 56626, + 56627, + 56628, + 56629, + 56630, + 56631, + 56632, + 56633, + 56634, + 56635, + 56636, + 56637, + 56638, + 56639, + 56640, + 56641, + 56642, + 56643, + 56644, + 56645, + 56646, + 56647, + 56648, + 56649, + 56650, + 56651, + 56652, + 56653, + 56654, + 56655, + 56656, + 56657, + 56658, + 56659, + 56663, + 56664, + 56665, + 56666, + 56667, + 56668, + 56669, + 56670, + 56671, + 56672, + 56673, + 56674, + 56675, + 56676, + 56677, + 56678, + 56679, + 56680, + 56681, + 56682, + 56683, + 56684, + 56685, + 56686, + 56687, + 56688, + 56689, + 56690, + 56691, + 56692, + 56693, + 56694, + 56695, + 56696, + 56697, + 56698, + 56699, + 56700, + 56701, + 56702, + 56703, + 56704, + 56705, + 56706, + 56708, + 56722, + 56723, + 56725, + 56772, + 56773, + 56774, + 56775, + 56776, + 56777, + 56778, + 56780, + 56781, + 56782, + 56870, + 56871, + 56872, + 56874, + 56875, + 56876, + 56877, + 56878, + 56879, + 56880, + 56881, + 56882, + 56883, + 56884, + 56885, + 56886, + 56887, + 56888, + 56889, + 56890, + 56891, + 56892, + 56893, + 56894, + 56895, + 56896, + 56897, + 56898, + 56899, + 56900, + 56901, + 56903, + 56904, + 56905, + 56906, + 56907, + 56908, + 56909, + 56910, + 56911, + 56912, + 56913, + 56914, + 56915, + 56916, + 56917, + 56918, + 56919, + 56920, + 56921, + 56922, + 56923, + 56924, + 56925, + 56926, + 56927, + 56928, + 56929, + 56930, + 56931, + 56933, + 56934, + 56935, + 56936, + 56937, + 56938, + 56939, + 56940, + 56941, + 56942, + 56944, + 56961, + 56963, + 56971, + 56972, + 56973, + 56974, + 56975, + 56976, + 56977, + 56978, + 56979, + 56980, + 56981, + 56982, + 56983, + 56984, + 56985, + 56987, + 56988, + 56989, + 56990, + 56991, + 56992, + 56993, + 56994, + 56995, + 56996, + 56997, + 56998, + 56999, + 57001, + 57002, + 57003, + 57004, + 57005, + 57006, + 57007, + 57009, + 57010, + 57012, + 57015, + 57016, + 57017, + 57018, + 57019, + 57020, + 57021, + 57022, + 57023, + 57024, + 57025, + 57026, + 57027, + 57028, + 57029, + 57030, + 57031, + 57032, + 57033, + 57034, + 57035, + 57036, + 57037, + 57038, + 57039, + 57040, + 57041, + 57042, + 57043, + 57044, + 57045, + 57046, + 57047, + 57048, + 57049, + 57050, + 57051, + 57052, + 57053, + 57054, + 57055, + 57056, + 57057, + 57058, + 57059, + 57063, + 57064, + 57065, + 57066, + 57067, + 57072, + 57073, + 57074, + 57075, + 57076, + 57077, + 57078, + 57079, + 57080, + 57081, + 57082, + 57084, + 57085, + 57086, + 57087, + 57088, + 57089, + 57090, + 57091, + 57092, + 57093, + 57094, + 57095, + 57096, + 57097, + 57098, + 57099, + 57100, + 57101, + 57102, + 57103, + 57104, + 57105, + 57106, + 57107, + 57108, + 57109, + 57110, + 57111, + 57112, + 57113, + 57115, + 57116, + 57131, + 57132, + 57133, + 57134, + 57137, + 57138, + 57139, + 57140, + 57141, + 57142, + 57143, + 57144, + 57145, + 57146, + 57147, + 57148, + 57149, + 57150, + 57151, + 57152, + 57153, + 57154, + 57155, + 57156, + 57157, + 57158, + 57159, + 57160, + 57161, + 57162, + 57163, + 57164, + 57165, + 57166, + 57167, + 57168, + 57173, + 57174, + 57175, + 57176, + 57177, + 57178, + 57179, + 57180, + 57181, + 57182, + 57183, + 57184, + 57185, + 57187, + 57188, + 57189, + 57190, + 57191, + 57192, + 57193, + 57194, + 57195, + 57196, + 57197, + 57198, + 57199, + 57200, + 57201, + 57202, + 57204, + 57205, + 57206, + 57207, + 57210, + 57211, + 57212, + 57213, + 57214, + 57215, + 57216, + 57217, + 57218, + 57219, + 57221, + 57222, + 57223, + 57224, + 57225, + 57226, + 57227, + 57228, + 57229, + 57230, + 57231, + 57232, + 57233, + 57234, + 57236, + 57252, + 57256, + 57257, + 57258, + 57260, + 57261, + 57262, + 57272, + 57273, + 57274, + 57275, + 57276, + 57277, + 57278, + 57279, + 57280, + 57281, + 57282, + 57283, + 57284, + 57285, + 57286, + 57287, + 57288, + 57289, + 57290, + 57291, + 57292, + 57293, + 57294, + 57295, + 57296, + 57297, + 57298, + 57299, + 57300, + 57301, + 57302, + 57303, + 57304, + 57305, + 57306, + 57307, + 57308, + 57311, + 57321, + 57322, + 57323, + 57324, + 57325, + 57326, + 57327, + 57328, + 57329, + 57330, + 57331, + 57333, + 57334, + 57335, + 57336, + 57337, + 57338, + 57339, + 57340, + 57341, + 57342, + 57343, + 57344, + 57345, + 57346, + 57347, + 57348, + 57349, + 57350, + 57351, + 57352, + 57353, + 57354, + 57355, + 57356, + 57357, + 57358, + 57359, + 57360, + 57361, + 57362, + 57363, + 57364, + 57365, + 57366, + 57367, + 57368, + 57369, + 57370, + 57371, + 57372, + 57373, + 57374, + 57376, + 57377, + 57378, + 57379, + 57380, + 57381, + 57382, + 57383, + 57384, + 57385, + 57386, + 57387, + 57388, + 57389, + 57390, + 57391, + 57392, + 57393, + 57394, + 57395, + 57396, + 57397, + 57398, + 57399, + 57400, + 57401, + 57402, + 57403, + 57404, + 57405, + 57406, + 57407, + 57426, + 57427, + 57428, + 57429, + 57430, + 57431, + 57432, + 57433, + 57434, + 57435, + 57436, + 57437, + 57438, + 57439, + 57440, + 57441, + 57442, + 57443, + 57444, + 57445, + 57446, + 57447, + 57448, + 57449, + 57450, + 57451, + 57452, + 57453, + 57454, + 57455, + 57456, + 57457, + 57458, + 57459, + 57460, + 57461, + 57462, + 57463, + 57464, + 57465, + 57466, + 57467, + 57468, + 57469, + 57470, + 57471, + 57472, + 57473, + 57474, + 57475, + 57476, + 57477, + 57478, + 57479, + 57480, + 57481, + 57482, + 57483, + 57484, + 57485, + 57486, + 57487, + 57488, + 57489, + 57490, + 57491, + 57492, + 57493, + 57494, + 57495, + 57496, + 57497, + 57498, + 57499, + 57500, + 57501, + 57502, + 57503, + 57504, + 57505, + 57506, + 57507, + 57508, + 57511, + 57525, + 57526, + 57527, + 57528, + 57529, + 57530, + 57531, + 57532, + 57533, + 57534, + 57535, + 57536, + 57537, + 57538, + 57539, + 57540, + 57541, + 57542, + 57543, + 57544, + 57545, + 57546, + 57547, + 57548, + 57549, + 57550, + 57551, + 57552, + 57553, + 57554, + 57555, + 57557, + 57558, + 57559, + 57560, + 57561, + 57562, + 57563, + 57564, + 57565, + 57566, + 57567, + 57568, + 57577, + 57578, + 57579, + 57580, + 57581, + 57582, + 57583, + 57584, + 57585, + 57586, + 57587, + 57588, + 57589, + 57590, + 57591, + 57592, + 57593, + 57594, + 57595, + 57596, + 57597, + 57598, + 57599, + 57600, + 57601, + 57602, + 57603, + 57604, + 57605, + 57606, + 57607, + 57608, + 57609, + 57627, + 57628, + 57629, + 57630, + 57631, + 57632, + 57633, + 57645, + 57646, + 57647, + 57648, + 57649, + 57650, + 57651, + 57652, + 57653, + 57654, + 57655, + 57656, + 57657, + 57658, + 57659, + 57660, + 57661, + 57662, + 57663, + 57664, + 57665, + 57666, + 57667, + 57668, + 57669, + 57670, + 57671, + 57672, + 57673, + 57674, + 57675, + 57676, + 57677, + 57678, + 57679, + 57680, + 57681, + 57682, + 57683, + 57684, + 57685, + 57686, + 57687, + 57688, + 57689, + 57690, + 57691, + 57692, + 57693, + 57694, + 57695, + 57696, + 57697, + 57698, + 57699, + 57700, + 57701, + 57702, + 57703, + 57704, + 57705, + 57706, + 57707, + 57708, + 57709, + 57710, + 57711, + 57712, + 57713, + 57714, + 57715, + 57716, + 57717, + 57718, + 57719, + 57720, + 57721, + 57722, + 57723, + 57724, + 57725, + 57726, + 57727, + 57728, + 57729, + 57730, + 57731, + 57732, + 57733, + 57734, + 57735, + 57736, + 57737, + 57738, + 57739, + 57740, + 57741, + 57742, + 57743, + 57744, + 57745, + 57746, + 57747, + 57748, + 57749, + 57750, + 57751, + 57752, + 57764, + 57891, + 58129, + 58493, + 58494, + 58546, + 58556, + 58557, + 58803, + 58806, + 58807, + 58808, + 58811, + 58814, + 58818, + 58819, + 59011, + 59012, + 59013, + 59016, + 59020, + 59022, + 59023, + 59024, + 59025, + 59026, + 60001, + 60002, + 60003, + 60004, + 60011, + 60012, + 60013, + 60014, + 60015, + 60016, + 80062, + 301041, + 301051, + 301061, + 301062, + 301081, + 301082, + 301101, + 301111, + 301121, + 301131, + 301132, + 301141, + 301151, + 302011, + 302012, + 302013, + 302021, + 302025, + 302026, + 302031, + 302032, + 302033, + 302034, + 302041, + 302051, + 302052, + 302061, + 302062, + 302071, + 302081, + 302091, + 302101, + 302111, + 302121, + 302122, + 302123, + 302124, + 302131, + 302132, + 302141, + 302142, + 302151, + 302152, + 302161, + 302162, + 302171, + 302172, + 302181, + 500260, + 500271, + 500281, + 500291, + 500301, + 500311, + 500330, + 500341, + 500351, + 500361, + 500370, + 500381, + 500390, + 500401, + 500430, + 500440, + 500451, + 500461, + 500471, + 500481, + 500491, + 500501, + 500521, + 500741, + 500750, + 500761, + 500770, + 500781, + 501511, + 502191, + 543300, + 543310, + 543320, + 543330, + 543340, + 543350, + 543360, + 543370, + 543380, + 543390, + 543400, + 543420, + 543430, + 543440, + 543450, + 543470, + 543480, + 543490, + 543500, + 543510, + 543520, + 543530, + 543540, + 543550, + 543560, + 543570, + 543580, + 543590, + 543600, + 543620, + 543630, + 543640, + 543650, + 543660, + 543670, + 543680 + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetPrivilegeInfoRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetPrivilegeInfoRsp.cs new file mode 100644 index 0000000..71ec56b --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetPrivilegeInfoRsp.cs @@ -0,0 +1,97 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetPrivilegeInfoRsp : BasePacket +{ + public PacketGetPrivilegeInfoRsp() : base(CmdIds.GetPrivilegeInfoRsp) + { + var proto = new GetPrivilegeInfoRsp + { + PrivilegeList = + { + new PrivilegeInfo + { + ExpireTime = 1734001367, + PrivilegeId = 6, + RightInfoList = + { + new PrivilegeRightInfo + { + MaxUseTimes = 10, + NextAutoRefreshTime = 1730145600, + RightId = 4, + Type = 1 + } + } + }, + new PrivilegeInfo + { + ExpireTime = 1668139199, + PrivilegeId = 19, + RightInfoList = + { + new PrivilegeRightInfo + { + MaxUseTimes = 10, + NextAutoRefreshTime = 1730145600, + RightId = 17, + TotalUsedTimes = 10, + Type = 4 + } + } + }, + new PrivilegeInfo + { + ExpireTime = 1685678400, + PrivilegeId = 23, + RightInfoList = + { + new PrivilegeRightInfo + { + MaxUseTimes = 10, + NextAutoRefreshTime = 1730145600, + RightId = 21, + TotalUsedTimes = 10, + Type = 4 + } + } + }, + new PrivilegeInfo + { + ExpireTime = 1700798399, + PrivilegeId = 25, + RightInfoList = + { + new PrivilegeRightInfo + { + MaxUseTimes = 10, + NextAutoRefreshTime = 1730145600, + RightId = 23, + TotalUsedTimes = 10, + Type = 4 + } + } + }, + new PrivilegeInfo + { + ExpireTime = 1731643200, + PrivilegeId = 34, + RightInfoList = + { + new PrivilegeRightInfo + { + MaxUseTimes = 10, + NextAutoRefreshTime = 1730145600, + RightId = 32, + Type = 4 + } + } + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetProductListRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetProductListRsp.cs new file mode 100644 index 0000000..3270d24 --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetProductListRsp.cs @@ -0,0 +1,21 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; +using KianaBH.Util.Extensions; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetProductListRsp : BasePacket +{ + public PacketGetProductListRsp() : base(CmdIds.GetProductListRsp) + { + var time = (uint)Extensions.GetUnixSec(); + + var proto = new GetProductListRsp + { + NextRandomBoxProductRefreshTime = time + 3600 * 24, + NextLimitProductRefreshTime = time + 3600 * 24 + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetProductRecommendListRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetProductRecommendListRsp.cs new file mode 100644 index 0000000..9ae4e94 --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetProductRecommendListRsp.cs @@ -0,0 +1,20 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetProductRecommendListRsp : BasePacket +{ + public PacketGetProductRecommendListRsp() : base(CmdIds.GetProductRecommendListRsp) + { + var proto = new GetProductRecommendListRsp + { + RecommendList = + { + 16301720 + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetRaffleActivityRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetRaffleActivityRsp.cs new file mode 100644 index 0000000..d4100e2 --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetRaffleActivityRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetRaffleActivityRsp : BasePacket +{ + public PacketGetRaffleActivityRsp() : base(CmdIds.GetRaffleActivityRsp) + { + var proto = new GetRaffleActivityRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetRankScheduleDataRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetRankScheduleDataRsp.cs new file mode 100644 index 0000000..cbc0b2c --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetRankScheduleDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetRankScheduleDataRsp : BasePacket +{ + public PacketGetRankScheduleDataRsp() : base(CmdIds.GetRankScheduleDataRsp) + { + var proto = new GetRankScheduleDataRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetRecommendFriendListRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetRecommendFriendListRsp.cs new file mode 100644 index 0000000..4e76fbe --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetRecommendFriendListRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetRecommendFriendListRsp : BasePacket +{ + public PacketGetRecommendFriendListRsp() : base(CmdIds.GetRecommendFriendListRsp) + { + var proto = new GetRecommendFriendListRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetRecommendGoodsRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetRecommendGoodsRsp.cs new file mode 100644 index 0000000..51c346b --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetRecommendGoodsRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetRecommendGoodsRsp : BasePacket +{ + public PacketGetRecommendGoodsRsp() : base(CmdIds.GetRecommendGoodsRsp) + { + var proto = new GetRecommendGoodsRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetRewardLineActivityRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetRewardLineActivityRsp.cs new file mode 100644 index 0000000..97f782d --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetRewardLineActivityRsp.cs @@ -0,0 +1,27 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetRewardLineActivityRsp : BasePacket +{ + public PacketGetRewardLineActivityRsp() : base(CmdIds.GetRewardLineActivityRsp) + { + // TODO: Hardcoded + + var proto = new GetRewardLineActivityRsp + { + RewardLineActivityList = + { + Enumerable.Range(10, 4) // 1013 + .Concat([14, 15, 16, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39]) + .Concat(Enumerable.Range(45, 18)) // 4562 + .Concat([64, 65, 66, 67, 68, 69, 70, 71, 72]) + .Select(id => new RewardLineActivity { Id = (uint)id }) + .ToList() + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetRoomDataRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetRoomDataRsp.cs new file mode 100644 index 0000000..2ff4b74 --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetRoomDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetRoomDataRsp : BasePacket +{ + public PacketGetRoomDataRsp() : base(CmdIds.GetRoomDataRsp) + { + var proto = new GetRoomDataRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetRpgTaleRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetRpgTaleRsp.cs new file mode 100644 index 0000000..55704f3 --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetRpgTaleRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetRpgTaleRsp : BasePacket +{ + public PacketGetRpgTaleRsp() : base(CmdIds.GetRpgTaleRsp) + { + var proto = new GetRpgTaleRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetScratchTicketRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetScratchTicketRsp.cs new file mode 100644 index 0000000..c5e87be --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetScratchTicketRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetScratchTicketRsp : BasePacket +{ + public PacketGetScratchTicketRsp() : base(CmdIds.GetScratchTicketRsp) + { + var proto = new GetScratchTicketRsp + { + Retcode = GetScratchTicketRsp.Types.Retcode.ActivityNotOpen, + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetSecurityPasswordRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetSecurityPasswordRsp.cs new file mode 100644 index 0000000..e3270db --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetSecurityPasswordRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetSecurityPasswordRsp : BasePacket +{ + public PacketGetSecurityPasswordRsp() : base(CmdIds.GetSecurityPasswordRsp) + { + var proto = new GetSecurityPasswordRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetShopListRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetShopListRsp.cs new file mode 100644 index 0000000..553190a --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetShopListRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetShopListRsp : BasePacket +{ + public PacketGetShopListRsp() : base(CmdIds.GetShopListRsp) + { + var proto = new GetShopListRsp + { + IsAll = true, + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetShoppingMallListRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetShoppingMallListRsp.cs new file mode 100644 index 0000000..9c76501 --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetShoppingMallListRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetShoppingMallListRsp : BasePacket +{ + public PacketGetShoppingMallListRsp() : base(CmdIds.GetShoppingMallListRsp) + { + var proto = new GetShoppingMallListRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetSupportActivityRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetSupportActivityRsp.cs new file mode 100644 index 0000000..802d8f1 --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetSupportActivityRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetSupportActivityRsp : BasePacket +{ + public PacketGetSupportActivityRsp() : base(CmdIds.GetSupportActivityRsp) + { + var proto = new GetSupportActivityRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetSurveyDataRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetSurveyDataRsp.cs new file mode 100644 index 0000000..eb40ba1 --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetSurveyDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetSurveyDataRsp : BasePacket +{ + public PacketGetSurveyDataRsp() : base(CmdIds.GetSurveyDataRsp) + { + var proto = new GetSurveyDataRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetTowerRaidActivityRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetTowerRaidActivityRsp.cs new file mode 100644 index 0000000..ee6dcf5 --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetTowerRaidActivityRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetTowerRaidActivityRsp : BasePacket +{ + public PacketGetTowerRaidActivityRsp() : base(CmdIds.GetTowerRaidActivityRsp) + { + var proto = new GetTowerRaidActivityRsp + { + Retcode = GetTowerRaidActivityRsp.Types.Retcode.NotOpen, // set to NotOpen to prevent null reference error pop up + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetTradingCardActivityRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetTradingCardActivityRsp.cs new file mode 100644 index 0000000..731147d --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetTradingCardActivityRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetTradingCardActivityRsp : BasePacket +{ + public PacketGetTradingCardActivityRsp() : base(CmdIds.GetTradingCardActivityRsp) + { + var proto = new GetTradingCardActivityRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetTrialAvatarRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetTrialAvatarRsp.cs new file mode 100644 index 0000000..1437e00 --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetTrialAvatarRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetTrialAvatarRsp : BasePacket +{ + public PacketGetTrialAvatarRsp() : base(CmdIds.GetTrialAvatarRsp) + { + var proto = new GetTrialAvatarRsp + { + IsAllUpdate = true, + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetVipRewardDataRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetVipRewardDataRsp.cs new file mode 100644 index 0000000..99c1c8a --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetVipRewardDataRsp.cs @@ -0,0 +1,145 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetVipRewardDataRsp : BasePacket +{ + public PacketGetVipRewardDataRsp() : base(CmdIds.GetVipRewardDataRsp) + { + // TODO: Hardcoded + var proto = new GetVipRewardDataRsp + { + TotalPayHcoin = 17185, + VipRewardList = + { + new VipReward + { + IsSpecialShineList = { 1 }, + PayHcoin = 10, + RewardBatch = 1, + RewardIdList = { 2101, 2201 }, + SpecialRewardIdList = { 2101 }, + TakenRewardIdList = { 2101, 2201, 2251 }, + VipLevel = 1 + }, + new VipReward + { + IsSpecialShineList = { 1, 1 }, + PayHcoin = 300, + RewardBatch = 1, + RewardIdList = { 2002, 2102, 2302 }, + SpecialRewardIdList = { 2102, 2302 }, + TakenRewardIdList = { 2002, 2102, 2252, 2302 }, + VipLevel = 2 + }, + new VipReward + { + IsSpecialShineList = { 1, 1 }, + PayHcoin = 500, + RewardBatch = 1, + RewardIdList = { 2103, 2203, 2303 }, + SpecialRewardIdList = { 2103, 2303 }, + TakenRewardIdList = { 2103, 2203, 2253, 2303 }, + VipLevel = 3 + }, + new VipReward + { + IsSpecialShineList = { 1, 1 }, + PayHcoin = 1000, + RewardBatch = 1, + RewardIdList = { 2004, 2104, 2304 }, + SpecialRewardIdList = { 2104, 2304 }, + TakenRewardIdList = { 2004, 2104, 2254, 2304 }, + VipLevel = 4 + }, + new VipReward + { + IsSpecialShineList = { 1, 1 }, + PayHcoin = 2000, + RewardBatch = 1, + RewardIdList = { 2105, 2205, 2305 }, + SpecialRewardIdList = { 2105, 2305 }, + TakenRewardIdList = { 2105, 2205, 2255, 2305 }, + VipLevel = 5 + }, + new VipReward + { + IsSpecialShineList = { 1, 1 }, + PayHcoin = 5000, + RewardBatch = 1, + RewardIdList = { 2006, 2106, 2306 }, + SpecialRewardIdList = { 2106, 2306 }, + TakenRewardIdList = { 2006, 2106, 2256, 2306 }, + VipLevel = 6 + }, + new VipReward + { + IsSpecialShineList = { 1, 1 }, + PayHcoin = 10000, + RewardBatch = 1, + RewardIdList = { 2107, 2207, 2257, 2307 }, + SpecialRewardIdList = { 2107, 2307 }, + TakenRewardIdList = { 2107, 2207, 2257, 2307 }, + VipLevel = 7 + }, + new VipReward + { + IsSpecialShineList = { 1, 1 }, + PayHcoin = 20000, + RewardBatch = 1, + RewardIdList = { 2108, 2208, 2258, 2308 }, + SpecialRewardIdList = { 2108, 2308 }, + VipLevel = 8 + }, + new VipReward + { + IsSpecialShineList = { 1, 1 }, + PayHcoin = 50000, + RewardBatch = 1, + RewardIdList = { 2109, 2209, 2309 }, + SpecialRewardIdList = { 2109, 2309 }, + VipLevel = 9 + }, + new VipReward + { + IsSpecialShineList = { 1, 1, 1 }, + PayHcoin = 100000, + RewardBatch = 1, + RewardIdList = { 2110, 2210, 2310 }, + SpecialRewardIdList = { 2110, 2310 }, + VipLevel = 10 + }, + new VipReward + { + IsSpecialShineList = { 1, 1, 1 }, + PayHcoin = 150000, + RewardBatch = 1, + RewardIdList = { 2261, 2311 }, + SpecialRewardIdList = { 2311 }, + VipLevel = 11 + }, + new VipReward + { + IsSpecialShineList = { 1, 1, 1 }, + PayHcoin = 200000, + RewardBatch = 1, + RewardIdList = { 2262, 2312 }, + SpecialRewardIdList = { 2312 }, + VipLevel = 12 + }, + new VipReward + { + IsSpecialShineList = { 1 }, + PayHcoin = 250000, + RewardBatch = 1, + RewardIdList = { 2263, 2313 }, + SpecialRewardIdList = { 2313 }, + VipLevel = 13 + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Dummy/PacketGetVirtualAvatarGroupDetailRsp.cs b/GameServer/Server/Packet/Send/Dummy/PacketGetVirtualAvatarGroupDetailRsp.cs new file mode 100644 index 0000000..83d55dc --- /dev/null +++ b/GameServer/Server/Packet/Send/Dummy/PacketGetVirtualAvatarGroupDetailRsp.cs @@ -0,0 +1,41 @@ +using System.Security.Cryptography; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Dummy; + +public class PacketGetVirtualAvatarGroupDetailRsp : BasePacket +{ + public PacketGetVirtualAvatarGroupDetailRsp(uint GroupId) : base(CmdIds.GetVirtualAvatarGroupDetailRsp) + { + var proto = new GetVirtualAvatarGroupDetailRsp(); + + if (GroupId == 114) + { + proto.VirtualAvatarGroup = new VirtualAvatarGroup + { + GroupId = 114, + VirtualAvatarList = + { + new VirtualAvatar { VirtualAvatarId = 300001 }, + new VirtualAvatar { VirtualAvatarId = 300003 } + }, + VirtualAvatarTeamList = { 300001, 300003 } + }; + } + else if (GroupId == 111) + { + proto.VirtualAvatarGroup = new VirtualAvatarGroup + { + GroupId = 111, + VirtualAvatarList = + { + new VirtualAvatar { VirtualAvatarId = 300001 } + }, + VirtualAvatarTeamList = { 300001 } + }; + } + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Elf/PacketGetElfDataRsp.cs b/GameServer/Server/Packet/Send/Elf/PacketGetElfDataRsp.cs new file mode 100644 index 0000000..739d70d --- /dev/null +++ b/GameServer/Server/Packet/Send/Elf/PacketGetElfDataRsp.cs @@ -0,0 +1,719 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Elf; + +public class PacketGetElfDataRsp : BasePacket +{ + public PacketGetElfDataRsp() : base(CmdIds.GetElfDataRsp) + { + var proto = new GetElfDataRsp // TODO: GET FROM DB + { + ElfList = + { + new Proto.Elf + { + ElfId = 101, + Exp = 1, + Level = 80, + SkillList = + { + new ElfSkill + { + SkillId = 10101, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 10102, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 10103, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 10105, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 10106, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 10107, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 101011, + SkillLevel = 6 + }, + new ElfSkill + { + SkillId = 101021, + SkillLevel = 3 + }, + new ElfSkill + { + SkillId = 101032, + SkillLevel = 4 + }, + new ElfSkill + { + SkillId = 101033, + SkillLevel = 4 + }, + new ElfSkill + { + SkillId = 101034, + SkillLevel = 4 + }, + new ElfSkill + { + SkillId = 101035, + SkillLevel = 4 + } + }, + Star = 7 + }, + new Proto.Elf + { + ElfId = 102, + Exp = 1, + Level = 80, + SkillList = + { + new ElfSkill + { + SkillId = 10201, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 10202, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 10203, + SkillLevel = 4 + }, + new ElfSkill + { + SkillId = 10205, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 10206, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 10207, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 102011, + SkillLevel = 5 + }, + new ElfSkill + { + SkillId = 102031, + SkillLevel = 6 + }, + new ElfSkill + { + SkillId = 102032, + SkillLevel = 6 + }, + new ElfSkill + { + SkillId = 102033, + SkillLevel = 6 + }, + new ElfSkill + { + SkillId = 102034, + SkillLevel = 6 + } + }, + Star = 7 + }, + new Proto.Elf + { + ElfId = 106, + Exp = 1, + Level = 80, + SkillList = + { + new ElfSkill + { + SkillId = 10601, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 10602, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 10603, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 10604, + SkillLevel = 4 + }, + new ElfSkill + { + SkillId = 10605, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 10606, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 10607, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 106011, + SkillLevel = 5 + }, + new ElfSkill + { + SkillId = 106012, + SkillLevel = 3 + }, + new ElfSkill + { + SkillId = 106013, + SkillLevel = 5 + }, + new ElfSkill + { + SkillId = 106021, + SkillLevel = 3 + }, + new ElfSkill + { + SkillId = 106022, + SkillLevel = 5 + }, + new ElfSkill + { + SkillId = 106031, + SkillLevel = 5 + }, + new ElfSkill + { + SkillId = 106032, + SkillLevel = 5 + }, + new ElfSkill + { + SkillId = 106041, + SkillLevel = 3 + }, + new ElfSkill + { + SkillId = 106042, + SkillLevel = 4 + } + }, + Star = 4 + }, + new Proto.Elf + { + ElfId = 108, + Exp = 1, + Level = 80, + SkillList = { + new ElfSkill + { + SkillId = 10801, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 10802, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 10803, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 10804, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 10805, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 10806, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 10807, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 108011, + SkillLevel = 5 + }, + new ElfSkill + { + SkillId = 108012, + SkillLevel = 3 + }, + new ElfSkill + { + SkillId = 108013, + SkillLevel = 5 + }, + new ElfSkill + { + SkillId = 108021, + SkillLevel = 3 + }, + new ElfSkill + { + SkillId = 108022, + SkillLevel = 5 + }, + new ElfSkill + { + SkillId = 108023, + SkillLevel = 3 + }, + new ElfSkill + { + SkillId = 108031, + SkillLevel = 5 + }, + new ElfSkill + { + SkillId = 108032, + SkillLevel = 5 + }, + new ElfSkill + { + SkillId = 108041, + SkillLevel = 3 + }, + new ElfSkill + { + SkillId = 108042, + SkillLevel = 5 + } + }, + Star = 7 + }, + new Proto.Elf + { + ElfId = 110, + Exp = 1, + Level = 80, + SkillList = + { + new ElfSkill + { + SkillId = 11001, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 11002, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 11003, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 11004, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 11005, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 11006, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 11007, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 110011, + SkillLevel = 5 + }, + new ElfSkill + { + SkillId = 110021, + SkillLevel = 3 + }, + new ElfSkill + { + SkillId = 110031, + SkillLevel = 3 + }, + new ElfSkill + { + SkillId = 110041, + SkillLevel = 4 + }, + new ElfSkill + { + SkillId = 110051, + SkillLevel = 3 + }, + new ElfSkill + { + SkillId = 110071, + SkillLevel = 5 + } + }, + Star = 2 + }, + new Proto.Elf + { + ElfId = 111, + Exp = 1, + Level = 80, + SkillList = + { + new ElfSkill + { + SkillId = 12001, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 12002, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 12003, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 12004, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 12005, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 12006, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 12007, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 120011, + SkillLevel = 5 + }, + new ElfSkill + { + SkillId = 120021, + SkillLevel = 5 + }, + new ElfSkill + { + SkillId = 120031, + SkillLevel = 6 + }, + new ElfSkill + { + SkillId = 120041, + SkillLevel = 5 + }, + new ElfSkill + { + SkillId = 120042, + SkillLevel = 4 + } + }, + Star = 2 + }, + new Proto.Elf + { + ElfId = 112, + Exp = 1, + Level = 80, + SkillList = + { + new ElfSkill + { + SkillId = 13001, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 13002, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 13003, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 13004, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 13005, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 13006, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 13007, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 130011, + SkillLevel = 4 + }, + new ElfSkill + { + SkillId = 130012, + SkillLevel = 5 + }, + new ElfSkill + { + SkillId = 130013, + SkillLevel = 3 + }, + new ElfSkill + { + SkillId = 130021, + SkillLevel = 3 + }, + new ElfSkill + { + SkillId = 130022, + SkillLevel = 5 + }, + new ElfSkill + { + SkillId = 130023, + SkillLevel = 4 + }, + new ElfSkill + { + SkillId = 130031, + SkillLevel = 5 + }, + new ElfSkill + { + SkillId = 130032, + SkillLevel = 4 + }, + new ElfSkill + { + SkillId = 130033, + SkillLevel = 4 + }, + new ElfSkill + { + SkillId = 130041, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 130042, + SkillLevel = 3 + }, + new ElfSkill + { + SkillId = 130043, + SkillLevel = 3 + } + }, + Star = 7 + }, + new Proto.Elf + { + ElfId = 113, + Exp = 1, + Level = 80, + SkillList = + { + new ElfSkill + { + SkillId = 14001, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 14002, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 14003, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 14004, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 14005, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 14006, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 14007, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 140011, + SkillLevel = 5 + }, + new ElfSkill + { + SkillId = 140021, + SkillLevel = 5 + }, + new ElfSkill + { + SkillId = 140031, + SkillLevel = 5 + } + }, + Star = 2 + }, + new Proto.Elf + { + ElfId = 120, + Exp = 1, + Level = 80, + SkillList = + { + new ElfSkill + { + SkillId = 20005, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 20006, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 20007, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 200051, + SkillLevel = 3 + }, + new ElfSkill + { + SkillId = 200071, + SkillLevel = 2 + } + }, + Star = 1 + }, + new Proto.Elf + { + ElfId = 130, + Exp = 1, + Level = 80, + SkillList = + { + new ElfSkill + { + SkillId = 20005, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 20006, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 20007, + SkillLevel = 1 + }, + new ElfSkill + { + SkillId = 200051, + SkillLevel = 3 + }, + new ElfSkill + { + SkillId = 200071, + SkillLevel = 2 + } + }, + Star = 1 + } + } + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Endless/PacketGetEndlessStatusRsp.cs b/GameServer/Server/Packet/Send/Endless/PacketGetEndlessStatusRsp.cs new file mode 100644 index 0000000..2e89165 --- /dev/null +++ b/GameServer/Server/Packet/Send/Endless/PacketGetEndlessStatusRsp.cs @@ -0,0 +1,35 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Endless; + +public class PacketGetEndlessStatusRsp : BasePacket +{ + public PacketGetEndlessStatusRsp() : base(CmdIds.GetEndlessStatusRsp) + { + // TODO: Hardcoded + var proto = new GetEndlessStatusRsp + { + CurStatus = new EndlessStatus + { + BeginTime = 1730098800, + CanJoinIn = true, + CloseTime = 1880308800, + EndTime = 1880308800, + EndlessType = EndlessType.Ultra + }, + NextStatusList = + { + new EndlessStatus + { + BeginTime = 1730444400, + CloseTime = 1880308800, + EndTime = 1880308800, + EndlessType = EndlessType.Ultra + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Event/PacketGetGalInteractTriggerEventRsp.cs b/GameServer/Server/Packet/Send/Event/PacketGetGalInteractTriggerEventRsp.cs new file mode 100644 index 0000000..bfca610 --- /dev/null +++ b/GameServer/Server/Packet/Send/Event/PacketGetGalInteractTriggerEventRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Event; + +public class PacketGetGalInteractTriggerEventRsp : BasePacket +{ + public PacketGetGalInteractTriggerEventRsp(uint avatarId) : base(CmdIds.GetGalInteractTriggerEventRsp) + { + var proto = new GetGalInteractTriggerEventRsp + { + AvatarId = avatarId + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/ExBoss/PacketExBossStageBeginRsp.cs b/GameServer/Server/Packet/Send/ExBoss/PacketExBossStageBeginRsp.cs new file mode 100644 index 0000000..1846cc2 --- /dev/null +++ b/GameServer/Server/Packet/Send/ExBoss/PacketExBossStageBeginRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.ExBoss; + +public class PacketExBossStageBeginRsp : BasePacket +{ + public PacketExBossStageBeginRsp() : base(CmdIds.ExBossStageBeginRsp) + { + var proto = new ExBossStageBeginRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/ExBoss/PacketExBossStageEndRsp.cs b/GameServer/Server/Packet/Send/ExBoss/PacketExBossStageEndRsp.cs new file mode 100644 index 0000000..1eedd2b --- /dev/null +++ b/GameServer/Server/Packet/Send/ExBoss/PacketExBossStageEndRsp.cs @@ -0,0 +1,18 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.ExBoss; + +public class PacketExBossStageEndRsp : BasePacket +{ + public PacketExBossStageEndRsp(uint bossId, StageEndStatus Status) : base(CmdIds.ExBossStageEndRsp) + { + var proto = new ExBossStageEndRsp + { + BossId = bossId, + EndStatus = Status + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/ExBoss/PacketGetExBossInfoRsp.cs b/GameServer/Server/Packet/Send/ExBoss/PacketGetExBossInfoRsp.cs new file mode 100644 index 0000000..671dc1e --- /dev/null +++ b/GameServer/Server/Packet/Send/ExBoss/PacketGetExBossInfoRsp.cs @@ -0,0 +1,26 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.ExBoss; + +public class PacketGetExBossInfoRsp : BasePacket +{ + public PacketGetExBossInfoRsp() : base(CmdIds.GetExBossInfoRsp) + { + // TODO:Hardcoded + + var proto = new GetExBossInfoRsp + { + BossInfo = new ExBossInfo + { + BossIdList = { }, + CurMaxEnterTimes = 18, + RankId = 104, + ScheduleId = 10377, + NowScheduleId = 10377 + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/ExBoss/PacketGetExBossRankRsp.cs b/GameServer/Server/Packet/Send/ExBoss/PacketGetExBossRankRsp.cs new file mode 100644 index 0000000..d7a13b2 --- /dev/null +++ b/GameServer/Server/Packet/Send/ExBoss/PacketGetExBossRankRsp.cs @@ -0,0 +1,39 @@ +using KianaBH.GameServer.Game.Player; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.ExBoss; + +public class PacketGetExBossRankRsp : BasePacket +{ + public PacketGetExBossRankRsp(PlayerInstance player) : base(CmdIds.GetExBossRankRsp) + { + // TODO: Hardcoded + var proto = new GetExBossRankRsp + { + RankId = 104, + RankData = new RankShowData + { + MyRank = 104, + MyRankType = 2, + MyScore = 116330, + RankList = + { + new UserRankData + { + AvatarId = 3101, + CustomHeadId = 161099, + DressId = 50217, + FrameId = 200080, + NickName = "Kiana", + Rank = 1, + Score = 119727, + Uid = (uint)player.Data.Uid + } + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/ExBoss/PacketGetExBossScheduleRsp.cs b/GameServer/Server/Packet/Send/ExBoss/PacketGetExBossScheduleRsp.cs new file mode 100644 index 0000000..06ab0c0 --- /dev/null +++ b/GameServer/Server/Packet/Send/ExBoss/PacketGetExBossScheduleRsp.cs @@ -0,0 +1,22 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.ExBoss; + +public class PacketGetExBossScheduleRsp : BasePacket +{ + public PacketGetExBossScheduleRsp() : base(CmdIds.GetExBossScheduleRsp) + { + // TODO: Hardcoded + var proto = new GetExBossScheduleRsp + { + BeginTime = 1730750400, + EndTime = 1931268799, + MinLevel = 38, + RankId = 104, + ScheduleId = 10377 + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Exchange/PacketGetCurrencyExchangeInfoRsp.cs b/GameServer/Server/Packet/Send/Exchange/PacketGetCurrencyExchangeInfoRsp.cs new file mode 100644 index 0000000..28aca72 --- /dev/null +++ b/GameServer/Server/Packet/Send/Exchange/PacketGetCurrencyExchangeInfoRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Exchange; + +public class PacketGetCurrencyExchangeInfoRsp : BasePacket +{ + public PacketGetCurrencyExchangeInfoRsp() : base(CmdIds.GetCurrencyExchangeInfoRsp) + { + var proto = new GetCurrencyExchangeInfoRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Friend/PacketGetAskAddFriendListRsp.cs b/GameServer/Server/Packet/Send/Friend/PacketGetAskAddFriendListRsp.cs new file mode 100644 index 0000000..3647997 --- /dev/null +++ b/GameServer/Server/Packet/Send/Friend/PacketGetAskAddFriendListRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Friend; + +public class PacketGetAskAddFriendListRsp : BasePacket +{ + public PacketGetAskAddFriendListRsp() : base(CmdIds.GetAskAddFriendListRsp) + { + var proto = new GetAskAddFriendListRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Friend/PacketGetFriendListRsp.cs b/GameServer/Server/Packet/Send/Friend/PacketGetFriendListRsp.cs new file mode 100644 index 0000000..a8690d8 --- /dev/null +++ b/GameServer/Server/Packet/Send/Friend/PacketGetFriendListRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Friend; + +public class PacketGetFriendListRsp : BasePacket +{ + public PacketGetFriendListRsp() : base(CmdIds.GetFriendListRsp) + { + var proto = new GetFriendListRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Friend/PacketGetFriendRemarkListRsp.cs b/GameServer/Server/Packet/Send/Friend/PacketGetFriendRemarkListRsp.cs new file mode 100644 index 0000000..0da4a9b --- /dev/null +++ b/GameServer/Server/Packet/Send/Friend/PacketGetFriendRemarkListRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Friend; + +public class PacketGetFriendRemarkListRsp : BasePacket +{ + public PacketGetFriendRemarkListRsp() : base(CmdIds.GetFriendRemarkListRsp) + { + var proto = new GetFriendRemarkListRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Gacha/PacketGetGachaDisplayRsp.cs b/GameServer/Server/Packet/Send/Gacha/PacketGetGachaDisplayRsp.cs new file mode 100644 index 0000000..0d0389b --- /dev/null +++ b/GameServer/Server/Packet/Send/Gacha/PacketGetGachaDisplayRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Gacha; + +public class PacketGetGachaDisplayRsp : BasePacket +{ + public PacketGetGachaDisplayRsp() : base(CmdIds.GetGachaDisplayRsp) + { + var proto = new GetGachaDisplayRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/GodWar/PacketGetGobackRsp.cs b/GameServer/Server/Packet/Send/GodWar/PacketGetGobackRsp.cs new file mode 100644 index 0000000..69113de --- /dev/null +++ b/GameServer/Server/Packet/Send/GodWar/PacketGetGobackRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.GodWar; + +public class PacketGetGobackRsp : BasePacket +{ + public PacketGetGobackRsp() : base(CmdIds.GetGobackRsp) + { + var proto = new GetGobackRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/GodWar/PacketGetGodWarLobbyRsp.cs b/GameServer/Server/Packet/Send/GodWar/PacketGetGodWarLobbyRsp.cs new file mode 100644 index 0000000..6b77a0d --- /dev/null +++ b/GameServer/Server/Packet/Send/GodWar/PacketGetGodWarLobbyRsp.cs @@ -0,0 +1,20 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.GodWar; + +public class PacketGetGodWarLobbyRsp : BasePacket +{ + public PacketGetGodWarLobbyRsp() : base(CmdIds.GetGodWarLobbyRsp) + { + // TODO: Hardcoded + + var proto = new GetGodWarLobbyRsp + { + GodWarId = 1, + LobbyId = 2 + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/GodWar/PacketGetGodWarRsp.cs b/GameServer/Server/Packet/Send/GodWar/PacketGetGodWarRsp.cs new file mode 100644 index 0000000..b663f4f --- /dev/null +++ b/GameServer/Server/Packet/Send/GodWar/PacketGetGodWarRsp.cs @@ -0,0 +1,18 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.GodWar; + +public class PacketGetGodWarRsp : BasePacket +{ + public PacketGetGodWarRsp() : base(CmdIds.GetGodWarRsp) + { + // TODO: Implement + var proto = new GetGodWarRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/GodWar/PacketGetGrandKeyRsp.cs b/GameServer/Server/Packet/Send/GodWar/PacketGetGrandKeyRsp.cs new file mode 100644 index 0000000..4d76e49 --- /dev/null +++ b/GameServer/Server/Packet/Send/GodWar/PacketGetGrandKeyRsp.cs @@ -0,0 +1,99 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.GodWar; + +public class PacketGetGrandKeyRsp : BasePacket +{ + public PacketGetGrandKeyRsp() : base(CmdIds.GetGrandKeyRsp) + { + // TODO: Hardcoded + var proto = new GetGrandKeyRsp + { + IsAll = true, + KeyList = + { + new GrandKey + { + Id = 203, + Level = 10, + ActivateLevel = 10, + BreachLevel = 1, + EndTime = 1975780800, + UnlockLevel = 50, + Skill = new GrandKeySkill + { + SkillId = 20310 + } + }, + new GrandKey + { + Id = 208, + Level = 1, + UnlockLevel = 65 + }, + new GrandKey + { + Id = 205, + Level = 10, + ActivateLevel = 10, + BreachLevel = 1, + EndTime = 1975780800, + UnlockLevel = 65, + Skill = new GrandKeySkill + { + SkillId = 20509 + } + }, + new GrandKey + { + Id = 202, + Level = 10, + ActivateLevel = 10, + BreachLevel = 2, + EndTime = 1975780800, + UnlockLevel = 50, + Skill = new GrandKeySkill + { + SkillId = 20209 + } + }, + new GrandKey + { + Id = 207, + Level = 1, + BreachLevel = 1, + UnlockLevel = 65 + }, + new GrandKey + { + Id = 204, + Level = 1, + BreachLevel = 1, + UnlockLevel = 65 + }, + new GrandKey + { + Id = 201, + Level = 10, + ActivateLevel = 10, + EndTime = 1975780800, + UnlockLevel = 50, + Skill = new GrandKeySkill + { + SkillId = 20109 + } + }, + new GrandKey + { + Id = 206, + Level = 1, + BreachLevel = 1, + UnlockLevel = 35 + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/GodWar/PacketRefreshGodWarTicketRsp.cs b/GameServer/Server/Packet/Send/GodWar/PacketRefreshGodWarTicketRsp.cs new file mode 100644 index 0000000..b0319fd --- /dev/null +++ b/GameServer/Server/Packet/Send/GodWar/PacketRefreshGodWarTicketRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.GodWar; + +public class PacketRefreshGodWarTicketRsp : BasePacket +{ + public PacketRefreshGodWarTicketRsp(uint GodWarId) : base(CmdIds.RefreshGodWarTicketRsp) + { + var proto = new RefreshGodWarTicketRsp + { + GodWarId = GodWarId + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Goods/PacketAddGoodfeelRsp.cs b/GameServer/Server/Packet/Send/Goods/PacketAddGoodfeelRsp.cs new file mode 100644 index 0000000..ac131e2 --- /dev/null +++ b/GameServer/Server/Packet/Send/Goods/PacketAddGoodfeelRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Goods; + +public class PacketAddGoodfeelRsp : BasePacket +{ + public PacketAddGoodfeelRsp() : base(CmdIds.AddGoodfeelRsp) + { + var proto = new AddGoodfeelRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Guide/PacketFinishGuideReportRsp.cs b/GameServer/Server/Packet/Send/Guide/PacketFinishGuideReportRsp.cs new file mode 100644 index 0000000..f61397c --- /dev/null +++ b/GameServer/Server/Packet/Send/Guide/PacketFinishGuideReportRsp.cs @@ -0,0 +1,20 @@ +using Google.Protobuf.Collections; +using KianaBH.GameServer.Game.Player; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Guide; + +public class PacketFinishGuideReportRsp : BasePacket +{ + public PacketFinishGuideReportRsp(PlayerInstance player) : base(CmdIds.FinishGuideReportRsp) + { + var proto = new FinishGuideReportRsp + { + IsFinish = true, + GuideIdList = { player.GuideData!.GuideFinishList } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Guide/PacketGetFinishGuideDataRsp.cs b/GameServer/Server/Packet/Send/Guide/PacketGetFinishGuideDataRsp.cs new file mode 100644 index 0000000..1d359d9 --- /dev/null +++ b/GameServer/Server/Packet/Send/Guide/PacketGetFinishGuideDataRsp.cs @@ -0,0 +1,731 @@ +using KianaBH.GameServer.Game.Player; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Guide; + +public class PacketGetFinishGuideDataRsp : BasePacket +{ + public PacketGetFinishGuideDataRsp(PlayerInstance player) : base(CmdIds.GetFinishGuideDataRsp) + { + //var proto = new GetFinishGuideDataRsp + //{ + // GuideIdList = { player.GuideData!.GuideFinishList } + //}; + + var proto = new GetFinishGuideDataRsp + { + GuideIdList = + { + 2007, + 5007, + 5008, + 5009, + 2002, + 5648, + 2974, + 5391, + 5392, + 5537, + 1080, + 1274, + 1275, + 1276, + 1299, + 1302, + 1500, + 1501, + 1502, + 1503, + 1504, + 1505, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1516, + 1517, + 1518, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1527, + 1528, + 1529, + 1530, + 1531, + 1532, + 1533, + 1534, + 1535, + 1536, + 1537, + 1538, + 1539, + 1540, + 1541, + 1542, + 1543, + 1544, + 1545, + 1546, + 1547, + 1550, + 1624, + 1625, + 2003, + 2400, + 2401, + 2402, + 2403, + 2404, + 2405, + 2501, + 2519, + 2521, + 2539, + 2540, + 2600, + 2700, + 2701, + 2703, + 2900, + 2901, + 2902, + 2903, + 2904, + 2920, + 2960, + 2963, + 2968, + 2969, + 2985, + 2986, + 2994, + 3000, + 3001, + 3002, + 3003, + 3005, + 3006, + 3007, + 3008, + 3009, + 3010, + 3011, + 3012, + 3013, + 3014, + 3015, + 3016, + 3017, + 3020, + 3023, + 3024, + 3025, + 4112, + 5006, + 5008, + 5009, + 5010, + 5102, + 5104, + 5105, + 5108, + 5109, + 5110, + 5112, + 5114, + 5202, + 5231, + 5367, + 5368, + 5369, + 5830, + 5831, + 5832, + 5833, + 5851, + 5852, + 5853, + 5854, + 5889, + 6010, + 6015, + 6022, + 6023, + 6024, + 6025, + 6401, + 6402, + 6403, + 6501, + 6521, + 6522, + 6523, + 6551, + 6715, + 6716, + 6835, + 6838, + 6852, + 7056, + 7057, + 7058, + 7060, + 7069, + 7070, + 7100, + 7101, + 7102, + 7103, + 7200, + 7230, + 7301, + 7302, + 7303, + 7304, + 7305, + 7306, + 7307, + 7308, + 7309, + 7310, + 7311, + 7312, + 7313, + 7501, + 7502, + 7503, + 7505, + 7507, + 7508, + 7509, + 7510, + 7511, + 7512, + 7513, + 7514, + 7515, + 7516, + 7517, + 7518, + 7523, + 7528, + 7529, + 7530, + 7531, + 7533, + 7534, + 7535, + 7537, + 7539, + 7540, + 7541, + 7542, + 7543, + 7545, + 7601, + 7602, + 7603, + 7605, + 7615, + 7616, + 7617, + 7618, + 7619, + 7620, + 7621, + 7631, + 7632, + 7637, + 7638, + 7639, + 7640, + 7641, + 7642, + 7643, + 7701, + 7750, + 7751, + 7752, + 7753, + 7834, + 7835, + 7836, + 7837, + 7839, + 7851, + 7852, + 7853, + 7854, + 7855, + 7856, + 7858, + 7859, + 7860, + 7867, + 7868, + 7869, + 7884, + 7885, + 7886, + 7887, + 9101, + 9202, + 9301, + 9302, + 9311, + 9313, + 9483, + 9484, + 9485, + 9488, + 9495, + 9496, + 9497, + 9498, + 9502, + 9505, + 9508, + 9530, + 9550, + 9562, + 9563, + 9564, + 9566, + 9567, + 9576, + 9581, + 9630, + 9631, + 9632, + 9642, + 9644, + 9650, + 9651, + 9702, + 9714, + 9783, + 9784, + 9785, + 9786, + 9787, + 9788, + 9790, + 9793, + 9905, + 9906, + 9993, + 9996, + 9997, + 20041, + 20042, + 20043, + 20044, + 20045, + 20046, + 20047, + 20048, + 20049, + 20050, + 20051, + 20052, + 20053, + 20057, + 20059, + 20060, + 20062, + 20063, + 20064, + 20065, + 20066, + 20067, + 20068, + 20069, + 20070, + 20071, + 20072, + 20073, + 20074, + 20075, + 20076, + 40001, + 40005, + 40006, + 40007, + 40008, + 40009, + 40023, + 40024, + 40025, + 40026, + 40027, + 40028, + 40029, + 40030, + 40031, + 40032, + 40033, + 40034, + 40035, + 40036, + 40037, + 40038, + 40039, + 40040, + 40044, + 40045, + 40046, + 40047, + 40048, + 40055, + 40056, + 40057, + 40058, + 40059, + 40060, + 40061, + 40062, + 40063, + 40064, + 40065, + 40067, + 40068, + 40069, + 40070, + 40071, + 40072, + 40073, + 40084, + 40085, + 40086, + 40087, + 40088, + 40089, + 40115, + 40116, + 40117, + 40118, + 40119, + 40120, + 40121, + 40122, + 40123, + 40124, + 41001, + 42000, + 42001, + 42002, + 42003, + 42004, + 42005, + 42006, + 42007, + 42008, + 42009, + 42010, + 42012, + 42013, + 42014, + 42015, + 42016, + 42017, + 42020, + 42021, + 42024, + 42027, + 42028, + 42047, + 42050, + 42051, + 42052, + 42053, + 42055, + 42066, + 42067, + 42070, + 42085, + 42087, + 42090, + 42114, + 42116, + 42122, + 42124, + 42126, + 42129, + 42141, + 42142, + 42143, + 42144, + 42145, + 42146, + 42156, + 42157, + 42159, + 42161, + 42163, + 42166, + 42180, + 42181, + 42182, + 42184, + 42210, + 42213, + 42214, + 42215, + 42262, + 42263, + 42264, + 42269, + 42274, + 42275, + 42288, + 42309, + 42310, + 42311, + 42312, + 42313, + 42316, + 42318, + 42320, + 42321, + 42325, + 42328, + 42333, + 42338, + 42372, + 42382, + 42383, + 42392, + 42400, + 42403, + 42413, + 42414, + 42419, + 42433, + 42439, + 42440, + 42441, + 42452, + 42453, + 42454, + 42464, + 42465, + 42494, + 42517, + 42519, + 42521, + 42532, + 42533, + 42572, + 42573, + 42745, + 42747, + 42751, + 42775, + 44618, + 44619, + 44620, + 44621, + 44622, + 44747, + 44748, + 44751, + 44754, + 44756, + 44758, + 44761, + 44762, + 45000, + 45001, + 45002, + 45009, + 45010, + 45011, + 45023, + 45024, + 48256, + 48258, + 48272, + 48278, + 48280, + 48283, + 48289, + 48290, + 48291, + 48294, + 48319, + 48347, + 50079, + 50080, + 50081, + 50084, + 50087, + 50102, + 50103, + 50104, + 50105, + 50252, + 50253, + 50254, + 50255, + 50256, + 50262, + 50263, + 50266, + 50271, + 50272, + 50274, + 50276, + 50277, + 50281, + 50282, + 50284, + 50290, + 50291, + 50292, + 50294, + 50299, + 50304, + 50312, + 50316, + 50317, + 50318, + 50322, + 50323, + 50325, + 50332, + 50340, + 50351, + 50352, + 50353, + 50355, + 50357, + 50360, + 50361, + 50362, + 50366, + 50376, + 50377, + 50379, + 50380, + 50382, + 50383, + 50385, + 50386, + 50387, + 50388, + 50396, + 50397, + 50398, + 50399, + 50404, + 50407, + 50408, + 50409, + 50410, + 50411, + 50412, + 50416, + 50417, + 50418, + 50419, + 50422, + 50423, + 50424, + 50425, + 50432, + 50433, + 50436, + 50446, + 50447, + 50449, + 50467, + 50468, + 50469, + 50473, + 50474, + 50475, + 50476, + 50477, + 50478, + 50479, + 50480, + 50486, + 50492, + 50493, + 100002, + 100003, + 100004, + 100005, + 100006, + 100007, + 100078, + 100079, + 100080, + 100082, + 100083, + 100086, + 100087, + 100088, + 100089, + 100091, + 100095, + 100097, + 100098, + 100100, + 100101, + 100102, + 100106, + 100107, + 100108, + 100109, + 100111, + 100113, + 100115, + 100116, + 100117, + 100139, + 100140, + 100142, + 100143, + 100144, + 100145, + 100146, + 100147, + 100148, + 100149, + 100150, + 100151, + 100152, + 100153, + 100154, + 100158, + 100159, + 100160, + 100162, + 100163, + 100356, + 100357, + 100366, + 100367, + 100369, + 100372, + 100373 + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Item/PacketGetEquipmentDataRsp.cs b/GameServer/Server/Packet/Send/Item/PacketGetEquipmentDataRsp.cs new file mode 100644 index 0000000..746434c --- /dev/null +++ b/GameServer/Server/Packet/Send/Item/PacketGetEquipmentDataRsp.cs @@ -0,0 +1,18 @@ +using KianaBH.GameServer.Game.Player; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Item; + +public class PacketGetEquipmentDataRsp : BasePacket +{ + public PacketGetEquipmentDataRsp(PlayerInstance player) : base(CmdIds.GetEquipmentDataRsp) + { + var proto = new GetEquipmentDataRsp // TODO + { + WeaponList = { player.InventoryManager!.Data.WeaponItems.Select(weapon => weapon.ToWeaponProto()) } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Item/PacketGetEquipmentForgeDataRsp.cs b/GameServer/Server/Packet/Send/Item/PacketGetEquipmentForgeDataRsp.cs new file mode 100644 index 0000000..ff04fa0 --- /dev/null +++ b/GameServer/Server/Packet/Send/Item/PacketGetEquipmentForgeDataRsp.cs @@ -0,0 +1,67 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Item; + +public class PacketGetEquipmentForgeDataRsp : BasePacket +{ + public PacketGetEquipmentForgeDataRsp() : base(CmdIds.GetEquipmentForgeDataRsp) + { + // TODO: Hardcoded + + var proto = new GetEquipmentForgeDataRsp + { + ForgeList = + { + 11001, 11002, 11003, 11004, 11005, 11006, 11007, 11008, 11009, 11010, 11011, 11012, 11013, 11014, 11015, + 11016, 11017, 11618, 11619, 11620, 11621, 11622, 11623, 11624, 11625, 11626, 11627, 11628, 11629, 11630, + 11631, 11632, 11633, 12001, 12002, 12003, 12004, 12005, 12006, 12007, 12008, 12009, 12010, 12011, 12012, + 12013, 12014, 12015, 12016, 12617, 12618, 12619, 12620, 12621, 12622, 12623, 12624, 12625, 12626, 12627, + 12628, 12629, 13001, 13002, 13003, 13004, 13005, 13006, 13007, 13008, 13009, 13010, 13011, 13012, 13013, + 13014, 13015, 13016, 13617, 13618, 13619, 13620, 13621, 13622, 13623, 13624, 13625, 13626, 13627, 13628, + 13629, 14001, 14002, 14003, 14004, 14005, 14006, 14007, 14008, 14009, 14010, 14011, 14012, 14013, 14014, + 14015, 14016, 14017, 14618, 14619, 14620, 14621, 14622, 14623, 14624, 14625, 14626, 14627, 14628, 14629, + 14630, 12030, 14031, 11634, 12631, 13630, 14632, 11035, 11036, 11037, 11038, 12032, 13031, 14033, 12033, + 13032, 14034, 11639, 11640, 11641, 11642, 11643, 11644, 11645, 11646, 11047, 12034, 13033, 14035, 11648, + 11649, 12635, 13634, 14636, 12036, 13035, 14037, 12037, 13036, 14038, 11050, 12038, 13037, 14039, 12639, + 13638, 14640, 12640, 13639, 14641, 12041, 13040, 14042, 12042, 13041, 14043, 11051, 11052, 11053, 13042, + 12644, 13644, 14645, 11654, 12645, 13645, 14646, 11055, 11056, 11057, 11059, 21001, 21002, 21003, 20004, + 20005, 20006, 20007, 20008, 20009, 20010, 20011, 20012, 20013, 20014, 20015, 20016, 20017, 20018, 20019, + 20020, 20021, 20022, 20023, 20024, 20025, 20026, 20027, 20028, 20029, 20030, 20031, 20032, 20033, 20034, + 20035, 20036, 20037, 20038, 20039, 20040, 20041, 20042, 20043, 20044, 20045, 20046, 20047, 20048, 20049, + 20050, 20051, 20052, 20053, 20054, 20055, 20056, 20057, 20058, 20059, 20060, 20061, 20062, 20063, 20064, + 20065, 20066, 20067, 70001, 70002, 70003, 70004, 70005, 70006, 70007, 70008, 70009, 70010, 70011, 70012, + 70013, 70014, 70015, 70016, 70017, 70018, 70025, 70026, 70027, 70028, 70029, 70030, 70031, 70032, 70033, + 11804, 11805, 11806, 11807, 11808, 11809, 11810, 11811, 11812, 11813, 11814, 11815, 11816, 11817, 11818, + 11819, 11820, 11821, 11822, 11823, 11824, 11825, 11826, 11827, 11828, 11829, 11830, 11831, 11832, 11833, + 11834, 11835, 11836, 31001, 31002, 31003, 31004, 31005, 31006, 31007, 31008, 31009, 31010, 40034, 40035, + 70019, 70020, 70021, 70022, 70023, 70024, 11060, 20068, 20069, 20070, 11837, 11838, 11839, 11840, 11841, + 11842, 11843, 11844, 11845, 11846, 11847, 11848, 11849, 11850, 20071, 20072, 20073, 20074, 20075, 20076, + 20077, 20078, 20079, 20080, 20081, 20082, 20083, 20084, 20085, 20086, 20087, 20088, 20089, 20090, 20091, + 20092, 20093, 20094, 20095, 20096, 20097, 11061, 11851, 20098, 20099, 20100, 11852, 20101, 20102, 20103, + 11853, 20104, 20105, 20106, 11854, 70034, 70035, 70036, 20107, 20108, 20109, 11855, 11856, 20110, 20111, + 20112, 11857, 20113, 20114, 20115, 11858, 20116, 20117, 20118, 11062, 11063, 11064, 11065, 20119, 20120, + 20121, 11860, 11861, 20122, 20123, 20124, 11859, 20125, 20126, 20127, 20128, 20129, 20130, 20131, 20132, + 20133, 11862, 20134, 20135, 20136, 20137, 20138, 20139, 11863, 20140, 20141, 20142, 20143, 20144, 20145, + 11066, 11864, 20146, 20147, 20148, 20149, 20150, 20151, 11865, 11866, 20152, 20153, 20154, 20155, 20156, + 20157, 20158, 20159, 20160 + }, + HasForgeList = + { + new EquipmentForge + { + ForgeId = 20042, + Times = 1 + }, + new EquipmentForge + { + ForgeId = 20049, + Times = 1 + } + }, + ScheduleId = 1 + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Item/PacketGetHasGotFurnitureIdListRsp.cs b/GameServer/Server/Packet/Send/Item/PacketGetHasGotFurnitureIdListRsp.cs new file mode 100644 index 0000000..ac2e5d4 --- /dev/null +++ b/GameServer/Server/Packet/Send/Item/PacketGetHasGotFurnitureIdListRsp.cs @@ -0,0 +1,33 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Item; + +public class PacketGetHasGotFurnitureIdListRsp : BasePacket +{ + public PacketGetHasGotFurnitureIdListRsp() : base(CmdIds.GetHasGotFurnitureIdListRsp) + { + // TODO: Hardcoded + var proto = new GetHasGotFurnitureIdListRsp + { + FurnitureIdList = + { + 140001, 140002, 140003, 140010, 140012, 140013, 140015, 140016, 140201, 140202, 140213, 140215, 140216, + 140601, 140603, 140801, 140802, 140803, 140804, 140805, 140806, 140807, 140808, 140809, 140810, 140811, + 140812, 140813, 140814, 140815, 140816, 140817, 140818, 140819, 140820, 140821, 140822, 140823, 140824, + 140825, 141501, 141601, 141606, 141610, 141615, 141619, 141620, 141621, 141622, 141701, 141702, 141703, + 141704, 141709, 141713, 141801, 141802, 141803, 141804, 141805, 141806, 141807, 141808, 141809, 141810, + 141811, 141812, 141814, 141815, 146120, 146620 + }, + HasUnlockFurnitureIdList = + { + 140601, 140603, 140801, 140802, 140803, 140804, 140805, 140806, 140807, 140808, 140809, 140810, 140811, + 140812, 140813, 140814, 140815, 140816, 140817, 140818, 140819, 140820, 140821, 140822, 140823, 140824, + 140825, 141501, 141701, 141702, 141703, 141704, 141801, 141807, 141808, 141809, 141810, 141811, 141812, + 141815 + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Item/PacketGetHasGotItemIdListRsp.cs b/GameServer/Server/Packet/Send/Item/PacketGetHasGotItemIdListRsp.cs new file mode 100644 index 0000000..6ffacc7 --- /dev/null +++ b/GameServer/Server/Packet/Send/Item/PacketGetHasGotItemIdListRsp.cs @@ -0,0 +1,580 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Item; + +public class PacketGetHasGotItemIdListRsp : BasePacket +{ + public PacketGetHasGotItemIdListRsp() : base(CmdIds.GetHasGotItemIdListRsp) + { + // TODO: Hardcoded + var proto = new GetHasGotItemIdListRsp + { + ItemIdList = + { + 4, 5, 6, 100, 801, 802, 803, 810, 811, 812, 813, 821, 827, 828, 829, 830, 832, 833, 834, 835, 837, 838, + 842, 843, 844, 845, 846, 847, 848, 849, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, + 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 896, 897, 898, 899, 900, 902, 913, 915, 921, 926, 930, 934, 944, 945, 949, 950, + 951, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 998, + 1001, 1002, 1003, 1006, 1009, 1102, 1103, 1109, 1110, 1112, 1113, 1114, 1115, 1301, 1302, 1400, 1401, + 1402, 2008, 3000, 3005, 3006, 3007, 3008, 3101, 3104, 3107, 3110, 3112, 3122, 3129, 3130, 3134, 3322, + 3500, 3508, 3509, 3511, 3512, 4001, 4002, 4003, 4004, 4013, 5005, 5006, 5007, 5008, 5400, 5565, 5569, + 6001, 6002, 6003, 6004, 6506, 6515, 6531, 6532, 6533, 6534, 6535, 6536, 6537, 6538, 6539, 6540, 6551, + 6561, 6562, 6563, 6564, 6565, 6566, 6567, 7022, 7023, 7024, 7025, 7026, 7027, 7032, 7033, 7034, 7084, + 7091, 7104, 7106, 7113, 7114, 7115, 7156, 7159, 7160, 7161, 7215, 7244, 7280, 7281, 7287, 7335, 7359, + 7360, 7411, 7421, 7422, 7431, 7432, 7441, 7442, 7471, 7511, 7512, 7521, 7522, 7531, 7541, 7551, 7611, + 7621, 7622, 7631, 7641, 7651, 7711, 7721, 7722, 7731, 7741, 7751, 7838, 7839, 7882, 7887, 7895, 7896, + 7944, 7948, 7949, 7950, 8001, 8003, 8004, 8008, 8009, 8101, 8211, 8212, 8213, 8214, 8216, 8217, 8218, + 8305, 8309, 8310, 8402, 8403, 8601, 8602, 8640, 8641, 9001, 9002, 9003, 9004, 9010, 9101, 9107, 9113, + 9114, 9117, 9124, 9125, 9128, 9129, 9134, 9135, 9136, 9137, 9139, 9142, 9502, 9503, 9507, 9511, 9516, + 9520, 9521, 9523, 9529, 9533, 9543, 9545, 9547, 10101, 10102, 10103, 10104, 10105, 10106, 10111, 10112, + 10113, 10114, 10201, 10202, 10203, 10204, 10205, 10211, 10212, 10213, 10214, 10301, 10302, 10303, 10304, + 10311, 10312, 10313, 10314, 10315, 10317, 10401, 10402, 10403, 10404, 10411, 10412, 10421, 10422, 10501, + 10502, 10503, 10504, 10506, 10507, 10511, 10601, 10603, 10604, 10611, 10612, 10702, 10703, 10704, 10705, + 10706, 10711, 10712, 10714, 10801, 10802, 10803, 10901, 12101, 12201, 12202, 12401, 12501, 12601, 12701, + 12801, 12901, 12902, 13101, 13201, 13301, 13401, 13501, 13601, 13701, 20001, 20004, 20007, 20010, 20013, + 20016, 20017, 20018, 20019, 20020, 20021, 20022, 20029, 20033, 20041, 20042, 20043, 20044, 20047, 20050, + 20053, 20054, 20055, 20056, 20057, 20058, 20059, 20062, 20073, 20074, 20075, 20076, 20081, 20084, 20087, + 20090, 20093, 20094, 20095, 20096, 20099, 20102, 20109, 20113, 20114, 20115, 20116, 20121, 20124, 20127, + 20130, 20133, 20134, 20136, 20137, 20138, 20139, 20142, 20153, 20154, 20155, 20156, 20161, 20168, 20171, + 20172, 20173, 20174, 20184, 20185, 20186, 20187, 20197, 20198, 20199, 20200, 20206, 20213, 20221, 20227, + 20228, 20229, 20238, 20242, 20243, 20248, 20249, 20250, 20277, 20285, 20299, 20306, 20313, 20316, 20319, + 20329, 20333, 20334, 20335, 20336, 20339, 20388, 20392, 20406, 20407, 20408, 20409, 20430, 20433, 20436, + 20439, 20442, 20445, 20448, 20449, 20450, 20454, 20455, 20456, 20457, 20460, 20464, 20475, 20476, 20477, + 20478, 20479, 20480, 20481, 20482, 20487, 20488, 20530, 20531, 20532, 20533, 20542, 20546, 20547, 20548, + 20549, 20550, 20566, 20570, 20590, 20591, 20592, 20593, 20594, 20611, 20612, 20613, 20631, 20640, 20641, + 20642, 20643, 20644, 20661, 20671, 20672, 20673, 20691, 20692, 20693, 20694, 20695, 20696, 20700, 20701, + 20702, 20703, 20704, 20711, 20721, 20722, 20723, 20731, 20732, 20733, 20734, 20751, 20761, 20762, 20763, + 20764, 20765, 20766, 20811, 20821, 20841, 20871, 20872, 20873, 20874, 20881, 20891, 20901, 20902, 20903, + 20911, 20921, 20922, 20923, 20924, 20951, 20971, 20972, 20973, 20974, 21001, 21002, 21021, 21031, 21041, + 21051, 21052, 21053, 21054, 21071, 21081, 21091, 21092, 21093, 21094, 21101, 21111, 21121, 21131, 21132, + 21133, 21134, 21141, 21151, 21161, 21162, 21163, 21164, 21171, 21172, 21173, 21191, 21211, 21212, 21213, + 21214, 21231, 21241, 21251, 21252, 21253, 21254, 21261, 21271, 21281, 21291, 21292, 21293, 21294, 21331, + 21341, 21342, 21343, 21344, 21351, 21361, 21381, 21382, 21383, 21384, 21391, 21392, 21393, 21394, 21401, + 21421, 21422, 21423, 21424, 21431, 21432, 21433, 21434, 21451, 21452, 21453, 21454, 21461, 21462, 21463, + 21464, 21471, 21481, 21491, 21492, 21493, 21494, 21501, 21502, 21503, 21504, 21521, 21522, 21523, 21524, + 21541, 21551, 21552, 21553, 21554, 21561, 21562, 21563, 21581, 21582, 21583, 21584, 21591, 21611, 21612, + 21613, 21614, 21621, 21622, 21623, 21624, 21631, 21632, 21633, 21634, 21641, 21642, 21643, 21644, 21651, + 21661, 21662, 21663, 21664, 21671, 21672, 21673, 21674, 21681, 21682, 21683, 21684, 21691, 21692, 21693, + 21694, 21701, 21702, 21703, 21704, 21711, 21712, 21713, 21714, 21721, 21731, 21732, 21733, 21734, 21741, + 21742, 21743, 21744, 21791, 21792, 21793, 21794, 21811, 21812, 21813, 21814, 21841, 21842, 21843, 21844, + 24021, 24022, 24023, 24024, 24041, 24101, 24111, 24112, 24113, 24114, 24121, 24122, 24123, 24124, 24151, + 24152, 24153, 24154, 24161, 24162, 24163, 24164, 24171, 24172, 24173, 24174, 24181, 24182, 24183, 24184, + 24191, 24192, 24193, 24194, 24201, 24202, 24203, 24204, 24211, 24212, 24213, 24214, 24251, 24252, 24253, + 24254, 24261, 24262, 24263, 24264, 24271, 24272, 24273, 24274, 24281, 24282, 24283, 24284, 24321, 24351, + 24352, 24353, 24354, 24355, 24356, 24357, 24358, 24371, 24372, 24373, 24374, 24381, 24411, 24412, 24413, + 24414, 24421, 24431, 24432, 24441, 24451, 24452, 24453, 24454, 24461, 24462, 24463, 24464, 24471, 24472, + 24473, 24474, 24501, 24502, 24503, 24504, 24511, 24512, 24513, 24514, 24551, 24552, 25001, 25011, 25012, + 25021, 25031, 25032, 25041, 25051, 25052, 25061, 25071, 25072, 25081, 25091, 25092, 25101, 25111, 25112, + 25113, 25114, 25115, 25116, 25121, 25131, 25132, 25141, 25151, 25152, 28103, 28104, 28105, 28106, 28107, + 28108, 28115, 28116, 28131, 28132, 28151, 28152, 29001, 30001, 30004, 30007, 30010, 30013, 30016, 30019, + 30020, 30021, 30022, 30023, 30024, 30025, 30028, 30031, 30032, 30033, 30042, 30043, 30044, 30045, 30054, + 30057, 30060, 30063, 30066, 30069, 30072, 30073, 30074, 30075, 30076, 30077, 30078, 30079, 30080, 30081, + 30084, 30099, 30100, 30101, 30102, 30107, 30110, 30113, 30116, 30119, 30122, 30125, 30128, 30129, 30130, + 30131, 30132, 30133, 30134, 30137, 30148, 30172, 30173, 30174, 30198, 30199, 30200, 30201, 30210, 30211, + 30212, 30213, 30214, 30215, 30216, 30217, 30227, 30228, 30229, 30230, 30231, 30235, 30243, 30244, 30245, + 30246, 30290, 30291, 30292, 30293, 30294, 30295, 30296, 30297, 30298, 30307, 30308, 30309, 30310, 30344, + 30347, 30350, 30359, 30360, 30361, 30362, 30371, 30374, 30375, 30376, 30377, 30380, 30381, 30382, 30383, + 30384, 30385, 30386, 30387, 30388, 30390, 30431, 30432, 30433, 30497, 30498, 30499, 30500, 30505, 30506, + 30507, 30508, 30518, 30521, 30524, 30525, 30526, 30530, 30552, 30553, 30554, 30555, 30572, 30576, 30577, + 30578, 30579, 30584, 30587, 30590, 30593, 30594, 30595, 30596, 30597, 30598, 30599, 30600, 30601, 30602, + 30609, 30613, 30614, 30615, 30616, 30668, 30669, 30670, 30699, 30700, 30701, 30702, 30703, 30704, 30705, + 30706, 30779, 30801, 30802, 30803, 30804, 30821, 30822, 30823, 30824, 30861, 30862, 30863, 30864, 30871, + 30872, 30873, 30874, 30891, 30901, 30911, 30912, 30913, 30914, 30921, 31011, 31012, 31013, 31014, 31021, + 31022, 31023, 31024, 31031, 31032, 31033, 31034, 31161, 31162, 31163, 31164, 31171, 31172, 31173, 31174, + 31181, 31182, 31183, 31184, 31191, 31192, 31193, 31201, 31211, 31231, 31261, 31271, 31281, 31321, 31322, + 31323, 31331, 31332, 31333, 31341, 31342, 31343, 31361, 31411, 31412, 31413, 31414, 31421, 31422, 31423, + 31424, 31431, 31432, 31471, 31472, 31473, 31474, 31481, 31482, 31483, 31484, 31491, 31492, 31493, 31494, + 31541, 31542, 31543, 31544, 31561, 31591, 31651, 31711, 31721, 31722, 31723, 31724, 31741, 31751, 31761, + 31791, 31811, 31891, 31892, 31893, 31894, 31901, 31902, 31903, 31904, 31911, 31912, 31913, 31914, 31981, + 31991, 32001, 32081, 32082, 32083, 32084, 32091, 32092, 32093, 32094, 32181, 32182, 32183, 32184, 32191, + 32192, 32193, 32194, 32201, 32202, 32203, 32204, 32291, 32341, 32371, 32391, 32392, 32393, 32441, 32442, + 32443, 32444, 32461, 32462, 32463, 32471, 32472, 32473, 32481, 32501, 32502, 32511, 32521, 32522, 32523, + 32524, 32561, 32591, 32592, 32593, 32594, 32601, 32602, 32603, 32604, 32631, 32632, 32633, 32634, 32671, + 32681, 32701, 32702, 32703, 32704, 32711, 32712, 32713, 32714, 32721, 32722, 32723, 32724, 32731, 32741, + 32761, 32762, 32763, 32764, 32771, 32772, 32773, 32774, 32781, 32782, 32783, 32784, 32791, 32792, 32793, + 32794, 32811, 32812, 32813, 32814, 32861, 32891, 32892, 32893, 32894, 32901, 32902, 32903, 32904, 32981, + 32982, 32983, 32984, 32991, 32992, 32993, 32994, 33001, 33002, 33003, 33004, 33011, 33012, 33013, 33021, + 33022, 33023, 33024, 33061, 33062, 33063, 33064, 33071, 33072, 33073, 33074, 33081, 33091, 33092, 33093, + 33094, 33251, 33252, 33253, 33254, 33261, 33262, 33263, 33264, 33271, 33272, 33273, 33274, 33281, 33282, + 33283, 33284, 33291, 33292, 33293, 33294, 33301, 33302, 33303, 33304, 33321, 33331, 33351, 33352, 33353, + 33354, 33361, 33362, 33363, 33364, 33371, 33372, 33373, 33374, 33391, 33421, 33422, 33423, 33424, 33461, + 33501, 33521, 33531, 33591, 33592, 33593, 33594, 33691, 33701, 33702, 33703, 33704, 33711, 33721, 33731, + 33751, 33761, 33762, 33763, 33764, 33771, 33772, 33773, 33774, 33781, 33782, 33783, 33784, 33861, 33871, + 33891, 33892, 33893, 33894, 33901, 33902, 33903, 33904, 33911, 33912, 33913, 33914, 33941, 33951, 33961, + 33962, 33963, 33964, 33971, 33972, 33973, 33974, 33981, 33982, 33983, 33984, 34001, 34011, 34012, 34013, + 34014, 34021, 34022, 34023, 34024, 34031, 34032, 34033, 34034, 34061, 34111, 34112, 34113, 34114, 34121, + 34122, 34123, 34124, 34131, 34132, 34133, 34134, 34141, 34151, 34161, 34171, 34172, 34173, 34174, 34191, + 34192, 34193, 34194, 34201, 34211, 34221, 34251, 34261, 34311, 34312, 34313, 34314, 34321, 34322, 34323, + 34324, 34331, 34332, 34333, 34334, 34341, 34361, 34362, 34363, 34364, 34371, 34372, 34373, 34374, 34381, + 34382, 34383, 34384, 34391, 34392, 34393, 34394, 34401, 34402, 34403, 34404, 34411, 34451, 34452, 34453, + 34454, 34461, 34462, 34463, 34464, 34471, 34472, 34473, 34474, 34511, 34521, 34551, 34561, 34591, 34601, + 34611, 34621, 34631, 34632, 34633, 34634, 34641, 34642, 34643, 34644, 34651, 34652, 34653, 34654, 34661, + 34681, 34682, 34683, 34684, 34691, 34692, 34693, 34694, 34701, 34702, 34703, 34704, 34711, 34712, 34713, + 34714, 34721, 34722, 34723, 34724, 34731, 34732, 34733, 34734, 34741, 34751, 34771, 34811, 34812, 34813, + 34814, 34831, 34841, 34842, 34843, 34844, 34851, 34852, 34853, 34854, 34861, 34862, 34863, 34864, 34871, + 34872, 34873, 34874, 34881, 34882, 34883, 34884, 34891, 34892, 34893, 34894, 34901, 34991, 34992, 34993, + 34994, 35001, 35002, 35003, 35004, 35011, 35012, 35013, 35014, 35091, 35101, 35102, 35103, 35104, 35111, + 35112, 35113, 35114, 35121, 35122, 35123, 35124, 35131, 35141, 35181, 35182, 35183, 35184, 35201, 35221, + 35222, 35223, 35224, 35271, 35321, 35322, 35323, 35324, 35351, 35361, 35371, 35421, 35422, 35423, 35424, + 35431, 35432, 35433, 35434, 35441, 35442, 35443, 35444, 35451, 35452, 35453, 35454, 35461, 35471, 35472, + 35473, 35474, 35491, 50006, 50009, 50010, 50013, 50014, 50021, 50023, 50024, 50025, 50027, 50028, 50032, + 50037, 50038, 50054, 50076, 50083, 50086, 50091, 50092, 50098, 50101, 50107, 50109, 50110, 50113, 50114, + 50115, 50116, 50117, 50118, 50119, 50123, 50125, 50129, 50130, 50131, 50133, 50136, 50138, 50139, 50140, + 50142, 50145, 50146, 50147, 50148, 50150, 50151, 50152, 50153, 50157, 50158, 50160, 50161, 50163, 50164, + 50165, 50166, 50168, 50169, 50170, 50172, 50173, 50174, 50175, 50179, 50181, 50182, 50184, 50187, 50188, + 50189, 50190, 50191, 50192, 50195, 50197, 50198, 50201, 50206, 50224, 59101, 59102, 59103, 59104, 59105, + 59106, 59111, 59112, 59113, 59114, 59201, 59202, 59203, 59204, 59205, 59206, 59211, 59212, 59213, 59214, + 59301, 59302, 59303, 59311, 59312, 59313, 59314, 59317, 59401, 59402, 59403, 59404, 59411, 59412, 59421, + 59422, 59501, 59502, 59503, 59504, 59506, 59507, 59511, 59601, 59602, 59603, 59604, 59611, 59612, 59702, + 59703, 59705, 59706, 59711, 59712, 59713, 59714, 59801, 59802, 59803, 59901, 60101, 60102, 60103, 60104, + 60105, 60106, 60111, 60112, 60113, 60114, 60201, 60202, 60203, 60204, 60205, 60206, 60211, 60212, 60213, + 60301, 60302, 60303, 60311, 60312, 60313, 60317, 60401, 60402, 60403, 60404, 60411, 60412, 60421, 60422, + 60501, 60502, 60503, 60506, 60507, 60511, 60601, 60602, 60603, 60604, 60611, 60612, 60702, 60703, 60705, + 60706, 60711, 60712, 60713, 60714, 60801, 60802, 60803, 62101, 62201, 62202, 62801, 62901, 63101, 63201, + 63701, 110085, 110086, 110088, 110089, 110090, 112102, 112104, 112106, 112110, 112111, 112112, 112113, + 112119, 112120, 113112, 113113, 113116, 113117, 113127, 113129, 114003, 114100, 114107, 114108, 114200, + 114224, 114250, 114260, 114261, 114262, 114272, 114273, 114274, 114290, 114291, 114292, 114298, 114304, + 114307, 114308, 114325, 114326, 114327, 114333, 114336, 114337, 114338, 114339, 114340, 114341, 114342, + 114344, 114345, 114346, 114347, 114348, 114350, 114351, 114358, 114365, 114367, 114368, 114369, 114370, + 114371, 114372, 114378, 114379, 114383, 114384, 114385, 114387, 114396, 114397, 114399, 114400, 114401, + 114402, 114422, 114423, 114426, 114427, 114431, 114432, 114433, 114435, 114441, 114442, 114443, 114445, + 114451, 114452, 114455, 114468, 114471, 114482, 114483, 114484, 114485, 114486, 114487, 114488, 114489, + 114490, 114491, 114492, 114497, 114500, 114501, 114502, 114503, 114504, 114505, 114506, 114507, 114508, + 114509, 114511, 114512, 114513, 114514, 114515, 114516, 114517, 114518, 114519, 114520, 114521, 114522, + 114523, 114524, 114527, 114529, 114530, 114531, 114532, 114538, 114540, 114541, 114598, 114599, 114605, + 114606, 114609, 114610, 114611, 114616, 114617, 114618, 114619, 114620, 114621, 114622, 114623, 114631, + 114633, 114634, 114635, 114636, 114637, 114638, 114639, 114640, 114641, 114642, 114643, 114645, 114650, + 114651, 114652, 114653, 114654, 114656, 114657, 114658, 114661, 114668, 114669, 114670, 114671, 114672, + 114673, 114674, 114676, 114678, 114679, 114680, 114681, 114682, 114683, 114684, 114685, 114687, 114688, + 114690, 114691, 114692, 114693, 114694, 114695, 114696, 114697, 114698, 114699, 114700, 114701, 114702, + 114703, 114704, 114705, 114706, 114708, 114711, 114712, 114713, 114714, 114715, 114716, 114717, 114722, + 114732, 114733, 114734, 114735, 114738, 114744, 114749, 114750, 114751, 114752, 114753, 114759, 114761, + 114762, 114763, 114765, 114766, 114767, 114768, 114769, 114770, 114771, 114772, 114773, 114774, 114775, + 114776, 114777, 114778, 114779, 114801, 115001, 115002, 115003, 115004, 115100, 115103, 115104, 115106, + 115110, 115115, 115116, 115117, 115119, 115121, 115123, 115124, 115125, 115126, 115127, 115134, 115136, + 115137, 115138, 115139, 115150, 115151, 115152, 115153, 115154, 115162, 115163, 115164, 115165, 115166, + 115169, 115172, 115175, 115176, 115180, 115181, 115193, 115201, 115202, 115203, 115204, 115301, 115302, + 115303, 115304, 115307, 115308, 115309, 115310, 115402, 115403, 115404, 115405, 115406, 115407, 115503, + 115504, 115505, 115506, 115507, 115508, 115801, 115901, 116027, 116029, 116042, 116043, 116044, 116045, + 116046, 116047, 116048, 116049, 116050, 116051, 116101, 116102, 116104, 116105, 116106, 116107, 116111, + 116113, 116114, 116115, 116116, 116117, 116118, 116119, 116125, 116128, 116129, 116132, 116202, 116203, + 116208, 116209, 116210, 116506, 116507, 116508, 116509, 116510, 116609, 116610, 116611, 116612, 116615, + 116620, 116621, 116622, 116626, 116627, 116628, 116629, 116630, 116631, 116632, 116633, 116634, 116635, + 116636, 116637, 116638, 116639, 116640, 116641, 116642, 116643, 116644, 116645, 116646, 116647, 116648, + 116649, 116650, 116651, 116652, 116653, 116654, 116655, 116656, 116657, 116658, 116659, 116660, 116662, + 116701, 116702, 116703, 116704, 116707, 116760, 116761, 116762, 117102, 117159, 117171, 117411, 117421, + 117431, 117441, 117442, 117461, 117481, 117491, 117492, 117493, 117494, 117496, 117497, 117498, 117499, + 117502, 117503, 117504, 117505, 117511, 117521, 117522, 117531, 117532, 117611, 117612, 117613, 117621, + 117631, 117711, 117712, 117721, 117731, 117734, 117735, 117736, 117743, 117744, 117745, 117752, 117753, + 117754, 117761, 117762, 117763, 117764, 117770, 117771, 117772, 117779, 117780, 117781, 117785, 117786, + 117787, 117791, 117792, 117793, 117794, 117796, 117797, 117798, 117799, 117803, 117804, 117805, 117809, + 117810, 117811, 117818, 117819, 117820, 117821, 117824, 117827, 117828, 117829, 118004, 118005, 118006, + 118007, 118022, 118201, 118202, 118203, 118204, 118301, 118302, 118303, 118304, 118307, 118308, 118309, + 118310, 118402, 118403, 118404, 118405, 118406, 118407, 118503, 118504, 118505, 118506, 118507, 118508, + 118801, 118802, 118803, 118823, 118824, 118828, 118829, 118830, 118858, 118859, 118862, 118899, 118900, + 118906, 118910, 118911, 118913, 118915, 118916, 118917, 118918, 118920, 118921, 118922, 118924, 118925, + 118927, 118930, 118941, 118942, 118951, 118952, 118953, 118954, 118955, 118956, 118957, 118958, 118959, + 118960, 118961, 118962, 118963, 118964, 118965, 118966, 118967, 118968, 118971, 118972, 118980, 118981, + 118982, 118983, 118984, 118985, 118986, 118987, 118988, 118989, 118990, 118991, 118992, 118993, 118994, + 118995, 118996, 118997, 118998, 119000, 119001, 119002, 119003, 119006, 119101, 119102, 119105, 119106, + 119107, 119110, 119112, 119113, 119203, 119204, 119205, 119206, 119207, 119208, 119209, 119210, 119211, + 119212, 119213, 119214, 119215, 119216, 119217, 119218, 119219, 119220, 119221, 119222, 119223, 119224, + 119225, 119226, 119227, 119228, 119230, 119231, 119233, 119235, 119236, 119237, 119238, 119239, 119280, + 119282, 119283, 119284, 119285, 119286, 119287, 119288, 119289, 119291, 119292, 119293, 119294, 119300, + 119301, 119302, 119303, 119304, 119305, 119306, 119307, 119308, 119309, 119310, 119311, 119312, 119313, + 119314, 119315, 119316, 119317, 119318, 119319, 119320, 119321, 119323, 119324, 119325, 119326, 119327, + 119328, 119329, 119330, 119331, 119332, 119333, 119334, 119335, 119336, 119337, 119338, 119339, 119340, + 119341, 119342, 119343, 119344, 119345, 119346, 119347, 119348, 119349, 119390, 119400, 119402, 119403, + 119404, 119406, 119407, 119408, 119409, 119410, 119411, 119412, 119413, 119415, 119417, 119418, 119420, + 119422, 119423, 119424, 119426, 119427, 119428, 119429, 119431, 119432, 119433, 119434, 119435, 119436, + 119437, 119438, 119439, 119440, 119441, 119443, 119444, 119445, 119446, 119447, 119448, 119450, 119451, + 119501, 119502, 119503, 119504, 119505, 119506, 119507, 119508, 119509, 119605, 119606, 119607, 119701, + 119702, 119703, 119704, 119705, 119706, 119707, 119708, 119709, 119710, 119711, 119715, 119716, 119717, + 119718, 119719, 119720, 119721, 119723, 119724, 119727, 119728, 119729, 119730, 119731, 119732, 119733, + 119734, 119735, 119736, 119737, 119738, 119739, 119740, 119741, 119742, 119743, 119744, 119745, 119746, + 119747, 119748, 119749, 119750, 119751, 119752, 119754, 119756, 119757, 119761, 119762, 119763, 119765, + 119766, 119767, 119770, 119771, 119775, 119777, 119778, 119780, 119782, 119783, 119784, 119785, 119786, + 119787, 119789, 119790, 119801, 119802, 119803, 119804, 119805, 119806, 119807, 119808, 119809, 119810, + 119811, 119812, 119813, 119814, 119815, 119816, 119817, 119818, 119819, 119820, 119821, 119822, 119823, + 119824, 119825, 119826, 119827, 119828, 119829, 119830, 119831, 119832, 119833, 119834, 119835, 119836, + 119837, 119838, 119839, 119840, 119841, 119843, 119844, 119999, 121001, 121002, 121003, 121004, 121005, + 121006, 121007, 121008, 121009, 121010, 121011, 121012, 121029, 121044, 121045, 121046, 121047, 121050, + 121101, 121102, 121103, 121104, 121105, 121106, 121107, 121108, 121110, 121112, 121113, 121114, 121115, + 121117, 121121, 121122, 121123, 121124, 121125, 121126, 121127, 121128, 121129, 121130, 121131, 121135, + 121136, 121137, 121138, 121202, 121203, 121204, 121205, 121207, 121208, 121290, 121291, 121292, 121301, + 121302, 121303, 121304, 121305, 121306, 121307, 121325, 121326, 121327, 121401, 121402, 121403, 121404, + 121405, 121406, 121407, 121408, 121409, 121410, 121411, 121412, 121501, 121502, 121503, 121504, 121511, + 121512, 121513, 121520, 121521, 121522, 121523, 121525, 121527, 121528, 121529, 121530, 121537, 121558, + 121559, 121560, 121564, 121565, 121567, 121568, 121573, 121574, 121575, 121580, 121581, 121582, 121583, + 121584, 121591, 121598, 121599, 121600, 121601, 121602, 121603, 121604, 121605, 121606, 121607, 122000, + 122001, 122002, 122003, 122010, 122011, 122012, 122103, 122104, 122105, 122106, 122107, 122108, 122109, + 122110, 122111, 122112, 122113, 122114, 122115, 122116, 122117, 122118, 122119, 122120, 122121, 122122, + 122123, 122126, 122127, 122128, 122129, 122130, 122131, 122132, 122133, 122144, 122145, 122146, 122147, + 122148, 122149, 122150, 122151, 122152, 122153, 122154, 122160, 122161, 122162, 122163, 122164, 122165, + 122166, 122167, 122168, 122169, 122170, 122171, 122201, 122202, 122203, 122204, 122205, 122206, 122207, + 122208, 122209, 122210, 122211, 122212, 122213, 122214, 122215, 122216, 122217, 122218, 122301, 122302, + 122303, 122304, 122305, 122306, 122307, 122308, 122309, 122320, 122321, 122322, 122323, 122324, 122327, + 122392, 122393, 122701, 122702, 122703, 122704, 122705, 122750, 122751, 122760, 122762, 122763, 122764, + 122765, 122801, 122802, 122803, 122804, 122811, 122815, 122819, 122820, 122821, 122822, 122823, 122824, + 122825, 122826, 122827, 122832, 122835, 122836, 122837, 122838, 122839, 122840, 122847, 122851, 122852, + 122855, 122856, 122857, 122858, 122859, 122861, 122863, 122864, 122865, 122867, 122872, 122873, 122876, + 123001, 123002, 123003, 123004, 123006, 123007, 123008, 123009, 123010, 123011, 123012, 123101, 123102, + 123103, 123104, 123105, 123106, 123201, 123202, 123203, 123204, 123205, 123206, 123207, 123208, 123209, + 123210, 123211, 123212, 123213, 123214, 123215, 123216, 123217, 123218, 123219, 123220, 123221, 123222, + 123223, 123224, 123225, 123226, 123227, 123228, 123229, 123230, 123231, 123232, 123233, 123234, 123235, + 123236, 123301, 123302, 123303, 123304, 123305, 123306, 123311, 123337, 123410, 123411, 123412, 123413, + 123414, 123415, 123416, 123417, 123418, 123419, 123425, 123426, 123427, 123430, 123431, 123432, 123433, + 123436, 123437, 123438, 123439, 123442, 123443, 123444, 123445, 123446, 123447, 123448, 123450, 123451, + 123452, 123453, 123454, 123455, 123456, 123457, 123458, 123459, 123462, 123463, 123464, 123465, 123466, + 123481, 123482, 123483, 123484, 123487, 123488, 123489, 123490, 123493, 123494, 123495, 123496, 123497, + 123498, 123499, 123500, 123501, 123502, 123503, 123504, 123505, 123506, 123507, 123508, 123509, 123510, + 123511, 123512, 123513, 123514, 123515, 123516, 123601, 123602, 123603, 123604, 123605, 123606, 123607, + 123608, 123609, 123610, 123611, 123612, 123613, 123614, 123990, 124001, 124002, 124003, 124004, 124005, + 124006, + 124007, + 124008, + 124009, + 124010, + 124011, + 124012, + 124013, + 124014, + 124015, + 124016, + 124017, + 124018, + 124019, + 124020, + 124021, + 124022, + 124023, + 124024, + 124025, + 124026, + 124027, + 124101, + 124102, + 124103, + 124104, + 124105, + 124111, + 124112, + 124113, + 124114, + 124117, + 124119, + 125191, + 125203, + 125214, + 125225, + 125226, + 125231, + 125236, + 125240, + 125241, + 125242, + 126001, + 126002, + 126003, + 126004, + 126005, + 126006, + 126501, + 126502, + 126503, + 126504, + 126505, + 126506, + 126507, + 126508, + 126600, + 126601, + 126701, + 126702, + 126703, + 126704, + 126799, + 126801, + 126802, + 126818, + 126820, + 126821, + 126822, + 126824, + 126826, + 126827, + 126834, + 126870, + 126871, + 126874, + 126880, + 126881, + 127300, + 127353, + 127356, + 127364, + 127501, + 128001, + 128002, + 128008, + 128011, + 128012, + 128013, + 128052, + 128053, + 128055, + 128056, + 128057, + 128058, + 128062, + 128063, + 128067, + 128068, + 128070, + 128079, + 128081, + 128082, + 128083, + 128090, + 128093, + 128095, + 128096, + 128098, + 128103, + 128116, + 128118, + 128119, + 128165, + 128166, + 128167, + 128200, + 128201, + 128203, + 128220, + 128221, + 128223, + 128224, + 128312, + 128316, + 128318, + 128336, + 128337, + 128338, + 128505, + 128506, + 128511, + 128512, + 128513, + 128514, + 128516, + 129010, + 129011, + 129012, + 129013, + 129100, + 129139, + 129140, + 129141, + 129150, + 129152, + 129163, + 129190, + 129194, + 129207, + 129208, + 129209, + 129210, + 129211, + 129212, + 129405, + 129407, + 129416, + 129424, + 129432, + 129435, + 129500, + 129501, + 129502, + 129567, + 135001, + 135002, + 135003, + 135004, + 135009, + 135010, + 161067, + 161068, + 161069, + 340105, + 370101, + 370102, + 370103, + 370106, + 370108, + 370110, + 370111, + 370112, + 370113, + 370114, + 370115, + 380106, + 380108, + 380110, + 380111, + 380112, + 380113, + 380120, + 400002, + 400004, + 400006, + 400007, + 401000, + 401001, + 401005, + 401006, + 401008, + 401009, + 401010, + 401011, + 401998, + 401999, + 410002, + 510001, + 510002, + 510003, + 510004, + 510021, + 510051, + 510071, + 510081, + 510082, + 510083, + 510091, + 592101, + 592201, + 592202, + 592401, + 592501, + 592601, + 592801, + 592901, + 592902, + 593101, + 593201, + 593301, + 593501, + 593601, + 593701, + 1040113, + 1060212, + 1060565, + 1060585, + 1060601, + 1060618, + 1060630, + 1060631, + 1060632, + 1060633, + 1060634, + 1060635, + 1060636, + 1060637, + 1060638, + 1060639, + 1060640, + 1060641, + 1060642, + 1060664, + 1060703, + 1060710, + 1060711, + 1060712, + 1060713, + 1060714, + 1060730, + 1060800, + 1060813, + 1060816, + 1060817, + 1060818, + 1060819, + 1060820, + 1060821, + 1060823, + 1060825, + 1060826, + 1060830, + 1060831, + 1060890, + 1060891, + 1060892, + 1060893, + 1060894, + 1060896, + 1060897, + 1060920, + 1060921, + 1060923, + 1060927, + 1060929, + 1060932, + 1060951, + 1060952, + 1061050, + 1061257, + 1061258, + 1061266, + 1061276, + 1061277, + 1061294, + 1061300, + 1061301, + 1061310, + 1061400, + 1061401, + 1061402, + 1061403, + 1061404, + 1061410, + 1061438, + 1061468, + 1061475, + 1061608, + 1061619, + 1061626, + 1061634, + 1061662, + 1061670, + 1061671, + 1061679, + 1061710, + 1061711, + 1061712, + 1061770, + 1061772, + 1061773, + 1061785, + 1061787, + 1061848, + 1061854, + 1061857, + 1061912, + 1061922, + 1061945, + 2020301, + 2020401, + 3020201, + 3020301, + 3020401, + 5920201, + 5920301, + 5920401 + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/MasterPupil/PacketGetMasterPupilApplyRsp.cs b/GameServer/Server/Packet/Send/MasterPupil/PacketGetMasterPupilApplyRsp.cs new file mode 100644 index 0000000..6fca92e --- /dev/null +++ b/GameServer/Server/Packet/Send/MasterPupil/PacketGetMasterPupilApplyRsp.cs @@ -0,0 +1,18 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.MasterPupil; + +public class PacketGetMasterPupilApplyRsp : BasePacket +{ + public PacketGetMasterPupilApplyRsp() : base(CmdIds.GetMasterPupilApplyRsp) + { + // TODO: Hardcoded + var proto = new GetMasterPupilApplyRsp + { + Type = MasterPupilType.MasterPupilMasterType + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/MasterPupil/PacketGetMasterPupilCardRsp.cs b/GameServer/Server/Packet/Send/MasterPupil/PacketGetMasterPupilCardRsp.cs new file mode 100644 index 0000000..3959104 --- /dev/null +++ b/GameServer/Server/Packet/Send/MasterPupil/PacketGetMasterPupilCardRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.MasterPupil; + +public class PacketGetMasterPupilCardRsp : BasePacket +{ + public PacketGetMasterPupilCardRsp() : base(CmdIds.GetMasterPupilCardRsp) + { + var proto = new GetMasterPupilCardRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/MasterPupil/PacketGetMasterPupilDataRsp.cs b/GameServer/Server/Packet/Send/MasterPupil/PacketGetMasterPupilDataRsp.cs new file mode 100644 index 0000000..fdbd193 --- /dev/null +++ b/GameServer/Server/Packet/Send/MasterPupil/PacketGetMasterPupilDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.MasterPupil; + +public class PacketGetMasterPupilDataRsp : BasePacket +{ + public PacketGetMasterPupilDataRsp() : base(CmdIds.GetMasterPupilDataRsp) + { + var proto = new GetMasterPupilDataRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/MasterPupil/PacketGetMasterPupilMainDataRsp.cs b/GameServer/Server/Packet/Send/MasterPupil/PacketGetMasterPupilMainDataRsp.cs new file mode 100644 index 0000000..3cceacd --- /dev/null +++ b/GameServer/Server/Packet/Send/MasterPupil/PacketGetMasterPupilMainDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.MasterPupil; + +public class PacketGetMasterPupilMainDataRsp : BasePacket +{ + public PacketGetMasterPupilMainDataRsp() : base(CmdIds.GetMasterPupilMainDataRsp) + { + var proto = new GetMasterPupilMainDataRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Mission/PacketGetMissionDataRsp.cs b/GameServer/Server/Packet/Send/Mission/PacketGetMissionDataRsp.cs new file mode 100644 index 0000000..5b1198f --- /dev/null +++ b/GameServer/Server/Packet/Send/Mission/PacketGetMissionDataRsp.cs @@ -0,0 +1,22 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Mission; + +public class PacketGetMissionDataRsp : BasePacket +{ + public PacketGetMissionDataRsp(List MissionList, bool IsAll) : base(CmdIds.GetMissionDataRsp) + { + var proto = new GetMissionDataRsp + { + ChallengeMission = new ChallengeMissionData { IsUnlock = true }, + CloseMissionList = { MissionList.Select(m => m.MissionId) }, + IsAll = IsAll, + IsInActivity = true, + MainlineStep = new MainlineStepMission { IsUpdate = true }, + MissionList = { MissionList } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Mission/PacketGetMissionGroupMainInfoRsp.cs b/GameServer/Server/Packet/Send/Mission/PacketGetMissionGroupMainInfoRsp.cs new file mode 100644 index 0000000..66e9512 --- /dev/null +++ b/GameServer/Server/Packet/Send/Mission/PacketGetMissionGroupMainInfoRsp.cs @@ -0,0 +1,19 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Mission; + +public class PacketGetMissionGroupMainInfoRsp : BasePacket +{ + public PacketGetMissionGroupMainInfoRsp() : base(CmdIds.GetMissionGroupMainInfoRsp) + { + // TODO: Hardcoded + + var proto = new GetMissionGroupMainInfoRsp + { + HasTakeRewardMissionGroupList = { 97001 } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Mission/PacketGetMissionThemeDataRsp.cs b/GameServer/Server/Packet/Send/Mission/PacketGetMissionThemeDataRsp.cs new file mode 100644 index 0000000..50998f2 --- /dev/null +++ b/GameServer/Server/Packet/Send/Mission/PacketGetMissionThemeDataRsp.cs @@ -0,0 +1,19 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Mission; + +public class PacketGetMissionThemeDataRsp : BasePacket +{ + public PacketGetMissionThemeDataRsp() : base(CmdIds.GetMissionThemeDataRsp) + { + // TODO: Implement + + var proto = new GetMissionThemeDataRsp + { + IsGetAll = true, + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Mission/PacketGetRecommendMissionPanelListRsp.cs b/GameServer/Server/Packet/Send/Mission/PacketGetRecommendMissionPanelListRsp.cs new file mode 100644 index 0000000..9de5aa4 --- /dev/null +++ b/GameServer/Server/Packet/Send/Mission/PacketGetRecommendMissionPanelListRsp.cs @@ -0,0 +1,31 @@ +using KianaBH.Data; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Mission; + +public class PacketGetRecommendMissionPanelListRsp : BasePacket +{ + public PacketGetRecommendMissionPanelListRsp() : base(CmdIds.GetRecommendMissionPanelListRsp) + { + //var proto = new GetRecommendMissionPanelListRsp + //{ + // Retcode = GetRecommendMissionPanelListRsp.Types.Retcode.NotOpen, // set to NotOpen to prevent null reference error pop up + // RecommendMissionPanelList = + // { + // GameData.RecommendPanelData.Values.Select(x => new RecommendMissionPanel + // { + // PanelId = x.PanelId, + // IsPanelShow = true, + // }) + // } + //}; + + var proto = new GetRecommendMissionPanelListRsp + { + Retcode = GetRecommendMissionPanelListRsp.Types.Retcode.NotOpen, // set to NotOpen to prevent null reference error pop up + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/OpenWorld/PacketGetNewOpenworldRsp.cs b/GameServer/Server/Packet/Send/OpenWorld/PacketGetNewOpenworldRsp.cs new file mode 100644 index 0000000..346b3b4 --- /dev/null +++ b/GameServer/Server/Packet/Send/OpenWorld/PacketGetNewOpenworldRsp.cs @@ -0,0 +1,168 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.OpenWorld; + +public class PacketGetNewOpenworldRsp : BasePacket +{ + public PacketGetNewOpenworldRsp() : base(CmdIds.GetNewOpenworldRsp) + { + // TODO: Hardcoded + var proto = new GetNewOpenworldRsp + { + MapList = + { + new OpenworldMapBriefData + { + Cycle= 4, + HasTakeFinishRewardCycle= 4, + IsOnceUnlocked= true, + MapId= 1, + QuestLevel= 30 + }, + new OpenworldMapBriefData + { + Cycle= 14, + HasTakeFinishRewardCycle= 14, + IsOnceUnlocked= true, + MapId= 2, + QuestLevel= 30 + }, + new OpenworldMapBriefData + { + IsOnceUnlocked= true, + MapId= 301, + QuestLevel= 30, + Status= 2 + }, + new OpenworldMapBriefData + { + Cycle= 41, + IsOnceUnlocked= true, + MapId= 401, + QuestLevel= 30 + }, + new OpenworldMapBriefData + { + Cycle= 61, + IsOnceUnlocked= true, + MapId= 601, + QuestLevel= 30 + }, + new OpenworldMapBriefData + { + Cycle= 71, + IsOnceUnlocked= true, + MapId= 701, + QuestLevel= 30, + Status= 2 + }, + new OpenworldMapBriefData + { + Cycle= 81, + MapId= 801, + QuestLevel= 30, + Status= 2 + }, + new OpenworldMapBriefData + { + Cycle= 101, + MapId= 1001, + QuestLevel= 30, + Status= 2 + } + }, + CloseTime = 1749409200, + GlobalRandomSeed = 1187592820, + MaxQuestLevel = 30, + NextRefreshTime = 1749412800, + QuestLevel = 30, + QuestStar = 6, + QuestThemeIndex = 8679, + Tech = + { + new OpenworldTechData + { + Exp= 17940, + Level= 27, + MapId= 1, + NextCollectTime= 82800, + UnlockSkillList= { + 1, + 2, + 10, + 11, + 8, + 3, + 12, + 7, + 4, + 13, + 5, + 14, + 6 + } + }, + new OpenworldTechData + { + Exp= 60500, + Level= 20, + MapId= 2, + NextCollectTime= 82800, + UnlockSkillList= { + 101, + 104, + 301, + 102, + 302, + 304, + 305, + 307, + 308, + 309, + 103, + 303, + 306, + 201, + 203, + 204, + 206, + 207, + 209, + 202, + 210, + 205, + 208, + 310 + } + }, + new OpenworldTechData + { + MapId= 301 + }, + new OpenworldTechData + { + MapId= 401 + }, + new OpenworldTechData + { + MapId= 601 + }, + new OpenworldTechData + { + MapId= 701 + }, + new OpenworldTechData + { + MapId= 801 + }, + new OpenworldTechData + { + MapId= 1001 + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/OpenWorld/PacketGetOpenworldEndlessDataRsp.cs b/GameServer/Server/Packet/Send/OpenWorld/PacketGetOpenworldEndlessDataRsp.cs new file mode 100644 index 0000000..8753643 --- /dev/null +++ b/GameServer/Server/Packet/Send/OpenWorld/PacketGetOpenworldEndlessDataRsp.cs @@ -0,0 +1,24 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; +using KianaBH.Util.Extensions; + +namespace KianaBH.GameServer.Server.Packet.Send.OpenWorld; + +public class PacketGetOpenworldEndlessDataRsp : BasePacket +{ + public PacketGetOpenworldEndlessDataRsp(uint level, EndlessType type) : base(CmdIds.GetOpenworldEndlessDataRsp) + { + var random = new Random(); + var proto = new GetOpenworldEndlessDataRsp + { + BeginTime = 0, + EndTime = (uint)(Extensions.GetUnixSec() + 3600 * 24 * 7), + CloseTime = (uint)(Extensions.GetUnixSec() + 3600 * 24 * 7 + 1200), + RandomSeed = (uint)random.Next(1, 1000001), + HardLevel = level, + Type = type, + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/OpenWorld/PacketGetOpenworldMechaDefenseRsp.cs b/GameServer/Server/Packet/Send/OpenWorld/PacketGetOpenworldMechaDefenseRsp.cs new file mode 100644 index 0000000..f5ce6cf --- /dev/null +++ b/GameServer/Server/Packet/Send/OpenWorld/PacketGetOpenworldMechaDefenseRsp.cs @@ -0,0 +1,20 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.OpenWorld; + +public class PacketGetOpenworldMechaDefenseRsp : BasePacket +{ + public PacketGetOpenworldMechaDefenseRsp() : base(CmdIds.GetOpenworldMechaDefenseRsp) + { + var proto = new GetOpenworldMechaDefenseRsp + { + MechaDefense = new OpenworldMechaDefense + { + LeftEnterTimes = 1 + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/OpenWorld/PacketGetOpenworldQuestActivityRsp.cs b/GameServer/Server/Packet/Send/OpenWorld/PacketGetOpenworldQuestActivityRsp.cs new file mode 100644 index 0000000..9e41b05 --- /dev/null +++ b/GameServer/Server/Packet/Send/OpenWorld/PacketGetOpenworldQuestActivityRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.OpenWorld; + +public class PacketGetOpenworldQuestActivityRsp : BasePacket +{ + public PacketGetOpenworldQuestActivityRsp() : base(CmdIds.GetOpenworldQuestActivityRsp) + { + var proto = new GetOpenworldQuestActivityRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetAchievementDataRsp.cs b/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetAchievementDataRsp.cs new file mode 100644 index 0000000..0e740bf --- /dev/null +++ b/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetAchievementDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Pjms; + +public class PacketPjmsGetAchievementDataRsp : BasePacket +{ + public PacketPjmsGetAchievementDataRsp() : base(CmdIds.PjmsGetAchievementDataRsp) + { + var proto = new PjmsGetAchievementDataRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetActivityPanelRsp.cs b/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetActivityPanelRsp.cs new file mode 100644 index 0000000..cf91fab --- /dev/null +++ b/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetActivityPanelRsp.cs @@ -0,0 +1,60 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Pjms; + +public class PacketPjmsGetActivityPanelRsp : BasePacket +{ + public PacketPjmsGetActivityPanelRsp() : base(CmdIds.PjmsGetActivityPanelRsp) + { + // TODO: Hardcoded + var proto = new PjmsGetActivityPanelRsp + { + ActivityPanelList = + { + new PjmsActivityPanel + { + ActivityId = 1001, + AdvanceBeginTime = 1712800800, + AdvanceEndTime = 1716494399, + BeginTime = 1712800800, + EndTime = 4294967295, + IsResident = true, + MinLevel = 30 + }, + new PjmsActivityPanel + { + ActivityId = 1002, + AdvanceBeginTime = 1718848800, + AdvanceEndTime = 1721851199, + BeginTime = 1718848800, + EndTime = 4294967295, + IsResident = true, + MinLevel = 30 + }, + new PjmsActivityPanel + { + ActivityId = 1003, + AdvanceBeginTime = 1718157600, + AdvanceEndTime = 1725479999, + BeginTime = 1712887200, + EndTime = 4294967295, + IsResident = true, + MinLevel = 30 + }, + new PjmsActivityPanel + { + ActivityId = 1004, + AdvanceBeginTime = 1726452000, + AdvanceEndTime = 1729108799, + BeginTime = 1726452000, + EndTime = 4294967295, + IsResident = true, + MinLevel = 30 + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetChapterDataRsp.cs b/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetChapterDataRsp.cs new file mode 100644 index 0000000..d68a2df --- /dev/null +++ b/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetChapterDataRsp.cs @@ -0,0 +1,85 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Pjms; + +public class PacketPjmsGetChapterDataRsp : BasePacket +{ + public PacketPjmsGetChapterDataRsp() : base(CmdIds.PjmsGetChapterDataRsp) + { + // TODO: Hardcoded + var proto = new PjmsGetChapterDataRsp + { + CurChapterId = 100, + IsAll = true, + ChapterList = + { + new PjmsChapter + { + ChapterId = 100, + ChapterShadowlake = new ChapterShadowLake + { + EnergyNum = 2, + MaxEnergyNum = 5 + }, + CurTrackSeriesId = 1022, + Exp = 530, + Formation = + new PjmsFormation + { + AvatarIdList = { 150 }, + ElfId = 4224, + IsElfMode = true + }, + LastTakeChapterRewardLevel = 7, + LastTakeChapterRewardMaterialNum = 1000, + Level = 7, + PlayingBgmId = 19, + TalentLevel = 7, + UnitInfo = new PjmsUnitInfo + { + AuxiliaryUnitList = + { + new PjmsAuxiliaryUnit { Exp = 170, Level = 2, UniqueId = 1000, UnitId = 301 }, + new PjmsAuxiliaryUnit { Level = 1, UniqueId = 101, UnitId = 301 }, + new PjmsAuxiliaryUnit { Exp = 10, Level = 2, UniqueId = 1002, UnitId = 201 }, + new PjmsAuxiliaryUnit { Level = 1, UniqueId = 1003, UnitId = 205 }, + new PjmsAuxiliaryUnit { Level = 1, UniqueId = 1004, UnitId = 302 }, + new PjmsAuxiliaryUnit { Level = 1, UniqueId = 1005, UnitId = 302 }, + new PjmsAuxiliaryUnit { Level = 1, UniqueId = 1006, UnitId = 303 }, + new PjmsAuxiliaryUnit { Level = 1, UniqueId = 1007, UnitId = 207 }, + new PjmsAuxiliaryUnit { Level = 1, UniqueId = 1008, UnitId = 303 } + }, + CoreUnitList = + { + new PjmsCoreUnit { Level = 1, UnitId = 1 }, + new PjmsCoreUnit { Level = 2, UnitId = 2 }, + new PjmsCoreUnit { Level = 1, UnitId = 3 } + }, + CurUnitSetId = 1, + UnitSetList = + { + new PjmsUnitSet + { + SetId = 1, + SlotList = + { + new PjmsUnitSetSlot { Id = 2, SlotId = 10 }, + new PjmsUnitSetSlot { Id = 1002, SlotId = 100 }, + new PjmsUnitSetSlot { Id = 1004, SlotId = 110 }, + new PjmsUnitSetSlot { Id = 1006, SlotId = 120 } + } + }, + new PjmsUnitSet { SetId = 2 }, + new PjmsUnitSet { SetId = 3 }, + new PjmsUnitSet { SetId = 4 }, + new PjmsUnitSet { SetId = 5 } + } + } + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetConditionDataRsp.cs b/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetConditionDataRsp.cs new file mode 100644 index 0000000..88c12db --- /dev/null +++ b/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetConditionDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Pjms; + +public class PacketPjmsGetConditionDataRsp : BasePacket +{ + public PacketPjmsGetConditionDataRsp() : base(CmdIds.PjmsGetConditionDataRsp) + { + var proto = new PjmsGetConditionDataRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetCurWorldRsp.cs b/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetCurWorldRsp.cs new file mode 100644 index 0000000..f16fbce --- /dev/null +++ b/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetCurWorldRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Pjms; + +public class PacketPjmsGetCurWorldRsp : BasePacket +{ + public PacketPjmsGetCurWorldRsp() : base(CmdIds.PjmsGetCurWorldRsp) + { + var proto = new PjmsGetCurWorldRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetMainDataRsp.cs b/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetMainDataRsp.cs new file mode 100644 index 0000000..3700ce3 --- /dev/null +++ b/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetMainDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Pjms; + +public class PacketPjmsGetMainDataRsp : BasePacket +{ + public PacketPjmsGetMainDataRsp() : base(CmdIds.PjmsGetMainDataRsp) + { + var proto = new PjmsGetMainDataRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetResidentStageDataRsp.cs b/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetResidentStageDataRsp.cs new file mode 100644 index 0000000..8a6f3b8 --- /dev/null +++ b/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetResidentStageDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Pjms; + +public class PacketPjmsGetResidentStageDataRsp : BasePacket +{ + public PacketPjmsGetResidentStageDataRsp() : base(CmdIds.PjmsGetResidentStageDataRsp) + { + var proto = new PjmsGetResidentStageDataRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetStoryDataRsp.cs b/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetStoryDataRsp.cs new file mode 100644 index 0000000..23c02c2 --- /dev/null +++ b/GameServer/Server/Packet/Send/Pjms/PacketPjmsGetStoryDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Pjms; + +public class PacketPjmsGetStoryDataRsp : BasePacket +{ + public PacketPjmsGetStoryDataRsp() : base(CmdIds.PjmsGetStoryDataRsp) + { + var proto = new PjmsGetStoryDataRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Player/PacketGetAssistantFrozenListRsp.cs b/GameServer/Server/Packet/Send/Player/PacketGetAssistantFrozenListRsp.cs new file mode 100644 index 0000000..4cb895f --- /dev/null +++ b/GameServer/Server/Packet/Send/Player/PacketGetAssistantFrozenListRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Player; + +public class PacketGetAssistantFrozenListRsp : BasePacket +{ + public PacketGetAssistantFrozenListRsp() : base(CmdIds.GetAssistantFrozenListRsp) + { + var proto = new GetAssistantFrozenListRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Player/PacketGetBlackListRsp.cs b/GameServer/Server/Packet/Send/Player/PacketGetBlackListRsp.cs new file mode 100644 index 0000000..dff373b --- /dev/null +++ b/GameServer/Server/Packet/Send/Player/PacketGetBlackListRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Player; + +public class PacketGetBlackListRsp : BasePacket +{ + public PacketGetBlackListRsp() : base(CmdIds.GetBlackListRsp) + { + var proto = new GetBlackListRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Player/PacketGetConfigRsp.cs b/GameServer/Server/Packet/Send/Player/PacketGetConfigRsp.cs new file mode 100644 index 0000000..7d48c43 --- /dev/null +++ b/GameServer/Server/Packet/Send/Player/PacketGetConfigRsp.cs @@ -0,0 +1,407 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; +using KianaBH.Util.Extensions; + + +namespace KianaBH.GameServer.Server.Packet.Send.Player; + +public class PacketGetConfigRsp : BasePacket +{ + public PacketGetConfigRsp() : base(CmdIds.GetConfigRsp) + { + //MemoryStream ms = new(Extensions.StringToByteArray("080010e802203c287830c070389e95a2a306403248940160e8077819fa0105089407100afa010608ce08109802fa010608cf08109802fa010608d008109802fa010508d208103cfa010608d408109802fa010608d508109601fa010608d60810c801fa010608d70810c801fa010508d8081078fa010608db08109802fa010508a7391064fa0105089e3a100afa010508a83d100afa010708fdfa0610c801fa0106089cfb061008fa010608a6fc06100afa01060888fd06100afa01060898fd061008fa010608e7ff06100afa010608ebff061008fa010608818007100afa010608a48307100afa010608a98307100afa010608ba8307100afa010608df83071008fa010608e283071008fa010608ef83071008fa0106089c8b07100afa0106089a9007100afa010608c4a2071008fa010608c9b107100afa010608d1b107100afa010608d2b107100afa010608ceb307100afa010608d2b307100afa01060892d207100afa010608dbde07100afa010608dcde07100afa0106089ce640106482020a6f76657273656173303188021a9a02160802105018c0e494a30620c0bcafa40628c91a28ad1b9a0211080410d80418c0e494a30620c0bcafa406a00278a802a0bfc6fa05b002a0a8d6fa05b80202c802ff93ebdc03d00280cab5ee01e802fa36f00205f80280a3059203bb02089a2210021884e1f8ee052084dddadf0728003818420130480f50636212444c435f426f7867616368615f5469746c656a275370726974654f75747075742f53686f7054616249636f6e732f49636f6e53686f70476163686172416576656e742f496d6d6564696174656c792f4163746976697479506167652f332e35535068756e74696e6767616368615f62616e6e65725f74727565636f6c6f727a00820115332e35535068756e74696e6767616368615f4465738801ce029201386576656e742f496d6d6564696174656c792f4163746976697479506167652f332e35535068756e74696e675f62675f74727565636f6c6f729a01406576656e742f496d6d6564696174656c792f4163746976697479506167652f332e35535068756e74696e6767616368615f7469746c655f74727565636f6c6f72aa010092036608af28102e18a0c9f38e0620bf8bc1bc08280042013048505063620d352e365455504f5f7469746c656a1c5370726974654f75747075742f42502f352e365f5475506f5f54616272007a0082010b352e365455504f5f6465738801bc059201009a0100aa01009203ad0208b72810021880d7fd8e0620bf979ad30728003823420130481950636211352e34646c6367616368615f7469746c656a275370726974654f75747075742f53686f7054616249636f6e732f49636f6e53686f704761636861723d6576656e742f496d6d6564696174656c792f4163746976697479506167652f352e345f444c433267616368615f62616e6e65725f74727565636f6c6f727a0082010f352e34646c6367616368615f446573880182079201396576656e742f496d6d6564696174656c792f4163746976697479506167652f352e345f444c433267616368615f62675f74727565636f6c6f729a013c6576656e742f496d6d6564696174656c792f4163746976697479506167652f352e345f444c433267616368615f7469746c655f74727565636f6c6f72aa010092039102089d2b100318c0b2cca10620bff0a9a30628003839420130480a5063620f352e36425053686f705f5469746c656a2e6576656e742f496d6d6564696174656c792f42502f636f6e73745f53686f7054616230345f74727565636f6c6f72723f6576656e742f496d6d6564696174656c792f42502f53686f702f362e355f362e365f425053686f7042616e6e65725f62616e6e65725f74727565636f6c6f727a008201008801ca0992013b6576656e742f496d6d6564696174656c792f42502f53686f702f362e355f362e365f425053686f7042616e6e65725f62675f74727565636f6c6f729a01215370726974654f75747075742f42502f42505f42616e6e65725f546f756d696e67a00193b93baa01009203ab03089f2b100418c0e494a30620c0bcafa4062800389e86073880a7293881a7293882a7293883a7293884a7293885a7293886a7293887a7293888a7293889a729388aa729388ba729388ca729388da729388ea729388fa7293890a7293891a729420134480950636217362e3653686f7070696e674461797330315f7469746c656a3f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330315f7461625f74727565636f6c6f7272426576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330315f62616e6e65725f74727565636f6c6f727a00820111362e3653686f7070696e6730315f4465738801d00f92013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330315f62675f74727565636f6c6f729a01416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330315f7469746c655f74727565636f6c6f72a001afd207aa01009203e10208a02b100318c0e494a30620c0bcafa40628003816420130481450636217362e3653686f7070696e674461797330325f7469746c656a3f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f7461625f74727565636f6c6f7272426576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f62616e6e65725f74727565636f6c6f727a00820111362e3653686f7070696e6730325f4465738801cf0f92013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f62675f74727565636f6c6f729a01416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f7469746c655f74727565636f6c6f72a001afd207aa01009203e10208a12b100318c0e494a30620c0bcafa4062800382d420130481450636217362e3653686f7070696e674461797330335f7469746c656a3f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f7461625f74727565636f6c6f7272426576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330335f62616e6e65725f74727565636f6c6f727a00820111362e3653686f7070696e6730335f4465738801ce0f92013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330335f62675f74727565636f6c6f729a01416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330335f7469746c655f74727565636f6c6f72a001b0d207aa01009203df0208a22b101a18c0e494a30620c0bcafa4062800380d420130481450636217362e3653686f7070696e674461797330345f7469746c656a3f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330345f7461625f74727565636f6c6f7272426576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330345f62616e6e65725f74727565636f6c6f727a00820111362e3653686f7070696e6730345f4465738801cd0f92013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330345f62675f74727565636f6c6f729a01416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330345f7469746c655f74727565636f6c6f72a00106aa01009203d00208a42b100418c0d2e5a30620c0bcafa4062800389c8607420134481450636211362e365f573344726573735f5469746c656a386576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573344726573735f5461625f74727565636f6c6f72723b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573344726573735f42616e6e65725f74727565636f6c6f727a183c747970653d22377c31342220746578743d22474f222f3e82010d362e365f44726573735f4465738801f80a9201376576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573344726573735f42475f74727565636f6c6f729a013a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573344726573735f5469746c655f74727565636f6c6f72aa01009203d20208a52b100418c0e494a30620bfafe0a3062800389d8607420134481450636211362e365f573144726573735f5469746c656a386576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573144726573735f5461625f74727565636f6c6f72723b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573144726573735f42616e6e65725f74727565636f6c6f727a183c747970653d22377c31342220746578743d22474f222f3e82010f362e365f573144726573735f4465738801f80a9201376576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573144726573735f42475f74727565636f6c6f729a013a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573144726573735f5469746c655f74727565636f6c6f72aa01009203dd0208a62b101518c0bcafa40620bfb1d4a406280038848c0638858c06420130481450636216352e385f73686f7070696e67646179735f7469746c656a386576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f536372617463685f5461625f74727565636f6c6f72723a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f536372617463685f496d6167655f74727565636f6c6f727a183c747970653d2239317c312220746578743d22474f222f3e820113332e3673686f7070696e67646179735f4465738801f80a9201376576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f536372617463685f42475f74727565636f6c6f729a01396576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f536372617463685f546578745f74727565636f6c6f72aa01009203be0308a72b100418c0e494a30620bfbcafa406280038daae0538e5ae0538dbae0538e6ae0538dcae0538ddae0538deae0538dfae0538e7ae0538e8ae0538e9ae0538eaae0538e0ae0538e1ae0538e2ae0538e3ae0538ebae0538ecae0538edae0538eeae0538fbf74038fcf740420130481e50636213362e365f4368617261637465725f7469746c656a3e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f43686172616374657253686f775f7461625f74727565636f6c6f72723d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4368617261637465725f62616e6e65725f74727565636f6c6f727a203c747970653d2236337c34303030303138312220746578743d22474f22202f3e820111362e365f4368617261637465725f6465738801b0099201396576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4368617261637465725f62675f74727565636f6c6f729a013c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4368617261637465725f7469746c655f74727565636f6c6f72aa01009203ec0208aa2b100418c0e494a30620bfbcafa406280038d6ae0538d7ae0538d8ae0538d9ae05420130483250636212362e365f4558576561706f6e5f7469746c656a396576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4558576561706f6e5f7461625f74727565636f6c6f72723c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4558576561706f6e5f62616e6e65725f74727565636f6c6f727a1f3c747970653d22313030377c31313835312220746578743d22474f22202f3e820110362e365f4558576561706f6e5f4465738801ad099201386576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4558576561706f6e5f62675f74727565636f6c6f729a013c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4558576561706f6e5f746974696c655f74727565636f6c6f72aa01009203e10208ab2b100318c1bcafa40620c0b1d4a40628003816420130481450636217362e3653686f7070696e674461797330325f7469746c656a3f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f7461625f74727565636f6c6f7272426576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f62616e6e65725f74727565636f6c6f727a00820111362e3653686f7070696e6730325f4465738801f80a92013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f62675f74727565636f6c6f729a01416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f7469746c655f74727565636f6c6f72a001afd207aa01009203e10208ac2b100318c1bcafa40620c0b1d4a4062800382d420130481450636217362e3653686f7070696e674461797330335f7469746c656a3f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f7461625f74727565636f6c6f7272426576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330335f62616e6e65725f74727565636f6c6f727a00820111362e3653686f7070696e6730335f4465738801f70a92013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330335f62675f74727565636f6c6f729a01416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330335f7469746c655f74727565636f6c6f72a001b0d207aa01009203df0208ad2b100318c0ddc0a30620c0c78aa40628003820420130481450636211332e3374696d6573686f705f7469746c656a396576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f54696d6553686f705f5461625f74727565636f6c6f72723c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f54696d6553686f705f42616e6e65725f74727565636f6c6f727a183c747970653d2239317c352220746578743d22474f222f3e82010f332e3374696d6573686f705f4465738801a0069201386576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f54696d6553686f705f42475f74727565636f6c6f729a013b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f54696d6553686f705f5469746c655f74727565636f6c6f72a00105a001af3aa001f437aa01009203af0308ae2b100418c0e494a30620c0a2f2a4062800389ea929389fa92938a0a92938a1a92938a2a92938a3a92938a4a92938a5a92938a6a92938a7a92938a8a92938a9a92938aaa92938aba92938aca92938ada92938aea929420130481950636210362e3677656c666172655f7469746c656a3f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c666172656d697373696f6e5f7461625f74727565636f6c6f7272426576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c666172656d697373696f6e5f62616e6e65725f74727565636f6c6f727a1b3c747970653d2236347c353535312220746578743d22474f222f3e82010e362e3677656c666172655f6465738801aa0b92013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c666172656d697373696f6e5f62675f74727565636f6c6f729a01416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c666172656d697373696f6e5f7469746c655f74727565636f6c6f72aa01009203ee0208af2b100318c0e494a30620c09797a50628003834420130481950636214362e3677656c6661726573686f705f7469746c656a3c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c6661726573686f705f7461625f74727565636f6c6f72723f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c6661726573686f705f62616e6e65725f74727565636f6c6f727a1b3c747970653d2236347c353535302220746578743d22474f222f3e820112362e3677656c6661726573686f705f6465738801a90b92013b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c6661726573686f705f62675f74727565636f6c6f729a013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c6661726573686f705f7469746c655f74727565636f6c6f72a001da8007aa01009203950308b02b100418a0e1a9a40620bfa2f2a4062800388ea929388fa9293890a9293891a9293892a9293893a9293894a9293895a9293896a9293897a9293898a9293899a929389aa929389ba929389ca929389da929420130483250636212362e335f57617665527573685f7469746c656a396576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f57617665527573685f7461625f74727565636f6c6f72723c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f57617665527573685f62616e6e65725f74727565636f6c6f727a193c747970653d223134327c302220746578743d22474f222f3e820110362e335f57617665527573685f4465738801880e9201386576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f57617665527573685f62675f74727565636f6c6f729a013b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f57617665527573685f7469746c655f74727565636f6c6f72aa01009203e20208b12b100418c0e494a306209f99aba306280038afa929420131481e50636211362e365f4d61696e4f57315f7469746c656a3b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765315f7461625f74727565636f6c6f72723e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765315f62616e6e65725f74727565636f6c6f727a193c747970653d2239347c33372220746578743d22474f222f3e820112362e365f4d61696e5374616765315f4465738801c10c92013a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765315f62675f74727565636f6c6f729a013d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765315f7469746c655f74727565636f6c6f72aa01009203e20208b22b100418a099aba306209f8ed0a306280038b0a929420131481e50636211362e365f4d61696e4f57315f7469746c656a3b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765325f7461625f74727565636f6c6f72723e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765325f62616e6e65725f74727565636f6c6f727a193c747970653d2239347c33372220746578743d22474f222f3e820112362e365f4d61696e5374616765325f4465738801c10c92013a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765325f62675f74727565636f6c6f729a013d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765325f7469746c655f74727565636f6c6f72aa01009203e20208b32b100418a08ed0a30620bfa2f2a406280038b1a929420131481e50636211362e365f4d61696e4f57315f7469746c656a3b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765335f7461625f74727565636f6c6f72723e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765335f62616e6e65725f74727565636f6c6f727a193c747970653d2239347c33372220746578743d22474f222f3e820112362e365f4d61696e5374616765335f4465738801c10c92013a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765335f62675f74727565636f6c6f729a013d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765335f7469746c655f74727565636f6c6f72aa01009203800308b42b100418c0e494a30620bfa2f2a406280038b2a92938b3a92938b4a92938b5a92938b7a92938b9a92938cfaa2938d0aa2938d1aa2938d2aa29420130481e50636210362e365f4d61696e4f575f7469746c656a3a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e53746167655f7461625f74727565636f6c6f72723d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e53746167655f62616e6e65725f74727565636f6c6f727a193c747970653d2239347c33372220746578743d22474f222f3e820111362e365f4d61696e53746167655f4465738801c00c9201396576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e53746167655f62675f74727565636f6c6f729a013c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e53746167655f7469746c655f74727565636f6c6f72aa01009203d50308b52b100418a0b1d5a30620c0a2f2a40628003882aa293883aa293884aa293887aa293888aa293889aa29388aaa29388baa29388caa29388daa29388eaa29388faa293890aa293891aa293892aa293893aa293894aa293895aa293896aa293897aa293898aa293899aa29389aaa29389baa29389caa29389daa293885aa293886aa29420130481e5063620f362e36747269706c655f7469746c656a3e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c656d697373696f6e5f7461625f74727565636f6c6f7272416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c656d697373696f6e5f62616e6e65725f74727565636f6c6f727a1b3c747970653d2238317c393038302220746578743d22474f222f3e82010d362e36747269706c655f6465738801a40d92013d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c656d697373696f6e5f62675f74727565636f6c6f729a01406576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c656d697373696f6e5f7469746c655f74727565636f6c6f72aa01009203e80208b62b100318a0b1d5a30620c09797a50628003847420130481e50636213362e36747269706c6573686f705f7469746c656a3b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c6573686f705f7461625f74727565636f6c6f72723e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c6573686f705f62616e6e65725f74727565636f6c6f727a1b3c747970653d2238317c393038302220746578743d22474f222f3e820111362e36747269706c6573686f705f6465738801a30d92013a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c6573686f705f62675f74727565636f6c6f729a013d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c6573686f705f7469746c655f74727565636f6c6f72a001eddd07aa010092038c0208bb2b100318c0f0a9a30620bfae87a5062800383b420130480a5063620f352e36425053686f705f5469746c656a2e6576656e742f496d6d6564696174656c792f42502f636f6e73745f53686f7054616230345f74727565636f6c6f72723f6576656e742f496d6d6564696174656c792f42502f53686f702f362e365f362e375f425053686f7042616e6e65725f62616e6e65725f74727565636f6c6f727a008201008801ca0992013b6576656e742f496d6d6564696174656c792f42502f53686f702f362e365f362e375f425053686f7042616e6e65725f62675f74727565636f6c6f729a01215370726974654f75747075742f42502f42505f42616e6e65725f546f756d696e67aa010092039e0408bc2b100418c0d0f1a20620c0f0a9a30628003896a205420135481450636216362e355f362e365f53686f77506167655f7469746c656a3d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e355f362e365f53686f77506167655f7461625f74727565636f6c6f7272406576656e742f496d6d6564696174656c792f4163746976697479506167652f362e355f362e365f53686f77506167655f62616e6e65725f74727565636f6c6f727ac5013c747970653d22776562766965772220746578743d22474f2220687265663d2268747470733a2f2f6163742e686f796f76657273652e636f6d2f70757a7a6c652f6268332f6532303233303531317072657669657730315f3739382f696e6465782e68746d6c3f67616d655f62697a3d6268335f6f73267369676e5f747970653d3226617574686b65795f7665723d3126617574685f61707069643d6532303233303531317072657669657730312677696e5f6d6f64653d66756c6c73637265656e222f3e820114362e355f362e365f53686f77506167655f4465738801840792013c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e355f362e365f53686f77506167655f62675f74727565636f6c6f729a013f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e355f362e365f53686f77506167655f7469746c655f74727565636f6c6f72aa01009203d20208bd2b100418c0ddc0a30620bfc78aa4062800389f8607420134481450636211362e365f573244726573735f5469746c656a386576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573244726573735f5461625f74727565636f6c6f72723b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573244726573735f42616e6e65725f74727565636f6c6f727a183c747970653d2239317c352220746578743d22474f222f3e82010f362e365f573244726573735f4465738801f70a9201376576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573244726573735f42475f74727565636f6c6f729a013a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573244726573735f5469746c655f74727565636f6c6f72aa01009203ff0208a77f100418c0dd9d9e0620bfe3a0ad062800389bf740420131480f50636211362e335f4d656469614a575f7469746c656a3a6576656e742f496d6d6564696174656c792f4163746976697479506167652f636f6e73745f4d656469614a575f7461625f74727565636f6c6f72723d6576656e742f496d6d6564696174656c792f4163746976697479506167652f636f6e73745f4d656469614a575f62616e6e65725f74727565636f6c6f727a3d3c747970653d2262726f777365722220746578743d22474f2220687265663d2268747470733a2f2f686f796f2e6c696e6b2f3031586f42424164222f3e82010f362e335f4d656469614a575f4465738801ac029201396576656e742f496d6d6564696174656c792f4163746976697479506167652f636f6e73745f4d656469614a575f62675f74727565636f6c6f729a013c6576656e742f496d6d6564696174656c792f4163746976697479506167652f636f6e73745f4d656469614a575f7469746c655f74727565636f6c6f72aa01009a030708882710c193389a030708c03e10c293389a030708c86510c393389a030808a09c0110c493389a030808b0ea0110c59338a00314a803c0b9aec905b003c0a493cc05ba031541726d616461416374697669747942746e5f446563c00301c8033cd00332d8030ae00300e80319f00301f803ed40f803ee40f803ef40f803f04080043688041e900432980419a2040c080010001800200028003000a2040d080110cd021814200328053003a2040d0802109a0518282007280a3007a2040d080310e707183c200a280f300aa8044bb00405c00464c80414d004901cd8048c0180050a880532900519a0051eaa05910708d1f40808d2f40808d3f40808d4f40808d5f40808d6f40808d7f40808d8f40808d9f40808daf40808dbf40808dcf40808ddf40808def40808dff40808e0f40808e1f40808e2f40808e3f40808e4f40808e5f40808e6f40808e7f40808e8f40808e9f40808eaf40808ebf40808ecf40808edf40808eef40808eff40808f0f40808f1f40808f2f40808f3f40808f4f40808f5f40808f6f40808f7f40808f8f40808f9f40808faf40808fbf40808fcf40808fdf40808fef40808fff4080880f5080881f5080882f5080883f5080884f5080885f5080886f5080887f5080888f5080889f508088af508088bf508088cf508088df508088ef508088ff5080890f5080891f5080892f5080893f5080894f5080895f5080896f5080897f5080898f5080899f508089af508089bf508089cf508089df508089ef508089ff50808a0f50808a1f50808a2f50808a3f50808a4f50808a5f50808a6f50808a7f50808a8f50808a9f50808aaf50808abf50808acf50808adf50808aef50808aff50808b0f50808b1f50808b2f50808b3f50808b4f5080899f608089af608089bf608089cf608089df608089ef608089ff60808a0f60808a1f60808a2f60808a3f60808a4f60808a5f60808a9ab0908aaab0908abab0908acab0908adab0908aeab0908afab0908b0ab0908b1ab0908b2ab0908b3ab0908b4ab0908b5ab0908b6ab0908b7ab0908b8ab0908b9ab0908baab0908bbab0908bcab0908bdab0908beab0908bfab0908c0ab0908c1ab0908c2ab0908c3ab0908c4ab0908c5ab0908c6ab0908c7ab09089daf09089eaf09089faf0908a0af0908a1af0908a2af0908a3af0908a4af0908a5af0908a6af0908a7af0908a8af0908a9af0908aaaf0908abaf0908acaf0908adaf0908aeaf0908cefa360895fb3608c9bb0908ddbb0908e7bb090884dc0a0885dc0a0886dc0a0887dc0a0888dc0a0889dc0a088adc0a088bdc0a088cdc0a088ddc0a088edc0a088fdc0a0890dc0a0891dc0a0892dc0a0893dc0a0894dc0a0895dc0a0896dc0a0897dc0a0898dc0a0899dc0a089adc0a089bdc0a089cdc0a089ddc0a089edc0a089fdc0a08a0dc0a08a1dc0a08a2dc0a08a3dc0a08a4dc0a08a5dc0a08a6dc0a08a7dc0a08ac88f50408b088f50408b488f50408b888f50408bd88f50408be88f50408bf88f50408c088f50408c188f50408c288f50408c388f50408e697930508ca98930508ae99930508929a93051004100f10141015101810191020100a100b1023102110251024b80501c00501d005c0cda4a306")); + //using BinaryReader br = new(ms); + //byte[] Body = br.ReadBytes((int)ms.Length); + //var rsp = GetConfigRsp.Parser.ParseFrom(Body); + + //rsp.ServerCurTime = (uint)Extensions.GetUnixSec(); + //rsp.RegionName = "KianaBH"; + //rsp.NextDayBeginTime = (uint)Extensions.GetUnixSec() + 604800 / 7; + + var now = (uint)Extensions.GetUnixSec(); + + var proto = new GetConfigRsp + { + RegionName = "overseas01", + ServerCurTime = now, + NextDayBeginTime = now + 86400, + DayTimeOffset = 14400, + StaminaRecoverConfigTime = 360, + ScoinLimit = 999999999, + FriendsPointLimit = 500000000, + MaxFriendNum = 148, + MinInviteLevel = 26, + PowerUpScoinCostRate = 50, + SameTypePowerUpRate = 120, + AvatarReviveHcoinCost = 60, + AvatarMaxAddGoodfeel = 1000, + DisjoinEquipmentBackExpPercent = 25, + EquipDisjointUnlockLevel = 25, + DisjoinEquipmentMaxBatchNum = 50, + StigmataRuneOpenLevel = 1, + StigmataPromoteMaxTimes = 10, + StigmataRuneCombatRatio = 0, + StigmataDisjoinBackExpPercent = 25, + StigmataRefineValueBackPercent = 1, + ScoinConvertPerExp = 54, + RogueStageOpenLevel = 20, + IslandEventRefreshInterval = 120, + IslandVisitMaxHelpNum = 5, + WeekDayActivityCoinItemId = 7034, + CostSeniorEquipAfterCancelProtectMinTimeDiff = 86400, + MpResetSkillHcoinCost = 30, + MpMemberMaxTimesForAllAct = 50, + MpMemberExhaustedDropRatio = 25, + FriendAssistantAddBond = 5, + ArmadaManageMailLength = 100, + ArmadaContactLength = 20, + ArmadaManageMailCd = 3600, + ArmadaBulletinLength = 140, + TrialAvatarPlayerMinLevel = 10, + IsRandomBoxProductOpen = false, + ProductRandomBoxBeginTime = 0, + ProductRandomBoxEndTime = 0, + IsCanGalTouch = true, + IsResistanceOpen = true, + OpenworldJudgeParaType1 = 0, + OpenworldJudgeParaType2 = 0, + OpenworldJudgeParaType3 = 0, + OpenworldJudgeParaType4 = 0, + GachaTicketList = + { + new GetConfigRsp.Types.GachaTicket { MaterialId = 916, HcoinCost = 10 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 1102, HcoinCost = 280 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 1103, HcoinCost = 280 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 1104, HcoinCost = 280 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 1106, HcoinCost = 60 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 1108, HcoinCost = 280 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 1109, HcoinCost = 150 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 1110, HcoinCost = 200 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 1111, HcoinCost = 200 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 1112, HcoinCost = 120 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 1115, HcoinCost = 280 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 7335, HcoinCost = 100 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 7454, HcoinCost = 10 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 7848, HcoinCost = 10 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 114045, HcoinCost = 200 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 114076, HcoinCost = 8 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 114214, HcoinCost = 10 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 114312, HcoinCost = 10 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 114328, HcoinCost = 8 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 114663, HcoinCost = 10 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 114667, HcoinCost = 8 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 114689, HcoinCost = 10 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 115108, HcoinCost = 10 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 115113, HcoinCost = 10 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 115130, HcoinCost = 10 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 115167, HcoinCost = 8 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 115170, HcoinCost = 8 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 115183, HcoinCost = 8 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 116124, HcoinCost = 10 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 116762, HcoinCost = 10 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 119108, HcoinCost = 8 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 121033, HcoinCost = 10 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 121041, HcoinCost = 10 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 121042, HcoinCost = 10 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 121294, HcoinCost = 10 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 121298, HcoinCost = 10 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 125202, HcoinCost = 10 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 126811, HcoinCost = 10 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 126812, HcoinCost = 10 }, + new GetConfigRsp.Types.GachaTicket { MaterialId = 1061660, HcoinCost = 100 } + }, + DiscountScheduleConfigList = + { + new GetConfigRsp.Types.DiscountScheduleConfig + { + ParaIntList = { 3401, 3501 }, + Type = 2, + Discount = 80, + BeginTime = 1684353600, + EndTime = 1686888000 + }, + new GetConfigRsp.Types.DiscountScheduleConfig + { + ParaIntList = { }, + Type = 4, + Discount = 600, + BeginTime = 1684353600, + EndTime = 1686888000 + } + }, + FriendBondLevelConfigList = + { + new GetConfigRsp.Types.FriendBondLevelConfig + { + Level = 0, + MinBond = 0, + AssistCdReduceRate = 0, + InviteAddFriendsPoint = 0, + ExtraAddMpExpRate = 0, + ExtraMpAddFriendsPoint = 0 + }, + new GetConfigRsp.Types.FriendBondLevelConfig + { + Level = 1, + MinBond = 333, + AssistCdReduceRate = 20, + InviteAddFriendsPoint = 3, + ExtraAddMpExpRate = 5, + ExtraMpAddFriendsPoint = 3 + }, + new GetConfigRsp.Types.FriendBondLevelConfig + { + Level = 2, + MinBond = 666, + AssistCdReduceRate = 40, + InviteAddFriendsPoint = 7, + ExtraAddMpExpRate = 10, + ExtraMpAddFriendsPoint = 7 + }, + new GetConfigRsp.Types.FriendBondLevelConfig + { + Level = 3, + MinBond = 999, + AssistCdReduceRate = 60, + InviteAddFriendsPoint = 10, + ExtraAddMpExpRate = 15, + ExtraMpAddFriendsPoint = 10 + } + }, + AntiCheatStageCheckConfig = new GetConfigRsp.Types.AntiCheatStageCheckConfig + { + CheckStageIdList = + { + 146001, + 146002, + 146003, + 146004, + 146005, + 146006, + 146007, + 146008, + 146009, + 146010, + 146011, + 146012, + 146013, + 146014, + 146015, + 146016, + 146017, + 146018, + 146019, + 146020, + 146021, + 146022, + 146023, + 146024, + 146025, + 146026, + 146027, + 146028, + 146029, + 146030, + 146031, + 146032, + 146033, + 146034, + 146035, + 146036, + 146037, + 146038, + 146039, + 146040, + 146041, + 146042, + 146043, + 146044, + 146045, + 146046, + 146047, + 146048, + 146049, + 146050, + 146051, + 146052, + 146053, + 146054, + 146055, + 146056, + 146057, + 146058, + 146059, + 146060, + 146061, + 146062, + 146063, + 146064, + 146065, + 146066, + 146067, + 146068, + 146069, + 146070, + 146071, + 146072, + 146073, + 146074, + 146075, + 146076, + 146077, + 146078, + 146079, + 146080, + 146081, + 146082, + 146083, + 146084, + 146085, + 146086, + 146087, + 146088, + 146089, + 146090, + 146091, + 146092, + 146093, + 146094, + 146095, + 146096, + 146097, + 146098, + 146099, + 146100, + 146201, + 146202, + 146203, + 146204, + 146205, + 146206, + 146207, + 146208, + 146209, + 146210, + 146211, + 146212, + 146213, + 153001, + 153002, + 153003, + 153004, + 153005, + 153006, + 153007, + 153008, + 153009, + 153010, + 153011, + 153012, + 153013, + 153014, + 153015, + 153016, + 153017, + 153018, + 153019, + 153020, + 153021, + 153022, + 153023, + 153024, + 153025, + 153026, + 153027, + 153028, + 153029, + 153030, + 153031, + 153501, + 153502, + 153503, + 153504, + 153505, + 153506, + 153507, + 153508, + 153509, + 153510, + 153511, + 153512, + 153513, + 153514, + 153515, + 153516, + 153517, + 153518, + 900430, + 900501, + 155081, + 155101, + 155111, + 175620, + 175621, + 175622, + 175623, + 175624, + 175625, + 175626, + 175627, + 175628, + 175629, + 175630, + 175631, + 175632, + 175633, + 175634, + 175635, + 175636, + 175637, + 175638, + 175639, + 175640, + 175641, + 175642, + 175643, + 175644, + 175645, + 175646, + 175647, + 175648, + 175649, + 175650, + 175651, + 175652, + 175653, + 175654, + 175655, + 10306604, + 10306608, + 10306612, + 10306616, + 10306621, + 10306622, + 10306623, + 10306624, + 10306625, + 10306626, + 10306627, + 10800102, + 10800202, + 10800302, + 10800402, + 146033, + 146056, + 146077, + 146078 + }, + CheckStageTypeList = { 4, 15, 20, 21, 24, 25, 32, 10, 11, 35, 33, 37, 36 } + }, + AvatarCostPlusConfigList = { }, + BulletinActivityList = { }, + StageTypeLimitAvatarFightInVentureList = { } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Player/PacketGetCustomHeadDataRsp.cs b/GameServer/Server/Packet/Send/Player/PacketGetCustomHeadDataRsp.cs new file mode 100644 index 0000000..c20f16d --- /dev/null +++ b/GameServer/Server/Packet/Send/Player/PacketGetCustomHeadDataRsp.cs @@ -0,0 +1,24 @@ +using KianaBH.Data; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Player; + +public class PacketGetCustomHeadDataRsp : BasePacket +{ + public PacketGetCustomHeadDataRsp() : base(CmdIds.GetCustomHeadDataRsp) + { + var proto = new GetCustomHeadDataRsp + { + CustomHeadList = + { + GameData.CustomHeadData.Values.Select(x => new CustomHead + { + Id=x.HeadID, + }) + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Player/PacketGetEmojiDataRsp.cs b/GameServer/Server/Packet/Send/Player/PacketGetEmojiDataRsp.cs new file mode 100644 index 0000000..1cb14db --- /dev/null +++ b/GameServer/Server/Packet/Send/Player/PacketGetEmojiDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Player; + +public class PacketGetEmojiDataRsp : BasePacket +{ + public PacketGetEmojiDataRsp() : base(CmdIds.GetEmojiDataRsp) + { + var proto = new GetEmojiDataRsp + { + IsAll = true + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Player/PacketGetFrameDataRsp.cs b/GameServer/Server/Packet/Send/Player/PacketGetFrameDataRsp.cs new file mode 100644 index 0000000..3295934 --- /dev/null +++ b/GameServer/Server/Packet/Send/Player/PacketGetFrameDataRsp.cs @@ -0,0 +1,27 @@ +using KianaBH.Data; +using KianaBH.KcpSharp; +using KianaBH.Proto; +using KianaBH.Util.Extensions; + +namespace KianaBH.GameServer.Server.Packet.Send.Player; + +public class PacketGetFrameDataRsp : BasePacket +{ + public PacketGetFrameDataRsp() : base(CmdIds.GetFrameDataRsp) + { + var proto = new GetFrameDataRsp + { + IsAll = true, + FrameList = + { + GameData.FrameData.Values.Select(x => new FrameData + { + Id=x.Id, + ExpireTime = (uint)Extensions.GetUnixSec() + 3600 * 24 * 7, + }) + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Player/PacketGetMainDataRsp.cs b/GameServer/Server/Packet/Send/Player/PacketGetMainDataRsp.cs new file mode 100644 index 0000000..4b133a1 --- /dev/null +++ b/GameServer/Server/Packet/Send/Player/PacketGetMainDataRsp.cs @@ -0,0 +1,28 @@ +using KianaBH.GameServer.Game.Player; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Player; + +public class PacketGetMainDataRsp : BasePacket +{ + public PacketGetMainDataRsp(PlayerInstance player) : base(CmdIds.GetMainDataRsp) + { + SetData(player.ToProto()); + } + + public PacketGetMainDataRsp(uint FirstAvatarId, uint SecondAvatarId) : base(CmdIds.GetMainDataRsp) + { + var proto = new GetMainDataRsp + { + WarshipAvatar = new WarshipAvatarData + { + WarshipFirstAvatarId = FirstAvatarId, + WarshipSecondAvatarId = SecondAvatarId, + }, + TypeList = { 35 }, + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Player/PacketGetMedalDataRsp.cs b/GameServer/Server/Packet/Send/Player/PacketGetMedalDataRsp.cs new file mode 100644 index 0000000..a57ce5f --- /dev/null +++ b/GameServer/Server/Packet/Send/Player/PacketGetMedalDataRsp.cs @@ -0,0 +1,74 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Player; + +public class PacketGetMedalDataRsp : BasePacket +{ + public PacketGetMedalDataRsp() : base(CmdIds.GetMedalDataRsp) + { + // TODO: Hardcoded + var proto = new GetMedalDataRsp + { + MedalList = + { + new Medal { ExtraParam = 110, Id = 101113 }, + new Medal { Id = 101042 }, + new Medal { Id = 101089 }, + new Medal { Id = 101108 }, + new Medal { EndTime = 1757947552, Id = 101092 }, + new Medal { Id = 101115 }, + new Medal { Id = 101103 }, + new Medal { Id = 101112 }, + new Medal { ExtraParam = 30, Id = 101110 }, + new Medal { EndTime = 1743980267, Id = 101031 }, + new Medal { Id = 101125 }, + new Medal { Id = 101091 }, + new Medal { Id = 101047 }, + new Medal { EndTime = 1719062973, Id = 101094 }, + new Medal { Id = 101074 }, + new Medal { ExtraParam = 3010, Id = 101120 }, + new Medal { Id = 101026 }, + new Medal { Id = 101096 }, + new Medal { Id = 101085 }, + new Medal { Id = 101145 }, + new Medal { Id = 101098 }, + new Medal { Id = 101102 }, + new Medal { ExtraParam = 40, Id = 101117 }, + new Medal { Id = 101040 }, + new Medal { Id = 101134 }, + new Medal { Id = 101090 }, + new Medal { Id = 101067 }, + new Medal { Id = 101111 }, + new Medal { Id = 101088 }, + new Medal { EndTime = 1684342752, Id = 101121 }, + new Medal { Id = 101024 }, + new Medal { Id = 101118 }, + new Medal { ExtraParam = 268, Id = 101124 }, + new Medal { EndTime = 1681312396, Id = 101083 }, + new Medal { EndTime = 1675728702, Id = 101036 }, + new Medal { Id = 101106 }, + new Medal { Id = 101059 }, + new Medal { Id = 101105 }, + new Medal { Id = 101104 }, + new Medal { EndTime = 1757949121, Id = 101093 }, + new Medal { Id = 101116 }, + new Medal { EndTime = 1661813717, Id = 101069 }, + new Medal { EndTime = 1719448204, Id = 101030 }, + new Medal { ExtraParam = 49, Id = 101127 }, + new Medal { Id = 101109 }, + new Medal { ExtraParam = 1593836710, Id = 101142 }, + new Medal { Id = 101025 }, + new Medal { ExtraParam = 4, Id = 101122 }, + new Medal { Id = 101099 }, + new Medal { Id = 101146 }, + new Medal { Id = 101107 }, + new Medal { Id = 101100 }, + new Medal { Id = 101126 }, + new Medal { EndTime = 1664198688, Id = 101079 } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Player/PacketGetOfflineResourceDataRsp.cs b/GameServer/Server/Packet/Send/Player/PacketGetOfflineResourceDataRsp.cs new file mode 100644 index 0000000..82362ed --- /dev/null +++ b/GameServer/Server/Packet/Send/Player/PacketGetOfflineResourceDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Player; + +public class PacketGetOfflineResourceDataRsp : BasePacket +{ + public PacketGetOfflineResourceDataRsp() : base(CmdIds.GetOfflineResourceDataRsp) + { + var proto = new GetOfflineResourceDataRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Player/PacketGetPediaRsp.cs b/GameServer/Server/Packet/Send/Player/PacketGetPediaRsp.cs new file mode 100644 index 0000000..79a3ec5 --- /dev/null +++ b/GameServer/Server/Packet/Send/Player/PacketGetPediaRsp.cs @@ -0,0 +1,7021 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Player; + +public class PacketGetPediaRsp : BasePacket +{ + public PacketGetPediaRsp() : base(CmdIds.GetPediaRsp) + { + // TODO: Hardcoded + var proto = new GetPediaRsp + { + BlackList = + { + 129999, + 129892, + 129891, + 129832, + 129723, + 129722, + 129721, + 129720, + 129719, + 129718, + 129717, + 129716, + 129715, + 129669, + 129668, + 129667, + 129666, + 129432, + 129431, + 129430, + 129429, + 129428, + 129427, + 129426, + 129425, + 129424, + 129173, + 129172, + 129171, + 129170, + 129169, + 129168, + 129167, + 129166, + 129165, + 129164, + 129163, + 129162, + 129161, + 129160, + 129159, + 129158, + 129157, + 129156, + 129155, + 129154, + 129153, + 129152, + 129151, + 129150, + 129100, + 129146, + 129145, + 129144, + 129143, + 129142, + 129141, + 129140, + 129139, + 129019, + 129018, + 129014, + 129013, + 129012, + 129011, + 129010, + 129004, + 129003, + 129000, + 128623, + 128622, + 128534, + 128533, + 128532, + 128531, + 128530, + 128504, + 128452, + 128451, + 128450, + 128424, + 128381, + 128380, + 128379, + 128378, + 128377, + 128376, + 128375, + 128372, + 128371, + 128370, + 128369, + 128368, + 128367, + 128366, + 128365, + 128364, + 128363, + 128362, + 128361, + 128360, + 128359, + 128358, + 128357, + 128356, + 128355, + 128354, + 128353, + 128352, + 128351, + 128350, + 128349, + 128348, + 128347, + 128346, + 128345, + 128344, + 128343, + 128342, + 128341, + 128340, + 128339, + 128338, + 128337, + 128336, + 128335, + 128334, + 128333, + 128332, + 128331, + 128330, + 128329, + 128328, + 128327, + 128326, + 128325, + 128324, + 128323, + 128322, + 128321, + 128320, + 128319, + 128318, + 128317, + 128316, + 128315, + 128314, + 128313, + 128312, + 128311, + 128310, + 128309, + 128308, + 128307, + 128306, + 128305, + 128304, + 128303, + 128229, + 128228, + 128227, + 128171, + 128170, + 128169, + 128168, + 128167, + 128166, + 128165, + 128164, + 128163, + 128162, + 128161, + 128160, + 128159, + 128158, + 128157, + 128156, + 128155, + 128154, + 128153, + 128152, + 128151, + 128150, + 128134, + 128133, + 128132, + 128131, + 128130, + 128129, + 128128, + 128127, + 128126, + 128125, + 128124, + 128123, + 128122, + 128121, + 128071, + 128070, + 128069, + 128068, + 128067, + 128066, + 128061, + 128060, + 128059, + 128058, + 128057, + 128056, + 128051, + 128031, + 128011, + 128009, + 128008, + 127621, + 127620, + 127610, + 127601, + 127578, + 127577, + 127576, + 127571, + 127570, + 127569, + 127568, + 127567, + 127566, + 127561, + 127560, + 127559, + 127558, + 127557, + 127556, + 127551, + 127550, + 127549, + 127548, + 127547, + 127546, + 127541, + 127540, + 127539, + 127538, + 127537, + 127536, + 127531, + 127521, + 127520, + 127519, + 127518, + 127517, + 127516, + 127511, + 127501, + 127300, + 127231, + 127230, + 127228, + 127227, + 127226, + 127225, + 127221, + 127220, + 127219, + 127218, + 127217, + 127211, + 127210, + 127209, + 119845, + 119844, + 119457, + 119456, + 119455, + 119454, + 119453, + 119452, + 119451, + 119450, + 115197, + 115196, + 115195, + 115193, + 9576, + 9575, + 9574, + 9573, + 9572, + 9571, + 9570, + 9569, + 9568, + 9567, + 9566, + 9565, + 9564, + 9563, + 8640, + 128001, + 6617, + 6616, + 6615, + 6614, + 6613, + 6612, + 6104, + 6103, + 6102, + 994, + 129002, + 129001, + 127208, + 119449, + 118976, + 116779, + 116776, + 116775, + 116774, + 116773, + 116771, + 9562, + 9561, + 993, + 127500, + 127391, + 127390, + 127389, + 127381, + 127380, + 127379, + 127378, + 127377, + 127376, + 127371, + 127370, + 127361, + 127201, + 127200, + 122866, + 119448, + 118975, + 118974, + 118973, + 118871, + 118870, + 118869, + 118868, + 118867, + 114784, + 114783, + 114782, + 114781, + 114780, + 114779, + 992, + 127356, + 127355, + 127351, + 127311, + 127310, + 127309, + 127308, + 127307, + 127306, + 127301, + 127151, + 127150, + 127149, + 127148, + 127147, + 127146, + 127145, + 127144, + 127143, + 127142, + 127141, + 127140, + 127139, + 127138, + 127137, + 127136, + 127131, + 127130, + 127129, + 127128, + 127121, + 127120, + 127119, + 127118, + 127117, + 127116, + 127115, + 127111, + 127110, + 127109, + 127108, + 127107, + 127106, + 127105, + 127101, + 127100, + 127099, + 127098, + 127097, + 127096, + 127095, + 127091, + 127090, + 127089, + 127088, + 127081, + 127080, + 127079, + 127078, + 127077, + 127076, + 127071, + 127070, + 127069, + 127068, + 127067, + 127066, + 127061, + 127060, + 127059, + 127058, + 127051, + 127050, + 127049, + 127048, + 127041, + 127040, + 127039, + 127038, + 127031, + 127030, + 127029, + 127028, + 127027, + 127011, + 127010, + 127009, + 127008, + 127007, + 127006, + 127001, + 127000, + 126931, + 126921, + 126901, + 126899, + 126881, + 126879, + 126867, + 126866, + 123348, + 123347, + 123346, + 123345, + 123344, + 123343, + 119447, + 119446, + 9560, + 9559, + 9558, + 6607, + 6606, + 6605, + 126880, + 126878, + 126877, + 126876, + 126871, + 126870, + 126859, + 126858, + 126857, + 126856, + 126850, + 126849, + 126848, + 126841, + 126840, + 126839, + 126838, + 126837, + 126836, + 126835, + 126831, + 126830, + 126829, + 126827, + 126826, + 126825, + 123614, + 123613, + 123612, + 123608, + 123607, + 123606, + 123605, + 123604, + 123603, + 123602, + 123337, + 119445, + 115188, + 115187, + 110202, + 110201, + 9557, + 9556, + 6604, + 6603, + 126819, + 119444, + 9555, + 6602, + 3322, + 126861, + 126860, + 126821, + 126820, + 126818, + 129902, + 114729, + 129901, + 114728, + 129900, + 114727, + 123336, + 123335, + 123334, + 123333, + 123332, + 123328, + 123327, + 123326, + 123325, + 123324, + 123323, + 123322, + 122798, + 122797, + 122796, + 122795, + 122794, + 122793, + 122792, + 122783, + 122782, + 122778, + 122777, + 122776, + 122775, + 122774, + 122773, + 122768, + 122767, + 122766, + 122765, + 122764, + 122763, + 119443, + 119442, + 118899, + 114778, + 9554, + 122854, + 119441, + 119440, + 116770, + 116762, + 116761, + 115185, + 115184, + 122848, + 122843, + 122842, + 122705, + 122704, + 122703, + 119437, + 119436, + 118866, + 118865, + 118864, + 128510, + 7126, + 128509, + 7125, + 982, + 119006, + 1061726, + 1061721, + 1061712, + 1061711, + 1061710, + 1061720, + 1061719, + 1061718, + 1061717, + 1061716, + 1061713, + 1061679, + 1061678, + 1061677, + 1061676, + 1061675, + 1061674, + 1061673, + 1061672, + 1061671, + 1061670, + 1061668, + 1061667, + 1061665, + 1061664, + 1061663, + 1061662, + 1061626, + 1061661, + 1061660, + 1061659, + 1061656, + 1061635, + 1061634, + 1061633, + 1061632, + 1061625, + 1061623, + 1061622, + 1061619, + 1061618, + 1061610, + 1061609, + 1061608, + 1061607, + 1061594, + 1061584, + 1061583, + 1061579, + 1061578, + 1061577, + 1061576, + 1061575, + 1061475, + 1061574, + 1061468, + 1061461, + 1061449, + 1061438, + 1061447, + 1061422, + 1061420, + 1061410, + 1061404, + 1061403, + 1061402, + 1061401, + 1061400, + 1061391, + 1061390, + 1061389, + 1061388, + 1061387, + 1061386, + 1061385, + 1061384, + 1061383, + 1061382, + 1061361, + 1061360, + 1061347, + 1061328, + 1061327, + 1061301, + 1061321, + 1061320, + 1061310, + 1061300, + 1061281, + 1061280, + 1061277, + 1061276, + 1061275, + 1061274, + 1061266, + 1061262, + 1061294, + 1061283, + 1061282, + 1061261, + 1061260, + 1061259, + 1061258, + 1061257, + 1061256, + 1061255, + 1061254, + 1061244, + 1061238, + 1061237, + 1061187, + 1061185, + 1061184, + 1061182, + 1061131, + 1061130, + 1061120, + 1061119, + 1061117, + 1061116, + 1061115, + 1061113, + 1061112, + 1061110, + 1061109, + 1061107, + 1061106, + 1061104, + 1061103, + 1061102, + 1061058, + 1061057, + 1061056, + 1061053, + 1061050, + 1061049, + 1061047, + 1060952, + 1060951, + 1060941, + 1060934, + 1060933, + 1060931, + 1060930, + 1060929, + 1060928, + 1060927, + 1060925, + 1060830, + 1060826, + 1060824, + 1060921, + 1060896, + 1060895, + 1060893, + 1060892, + 1060891, + 1060890, + 1060823, + 1060821, + 1060820, + 1060818, + 1060817, + 1060815, + 1060814, + 1060812, + 1060809, + 1060808, + 1060806, + 1060805, + 1060804, + 1060802, + 1060801, + 1060800, + 1060732, + 1060731, + 1060714, + 1060713, + 1060712, + 1060711, + 1060710, + 1060703, + 1060702, + 1060665, + 1060664, + 1060642, + 1060641, + 1060640, + 1060639, + 1060638, + 1060637, + 1060636, + 1060635, + 1060634, + 1060633, + 1060632, + 1060631, + 1060630, + 1060621, + 1060618, + 1060617, + 1060616, + 1060615, + 1060612, + 1060611, + 1060610, + 1060601, + 1060585, + 119843, + 1060569, + 1060999, + 1060365, + 1060364, + 1060266, + 1060265, + 1060264, + 1060262, + 1060260, + 1060259, + 1060258, + 1060256, + 1060255, + 1060254, + 1060253, + 1060252, + 1060251, + 1060250, + 1060241, + 1060239, + 1060238, + 1060237, + 1060236, + 1060261, + 1060226, + 1060224, + 1060223, + 1060222, + 1060219, + 1060218, + 1060215, + 1060214, + 1060213, + 1060212, + 1060211, + 1060210, + 1060209, + 1060208, + 1060203, + 1060202, + 1060201, + 1060200, + 1060086, + 1060085, + 1060083, + 1060082, + 1060081, + 1060106, + 1060105, + 1060104, + 1060103, + 1060102, + 1060101, + 1060100, + 1060080, + 1060079, + 1060078, + 1060077, + 1060076, + 1060024, + 1060023, + 1060022, + 1060021, + 1060005, + 1060004, + 1040113, + 119796, + 1030176, + 119795, + 1060521, + 1030175, + 119794, + 1060520, + 1030174, + 119793, + 1030173, + 119791, + 1030171, + 1030179, + 1030178, + 119792, + 1030172, + 119790, + 1030170, + 119789, + 1030169, + 119788, + 1060514, + 1030168, + 119787, + 1060513, + 1030167, + 119786, + 1030166, + 119785, + 1030165, + 119784, + 1030164, + 119783, + 1030163, + 119782, + 1030162, + 119781, + 1030161, + 119780, + 1030160, + 119779, + 1030159, + 119776, + 1030156, + 119775, + 1030155, + 1030080, + 1030079, + 1030078, + 1030077, + 1030076, + 1030075, + 1030074, + 1030073, + 1030072, + 1030071, + 1030070, + 1030069, + 1030068, + 1030067, + 1030066, + 1030065, + 1030064, + 1030063, + 1030062, + 1030061, + 1030060, + 1030059, + 1030058, + 1030057, + 1030056, + 1030055, + 1030054, + 1030053, + 1030052, + 1030051, + 1030050, + 1030049, + 1060394, + 1030048, + 1030047, + 1030046, + 1030045, + 1030044, + 1030043, + 1030042, + 1030041, + 1030040, + 1030039, + 1030038, + 1030037, + 1060382, + 1030036, + 1060381, + 1030035, + 1060380, + 1030034, + 1060379, + 1030033, + 1060378, + 1030032, + 1060377, + 1030031, + 1060376, + 1030030, + 1060375, + 1030029, + 1060374, + 1030028, + 1060373, + 1030027, + 1060372, + 1030026, + 1060371, + 1030025, + 1060370, + 1030024, + 1060369, + 1030023, + 1060368, + 1030022, + 1060367, + 1030021, + 1060366, + 1030020, + 1030015, + 1030014, + 1030013, + 1030012, + 1030011, + 1030010, + 1030009, + 1030008, + 1030007, + 1030006, + 1030005, + 1030004, + 1030003, + 1020190, + 124118, + 124117, + 124116, + 124115, + 124114, + 124113, + 124105, + 124104, + 124103, + 124027, + 124026, + 124025, + 124024, + 124023, + 124018, + 124017, + 124016, + 124015, + 124014, + 124013, + 124012, + 124008, + 124007, + 124006, + 124005, + 124004, + 124003, + 124002, + 123516, + 123515, + 123514, + 123513, + 123508, + 123507, + 123506, + 123505, + 123504, + 123503, + 123498, + 123497, + 123496, + 123495, + 123494, + 123493, + 123484, + 123483, + 123478, + 123477, + 123476, + 123475, + 123474, + 123473, + 123468, + 123467, + 123466, + 123465, + 123464, + 123463, + 123458, + 123457, + 123456, + 123455, + 123454, + 123453, + 123448, + 123447, + 123446, + 123445, + 123444, + 123443, + 123438, + 123437, + 123436, + 123435, + 123434, + 123433, + 123432, + 123428, + 123427, + 123426, + 123425, + 123424, + 123423, + 123418, + 123417, + 123416, + 123415, + 123414, + 123413, + 123412, + 123408, + 123407, + 123406, + 123405, + 123404, + 123403, + 123402, + 123313, + 123306, + 123305, + 123304, + 123303, + 123237, + 123236, + 123235, + 123234, + 123233, + 123228, + 123227, + 123226, + 123225, + 123224, + 123223, + 123218, + 123217, + 123216, + 123215, + 123214, + 123213, + 123208, + 123207, + 123206, + 123205, + 123204, + 123203, + 123108, + 123107, + 123106, + 123105, + 123104, + 123103, + 123102, + 123008, + 123007, + 123006, + 123005, + 123004, + 123003, + 122878, + 122877, + 122876, + 122875, + 122874, + 122873, + 122872, + 122868, + 122867, + 122865, + 122864, + 122863, + 122858, + 122857, + 122856, + 122855, + 122852, + 122847, + 122838, + 122837, + 122836, + 122835, + 122834, + 122833, + 122832, + 122828, + 122827, + 122826, + 122825, + 122824, + 122823, + 122822, + 122818, + 122817, + 122815, + 122814, + 122813, + 122812, + 122808, + 122807, + 122806, + 122805, + 122804, + 122803, + 122802, + 114801, + 122395, + 122394, + 1009, + 122393, + 991, + 122375, + 990, + 122374, + 989, + 122373, + 988, + 122372, + 122208, + 122207, + 122206, + 122204, + 122203, + 122168, + 122167, + 122166, + 122165, + 122164, + 122163, + 122162, + 122154, + 122153, + 122148, + 122147, + 122146, + 122145, + 122144, + 122133, + 122128, + 122127, + 122126, + 122123, + 122118, + 122117, + 122116, + 122115, + 122114, + 122113, + 122108, + 122107, + 122106, + 122105, + 122104, + 122103, + 122003, + 121036, + 121035, + 1061759, + 121033, + 1061758, + 121032, + 1061757, + 121031, + 1061756, + 121030, + 121029, + 1061754, + 121028, + 121027, + 121026, + 121025, + 121024, + 121023, + 121022, + 121021, + 121020, + 121019, + 121018, + 121017, + 1061742, + 121016, + 1061741, + 121015, + 121014, + 121013, + 121012, + 121011, + 121010, + 121009, + 1061734, + 121008, + 1061733, + 121007, + 1061732, + 121006, + 121005, + 1061730, + 121004, + 121003, + 1061728, + 121002, + 1061727, + 121001, + 119401, + 1060020, + 119294, + 1060019, + 119293, + 1060018, + 119292, + 119291, + 1060016, + 119290, + 1060015, + 119289, + 1060014, + 119288, + 1060013, + 119287, + 119286, + 119285, + 119284, + 1060009, + 119283, + 1060008, + 119282, + 1060007, + 119281, + 1060006, + 119280, + 119239, + 119238, + 119237, + 119236, + 119235, + 119233, + 119232, + 119231, + 119230, + 1060025, + 119299, + 119228, + 119227, + 119226, + 119225, + 119224, + 119223, + 119222, + 119221, + 119220, + 119219, + 119218, + 119217, + 119216, + 119215, + 119214, + 119213, + 119212, + 119211, + 119210, + 119209, + 119208, + 119207, + 119206, + 119205, + 119204, + 119203, + 119202, + 119201, + 119114, + 119113, + 119112, + 119111, + 119110, + 119109, + 119108, + 119107, + 119106, + 119105, + 119102, + 119101, + 119003, + 119002, + 119001, + 118022, + 118021, + 118020, + 118019, + 118018, + 118017, + 118016, + 118015, + 118014, + 118013, + 118012, + 118011, + 118010, + 118009, + 118008, + 118007, + 118006, + 118005, + 118004, + 118003, + 118002, + 118001, + 117013, + 117012, + 117011, + 117010, + 117009, + 117008, + 117007, + 117006, + 117005, + 117004, + 117003, + 117002, + 117001, + 116068, + 116067, + 116066, + 116065, + 116064, + 116058, + 116057, + 116056, + 116055, + 116048, + 116047, + 116046, + 116045, + 116044, + 116036, + 116035, + 116034, + 116033, + 116032, + 116031, + 116030, + 116029, + 116028, + 116027, + 116026, + 116025, + 116024, + 116023, + 116022, + 116021, + 116020, + 116019, + 116018, + 116017, + 116016, + 116015, + 116014, + 116013, + 116012, + 116011, + 116010, + 116009, + 116008, + 116007, + 116006, + 116005, + 116004, + 116003, + 116002, + 116001, + 116000, + 117832, + 117831, + 117830, + 117829, + 117828, + 117827, + 117826, + 117825, + 117824, + 117823, + 117822, + 117821, + 117820, + 117819, + 117818, + 117817, + 117816, + 117815, + 117814, + 117813, + 117812, + 117811, + 117810, + 117809, + 117808, + 117807, + 117806, + 117805, + 117804, + 117803, + 117802, + 117801, + 117800, + 117799, + 117798, + 117797, + 117796, + 117795, + 117794, + 117793, + 117792, + 117791, + 117790, + 117789, + 117788, + 117787, + 117786, + 117785, + 117784, + 117783, + 117782, + 117781, + 117780, + 117779, + 117778, + 117777, + 117776, + 117775, + 117774, + 117773, + 117772, + 117771, + 117770, + 117769, + 117768, + 117767, + 117766, + 117765, + 117764, + 117763, + 117762, + 117761, + 117760, + 117759, + 117758, + 117757, + 117756, + 117755, + 117754, + 117753, + 117752, + 117751, + 117750, + 117749, + 117748, + 117747, + 117746, + 117745, + 117744, + 117743, + 117742, + 117741, + 117740, + 117739, + 117738, + 117737, + 117736, + 117735, + 117734, + 117733, + 117732, + 117731, + 117633, + 117632, + 117631, + 117533, + 117532, + 117531, + 117723, + 117722, + 117721, + 117623, + 117622, + 117621, + 117523, + 117522, + 117521, + 117713, + 117712, + 117711, + 117613, + 117612, + 117611, + 117513, + 117512, + 117511, + 7753, + 7752, + 7751, + 7653, + 7652, + 7651, + 7553, + 7552, + 7551, + 7743, + 7742, + 7741, + 7643, + 7642, + 7641, + 7543, + 7542, + 7541, + 7733, + 7732, + 7731, + 129017, + 7633, + 129016, + 7632, + 129015, + 7631, + 7533, + 7532, + 7531, + 7723, + 7722, + 7721, + 129007, + 7623, + 129006, + 7622, + 129005, + 7621, + 7523, + 7522, + 7521, + 7713, + 7712, + 7711, + 7613, + 7612, + 7611, + 7513, + 7512, + 7511, + 117508, + 117507, + 117506, + 117505, + 117504, + 117503, + 117502, + 117501, + 117500, + 117499, + 117498, + 117497, + 117496, + 117495, + 117494, + 117493, + 117492, + 117491, + 117482, + 117481, + 117472, + 117471, + 117462, + 117461, + 117452, + 117451, + 117442, + 117441, + 117432, + 117431, + 117422, + 117421, + 117412, + 117411, + 7443, + 7442, + 7441, + 7433, + 7432, + 7431, + 7423, + 7422, + 7421, + 7413, + 7412, + 7411, + 80014, + 80013, + 130771, + 130759, + 130751, + 130731, + 130711, + 130699, + 130691, + 130671, + 130668, + 130661, + 130657, + 130649, + 130641, + 130637, + 130629, + 130621, + 130617, + 130609, + 130599, + 130596, + 130590, + 130587, + 130560, + 130556, + 130548, + 130540, + 130536, + 130530, + 130527, + 130469, + 130461, + 130457, + 130449, + 130446, + 130440, + 130437, + 130431, + 130428, + 130420, + 130416, + 130408, + 34533, + 34532, + 34531, + 33684, + 33683, + 33682, + 33681, + 33674, + 33673, + 33672, + 33671, + 33644, + 33643, + 33642, + 33641, + 33634, + 33633, + 33632, + 33631, + 33583, + 33582, + 33581, + 33574, + 33573, + 33572, + 3504, + 33571, + 3503, + 26037, + 26036, + 26035, + 26034, + 26027, + 26026, + 26025, + 26024, + 26016, + 116220, + 26015, + 116219, + 26014, + 116218, + 26006, + 116210, + 26005, + 116209, + 26004, + 116208, + 33443, + 33442, + 33441, + 116128, + 33433, + 33432, + 33431, + 116118, + 116108, + 33383, + 33661, + 3315, + 33382, + 3314, + 33381, + 3313, + 33652, + 3306, + 33651, + 3305, + 3304, + 3303, + 33343, + 33342, + 33341, + 115999, + 3206, + 3205, + 3204, + 3203, + 124112, + 124111, + 124102, + 124101, + 33054, + 33053, + 33052, + 33043, + 33042, + 33033, + 33032, + 124022, + 124021, + 124020, + 124011, + 124010, + 124009, + 124001, + 32963, + 124000, + 32962, + 32953, + 123990, + 32952, + 32943, + 32942, + 32924, + 32923, + 32922, + 32874, + 32873, + 32872, + 32544, + 32484, + 123512, + 32474, + 123511, + 130194, + 123510, + 123502, + 32464, + 123501, + 123500, + 123492, + 123491, + 123490, + 123482, + 123481, + 123480, + 130163, + 123472, + 123471, + 123470, + 123462, + 123461, + 130144, + 123460, + 123452, + 123451, + 130134, + 123450, + 123442, + 130125, + 123441, + 123440, + 123431, + 123430, + 130113, + 123429, + 123422, + 32384, + 123421, + 32383, + 123420, + 32382, + 130103, + 123411, + 123410, + 123401, + 130063, + 32333, + 115020, + 130054, + 32332, + 123352, + 115001, + 123351, + 115000, + 130034, + 123350, + 123342, + 123341, + 123340, + 123331, + 32293, + 123330, + 32292, + 130013, + 123321, + 123320, + 123312, + 32274, + 123311, + 123302, + 32243, + 32242, + 32241, + 123232, + 123231, + 123230, + 123222, + 123221, + 123220, + 123212, + 123211, + 123210, + 123488, + 123202, + 123201, + 9541, + 114771, + 114770, + 9531, + 114769, + 2006, + 114761, + 114760, + 2004, + 9521, + 114759, + 32054, + 129914, + 114741, + 129893, + 114720, + 129883, + 114710, + 32013, + 129873, + 114700, + 129853, + 114680, + 123012, + 31974, + 129834, + 114661, + 123011, + 31973, + 129833, + 114660, + 123002, + 31964, + 129824, + 114651, + 31954, + 129814, + 114641, + 31953, + 129813, + 114640, + 31943, + 129803, + 114630, + 31934, + 31933, + 129783, + 114610, + 114601, + 31884, + 31883, + 31874, + 130568, + 31873, + 31864, + 31863, + 122862, + 129684, + 114511, + 122851, + 129673, + 114500, + 122811, + 129633, + 114460, + 7939, + 114150, + 7938, + 114149, + 8661, + 8660, + 8652, + 8651, + 130025, + 8641, + 1114, + 1113, + 8622, + 122210, + 1104, + 122209, + 130004, + 8620, + 122202, + 122201, + 8610, + 8603, + 8602, + 8601, + 122171, + 122170, + 122169, + 122161, + 122160, + 122152, + 31114, + 122151, + 31113, + 122150, + 31112, + 122149, + 31111, + 122132, + 122131, + 122130, + 122129, + 122122, + 122121, + 122120, + 122119, + 122112, + 31074, + 122111, + 31073, + 122110, + 31072, + 122109, + 31071, + 984, + 983, + 973, + 964, + 963, + 954, + 953, + 944, + 122327, + 943, + 934, + 933, + 122308, + 924, + 122307, + 923, + 914, + 913, + 122012, + 122011, + 122010, + 122002, + 122001, + 122000, + 894, + 893, + 114621, + 8410, + 884, + 883, + 30943, + 30942, + 874, + 30941, + 873, + 866, + 865, + 864, + 863, + 855, + 854, + 853, + 846, + 845, + 844, + 843, + 836, + 835, + 122218, + 834, + 122217, + 833, + 813, + 803, + 34543, + 34542, + 34541, + 30790, + 30789, + 30788, + 30787, + 129594, + 8210, + 129593, + 8209, + 117161, + 117160, + 30734, + 117159, + 30733, + 117158, + 30732, + 30731, + 30730, + 30729, + 30728, + 30727, + 30726, + 117151, + 30725, + 117150, + 30724, + 117149, + 30723, + 117148, + 117141, + 117140, + 117139, + 117138, + 117131, + 117130, + 117129, + 117128, + 117121, + 117120, + 117119, + 117118, + 117111, + 117110, + 117109, + 117108, + 30679, + 30678, + 30677, + 30676, + 30675, + 30674, + 30583, + 121620, + 30582, + 30581, + 30580, + 30579, + 30578, + 30577, + 30576, + 30575, + 30574, + 30573, + 30572, + 121607, + 121606, + 121605, + 121604, + 121603, + 121602, + 121601, + 121600, + 121599, + 121598, + 121597, + 30559, + 121596, + 30558, + 121595, + 30557, + 121594, + 30556, + 121593, + 30555, + 121592, + 30554, + 121591, + 30553, + 121590, + 30552, + 121589, + 30551, + 121588, + 30550, + 121587, + 30549, + 121586, + 30548, + 121585, + 121584, + 121583, + 121582, + 121581, + 121575, + 121574, + 121573, + 121572, + 121571, + 121566, + 121565, + 121564, + 121563, + 121562, + 121561, + 121560, + 121559, + 121558, + 121557, + 121556, + 121555, + 121554, + 121553, + 121552, + 128374, + 113201, + 121551, + 128373, + 113200, + 121546, + 121545, + 121544, + 121543, + 121542, + 121541, + 121536, + 121535, + 121534, + 121533, + 121532, + 121531, + 121526, + 121525, + 121523, + 121522, + 121521, + 121516, + 121515, + 121514, + 116901, + 121513, + 116900, + 121512, + 116899, + 121511, + 116898, + 121510, + 114130, + 7919, + 121504, + 116891, + 121503, + 116890, + 121502, + 116889, + 121501, + 116888, + 116881, + 116880, + 116879, + 116878, + 116871, + 30445, + 116870, + 30444, + 116869, + 30443, + 116868, + 128302, + 113129, + 128301, + 113128, + 23063, + 7890, + 128300, + 113127, + 128299, + 113126, + 128298, + 113125, + 128297, + 113124, + 128296, + 113123, + 116861, + 128295, + 113122, + 116860, + 128294, + 113121, + 116859, + 128293, + 113120, + 116858, + 128292, + 113119, + 128291, + 113118, + 128290, + 113117, + 128289, + 113116, + 128288, + 113115, + 113114, + 113113, + 116851, + 113112, + 116850, + 113111, + 116849, + 113110, + 116848, + 113109, + 113108, + 113107, + 113106, + 113105, + 113104, + 113103, + 116841, + 113102, + 116840, + 113101, + 116839, + 116838, + 113099, + 113098, + 113097, + 113096, + 113095, + 113094, + 113093, + 116831, + 113092, + 116830, + 113091, + 116829, + 113090, + 116828, + 113089, + 113088, + 113087, + 113086, + 113085, + 113084, + 113083, + 116821, + 113082, + 116820, + 113081, + 116819, + 113080, + 7842, + 116818, + 113079, + 113078, + 113077, + 113076, + 23011, + 7838, + 113075, + 7837, + 113074, + 113073, + 116811, + 113072, + 116810, + 113071, + 116809, + 113070, + 116808, + 113069, + 113068, + 113067, + 128239, + 113066, + 113065, + 113064, + 113063, + 116801, + 113062, + 121412, + 113061, + 121411, + 113060, + 121410, + 113059, + 121409, + 113058, + 121408, + 121407, + 121406, + 121405, + 121404, + 128226, + 113053, + 121403, + 128225, + 113052, + 121402, + 128224, + 113051, + 121401, + 128223, + 113050, + 128222, + 113049, + 128221, + 113048, + 128220, + 113047, + 113046, + 113045, + 113044, + 113043, + 113042, + 113041, + 113040, + 113039, + 113038, + 113037, + 113036, + 113035, + 113034, + 113033, + 113032, + 113031, + 34082, + 128203, + 113030, + 34081, + 128202, + 113029, + 128201, + 113028, + 128200, + 113027, + 113026, + 113025, + 113024, + 113023, + 113022, + 116760, + 113021, + 34072, + 113020, + 34071, + 113019, + 113018, + 128190, + 113017, + 128189, + 113016, + 128188, + 113015, + 128187, + 113014, + 128186, + 113013, + 128185, + 113012, + 116750, + 128184, + 113011, + 128183, + 113010, + 128182, + 113009, + 128181, + 113008, + 128180, + 113007, + 128179, + 113006, + 128178, + 113005, + 128177, + 113004, + 128176, + 113003, + 128175, + 113002, + 128174, + 113001, + 34052, + 128173, + 113000, + 34051, + 120510, + 34042, + 34041, + 120506, + 120503, + 120499, + 121330, + 121329, + 120495, + 121328, + 121327, + 30289, + 121326, + 30288, + 121325, + 30287, + 120491, + 120487, + 120483, + 116701, + 120479, + 120475, + 121307, + 121306, + 121305, + 121304, + 121303, + 121302, + 120468, + 121301, + 121300, + 121298, + 128120, + 112947, + 120464, + 121297, + 128119, + 112946, + 121296, + 128118, + 112945, + 121295, + 128117, + 112944, + 121294, + 128116, + 112943, + 1061186, + 120460, + 33994, + 121293, + 128115, + 112942, + 121292, + 128114, + 112941, + 33992, + 121291, + 128113, + 112940, + 120457, + 33991, + 121290, + 128112, + 112939, + 128111, + 112938, + 112937, + 120454, + 112936, + 112935, + 112934, + 120451, + 112933, + 112932, + 112931, + 120448, + 128103, + 112930, + 128102, + 112929, + 128101, + 112928, + 120445, + 112927, + 112926, + 128098, + 112925, + 120442, + 128097, + 112924, + 128096, + 112923, + 116661, + 128095, + 112922, + 120439, + 116660, + 128094, + 112921, + 116659, + 128093, + 112920, + 116658, + 128092, + 112919, + 120436, + 128091, + 112918, + 128090, + 112917, + 128089, + 112916, + 120433, + 128088, + 112915, + 128087, + 112914, + 128086, + 112913, + 120430, + 116651, + 116650, + 116649, + 116648, + 120426, + 128081, + 112908, + 128080, + 112907, + 128079, + 112906, + 128078, + 112905, + 120422, + 128077, + 112904, + 128076, + 112903, + 116640, + 120418, + 116639, + 116638, + 120414, + 120410, + 30205, + 116630, + 30204, + 116629, + 30203, + 116628, + 1061966, + 30202, + 120406, + 1061965, + 1061963, + 1061962, + 120402, + 1061961, + 30197, + 1061960, + 30196, + 30195, + 120399, + 30194, + 30193, + 30192, + 30191, + 120395, + 1061954, + 30190, + 1061953, + 1061952, + 1061118, + 120392, + 1061951, + 1061950, + 33923, + 116610, + 1061114, + 120388, + 33922, + 116609, + 33921, + 1061945, + 1061111, + 120385, + 1061108, + 120382, + 1061941, + 1061940, + 121213, + 1061105, + 120379, + 121212, + 121211, + 1061936, + 121210, + 1061935, + 121209, + 120375, + 121208, + 121207, + 121206, + 30168, + 120372, + 121205, + 30167, + 121204, + 30166, + 121203, + 30165, + 1061928, + 121202, + 30164, + 120368, + 1061927, + 121201, + 30163, + 1061926, + 30162, + 1061925, + 30161, + 1061924, + 30160, + 120364, + 1061923, + 1061922, + 1061921, + 7606, + 120361, + 7605, + 7604, + 7603, + 7602, + 120357, + 7601, + 7600, + 120353, + 1061912, + 1061911, + 1061910, + 120350, + 1061909, + 33883, + 1061908, + 33882, + 1061907, + 33881, + 1061906, + 120346, + 120342, + 120339, + 120336, + 120333, + 1061055, + 120329, + 120325, + 123329, + 32291, + 32252, + 127385, + 32251, + 129852, + 114679, + 127032, + 26038, + 116201, + 7918, + 114129, + 129632, + 114459, + 122849, + 129671, + 114498, + 7917, + 114128, + 130465, + 129631, + 114458, + 129670, + 114497, + 127012, + 20801, + 26017, + 116221, + 7898, + 114109, + 7897, + 114108, + 127002, + 130687, + 129863, + 114690, + 118507, + 26009, + 116213, + 26008, + 116212, + 26007, + 116211, + 118502, + 129843, + 114670, + 126004, + 123001, + 31963, + 129823, + 114650, + 20746, + 126932, + 126922, + 126912, + 126911, + 114600, + 118402, + 126882, + 127021, + 5637, + 126872, + 126862, + 126832, + 20621, + 126822, + 122861, + 129683, + 114510, + 28118, + 126951, + 28108, + 126941, + 5557, + 28107, + 28106, + 126939, + 118310, + 28105, + 126938, + 5554, + 118309, + 28104, + 126937, + 118308, + 122841, + 31803, + 129663, + 114490, + 28103, + 126936, + 118307, + 122831, + 129653, + 114480, + 126918, + 126917, + 122821, + 129643, + 114470, + 126916, + 122820, + 129642, + 114469, + 122859, + 129681, + 114508, + 122819, + 129641, + 114468, + 129680, + 114507, + 126898, + 5514, + 126897, + 5513, + 122801, + 129623, + 114450, + 126896, + 5512, + 122800, + 129622, + 114449, + 122839, + 31801, + 129661, + 114488, + 24244, + 129621, + 114448, + 129660, + 114487, + 126891, + 5507, + 126890, + 5506, + 126889, + 5505, + 126888, + 5504, + 126887, + 5503, + 122791, + 129613, + 114440, + 126886, + 5502, + 122790, + 129612, + 114439, + 122829, + 129651, + 114478, + 126885, + 5501, + 122789, + 129611, + 114438, + 129650, + 114477, + 122781, + 129603, + 114430, + 122780, + 129602, + 8218, + 114429, + 20525, + 122779, + 129601, + 8217, + 114428, + 129640, + 114467, + 20524, + 122772, + 122771, + 122770, + 129592, + 8208, + 114419, + 122769, + 129591, + 8207, + 114418, + 129630, + 114457, + 122762, + 129584, + 114411, + 126718, + 122761, + 129583, + 114410, + 126717, + 122760, + 129582, + 114409, + 126716, + 129581, + 114408, + 24243, + 129620, + 114447, + 126715, + 126712, + 126711, + 126710, + 126709, + 129574, + 114401, + 126708, + 122751, + 129573, + 114400, + 126707, + 122750, + 129572, + 114399, + 126706, + 129571, + 114398, + 129610, + 114437, + 126705, + 31704, + 129564, + 114391, + 31703, + 129563, + 114390, + 20486, + 31702, + 129562, + 114389, + 20485, + 31701, + 129561, + 114388, + 130434, + 129600, + 8216, + 114427, + 20484, + 118202, + 118201, + 9142, + 129553, + 114380, + 129552, + 114379, + 129551, + 114378, + 130424, + 129590, + 8206, + 114417, + 20474, + 9132, + 129543, + 114370, + 130515, + 9131, + 129542, + 114369, + 9130, + 129541, + 114368, + 129580, + 114407, + 126808, + 5424, + 31674, + 9123, + 129534, + 114361, + 126807, + 5423, + 31673, + 9122, + 129533, + 114360, + 126806, + 5422, + 122710, + 31672, + 130505, + 9121, + 129532, + 114359, + 31671, + 115192, + 9120, + 129531, + 114358, + 130404, + 129570, + 114397, + 122702, + 130497, + 9113, + 129524, + 114351, + 5413, + 122701, + 129523, + 114350, + 9111, + 129522, + 114349, + 9110, + 129521, + 114348, + 129560, + 114387, + 5404, + 9103, + 129514, + 114341, + 5403, + 9102, + 129513, + 114340, + 129842, + 114669, + 126003, + 130715, + 129881, + 114708, + 129511, + 114338, + 129550, + 114377, + 129841, + 114668, + 129880, + 114707, + 23062, + 7889, + 114100, + 23061, + 7888, + 114099, + 7887, + 114098, + 127224, + 127223, + 123010, + 31972, + 32011, + 129871, + 114698, + 127222, + 123009, + 31971, + 130665, + 129831, + 114658, + 129870, + 114697, + 31404, + 23053, + 7880, + 114091, + 31403, + 23052, + 7879, + 114090, + 31402, + 23051, + 7878, + 114089, + 31401, + 7877, + 114088, + 127216, + 127215, + 127214, + 127213, + 31962, + 129822, + 114649, + 20745, + 130695, + 129861, + 114688, + 127212, + 31961, + 129821, + 114648, + 20744, + 129860, + 114687, + 31394, + 7870, + 114081, + 31393, + 7869, + 114080, + 31392, + 7868, + 114079, + 31391, + 7867, + 114078, + 127207, + 127206, + 127205, + 127204, + 127203, + 31952, + 129812, + 114639, + 129851, + 114678, + 127202, + 31951, + 130645, + 129811, + 114638, + 129850, + 114677, + 31384, + 23033, + 7860, + 114071, + 31383, + 23032, + 7859, + 114070, + 31382, + 23031, + 7858, + 114069, + 31381, + 7857, + 114068, + 31942, + 129802, + 114629, + 31941, + 129801, + 114628, + 130674, + 115501, + 129840, + 114667, + 31374, + 23021, + 7848, + 114059, + 7847, + 114058, + 123229, + 31932, + 31931, + 130625, + 129830, + 114657, + 31364, + 123219, + 129782, + 114609, + 129781, + 114608, + 126915, + 5531, + 129820, + 114647, + 23003, + 7830, + 114041, + 23002, + 7829, + 114040, + 122390, + 129212, + 23001, + 7828, + 114039, + 129211, + 7827, + 114038, + 128085, + 112912, + 128084, + 112911, + 123209, + 123487, + 128083, + 112910, + 128082, + 112909, + 114599, + 130605, + 24394, + 114598, + 129810, + 114637, + 129203, + 7819, + 114030, + 129202, + 7818, + 114029, + 995, + 129201, + 7817, + 114028, + 124119, + 128075, + 112902, + 128074, + 112901, + 128073, + 112900, + 127154, + 128072, + 127153, + 35153, + 127152, + 35152, + 35151, + 987, + 122371, + 129193, + 7809, + 114020, + 111154, + 986, + 122370, + 129192, + 7808, + 114019, + 111153, + 985, + 129191, + 7807, + 114018, + 111152, + 111151, + 128065, + 111150, + 128064, + 111149, + 128063, + 128062, + 111145, + 129183, + 114010, + 122360, + 976, + 129182, + 114009, + 129181, + 114008, + 128055, + 128054, + 127135, + 128053, + 127134, + 128052, + 127133, + 31882, + 127132, + 111085, + 111084, + 916, + 111083, + 915, + 111082, + 111081, + 6611, + 1060231, + 119505, + 111080, + 6610, + 1060230, + 119504, + 130775, + 2013, + 9530, + 114768, + 127075, + 20864, + 6609, + 1060229, + 119503, + 127074, + 20863, + 6608, + 1060228, + 119502, + 127073, + 20862, + 122860, + 129682, + 114509, + 28122, + 24344, + 31861, + 127072, + 20861, + 28121, + 24343, + 5004, + 5003, + 5002, + 906, + 31252, + 5001, + 905, + 31251, + 130084, + 8700, + 6601, + 6600, + 123109, + 2003, + 9520, + 114758, + 127065, + 127064, + 127063, + 122850, + 129672, + 114499, + 31851, + 129711, + 114538, + 127062, + 126805, + 5421, + 28111, + 130544, + 129710, + 114537, + 111066, + 111065, + 111064, + 896, + 111063, + 895, + 111062, + 35593, + 35592, + 122830, + 129652, + 114479, + 5402, + 9141, + 122869, + 31831, + 127042, + 130524, + 9140, + 114321, + 114320, + 114319, + 119340, + 129903, + 114730, + 127037, + 32961, + 875, + 114318, + 115191, + 129530, + 114357, + 119339, + 32053, + 129913, + 114740, + 127047, + 111051, + 885, + 111052, + 886, + 111053, + 129501, + 114328, + 129540, + 114367, + 1060075, + 119349, + 111054, + 129502, + 114329, + 114330, + 127052, + 5411, + 28101, + 118305, + 129700, + 114527, + 114331, + 127053, + 122840, + 31802, + 129662, + 114489, + 5412, + 28102, + 126935, + 5551, + 118306, + 122879, + 31841, + 129701, + 114528, + 122787, + 1403, + 7947, + 114158, + 127054, + 32061, + 130755, + 9510, + 129921, + 114748, + 127055, + 32062, + 9511, + 129922, + 114749, + 127056, + 111060, + 123101, + 32063, + 129923, + 114750, + 127057, + 111061, + 124019, + 127082, + 130564, + 111086, + 127083, + 122870, + 31832, + 31871, + 111087, + 127084, + 122871, + 31833, + 31872, + 111088, + 128002, + 6618, + 9540, + 6619, + 6620, + 6621, + 122309, + 925, + 926, + 127092, + 127093, + 127094, + 128012, + 112005, + 128013, + 112006, + 128014, + 112007, + 128015, + 112008, + 935, + 122320, + 936, + 127102, + 127103, + 127104, + 112015, + 33031, + 945, + 946, + 127112, + 127113, + 31862, + 127114, + 128032, + 128033, + 128034, + 33041, + 128035, + 955, + 956, + 127122, + 127123, + 127124, + 127125, + 127126, + 127127, + 33051, + 965, + 966, + 129174, + 114001, + 130485, + 129512, + 114339, + 5401, + 7899, + 114110, + 7900, + 114111, + 129890, + 114717, + 129559, + 114386, + 9543, + 32253, + 127386, + 6002, + 5414, + 9548, + 114118, + 114119, + 114120, + 114121, + 118505, + 129862, + 114689, + 118506, + 130735, + 123301, + 127396, + 130707, + 127401, + 6017, + 129910, + 114737, + 32012, + 129872, + 114699, + 32051, + 129911, + 114738, + 1105, + 31451, + 114138, + 1106, + 31452, + 114139, + 130719, + 114140, + 114141, + 9509, + 129920, + 114747, + 29766, + 7215, + 129882, + 114709, + 130727, + 1115, + 7937, + 114148, + 127025, + 2002, + 9519, + 114757, + 111147, + 35282, + 127026, + 111148, + 35283, + 122788, + 1404, + 130739, + 118802, + 127035, + 2012, + 9529, + 114767, + 118803, + 127036, + 130022, + 24002, + 114206, + 130747, + 114168, + 114207, + 114169, + 24004, + 114208, + 114170, + 114171, + 127302, + 127045, + 9539, + 114777, + 127303, + 32052, + 9501, + 129912, + 114739, + 127046, + 127304, + 123349, + 127305, + 8005, + 114216, + 114178, + 8006, + 114217, + 114179, + 8007, + 114218, + 114180, + 114181, + 127312, + 118822, + 127313, + 118823, + 127314, + 118824, + 127315, + 118825, + 114226, + 130767, + 114227, + 114228, + 126501, + 32331, + 126502, + 129409, + 114236, + 126504, + 129410, + 114237, + 126505, + 114238, + 130779, + 126506, + 114200, + 126507, + 114201, + 126508, + 126509, + 126510, + 129419, + 114246, + 130787, + 129420, + 114247, + 114209, + 31561, + 129421, + 114248, + 114210, + 114211, + 130072, + 1501, + 114219, + 31571, + 114220, + 114221, + 127352, + 118862, + 127353, + 118863, + 127354, + 114229, + 114268, + 114230, + 114231, + 127362, + 31854, + 129714, + 114541, + 28115, + 126948, + 127363, + 28116, + 126949, + 127364, + 28117, + 126950, + 123409, + 127365, + 126851, + 5606, + 115110, + 114276, + 6503, + 114277, + 6504, + 114239, + 114278, + 6505, + 129413, + 114240, + 129414, + 114241, + 5025, + 127372, + 5026, + 127373, + 5027, + 127374, + 5028, + 123419, + 32381, + 127375, + 31562, + 9011, + 129422, + 114249, + 114288, + 31563, + 129423, + 114250, + 127382, + 127383, + 127384, + 115131, + 114297, + 31572, + 114298, + 31573, + 114260, + 127392, + 118902, + 127393, + 118903, + 127394, + 118904, + 123439, + 130122, + 127395, + 118905, + 115141, + 114307, + 6534, + 114269, + 114308, + 6535, + 114270, + 114271, + 6018, + 118912, + 118913, + 118914, + 123449, + 118915, + 115151, + 114317, + 114279, + 1060026, + 119300, + 114280, + 114281, + 21201, + 118922, + 21202, + 118923, + 21203, + 118924, + 123459, + 21204, + 118925, + 115160, + 114326, + 119308, + 115161, + 129500, + 114327, + 119309, + 114289, + 119310, + 114290, + 114291, + 5215, + 126600, + 126601, + 114337, + 6564, + 119319, + 114299, + 6565, + 119320, + 114300, + 114301, + 129520, + 114347, + 119329, + 20404, + 114309, + 119330, + 20405, + 114310, + 114311, + 123469, + 115118, + 130152, + 118942, + 123479, + 115128, + 118952, + 118953, + 118954, + 123489, + 130172, + 118955, + 118962, + 118963, + 118964, + 123499, + 115148, + 130182, + 118965, + 118972, + 123509, + 118982, + 121518, + 121520, + 118992, + 121528, + 7839, + 23012, + 121567, + 121529, + 7840, + 23013, + 121568, + 121530, + 7841, + 23014, + 121538, + 114160, + 7949, + 7849, + 114060, + 23022, + 121539, + 114161, + 7950, + 7850, + 114061, + 23023, + 121540, + 127502, + 121548, + 121549, + 121550, + 127512, + 1061770, + 121044, + 7455, + 1061771, + 121045, + 7456, + 1061772, + 121046, + 7457, + 1061773, + 121047, + 7458, + 120213, + 127522, + 7465, + 7466, + 120221, + 121570, + 7467, + 7468, + 127532, + 21321, + 1061790, + 7475, + 1061791, + 7476, + 121580, + 1061792, + 7477, + 1061793, + 7478, + 127542, + 21331, + 7485, + 7486, + 7487, + 120242, + 7488, + 127552, + 1061810, + 7495, + 7496, + 7497, + 7498, + 127562, + 1061820, + 7505, + 7506, + 7507, + 7508, + 120263, + 127572, + 1061830, + 121104, + 7515, + 120270, + 121105, + 7516, + 121106, + 7517, + 121107, + 7518, + 1061840, + 121114, + 7525, + 1061841, + 121115, + 7526, + 120281, + 121116, + 1061843, + 121117, + 1061850, + 121124, + 1061851, + 121125, + 1061852, + 121126, + 120292, + 1061853, + 121127, + 127602, + 1061860, + 121134, + 1061861, + 121135, + 121136, + 121137, + 120310, + 1061048, + 120322, + 21441, + 21442, + 21443, + 21444, + 21471, + 21472, + 21473, + 21474, + 130202, + 118985, + 116041, + 116042, + 116043, + 130243, + 115178, + 6101, + 118995, + 116051, + 130251, + 116052, + 24003, + 130214, + 116053, + 115181, + 116054, + 6507, + 116061, + 116062, + 32541, + 130224, + 116063, + 32542, + 130263, + 116071, + 130271, + 116072, + 130374, + 115201, + 130235, + 127515, + 115108, + 130281, + 6537, + 127525, + 123609, + 32571, + 123610, + 32572, + 130255, + 123611, + 32573, + 1060028, + 119302, + 127535, + 21324, + 116101, + 119303, + 119304, + 32543, + 119305, + 119312, + 127545, + 21334, + 116111, + 115138, + 130311, + 119313, + 119314, + 119315, + 6567, + 119322, + 127555, + 119323, + 119324, + 123601, + 115111, + 130284, + 115508, + 119325, + 119332, + 127565, + 116131, + 115158, + 130331, + 119333, + 116132, + 32611, + 119334, + 116133, + 32612, + 119335, + 116134, + 32613, + 119342, + 127575, + 115307, + 115168, + 130341, + 119343, + 130481, + 115308, + 119344, + 119345, + 115198, + 130371, + 32871, + 9550, + 115171, + 130344, + 6508, + 119402, + 6509, + 119403, + 6510, + 119404, + 119405, + 119412, + 119413, + 6520, + 119414, + 119415, + 119422, + 119423, + 119424, + 32921, + 119425, + 6538, + 119432, + 6539, + 119433, + 6540, + 119434, + 119435, + 32941, + 32951, + 121517, + 121527, + 121537, + 114159, + 7948, + 121547, + 7464, + 7474, + 115100, + 114266, + 115101, + 114267, + 115130, + 130303, + 114296, + 6533, + 115140, + 114306, + 115150, + 130323, + 114316, + 6563, + 119318, + 115170, + 114336, + 9503, + 119328, + 20403, + 115180, + 130353, + 129519, + 114346, + 119338, + 115190, + 130363, + 129529, + 114356, + 9523, + 1060074, + 119348, + 129539, + 114366, + 9533, + 130383, + 129549, + 114376, + 9553, + 114396, + 126812, + 5428, + 130412, + 129578, + 114405, + 129579, + 114406, + 20472, + 129588, + 8204, + 114415, + 20473, + 129589, + 8205, + 114416, + 118203, + 129598, + 8214, + 114425, + 20483, + 118204, + 129599, + 8215, + 114426, + 126703, + 129608, + 114435, + 126704, + 130443, + 129609, + 114436, + 126713, + 24241, + 129618, + 114445, + 126714, + 130453, + 24242, + 129619, + 114446, + 129628, + 114455, + 129629, + 114456, + 20522, + 129638, + 114465, + 26002, + 116206, + 20523, + 130473, + 129639, + 114466, + 26003, + 116207, + 115309, + 129648, + 114475, + 26012, + 116216, + 115310, + 129649, + 114476, + 26013, + 116217, + 126892, + 5508, + 129658, + 114485, + 26022, + 130493, + 9109, + 129659, + 114486, + 26023, + 9118, + 26032, + 9119, + 26033, + 130512, + 9128, + 129678, + 114505, + 26042, + 9129, + 129679, + 114506, + 9138, + 5400, + 5409, + 118303, + 129698, + 8314, + 114525, + 5410, + 118304, + 130533, + 129699, + 114526, + 126803, + 5419, + 28109, + 126942, + 129708, + 114535, + 126804, + 5420, + 28110, + 129709, + 114536, + 24001, + 114205, + 5429, + 28119, + 126952, + 130552, + 24341, + 5430, + 28120, + 24342, + 114215, + 126823, + 126824, + 114225, + 126833, + 20622, + 130572, + 129408, + 114235, + 126503, + 129418, + 114245, + 1500, + 126863, + 130602, + 24391, + 129438, + 114265, + 126873, + 114605, + 115109, + 114275, + 6502, + 126883, + 127022, + 5638, + 114615, + 115119, + 114285, + 6512, + 115120, + 130293, + 114286, + 6513, + 115121, + 114287, + 6514, + 126893, + 5509, + 118403, + 114625, + 115129, + 114295, + 129808, + 114635, + 129809, + 114636, + 115139, + 114305, + 6532, + 126913, + 129818, + 114645, + 126914, + 5530, + 130653, + 129819, + 114646, + 115149, + 114315, + 126923, + 129828, + 114655, + 126924, + 129829, + 114656, + 115159, + 114325, + 119307, + 126933, + 129838, + 114665, + 126934, + 129839, + 114666, + 115169, + 114335, + 6562, + 119317, + 126943, + 115509, + 129848, + 114675, + 126944, + 130683, + 115510, + 129849, + 114676, + 20402, + 115179, + 129518, + 114345, + 9502, + 119327, + 126953, + 129858, + 114685, + 129859, + 114686, + 115189, + 130501, + 9117, + 129528, + 114355, + 9512, + 119337, + 129868, + 114695, + 130703, + 129869, + 114696, + 9127, + 129538, + 114365, + 9522, + 119347, + 129878, + 114705, + 129879, + 114706, + 130521, + 9137, + 129548, + 114375, + 9532, + 129888, + 114715, + 130723, + 129889, + 114716, + 130392, + 129558, + 114385, + 9542, + 118503, + 129898, + 114725, + 126801, + 5417, + 9551, + 118504, + 129899, + 114726, + 126802, + 5418, + 114395, + 127003, + 129908, + 114735, + 127004, + 130743, + 129909, + 114736, + 127013, + 20802, + 9507, + 129918, + 114745, + 127014, + 20803, + 9508, + 129919, + 114746, + 29765, + 7214, + 127023, + 9517, + 114755, + 127024, + 130763, + 2001, + 9518, + 114756, + 127033, + 2010, + 114765, + 127034, + 2011, + 9528, + 114766, + 127043, + 9537, + 114775, + 127044, + 130783, + 9538, + 114776, + 118983, + 130239, + 118984, + 118993, + 116049, + 118994, + 116050, + 116059, + 130259, + 116060, + 127503, + 116069, + 116070, + 127513, + 127514, + 127523, + 127524, + 127533, + 21322, + 127534, + 21323, + 116100, + 127543, + 21332, + 116109, + 127544, + 21333, + 116110, + 127553, + 116119, + 127554, + 116120, + 127563, + 116129, + 127564, + 116130, + 127573, + 115305, + 127574, + 115306, + 130350, + 115186, + 130359, + 127603, + 130380, + 26001, + 116205, + 26010, + 116214, + 26011, + 116215, + 26018, + 116222, + 26019, + 116223, + 26020, + 26021, + 29767, + 128600, + 7216, + 26028, + 26029, + 26030, + 26031, + 26039, + 26040, + 26041, + 126834, + 20623, + 115401, + 122880, + 31842, + 129702, + 114529, + 31881, + 122881, + 31843, + 129703, + 114530, + 126842, + 126843, + 126844, + 126845, + 28151, + 5600, + 130584, + 28112, + 126945, + 31852, + 129712, + 114539, + 126846, + 28152, + 5601, + 9201, + 28113, + 126946, + 31853, + 129713, + 114540, + 126847, + 5602, + 28114, + 126947, + 5563, + 126852, + 5607, + 126853, + 5608, + 126854, + 5609, + 130593, + 126855, + 28161, + 5610, + 126864, + 24392, + 28131, + 5580, + 126865, + 24393, + 28132, + 5581, + 126874, + 130613, + 129779, + 114606, + 28141, + 126875, + 129780, + 114607, + 28142, + 5591, + 126884, + 126894, + 5510, + 118404, + 130633, + 114626, + 126895, + 5511, + 118405, + 129800, + 114627, + 28162, + 5611, + 7450, + 33741, + 121040, + 7451, + 1060932, + 120206, + 33742, + 121041, + 7452, + 33743, + 121042, + 7453, + 121043, + 7454, + 121048, + 7459, + 121049, + 7460, + 121050, + 7461, + 121051, + 7462, + 120217, + 121052, + 7463, + 7469, + 1061785, + 7470, + 1061786, + 7471, + 1061787, + 7472, + 120227, + 7473, + 1061794, + 7479, + 120234, + 7480, + 1061796, + 7481, + 1061797, + 7482, + 7483, + 120238, + 7484, + 7489, + 1061805, + 7490, + 1061806, + 7491, + 7492, + 7493, + 120248, + 1061809, + 7494, + 7499, + 7500, + 120255, + 7501, + 7502, + 7503, + 7504, + 120259, + 7509, + 7510, + 1061826, + 120266, + 121101, + 121102, + 1061829, + 121103, + 7514, + 121108, + 7519, + 1061000, + 120274, + 1061835, + 121109, + 7520, + 121110, + 121111, + 120277, + 121112, + 1061839, + 121113, + 7524, + 121118, + 121119, + 120285, + 33821, + 116508, + 1061846, + 121120, + 33822, + 116509, + 1061847, + 121121, + 33823, + 116510, + 1061848, + 121122, + 120288, + 1061849, + 121123, + 1061854, + 121128, + 121129, + 1061856, + 121130, + 120296, + 1061857, + 121131, + 1061858, + 121132, + 1061859, + 121133, + 120299, + 1061864, + 121138, + 1061865, + 1061866, + 120306, + 120313, + 3505, + 120316, + 3506, + 120319, + 34671, + 34672, + 34673, + 34761, + 34762, + 34763, + 110001, + 110002, + 110003, + 110011, + 110012, + 110013, + 110014, + 110021, + 110022, + 110023, + 110024, + 110042, + 110043, + 110044, + 125225, + 110052, + 125226, + 110053, + 125227, + 110054, + 125234, + 110061, + 125235, + 110062, + 125236, + 110063, + 125237, + 110064, + 125244, + 110071, + 110072, + 110073, + 34911, + 110081, + 34912, + 110082, + 34913, + 110083, + 110091, + 110092, + 110093, + 110094, + 110101, + 110102, + 110103, + 110104, + 110112, + 110113, + 110114, + 126001, + 126002, + 110032, + 125205, + 110033, + 125206, + 110034, + 125207, + 35031, + 35032, + 35033, + 111146, + 35281, + 35591, + 118301, + 20468, + 20469, + 20470, + 20471, + 5583, + 126701, + 126702, + 126719, + 5613, + 126720, + 5614, + 126999, + 5615, + 35691, + 35692, + 35693, + 35701, + 127017, + 5633, + 35702, + 127018, + 5634, + 35703, + 127019, + 5635, + 118401, + 118406, + 118407, + 5405, + 5406, + 5407, + 5408, + 126799, + 5415, + 35761, + 5416, + 35762, + 126809, + 5425, + 35771, + 127087, + 5703, + 126810, + 5426, + 35772, + 126811, + 5427, + 35773, + 7280, + 7281, + 7282, + 120037, + 7283, + 7284, + 7285, + 7286, + 120041, + 7287, + 801, + 802, + 810, + 811, + 812, + 122205, + 821, + 122211, + 827, + 122212, + 828, + 122213, + 829, + 122214, + 830, + 122215, + 831, + 122216, + 832, + 837, + 838, + 839, + 840, + 841, + 842, + 847, + 848, + 849, + 851, + 852, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 867, + 868, + 869, + 870, + 871, + 872, + 876, + 877, + 878, + 879, + 897, + 898, + 880, + 881, + 882, + 887, + 888, + 114616, + 8405, + 889, + 114617, + 8406, + 890, + 114618, + 8407, + 891, + 114619, + 8408, + 892, + 114620, + 8409, + 899, + 900, + 31253, + 907, + 31254, + 908, + 909, + 910, + 911, + 912, + 122301, + 917, + 122302, + 918, + 122303, + 919, + 122304, + 920, + 122305, + 921, + 122306, + 922, + 927, + 928, + 929, + 930, + 931, + 932, + 122321, + 937, + 122322, + 938, + 122323, + 939, + 122324, + 940, + 122325, + 941, + 122326, + 942, + 947, + 948, + 949, + 950, + 951, + 957, + 958, + 959, + 960, + 961, + 962, + 967, + 968, + 969, + 970, + 971, + 972, + 122361, + 977, + 122362, + 978, + 122363, + 979, + 122364, + 980, + 122365, + 981, + 998, + 999, + 1000, + 122391, + 122392, + 31354, + 31453, + 1107, + 31454, + 1108, + 1109, + 1110, + 1111, + 1112, + 7845, + 114056, + 7846, + 114057, + 122784, + 1400, + 7944, + 114155, + 122785, + 1401, + 7945, + 114156, + 122786, + 1402, + 7946, + 114157, + 2007, + 114762, + 114763, + 2009, + 114764, + 123485, + 123486, + 3102, + 33451, + 33452, + 33453, + 3108, + 3109, + 3110, + 3111, + 3112, + 3113, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3121, + 3122, + 3123, + 3124, + 3125, + 3126, + 3127, + 3128, + 3129, + 3130, + 3131, + 3132, + 3133, + 3134, + 3200, + 3201, + 3202, + 3207, + 3208, + 3300, + 3301, + 3302, + 33653, + 3307, + 33654, + 3308, + 3309, + 3310, + 3311, + 3312, + 33662, + 3316, + 33663, + 3317, + 33664, + 3318, + 3319, + 3320, + 3321, + 3500, + 3501, + 3502, + 3507, + 3508, + 3509, + 3510, + 3511, + 3512, + 5582, + 127005, + 5621, + 127015, + 20804, + 5631, + 127016, + 5632, + 127020, + 5636, + 5603, + 5604, + 5605, + 5612, + 127085, + 5701, + 127086, + 5702, + 110000, + 110004, + 110005, + 110006, + 110007, + 125041, + 110008, + 110009, + 110010, + 110015, + 110016, + 110017, + 125051, + 125191, + 110018, + 110019, + 110020, + 110025, + 110026, + 125061, + 125208, + 110035, + 125071, + 110045, + 34043, + 125081, + 125228, + 110055, + 110056, + 110057, + 34053, + 125091, + 125231, + 110058, + 125232, + 110059, + 125233, + 110060, + 125238, + 110065, + 125240, + 110067, + 125101, + 125241, + 110068, + 125242, + 110069, + 110070, + 110074, + 110075, + 110076, + 110077, + 34073, + 125111, + 110078, + 110079, + 110084, + 110085, + 110086, + 110087, + 34083, + 125121, + 110088, + 110089, + 110090, + 110095, + 110096, + 110097, + 125131, + 110098, + 110099, + 110100, + 110105, + 110106, + 110200, + 112000, + 112001, + 112002, + 112003, + 112004, + 112009, + 112010, + 112011, + 112012, + 112013, + 112014, + 112101, + 112102, + 112103, + 112104, + 112105, + 112106, + 112107, + 112108, + 112110, + 112111, + 112112, + 112113, + 112119, + 112120, + 127387, + 127388, + 6004, + 6015, + 127400, + 6016, + 6501, + 6506, + 6515, + 6511, + 6516, + 6531, + 6536, + 6551, + 119306, + 6561, + 119316, + 6566, + 119321, + 7001, + 119756, + 7002, + 119757, + 7003, + 119758, + 7004, + 119759, + 7005, + 119760, + 7006, + 119761, + 7007, + 119762, + 7008, + 119763, + 7009, + 119764, + 7010, + 119765, + 7011, + 119766, + 7012, + 119767, + 7013, + 119768, + 7014, + 119769, + 7015, + 119770, + 7016, + 1030151, + 119771, + 128401, + 7017, + 1030152, + 119772, + 128402, + 7018, + 1030153, + 119773, + 128403, + 7019, + 1030154, + 119774, + 7020, + 7021, + 1030157, + 119777, + 1030158, + 119778, + 128410, + 128411, + 128412, + 7028, + 128413, + 7029, + 128414, + 7030, + 128415, + 7031, + 128416, + 128417, + 7033, + 128418, + 128419, + 128420, + 7036, + 128421, + 7037, + 128422, + 7038, + 128423, + 7039, + 128425, + 7041, + 128426, + 7042, + 128427, + 7043, + 128428, + 7044, + 128429, + 7045, + 7046, + 119801, + 7047, + 119802, + 7048, + 119803, + 7051, + 119806, + 7052, + 119807, + 7053, + 119808, + 7054, + 119809, + 7055, + 119810, + 7056, + 119811, + 7057, + 119812, + 7058, + 119813, + 7059, + 119814, + 7061, + 119816, + 7062, + 119817, + 7063, + 119818, + 7064, + 119819, + 7065, + 119820, + 7071, + 119826, + 7072, + 119827, + 7073, + 7074, + 7075, + 135003, + 119830, + 135004, + 119831, + 119832, + 7079, + 119834, + 7080, + 119835, + 7081, + 7082, + 7083, + 7084, + 1060565, + 119839, + 7085, + 1060566, + 119840, + 7086, + 1060567, + 119841, + 7087, + 1060568, + 119842, + 7092, + 7093, + 7094, + 7095, + 7096, + 7097, + 7098, + 7099, + 7103, + 7104, + 7105, + 7106, + 7107, + 7108, + 7109, + 7110, + 7111, + 7112, + 7113, + 7114, + 7115, + 128500, + 7116, + 128501, + 7117, + 128502, + 7118, + 128503, + 7119, + 128505, + 7121, + 128506, + 7122, + 128507, + 7123, + 128508, + 7124, + 128511, + 7127, + 128512, + 7128, + 128513, + 7129, + 128514, + 7130, + 7131, + 128516, + 7132, + 128517, + 7133, + 128518, + 7134, + 128519, + 7135, + 128520, + 7136, + 128521, + 7137, + 128522, + 7138, + 7139, + 7140, + 128535, + 7151, + 128536, + 7152, + 128537, + 7153, + 128538, + 7154, + 128539, + 7155, + 128540, + 7156, + 128541, + 7157, + 7158, + 7159, + 7160, + 7161, + 7162, + 7163, + 7164, + 7165, + 128550, + 7166, + 128551, + 7167, + 128552, + 7168, + 128553, + 7169, + 128554, + 7170, + 128555, + 7171, + 128556, + 7172, + 128557, + 7173, + 128558, + 7174, + 128559, + 7175, + 128560, + 7176, + 128561, + 7177, + 7178, + 7179, + 7180, + 7181, + 7182, + 7183, + 7184, + 7185, + 7186, + 7187, + 7188, + 7189, + 7190, + 7191, + 7192, + 7193, + 7194, + 7195, + 7196, + 7197, + 7198, + 7199, + 7200, + 7201, + 7202, + 7203, + 7204, + 7205, + 7206, + 7207, + 7208, + 7209, + 7210, + 7211, + 7212, + 119828, + 135001, + 7213, + 119829, + 135002, + 128601, + 37563, + 7217, + 128602, + 7218, + 128603, + 7219, + 7220, + 119836, + 135009, + 128605, + 7221, + 119837, + 135010, + 128606, + 7222, + 119838, + 135011, + 128607, + 7223, + 7224, + 128609, + 7225, + 128610, + 7226, + 128611, + 7227, + 7228, + 128613, + 7229, + 128614, + 7230, + 128615, + 7231, + 128616, + 7232, + 128617, + 7233, + 128618, + 7234, + 128619, + 7235, + 128620, + 7236, + 128621, + 7237, + 128624, + 7240, + 7242, + 7243, + 119999, + 7245, + 7246, + 120001, + 7247, + 7248, + 7249, + 1060730, + 120004, + 7250, + 7251, + 7252, + 120007, + 7253, + 7254, + 7255, + 120010, + 7256, + 7257, + 7258, + 120013, + 7259, + 7260, + 7261, + 120016, + 7262, + 7263, + 7264, + 120019, + 7265, + 7266, + 7267, + 120022, + 7268, + 7269, + 7270, + 120025, + 7271, + 7272, + 7273, + 7274, + 120029, + 7275, + 7276, + 7277, + 7278, + 120033, + 7279, + 7290, + 7291, + 7292, + 120047, + 7293, + 7294, + 7295, + 120050, + 7296, + 7297, + 7298, + 120053, + 7299, + 7300, + 7301, + 120056, + 7302, + 7303, + 7304, + 120059, + 7305, + 7306, + 7307, + 120062, + 7308, + 7309, + 7310, + 120065, + 7311, + 7312, + 7313, + 7314, + 120069, + 7315, + 7316, + 7317, + 7318, + 120073, + 7319, + 7320, + 7321, + 7322, + 1060803, + 120077, + 7323, + 7324, + 7325, + 7326, + 120081, + 7327, + 7328, + 7329, + 1060810, + 120084, + 7330, + 7331, + 7332, + 1060813, + 120087, + 7333, + 7334, + 7335, + 1060816, + 120090, + 7336, + 7337, + 7338, + 1060819, + 120093, + 7339, + 7340, + 7341, + 1060822, + 120096, + 7342, + 7343, + 7344, + 1060825, + 120099, + 7345, + 7346, + 7347, + 120102, + 7348, + 7349, + 7350, + 1060831, + 120105, + 7351, + 7352, + 7353, + 7354, + 120109, + 7355, + 7356, + 7357, + 7358, + 120113, + 7359, + 7360, + 7361, + 7362, + 120117, + 7363, + 7364, + 7365, + 7366, + 120121, + 7367, + 7368, + 7369, + 120124, + 7370, + 7371, + 7372, + 120127, + 7373, + 7374, + 7375, + 120130, + 7376, + 7377, + 7378, + 120133, + 7379, + 7380, + 7381, + 120136, + 7382, + 7383, + 7384, + 120139, + 7385, + 7386, + 7387, + 120142, + 7388, + 7389, + 7390, + 120145, + 7391, + 7392, + 7393, + 7394, + 120149, + 7395, + 7396, + 7397, + 7398, + 120153, + 7399, + 7400, + 7401, + 7402, + 120157, + 7403, + 7404, + 7405, + 7406, + 120161, + 7407, + 7408, + 7409, + 7410, + 7414, + 7415, + 7416, + 1060897, + 120171, + 7417, + 7418, + 7419, + 120174, + 7420, + 7424, + 7425, + 7426, + 120181, + 7427, + 7428, + 7429, + 120184, + 7430, + 7435, + 7436, + 7437, + 7438, + 7439, + 1060920, + 120194, + 7440, + 7444, + 7445, + 1060926, + 120200, + 7446, + 7447, + 7448, + 7449, + 129688, + 114515, + 8304, + 129689, + 114516, + 8305, + 129690, + 114517, + 8306, + 129691, + 114518, + 8307, + 129692, + 114519, + 8308, + 129693, + 114520, + 8309, + 8604, + 8605, + 8606, + 8653, + 8655, + 8656, + 130042, + 8658, + 8659, + 8698, + 8699, + 129415, + 114242, + 9013, + 9014, + 9015, + 130400, + 9016, + 9104, + 129515, + 114342, + 130489, + 9105, + 129516, + 114343, + 9106, + 129517, + 114344, + 9114, + 129525, + 114352, + 9115, + 129526, + 114353, + 9116, + 129527, + 114354, + 9124, + 129535, + 114362, + 130509, + 9125, + 129536, + 114363, + 9126, + 129537, + 114364, + 9133, + 129544, + 114371, + 130518, + 9134, + 129545, + 114372, + 9135, + 129546, + 114373, + 9136, + 129547, + 114374, + 9504, + 129915, + 114742, + 9505, + 129916, + 114743, + 9506, + 129917, + 114744, + 9513, + 129924, + 114751, + 9514, + 129925, + 114752, + 9515, + 129926, + 114753, + 9516, + 129927, + 114754, + 9534, + 114772, + 9535, + 114773, + 9536, + 114774, + 9544, + 9545, + 9546, + 9547, + 9549, + 130175, + 115002, + 115003, + 115004, + 8654, + 130038, + 129175, + 114002, + 129176, + 114003, + 129177, + 114004, + 129178, + 114005, + 129179, + 114006, + 129180, + 114007, + 129184, + 114011, + 129185, + 7801, + 114012, + 129186, + 7802, + 114013, + 129187, + 7803, + 114014, + 129188, + 7804, + 114015, + 129189, + 7805, + 114016, + 129190, + 7806, + 114017, + 129194, + 7810, + 114021, + 129195, + 7811, + 114022, + 129196, + 7812, + 114023, + 129197, + 7813, + 114024, + 129198, + 7814, + 114025, + 129199, + 7815, + 114026, + 129200, + 7816, + 114027, + 129204, + 7820, + 114031, + 129205, + 7821, + 114032, + 129206, + 7822, + 114033, + 129207, + 7823, + 114034, + 129208, + 7824, + 114035, + 129209, + 7825, + 114036, + 129210, + 7826, + 114037, + 23004, + 7831, + 114042, + 7832, + 114043, + 7833, + 114044, + 7834, + 114045, + 7835, + 114046, + 7836, + 114047, + 7843, + 114054, + 7844, + 114055, + 7851, + 23024, + 114062, + 7852, + 114063, + 7853, + 114064, + 7854, + 114065, + 7855, + 114066, + 7856, + 114067, + 23034, + 7861, + 114072, + 7862, + 114073, + 7863, + 114074, + 7864, + 114075, + 7865, + 114076, + 7866, + 114077, + 7871, + 114082, + 7872, + 114083, + 7873, + 114084, + 7874, + 114085, + 7875, + 114086, + 114087, + 23054, + 7881, + 114092, + 7882, + 114093, + 7883, + 114094, + 7884, + 114095, + 7885, + 114096, + 7886, + 114097, + 23064, + 7891, + 114102, + 7892, + 114103, + 7893, + 114104, + 7894, + 114105, + 7895, + 114106, + 7896, + 114107, + 7901, + 114112, + 114113, + 114114, + 114115, + 114116, + 114117, + 114122, + 114123, + 114124, + 114125, + 7915, + 114126, + 114127, + 7920, + 114131, + 114132, + 114133, + 114134, + 114135, + 114136, + 114137, + 114142, + 114143, + 114144, + 114145, + 7935, + 114146, + 7936, + 114147, + 7940, + 114151, + 7941, + 114152, + 7942, + 114153, + 114154, + 7951, + 114162, + 7952, + 114163, + 114164, + 114165, + 114166, + 114167, + 114172, + 114173, + 114174, + 114175, + 114176, + 114177, + 114182, + 114183, + 114184, + 114185, + 114202, + 114203, + 114204, + 114212, + 8002, + 114213, + 114214, + 114222, + 114223, + 114224, + 129405, + 114232, + 129406, + 114233, + 129407, + 114234, + 129416, + 114243, + 129417, + 114244, + 129434, + 114261, + 129435, + 114262, + 129436, + 114263, + 129437, + 114264, + 114272, + 114273, + 114274, + 114282, + 114283, + 114284, + 114292, + 114293, + 114294, + 114302, + 114303, + 114304, + 114312, + 114313, + 114314, + 114322, + 114323, + 114324, + 114332, + 114333, + 114334, + 129554, + 114381, + 129555, + 114382, + 129556, + 114383, + 129557, + 114384, + 129565, + 114392, + 129566, + 114393, + 129567, + 114394, + 129575, + 114402, + 129576, + 114403, + 129577, + 114404, + 129585, + 8201, + 114412, + 129586, + 8202, + 114413, + 129587, + 8203, + 114414, + 129595, + 8211, + 114422, + 129596, + 8212, + 114423, + 129597, + 8213, + 114424, + 129604, + 114431, + 129605, + 114432, + 129606, + 114433, + 129607, + 114434, + 129614, + 114441, + 129615, + 114442, + 129616, + 114443, + 129617, + 114444, + 129624, + 114451, + 129625, + 114452, + 129626, + 114453, + 129627, + 114454, + 129634, + 114461, + 129635, + 114462, + 129636, + 114463, + 129637, + 114464, + 129644, + 114471, + 129645, + 114472, + 129646, + 114473, + 129647, + 114474, + 129654, + 114481, + 129655, + 114482, + 129656, + 114483, + 129657, + 114484, + 129664, + 114491, + 129665, + 114492, + 129674, + 114501, + 129675, + 114502, + 129676, + 114503, + 129677, + 114504, + 129685, + 8301, + 114512, + 129686, + 8302, + 114513, + 129687, + 8303, + 114514, + 129694, + 8310, + 114521, + 129695, + 8311, + 114522, + 129696, + 8312, + 114523, + 129697, + 8313, + 114524, + 129704, + 114531, + 129705, + 114532, + 129706, + 114533, + 129707, + 114534, + 114602, + 114603, + 114604, + 114611, + 8401, + 114612, + 114613, + 114614, + 114622, + 114623, + 114624, + 129804, + 114631, + 129805, + 114632, + 129806, + 114633, + 129807, + 114634, + 129815, + 114642, + 129816, + 114643, + 129817, + 114644, + 129825, + 114652, + 129826, + 114653, + 129827, + 114654, + 129835, + 114662, + 129836, + 114663, + 129837, + 114664, + 129844, + 114671, + 129845, + 114672, + 129846, + 114673, + 129847, + 114674, + 129854, + 114681, + 129855, + 114682, + 129856, + 114683, + 129857, + 114684, + 129864, + 114691, + 129865, + 114692, + 129866, + 114693, + 129867, + 114694, + 129874, + 114701, + 129875, + 114702, + 129876, + 114703, + 129877, + 114704, + 129884, + 114711, + 129885, + 8501, + 114712, + 129886, + 8502, + 114713, + 129887, + 114714, + 129894, + 114721, + 129895, + 114722, + 129896, + 114723, + 129897, + 114724, + 129904, + 114731, + 129905, + 114732, + 129906, + 114733, + 129907, + 114734, + 115103, + 130137, + 115104, + 115106, + 130140, + 115107, + 115112, + 115113, + 130148, + 115115, + 115116, + 130290, + 115117, + 115122, + 130156, + 115124, + 115125, + 130299, + 115126, + 130160, + 115127, + 115132, + 130166, + 115133, + 115135, + 130169, + 115136, + 115137, + 130315, + 115142, + 115143, + 115144, + 130178, + 115145, + 130319, + 115146, + 115147, + 115152, + 130186, + 115153, + 115155, + 115156, + 130190, + 115157, + 115163, + 115164, + 130198, + 115166, + 115167, + 115172, + 130206, + 115173, + 115175, + 115176, + 130210, + 115182, + 116202, + 116203, + 116204, + 115202, + 115203, + 115301, + 115162, + 130335, + 115302, + 115303, + 130477, + 115304, + 115165, + 130338, + 115402, + 130576, + 115403, + 115404, + 115405, + 115406, + 130580, + 115407, + 115502, + 115503, + 130677, + 115504, + 115505, + 115506, + 130680, + 115507, + 115800, + 115801, + 115901, + 115902, + 116102, + 116103, + 116104, + 116105, + 116106, + 116107, + 116112, + 116113, + 116114, + 116115, + 116116, + 116117, + 116121, + 116122, + 116123, + 116124, + 116125, + 116126, + 116127, + 116505, + 116506, + 116507, + 116611, + 116612, + 116613, + 116614, + 116615, + 116617, + 116618, + 116619, + 116620, + 116621, + 116622, + 116623, + 116624, + 116625, + 116626, + 116627, + 116631, + 116632, + 116633, + 116634, + 116635, + 116636, + 116637, + 116641, + 116642, + 116643, + 116644, + 116645, + 116646, + 116647, + 116652, + 116653, + 116654, + 116655, + 116656, + 116657, + 116662, + 116702, + 116703, + 116704, + 116705, + 116706, + 116707, + 116751, + 116752, + 116802, + 116803, + 116804, + 116805, + 116806, + 116807, + 116812, + 116813, + 116814, + 116815, + 116816, + 116817, + 116822, + 116823, + 116824, + 116825, + 116826, + 116827, + 116832, + 116833, + 116834, + 116835, + 116836, + 116837, + 116842, + 116843, + 116844, + 116845, + 116846, + 116847, + 116852, + 116853, + 116854, + 116855, + 116856, + 116857, + 116862, + 116863, + 116864, + 116865, + 116866, + 116867, + 116872, + 116873, + 116874, + 116875, + 116876, + 116877, + 116882, + 116883, + 116884, + 116885, + 116886, + 116887, + 116892, + 116893, + 116894, + 116895, + 116896, + 116897, + 116902, + 116903, + 116904, + 116905, + 117101, + 117102, + 117103, + 117104, + 117105, + 117106, + 117107, + 117112, + 117113, + 117114, + 117115, + 117116, + 117117, + 117122, + 117123, + 117124, + 117125, + 117126, + 117127, + 117132, + 117133, + 117134, + 117135, + 117136, + 117137, + 117142, + 117143, + 117144, + 117145, + 117146, + 117147, + 117152, + 117153, + 117154, + 117155, + 117156, + 117157, + 117162, + 117163, + 117164, + 117165, + 117166, + 117167, + 117168, + 117169, + 117170, + 117171, + 118302, + 118501, + 118508, + 118801, + 118820, + 118821, + 118826, + 118827, + 118828, + 118829, + 118830, + 118831, + 118858, + 118859, + 118860, + 118861, + 118951, + 118956, + 118957, + 118958, + 118959, + 118960, + 118961, + 118966, + 118967, + 118968, + 118971, + 118980, + 118981, + 118986, + 118987, + 118988, + 118989, + 118990, + 118991, + 118900, + 118901, + 118906, + 118907, + 118908, + 118909, + 118910, + 118911, + 118916, + 118917, + 118918, + 118919, + 118920, + 118921, + 118926, + 118927, + 118928, + 118929, + 118930, + 118931, + 118941, + 118996, + 118997, + 118998, + 118999, + 119000, + 1060027, + 119301, + 119311, + 119326, + 119331, + 119336, + 119341, + 119346, + 119390, + 119400, + 119406, + 119407, + 119408, + 119409, + 119410, + 119411, + 119416, + 119417, + 119418, + 119419, + 119420, + 119421, + 119426, + 119427, + 119428, + 119429, + 119430, + 119431, + 119438, + 119439, + 1060227, + 119501, + 1060232, + 119506, + 1060233, + 119507, + 1060234, + 119508, + 1060235, + 119509, + 119601, + 119602, + 119603, + 119604, + 119605, + 119606, + 119607, + 1030081, + 119701, + 1030082, + 119702, + 1030083, + 119703, + 1030084, + 119704, + 1030085, + 119705, + 1030086, + 119706, + 1030087, + 119707, + 1030088, + 119708, + 1030089, + 119709, + 1030090, + 119710, + 1030091, + 119711, + 1030092, + 119712, + 119713, + 119714, + 119715, + 119716, + 119717, + 119718, + 119719, + 119720, + 119721, + 119722, + 119723, + 119724, + 119725, + 119726, + 119727, + 119728, + 119729, + 119730, + 119731, + 119732, + 119733, + 119734, + 119735, + 119736, + 119737, + 119738, + 119739, + 119740, + 119741, + 119742, + 119743, + 119744, + 119745, + 119746, + 119747, + 119748, + 119749, + 119750, + 119751, + 119752, + 119753, + 119754, + 119755, + 119804, + 119805, + 119815, + 119821, + 119822, + 119823, + 119824, + 119825, + 119833, + 120044, + 1060894, + 120168, + 120187, + 1060923, + 120197, + 125001, + 125011, + 125021, + 33993, + 125031, + 125141, + 125151, + 110027, + 125200, + 110028, + 125201, + 110029, + 125202, + 110030, + 125203, + 110031, + 125204, + 110036, + 125209, + 110037, + 125210, + 110038, + 125211, + 110039, + 125212, + 110040, + 125213, + 110046, + 125219, + 110047, + 125220, + 110048, + 125221, + 110041, + 125214, + 110049, + 125222, + 110050, + 125223, + 110051, + 125224, + 126005, + 126006, + 126007, + 130001, + 130007, + 130010, + 130016, + 130019, + 130028, + 130031, + 130046, + 130050, + 130057, + 130060, + 130066, + 130069, + 130075, + 130078, + 130081, + 130087, + 130091, + 130095, + 130099, + 130107, + 130110, + 130116, + 130119, + 130128, + 130131, + 130218, + 130221, + 130227, + 130231, + 130247, + 130267, + 115102, + 130275, + 115105, + 130278, + 115114, + 130287, + 115123, + 130296, + 115134, + 130307, + 115154, + 130327, + 115174, + 130347, + 115183, + 130356, + 115194, + 130367, + 115204, + 130377, + 130386, + 9012, + 130396 + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Player/PacketGetPhonePendantDataRsp.cs b/GameServer/Server/Packet/Send/Player/PacketGetPhonePendantDataRsp.cs new file mode 100644 index 0000000..f2fee7e --- /dev/null +++ b/GameServer/Server/Packet/Send/Player/PacketGetPhonePendantDataRsp.cs @@ -0,0 +1,38 @@ +using KianaBH.Data; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Player; + +public class PacketGetPhonePendantDataRsp : BasePacket +{ + public PacketGetPhonePendantDataRsp() : base(CmdIds.GetPhonePendantDataRsp) + { + //var proto = new GetPhonePendantDataRsp + //{ + // IsAll = true, + // PhonePendantList = + // { + // GameData.PhonePendantData.Keys.Select(Id => new PhonePendant + // { + // Id=(uint)Id + // }) + // } + //}; + + // TODO: Hardcoded + uint[] phones = + [ + 350005, 350011, 350012, 350013, 350014, 350015, 350026, 350041, 350044, 350045, 350049, 350051, 350053, + 350054, 350061, 350305 + ]; + + var proto = new GetPhonePendantDataRsp + { + IsAll = true, + PhonePendantList = { phones.Select(id => new PhonePendant { Id = id }) } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Player/PacketGetPhotoDataRsp.cs b/GameServer/Server/Packet/Send/Player/PacketGetPhotoDataRsp.cs new file mode 100644 index 0000000..4f9bb60 --- /dev/null +++ b/GameServer/Server/Packet/Send/Player/PacketGetPhotoDataRsp.cs @@ -0,0 +1,128 @@ +using KianaBH.Data; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Player; + +public class PacketGetPhotoDataRsp : BasePacket +{ + public PacketGetPhotoDataRsp(uint Type) : base(CmdIds.GetPhotoDataRsp) + { + //var proto = new GetPhotoDataRsp + //{ + // Type = Type, + // PhotoIdList = { GameData.CityEventPhotoData.Values.Where(x => x.PhotoType == Type).Select(x => x.PhotoID) } + //}; + + // TODO: Hardcoded + + var photoType = new Dictionary> + { + { + 9, + [ + 150001, 150002, 150003, 600001, 600002, 600003, 600004, 600005, 600006, 600007, 600008, 600010, + 600011, 600012, 600013, 600014, 600015, 600016, 600018, 600019, 600021, 600022, 600023, 600025, + 600026, 600027, 600028, 600032, 600033, 600034, 600035, 600036, 600037, 600024, 600029, 600030, + 600031, 600035, 600036 + ] + }, + { + 13, + [ + 1310001, 1310002, 1310003, 1310004, 1310005, 1310006, 1310007, 1310008, 1310009, 1330001, 1330002, + 1330003, 1330004, 1330005, 1330006, 1330007, 1330008, 1330009, 1330010, 1330011, 1330012, 1330013, + 1330014, 1330015, 1330016, 1330017, 1330018, 1330019, 1330020, 1330021, 1330022, 1330023, 1330024, + 1330025, 1330026, 1330027, 1330028, 1330029, 1330030, 1330031, 1330032, 1340001, 1340002, 1340003, + 1340004, 1340005, 1340006, 1340007, 1340008, 1340009, 1340010, 1340011, 1340012, 1340013, 1340014, + 1340016, 1340017, 1340018, 1340019, 1340020, 1340021, 1340022, 1340023, 1340024, 1340025, 1340026, + 1340027, 1340028, 1340029, 1340030, 1340031, 1340032, 1340033, 1340034, 1340035, 1340036, 1340037, + 1340038, 1340039, 1340040, 1340041, 1340042, 1340043, 1340044, 1340045, 1340046, 1340047, 1340048, + 1340049, 1340050, 1340051, 1340052, 1340053, 1340054, 1340055, 1340056, 1340057, 1340058, 1340059, + 1340060, 1340061, 1340062, 1340063, 1340064, 1340065, 1340066, 1340067, 1340068, 1340069, 1340070, + 1340071, 1340072, 1340073, 1340074, 1340075, 1340076, 1340077, 1340078, 1340079, 1340080, 1340081, + 1340082, 1340083, 1340084, 1340085, 1340086, 1340087, 1340088, 1340089, 1340090, 1340091, 1340092, + 1340093, 1340094, 1340095, 1340096, 1340097, 1340098, 1340099, 1340100, 1340101, 1340102, 1340103, + 1340104, 1340105, 1340106, 1340107, 1340108, 1340109, 1340110, 1340111, 1340112, 1340113, 1340114, + 1340115, 1340116, 1340117, 1340118, 1340119, 1340120, 1340121, 1340122, 1340123, 1340124, 1340125, + 1340126, 1340127, 1340128, 1340129, 1340130, 1340131, 1340132, 1340133, 1340134, 1360001, 1360002, + 1360003, 1360004, 1360005, 1360006, 1360007, 1420001, 1420002, 1420003, 1420004, 1420005, 1420006, + 1420011, 1420012, 1420013, 1420014, 1420015, 1420016, 1440001, 1440002, 1440003, 1440004, 1440005, + 1440006, 1450001, 1450002, 1450003, 1450004, 1450005, 1450006, 1460001, 1460002, 1460003, 1460004, + 1460005, 1460006, 1460007, 1460008, 1460009, 1460010, 1460011, 1460012, 1460013, 1470001, 1470002, + 1470003, 1470004, 1470005, 1470006, 1470007, 1470011, 1470012, 1470013, 1470014, 1470015, 1470016, + 1470017, 1470018, 1470019, 1470020, 1470021, 1470022, 1470023 + ] + }, + { + 15, + [ + 1700001, 1700002, 1700003, 1700004, 1700005, 1700006, 1700007, 1700008, 1700009, 1700010, 1700011, + 1700012, 1700013, 1700014, 1700015, 1700016, 1700017, 1700018, 1700019, 1700020, 1700021, 1700022, + 1700023, 1700024, 1700025, 1700026, 1700027, 1700028, 1700029, 1700030, 1700031, 1700032, 1700033, + 1700034, 1700035, 1700036, 1700037, 1700038 + ] + }, + { + 3, + [ + 300001, 300002, 300029, 300030, 300031, 300032, 300033, 300034, 300035, 300036, 300037, 300038, + 300039, 300040, 300041, 300042, 300043, 300044, 300052, 301022, 301023, 301024, 301025, 301026, + 301027, 301028, 310001, 310002, 310003, 310004, 310005, 531000, 531001, 531002, 531003, 531004, + 531011, 531012, 531013, 531014, 531015, 531021, 531022, 531023, 531024, 531041, 531042, 531043, + 531044, 700201, 700202, 700501, 700502, 700503, 700504, 700505, 700506, 700507, 700508, 700509, + 700801, 700802, 700803, 700804, 700805, 700806, 700807, 700808, 700809, 700810, 701401, 701402, + 701403, 701404, 701405, 701406, 701407, 701409, 701410, 701411, 701412, 701413, 701414, 701415, + 701416, 1400000, 1400001, 1400002, 1400003, 1400004, 1400005, 1400006, 1480001, 1480002, 1480003, + 1480004, 1480005, 1480006, 1480007, 1480008, 1480009, 1480010, 1480011, 1500001, 1500002, 1500003, + 1500004, 1500005, 1500006, 1500007, 1500008, 1500009, 1500010, 1500011, 1660001, 1660002, 1660003, + 1660004, 1660005, 1660006, 1660007, 1660008, 1660009, 1660011, 1660012, 1660013, 1660014, 1660015, + 1660016, 1660017, 1660018, 1660101, 1660102, 1660103, 1660104, 1660105, 1660106, 1660107, 1660108, + 1660109, 1660110, 1712001, 1712002, 1712003, 1712004, 1712005, 1712006, 1712007, 1712008, 1713001, + 1713002, 1713003, 1713004, 1713005, 1713006, 1713007, 1713008, 1713009, 1713010, 1713011, 1713012, + 1713013, 1713014, 1713015, 1713016, 1713017, 1715001, 1715002, 1715003, 1715004, 1715005, 1715006, + 1715007, 1715008, 1716001, 1716002, 1716003, 1716004, 1717001, 1717002, 1718000, 1718022, 1718025, + 1718043, 1718059, 1718060, 1718061, 1718062, 1718063, 1718064, 1718065, 1718066, 1718000, 1718001, + 1720001 + ] + }, + { 4, [400035, 400036, 400037, 400038, 400039, 400040, 400041] }, + { 5, [511038, 520002, 520006, 520010, 520014, 520016, 520017, 520020] }, + { + 6, + [ + 11000, 11001, 11002, 11003, 11004, 11007, 11008, 11009, 11010, 11011, 11012, 11013, 11014, 11015, + 11021, 11031, 11032, 11033, 11034, 11035, 11036, 11037, 11038, 11039, 11040, 11041, 11042, 11043, + 11044, 12001, 12002, 12003, 12004, 12005, 12006, 12007, 12008, 12009, 12010, 12011, 12012, 12013, + 12014, 12015, 12016, 12017, 12018, 12019, 12020, 12021, 12022, 12023, 12024, 12025, 12026, 12027, + 12028, 12029, 12033, 12034, 12035, 12036, 12041, 12042, 12043, 12044, 12045, 12046, 12047, 12048, + 12049, 12050, 12051, 12052, 12053, 12054, 12055, 12056, 12057, 12058, 12059, 12060, 12061, 12062, + 12063, 12064, 12065, 12066, 12067, 12068, 12069, 12070, 12071, 12072, 12073, 12074, 12075 + ] + }, + { + 14, + [ + 1610000, 1610001, 1610002, 1610003, 1610005, 1610007, 1610008, 1610009, 1610010, 1610011, 1610012, + 1610013, 1610014, 1610018, 1610019, 1610101, 1610104, 1610105, 1610106, 1610107, 1610108, 1610109, + 1610110, 1620001, 1620002, 1620003, 1630001, 1630002, 1630003, 1630004, 1630005, 1630006, 1630007, + 1630008, 1630009, 1630010, 1630011, 1630012, 1630013, 1630014, 1630015, 1630016, 1630017, 1630018, + 1630019, 1630020, 1630021, 1640001, 1640002, 1640003, 1640004, 1640005, 1640006, 1640007, 1640008, + 1640009, 1640010, 1640011, 1640013, 1640014, 1640016, 1640017, 1640018, 1640019, 1640020, 1640021, + 1640022, 1640023, 1640024, 1640025, 1640026, 1640027, 1640028, 1640029, 1640030, 1640031, 1650001, + 1650002, 1650003, 1650004, 1650005, 1650006, 1650007, 1650008, 1650009, 1650010, 1650011, 1650012, + 1650013, 1650014, 1650015, 1650016, 1650017, 1650018, 1650019, 1650020, 1650021, 1650023, 1650024, + 1650025, 1650026, 1650027 + ] + } + }; + + var proto = new GetPhotoDataRsp + { + Type = Type, + PhotoIdList = { photoType.ContainsKey(Type) ? photoType[Type] : [] } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Player/PacketGetPlayerCardRsp.cs b/GameServer/Server/Packet/Send/Player/PacketGetPlayerCardRsp.cs new file mode 100644 index 0000000..fa74dbb --- /dev/null +++ b/GameServer/Server/Packet/Send/Player/PacketGetPlayerCardRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Player; + +public class PacketGetPlayerCardRsp : BasePacket +{ + public PacketGetPlayerCardRsp() : base(CmdIds.GetPlayerCardRsp) + { + var proto = new GetPlayerCardRsp + { + Retcode = GetPlayerCardRsp.Types.Retcode.Fail, // set to fail to prevent null reference error pop up + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Player/PacketGetPlayerTokenRsp.cs b/GameServer/Server/Packet/Send/Player/PacketGetPlayerTokenRsp.cs new file mode 100644 index 0000000..86abbdf --- /dev/null +++ b/GameServer/Server/Packet/Send/Player/PacketGetPlayerTokenRsp.cs @@ -0,0 +1,32 @@ +using KianaBH.GameServer.Game.Player; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Player; + +public class PacketGetPlayerTokenRsp : BasePacket +{ + public PacketGetPlayerTokenRsp(PlayerInstance player,string token, uint accountType) : base(CmdIds.GetPlayerTokenRsp) + { + var proto = new GetPlayerTokenRsp + { + Retcode = GetPlayerTokenRsp.Types.Retcode.Succ, + Token = token, + AccountType = accountType, + Uid = (uint)player.Data.Uid, + AccountUid = player.Data.Uid.ToString() + }; + + SetData(proto); + } + + public PacketGetPlayerTokenRsp(GetPlayerTokenRsp.Types.Retcode retcode) : base(CmdIds.GetPlayerTokenRsp) + { + var proto = new GetPlayerTokenRsp + { + Retcode = retcode, + }; + + SetData(proto); + } +} \ No newline at end of file diff --git a/GameServer/Server/Packet/Send/Player/PacketGetRegionUidRangeRsp.cs b/GameServer/Server/Packet/Send/Player/PacketGetRegionUidRangeRsp.cs new file mode 100644 index 0000000..a58dac1 --- /dev/null +++ b/GameServer/Server/Packet/Send/Player/PacketGetRegionUidRangeRsp.cs @@ -0,0 +1,26 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Player; + +public class PacketGetRegionUidRangeRsp : BasePacket +{ + public PacketGetRegionUidRangeRsp() : base(CmdIds.GetRegionUidRangeRsp) + { + var proto = new GetRegionUidRangeRsp + { + LocalRegionName = "overseas01", + RegionUidRangeList = + { + new RegionUidRange + { + StartUid = 1000, + EndUid = 50000000, + RegionName = "overseas01" + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Player/PacketGetThemeDataRsp.cs b/GameServer/Server/Packet/Send/Player/PacketGetThemeDataRsp.cs new file mode 100644 index 0000000..4369f0f --- /dev/null +++ b/GameServer/Server/Packet/Send/Player/PacketGetThemeDataRsp.cs @@ -0,0 +1,28 @@ +using KianaBH.Data; +using KianaBH.KcpSharp; +using KianaBH.Proto; +using KianaBH.Util.Extensions; + +namespace KianaBH.GameServer.Server.Packet.Send.Player; + +public class PacketGetThemeDataRsp : BasePacket +{ + public PacketGetThemeDataRsp() : base(CmdIds.GetThemeDataRsp) + { + + var proto = new GetThemeDataRsp + { + ThemeList = + { + GameData.ThemeDataAvatar.Values.Select(x => new ThemeData + { + BeginTime = 1583373600, + EndTime = 2080843200, + ThemeId = x.AvatarData + }) + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Player/PacketPlayerLoginRsp.cs b/GameServer/Server/Packet/Send/Player/PacketPlayerLoginRsp.cs new file mode 100644 index 0000000..4dc4b3b --- /dev/null +++ b/GameServer/Server/Packet/Send/Player/PacketPlayerLoginRsp.cs @@ -0,0 +1,21 @@ +using KianaBH.GameServer.Game.Player; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Player; + +public class PacketPlayerLoginRsp : BasePacket +{ + public PacketPlayerLoginRsp(PlayerInstance player) : base(CmdIds.PlayerLoginRsp) + { + var proto = new PlayerLoginRsp + { + RegionId = 248, + LoginSessionToken = (uint)player.Data.Uid, + CgType = CGType.CgSevenChapter, + RegionName = "overseas01" + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Player/PacketSyncTimeRsp.cs b/GameServer/Server/Packet/Send/Player/PacketSyncTimeRsp.cs new file mode 100644 index 0000000..e36d3a7 --- /dev/null +++ b/GameServer/Server/Packet/Send/Player/PacketSyncTimeRsp.cs @@ -0,0 +1,19 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; +using KianaBH.Util.Extensions; + +namespace KianaBH.GameServer.Server.Packet.Send.Player; + +public class PacketSyncTimeRsp : BasePacket +{ + public PacketSyncTimeRsp(uint seq) : base(CmdIds.SyncTimeRsp) + { + var proto = new SyncTimeRsp + { + CurTime = (uint)Extensions.GetUnixSec(), + Seq = seq + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Player/PacketTakeGalInteractTriggerEventRsp.cs b/GameServer/Server/Packet/Send/Player/PacketTakeGalInteractTriggerEventRsp.cs new file mode 100644 index 0000000..b60db1d --- /dev/null +++ b/GameServer/Server/Packet/Send/Player/PacketTakeGalInteractTriggerEventRsp.cs @@ -0,0 +1,18 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Player; + +public class PacketTakeGalInteractTriggerEventRsp : BasePacket +{ + public PacketTakeGalInteractTriggerEventRsp(uint AvatarId, uint EventId) : base(CmdIds.TakeGalInteractTriggerEventRsp) + { + var proto = new TakeGalInteractTriggerEventRsp + { + AvatarId = AvatarId, + EventId = EventId + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Product/PacketGetCardProductInfoRsp.cs b/GameServer/Server/Packet/Send/Product/PacketGetCardProductInfoRsp.cs new file mode 100644 index 0000000..85535c6 --- /dev/null +++ b/GameServer/Server/Packet/Send/Product/PacketGetCardProductInfoRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Product; + +public class PacketGetCardProductInfoRsp : BasePacket +{ + public PacketGetCardProductInfoRsp() : base(CmdIds.GetCardProductInfoRsp) + { + var proto = new GetCardProductInfoRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Stage/PacketGetStageActDifficultyRsp.cs b/GameServer/Server/Packet/Send/Stage/PacketGetStageActDifficultyRsp.cs new file mode 100644 index 0000000..dfb8a82 --- /dev/null +++ b/GameServer/Server/Packet/Send/Stage/PacketGetStageActDifficultyRsp.cs @@ -0,0 +1,27 @@ +using KianaBH.Data; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Stage; + +public class PacketGetStageActDifficultyRsp : BasePacket +{ + public PacketGetStageActDifficultyRsp() : base(CmdIds.GetStageActDifficultyRsp) + { + var proto = new GetStageActDifficultyRsp + { + ActDifficultyList = + { + GameData.ActChallengeData.Values + .SelectMany(data => data.Select(x => new StageActDifficultyInfo + { + ActId = x.ActId, + Difficulty = x.Difficulty, + HasTakeChallengeNumIndex = { 1, 2, 3 }, + })) + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Stage/PacketGetStageChapterRsp.cs b/GameServer/Server/Packet/Send/Stage/PacketGetStageChapterRsp.cs new file mode 100644 index 0000000..c897e01 --- /dev/null +++ b/GameServer/Server/Packet/Send/Stage/PacketGetStageChapterRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Stage; + +public class PacketGetStageChapterRsp : BasePacket +{ + public PacketGetStageChapterRsp() : base(CmdIds.GetStageChapterRsp) + { + var proto = new GetStageChapterRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Stage/PacketGetStageDataRsp.cs b/GameServer/Server/Packet/Send/Stage/PacketGetStageDataRsp.cs new file mode 100644 index 0000000..fee0944 --- /dev/null +++ b/GameServer/Server/Packet/Send/Stage/PacketGetStageDataRsp.cs @@ -0,0 +1,105 @@ +using Google.Protobuf.Collections; +using KianaBH.Data; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Stage; + +public class PacketGetStageDataRsp : BasePacket +{ + public PacketGetStageDataRsp(RepeatedField StageIdList) : base(CmdIds.GetStageDataRsp) + { + var isAll = StageIdList.Count == 1 && StageIdList[0] == 0; + + var stageData = GameData.StageDataMain; + + var stageList = isAll + ? stageData.Values.Select(stage => new Proto.Stage + { + Id = stage.LevelId, + Progress = 1, + ChallengeIndexList = + { + stage.ChallengeList.Count == 3 + ? new uint[] { 0, 1, 2 } + : new uint[] { 0 } + }, + IsDone = true, + MaxRank = 1 + }) + : stageData.Values + .Where(stage => StageIdList.Contains(stage.LevelId)) + .Select(stage => new Proto.Stage + { + Id = stage.LevelId, + Progress = 1, + ChallengeIndexList = + { + stage.ChallengeList.Count == 3 + ? new uint[] { 0, 1, 2 } + : new uint[] { 0 } + }, + IsDone = true, + MaxRank = 1 + }); + + var proto = new GetStageDataRsp + { + IsAll = isAll, + FinishedChapterList = { Enumerable.Range(1, 43).Select(i => (uint)i) }, + EventDataList = + { + new StageEventData + { + BeginTime = 1729108800, + EndTime = 1990911600, + ChapterId = 200, + UnlockLevel = 30 + } + }, + StageList = { } + }; + + SetData(proto); + } +} + +//using Google.Protobuf.Collections; +//using KianaBH.Data; +//using KianaBH.KcpSharp; +//using KianaBH.Proto; + +//namespace KianaBH.GameServer.Server.Packet.Send.Stage; + +//public class PacketGetStageDataRsp : BasePacket +//{ +// public PacketGetStageDataRsp() : base(CmdIds.GetStageDataRsp) +// { +// var proto = new GetStageDataRsp +// { +// IsAll = true, +// FinishedChapterList = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 36, 43 }, +// }; + +// foreach (var data in GameData.StageDataMain.Values) +// { +// var stage = new Proto.Stage +// { +// Id = data.LevelId, +// Progress = 1, +// IsDone = true, +// MaxRank = 1, +// }; + +// stage.ChallengeIndexList.AddRange( +// data.ChallengeList.Count == 3 +// ? new[] { 0, 1, 2 }.Select(x => (uint)x) +// : new[] { 0 }.Select(x => (uint)x) +// ); + +// proto.StageList.Add(stage); +// } + +// SetData(proto); +// } +//} \ No newline at end of file diff --git a/GameServer/Server/Packet/Send/Stage/PacketGetStageDropDisplayRsp.cs b/GameServer/Server/Packet/Send/Stage/PacketGetStageDropDisplayRsp.cs new file mode 100644 index 0000000..67a9d12 --- /dev/null +++ b/GameServer/Server/Packet/Send/Stage/PacketGetStageDropDisplayRsp.cs @@ -0,0 +1,24 @@ +using Google.Protobuf.Collections; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Stage; + +public class PacketGetStageDropDisplayRsp : BasePacket +{ + public PacketGetStageDropDisplayRsp(RepeatedField StageIdList) : base(CmdIds.GetStageDropDisplayRsp) + { + var proto = new GetStageDropDisplayRsp + { + StageDropList = + { + StageIdList.Select(id => new StageDropDisplayInfo + { + StageId = id + }) + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Stage/PacketGetStageRecommendAvatarRsp.cs b/GameServer/Server/Packet/Send/Stage/PacketGetStageRecommendAvatarRsp.cs new file mode 100644 index 0000000..6247871 --- /dev/null +++ b/GameServer/Server/Packet/Send/Stage/PacketGetStageRecommendAvatarRsp.cs @@ -0,0 +1,24 @@ +using Google.Protobuf.Collections; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Stage; + +public class PacketGetStageRecommendAvatarRsp : BasePacket +{ + public PacketGetStageRecommendAvatarRsp(RepeatedField IdList, AvatarRecommendType Type) : base(CmdIds.GetStageRecommendAvatarRsp) + { + var proto = new GetStageRecommendAvatarRsp + { + StageRecommendAvatarList = + { + IdList.Select(id => new StageRecommendAvatar + { + Id = id.ToString(), + Type = Type + }) + } + }; + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Stage/PacketStageBeginRsp.cs b/GameServer/Server/Packet/Send/Stage/PacketStageBeginRsp.cs new file mode 100644 index 0000000..980d4a1 --- /dev/null +++ b/GameServer/Server/Packet/Send/Stage/PacketStageBeginRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Stage; + +public class PacketStageBeginRsp : BasePacket +{ + public PacketStageBeginRsp(uint StageId) : base(CmdIds.StageBeginRsp) + { + var proto = new StageBeginRsp + { + StageId = StageId + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Stage/PacketStageEndRsp.cs b/GameServer/Server/Packet/Send/Stage/PacketStageEndRsp.cs new file mode 100644 index 0000000..9342c06 --- /dev/null +++ b/GameServer/Server/Packet/Send/Stage/PacketStageEndRsp.cs @@ -0,0 +1,18 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Stage; + +public class PacketStageEndRsp : BasePacket +{ + public PacketStageEndRsp(uint StageId, StageEndStatus EndStatus) : base(CmdIds.StageEndRsp) + { + var proto = new StageEndRsp + { + StageId = StageId, + EndStatus = EndStatus + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Stage/PacketStageInnerDataReportRsp.cs b/GameServer/Server/Packet/Send/Stage/PacketStageInnerDataReportRsp.cs new file mode 100644 index 0000000..dc72664 --- /dev/null +++ b/GameServer/Server/Packet/Send/Stage/PacketStageInnerDataReportRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Stage; + +public class PacketStageInnerDataReportRsp : BasePacket +{ + public PacketStageInnerDataReportRsp() : base(CmdIds.StageInnerDataReportRsp) + { + var proto = new StageInnerDataReportRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Story/PacketGetExtraStoryDataRsp.cs b/GameServer/Server/Packet/Send/Story/PacketGetExtraStoryDataRsp.cs new file mode 100644 index 0000000..2494549 --- /dev/null +++ b/GameServer/Server/Packet/Send/Story/PacketGetExtraStoryDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; +using KianaBH.Util.Extensions; + +namespace KianaBH.GameServer.Server.Packet.Send.Story; + +public class PacketGetExtraStoryDataRsp : BasePacket +{ + public PacketGetExtraStoryDataRsp() : base(CmdIds.GetExtraStoryDataRsp) + { + MemoryStream ms = new(Extensions.StringToByteArray("080012F801086510181A4308E112120C08D1BB02100018E0DD97E806120C08D2BB02100018E0DD97E806120C08D3BB02100018E0DD97E806120C08D4BB02100018E0DD97E806180020E0DD97E8061A4308E212120C08D5BB02100018E0DD97E806120C08D6BB02100018E0DD97E806120C08D7BB02100018E0DD97E806120C08D8BB02100018E0DD97E806180020E0DD97E8061A3508E312120C08D9BB02100018E0DD97E806120C08DABB02100018E0DD97E806120C08DBBB02100018E0DD97E806180020E0DD97E8061A2708E412120C08DCBB02100018E0DD97E806120C08DDBB02100018E0DD97E806180020E0DD97E806200028E0DD97E8063000128B010866101E1A7B08E512120C08E5BB02100018E0DD97E806120C08E6BB02100018E0DD97E806120C08E7BB02100018E0DD97E806120C08E8BB02100018E0DD97E806120C08E9BB02100018E0DD97E806120C08EABB02100018E0DD97E806120C08EBBB02100018E0DD97E806120C08ECBB02100018E0DD97E806180020E0DD97E806200028E0DD97E806300012A202086710231A4308EB12120C08B5BC02100018E0DD97E806120C08B6BC02100018E0DD97E806120C08B7BC02100018E0DD97E806120C08B8BC02100018E0DD97E806180020E0DD97E8061A4308EC12120C08B9BC02100018E0DD97E806120C08BABC02100018E0DD97E806120C08BBBC02100018E0DD97E806120C08BCBC02100018E0DD97E806180020E0DD97E8061A4308ED12120C08BDBC02100018E0DD97E806120C08BEBC02100018E0DD97E806120C08BFBC02100018E0DD97E806120C08C0BC02100018E0DD97E806180020E0DD97E8061A4308EE12120C08C1BC02100018E0DD97E806120C08C2BC02100018E0DD97E806120C08C3BC02100018E0DD97E806120C08C4BC02100018E0DD97E806180020E0DD97E806200028E0DD97E8063000128B01086810281A7B08EF12120C08C9BC02100018E0DD97E806120C08CABC02100018E0DD97E806120C08CBBC02100018E0DD97E806120C08CCBC02100018E0DD97E806120C08CDBC02100018E0DD97E806120C08CEBC02100018E0DD97E806120C08CFBC02100018E0DD97E806120C08D0BC02100018E0DD97E806180020E0DD97E806200028E0DD97E80630001298010869102D1A4308F512120C0899BD02100018E0DD97E806120C089ABD02100018E0DD97E806120C089BBD02100018E0DD97E806120C089CBD02100018E0DD97E806180020E0DD97E8061A4308F612120C089DBD02100018E0DD97E806120C089EBD02100018E0DD97E806120C089FBD02100018E0DD97E806120C08A0BD02100018E0DD97E806180020E0DD97E806200028E0DD97E80630001253086A102D1A4308F912120C08A3BD02100018E0DD97E806120C08A4BD02100018E0DD97E806120C08A5BD02100018E0DD97E806120C08A6BD02100018E0DD97E806180020E0DD97E806200028E0DD97E806300012A202086B10321A4308FF12120C08FDBD02100018E0DD97E806120C08FEBD02100018E0DD97E806120C08FFBD02100018E0DD97E806120C0880BE02100018E0DD97E806180020E0DD97E8061A43088013120C0881BE02100018E0DD97E806120C0882BE02100018E0DD97E806120C0883BE02100018E0DD97E806120C0884BE02100018E0DD97E806180020E0DD97E8061A43088113120C0885BE02100018E0DD97E806120C0886BE02100018E0DD97E806120C0887BE02100018E0DD97E806120C0888BE02100018E0DD97E806180020E0DD97E8061A43088213120C0889BE02100018E0DD97E806120C088ABE02100018E0DD97E806120C088BBE02100018E0DD97E806120C088CBE02100018E0DD97E806180020E0DD97E806200028E0DD97E8063000128B01086C10321A7B088913120C08E1BE02100018E0DD97E806120C08E2BE02100018E0DD97E806120C08E3BE02100018E0DD97E806120C08E4BE02100018E0DD97E806120C08E5BE02100018E0DD97E806120C08E6BE02100018E0DD97E806120C08E7BE02100018E0DD97E806120C08E8BE02100018E0DD97E806180020E0DD97E806200028E0DD97E8063000126F086D10371A5F089313120C08C5BF02100018E0DD97E806120C08C6BF02100018E0DD97E806120C08C7BF02100018E0DD97E806120C08C8BF02100018E0DD97E806120C08C9BF02100018E0DD97E806120C08CABF02100018E0DD97E806180020E0DD97E806200028E0DD97E80630001253086E10371A43089D13120C08A9C002100018E0DD97E806120C08AAC002100018E0DD97E806120C08ABC002100018E0DD97E806120C08ACC002100018E0DD97E806180020E0DD97E806200028E0DD97E806300012B401086F103C1A5F08A713120C088DC102100018E0DD97E806120C088EC102100018E0DD97E806120C088FC102100018E0DD97E806120C0890C102100018E0DD97E806120C0891C102100018E0DD97E806120C0892C102100018E0DD97E806180020E0DD97E8061A4308A813120C0893C102100018E0DD97E806120C0894C102100018E0DD97E806120C0895C102100018E0DD97E806120C0896C102100018E0DD97E806180020E0DD97E806200028E0DD97E8063000126F0870103C1A5F08B113120C08F1C102100018E0DD97E806120C08F2C102100018E0DD97E806120C08F3C102100018E0DD97E806120C08F4C102100018E0DD97E806120C08F5C102100018E0DD97E806120C08F6C102100018E0DD97E806180020E0DD97E806200028E0DD97E806300012B3010871101E1A4308BB13120C08D5C202100018E0DD97E806120C08D6C202100018E0DD97E806120C08D7C202100018E0DD97E806120C08D8C202100018E0DD97E806180020E0DD97E8061A3508BC13120C08D9C202100018E0DD97E806120C08DAC202100018E0DD97E806120C08DBC202100018E0DD97E806180020E0DD97E8061A2708BD13120C08DCC202100018E0DD97E806120C08DDC202100018E0DD97E806180020E0DD97E806200028E0DD97E806300012530872103C1A4308C513120C08B9C302100018E0DD97E806120C08BAC302100018E0DD97E806120C08BBC302100018E0DD97E806120C08BCC302100018E0DD97E806180020E0DD97E806200028E0DD97E806300018012801280228032804280528062807300138D1BB0238D2BB0238D3BB0238D4BB0238D5BB0238D6BB0238D7BB0238D8BB0238D9BB0238DABB0238DBBB0238DCBB0238DDBB0238E5BB0238E6BB0238E7BB0238E8BB0238E9BB0238EABB0238EBBB0238ECBB0238B5BC0238B6BC0238B7BC0238B8BC0238B9BC0238BABC0238BBBC0238BCBC0238BDBC0238BEBC0238BFBC0238C0BC0238C1BC0238C2BC0238C3BC0238C4BC0238C9BC0238CABC0238CBBC0238CCBC0238CDBC0238CEBC0238CFBC0238D0BC023899BD02389ABD02389BBD02389CBD02389DBD02389EBD02389FBD0238A0BD0238A3BD0238A4BD0238A5BD0238A6BD0238FDBD0238FEBD0238FFBD023880BE023881BE023882BE023883BE023884BE023885BE023886BE023887BE023888BE023889BE02388ABE02388BBE02388CBE0238E1BE0238E2BE0238E3BE0238E4BE0238E5BE0238E6BE0238E7BE0238E8BE0238C5BF0238C6BF0238C7BF0238C8BF0238C9BF0238CABF0238A9C00238AAC00238ABC00238ACC002388DC102388EC102388FC1023890C1023891C1023892C1023893C1023894C1023895C1023896C10238F1C10238F2C10238F3C10238F4C10238F5C10238F6C10238D5C20238D6C20238D7C20238D8C20238D9C20238DAC20238DBC20238DCC20238DDC20238B9C30238BAC30238BBC30238BCC302")); + using BinaryReader br = new(ms); + byte[] Body = br.ReadBytes((int)ms.Length); + var rsp = GetExtraStoryDataRsp.Parser.ParseFrom(Body); + SetData(rsp); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketGetWebActivityInfoRsp.cs b/GameServer/Server/Packet/Send/Test/PacketGetWebActivityInfoRsp.cs new file mode 100644 index 0000000..a9d9259 --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketGetWebActivityInfoRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketGetWebActivityInfoRsp : BasePacket +{ + public PacketGetWebActivityInfoRsp() : base(CmdIds.GetWebActivityInfoRsp) + { + var proto = new GetWebActivityInfoRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketGetWeekDayActivityDataRsp.cs b/GameServer/Server/Packet/Send/Test/PacketGetWeekDayActivityDataRsp.cs new file mode 100644 index 0000000..8ffd1ba --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketGetWeekDayActivityDataRsp.cs @@ -0,0 +1,31 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; +using KianaBH.Util.Extensions; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketGetWeekDayActivityDataRsp : BasePacket +{ + public PacketGetWeekDayActivityDataRsp() : base(CmdIds.GetWeekDayActivityDataRsp) + { + // TODO: Hardcoded + var now = (uint)Extensions.GetUnixSec(); + + var proto = new GetWeekDayActivityDataRsp + { + ActivityList = + { + new WeekDayActivity + { + ActivityId = 1003, + StageIdList = { 101302, 101303, 101304, 101305 }, + EnterTimes = 1, + EndTime = now + 3600 * 24 * 7, + ActivityBeginTime = now * 10 / 8, + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketGetWeeklyReportRsp.cs b/GameServer/Server/Packet/Send/Test/PacketGetWeeklyReportRsp.cs new file mode 100644 index 0000000..5d8e465 --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketGetWeeklyReportRsp.cs @@ -0,0 +1,19 @@ +using KianaBH.GameServer.Game.Player; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketGetWeeklyReportRsp : BasePacket +{ + public PacketGetWeeklyReportRsp(PlayerInstance player) : base(CmdIds.GetWeeklyReportRsp) + { + var proto = new GetWeeklyReportRsp + { + Retcode = GetWeeklyReportRsp.Types.Retcode.Fail, + TargetUid = (uint)player.Data.Uid, + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketGetWeeklyRoutineActivityRsp.cs b/GameServer/Server/Packet/Send/Test/PacketGetWeeklyRoutineActivityRsp.cs new file mode 100644 index 0000000..eb21b1e --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketGetWeeklyRoutineActivityRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketGetWeeklyRoutineActivityRsp : BasePacket +{ + public PacketGetWeeklyRoutineActivityRsp() : base(CmdIds.GetWeeklyRoutineActivityRsp) + { + var proto = new GetWeeklyRoutineActivityRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketGetWikiDataRsp.cs b/GameServer/Server/Packet/Send/Test/PacketGetWikiDataRsp.cs new file mode 100644 index 0000000..15ea82c --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketGetWikiDataRsp.cs @@ -0,0 +1,18 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketGetWikiDataRsp : BasePacket +{ + public PacketGetWikiDataRsp() : base(CmdIds.GetWikiDataRsp) + { + var proto = new GetWikiDataRsp + { + HasTakeActivitySuitRewardList = { 132 }, + HasTakeRatingRewardList = { 1, 2, 3, 4, 5, 6 } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketGetWorldMapDataRsp.cs b/GameServer/Server/Packet/Send/Test/PacketGetWorldMapDataRsp.cs new file mode 100644 index 0000000..d160ceb --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketGetWorldMapDataRsp.cs @@ -0,0 +1,201 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketGetWorldMapDataRsp : BasePacket +{ + public PacketGetWorldMapDataRsp() : base(CmdIds.GetWorldMapDataRsp) + { + // TODO: Hardcoded + var proto = new GetWorldMapDataRsp + { + WorldMapList = + { + new WorldMapData + { + AdvanceTime = 1300046400, + BeginTime = 1300046400, + EndTime = 2060107199, + Id = 1, + WorldMapId = 1 + }, + new WorldMapData + { + AdvanceTime = 1300046400, + BeginTime = 1300046400, + EndTime = 2060107199, + Id = 2, + WorldMapId = 2 + }, + new WorldMapData + { + AdvanceTime = 1300046400, + BeginTime = 1300046400, + EndTime = 2060107199, + HighLightMaxLevel = 30, + HighLightMinLevel = 25, + Id = 3, + WorldMapId = 3 + }, + new WorldMapData + { + AdvanceTime = 1300046400, + BeginTime = 1300046400, + EndTime = 2060107199, + Id = 5, + Weight = 1, + WorldMapId = 5 + }, + new WorldMapData + { + AdvanceTime = 1300046400, + BeginTime = 1300046400, + EndTime = 2060107199, + HighLightMaxLevel = 88, + HighLightMinLevel = 15, + Id = 6, + Weight = 1, + WorldMapId = 6 + }, + new WorldMapData + { + AdvanceTime = 1300046400, + BeginTime = 1300046400, + EndTime = 2060107199, + HighLightMaxLevel = 40, + HighLightMinLevel = 30, + Id = 7, + Weight = 1, + WorldMapId = 7 + }, + new WorldMapData + { + AdvanceTime = 1300046400, + BeginTime = 1300046400, + EndTime = 2060107199, + Id = 8, + Weight = 1, + WorldMapId = 8 + }, + new WorldMapData + { + AdvanceTime = 1300046400, + BeginTime = 1300046400, + EndTime = 2060107199, + Id = 9, + Weight = 1, + WorldMapId = 9 + }, + new WorldMapData + { + AdvanceTime = 1300046400, + BeginTime = 1300046400, + EndTime = 2060107199, + Id = 10, + Weight = 1, + WorldMapId = 10 + }, + new WorldMapData + { + AdvanceTime = 1300046400, + BeginTime = 1300046400, + EndTime = 2060107199, + Id = 11, + Weight = 1, + WorldMapId = 11 + }, + new WorldMapData + { + AdvanceTime = 1300046400, + BeginTime = 1300046400, + EndTime = 2060107199, + Id = 49, + Weight = 1, + WorldMapId = 12 + }, + new WorldMapData + { + AdvanceTime = 1563069600, + BeginTime = 1563069600, + EndTime = 2060107199, + HighLightMaxLevel = 99, + HighLightMinLevel = 20, + Id = 121, + Weight = 205, + WorldMapId = 2107 + }, + new WorldMapData + { + AdvanceTime = 1300046400, + BeginTime = 1300046400, + EndTime = 2060107199, + HighLightMaxLevel = 99, + HighLightMinLevel = 50, + Id = 286, + Weight = 1, + WorldMapId = 18 + }, + new WorldMapData + { + AdvanceTime = 1611712800, + BeginTime = 1611712800, + EndTime = 2060107199, + HighLightMaxLevel = 88, + HighLightMinLevel = 15, + Id = 307, + Weight = 1, + WorldMapId = 2221 + }, + new WorldMapData + { + AdvanceTime = 1705716000, + BeginTime = 1705716000, + EndTime = 2060107199, + Id = 1004, + Weight = 1, + WorldMapId = 1004 + }, + new WorldMapData + { + AdvanceTime = 1300046400, + BeginTime = 1300046400, + EndTime = 2060107199, + Id = 445, + Weight = 1000, + WorldMapId = 2313 + }, + new WorldMapData + { + AdvanceTime = 1300046400, + BeginTime = 1300046400, + EndTime = 2060107199, + HighLightMaxLevel = 30, + HighLightMinLevel = 25, + Id = 451, + WorldMapId = 19 + }, + new WorldMapData + { + AdvanceTime = 1730080800, + BeginTime = 1730080800, + EndTime = 1880308800, + Id = 452, + Weight = 1301, + WorldMapId = 2317 + }, + new WorldMapData + { + AdvanceTime = 1729108800, + BeginTime = 1729108800, + EndTime = 1880308800, + Id = 458, + Weight = 122, + WorldMapId = 2320 + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketGetWorldMapRecommendRsp.cs b/GameServer/Server/Packet/Send/Test/PacketGetWorldMapRecommendRsp.cs new file mode 100644 index 0000000..fb1ad59 --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketGetWorldMapRecommendRsp.cs @@ -0,0 +1,82 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketGetWorldMapRecommendRsp : BasePacket +{ + public PacketGetWorldMapRecommendRsp() : base(CmdIds.GetWorldMapRecommendRsp) + { + // TODO: Hardcoded + var proto = new GetWorldMapRecommendRsp + { + ActivityRecommendList = + { + new WorldMapRecommend + { + Weight = 110, + WorldMapId = 2317 + }, + new WorldMapRecommend + { + Weight = 100, + WorldMapId = 2321 + } + }, + PermanentRecommendList = + { + new WorldMapRecommend + { + ActiveConditionList = { 201 }, + Weight = 2, + WorldMapId = 9 + }, + new WorldMapRecommend + { + Weight = 100, + WorldMapId = 7 + }, + new WorldMapRecommend + { + ActiveConditionList = { 207 }, + Weight = -100, + WorldMapId = 7 + }, + new WorldMapRecommend + { + Weight = 86, + WorldMapId = 8 + }, + new WorldMapRecommend + { + ActiveConditionList = { 214, 215 }, + Weight = 1, + WorldMapId = 11 + }, + new WorldMapRecommend + { + ActiveConditionList = { 216 }, + Weight = 45, + WorldMapId = 18 + }, + new WorldMapRecommend + { + Weight = 60, + WorldMapId = 1 + }, + new WorldMapRecommend + { + Weight = 50, + WorldMapId = 2107 + }, + new WorldMapRecommend + { + Weight = 70, + WorldMapId = 1004 + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketGrandKeyActivateSkillRsp.cs b/GameServer/Server/Packet/Send/Test/PacketGrandKeyActivateSkillRsp.cs new file mode 100644 index 0000000..22781dc --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketGrandKeyActivateSkillRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketGrandKeyActivateSkillRsp : BasePacket +{ + public PacketGrandKeyActivateSkillRsp() : base(CmdIds.GrandKeyActivateSkillRsp) + { + var proto = new GrandKeyActivateSkillRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketLoginWishGetMainDataRsp.cs b/GameServer/Server/Packet/Send/Test/PacketLoginWishGetMainDataRsp.cs new file mode 100644 index 0000000..ad94cfa --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketLoginWishGetMainDataRsp.cs @@ -0,0 +1,29 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketLoginWishGetMainDataRsp : BasePacket +{ + public PacketLoginWishGetMainDataRsp() : base(CmdIds.LoginWishGetMainDataRsp) + { + // TODO: Hardcoded + var proto = new LoginWishGetMainDataRsp + { + ActivityList = + { + new LoginWishActivity + { + ActivityId = 19, + BeginTime = 1729540800, + EndTime = 1880308800, + LoginDays = 1, + ShowBeginTime = 1729454400, + ShowEndTime = 1880308800 + } + } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketOpenworldGetMechaTeamRsp.cs b/GameServer/Server/Packet/Send/Test/PacketOpenworldGetMechaTeamRsp.cs new file mode 100644 index 0000000..2881d54 --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketOpenworldGetMechaTeamRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketOpenworldGetMechaTeamRsp : BasePacket +{ + public PacketOpenworldGetMechaTeamRsp() : base(CmdIds.OpenworldGetMechaTeamRsp) + { + var proto = new OpenworldGetMechaTeamRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketOpenworldHuntActivityGetDataRsp.cs b/GameServer/Server/Packet/Send/Test/PacketOpenworldHuntActivityGetDataRsp.cs new file mode 100644 index 0000000..ebb1e57 --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketOpenworldHuntActivityGetDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketOpenworldHuntActivityGetDataRsp : BasePacket +{ + public PacketOpenworldHuntActivityGetDataRsp() : base(CmdIds.OpenworldHuntActivityGetDataRsp) + { + var proto = new OpenworldHuntActivityGetDataRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketRaidReplaceGetDataRsp.cs b/GameServer/Server/Packet/Send/Test/PacketRaidReplaceGetDataRsp.cs new file mode 100644 index 0000000..d0e9079 --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketRaidReplaceGetDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketRaidReplaceGetDataRsp : BasePacket +{ + public PacketRaidReplaceGetDataRsp() : base(CmdIds.RaidReplaceGetDataRsp) + { + var proto = new RaidReplaceGetDataRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketRefineStigmataRuneRsp.cs b/GameServer/Server/Packet/Send/Test/PacketRefineStigmataRuneRsp.cs new file mode 100644 index 0000000..f22c7f0 --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketRefineStigmataRuneRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketRefineStigmataRuneRsp : BasePacket +{ + public PacketRefineStigmataRuneRsp() : base(CmdIds.RefineStigmataRuneRsp) + { + var proto = new RefineStigmataRuneRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketRefreshAvatarSkillRsp.cs b/GameServer/Server/Packet/Send/Test/PacketRefreshAvatarSkillRsp.cs new file mode 100644 index 0000000..732bf5e --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketRefreshAvatarSkillRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketRefreshAvatarSkillRsp : BasePacket +{ + public PacketRefreshAvatarSkillRsp() : base(CmdIds.RefreshAvatarSkillRsp) + { + var proto = new RefreshAvatarSkillRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketReunionCookGetActivityRsp.cs b/GameServer/Server/Packet/Send/Test/PacketReunionCookGetActivityRsp.cs new file mode 100644 index 0000000..f41e8c3 --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketReunionCookGetActivityRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketReunionCookGetActivityRsp : BasePacket +{ + public PacketReunionCookGetActivityRsp() : base(CmdIds.ReunionCookGetActivityRsp) + { + var proto = new ReunionCookGetActivityRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketSanctuaryGetMainInfoRsp.cs b/GameServer/Server/Packet/Send/Test/PacketSanctuaryGetMainInfoRsp.cs new file mode 100644 index 0000000..78641b9 --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketSanctuaryGetMainInfoRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketSanctuaryGetMainInfoRsp : BasePacket +{ + public PacketSanctuaryGetMainInfoRsp() : base(CmdIds.SanctuaryGetMainInfoRsp) + { + var proto = new SanctuaryGetMainInfoRsp + { + Retcode = SanctuaryGetMainInfoRsp.Types.Retcode.NotOpen, // set to NotOpen to prevent null reference error pop up + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketSelectGodWarChallengeAvatarRsp.cs b/GameServer/Server/Packet/Send/Test/PacketSelectGodWarChallengeAvatarRsp.cs new file mode 100644 index 0000000..941c3db --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketSelectGodWarChallengeAvatarRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketSelectGodWarChallengeAvatarRsp : BasePacket +{ + public PacketSelectGodWarChallengeAvatarRsp() : base(CmdIds.SelectGodWarChallengeAvatarRsp) + { + var proto = new SelectGodWarChallengeAvatarRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketSelectNewStigmataRuneRsp.cs b/GameServer/Server/Packet/Send/Test/PacketSelectNewStigmataRuneRsp.cs new file mode 100644 index 0000000..dddae1c --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketSelectNewStigmataRuneRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketSelectNewStigmataRuneRsp : BasePacket +{ + public PacketSelectNewStigmataRuneRsp() : base(CmdIds.SelectNewStigmataRuneRsp) + { + var proto = new SelectNewStigmataRuneRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketSetDressRsp.cs b/GameServer/Server/Packet/Send/Test/PacketSetDressRsp.cs new file mode 100644 index 0000000..f16ba3d --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketSetDressRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketSetDressRsp : BasePacket +{ + public PacketSetDressRsp() : base(CmdIds.SetDressRsp) + { + var proto = new SetDressRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketSetWarshipAvatarRsp.cs b/GameServer/Server/Packet/Send/Test/PacketSetWarshipAvatarRsp.cs new file mode 100644 index 0000000..d340ade --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketSetWarshipAvatarRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketSetWarshipAvatarRsp : BasePacket +{ + public PacketSetWarshipAvatarRsp() : base(CmdIds.SetWarshipAvatarRsp) + { + var proto = new SetWarshipAvatarRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketSetWarshipRsp.cs b/GameServer/Server/Packet/Send/Test/PacketSetWarshipRsp.cs new file mode 100644 index 0000000..c696ed2 --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketSetWarshipRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketSetWarshipRsp : BasePacket +{ + public PacketSetWarshipRsp() : base(CmdIds.SetWarshipRsp) + { + var proto = new SetWarshipRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketSimplifiedGodWarGetActivityRsp.cs b/GameServer/Server/Packet/Send/Test/PacketSimplifiedGodWarGetActivityRsp.cs new file mode 100644 index 0000000..97b9fdc --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketSimplifiedGodWarGetActivityRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketSimplifiedGodWarGetActivityRsp : BasePacket +{ + public PacketSimplifiedGodWarGetActivityRsp() : base(CmdIds.SimplifiedGodWarGetActivityRsp) + { + var proto = new SimplifiedGodWarGetActivityRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketSusannaTrialGetActivityRsp.cs b/GameServer/Server/Packet/Send/Test/PacketSusannaTrialGetActivityRsp.cs new file mode 100644 index 0000000..ffad062 --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketSusannaTrialGetActivityRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketSusannaTrialGetActivityRsp : BasePacket +{ + public PacketSusannaTrialGetActivityRsp() : base(CmdIds.SusannaTrialGetActivityRsp) + { + var proto = new SusannaTrialGetActivityRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketThemeWantedRefreshTicketRsp.cs b/GameServer/Server/Packet/Send/Test/PacketThemeWantedRefreshTicketRsp.cs new file mode 100644 index 0000000..6dba0be --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketThemeWantedRefreshTicketRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketThemeWantedRefreshTicketRsp : BasePacket +{ + public PacketThemeWantedRefreshTicketRsp() : base(CmdIds.ThemeWantedRefreshTicketRsp) + { + var proto = new ThemeWantedRefreshTicketRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketTriggerGodWarEventRsp.cs b/GameServer/Server/Packet/Send/Test/PacketTriggerGodWarEventRsp.cs new file mode 100644 index 0000000..cf61d60 --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketTriggerGodWarEventRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketTriggerGodWarEventRsp : BasePacket +{ + public PacketTriggerGodWarEventRsp() : base(CmdIds.TriggerGodWarEventRsp) + { + var proto = new TriggerGodWarEventRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketUltraEndlessEnterSiteRsp.cs b/GameServer/Server/Packet/Send/Test/PacketUltraEndlessEnterSiteRsp.cs new file mode 100644 index 0000000..11dac02 --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketUltraEndlessEnterSiteRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketUltraEndlessEnterSiteRsp : BasePacket +{ + public PacketUltraEndlessEnterSiteRsp() : base(CmdIds.UltraEndlessEnterSiteRsp) + { + var proto = new UltraEndlessEnterSiteRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketUltraEndlessGetMainDataRsp.cs b/GameServer/Server/Packet/Send/Test/PacketUltraEndlessGetMainDataRsp.cs new file mode 100644 index 0000000..be4195b --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketUltraEndlessGetMainDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketUltraEndlessGetMainDataRsp : BasePacket +{ + public PacketUltraEndlessGetMainDataRsp() : base(CmdIds.UltraEndlessGetMainDataRsp) + { + var proto = new UltraEndlessGetMainDataRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketUltraEndlessGetTopRankRsp.cs b/GameServer/Server/Packet/Send/Test/PacketUltraEndlessGetTopRankRsp.cs new file mode 100644 index 0000000..c8ff92e --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketUltraEndlessGetTopRankRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketUltraEndlessGetTopRankRsp : BasePacket +{ + public PacketUltraEndlessGetTopRankRsp() : base(CmdIds.UltraEndlessGetTopRankRsp) + { + var proto = new UltraEndlessGetTopRankRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketUltraEndlessReportSiteFloorRsp.cs b/GameServer/Server/Packet/Send/Test/PacketUltraEndlessReportSiteFloorRsp.cs new file mode 100644 index 0000000..ed40324 --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketUltraEndlessReportSiteFloorRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketUltraEndlessReportSiteFloorRsp : BasePacket +{ + public PacketUltraEndlessReportSiteFloorRsp() : base(CmdIds.UltraEndlessReportSiteFloorRsp) + { + var proto = new UltraEndlessReportSiteFloorRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketUpdateMissionProgressRsp.cs b/GameServer/Server/Packet/Send/Test/PacketUpdateMissionProgressRsp.cs new file mode 100644 index 0000000..5391954 --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketUpdateMissionProgressRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketUpdateMissionProgressRsp : BasePacket +{ + public PacketUpdateMissionProgressRsp() : base(CmdIds.UpdateMissionProgressRsp) + { + var proto = new UpdateMissionProgressRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Test/PacketWaveRushGetActivityRsp.cs b/GameServer/Server/Packet/Send/Test/PacketWaveRushGetActivityRsp.cs new file mode 100644 index 0000000..2d1cb6f --- /dev/null +++ b/GameServer/Server/Packet/Send/Test/PacketWaveRushGetActivityRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Test; + +public class PacketWaveRushGetActivityRsp : BasePacket +{ + public PacketWaveRushGetActivityRsp() : base(CmdIds.WaveRushGetActivityRsp) + { + var proto = new WaveRushGetActivityRsp + { + + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Warship/PacketGetWarshipDataRsp.cs b/GameServer/Server/Packet/Send/Warship/PacketGetWarshipDataRsp.cs new file mode 100644 index 0000000..74888a1 --- /dev/null +++ b/GameServer/Server/Packet/Send/Warship/PacketGetWarshipDataRsp.cs @@ -0,0 +1,41 @@ +using KianaBH.Data; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Warship; + +public class PacketGetWarshipDataRsp : BasePacket +{ + public PacketGetWarshipDataRsp() : base(CmdIds.GetWarshipDataRsp) + { + var proto = new GetWarshipDataRsp + { + IsAll = true, + WarshipList = + { + GameData.EntryThemeData.Values + .Select(theme => new WarshipThemeData + { + WarshipId = theme.SpaceShipConfigId, + BgmPlayMode = 1, + IsWeatherFixed = false, + ComponentList = + { + theme.ThemeBgmConfigList.Count > 0 + ? new List + { + new() + { + ComponentId = theme.ThemeBgmConfigList[0], + Type = 2 + } + } + : new List() + }, + WeatherIdx = theme.ThemeTagList.Count > 0 ? theme.ThemeTagList[0] : 0 + }) + } + }; + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Warship/PacketGetWarshipItemDataRsp.cs b/GameServer/Server/Packet/Send/Warship/PacketGetWarshipItemDataRsp.cs new file mode 100644 index 0000000..bdac767 --- /dev/null +++ b/GameServer/Server/Packet/Send/Warship/PacketGetWarshipItemDataRsp.cs @@ -0,0 +1,19 @@ +using KianaBH.Data; +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Warship; + +public class PacketGetWarshipItemDataRsp : BasePacket +{ + public PacketGetWarshipItemDataRsp() : base(CmdIds.GetWarshipItemDataRsp) + { + var proto = new GetWarshipItemDataRsp + { + IsAll = true, + WarshipItemIdList = { GameData.EntryThemeItemData.Values.Select(x => (uint)x.ThemeItemID) } + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Warship/PacketGetWarshipTrialDataRsp.cs b/GameServer/Server/Packet/Send/Warship/PacketGetWarshipTrialDataRsp.cs new file mode 100644 index 0000000..3d980c7 --- /dev/null +++ b/GameServer/Server/Packet/Send/Warship/PacketGetWarshipTrialDataRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Warship; + +public class PacketGetWarshipTrialDataRsp : BasePacket +{ + public PacketGetWarshipTrialDataRsp() : base(CmdIds.GetWarshipTrialDataRsp) + { + var proto = new GetWarshipTrialDataRsp + { + IsAll = true, + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Warship/PacketSetWarshipAvatarRsp.cs b/GameServer/Server/Packet/Send/Warship/PacketSetWarshipAvatarRsp.cs new file mode 100644 index 0000000..7180871 --- /dev/null +++ b/GameServer/Server/Packet/Send/Warship/PacketSetWarshipAvatarRsp.cs @@ -0,0 +1,17 @@ +using KianaBH.KcpSharp; +using KianaBH.Proto; + +namespace KianaBH.GameServer.Server.Packet.Send.Warship; + +public class PacketSetWarshipAvatarRsp : BasePacket +{ + public PacketSetWarshipAvatarRsp() : base(CmdIds.SetWarshipAvatarRsp) + { + var proto = new SetWarshipAvatarRsp + { + Retcode = SetWarshipAvatarRsp.Types.Retcode.Succ, + }; + + SetData(proto); + } +} diff --git a/KcpSharp/Base/ArrayMemoryOwner.cs b/KcpSharp/Base/ArrayMemoryOwner.cs new file mode 100644 index 0000000..8effe20 --- /dev/null +++ b/KcpSharp/Base/ArrayMemoryOwner.cs @@ -0,0 +1,23 @@ +#if !NEED_POH_SHIM + +using System.Buffers; + +namespace KianaBH.KcpSharp.Base; + +internal sealed class ArrayMemoryOwner : IMemoryOwner +{ + private readonly byte[] _buffer; + + public ArrayMemoryOwner(byte[] buffer) + { + _buffer = buffer ?? throw new ArgumentNullException(nameof(buffer)); + } + + public Memory Memory => _buffer; + + public void Dispose() + { + } +} + +#endif \ No newline at end of file diff --git a/KcpSharp/Base/AsyncAutoResetEvent.cs b/KcpSharp/Base/AsyncAutoResetEvent.cs new file mode 100644 index 0000000..d8612b4 --- /dev/null +++ b/KcpSharp/Base/AsyncAutoResetEvent.cs @@ -0,0 +1,112 @@ +using System.Diagnostics; +using System.Threading.Tasks.Sources; + +namespace KianaBH.KcpSharp.Base; + +internal class AsyncAutoResetEvent : IValueTaskSource +{ + private bool _activeWait; + private bool _isSet; + private SpinLock _lock; + private ManualResetValueTaskSourceCore _rvtsc; + private bool _signaled; + + private T? _value; + + public AsyncAutoResetEvent() + { + _rvtsc = new ManualResetValueTaskSourceCore + { + RunContinuationsAsynchronously = true + }; + _lock = new SpinLock(); + } + + T IValueTaskSource.GetResult(short token) + { + try + { + return _rvtsc.GetResult(token); + } + finally + { + _rvtsc.Reset(); + + var lockTaken = false; + try + { + _lock.Enter(ref lockTaken); + + _activeWait = false; + _signaled = false; + } + finally + { + if (lockTaken) _lock.Exit(); + } + } + } + + ValueTaskSourceStatus IValueTaskSource.GetStatus(short token) + { + return _rvtsc.GetStatus(token); + } + + void IValueTaskSource.OnCompleted(Action continuation, object? state, short token, + ValueTaskSourceOnCompletedFlags flags) + { + _rvtsc.OnCompleted(continuation, state, token, flags); + } + + public ValueTask WaitAsync() + { + var lockTaken = false; + try + { + _lock.Enter(ref lockTaken); + + if (_activeWait) + return new ValueTask( + Task.FromException(new InvalidOperationException("Another thread is already waiting."))); + if (_isSet) + { + _isSet = false; + var value = _value!; + _value = default; + return new ValueTask(value); + } + + _activeWait = true; + Debug.Assert(!_signaled); + + return new ValueTask(this, _rvtsc.Version); + } + finally + { + if (lockTaken) _lock.Exit(); + } + } + + public void Set(T value) + { + var lockTaken = false; + try + { + _lock.Enter(ref lockTaken); + + if (_activeWait && !_signaled) + { + _signaled = true; + _rvtsc.SetResult(value); + return; + } + + _isSet = true; + _value = value; + } + finally + { + if (lockTaken) _lock.Exit(); + } + } +} \ No newline at end of file diff --git a/KcpSharp/Base/DefaultArrayPoolBufferAllocator.cs b/KcpSharp/Base/DefaultArrayPoolBufferAllocator.cs new file mode 100644 index 0000000..0115bd7 --- /dev/null +++ b/KcpSharp/Base/DefaultArrayPoolBufferAllocator.cs @@ -0,0 +1,11 @@ +namespace KianaBH.KcpSharp.Base; + +internal sealed class DefaultArrayPoolBufferAllocator : IKcpBufferPool +{ + public static DefaultArrayPoolBufferAllocator Default { get; } = new(); + + public KcpRentedBuffer Rent(KcpBufferPoolRentOptions options) + { + return KcpRentedBuffer.FromSharedArrayPool(options.Size); + } +} \ No newline at end of file diff --git a/KcpSharp/Base/IKcpBufferPool.cs b/KcpSharp/Base/IKcpBufferPool.cs new file mode 100644 index 0000000..386628e --- /dev/null +++ b/KcpSharp/Base/IKcpBufferPool.cs @@ -0,0 +1,14 @@ +namespace KianaBH.KcpSharp.Base; + +/// +/// The buffer pool to rent buffers from. +/// +public interface IKcpBufferPool +{ + /// + /// Rent a buffer using the specified options. + /// + /// The options used to rent this buffer. + /// + KcpRentedBuffer Rent(KcpBufferPoolRentOptions options); +} \ No newline at end of file diff --git a/KcpSharp/Base/IKcpConversation.cs b/KcpSharp/Base/IKcpConversation.cs new file mode 100644 index 0000000..2488cf0 --- /dev/null +++ b/KcpSharp/Base/IKcpConversation.cs @@ -0,0 +1,25 @@ +using System.Net.Sockets; + +namespace KianaBH.KcpSharp.Base; + +/// +/// A conversation or a channel over the transport. +/// +public interface IKcpConversation : IDisposable +{ + /// + /// Put message into the receive queue of the channel. + /// + /// + /// The packet content with the optional conversation ID. This buffer should not contain space for + /// pre-buffer and post-buffer. + /// + /// The token to cancel this operation. + /// A that completes when the packet is put into the receive queue. + ValueTask InputPakcetAsync(UdpReceiveResult packet, CancellationToken cancellationToken); + + /// + /// Mark the underlying transport as closed. Abort all active send or receive operations. + /// + void SetTransportClosed(); +} \ No newline at end of file diff --git a/KcpSharp/Base/IKcpConversationUpdateNotificationSource.cs b/KcpSharp/Base/IKcpConversationUpdateNotificationSource.cs new file mode 100644 index 0000000..b5f752c --- /dev/null +++ b/KcpSharp/Base/IKcpConversationUpdateNotificationSource.cs @@ -0,0 +1,7 @@ +namespace KianaBH.KcpSharp.Base; + +internal interface IKcpConversationUpdateNotificationSource +{ + ReadOnlyMemory Packet { get; } + void Release(); +} \ No newline at end of file diff --git a/KcpSharp/Base/IKcpExceptionProducer.cs b/KcpSharp/Base/IKcpExceptionProducer.cs new file mode 100644 index 0000000..deec929 --- /dev/null +++ b/KcpSharp/Base/IKcpExceptionProducer.cs @@ -0,0 +1,16 @@ +namespace KianaBH.KcpSharp.Base; + +/// +/// An instance that can produce exceptions in background jobs. +/// +/// The type of the instance. +public interface IKcpExceptionProducer +{ + /// + /// Set the handler to invoke when exception is thrown. Return true in the handler to ignore the error and continue + /// running. Return false in the handler to abort the operation. + /// + /// The exception handler. + /// The state object to pass into the exception handler. + void SetExceptionHandler(Func handler, object? state); +} \ No newline at end of file diff --git a/KcpSharp/Base/IKcpMultiplexConnection.cs b/KcpSharp/Base/IKcpMultiplexConnection.cs new file mode 100644 index 0000000..169a0fe --- /dev/null +++ b/KcpSharp/Base/IKcpMultiplexConnection.cs @@ -0,0 +1,56 @@ +using System.Net; + +namespace KianaBH.KcpSharp.Base; + +/// +/// Multiplex many channels or conversations over the same transport. +/// +public interface IKcpMultiplexConnection : IDisposable +{ + /// + /// Determine whether the multiplex connection contains a conversation with the specified id. + /// + /// The conversation ID. + /// True if the multiplex connection contains the specified conversation. Otherwise false. + bool Contains(long id); + + /// + /// Create a raw channel with the specified conversation ID. + /// + /// The conversation ID. + /// The remote endpoint + /// The options of the . + /// The raw channel created. + /// The current instance is disposed. + /// Another channel or conversation with the same ID was already registered. + KcpRawChannel CreateRawChannel(long id, IPEndPoint remoteEndpoint, KcpRawChannelOptions? options = null); + + /// + /// Create a conversation with the specified conversation ID. + /// + /// The conversation ID. + /// The remote endpoint + /// The options of the . + /// The KCP conversation created. + /// The current instance is disposed. + /// Another channel or conversation with the same ID was already registered. + KcpConversation CreateConversation(long id, IPEndPoint remoteEndpoint, KcpConversationOptions? options = null); + + /// + /// Register a conversation or channel with the specified conversation ID and user state. + /// + /// The conversation or channel to register. + /// The conversation ID. + /// is not provided. + /// The current instance is disposed. + /// Another channel or conversation with the same ID was already registered. + void RegisterConversation(IKcpConversation conversation, long id); + + + /// + /// Unregister a conversation or channel with the specified conversation ID. + /// + /// The conversation ID. + /// The conversation unregistered. Returns null when the conversation with the specified ID is not found. + IKcpConversation? UnregisterConversation(long id); +} \ No newline at end of file diff --git a/KcpSharp/Base/IKcpMultiplexConnectionOfT.cs b/KcpSharp/Base/IKcpMultiplexConnectionOfT.cs new file mode 100644 index 0000000..12803e2 --- /dev/null +++ b/KcpSharp/Base/IKcpMultiplexConnectionOfT.cs @@ -0,0 +1,56 @@ +using System.Net; + +namespace KianaBH.KcpSharp.Base; + +/// +/// Multiplex many channels or conversations over the same transport. +/// +public interface IKcpMultiplexConnection : IKcpMultiplexConnection +{ + /// + /// Create a raw channel with the specified conversation ID. + /// + /// The conversation ID. + /// The remote Endpoint + /// The user state of this channel. + /// The options of the . + /// The raw channel created. + /// The current instance is disposed. + /// Another channel or conversation with the same ID was already registered. + KcpRawChannel CreateRawChannel(long id, IPEndPoint remoteEndpoint, T state, KcpRawChannelOptions? options = null); + + /// + /// Create a conversation with the specified conversation ID. + /// + /// The conversation ID. + /// The remote Endpoint + /// The user state of this conversation. + /// The options of the . + /// The KCP conversation created. + /// The current instance is disposed. + /// Another channel or conversation with the same ID was already registered. + KcpConversation CreateConversation(long id, IPEndPoint remoteEndpoint, T state, + KcpConversationOptions? options = null); + + /// + /// Register a conversation or channel with the specified conversation ID and user state. + /// + /// The conversation or channel to register. + /// The conversation ID. + /// The user state + /// is not provided. + /// The current instance is disposed. + /// Another channel or conversation with the same ID was already registered. + void RegisterConversation(IKcpConversation conversation, long id, T? state); + + /// + /// Unregister a conversation or channel with the specified conversation ID. + /// + /// The conversation ID. + /// The user state. + /// + /// The conversation unregistered with the user state. Returns default when the conversation with the specified ID + /// is not found. + /// + IKcpConversation? UnregisterConversation(long id, out T? state); +} \ No newline at end of file diff --git a/KcpSharp/Base/IKcpTransport.cs b/KcpSharp/Base/IKcpTransport.cs new file mode 100644 index 0000000..1a6612a --- /dev/null +++ b/KcpSharp/Base/IKcpTransport.cs @@ -0,0 +1,18 @@ +using System.Net; + +namespace KianaBH.KcpSharp.Base; + +/// +/// A transport to send and receive packets. +/// +public interface IKcpTransport +{ + /// + /// Send a packet into the transport. + /// + /// The content of the packet. + /// The remote endpoint + /// A token to cancel this operation. + /// A that completes when the packet is sent. + ValueTask SendPacketAsync(Memory packet, IPEndPoint remoteEndpoint, CancellationToken cancellationToken); +} \ No newline at end of file diff --git a/KcpSharp/Base/IKcpTransportOfT.cs b/KcpSharp/Base/IKcpTransportOfT.cs new file mode 100644 index 0000000..6456d5d --- /dev/null +++ b/KcpSharp/Base/IKcpTransportOfT.cs @@ -0,0 +1,22 @@ +namespace KianaBH.KcpSharp.Base; + +/// +/// A transport instance for upper-level connections. +/// +/// The type of the upper-level connection. +public interface IKcpTransport : IKcpTransport, IKcpExceptionProducer>, IDisposable +{ + /// + /// Get the upper-level connection instace. If Start is not called or the transport is closed, + /// will be thrown. + /// + /// Start is not called or the transport is closed. + T Connection { get; } + + /// + /// Create the upper-level connection and start pumping packets from the socket to the upper-level connection. + /// + /// The current instance is disposed. + /// has been called before. + void Start(); +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpAcknowledgeList.cs b/KcpSharp/Base/KcpAcknowledgeList.cs new file mode 100644 index 0000000..f502cbe --- /dev/null +++ b/KcpSharp/Base/KcpAcknowledgeList.cs @@ -0,0 +1,93 @@ +using System.Runtime.CompilerServices; + +namespace KianaBH.KcpSharp.Base; + +internal sealed class KcpAcknowledgeList +{ + private readonly KcpSendQueue _sendQueue; + private (uint SerialNumber, uint Timestamp)[] _array; + private int _count; + private SpinLock _lock; + + public KcpAcknowledgeList(KcpSendQueue sendQueue, int windowSize) + { + _array = new (uint SerialNumber, uint Timestamp)[windowSize]; + _count = 0; + _lock = new SpinLock(); + _sendQueue = sendQueue; + } + + public bool TryGetAt(int index, out uint serialNumber, out uint timestamp) + { + var lockTaken = false; + try + { + _lock.Enter(ref lockTaken); + + if ((uint)index >= (uint)_count) + { + serialNumber = default; + timestamp = default; + return false; + } + + (serialNumber, timestamp) = _array[index]; + return true; + } + finally + { + if (lockTaken) _lock.Exit(); + } + } + + public void Clear() + { + var lockTaken = false; + try + { + _lock.Enter(ref lockTaken); + + _count = 0; + } + finally + { + if (lockTaken) _lock.Exit(); + } + + _sendQueue.NotifyAckListChanged(false); + } + + public void Add(uint serialNumber, uint timestamp) + { + var lockTaken = false; + try + { + _lock.Enter(ref lockTaken); + + EnsureCapacity(); + _array[_count++] = (serialNumber, timestamp); + } + finally + { + if (lockTaken) _lock.Exit(); + } + + _sendQueue.NotifyAckListChanged(true); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void EnsureCapacity() + { + if (_count == _array.Length) Expand(); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + private void Expand() + { + var capacity = _count + 1; + capacity = Math.Max(capacity + capacity / 2, 16); + var newArray = new (uint SerialNumber, uint Timestamp)[capacity]; + _array.AsSpan(0, _count).CopyTo(newArray); + _array = newArray; + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpBuffer.cs b/KcpSharp/Base/KcpBuffer.cs new file mode 100644 index 0000000..3b84338 --- /dev/null +++ b/KcpSharp/Base/KcpBuffer.cs @@ -0,0 +1,51 @@ +using System.Diagnostics; + +namespace KianaBH.KcpSharp.Base; + +internal readonly struct KcpBuffer +{ + private readonly object? _owner; + private readonly Memory _memory; + + public ReadOnlyMemory DataRegion => _memory.Slice(0, Length); + + public int Length { get; } + + private KcpBuffer(object? owner, Memory memory, int length) + { + _owner = owner; + _memory = memory; + Length = length; + } + + public static KcpBuffer CreateFromSpan(KcpRentedBuffer buffer, ReadOnlySpan dataSource) + { + var memory = buffer.Memory; + if (dataSource.Length > memory.Length) ThrowRentedBufferTooSmall(); + dataSource.CopyTo(memory.Span); + return new KcpBuffer(buffer.Owner, memory, dataSource.Length); + } + + public KcpBuffer AppendData(ReadOnlySpan data) + { + if (Length + data.Length > _memory.Length) ThrowRentedBufferTooSmall(); + data.CopyTo(_memory.Span.Slice(Length)); + return new KcpBuffer(_owner, _memory, Length + data.Length); + } + + public KcpBuffer Consume(int length) + { + Debug.Assert((uint)length <= (uint)Length); + return new KcpBuffer(_owner, _memory.Slice(length), Length - length); + } + + public void Release() + { + new KcpRentedBuffer(_owner, _memory).Dispose(); + } + + private static void ThrowRentedBufferTooSmall() + { + throw new InvalidOperationException("The rented buffer is not large enough to hold the data."); + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpBufferPoolRentOptions.cs b/KcpSharp/Base/KcpBufferPoolRentOptions.cs new file mode 100644 index 0000000..dae0de7 --- /dev/null +++ b/KcpSharp/Base/KcpBufferPoolRentOptions.cs @@ -0,0 +1,50 @@ +namespace KianaBH.KcpSharp.Base; + +/// +/// The options to use when renting buffers from the pool. +/// +public readonly struct KcpBufferPoolRentOptions : IEquatable +{ + /// + /// The minimum size of the buffer. + /// + public int Size { get; } + + /// + /// True if the buffer may be passed to the outside of KcpSharp. False if the buffer is only used internally in + /// KcpSharp. + /// + public bool IsOutbound { get; } + + /// + /// Create a with the specified parameters. + /// + /// The minimum size of the buffer. + /// + /// True if the buffer may be passed to the outside of KcpSharp. False if the buffer is only used + /// internally in KcpSharp. + /// + public KcpBufferPoolRentOptions(int size, bool isOutbound) + { + Size = size; + IsOutbound = isOutbound; + } + + /// + public bool Equals(KcpBufferPoolRentOptions other) + { + return Size == other.Size && IsOutbound == other.IsOutbound; + } + + /// + public override bool Equals(object? obj) + { + return obj is KcpBufferPoolRentOptions other && Equals(other); + } + + /// + public override int GetHashCode() + { + return HashCode.Combine(Size, IsOutbound); + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpCommand.cs b/KcpSharp/Base/KcpCommand.cs new file mode 100644 index 0000000..53aea9b --- /dev/null +++ b/KcpSharp/Base/KcpCommand.cs @@ -0,0 +1,9 @@ +namespace KianaBH.KcpSharp.Base; + +internal enum KcpCommand : byte +{ + Push = 81, + Ack = 82, + WindowProbe = 83, + WindowSize = 84 +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpConversation.FlushAsyncMethodBuilder.cs b/KcpSharp/Base/KcpConversation.FlushAsyncMethodBuilder.cs new file mode 100644 index 0000000..4b25bb3 --- /dev/null +++ b/KcpSharp/Base/KcpConversation.FlushAsyncMethodBuilder.cs @@ -0,0 +1,272 @@ +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.CompilerServices; +using System.Runtime.ExceptionServices; +using System.Threading.Tasks.Sources; + +namespace KianaBH.KcpSharp.Base; + +partial class KcpConversation +{ +#if NET6_0_OR_GREATER + [ThreadStatic] private static KcpConversation? s_currentObject; + + private object? _flushStateMachine; + + private struct KcpFlushAsyncMethodBuilder + { + private readonly KcpConversation _conversation; + private StateMachineBox? _task; + + private static readonly StateMachineBox s_syncSuccessSentinel = new SyncSuccessSentinelStateMachineBox(); + + public KcpFlushAsyncMethodBuilder(KcpConversation conversation) + { + _conversation = conversation; + _task = null; + } + + public static KcpFlushAsyncMethodBuilder Create() + { + var conversation = s_currentObject; + Debug.Assert(conversation is not null); + s_currentObject = null; + + return new KcpFlushAsyncMethodBuilder(conversation); + } + +#pragma warning disable CA1822 // Mark members as static + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Start(ref TStateMachine stateMachine) + where TStateMachine : IAsyncStateMachine +#pragma warning restore CA1822 // Mark members as static + { + Debug.Assert(stateMachine is not null); + + stateMachine.MoveNext(); + } + + public ValueTask Task + { + get + { + if (ReferenceEquals(_task, s_syncSuccessSentinel)) return default; + var stateMachineBox = _task ??= CreateWeaklyTypedStateMachineBox(); + return new ValueTask(stateMachineBox, stateMachineBox.Version); + } + } + +#pragma warning disable CA1822 // Mark members as static + public void SetStateMachine(IAsyncStateMachine stateMachine) +#pragma warning restore CA1822 // Mark members as static + { + Debug.Fail("SetStateMachine should not be used."); + } + + public void SetResult() + { + if (_task == null) + _task = s_syncSuccessSentinel; + else + _task.SetResult(); + } + + public void SetException(Exception exception) + { + SetException(exception, ref _task); + } + + private static void SetException(Exception exception, ref StateMachineBox? boxFieldRef) + { + if (exception == null) throw new ArgumentNullException(nameof(exception)); + (boxFieldRef ??= CreateWeaklyTypedStateMachineBox()).SetException(exception); + } + + public void AwaitOnCompleted(ref TAwaiter awaiter, ref TStateMachine stateMachine) + where TAwaiter : INotifyCompletion + where TStateMachine : IAsyncStateMachine + { + AwaitOnCompleted(ref awaiter, ref stateMachine, ref _task, _conversation); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void AwaitUnsafeOnCompleted(ref TAwaiter awaiter, + ref TStateMachine stateMachine) + where TAwaiter : ICriticalNotifyCompletion + where TStateMachine : IAsyncStateMachine + { + AwaitUnsafeOnCompleted(ref awaiter, ref stateMachine, ref _task, _conversation); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void AwaitUnsafeOnCompleted(ref TAwaiter awaiter, + ref TStateMachine stateMachine, ref StateMachineBox? boxRef, KcpConversation conversation) + where TAwaiter : ICriticalNotifyCompletion where TStateMachine : IAsyncStateMachine + { + var stateMachineBox = GetStateMachineBox(ref stateMachine, ref boxRef, conversation); + AwaitUnsafeOnCompleted(ref awaiter, stateMachineBox); + } + + private static void AwaitOnCompleted(ref TAwaiter awaiter, + ref TStateMachine stateMachine, ref StateMachineBox? box, KcpConversation conversation) + where TAwaiter : INotifyCompletion where TStateMachine : IAsyncStateMachine + { + try + { + awaiter.OnCompleted(GetStateMachineBox(ref stateMachine, ref box, conversation).MoveNextAction); + } + catch (Exception exception) + { + var edi = ExceptionDispatchInfo.Capture(exception); + ThreadPool.QueueUserWorkItem(static state => ((ExceptionDispatchInfo)state!).Throw(), edi); + } + } + + private static void AwaitUnsafeOnCompleted(ref TAwaiter awaiter, StateMachineBox box) + where TAwaiter : ICriticalNotifyCompletion + { + try + { + awaiter.UnsafeOnCompleted(box.MoveNextAction); + } + catch (Exception exception) + { + var edi = ExceptionDispatchInfo.Capture(exception); + ThreadPool.QueueUserWorkItem(static state => ((ExceptionDispatchInfo)state!).Throw(), edi); + } + } + + + private static StateMachineBox CreateWeaklyTypedStateMachineBox() + { + return new StateMachineBox(null); + } + + private static StateMachineBox GetStateMachineBox(ref TStateMachine stateMachine, + ref StateMachineBox? boxFieldRef, KcpConversation conversation) where TStateMachine : IAsyncStateMachine + { + var stateMachineBox = boxFieldRef as StateMachineBox; + if (stateMachineBox != null) return stateMachineBox; + var stateMachineBox2 = boxFieldRef as StateMachineBox; + if (stateMachineBox2 != null) + { + if (stateMachineBox2.StateMachine == null) + { + Debugger.NotifyOfCrossThreadDependency(); + stateMachineBox2.StateMachine = stateMachine; + } + + return stateMachineBox2; + } + + Debugger.NotifyOfCrossThreadDependency(); + var stateMachineBox3 = + (StateMachineBox)(boxFieldRef = + StateMachineBox.GetOrCreateBox(conversation)); + stateMachineBox3.StateMachine = stateMachine; + return stateMachineBox3; + } + + private abstract class StateMachineBox : IValueTaskSource + { + protected Action? _moveNextAction; + protected ManualResetValueTaskSourceCore _mrvtsc; + + public virtual Action MoveNextAction => _moveNextAction!; + + public short Version => _mrvtsc.Version; + + public ValueTaskSourceStatus GetStatus(short token) + { + return _mrvtsc.GetStatus(token); + } + + public void OnCompleted(Action continuation, object? state, short token, + ValueTaskSourceOnCompletedFlags flags) + { + _mrvtsc.OnCompleted(continuation, state, token, flags); + } + + void IValueTaskSource.GetResult(short token) + { + throw new NotSupportedException(); + } + + public void SetResult() + { + _mrvtsc.SetResult(true); + } + + public void SetException(Exception error) + { + _mrvtsc.SetException(error); + } + } + + private sealed class SyncSuccessSentinelStateMachineBox : StateMachineBox + { + public SyncSuccessSentinelStateMachineBox() + { + SetResult(); + } + } + + + private sealed class StateMachineBox : StateMachineBox, IValueTaskSource + where TStateMachine : IAsyncStateMachine + { + private KcpConversation? _conversation; + + [MaybeNull] public TStateMachine StateMachine; + + internal StateMachineBox(KcpConversation? conversation) + { + _conversation = conversation; + } + + public override Action MoveNextAction => _moveNextAction ??= MoveNext; + + void IValueTaskSource.GetResult(short token) + { + try + { + _mrvtsc.GetResult(token); + } + finally + { + ReturnOrDropBox(); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static StateMachineBox GetOrCreateBox(KcpConversation conversation) + { + if (conversation._flushStateMachine is StateMachineBox stateMachine) + { + stateMachine._conversation = conversation; + conversation._flushStateMachine = null; + return stateMachine; + } + + return new StateMachineBox(conversation); + } + + public void MoveNext() + { + if (StateMachine is not null) StateMachine.MoveNext(); + } + + private void ReturnOrDropBox() + { + StateMachine = default!; + _mrvtsc.Reset(); + if (_conversation is not null) + { + _conversation._flushStateMachine = this; + _conversation = null; + } + } + } + } +#endif +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpConversation.cs b/KcpSharp/Base/KcpConversation.cs new file mode 100644 index 0000000..ac93317 --- /dev/null +++ b/KcpSharp/Base/KcpConversation.cs @@ -0,0 +1,1467 @@ +#if NEED_LINKEDLIST_SHIM +using LinkedListOfBufferItem = KcpSharp.NetstandardShim.LinkedList; +using LinkedListNodeOfBufferItem = KcpSharp.NetstandardShim.LinkedListNode; +#else +using LinkedListOfBufferItem = + System.Collections.Generic.LinkedList; +using LinkedListNodeOfBufferItem = + System.Collections.Generic.LinkedListNode; +#endif +using System.Buffers.Binary; +using System.Net; +using System.Net.Sockets; +using System.Runtime.CompilerServices; +using KianaBH.Util; + +namespace KianaBH.KcpSharp.Base; + +/// +/// A reliable channel over an unreliable transport implemented in KCP protocol. +/// +public sealed partial class KcpConversation : IKcpConversation, IKcpExceptionProducer +{ + private readonly IKcpBufferPool _bufferPool; + private readonly IKcpTransport _transport; + private readonly IPEndPoint _remoteEndPoint; + private readonly ulong? _id; + + private readonly int _mtu; + private readonly int _mss; + private readonly int _preBufferSize; + private readonly int _postBufferSize; + + private uint _snd_una; + private uint _snd_nxt; + private uint _rcv_nxt; + + private uint _ssthresh; + + private int _rx_rttval; + private int _rx_srtt; + private uint _rx_rto; + private readonly uint _rx_minrto; + + private readonly uint _snd_wnd; + private readonly uint _rcv_wnd; + private uint _rmt_wnd; + private uint _cwnd; + private KcpProbeType _probe; + private SpinLock _cwndUpdateLock; + + private readonly uint _interval; + private uint _ts_flush; + + private readonly bool _nodelay; + private uint _ts_probe; + private uint _probe_wait; + + private uint _incr; + + private readonly KcpSendReceiveQueueItemCache _queueItemCache; + private readonly KcpSendQueue _sendQueue; + private readonly KcpReceiveQueue _receiveQueue; + + private readonly LinkedListOfBufferItem _sndBuf = new(); + private readonly LinkedListOfBufferItem _rcvBuf = new(); + private KcpSendReceiveBufferItemCache _cache = KcpSendReceiveBufferItemCache.Create(); + + private readonly KcpAcknowledgeList _ackList; + + private readonly int _fastresend; + private readonly int _fastlimit; + private readonly bool _nocwnd; + + private readonly bool _keepAliveEnabled; + private readonly uint _keepAliveInterval; + private readonly uint _keepAliveGracePeriod; + private uint _lastReceiveTick; + private uint _lastSendTick; + + private readonly KcpReceiveWindowNotificationOptions? _receiveWindowNotificationOptions; + private uint _ts_rcv_notify; + private uint _ts_rcv_notify_wait; + + private KcpConversationUpdateActivation? _updateActivation; + private CancellationTokenSource? _updateLoopCts; + private bool _disposed; + + private Func? _exceptionHandler; + private object? _exceptionHandlerState; + + private const uint IKCP_RTO_MAX = 60000; + private const int IKCP_THRESH_MIN = 2; + private const uint IKCP_PROBE_INIT = 7000; // 7 secs to probe window size + private const uint IKCP_PROBE_LIMIT = 120000; // up to 120 secs to probe window + + /// + /// Construct a reliable channel using KCP protocol. + /// + /// The remote endpoint + /// The underlying transport. + /// The options of the . + public KcpConversation(IPEndPoint remoteEndpoint, IKcpTransport transport, KcpConversationOptions? options) + : this(remoteEndpoint, transport, null, options) + { + } + + /// + /// Construct a reliable channel using KCP protocol. + /// + /// The remote endpoint + /// The underlying transport. + /// The conversation ID. + /// The options of the . + public KcpConversation(IPEndPoint remoteEndpoint, IKcpTransport transport, long conversationId, + KcpConversationOptions? options) + : this(remoteEndpoint, transport, (ulong)conversationId, options) + { + } + + private KcpConversation(IPEndPoint remoteEndpoint, IKcpTransport transport, ulong? conversationId, + KcpConversationOptions? options) + { + _bufferPool = options?.BufferPool ?? DefaultArrayPoolBufferAllocator.Default; + _transport = transport; + _remoteEndPoint = remoteEndpoint; + _id = conversationId; + + if (options is null) + _mtu = KcpConversationOptions.MtuDefaultValue; + else if (options.Mtu < 50) + throw new ArgumentException("MTU must be at least 50.", nameof(options)); + else + _mtu = options.Mtu; + + _preBufferSize = options?.PreBufferSize ?? 0; + _postBufferSize = options?.PostBufferSize ?? 0; + if (_preBufferSize < 0) + throw new ArgumentException("PreBufferSize must be a non-negative integer.", nameof(options)); + if (_postBufferSize < 0) + throw new ArgumentException("PostBufferSize must be a non-negative integer.", nameof(options)); + if ((uint)(_preBufferSize + _postBufferSize) >= (uint)(_mtu - KcpGlobalVars.HEADER_LENGTH_WITHOUT_CONVID)) + throw new ArgumentException( + "The sum of PreBufferSize and PostBufferSize is too large. There is not enough space in the packet for the KCP header.", + nameof(options)); + if (conversationId.HasValue && (uint)(_preBufferSize + _postBufferSize) >= + (uint)(_mtu - KcpGlobalVars.HEADER_LENGTH_WITH_CONVID)) + throw new ArgumentException( + "The sum of PreBufferSize and PostBufferSize is too large. There is not enough space in the packet for the KCP header.", + nameof(options)); + + _mss = conversationId.HasValue + ? _mtu - KcpGlobalVars.HEADER_LENGTH_WITH_CONVID + : _mtu - KcpGlobalVars.HEADER_LENGTH_WITHOUT_CONVID; + _mss = _mss - _preBufferSize - _postBufferSize; + + _ssthresh = 2; + + _nodelay = options is not null && options.NoDelay; + if (_nodelay) + { + _rx_minrto = 30; + } + else + { + _rx_rto = 200; + _rx_minrto = 100; + } + + _snd_wnd = options is null || options.SendWindow <= 0 + ? KcpConversationOptions.SendWindowDefaultValue + : (uint)options.SendWindow; + _rcv_wnd = options is null || options.ReceiveWindow <= 0 + ? KcpConversationOptions.ReceiveWindowDefaultValue + : (uint)options.ReceiveWindow; + _rmt_wnd = options is null || options.RemoteReceiveWindow <= 0 + ? KcpConversationOptions.RemoteReceiveWindowDefaultValue + : (uint)options.RemoteReceiveWindow; + _rcv_nxt = 0; + + _interval = options is null || options.UpdateInterval < 10 + ? KcpConversationOptions.UpdateIntervalDefaultValue + : (uint)options.UpdateInterval; + + _fastresend = options is null ? 0 : options.FastResend; + _fastlimit = 5; + _nocwnd = options is not null && options.DisableCongestionControl; + StreamMode = options is not null && options.StreamMode; + + _updateActivation = new KcpConversationUpdateActivation((int)_interval); + _queueItemCache = new KcpSendReceiveQueueItemCache(); + _sendQueue = new KcpSendQueue(_bufferPool, _updateActivation, StreamMode, + options is null || options.SendQueueSize <= 0 + ? KcpConversationOptions.SendQueueSizeDefaultValue + : options.SendQueueSize, _mss, _queueItemCache); + _receiveQueue = new KcpReceiveQueue(StreamMode, + options is null || options.ReceiveQueueSize <= 0 + ? KcpConversationOptions.ReceiveQueueSizeDefaultValue + : options.ReceiveQueueSize, _queueItemCache); + _ackList = new KcpAcknowledgeList(_sendQueue, (int)_snd_wnd); + + _updateLoopCts = new CancellationTokenSource(); + + _ts_flush = GetTimestamp(); + + _lastSendTick = _ts_flush; + _lastReceiveTick = _ts_flush; + var keepAliveOptions = options?.KeepAliveOptions; + if (keepAliveOptions is not null) + { + _keepAliveEnabled = true; + _keepAliveInterval = (uint)keepAliveOptions.SendInterval; + _keepAliveGracePeriod = (uint)keepAliveOptions.GracePeriod; + } + + _receiveWindowNotificationOptions = options?.ReceiveWindowNotificationOptions; + if (_receiveWindowNotificationOptions is not null) + { + _ts_rcv_notify_wait = 0; + _ts_rcv_notify = _ts_flush + (uint)_receiveWindowNotificationOptions.InitialInterval; + } + + RunUpdateOnActivation(); + } + + /// + /// Set the handler to invoke when exception is thrown during flushing packets to the transport. Return true in the + /// handler to ignore the error and continue running. Return false in the handler to abort the operation and mark the + /// transport as closed. + /// + /// The exception handler. + /// The state object to pass into the exception handler. + public void SetExceptionHandler(Func handler, object? state) + { + if (handler is null) throw new ArgumentNullException(nameof(handler)); + + _exceptionHandler = handler; + _exceptionHandlerState = state; + } + + /// + /// Get the ID of the current conversation. + /// + public long? ConversationId => (long?)_id; + + /// + /// Get whether the transport is marked as closed. + /// + public bool TransportClosed { get; private set; } + + /// + /// Get whether the conversation is in stream mode. + /// + public bool StreamMode { get; } + + /// + /// Get the available byte count and available segment count in the send queue. + /// + /// The available byte count in the send queue. + /// The available segment count in the send queue. + /// True if the transport is not closed. Otherwise false. + public bool TryGetSendQueueAvailableSpace(out int byteCount, out int segmentCount) + { + return _sendQueue.TryGetAvailableSpace(out byteCount, out segmentCount); + } + + /// + /// Try to put message into the send queue. + /// + /// The content of the message. + /// + /// True if the message is put into the send queue. False if the message is too large to fit in the send queue, or + /// the transport is closed. + /// + /// + /// The size of the message is larger than 256 * mtu, thus it can not be correctly + /// fragmented and sent. This exception is never thrown in stream mode. + /// + /// The send or flush operation is initiated concurrently. + public bool TrySend(ReadOnlySpan buffer) + { + return _sendQueue.TrySend(buffer, false, out _); + } + + /// + /// Try to put message into the send queue. + /// + /// The content of the message. + /// + /// Whether partial sending is allowed in stream mode. This must not be true in non-stream + /// mode. + /// + /// + /// The number of bytes put into the send queue. This is always the same as the size of the + /// unless is set to true. + /// + /// + /// True if the message is put into the send queue. False if the message is too large to fit in the send queue, or + /// the transport is closed. + /// + /// + /// is set to true in non-stream mode. Or the size + /// of the message is larger than 256 * mtu, thus it can not be correctly fragmented and sent. This exception is never + /// thrown in stream mode. + /// + /// The send or flush operation is initiated concurrently. + public bool TrySend(ReadOnlySpan buffer, bool allowPartialSend, out int bytesWritten) + { + return _sendQueue.TrySend(buffer, allowPartialSend, out bytesWritten); + } + + /// + /// Wait until the send queue contains at least bytes of free space, and also + /// available segments. + /// + /// The number of bytes in the available space. + /// The count of segments in the available space. + /// The token to cancel this operation. + /// + /// or + /// is larger than the total space of the send queue. + /// + /// + /// The is fired before send operation + /// is completed. Or is called before this operation is + /// completed. + /// + /// + /// A that completes when there is enough space in the send queue. The result of + /// the task is false when the transport is closed. + /// + public ValueTask WaitForSendQueueAvailableSpaceAsync(int minimumBytes, int minimumSegments, + CancellationToken cancellationToken = default) + { + return _sendQueue.WaitForAvailableSpaceAsync(minimumBytes, minimumSegments, cancellationToken); + } + + /// + /// Put message into the send queue. + /// + /// The content of the message. + /// The token to cancel this operation. + /// + /// The size of the message is larger than 256 * mtu, thus it can not be correctly + /// fragmented and sent. This exception is never thrown in stream mode. + /// + /// + /// The is fired before send operation + /// is completed. Or is called before this operation is + /// completed. + /// + /// The send or flush operation is initiated concurrently. + /// + /// A that completes when the entire message is put into the queue. The result + /// of the task is false when the transport is closed. + /// + public ValueTask SendAsync(ReadOnlyMemory buffer, CancellationToken cancellationToken = default) + { + return _sendQueue.SendAsync(buffer, cancellationToken); + } + + internal ValueTask WriteAsync(ReadOnlyMemory buffer, CancellationToken cancellationToken) + { + return _sendQueue.WriteAsync(buffer, cancellationToken); + } + + /// + /// Cancel the current send operation or flush operation. + /// + /// True if the current operation is canceled. False if there is no active send operation. + public bool CancelPendingSend() + { + return _sendQueue.CancelPendingOperation(null, default); + } + + /// + /// Cancel the current send operation or flush operation. + /// + /// + /// The inner exception of the thrown by the + /// method or + /// method. + /// + /// + /// The in the + /// thrown by the method or + /// method. + /// + /// True if the current operation is canceled. False if there is no active send operation. + public bool CancelPendingSend(Exception? innerException, CancellationToken cancellationToken) + { + return _sendQueue.CancelPendingOperation(innerException, cancellationToken); + } + + /// + /// Gets the count of bytes not yet sent to the remote host or not acknowledged by the remote host. + /// + public long UnflushedBytes => _sendQueue.GetUnflushedBytes(); + + /// + /// Wait until all messages are sent and acknowledged by the remote host, as well as all the acknowledgements are sent. + /// + /// The token to cancel this operation. + /// + /// The is fired before send operation + /// is completed. Or is called before this operation is + /// completed. + /// + /// The send or flush operation is initiated concurrently. + /// The instance is disposed. + /// + /// A that completes when the all messages are sent and acknowledged. The result + /// of the task is false when the transport is closed. + /// + public ValueTask FlushAsync(CancellationToken cancellationToken = default) + { + return _sendQueue.FlushAsync(cancellationToken); + } + + internal ValueTask FlushForStreamAsync(CancellationToken cancellationToken) + { + return _sendQueue.FlushForStreamAsync(cancellationToken); + } + +#if !NET6_0_OR_GREATER + private ValueTask FlushCoreAsync(CancellationToken cancellationToken) + => new ValueTask(FlushCore2Async(cancellationToken)); + + private async Task FlushCore2Async(CancellationToken cancellationToken) +#else + private ValueTask FlushCoreAsync(CancellationToken cancellationToken) + { + s_currentObject = this; + return FlushCore2Async(cancellationToken); + } + + [AsyncMethodBuilder(typeof(KcpFlushAsyncMethodBuilder))] + private async ValueTask FlushCore2Async(CancellationToken cancellationToken) +#endif + { + var preBufferSize = _preBufferSize; + var postBufferSize = _postBufferSize; + int packetHeaderSize = _id.HasValue + ? KcpGlobalVars.HEADER_LENGTH_WITH_CONVID + : KcpGlobalVars.HEADER_LENGTH_WITHOUT_CONVID; + var sizeLimitBeforePostBuffer = _mtu - _postBufferSize; + var anyPacketSent = false; + + var windowSize = (ushort)GetUnusedReceiveWindow(); + var unacknowledged = _rcv_nxt; + + using var bufferOwner = + _bufferPool.Rent(new KcpBufferPoolRentOptions(_mtu + (_mtu - preBufferSize - postBufferSize), true)); + var buffer = bufferOwner.Memory; + var size = preBufferSize; + buffer.Span.Slice(0, size).Clear(); + + // flush acknowledges + { + var index = 0; + while (_ackList.TryGetAt(index++, out var serialNumber, out var timestamp)) + { + if (size + packetHeaderSize > sizeLimitBeforePostBuffer) + { + buffer.Span.Slice(size, postBufferSize).Clear(); + await _transport + .SendPacketAsync(buffer.Slice(0, size + postBufferSize), _remoteEndPoint, cancellationToken) + .ConfigureAwait(false); + _lastSendTick = GetTimestamp(); + size = preBufferSize; + buffer.Span.Slice(0, size).Clear(); + anyPacketSent = true; + } + + KcpPacketHeader header = new(KcpCommand.Ack, 0, windowSize, timestamp, serialNumber, unacknowledged); + header.EncodeHeader(_id, 0, buffer.Span.Slice(size), out var bytesWritten); + size += bytesWritten; + } + } + + var current = GetTimestamp(); + + // calculate window size + var cwnd = Math.Min(_snd_wnd, _rmt_wnd); + if (!_nocwnd) cwnd = Math.Min(_cwnd, cwnd); + + // move data from snd_queue to snd_buf + while (TimeDiff(_snd_nxt, _snd_una + cwnd) < 0) + { + if (!_sendQueue.TryDequeue(out var data, out var fragment)) break; + + lock (_sndBuf) + { + if (TransportClosed) + { + data.Release(); + return; + } + + _sndBuf.AddLast(CreateSendBufferItem(in data, fragment, current, windowSize, + (uint)Interlocked.Increment(ref Unsafe.As(ref _snd_nxt)) - 1, unacknowledged, _rx_rto)); + } + } + + // calculate resent + var resent = _fastresend > 0 ? (uint)_fastresend : 0xffffffff; + var rtomin = !_nodelay ? _rx_rto >> 3 : 0; + + // flush data segments + var lost = false; + var change = false; + var segmentNode = _sndBuf.First; + while (segmentNode is not null && !TransportClosed) + { + var nextSegmentNode = segmentNode.Next; + + var needsend = false; + var stats = segmentNode.ValueRef.Stats; + + if (segmentNode.ValueRef.Stats.TransmitCount == 0) + { + needsend = true; + segmentNode.ValueRef.Stats = new KcpSendSegmentStats(current + segmentNode.ValueRef.Stats.Rto + rtomin, + _rx_rto, stats.FastAck, stats.TransmitCount + 1); + } + else if (TimeDiff(current, stats.ResendTimestamp) >= 0) + { + needsend = true; + var rto = stats.Rto; + if (!_nodelay) + { + rto += Math.Max(stats.Rto, _rx_rto); + } + else + { + var step = rto; //_nodelay < 2 ? segment.rto : _rx_rto; + rto += step / 2; + } + + segmentNode.ValueRef.Stats = + new KcpSendSegmentStats(current + rto, rto, stats.FastAck, stats.TransmitCount + 1); + lost = true; + } + else if (stats.FastAck > resent) + { + if (stats.TransmitCount <= _fastlimit || _fastlimit == 0) + { + needsend = true; + segmentNode.ValueRef.Stats = + new KcpSendSegmentStats(current, stats.Rto, 0, stats.TransmitCount + 1); + change = true; + } + } + + if (needsend) + { + var header = DeplicateHeader(ref segmentNode.ValueRef.Segment, current, windowSize, unacknowledged); + + var need = packetHeaderSize + segmentNode.ValueRef.Data.Length; + if (size + need > sizeLimitBeforePostBuffer) + { + buffer.Span.Slice(size, postBufferSize).Clear(); + await _transport + .SendPacketAsync(buffer.Slice(0, size + postBufferSize), _remoteEndPoint, cancellationToken) + .ConfigureAwait(false); + _lastSendTick = GetTimestamp(); + size = preBufferSize; + buffer.Span.Slice(0, size).Clear(); + anyPacketSent = true; + } + + lock (segmentNode) + { + var data = segmentNode.ValueRef.Data; + if (!TransportClosed) + { + header.EncodeHeader(_id, data.Length, buffer.Span.Slice(size), out var bytesWritten); + + size += bytesWritten; + + if (data.Length > 0) + { + data.DataRegion.CopyTo(buffer.Slice(size)); + size += data.Length; + } + } + } + } + + segmentNode = nextSegmentNode; + } + + _ackList.Clear(); + + // probe window size (if remote window size equals zero) + if (_rmt_wnd == 0) + { + if (_probe_wait == 0) + { + _probe_wait = IKCP_PROBE_INIT; + _ts_probe = current + _probe_wait; + } + else + { + if (TimeDiff(current, _ts_probe) >= 0) + { + if (_probe_wait < IKCP_PROBE_INIT) _probe_wait = IKCP_PROBE_INIT; + _probe_wait += _probe_wait / 2; + if (_probe_wait > IKCP_PROBE_LIMIT) _probe_wait = IKCP_PROBE_LIMIT; + _ts_probe = current + _probe_wait; + _probe |= KcpProbeType.AskSend; + } + } + } + else + { + _ts_probe = 0; + _probe_wait = 0; + } + + // flush window probing command + if ((_probe & KcpProbeType.AskSend) != 0) + { + if (size + packetHeaderSize > sizeLimitBeforePostBuffer) + { + buffer.Span.Slice(size, postBufferSize).Clear(); + await _transport + .SendPacketAsync(buffer.Slice(0, size + postBufferSize), _remoteEndPoint, cancellationToken) + .ConfigureAwait(false); + _lastSendTick = GetTimestamp(); + size = preBufferSize; + buffer.Span.Slice(0, size).Clear(); + anyPacketSent = true; + } + + KcpPacketHeader header = new(KcpCommand.WindowProbe, 0, windowSize, 0, 0, unacknowledged); + header.EncodeHeader(_id, 0, buffer.Span.Slice(size), out var bytesWritten); + size += bytesWritten; + } + + // flush window probing response + if (!anyPacketSent && ShouldSendWindowSize(current)) + { + if (size + packetHeaderSize > sizeLimitBeforePostBuffer) + { + buffer.Span.Slice(size, postBufferSize).Clear(); + await _transport + .SendPacketAsync(buffer.Slice(0, size + postBufferSize), _remoteEndPoint, cancellationToken) + .ConfigureAwait(false); + _lastSendTick = GetTimestamp(); + size = preBufferSize; + buffer.Span.Slice(0, size).Clear(); + } + + KcpPacketHeader header = new(KcpCommand.WindowSize, 0, windowSize, 0, 0, unacknowledged); + header.EncodeHeader(_id, 0, buffer.Span.Slice(size), out var bytesWritten); + size += bytesWritten; + } + + _probe = KcpProbeType.None; + + // flush remaining segments + if (size > preBufferSize) + { + buffer.Span.Slice(size, postBufferSize).Clear(); + try + { + await _transport + .SendPacketAsync(buffer.Slice(0, size + postBufferSize), _remoteEndPoint, cancellationToken) + .ConfigureAwait(false); + } + catch (Exception ex) + { + new Logger("KcpServer").Error("transport send error", ex); + } + + _lastSendTick = GetTimestamp(); + } + + // update window + var lockTaken = false; + try + { + _cwndUpdateLock.Enter(ref lockTaken); + + var updatedCwnd = _cwnd; + var incr = _incr; + + // update sshthresh + if (change) + { + var inflight = _snd_nxt - _snd_una; + _ssthresh = Math.Max(inflight / 2, IKCP_THRESH_MIN); + updatedCwnd = _ssthresh + resent; + incr = updatedCwnd * (uint)_mss; + } + + if (lost) + { + _ssthresh = Math.Max(cwnd / 2, IKCP_THRESH_MIN); + updatedCwnd = 1; + incr = (uint)_mss; + } + + if (updatedCwnd < 1) + { + updatedCwnd = 1; + incr = (uint)_mss; + } + + _cwnd = updatedCwnd; + _incr = incr; + } + finally + { + if (lockTaken) _cwndUpdateLock.Exit(); + } + + // send keep-alive + if (_keepAliveEnabled) + if (TimeDiff(GetTimestamp(), _lastSendTick) > _keepAliveInterval) + { + KcpPacketHeader header = new(KcpCommand.WindowSize, 0, windowSize, 0, 0, unacknowledged); + header.EncodeHeader(_id, 0, buffer.Span, out var bytesWritten); + await _transport.SendPacketAsync(buffer.Slice(0, bytesWritten), _remoteEndPoint, cancellationToken) + .ConfigureAwait(false); + _lastSendTick = GetTimestamp(); + } + } + + private bool ShouldSendWindowSize(uint current) + { + if ((_probe & KcpProbeType.AskTell) != 0) return true; + + var options = _receiveWindowNotificationOptions; + if (options is null) return false; + + if (TimeDiff(current, _ts_rcv_notify) < 0) return false; + + var inital = (uint)options.InitialInterval; + var maximum = (uint)options.MaximumInterval; + if (_ts_rcv_notify_wait < inital) + _ts_rcv_notify_wait = inital; + else if (_ts_rcv_notify_wait >= maximum) + _ts_rcv_notify_wait = maximum; + else + _ts_rcv_notify_wait = Math.Min(maximum, _ts_rcv_notify_wait + _ts_rcv_notify_wait / 2); + _ts_rcv_notify = current + _ts_rcv_notify_wait; + + return true; + } + + private LinkedListNodeOfBufferItem CreateSendBufferItem(in KcpBuffer data, byte fragment, uint current, + ushort windowSize, uint serialNumber, uint unacknowledged, uint rto) + { + KcpSendReceiveBufferItem newseg = new() + { + Data = data, + Segment = new KcpPacketHeader(KcpCommand.Push, fragment, windowSize, current, serialNumber, unacknowledged), + Stats = new KcpSendSegmentStats(current, rto, 0, 0) + }; + return _cache.Allocate(in newseg); + } + + private static KcpPacketHeader DeplicateHeader(ref KcpPacketHeader header, uint timestamp, ushort windowSize, + uint unacknowledged) + { + return new KcpPacketHeader(header.Command, header.Fragment, windowSize, timestamp, header.SerialNumber, + unacknowledged); + } + + private uint GetUnusedReceiveWindow() + { + var count = (uint)_receiveQueue.GetQueueSize(); + if (count < _rcv_wnd) return _rcv_wnd - count; + return 0; + } + + private async void RunUpdateOnActivation() + { + var cancellationToken = _updateLoopCts?.Token ?? new CancellationToken(true); + var activation = _updateActivation; + if (activation is null) return; + + while (!cancellationToken.IsCancellationRequested) + { + var update = false; + using (var notification = await activation.WaitAsync(CancellationToken.None).ConfigureAwait(false)) + { + if (TransportClosed) break; + + var packet = notification.Packet; + if (!packet.IsEmpty) + try + { + update = SetInput(packet.Span); + } + catch (Exception ex) + { + new Logger("KcpServer").Error("Update error", ex); + } + + if (TransportClosed) break; + + update |= notification.TimerNotification; + } + + try + { + if (update) await UpdateCoreAsync(cancellationToken).ConfigureAwait(false); + } + catch (OperationCanceledException) + { + break; + } + catch (Exception ex) + { + if (!HandleFlushException(ex)) break; + } + + if (_keepAliveEnabled && TimeDiff(GetTimestamp(), _lastReceiveTick) > _keepAliveGracePeriod) + SetTransportClosed(); + } + } + + private ValueTask UpdateCoreAsync(CancellationToken cancellationToken) + { + var current = GetTimestamp(); + long slap = TimeDiff(current, _ts_flush); + if (slap > 10000 || slap < -10000) + { + _ts_flush = current; + slap = 0; + } + + if (slap >= 0 || _nodelay) + { + _ts_flush += _interval; + if (TimeDiff(current, _ts_flush) >= 0) _ts_flush = current + _interval; + return FlushCoreAsync(cancellationToken); + } + + return default; + } + + private bool HandleFlushException(Exception ex) + { + var handler = _exceptionHandler; + var state = _exceptionHandlerState; + var result = false; + if (handler is not null) + try + { + result = handler.Invoke(ex, this, state); + } + catch + { + result = false; + } + + if (!result) SetTransportClosed(); + return result; + } + + /// + public ValueTask InputPakcetAsync(UdpReceiveResult packet, CancellationToken cancellationToken = default) + { + if (cancellationToken.IsCancellationRequested) return new ValueTask(Task.FromCanceled(cancellationToken)); + int packetHeaderSize = _id.HasValue + ? KcpGlobalVars.HEADER_LENGTH_WITH_CONVID + : KcpGlobalVars.HEADER_LENGTH_WITHOUT_CONVID; + if (packet.Buffer.Length < packetHeaderSize) return default; + + ReadOnlySpan packetSpan = packet.Buffer.AsSpan(); + if (_id.HasValue) + { + var conversationId = BinaryPrimitives.ReadUInt64BigEndian(packet.Buffer.AsSpan()); + if (conversationId != _id.GetValueOrDefault()) return default; + packetSpan = packetSpan.Slice(8); + } + + var length = BinaryPrimitives.ReadUInt32LittleEndian(packetSpan.Slice(16)); + if (length > (uint)(packetSpan.Length - 20)) // implicitly checked for (int)length < 0 + return default; + + var activation = _updateActivation; + if (activation is null) return default; + + return activation.InputPacketAsync(packet.Buffer.AsMemory(), cancellationToken); + } + + private bool SetInput(ReadOnlySpan packet) + { + var current = GetTimestamp(); + var packetHeaderSize = _id.HasValue ? 28 : 20; + + var prev_una = _snd_una; + uint maxack = 0, latest_ts = 0; + var flag = false; + var mutated = false; + + while (true) + { + if (packet.Length < packetHeaderSize) break; + + if (_id.HasValue) + { + if (BinaryPrimitives.ReadUInt64BigEndian(packet) != _id.GetValueOrDefault()) return mutated; + packet = packet.Slice(8); + } + + var header = KcpPacketHeader.Parse(packet); + var length = BinaryPrimitives.ReadInt32LittleEndian(packet.Slice(16)); + + packet = packet.Slice(20); + if ((uint)length > (uint)packet.Length) return mutated; + + if (header.Command != KcpCommand.Push && + header.Command != KcpCommand.Ack && + header.Command != KcpCommand.WindowProbe && + header.Command != KcpCommand.WindowSize) + return mutated; + + _lastReceiveTick = current; + _rmt_wnd = header.WindowSize; + mutated = HandleUnacknowledged(header.Unacknowledged) | mutated; + mutated = UpdateSendUnacknowledged() | mutated; + + if (header.Command == KcpCommand.Ack) + { + var rtt = TimeDiff(current, header.Timestamp); + if (rtt >= 0) UpdateRto(rtt); + mutated = HandleAck(header.SerialNumber) | mutated; + mutated = UpdateSendUnacknowledged() | mutated; + + if (!flag) + { + flag = true; + maxack = header.SerialNumber; + latest_ts = header.Timestamp; + } + else + { + if (TimeDiff(_snd_nxt, maxack) > 0) + { +#if !IKCP_FASTACK_CONSERVE + maxack = header.SerialNumber; + latest_ts = header.Timestamp; +#else + if (TimeDiff(header.Timestamp, latest_ts) > 0) { + maxack = header.SerialNumber; + latest_ts = header.Timestamp; + } +#endif + } + } + } + else if (header.Command == KcpCommand.Push) + { + if (TimeDiff(header.SerialNumber, _rcv_nxt + _rcv_wnd) < 0) + { + AckPush(header.SerialNumber, header.Timestamp); + if (TimeDiff(header.SerialNumber, _rcv_nxt) >= 0) + mutated = HandleData(header, packet.Slice(0, length)) | mutated; + + if (_receiveWindowNotificationOptions is not null) + if (_ts_rcv_notify_wait != 0) + { + _ts_rcv_notify_wait = 0; + _ts_rcv_notify = current + (uint)_receiveWindowNotificationOptions.InitialInterval; + } + } + } + else if (header.Command == KcpCommand.WindowProbe) + { + _probe |= KcpProbeType.AskTell; + } + else if (header.Command == KcpCommand.WindowSize) + { + // do nothing + } + else + { + return mutated; + } + + packet = packet.Slice(length); + } + + if (flag) HandleFastAck(maxack, latest_ts); + + if (TimeDiff(_snd_una, prev_una) > 0) + { + var lockTaken = false; + try + { + _cwndUpdateLock.Enter(ref lockTaken); + + var cwnd = _cwnd; + var incr = _incr; + + if (cwnd < _rmt_wnd) + { + var mss = (uint)_mss; + if (cwnd < _ssthresh) + { + cwnd++; + incr += mss; + } + else + { + if (incr < mss) incr = mss; + incr += mss * mss / incr + mss / 16; + cwnd = (incr + mss - 1) / (mss > 0 ? mss : 1); + } + + if (cwnd > _rmt_wnd) + { + cwnd = _rmt_wnd; + incr = _rmt_wnd * mss; + } + } + + _cwnd = cwnd; + _incr = incr; + } + finally + { + if (lockTaken) _cwndUpdateLock.Exit(); + } + } + + return mutated; + } + + private bool HandleUnacknowledged(uint una) + { + var mutated = false; + lock (_sndBuf) + { + var node = _sndBuf.First; + while (node is not null) + { + var next = node.Next; + + if (TimeDiff(una, node.ValueRef.Segment.SerialNumber) > 0) + { + _sndBuf.Remove(node); + ref var dataRef = ref node.ValueRef.Data; + _sendQueue.SubtractUnflushedBytes(dataRef.Length); + dataRef.Release(); + dataRef = default; + _cache.Return(node); + mutated = true; + } + else + { + break; + } + + node = next; + } + } + + return mutated; + } + + private bool UpdateSendUnacknowledged() + { + lock (_sndBuf) + { + var first = _sndBuf.First; + var snd_una = first is null ? _snd_nxt : first.ValueRef.Segment.SerialNumber; + var old_snd_una = (uint)Interlocked.Exchange(ref Unsafe.As(ref _snd_una), (int)snd_una); + return snd_una != old_snd_una; + } + } + + private void UpdateRto(int rtt) + { + if (_rx_srtt == 0) + { + _rx_srtt = rtt; + _rx_rttval = rtt / 2; + } + else + { + var delta = rtt - _rx_srtt; + if (delta < 0) delta = -delta; + _rx_rttval = (3 * _rx_rttval + delta) / 4; + _rx_srtt = (7 * _rx_srtt + rtt) / 8; + if (_rx_srtt < 1) _rx_srtt = 1; + } + + var rto = _rx_srtt + Math.Max((int)_interval, 4 * _rx_rttval); +#if NEED_MATH_SHIM + _rx_rto = Math.Min(Math.Max((uint)rto, _rx_minrto), IKCP_RTO_MAX); +#else + _rx_rto = Math.Clamp((uint)rto, _rx_minrto, IKCP_RTO_MAX); +#endif + } + + private bool HandleAck(uint serialNumber) + { + if (TimeDiff(serialNumber, _snd_una) < 0 || TimeDiff(serialNumber, _snd_nxt) >= 0) return false; + + lock (_sndBuf) + { + var node = _sndBuf.First; + while (node is not null) + { + var next = node.Next; + + if (serialNumber == node.ValueRef.Segment.SerialNumber) + { + _sndBuf.Remove(node); + ref var dataRef = ref node.ValueRef.Data; + _sendQueue.SubtractUnflushedBytes(dataRef.Length); + dataRef.Release(); + dataRef = default; + _cache.Return(node); + return true; + } + + if (TimeDiff(serialNumber, node.ValueRef.Segment.SerialNumber) < 0) return false; + + node = next; + } + } + + return false; + } + + private bool HandleData(KcpPacketHeader header, ReadOnlySpan data) + { + var serialNumber = header.SerialNumber; + if (TimeDiff(serialNumber, _rcv_nxt + _rcv_wnd) >= 0 || TimeDiff(serialNumber, _rcv_nxt) < 0) return false; + + var mutated = false; + var repeat = false; + LinkedListNodeOfBufferItem? node; + lock (_rcvBuf) + { + if (TransportClosed) return false; + node = _rcvBuf.Last; + while (node is not null) + { + var nodeSerialNumber = node.ValueRef.Segment.SerialNumber; + if (serialNumber == nodeSerialNumber) + { + repeat = true; + break; + } + + if (TimeDiff(serialNumber, nodeSerialNumber) > 0) break; + + node = node.Previous; + } + + if (!repeat) + { + var buffer = _bufferPool.Rent(new KcpBufferPoolRentOptions(data.Length, false)); + KcpSendReceiveBufferItem item = new() + { + Data = KcpBuffer.CreateFromSpan(buffer, data), + Segment = header + }; + if (node is null) + _rcvBuf.AddFirst(_cache.Allocate(in item)); + else + _rcvBuf.AddAfter(node, _cache.Allocate(in item)); + mutated = true; + } + + // move available data from rcv_buf -> rcv_queue + node = _rcvBuf.First; + while (node is not null) + { + var next = node.Next; + + if (node.ValueRef.Segment.SerialNumber == _rcv_nxt && _receiveQueue.GetQueueSize() < _rcv_wnd) + { + _rcvBuf.Remove(node); + _receiveQueue.Enqueue(node.ValueRef.Data, node.ValueRef.Segment.Fragment); + node.ValueRef.Data = default; + _cache.Return(node); + _rcv_nxt++; + mutated = true; + } + else + { + break; + } + + node = next; + } + } + + return mutated; + } + + private void AckPush(uint serialNumber, uint timestamp) + { + _ackList.Add(serialNumber, timestamp); + } + + private void HandleFastAck(uint serialNumber, uint timestamp) + { + if (TimeDiff(serialNumber, _snd_una) < 0 || TimeDiff(serialNumber, _snd_nxt) >= 0) return; + + lock (_sndBuf) + { + var node = _sndBuf.First; + while (node is not null) + { + var next = node.Next; + if (TimeDiff(serialNumber, node.ValueRef.Segment.SerialNumber) < 0) break; + + if (serialNumber != node.ValueRef.Segment.SerialNumber) + { + ref var stats = ref node.ValueRef.Stats; +#if !IKCP_FASTACK_CONSERVE + stats = new KcpSendSegmentStats(stats.ResendTimestamp, stats.Rto, stats.FastAck + 1, + stats.TransmitCount); +#else + if (TimeDiff(timestamp, node.ValueRef.Segment.Timestamp) >= 0) + { + stats = + new KcpSendSegmentStats(stats.ResendTimestamp, stats.Rto, stats.FastAck + 1, stats.TransmitCount); + } +#endif + } + + node = next; + } + } + } + + private static uint GetTimestamp() + { + return (uint)Environment.TickCount; + } + + private static int TimeDiff(uint later, uint earlier) + { + return (int)(later - earlier); + } + + /// + /// Get the size of the next available message in the receive queue. + /// + /// The transport state and the size of the next available message. + /// The receive or peek operation is initiated concurrently. + /// + /// True if the receive queue contains at least one message. False if the receive queue is empty or the transport + /// is closed. + /// + public bool TryPeek(out KcpConversationReceiveResult result) + { + return _receiveQueue.TryPeek(out result); + } + + /// + /// Remove the next available message in the receive queue and copy its content into . When + /// in stream mode, move as many bytes as possible into . + /// + /// The buffer to receive message. + /// The transport state and the count of bytes moved into . + /// + /// The size of the next available message is larger than the size of + /// . This exception is never thrown in stream mode. + /// + /// The receive or peek operation is initiated concurrently. + /// + /// True if the next available message is moved into . False if the receive queue is + /// empty or the transport is closed. + /// + public bool TryReceive(Span buffer, out KcpConversationReceiveResult result) + { + return _receiveQueue.TryReceive(buffer, out result); + } + + /// + /// Wait until the receive queue contains at least one full message, or at least one byte in stream mode. + /// + /// The token to cancel this operation. + /// + /// The is fired before receive + /// operation is completed. + /// + /// The receive or peek operation is initiated concurrently. + /// + /// A that completes when the receive queue contains at + /// least one full message, or at least one byte in stream mode. Its result contains the transport state and the size + /// of the available message. + /// + public ValueTask WaitToReceiveAsync(CancellationToken cancellationToken = default) + { + return _receiveQueue.WaitToReceiveAsync(cancellationToken); + } + + /// + /// Wait until the receive queue contains at leat bytes. + /// + /// The minimum bytes in the receive queue. + /// The token to cancel this operation. + /// is a negative integer. + /// + /// The is fired before receive + /// operation is completed. + /// + /// The receive or peek operation is initiated concurrently. + /// + /// A that completes when the receive queue contains at least + /// bytes. The result of the task is false when the transport is closed. + /// + public ValueTask WaitForReceiveQueueAvailableDataAsync(int minimumBytes, + CancellationToken cancellationToken = default) + { + return _receiveQueue.WaitForAvailableDataAsync(minimumBytes, 0, cancellationToken); + } + + /// + /// Wait until the receive queue contains at leat bytes, and also + /// segments. + /// + /// The minimum bytes in the receive queue. + /// The minimum segments in the receive queue + /// The token to cancel this operation. + /// + /// Any od and + /// is a negative integer. + /// + /// + /// The is fired before receive + /// operation is completed. + /// + /// The receive or peek operation is initiated concurrently. + /// + /// A that completes when the receive queue contains at least + /// bytes. The result of the task is false when the transport is closed. + /// + public ValueTask WaitForReceiveQueueAvailableDataAsync(int minimumBytes, int minimumSegments, + CancellationToken cancellationToken = default) + { + return _receiveQueue.WaitForAvailableDataAsync(minimumBytes, minimumSegments, cancellationToken); + } + + /// + /// Wait for the next full message to arrive if the receive queue is empty. Remove the next available message in the + /// receive queue and copy its content into . When in stream mode, move as many bytes as + /// possible into . + /// + /// The buffer to receive message. + /// The token to cancel this operation. + /// + /// The size of the next available message is larger than the size of + /// . This exception is never thrown in stream mode. + /// + /// + /// The is fired before send operation + /// is completed. + /// + /// The receive or peek operation is initiated concurrently. + /// + /// A that completes when a full message is moved into + /// or the transport is closed. Its result contains the transport state and the count of + /// bytes written into . + /// + public ValueTask ReceiveAsync(Memory buffer, + CancellationToken cancellationToken = default) + { + return _receiveQueue.ReceiveAsync(buffer, cancellationToken); + } + + internal ValueTask ReadAsync(Memory buffer, CancellationToken cancellationToken) + { + return _receiveQueue.ReadAsync(buffer, cancellationToken); + } + + /// + /// Cancel the current receive operation. + /// + /// True if the current operation is canceled. False if there is no active send operation. + public bool CancelPendingReceive() + { + return _receiveQueue.CancelPendingOperation(null, default); + } + + /// + /// Cancel the current receive operation. + /// + /// + /// The inner exception of the thrown by the + /// method or + /// method. + /// + /// + /// The in the + /// thrown by the method or + /// method. + /// + /// True if the current operation is canceled. False if there is no active send operation. + public bool CancelPendingReceive(Exception? innerException, CancellationToken cancellationToken) + { + return _receiveQueue.CancelPendingOperation(innerException, cancellationToken); + } + + /// + public void SetTransportClosed() + { + TransportClosed = true; + Interlocked.Exchange(ref _updateActivation, null)?.Dispose(); + var updateLoopCts = Interlocked.Exchange(ref _updateLoopCts, null); + if (updateLoopCts is not null) + { + updateLoopCts.Cancel(); + updateLoopCts.Dispose(); + } + + _sendQueue.SetTransportClosed(); + _receiveQueue.SetTransportClosed(); + lock (_sndBuf) + { + var node = _sndBuf.First; + var next = node?.Next; + while (node is not null) + { + lock (node) + { + node.ValueRef.Data.Release(); + node.ValueRef = default; + } + + _sndBuf.Remove(node); + node = next; + next = node?.Next; + } + } + + lock (_rcvBuf) + { + var node = _rcvBuf.First; + while (node is not null) + { + node.ValueRef.Data.Release(); + node = node.Next; + } + + _rcvBuf.Clear(); + } + + _queueItemCache.Clear(); + } + + /// + public void Dispose() + { + var disposed = _disposed; + _disposed = true; + SetTransportClosed(); + if (!disposed) + { + _sendQueue.Dispose(); + _receiveQueue.Dispose(); + } + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpConversationOptions.cs b/KcpSharp/Base/KcpConversationOptions.cs new file mode 100644 index 0000000..f3d042c --- /dev/null +++ b/KcpSharp/Base/KcpConversationOptions.cs @@ -0,0 +1,98 @@ +namespace KianaBH.KcpSharp.Base; + +/// +/// Options used to control the behaviors of . +/// +public class KcpConversationOptions +{ + internal const int MtuDefaultValue = 1400; + internal const uint SendWindowDefaultValue = 32; + internal const uint ReceiveWindowDefaultValue = 128; + internal const uint RemoteReceiveWindowDefaultValue = 128; + internal const uint UpdateIntervalDefaultValue = 100; + + internal const int SendQueueSizeDefaultValue = 32; + internal const int ReceiveQueueSizeDefaultValue = 32; + + /// + /// The buffer pool to rent buffer from. + /// + public IKcpBufferPool? BufferPool { get; set; } + + /// + /// The maximum packet size that can be transmitted over the underlying transport. + /// + public int Mtu { get; set; } = 1400; + + /// + /// The number of packets in the send window. + /// + public int SendWindow { get; set; } = 32; + + /// + /// The number of packets in the receive window. + /// + public int ReceiveWindow { get; set; } = 128; + + /// + /// The nuber of packets in the receive window of the remote host. + /// + public int RemoteReceiveWindow { get; set; } = 128; + + /// + /// The interval in milliseconds to update the internal state of . + /// + public int UpdateInterval { get; set; } = 100; + + /// + /// Wether no-delay mode is enabled. + /// + public bool NoDelay { get; set; } + + /// + /// The number of ACK packet skipped before a resend is triggered. + /// + public int FastResend { get; set; } + + /// + /// Whether congestion control is disabled. + /// + public bool DisableCongestionControl { get; set; } + + /// + /// Whether stream mode is enabled. + /// + public bool StreamMode { get; set; } + + /// + /// The number of packets in the send queue. + /// + public int SendQueueSize { get; set; } + + /// + /// The number of packets in the receive queue. + /// + public int ReceiveQueueSize { get; set; } + + /// + /// The number of bytes to reserve at the start of buffer passed into the underlying transport. The transport should + /// fill this reserved space. + /// + public int PreBufferSize { get; set; } + + /// + /// The number of bytes to reserve at the end of buffer passed into the underlying transport. The transport should fill + /// this reserved space. + /// + public int PostBufferSize { get; set; } + + /// + /// Options for customized keep-alive functionality. + /// + public KcpKeepAliveOptions? KeepAliveOptions { get; set; } + + /// + /// Options for receive window size notification functionality. + /// + public KcpReceiveWindowNotificationOptions? ReceiveWindowNotificationOptions { get; set; } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpConversationReceiveResult.cs b/KcpSharp/Base/KcpConversationReceiveResult.cs new file mode 100644 index 0000000..7e71b12 --- /dev/null +++ b/KcpSharp/Base/KcpConversationReceiveResult.cs @@ -0,0 +1,77 @@ +using System.Globalization; + +namespace KianaBH.KcpSharp.Base; + +/// +/// The result of a receive or peek operation. +/// +public readonly struct KcpConversationReceiveResult : IEquatable +{ + private readonly bool _connectionAlive; + + /// + /// The number of bytes received. + /// + public int BytesReceived { get; } + + /// + /// Whether the underlying transport is marked as closed. + /// + public bool TransportClosed => !_connectionAlive; + + /// + /// Construct a with the specified number of bytes received. + /// + /// The number of bytes received. + public KcpConversationReceiveResult(int bytesReceived) + { + BytesReceived = bytesReceived; + _connectionAlive = true; + } + + /// + /// Checks whether the two instance is equal. + /// + /// The one instance. + /// The other instance. + /// Whether the two instance is equal + public static bool operator ==(KcpConversationReceiveResult left, KcpConversationReceiveResult right) + { + return left.Equals(right); + } + + /// + /// Checks whether the two instance is not equal. + /// + /// The one instance. + /// The other instance. + /// Whether the two instance is not equal + public static bool operator !=(KcpConversationReceiveResult left, KcpConversationReceiveResult right) + { + return !left.Equals(right); + } + + /// + public bool Equals(KcpConversationReceiveResult other) + { + return BytesReceived == other.BytesReceived && TransportClosed == other.TransportClosed; + } + + /// + public override bool Equals(object? obj) + { + return obj is KcpConversationReceiveResult other && Equals(other); + } + + /// + public override int GetHashCode() + { + return HashCode.Combine(BytesReceived, TransportClosed); + } + + /// + public override string ToString() + { + return _connectionAlive ? BytesReceived.ToString(CultureInfo.InvariantCulture) : "Transport is closed."; + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpConversationUpdateActivation.cs b/KcpSharp/Base/KcpConversationUpdateActivation.cs new file mode 100644 index 0000000..f2f5c86 --- /dev/null +++ b/KcpSharp/Base/KcpConversationUpdateActivation.cs @@ -0,0 +1,474 @@ +using System.Diagnostics; +using System.Threading.Tasks.Sources; + +namespace KianaBH.KcpSharp.Base; + +internal sealed class KcpConversationUpdateActivation : IValueTaskSource, IDisposable +{ + private readonly Timer _timer; + + private readonly WaitList _waitList; + private bool _activeWait; + private CancellationTokenRegistration _cancellationRegistration; + private CancellationToken _cancellationToken; + + private bool _disposed; + private ManualResetValueTaskSourceCore _mrvtsc; + private bool _notificationPending; + private bool _signaled; + + public KcpConversationUpdateActivation(int interval) + { + _timer = new Timer(state => + { + var reference = (WeakReference?)state!; + if (reference.TryGetTarget(out var target)) target.Notify(); + }, new WeakReference(this), interval, interval); + _mrvtsc = new ManualResetValueTaskSourceCore + { RunContinuationsAsynchronously = true }; + _waitList = new WaitList(this); + } + + public void Dispose() + { + lock (this) + { + if (_disposed) return; + _disposed = true; + if (_activeWait && !_signaled) + { + _signaled = true; + _cancellationToken = default; + _mrvtsc.SetResult(default); + } + } + + _timer.Dispose(); + _waitList.Dispose(); + } + + ValueTaskSourceStatus IValueTaskSource.GetStatus(short token) + { + return _mrvtsc.GetStatus(token); + } + + void IValueTaskSource.OnCompleted(Action continuation, object? state, + short token, ValueTaskSourceOnCompletedFlags flags) + { + _mrvtsc.OnCompleted(continuation, state, token, flags); + } + + KcpConversationUpdateNotification IValueTaskSource.GetResult(short token) + { + _cancellationRegistration.Dispose(); + + try + { + return _mrvtsc.GetResult(token); + } + finally + { + _mrvtsc.Reset(); + + lock (this) + { + _signaled = false; + _activeWait = false; + _cancellationRegistration = default; + } + } + } + + public void Notify() + { + if (_disposed) return; + lock (this) + { + if (_disposed || _notificationPending) return; + if (_activeWait && !_signaled) + { + _signaled = true; + _cancellationToken = default; + _mrvtsc.SetResult(default); + } + else + { + _notificationPending = true; + } + } + } + + private void NotifyPacketReceived() + { + lock (this) + { + if (_disposed) return; + if (_activeWait && !_signaled) + if (_waitList.Occupy(out var notification)) + { + _signaled = true; + _cancellationToken = default; + var timerNotification = _notificationPending; + _notificationPending = false; + _mrvtsc.SetResult(notification.WithTimerNotification(timerNotification)); + } + } + } + + public ValueTask WaitAsync(CancellationToken cancellationToken) + { + short token; + lock (this) + { + if (_disposed) return default; + if (cancellationToken.IsCancellationRequested) + return new ValueTask( + Task.FromCanceled(cancellationToken)); + if (_activeWait) throw new InvalidOperationException(); + if (_waitList.Occupy(out var notification)) + { + var timerNotification = _notificationPending; + _notificationPending = false; + return new ValueTask( + notification.WithTimerNotification(timerNotification)); + } + + if (_notificationPending) + { + _notificationPending = false; + return default; + } + + _activeWait = true; + Debug.Assert(!_signaled); + _cancellationToken = cancellationToken; + token = _mrvtsc.Version; + } + + _cancellationRegistration = + cancellationToken.UnsafeRegister(state => ((KcpConversationUpdateActivation?)state)!.CancelWaiting(), this); + return new ValueTask(this, token); + } + + private void CancelWaiting() + { + lock (this) + { + if (_activeWait && !_signaled) + { + var cancellationToken = _cancellationToken; + _signaled = true; + _cancellationToken = default; + _mrvtsc.SetException(new OperationCanceledException(cancellationToken)); + } + } + } + + public ValueTask InputPacketAsync(ReadOnlyMemory packet, CancellationToken cancellationToken) + { + if (_disposed) return default; + return _waitList.InputPacketAsync(packet, cancellationToken); + } + + private class WaitList : IValueTaskSource, IKcpConversationUpdateNotificationSource, IDisposable + { + private readonly KcpConversationUpdateActivation _parent; + + private bool _available; // activeWait + private CancellationTokenRegistration _cancellationRegistration; + private CancellationToken _cancellationToken; + private bool _disposed; + private LinkedList? _list; + private ManualResetValueTaskSourceCore _mrvtsc; + private bool _occupied; + + private ReadOnlyMemory _packet; + private bool _signaled; + + public WaitList(KcpConversationUpdateActivation parent) + { + _parent = parent; + _mrvtsc = new ManualResetValueTaskSourceCore { RunContinuationsAsynchronously = true }; + } + + public void Dispose() + { + if (_disposed) return; + lock (this) + { + _disposed = true; + if (_available && !_occupied && !_signaled) + { + _signaled = true; + _packet = default; + _cancellationToken = default; + _mrvtsc.SetResult(false); + } + + var list = _list; + if (list is not null) + { + _list = null; + + var node = list.First; + var next = node?.Next; + while (node is not null) + { + node.Value.Release(); + + list.Remove(node); + node = next; + next = node?.Next; + } + } + } + } + + public ReadOnlyMemory Packet + { + get + { + lock (this) + { + if (_available && _occupied && !_signaled) return _packet; + } + + return default; + } + } + + public void Release() + { + lock (this) + { + if (_available && _occupied && !_signaled) + { + _signaled = true; + _packet = default; + _cancellationToken = default; + _mrvtsc.SetResult(true); + } + } + } + + ValueTaskSourceStatus IValueTaskSource.GetStatus(short token) + { + return _mrvtsc.GetStatus(token); + } + + void IValueTaskSource.OnCompleted(Action continuation, object? state, short token, + ValueTaskSourceOnCompletedFlags flags) + { + _mrvtsc.OnCompleted(continuation, state, token, flags); + } + + void IValueTaskSource.GetResult(short token) + { + _cancellationRegistration.Dispose(); + + try + { + _mrvtsc.GetResult(token); + } + finally + { + _mrvtsc.Reset(); + + lock (this) + { + _available = false; + _occupied = false; + _signaled = false; + _cancellationRegistration = default; + } + } + } + + public ValueTask InputPacketAsync(ReadOnlyMemory packet, CancellationToken cancellationToken) + { + WaitItem? waitItem = null; + short token = 0; + lock (this) + { + if (_disposed) return default; + if (cancellationToken.IsCancellationRequested) + return new ValueTask(Task.FromCanceled(cancellationToken)); + if (_available) + { + waitItem = new WaitItem(this, packet, cancellationToken); + _list ??= new LinkedList(); + _list.AddLast(waitItem.Node); + } + else + { + token = _mrvtsc.Version; + + _available = true; + Debug.Assert(!_occupied); + Debug.Assert(!_signaled); + _packet = packet; + _cancellationToken = cancellationToken; + } + } + + ValueTask task; + + if (waitItem is null) + { + _cancellationRegistration = + cancellationToken.UnsafeRegister(state => ((WaitList?)state)!.CancelWaiting(), this); + task = new ValueTask(this, token); + } + else + { + waitItem.RegisterCancellationToken(); + task = new ValueTask(waitItem.Task); + } + + _parent.NotifyPacketReceived(); + + return task; + } + + private void CancelWaiting() + { + lock (this) + { + if (_available && !_occupied && !_signaled) + { + _signaled = true; + var cancellationToken = _cancellationToken; + _packet = default; + _cancellationToken = default; + _mrvtsc.SetException(new OperationCanceledException(cancellationToken)); + } + } + } + + public bool Occupy(out KcpConversationUpdateNotification notification) + { + lock (this) + { + if (_disposed) + { + notification = default; + return false; + } + + if (_available && !_occupied && !_signaled) + { + _occupied = true; + notification = new KcpConversationUpdateNotification(this, true); + return true; + } + + if (_list is null) + { + notification = default; + return false; + } + + var node = _list.First; + if (node is not null) + { + _list.Remove(node); + notification = new KcpConversationUpdateNotification(node.Value, true); + return true; + } + } + + notification = default; + return false; + } + + internal bool TryRemove(WaitItem item) + { + lock (this) + { + var list = _list; + if (list is null) return false; + var node = item.Node; + if (node.Previous is null && node.Next is null) return false; + list.Remove(node); + return true; + } + } + } + + private class WaitItem : TaskCompletionSource, IKcpConversationUpdateNotificationSource + { + private readonly WaitList _parent; + private CancellationTokenRegistration _cancellationRegistration; + private CancellationToken _cancellationToken; + private ReadOnlyMemory _packet; + private bool _released; + + public WaitItem(WaitList parent, ReadOnlyMemory packet, CancellationToken cancellationToken) + { + _parent = parent; + _packet = packet; + _cancellationToken = cancellationToken; + + Node = new LinkedListNode(this); + } + + public LinkedListNode Node { get; } + + public ReadOnlyMemory Packet + { + get + { + lock (this) + { + if (!_released) return _packet; + } + + return default; + } + } + + public void Release() + { + CancellationTokenRegistration cancellationRegistration; + lock (this) + { + _released = true; + cancellationRegistration = _cancellationRegistration; + _packet = default; + _cancellationToken = default; + _cancellationRegistration = default; + } + + TrySetResult(); + cancellationRegistration.Dispose(); + } + + public void RegisterCancellationToken() + { + _cancellationRegistration = + _cancellationToken.UnsafeRegister(state => ((WaitItem?)state)!.CancelWaiting(), this); + } + + private void CancelWaiting() + { + CancellationTokenRegistration cancellationRegistration; + if (_parent.TryRemove(this)) + { + CancellationToken cancellationToken; + lock (this) + { + _released = true; + cancellationToken = _cancellationToken; + cancellationRegistration = _cancellationRegistration; + _packet = default; + _cancellationToken = default; + _cancellationRegistration = default; + } + + TrySetCanceled(cancellationToken); + } + + _cancellationRegistration.Dispose(); + } + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpConversationUpdateNotification.cs b/KcpSharp/Base/KcpConversationUpdateNotification.cs new file mode 100644 index 0000000..72050e8 --- /dev/null +++ b/KcpSharp/Base/KcpConversationUpdateNotification.cs @@ -0,0 +1,27 @@ +namespace KianaBH.KcpSharp.Base; + +internal readonly struct KcpConversationUpdateNotification : IDisposable +{ + private readonly IKcpConversationUpdateNotificationSource? _source; + private readonly bool _skipTimerNotification; + + public ReadOnlyMemory Packet => _source?.Packet ?? default; + public bool TimerNotification => !_skipTimerNotification; + + public KcpConversationUpdateNotification(IKcpConversationUpdateNotificationSource? source, + bool skipTimerNotification) + { + _source = source; + _skipTimerNotification = skipTimerNotification; + } + + public KcpConversationUpdateNotification WithTimerNotification(bool timerNotification) + { + return new KcpConversationUpdateNotification(_source, !_skipTimerNotification | timerNotification); + } + + public void Dispose() + { + if (_source is not null) _source.Release(); + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpExceptionProducerExtensions.cs b/KcpSharp/Base/KcpExceptionProducerExtensions.cs new file mode 100644 index 0000000..6ea1da1 --- /dev/null +++ b/KcpSharp/Base/KcpExceptionProducerExtensions.cs @@ -0,0 +1,106 @@ +namespace KianaBH.KcpSharp.Base; + +/// +/// Helper methods for . +/// +public static class KcpExceptionProducerExtensions +{ + /// + /// Set the handler to invoke when exception is thrown. Return true in the handler to ignore the error and continue + /// running. Return false in the handler to abort the operation. + /// + /// The producer instance. + /// The exception handler. + public static void SetExceptionHandler(this IKcpExceptionProducer producer, Func handler) + { + if (producer is null) throw new ArgumentNullException(nameof(producer)); + if (handler is null) throw new ArgumentNullException(nameof(handler)); + + producer.SetExceptionHandler( + (ex, conv, state) => ((Func?)state)!.Invoke(ex, conv), + handler + ); + } + + /// + /// Set the handler to invoke when exception is thrown. Return true in the handler to ignore the error and continue + /// running. Return false in the handler to abort the operation. + /// + /// The producer instance. + /// The exception handler. + public static void SetExceptionHandler(this IKcpExceptionProducer producer, Func handler) + { + if (producer is null) throw new ArgumentNullException(nameof(producer)); + if (handler is null) throw new ArgumentNullException(nameof(handler)); + + producer.SetExceptionHandler( + (ex, conv, state) => ((Func?)state)!.Invoke(ex), + handler + ); + } + + /// + /// Set the handler to invoke when exception is thrown. + /// + /// The producer instance. + /// The exception handler. + /// The state object to pass into the exception handler. + public static void SetExceptionHandler(this IKcpExceptionProducer producer, + Action handler, object? state) + { + if (producer is null) throw new ArgumentNullException(nameof(producer)); + if (handler is null) throw new ArgumentNullException(nameof(handler)); + + producer.SetExceptionHandler( + (ex, conv, state) => + { + var tuple = (Tuple, object?>)state!; + tuple.Item1.Invoke(ex, conv, tuple.Item2); + return false; + }, + Tuple.Create(handler, state) + ); + } + + /// + /// Set the handler to invoke when exception is thrown. + /// + /// The producer instance. + /// The exception handler. + public static void SetExceptionHandler(this IKcpExceptionProducer producer, Action handler) + { + if (producer is null) throw new ArgumentNullException(nameof(producer)); + if (handler is null) throw new ArgumentNullException(nameof(handler)); + + producer.SetExceptionHandler( + (ex, conv, state) => + { + var handler = (Action)state!; + handler.Invoke(ex, conv); + return false; + }, + handler + ); + } + + /// + /// Set the handler to invoke when exception is thrown. + /// + /// The producer instance. + /// The exception handler. + public static void SetExceptionHandler(this IKcpExceptionProducer producer, Action handler) + { + if (producer is null) throw new ArgumentNullException(nameof(producer)); + if (handler is null) throw new ArgumentNullException(nameof(handler)); + + producer.SetExceptionHandler( + (ex, conv, state) => + { + var handler = (Action)state!; + handler.Invoke(ex); + return false; + }, + handler + ); + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpGlobalVars.cs b/KcpSharp/Base/KcpGlobalVars.cs new file mode 100644 index 0000000..1aa1211 --- /dev/null +++ b/KcpSharp/Base/KcpGlobalVars.cs @@ -0,0 +1,13 @@ +namespace KianaBH.KcpSharp.Base; + +internal static class KcpGlobalVars +{ +#if !CONVID32 + public const ushort CONVID_LENGTH = 8; + public const ushort HEADER_LENGTH_WITH_CONVID = 28; + public const ushort HEADER_LENGTH_WITHOUT_CONVID = 20; +#else + public const ushort HEADER_LENGTH_WITH_CONVID = 24; + public const ushort HEADER_LENGTH_WITHOUT_CONVID = 20; +#endif +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpKeepAliveOptions.cs b/KcpSharp/Base/KcpKeepAliveOptions.cs new file mode 100644 index 0000000..a4c01a8 --- /dev/null +++ b/KcpSharp/Base/KcpKeepAliveOptions.cs @@ -0,0 +1,26 @@ +namespace KianaBH.KcpSharp.Base; + +/// +/// Options for customized keep-alive functionality. +/// +public sealed class KcpKeepAliveOptions +{ + /// + /// Create an instance of option object for customized keep-alive functionality. + /// + /// The minimum interval in milliseconds between sending keep-alive messages. + /// + /// When no packets are received during this period (in milliseconds), the transport is + /// considered to be closed. + /// + public KcpKeepAliveOptions(int sendInterval, int gracePeriod) + { + if (sendInterval <= 0) throw new ArgumentOutOfRangeException(nameof(sendInterval)); + if (gracePeriod <= 0) throw new ArgumentOutOfRangeException(nameof(gracePeriod)); + SendInterval = sendInterval; + GracePeriod = gracePeriod; + } + + internal int SendInterval { get; } + internal int GracePeriod { get; } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpMultiplexConnection.cs b/KcpSharp/Base/KcpMultiplexConnection.cs new file mode 100644 index 0000000..66484a9 --- /dev/null +++ b/KcpSharp/Base/KcpMultiplexConnection.cs @@ -0,0 +1,281 @@ +using System.Buffers.Binary; +using System.Collections.Concurrent; +using System.Net; +using System.Net.Sockets; + +namespace KianaBH.KcpSharp.Base; + +/// +/// Multiplex many channels or conversations over the same transport. +/// +/// The state of the channel. +public sealed class KcpMultiplexConnection : IKcpTransport, IKcpConversation, IKcpMultiplexConnection +{ + private readonly ConcurrentDictionary _conversations = new(); + + private readonly Action? _disposeAction; + private readonly IKcpTransport _transport; + private bool _disposed; + private bool _transportClosed; + + /// + /// Construct a multiplexed connection over a transport. + /// + /// The underlying transport. + public KcpMultiplexConnection(IKcpTransport transport) + { + _transport = transport ?? throw new ArgumentNullException(nameof(transport)); + _disposeAction = null; + } + + /// + /// Construct a multiplexed connection over a transport. + /// + /// The underlying transport. + /// The action to invoke when state object is removed. + public KcpMultiplexConnection(IKcpTransport transport, Action? disposeAction) + { + _transport = transport ?? throw new ArgumentNullException(nameof(transport)); + _disposeAction = disposeAction; + } + + /// + /// Process a newly received packet from the transport. + /// + /// The content of the packet with conversation ID. + /// A token to cancel this operation. + /// + /// A that completes when the packet is handled by the corresponding channel or + /// conversation. + /// + public ValueTask InputPakcetAsync(UdpReceiveResult packet, CancellationToken cancellationToken = default) + { + ReadOnlySpan span = packet.Buffer.AsSpan(); + if (span.Length < KcpGlobalVars.CONVID_LENGTH) return default; + if (_transportClosed || _disposed) return default; + var id = BinaryPrimitives.ReadInt64BigEndian(span); + if (_conversations.TryGetValue(id, out var value)) + return value.Conversation.InputPakcetAsync(packet, cancellationToken); + return default; + } + + /// + public void SetTransportClosed() + { + _transportClosed = true; + foreach (var (conversation, _) in _conversations.Values) conversation.SetTransportClosed(); + } + + /// + public void Dispose() + { + if (_disposed) return; + _transportClosed = true; + _disposed = true; + while (!_conversations.IsEmpty) + foreach (var id in _conversations.Keys) + if (_conversations.TryRemove(id, out var value)) + { + value.Conversation.Dispose(); + if (_disposeAction is not null) _disposeAction.Invoke(value.State); + } + } + + /// + /// Determine whether the multiplex connection contains a conversation with the specified id. + /// + /// The conversation ID. + /// True if the multiplex connection contains the specified conversation. Otherwise false. + public bool Contains(long id) + { + CheckDispose(); + return _conversations.ContainsKey(id); + } + + /// + /// Create a raw channel with the specified conversation ID. + /// + /// The conversation ID. + /// The remote Endpoint + /// The options of the . + /// The raw channel created. + /// The current instance is disposed. + /// Another channel or conversation with the same ID was already registered. + public KcpRawChannel CreateRawChannel(long id, IPEndPoint remoteEndpoint, KcpRawChannelOptions? options = null) + { + KcpRawChannel? channel = new(remoteEndpoint, this, id, options); + try + { + RegisterConversation(channel, id, default); + if (_transportClosed) channel.SetTransportClosed(); + return Interlocked.Exchange(ref channel, null)!; + } + finally + { + if (channel is not null) channel.Dispose(); + } + } + + /// + /// Create a raw channel with the specified conversation ID. + /// + /// The conversation ID. + /// The remote Endpoint + /// The user state of this channel. + /// The options of the . + /// The raw channel created. + /// The current instance is disposed. + /// Another channel or conversation with the same ID was already registered. + public KcpRawChannel CreateRawChannel(long id, IPEndPoint remoteEndpoint, T state, + KcpRawChannelOptions? options = null) + { + KcpRawChannel? channel = new(remoteEndpoint, this, id, options); + try + { + RegisterConversation(channel, id, state); + if (_transportClosed) channel.SetTransportClosed(); + return Interlocked.Exchange(ref channel, null)!; + } + finally + { + if (channel is not null) channel.Dispose(); + } + } + + /// + /// Create a conversation with the specified conversation ID. + /// + /// The conversation ID. + /// The remote Endpoint + /// The options of the . + /// The KCP conversation created. + /// The current instance is disposed. + /// Another channel or conversation with the same ID was already registered. + public KcpConversation CreateConversation(long id, IPEndPoint remoteEndpoint, + KcpConversationOptions? options = null) + { + KcpConversation? conversation = new(remoteEndpoint, this, id, options); + try + { + RegisterConversation(conversation, id, default); + if (_transportClosed) conversation.SetTransportClosed(); + return Interlocked.Exchange(ref conversation, null)!; + } + finally + { + if (conversation is not null) conversation.Dispose(); + } + } + + /// + /// Create a conversation with the specified conversation ID. + /// + /// The conversation ID. + /// The remote Endpoint + /// The user state of this conversation. + /// The options of the . + /// The KCP conversation created. + /// The current instance is disposed. + /// Another channel or conversation with the same ID was already registered. + public KcpConversation CreateConversation(long id, IPEndPoint remoteEndpoint, T state, + KcpConversationOptions? options = null) + { + KcpConversation? conversation = new(remoteEndpoint, this, id, options); + try + { + RegisterConversation(conversation, id, state); + if (_transportClosed) conversation.SetTransportClosed(); + return Interlocked.Exchange(ref conversation, null)!; + } + finally + { + if (conversation is not null) conversation.Dispose(); + } + } + + /// + /// Register a conversation or channel with the specified conversation ID and user state. + /// + /// The conversation or channel to register. + /// The conversation ID. + /// is not provided. + /// The current instance is disposed. + /// Another channel or conversation with the same ID was already registered. + public void RegisterConversation(IKcpConversation conversation, long id) + { + RegisterConversation(conversation, id, default); + } + + /// + /// Register a conversation or channel with the specified conversation ID and user state. + /// + /// The conversation or channel to register. + /// The conversation ID. + /// The user state + /// is not provided. + /// The current instance is disposed. + /// Another channel or conversation with the same ID was already registered. + public void RegisterConversation(IKcpConversation conversation, long id, T? state) + { + if (conversation is null) throw new ArgumentNullException(nameof(conversation)); + + CheckDispose(); + var (addedConversation, _) = _conversations.GetOrAdd(id, (conversation, state)); + if (!ReferenceEquals(addedConversation, conversation)) + throw new InvalidOperationException("Duplicated conversation."); + if (_disposed) + { + if (_conversations.TryRemove(id, out var value) && _disposeAction is not null) + _disposeAction.Invoke(value.State); + ThrowObjectDisposedException(); + } + } + + /// + /// Unregister a conversation or channel with the specified conversation ID. + /// + /// The conversation ID. + /// The conversation unregistered. Returns null when the conversation with the specified ID is not found. + public IKcpConversation? UnregisterConversation(long id) + { + return UnregisterConversation(id, out _); + } + + /// + /// Unregister a conversation or channel with the specified conversation ID. + /// + /// The conversation ID. + /// The user state. + /// The conversation unregistered. Returns null when the conversation with the specified ID is not found. + public IKcpConversation? UnregisterConversation(long id, out T? state) + { + if (!_transportClosed && !_disposed && _conversations.TryRemove(id, out var value)) + { + value.Conversation.SetTransportClosed(); + state = value.State; + if (_disposeAction is not null) _disposeAction.Invoke(state); + return value.Conversation; + } + + state = default; + return default; + } + + /// + public ValueTask SendPacketAsync(Memory packet, IPEndPoint remoteEndpoint, + CancellationToken cancellationToken = default) + { + if (_transportClosed || _disposed) return default; + return _transport.SendPacketAsync(packet, remoteEndpoint, cancellationToken); + } + + private void CheckDispose() + { + if (_disposed) ThrowObjectDisposedException(); + } + + private static void ThrowObjectDisposedException() + { + throw new ObjectDisposedException(nameof(KcpMultiplexConnection)); + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpPacketHeader.cs b/KcpSharp/Base/KcpPacketHeader.cs new file mode 100644 index 0000000..1fe3600 --- /dev/null +++ b/KcpSharp/Base/KcpPacketHeader.cs @@ -0,0 +1,89 @@ +using System.Buffers.Binary; +using System.Diagnostics; + +namespace KianaBH.KcpSharp.Base; + +internal readonly struct KcpPacketHeader : IEquatable +{ + public KcpPacketHeader(KcpCommand command, byte fragment, ushort windowSize, uint timestamp, uint serialNumber, + uint unacknowledged) + { + Command = command; + Fragment = fragment; + WindowSize = windowSize; + Timestamp = timestamp; + SerialNumber = serialNumber; + Unacknowledged = unacknowledged; + } + + internal KcpPacketHeader(byte fragment) + { + Command = 0; + Fragment = fragment; + WindowSize = 0; + Timestamp = 0; + SerialNumber = 0; + Unacknowledged = 0; + } + + public KcpCommand Command { get; } + public byte Fragment { get; } + public ushort WindowSize { get; } + public uint Timestamp { get; } + public uint SerialNumber { get; } + public uint Unacknowledged { get; } + + public bool Equals(KcpPacketHeader other) + { + return Command == other.Command && Fragment == other.Fragment && WindowSize == other.WindowSize && + Timestamp == other.Timestamp && SerialNumber == other.SerialNumber && + Unacknowledged == other.Unacknowledged; + } + + public override bool Equals(object? obj) + { + return obj is KcpPacketHeader other && Equals(other); + } + + public override int GetHashCode() + { + return HashCode.Combine(Command, Fragment, WindowSize, Timestamp, SerialNumber, Unacknowledged); + } + + public static KcpPacketHeader Parse(ReadOnlySpan buffer) + { + Debug.Assert(buffer.Length >= 16); + return new KcpPacketHeader( + (KcpCommand)buffer[0], + buffer[1], + BinaryPrimitives.ReadUInt16LittleEndian(buffer.Slice(2)), + BinaryPrimitives.ReadUInt32LittleEndian(buffer.Slice(4)), + BinaryPrimitives.ReadUInt32LittleEndian(buffer.Slice(8)), + BinaryPrimitives.ReadUInt32LittleEndian(buffer.Slice(12)) + ); + } + + internal void EncodeHeader(ulong? conversationId, int payloadLength, Span destination, out int bytesWritten) + { + Debug.Assert(destination.Length >= 20); + if (conversationId.HasValue) + { + BinaryPrimitives.WriteUInt64BigEndian(destination, conversationId.GetValueOrDefault()); + destination = destination.Slice(8); + bytesWritten = 28; + } + else + { + bytesWritten = 20; + } + + Debug.Assert(destination.Length >= 20); + destination[1] = Fragment; + destination[0] = (byte)Command; + BinaryPrimitives.WriteUInt16LittleEndian(destination.Slice(2), WindowSize); + BinaryPrimitives.WriteUInt32LittleEndian(destination.Slice(4), Timestamp); + BinaryPrimitives.WriteUInt32LittleEndian(destination.Slice(8), SerialNumber); + BinaryPrimitives.WriteUInt32LittleEndian(destination.Slice(12), Unacknowledged); + BinaryPrimitives.WriteUInt32LittleEndian(destination.Slice(16), (uint)payloadLength); + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpProbeType.cs b/KcpSharp/Base/KcpProbeType.cs new file mode 100644 index 0000000..50ead00 --- /dev/null +++ b/KcpSharp/Base/KcpProbeType.cs @@ -0,0 +1,9 @@ +namespace KianaBH.KcpSharp.Base; + +[Flags] +internal enum KcpProbeType +{ + None = 0, + AskSend = 1, + AskTell = 2 +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpRawChannel.cs b/KcpSharp/Base/KcpRawChannel.cs new file mode 100644 index 0000000..4625bb1 --- /dev/null +++ b/KcpSharp/Base/KcpRawChannel.cs @@ -0,0 +1,400 @@ +using System.Buffers.Binary; +using System.Net; +using System.Net.Sockets; + +namespace KianaBH.KcpSharp.Base; + +/// +/// An unreliable channel with a conversation ID. +/// +public sealed class KcpRawChannel : IKcpConversation, IKcpExceptionProducer +{ + private readonly IKcpBufferPool _bufferPool; + private readonly ulong? _id; + private readonly int _mtu; + private readonly int _postBufferSize; + private readonly int _preBufferSize; + private readonly KcpRawReceiveQueue _receiveQueue; + private readonly IPEndPoint _remoteEndPoint; + private readonly AsyncAutoResetEvent _sendNotification; + private readonly KcpRawSendOperation _sendOperation; + private readonly IKcpTransport _transport; + + private Func? _exceptionHandler; + private object? _exceptionHandlerState; + + private CancellationTokenSource? _sendLoopCts; + + /// + /// Construct a unreliable channel with a conversation ID. + /// + /// The remote Endpoint + /// The underlying transport. + /// The options of the . + public KcpRawChannel(IPEndPoint remoteEndPoint, IKcpTransport transport, KcpRawChannelOptions? options) + : this(remoteEndPoint, transport, null, options) + { + } + + /// + /// Construct a unreliable channel with a conversation ID. + /// + /// The remote Endpoint + /// The underlying transport. + /// The conversation ID. + /// The options of the . + public KcpRawChannel(IPEndPoint remoteEndPoint, IKcpTransport transport, long conversationId, + KcpRawChannelOptions? options) + : this(remoteEndPoint, transport, (ulong)conversationId, options) + { + } + + private KcpRawChannel(IPEndPoint remoteEndPoint, IKcpTransport transport, ulong? conversationId, + KcpRawChannelOptions? options) + { + _bufferPool = options?.BufferPool ?? DefaultArrayPoolBufferAllocator.Default; + _remoteEndPoint = remoteEndPoint; + _transport = transport; + _id = conversationId; + + if (options is null) + _mtu = KcpConversationOptions.MtuDefaultValue; + else if (options.Mtu < 50) + throw new ArgumentException("MTU must be at least 50.", nameof(options)); + else + _mtu = options.Mtu; + + _preBufferSize = options?.PreBufferSize ?? 0; + _postBufferSize = options?.PostBufferSize ?? 0; + if (_preBufferSize < 0) + throw new ArgumentException("PreBufferSize must be a non-negative integer.", nameof(options)); + if (_postBufferSize < 0) + throw new ArgumentException("PostBufferSize must be a non-negative integer.", nameof(options)); + if ((uint)(_preBufferSize + _postBufferSize) >= (uint)_mtu) + throw new ArgumentException("The sum of PreBufferSize and PostBufferSize must be less than MTU.", + nameof(options)); + if (conversationId.HasValue && (uint)(_preBufferSize + _postBufferSize) >= (uint)(_mtu - 4)) + throw new ArgumentException( + "The sum of PreBufferSize and PostBufferSize is too large. There is not enough space in the packet for the conversation ID.", + nameof(options)); + + var queueSize = options?.ReceiveQueueSize ?? 32; + if (queueSize < 1) throw new ArgumentException("QueueSize must be a positive integer.", nameof(options)); + + _sendLoopCts = new CancellationTokenSource(); + _sendNotification = new AsyncAutoResetEvent(); + _receiveQueue = new KcpRawReceiveQueue(_bufferPool, queueSize); + _sendOperation = new KcpRawSendOperation(_sendNotification); + + RunSendLoop(); + } + + /// + /// Get the ID of the current conversation. + /// + public long? ConversationId => (long?)_id; + + /// + /// Get whether the transport is marked as closed. + /// + public bool TransportClosed => _sendLoopCts is null; + + /// + public ValueTask InputPakcetAsync(UdpReceiveResult packet, CancellationToken cancellationToken = default) + { + ReadOnlySpan span = packet.Buffer.AsSpan(); + var overhead = _id.HasValue ? KcpGlobalVars.CONVID_LENGTH : 0; + if (span.Length < overhead || span.Length > _mtu) return default; + if (_id.HasValue) + { + if (BinaryPrimitives.ReadUInt64BigEndian(span) != _id.GetValueOrDefault()) return default; + span = span.Slice(8); + } + + _receiveQueue.Enqueue(span); + return default; + } + + + /// + public void SetTransportClosed() + { + var cts = Interlocked.Exchange(ref _sendLoopCts, null); + if (cts is not null) + { + cts.Cancel(); + cts.Dispose(); + } + + _receiveQueue.SetTransportClosed(); + _sendOperation.SetTransportClosed(); + _sendNotification.Set(0); + } + + /// + public void Dispose() + { + SetTransportClosed(); + _receiveQueue.Dispose(); + _sendOperation.Dispose(); + } + + /// + /// Set the handler to invoke when exception is thrown during flushing packets to the transport. Return true in the + /// handler to ignore the error and continue running. Return false in the handler to abort the operation and mark the + /// transport as closed. + /// + /// The exception handler. + /// The state object to pass into the exception handler. + public void SetExceptionHandler(Func handler, object? state) + { + if (handler is null) throw new ArgumentNullException(nameof(handler)); + + _exceptionHandler = handler; + _exceptionHandlerState = state; + } + + /// + /// Send message to the underlying transport. + /// + /// The content of the message + /// The token to cancel this operation. + /// The size of the message is larger than mtu, thus it can not be sent. + /// + /// The is fired before send operation + /// is completed. + /// + /// The send operation is initiated concurrently. + /// The instance is disposed. + /// + /// A that completes when the entire message is put into the queue. The result + /// of the task is false when the transport is closed. + /// + public ValueTask SendAsync(ReadOnlyMemory buffer, CancellationToken cancellationToken = default) + { + return _sendOperation.SendAsync(buffer, cancellationToken); + } + + + /// + /// Cancel the current send operation or flush operation. + /// + /// True if the current operation is canceled. False if there is no active send operation. + public bool CancelPendingSend() + { + return _sendOperation.CancelPendingOperation(null, default); + } + + /// + /// Cancel the current send operation or flush operation. + /// + /// + /// The inner exception of the thrown by the + /// method. + /// + /// + /// The in the + /// thrown by the method. + /// + /// True if the current operation is canceled. False if there is no active send operation. + public bool CancelPendingSend(Exception? innerException, CancellationToken cancellationToken) + { + return _sendOperation.CancelPendingOperation(innerException, cancellationToken); + } + + + private async void RunSendLoop() + { + var cancellationToken = _sendLoopCts?.Token ?? new CancellationToken(true); + var sendOperation = _sendOperation; + var ev = _sendNotification; + var mss = _mtu - _preBufferSize - _postBufferSize; + if (_id.HasValue) mss -= 8; + + try + { + while (!cancellationToken.IsCancellationRequested) + { + var payloadSize = await ev.WaitAsync().ConfigureAwait(false); + if (cancellationToken.IsCancellationRequested) break; + + if (payloadSize < 0 || payloadSize > mss) + { + _ = sendOperation.TryConsume(default, out _); + continue; + } + + var overhead = _preBufferSize + _postBufferSize; + if (_id.HasValue) overhead += 8; + { + using var owner = _bufferPool.Rent(new KcpBufferPoolRentOptions(payloadSize + overhead, true)); + var memory = owner.Memory; + + // Fill the buffer + if (_preBufferSize != 0) + { + memory.Span.Slice(0, _preBufferSize).Clear(); + memory = memory.Slice(_preBufferSize); + } + + if (_id.HasValue) + { + BinaryPrimitives.WriteUInt64LittleEndian(memory.Span, _id.GetValueOrDefault()); + memory = memory.Slice(8); + } + + if (!sendOperation.TryConsume(memory, out var bytesWritten)) continue; + payloadSize = Math.Min(payloadSize, bytesWritten); + memory = memory.Slice(payloadSize); + if (_postBufferSize != 0) memory.Span.Slice(0, _postBufferSize).Clear(); + + // Send the buffer + try + { + await _transport.SendPacketAsync(owner.Memory.Slice(0, payloadSize + overhead), _remoteEndPoint, + cancellationToken).ConfigureAwait(false); + } + catch (Exception ex) + { + if (!HandleFlushException(ex)) break; + } + } + } + } + catch (OperationCanceledException) + { + // Do nothing + } + catch (Exception ex) + { + HandleFlushException(ex); + } + } + + + private bool HandleFlushException(Exception ex) + { + var handler = _exceptionHandler; + var state = _exceptionHandlerState; + var result = false; + if (handler is not null) + try + { + result = handler.Invoke(ex, this, state); + } + catch + { + result = false; + } + + if (!result) SetTransportClosed(); + return result; + } + + /// + /// Get the size of the next available message in the receive queue. + /// + /// The transport state and the size of the next available message. + /// The receive or peek operation is initiated concurrently. + /// + /// True if the receive queue contains at least one message. False if the receive queue is empty or the transport + /// is closed. + /// + public bool TryPeek(out KcpConversationReceiveResult result) + { + return _receiveQueue.TryPeek(out result); + } + + /// + /// Remove the next available message in the receive queue and copy its content into . + /// + /// The buffer to receive message. + /// The transport state and the count of bytes moved into . + /// + /// The size of the next available message is larger than the size of + /// . + /// + /// The receive or peek operation is initiated concurrently. + /// + /// True if the next available message is moved into . False if the receive queue is + /// empty or the transport is closed. + /// + public bool TryReceive(Span buffer, out KcpConversationReceiveResult result) + { + return _receiveQueue.TryReceive(buffer, out result); + } + + /// + /// Wait until the receive queue contains at least one message. + /// + /// The token to cancel this operation. + /// + /// The is fired before receive + /// operation is completed. + /// + /// The receive or peek operation is initiated concurrently. + /// + /// A that completes when the receive queue contains at + /// least one full message, or at least one byte in stream mode. Its result contains the transport state and the size + /// of the available message. + /// + public ValueTask WaitToReceiveAsync(CancellationToken cancellationToken) + { + return _receiveQueue.WaitToReceiveAsync(cancellationToken); + } + + /// + /// Wait for the next full message to arrive if the receive queue is empty. Remove the next available message in the + /// receive queue and copy its content into . + /// + /// The buffer to receive message. + /// The token to cancel this operation. + /// + /// The size of the next available message is larger than the size of + /// . + /// + /// + /// The is fired before send operation + /// is completed. + /// + /// The receive or peek operation is initiated concurrently. + /// + /// A that completes when a message is moved into + /// or the transport is closed. Its result contains the transport state and the count of + /// bytes written into . + /// + public ValueTask ReceiveAsync(Memory buffer, + CancellationToken cancellationToken = default) + { + return _receiveQueue.ReceiveAsync(buffer, cancellationToken); + } + + + /// + /// Cancel the current receive operation. + /// + /// True if the current operation is canceled. False if there is no active send operation. + public bool CancelPendingReceive() + { + return _receiveQueue.CancelPendingOperation(null, default); + } + + /// + /// Cancel the current send operation or flush operation. + /// + /// + /// The inner exception of the thrown by the + /// method or + /// method. + /// + /// + /// The in the + /// thrown by the method or + /// method. + /// + /// True if the current operation is canceled. False if there is no active send operation. + public bool CancelPendingReceive(Exception? innerException, CancellationToken cancellationToken) + { + return _receiveQueue.CancelPendingOperation(innerException, cancellationToken); + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpRawChannelOptions.cs b/KcpSharp/Base/KcpRawChannelOptions.cs new file mode 100644 index 0000000..7314224 --- /dev/null +++ b/KcpSharp/Base/KcpRawChannelOptions.cs @@ -0,0 +1,34 @@ +namespace KianaBH.KcpSharp.Base; + +/// +/// Options used to control the behaviors of . +/// +public sealed class KcpRawChannelOptions +{ + /// + /// The buffer pool to rent buffer from. + /// + public IKcpBufferPool? BufferPool { get; set; } + + /// + /// The maximum packet size that can be transmitted over the underlying transport. + /// + public int Mtu { get; set; } = 1400; + + /// + /// The number of packets in the receive queue. + /// + public int ReceiveQueueSize { get; set; } = 32; + + /// + /// The number of bytes to reserve at the start of buffer passed into the underlying transport. The transport should + /// fill this reserved space. + /// + public int PreBufferSize { get; set; } + + /// + /// The number of bytes to reserve at the end of buffer passed into the underlying transport. The transport should fill + /// this reserved space. + /// + public int PostBufferSize { get; set; } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpRawReceiveQueue.cs b/KcpSharp/Base/KcpRawReceiveQueue.cs new file mode 100644 index 0000000..bffc89a --- /dev/null +++ b/KcpSharp/Base/KcpRawReceiveQueue.cs @@ -0,0 +1,343 @@ +#if NEED_LINKEDLIST_SHIM +using LinkedListOfQueueItem = KcpSharp.NetstandardShim.LinkedList; +using LinkedListNodeOfQueueItem = KcpSharp.NetstandardShim.LinkedListNode; +#else +using LinkedListOfQueueItem = System.Collections.Generic.LinkedList; +using LinkedListNodeOfQueueItem = + System.Collections.Generic.LinkedListNode; +#endif +using System.Diagnostics; +using System.Threading.Tasks.Sources; + +namespace KianaBH.KcpSharp.Base; + +internal sealed class KcpRawReceiveQueue : IValueTaskSource, IDisposable +{ + private readonly IKcpBufferPool _bufferPool; + private readonly int _capacity; + private readonly LinkedListOfQueueItem _queue; + private readonly LinkedListOfQueueItem _recycled; + + private bool _activeWait; + private Memory _buffer; + private bool _bufferProvided; + private CancellationTokenRegistration _cancellationRegistration; + private CancellationToken _cancellationToken; + private bool _disposed; + private ManualResetValueTaskSourceCore _mrvtsc; + private bool _signaled; + + private bool _transportClosed; + + public KcpRawReceiveQueue(IKcpBufferPool bufferPool, int capacity) + { + _bufferPool = bufferPool; + _capacity = capacity; + _queue = new LinkedListOfQueueItem(); + _recycled = new LinkedListOfQueueItem(); + } + + public void Dispose() + { + lock (_queue) + { + if (_disposed) return; + if (_activeWait && !_signaled) + { + ClearPreviousOperation(); + _mrvtsc.SetResult(default); + } + + var node = _queue.First; + while (node is not null) + { + node.ValueRef.Release(); + node = node.Next; + } + + _queue.Clear(); + _recycled.Clear(); + _disposed = true; + _transportClosed = true; + } + } + + KcpConversationReceiveResult IValueTaskSource.GetResult(short token) + { + _cancellationRegistration.Dispose(); + try + { + return _mrvtsc.GetResult(token); + } + finally + { + _mrvtsc.Reset(); + lock (_queue) + { + _activeWait = false; + _signaled = false; + _cancellationRegistration = default; + } + } + } + + ValueTaskSourceStatus IValueTaskSource.GetStatus(short token) + { + return _mrvtsc.GetStatus(token); + } + + void IValueTaskSource.OnCompleted(Action continuation, object? state, + short token, ValueTaskSourceOnCompletedFlags flags) + { + _mrvtsc.OnCompleted(continuation, state, token, flags); + } + + public bool TryPeek(out KcpConversationReceiveResult result) + { + lock (_queue) + { + if (_disposed || _transportClosed) + { + result = default; + return false; + } + + if (_activeWait) ThrowHelper.ThrowConcurrentReceiveException(); + var first = _queue.First; + if (first is null) + { + result = new KcpConversationReceiveResult(0); + return false; + } + + result = new KcpConversationReceiveResult(first.ValueRef.Length); + return true; + } + } + + public ValueTask WaitToReceiveAsync(CancellationToken cancellationToken) + { + short token; + lock (_queue) + { + if (_transportClosed || _disposed) return default; + if (_activeWait) + return new ValueTask( + Task.FromException(ThrowHelper.NewConcurrentReceiveException())); + if (cancellationToken.IsCancellationRequested) + return new ValueTask( + Task.FromCanceled(cancellationToken)); + + var first = _queue.First; + if (first is not null) + return new ValueTask( + new KcpConversationReceiveResult(first.ValueRef.Length)); + + _activeWait = true; + Debug.Assert(!_signaled); + _bufferProvided = false; + _buffer = default; + _cancellationToken = cancellationToken; + + token = _mrvtsc.Version; + } + + _cancellationRegistration = + cancellationToken.UnsafeRegister(state => ((KcpRawReceiveQueue?)state)!.SetCanceled(), this); + + return new ValueTask(this, token); + } + + public bool TryReceive(Span buffer, out KcpConversationReceiveResult result) + { + lock (_queue) + { + if (_disposed || _transportClosed) + { + result = default; + return false; + } + + if (_activeWait) ThrowHelper.ThrowConcurrentReceiveException(); + var first = _queue.First; + if (first is null) + { + result = new KcpConversationReceiveResult(0); + return false; + } + + ref var source = ref first.ValueRef; + if (buffer.Length < source.Length) ThrowHelper.ThrowBufferTooSmall(); + + source.DataRegion.Span.CopyTo(buffer); + result = new KcpConversationReceiveResult(source.Length); + + _queue.RemoveFirst(); + source.Release(); + source = default; + _recycled.AddLast(first); + + return true; + } + } + + public ValueTask ReceiveAsync(Memory buffer, + CancellationToken cancellationToken = default) + { + short token; + lock (_queue) + { + if (_transportClosed || _disposed) return default; + if (_activeWait) + return new ValueTask( + Task.FromException(ThrowHelper.NewConcurrentReceiveException())); + if (cancellationToken.IsCancellationRequested) + return new ValueTask( + Task.FromCanceled(cancellationToken)); + + var first = _queue.First; + if (first is not null) + { + ref var source = ref first.ValueRef; + var length = source.Length; + if (buffer.Length < source.Length) + return new ValueTask( + Task.FromException( + ThrowHelper.NewBufferTooSmallForBufferArgument())); + _queue.Remove(first); + + source.DataRegion.CopyTo(buffer); + source.Release(); + source = default; + _recycled.AddLast(first); + + return new ValueTask(new KcpConversationReceiveResult(length)); + } + + _activeWait = true; + Debug.Assert(!_signaled); + _bufferProvided = true; + _buffer = buffer; + _cancellationToken = cancellationToken; + + token = _mrvtsc.Version; + } + + _cancellationRegistration = + cancellationToken.UnsafeRegister(state => ((KcpRawReceiveQueue?)state)!.SetCanceled(), this); + + return new ValueTask(this, token); + } + + public bool CancelPendingOperation(Exception? innerException, CancellationToken cancellationToken) + { + lock (_queue) + { + if (_activeWait && !_signaled) + { + ClearPreviousOperation(); + _mrvtsc.SetException( + ThrowHelper.NewOperationCanceledExceptionForCancelPendingReceive(innerException, + cancellationToken)); + return true; + } + } + + return false; + } + + private void SetCanceled() + { + lock (_queue) + { + if (_activeWait && !_signaled) + { + var cancellationToken = _cancellationToken; + ClearPreviousOperation(); + _mrvtsc.SetException(new OperationCanceledException(cancellationToken)); + } + } + } + + private void ClearPreviousOperation() + { + _signaled = true; + _bufferProvided = false; + _buffer = default; + _cancellationToken = default; + } + + public void Enqueue(ReadOnlySpan buffer) + { + lock (_queue) + { + if (_transportClosed || _disposed) return; + + var queueSize = _queue.Count; + if (queueSize > 0 || !_activeWait) + { + if (queueSize >= _capacity) return; + + var owner = _bufferPool.Rent(new KcpBufferPoolRentOptions(buffer.Length, false)); + _queue.AddLast(AllocateNode(KcpBuffer.CreateFromSpan(owner, buffer))); + return; + } + + if (!_bufferProvided) + { + var owner = _bufferPool.Rent(new KcpBufferPoolRentOptions(buffer.Length, false)); + _queue.AddLast(AllocateNode(KcpBuffer.CreateFromSpan(owner, buffer))); + + ClearPreviousOperation(); + _mrvtsc.SetResult(new KcpConversationReceiveResult(buffer.Length)); + return; + } + + if (buffer.Length > _buffer.Length) + { + var owner = _bufferPool.Rent(new KcpBufferPoolRentOptions(buffer.Length, false)); + _queue.AddLast(AllocateNode(KcpBuffer.CreateFromSpan(owner, buffer))); + + ClearPreviousOperation(); + _mrvtsc.SetException(ThrowHelper.NewBufferTooSmallForBufferArgument()); + return; + } + + buffer.CopyTo(_buffer.Span); + ClearPreviousOperation(); + _mrvtsc.SetResult(new KcpConversationReceiveResult(buffer.Length)); + } + } + + private LinkedListNodeOfQueueItem AllocateNode(KcpBuffer buffer) + { + var node = _recycled.First; + if (node is null) + { + node = new LinkedListNodeOfQueueItem(buffer); + } + else + { + node.ValueRef = buffer; + _recycled.Remove(node); + } + + return node; + } + + public void SetTransportClosed() + { + lock (_queue) + { + if (_transportClosed || _disposed) return; + if (_activeWait && !_signaled) + { + ClearPreviousOperation(); + _mrvtsc.SetResult(default); + } + + _recycled.Clear(); + _transportClosed = true; + } + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpRawSendOperation.cs b/KcpSharp/Base/KcpRawSendOperation.cs new file mode 100644 index 0000000..c18fc5f --- /dev/null +++ b/KcpSharp/Base/KcpRawSendOperation.cs @@ -0,0 +1,184 @@ +using System.Diagnostics; +using System.Threading.Tasks.Sources; + +namespace KianaBH.KcpSharp.Base; + +internal sealed class KcpRawSendOperation : IValueTaskSource, IDisposable +{ + private readonly AsyncAutoResetEvent _notification; + + private bool _activeWait; + private ReadOnlyMemory _buffer; + private CancellationTokenRegistration _cancellationRegistration; + private CancellationToken _cancellationToken; + private bool _disposed; + private ManualResetValueTaskSourceCore _mrvtsc; + private bool _signaled; + + private bool _transportClosed; + + public KcpRawSendOperation(AsyncAutoResetEvent notification) + { + _notification = notification; + + _mrvtsc = new ManualResetValueTaskSourceCore + { + RunContinuationsAsynchronously = true + }; + } + + public void Dispose() + { + lock (this) + { + if (_disposed) return; + if (_activeWait && !_signaled) + { + ClearPreviousOperation(); + _mrvtsc.SetResult(false); + } + + _disposed = true; + _transportClosed = true; + } + } + + bool IValueTaskSource.GetResult(short token) + { + _cancellationRegistration.Dispose(); + try + { + return _mrvtsc.GetResult(token); + } + finally + { + _mrvtsc.Reset(); + lock (this) + { + _activeWait = false; + _signaled = false; + _cancellationRegistration = default; + } + } + } + + ValueTaskSourceStatus IValueTaskSource.GetStatus(short token) + { + return _mrvtsc.GetStatus(token); + } + + void IValueTaskSource.OnCompleted(Action continuation, object? state, short token, + ValueTaskSourceOnCompletedFlags flags) + { + _mrvtsc.OnCompleted(continuation, state, token, flags); + } + + public ValueTask SendAsync(ReadOnlyMemory buffer, CancellationToken cancellationToken = default) + { + short token; + lock (this) + { + if (_transportClosed || _disposed) return new ValueTask(false); + if (_activeWait) + return new ValueTask(Task.FromException(ThrowHelper.NewConcurrentSendException())); + if (cancellationToken.IsCancellationRequested) + return new ValueTask(Task.FromCanceled(cancellationToken)); + + _activeWait = true; + Debug.Assert(!_signaled); + _buffer = buffer; + _cancellationToken = cancellationToken; + token = _mrvtsc.Version; + } + + _cancellationRegistration = + cancellationToken.UnsafeRegister(state => ((KcpRawSendOperation?)state)!.SetCanceled(), this); + + _notification.Set(buffer.Length); + return new ValueTask(this, token); + } + + public bool CancelPendingOperation(Exception? innerException, CancellationToken cancellationToken) + { + lock (this) + { + if (_activeWait && !_signaled) + { + ClearPreviousOperation(); + _mrvtsc.SetException( + ThrowHelper.NewOperationCanceledExceptionForCancelPendingSend(innerException, cancellationToken)); + return true; + } + } + + return false; + } + + private void SetCanceled() + { + lock (this) + { + if (_activeWait && !_signaled) + { + var cancellationToken = _cancellationToken; + ClearPreviousOperation(); + _mrvtsc.SetException(new OperationCanceledException(cancellationToken)); + } + } + } + + private void ClearPreviousOperation() + { + _signaled = true; + _buffer = default; + _cancellationToken = default; + } + + public bool TryConsume(Memory buffer, out int bytesWritten) + { + lock (this) + { + if (_transportClosed || _disposed) + { + bytesWritten = 0; + return false; + } + + if (!_activeWait) + { + bytesWritten = 0; + return false; + } + + var source = _buffer; + if (source.Length > buffer.Length) + { + ClearPreviousOperation(); + _mrvtsc.SetException(ThrowHelper.NewMessageTooLargeForBufferArgument()); + bytesWritten = 0; + return false; + } + + source.CopyTo(buffer); + bytesWritten = source.Length; + ClearPreviousOperation(); + _mrvtsc.SetResult(true); + return true; + } + } + + public void SetTransportClosed() + { + lock (this) + { + if (_transportClosed || _disposed) return; + if (_activeWait && !_signaled) + { + ClearPreviousOperation(); + _mrvtsc.SetResult(false); + } + + _transportClosed = true; + } + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpReceiveQueue.cs b/KcpSharp/Base/KcpReceiveQueue.cs new file mode 100644 index 0000000..6d14914 --- /dev/null +++ b/KcpSharp/Base/KcpReceiveQueue.cs @@ -0,0 +1,638 @@ +#if NEED_LINKEDLIST_SHIM +using LinkedListOfQueueItem = KcpSharp.NetstandardShim.LinkedList<(KcpSharp.KcpBuffer Data, byte Fragment)>; +using LinkedListNodeOfQueueItem = KcpSharp.NetstandardShim.LinkedListNode<(KcpSharp.KcpBuffer Data, byte Fragment)>; +#else +using LinkedListOfQueueItem = + System.Collections.Generic.LinkedList<(KianaBH.KcpSharp.Base.KcpBuffer Data, byte Fragment)>; +using LinkedListNodeOfQueueItem = + System.Collections.Generic.LinkedListNode<(KianaBH.KcpSharp.Base.KcpBuffer Data, byte Fragment + )>; +#endif +using System.Diagnostics; +using System.Threading.Tasks.Sources; + +namespace KianaBH.KcpSharp.Base; + +internal sealed class KcpReceiveQueue : IValueTaskSource, IValueTaskSource, + IValueTaskSource, IDisposable +{ + private readonly KcpSendReceiveQueueItemCache _cache; + + private readonly LinkedListOfQueueItem _queue; + private readonly int _queueSize; + private readonly bool _stream; + + private bool _activeWait; + private Memory _buffer; + private CancellationTokenRegistration _cancellationRegistration; + private CancellationToken _cancellationToken; + private int _completedPacketsCount; + private bool _disposed; + private int _minimumBytes; + private int _minimumSegments; + private ManualResetValueTaskSourceCore _mrvtsc; + private byte _operationMode; // 0-receive 1-wait for message 2-wait for available data + private bool _signaled; + + private bool _transportClosed; + + public KcpReceiveQueue(bool stream, int queueSize, KcpSendReceiveQueueItemCache cache) + { + _mrvtsc = new ManualResetValueTaskSourceCore + { + RunContinuationsAsynchronously = true + }; + _queue = new LinkedListOfQueueItem(); + _stream = stream; + _queueSize = queueSize; + _cache = cache; + } + + public void Dispose() + { + lock (_queue) + { + if (_disposed) return; + if (_activeWait && !_signaled) + { + ClearPreviousOperation(true); + _mrvtsc.SetResult(default); + } + + var node = _queue.First; + while (node is not null) + { + node.ValueRef.Data.Release(); + node = node.Next; + } + + _queue.Clear(); + _disposed = true; + _transportClosed = true; + } + } + + bool IValueTaskSource.GetResult(short token) + { + _cancellationRegistration.Dispose(); + try + { + return !_mrvtsc.GetResult(token).TransportClosed; + } + finally + { + _mrvtsc.Reset(); + lock (_queue) + { + _activeWait = false; + _signaled = false; + _cancellationRegistration = default; + } + } + } + + int IValueTaskSource.GetResult(short token) + { + _cancellationRegistration.Dispose(); + try + { + return _mrvtsc.GetResult(token).BytesReceived; + } + finally + { + _mrvtsc.Reset(); + lock (_queue) + { + _activeWait = false; + _signaled = false; + _cancellationRegistration = default; + } + } + } + + public ValueTaskSourceStatus GetStatus(short token) + { + return _mrvtsc.GetStatus(token); + } + + public void OnCompleted(Action continuation, object? state, short token, + ValueTaskSourceOnCompletedFlags flags) + { + _mrvtsc.OnCompleted(continuation, state, token, flags); + } + + KcpConversationReceiveResult IValueTaskSource.GetResult(short token) + { + _cancellationRegistration.Dispose(); + try + { + return _mrvtsc.GetResult(token); + } + finally + { + _mrvtsc.Reset(); + lock (_queue) + { + _activeWait = false; + _signaled = false; + _cancellationRegistration = default; + } + } + } + + public bool TryPeek(out KcpConversationReceiveResult result) + { + lock (_queue) + { + if (_disposed || _transportClosed) + { + result = default; + return false; + } + + if (_activeWait) ThrowHelper.ThrowConcurrentReceiveException(); + + if (_completedPacketsCount == 0) + { + result = new KcpConversationReceiveResult(0); + return false; + } + + var node = _queue.First; + if (node is null) + { + result = new KcpConversationReceiveResult(0); + return false; + } + + if (CalculatePacketSize(node, out var packetSize)) + { + result = new KcpConversationReceiveResult(packetSize); + return true; + } + + result = default; + return false; + } + } + + public ValueTask WaitToReceiveAsync(CancellationToken cancellationToken) + { + short token; + lock (_queue) + { + if (_transportClosed || _disposed) return default; + if (_activeWait) + return new ValueTask( + Task.FromException(ThrowHelper.NewConcurrentReceiveException())); + if (cancellationToken.IsCancellationRequested) + return new ValueTask( + Task.FromCanceled(cancellationToken)); + + _operationMode = 1; + _buffer = default; + _minimumBytes = 0; + _minimumSegments = 0; + + token = _mrvtsc.Version; + if (_completedPacketsCount > 0) + { + ConsumePacket(_buffer.Span, out var result, out var bufferTooSmall); + ClearPreviousOperation(false); + if (bufferTooSmall) + { + Debug.Assert(false, "This should never be reached."); + return new ValueTask( + Task.FromException( + ThrowHelper.NewBufferTooSmallForBufferArgument())); + } + + return new ValueTask(result); + } + + _activeWait = true; + Debug.Assert(!_signaled); + _cancellationToken = cancellationToken; + } + + _cancellationRegistration = + cancellationToken.UnsafeRegister(state => ((KcpReceiveQueue?)state)!.SetCanceled(), this); + + return new ValueTask(this, token); + } + + public ValueTask WaitForAvailableDataAsync(int minimumBytes, int minimumSegments, + CancellationToken cancellationToken) + { + if (minimumBytes < 0) + return new ValueTask( + Task.FromException(ThrowHelper.NewArgumentOutOfRangeException(nameof(minimumBytes)))); + if (minimumSegments < 0) + return new ValueTask( + Task.FromException(ThrowHelper.NewArgumentOutOfRangeException(nameof(minimumSegments)))); + + short token; + lock (_queue) + { + if (_transportClosed || _disposed) return default; + if (_activeWait) + return new ValueTask(Task.FromException(ThrowHelper.NewConcurrentReceiveException())); + if (cancellationToken.IsCancellationRequested) + return new ValueTask(Task.FromCanceled(cancellationToken)); + + if (CheckQueeuSize(_queue, minimumBytes, minimumSegments, _stream)) return new ValueTask(true); + + _activeWait = true; + Debug.Assert(!_signaled); + _operationMode = 2; + _buffer = default; + _minimumBytes = minimumBytes; + _minimumSegments = minimumSegments; + _cancellationToken = cancellationToken; + + token = _mrvtsc.Version; + } + + _cancellationRegistration = + cancellationToken.UnsafeRegister(state => ((KcpReceiveQueue?)state)!.SetCanceled(), this); + + return new ValueTask(this, token); + } + + public bool TryReceive(Span buffer, out KcpConversationReceiveResult result) + { + lock (_queue) + { + if (_disposed || _transportClosed) + { + result = default; + return false; + } + + if (_activeWait) ThrowHelper.ThrowConcurrentReceiveException(); + + if (_completedPacketsCount == 0) + { + result = new KcpConversationReceiveResult(0); + return false; + } + + Debug.Assert(!_signaled); + _operationMode = 0; + + ConsumePacket(buffer, out result, out var bufferTooSmall); + ClearPreviousOperation(false); + if (bufferTooSmall) ThrowHelper.ThrowBufferTooSmall(); + return true; + } + } + + public ValueTask ReceiveAsync(Memory buffer, + CancellationToken cancellationToken) + { + short token; + lock (_queue) + { + if (_transportClosed || _disposed) return default; + if (_activeWait) + return new ValueTask( + Task.FromException(ThrowHelper.NewConcurrentReceiveException())); + if (cancellationToken.IsCancellationRequested) + return new ValueTask( + Task.FromCanceled(cancellationToken)); + + _operationMode = 0; + _buffer = buffer; + + token = _mrvtsc.Version; + if (_completedPacketsCount > 0) + { + ConsumePacket(_buffer.Span, out var result, out var bufferTooSmall); + ClearPreviousOperation(false); + if (bufferTooSmall) + return new ValueTask( + Task.FromException( + ThrowHelper.NewBufferTooSmallForBufferArgument())); + return new ValueTask(result); + } + + _activeWait = true; + Debug.Assert(!_signaled); + _cancellationToken = cancellationToken; + } + + _cancellationRegistration = + cancellationToken.UnsafeRegister(state => ((KcpReceiveQueue?)state)!.SetCanceled(), this); + + return new ValueTask(this, token); + } + + public ValueTask ReadAsync(Memory buffer, CancellationToken cancellationToken) + { + short token; + lock (_queue) + { + if (_transportClosed || _disposed) + return new ValueTask(Task.FromException(ThrowHelper.NewTransportClosedForStreamException())); + if (_activeWait) + return new ValueTask(Task.FromException(ThrowHelper.NewConcurrentReceiveException())); + if (cancellationToken.IsCancellationRequested) + return new ValueTask(Task.FromCanceled(cancellationToken)); + + _operationMode = 0; + _buffer = buffer; + + token = _mrvtsc.Version; + if (_completedPacketsCount > 0) + { + ConsumePacket(_buffer.Span, out var result, out var bufferTooSmall); + ClearPreviousOperation(false); + if (bufferTooSmall) + return new ValueTask( + Task.FromException(ThrowHelper.NewBufferTooSmallForBufferArgument())); + return new ValueTask(result.BytesReceived); + } + + _activeWait = true; + Debug.Assert(!_signaled); + _cancellationToken = cancellationToken; + } + + _cancellationRegistration = + cancellationToken.UnsafeRegister(state => ((KcpReceiveQueue?)state)!.SetCanceled(), this); + + return new ValueTask(this, token); + } + + public bool CancelPendingOperation(Exception? innerException, CancellationToken cancellationToken) + { + lock (_queue) + { + if (_activeWait && !_signaled) + { + ClearPreviousOperation(true); + _mrvtsc.SetException( + ThrowHelper.NewOperationCanceledExceptionForCancelPendingReceive(innerException, + cancellationToken)); + return true; + } + } + + return false; + } + + private void SetCanceled() + { + lock (_queue) + { + if (_activeWait && !_signaled) + { + var cancellationToken = _cancellationToken; + ClearPreviousOperation(true); + _mrvtsc.SetException(new OperationCanceledException(cancellationToken)); + } + } + } + + private void ClearPreviousOperation(bool signaled) + { + _signaled = signaled; + _operationMode = 0; + _buffer = default; + _minimumBytes = default; + _minimumSegments = default; + _cancellationToken = default; + } + + public void Enqueue(KcpBuffer buffer, byte fragment) + { + lock (_queue) + { + if (_transportClosed || _disposed) return; + + if (_stream) + { + if (buffer.Length == 0) return; + fragment = 0; + _queue.AddLast(_cache.Rent(buffer, 0)); + } + else + { + var lastNode = _queue.Last; + if (lastNode is null || lastNode.ValueRef.Fragment == 0 || lastNode.ValueRef.Fragment - 1 == fragment) + { + _queue.AddLast(_cache.Rent(buffer, fragment)); + } + else + { + fragment = 0; + _queue.AddLast(_cache.Rent(buffer, 0)); + } + } + + if (fragment == 0) + { + _completedPacketsCount++; + if (_activeWait && !_signaled) + { + TryCompleteReceive(); + TryCompleteWaitForData(); + } + } + } + } + + private void TryCompleteReceive() + { + Debug.Assert(_activeWait && !_signaled); + + if (_operationMode <= 1) + { + Debug.Assert(_operationMode == 0 || _operationMode == 1); + ConsumePacket(_buffer.Span, out var result, out var bufferTooSmall); + ClearPreviousOperation(true); + if (bufferTooSmall) + _mrvtsc.SetException(ThrowHelper.NewBufferTooSmallForBufferArgument()); + else + _mrvtsc.SetResult(result); + } + } + + private void TryCompleteWaitForData() + { + if (_operationMode == 2) + if (CheckQueeuSize(_queue, _minimumBytes, _minimumSegments, _stream)) + { + ClearPreviousOperation(true); + _mrvtsc.SetResult(new KcpConversationReceiveResult(0)); + } + } + + private void ConsumePacket(Span buffer, out KcpConversationReceiveResult result, out bool bufferTooSmall) + { + var node = _queue.First; + if (node is null) + { + result = default; + bufferTooSmall = false; + return; + } + + // peek + if (_operationMode == 1) + { + if (CalculatePacketSize(node, out var bytesRecevied)) + result = new KcpConversationReceiveResult(bytesRecevied); + else + result = default; + bufferTooSmall = false; + return; + } + + Debug.Assert(_operationMode == 0); + + // ensure buffer is big enough + var bytesInPacket = 0; + if (!_stream) + { + while (node is not null) + { + bytesInPacket += node.ValueRef.Data.Length; + if (node.ValueRef.Fragment == 0) break; + node = node.Next; + } + + if (node is null) + { + // incomplete packet + result = default; + bufferTooSmall = false; + return; + } + + if (bytesInPacket > buffer.Length) + { + result = default; + bufferTooSmall = true; + return; + } + } + + var anyDataReceived = false; + bytesInPacket = 0; + node = _queue.First; + LinkedListNodeOfQueueItem? next; + while (node is not null) + { + next = node.Next; + + var fragment = node.ValueRef.Fragment; + ref var data = ref node.ValueRef.Data; + + var sizeToCopy = Math.Min(data.Length, buffer.Length); + data.DataRegion.Span.Slice(0, sizeToCopy).CopyTo(buffer); + buffer = buffer.Slice(sizeToCopy); + bytesInPacket += sizeToCopy; + anyDataReceived = true; + + if (sizeToCopy != data.Length) + { + // partial data is received. + node.ValueRef = (data.Consume(sizeToCopy), node.ValueRef.Fragment); + } + else + { + // full fragment is consumed + data.Release(); + _queue.Remove(node); + _cache.Return(node); + if (fragment == 0) _completedPacketsCount--; + } + + if (!_stream && fragment == 0) break; + + if (sizeToCopy == 0) break; + + node = next; + } + + if (!anyDataReceived) + { + result = default; + bufferTooSmall = false; + } + else + { + result = new KcpConversationReceiveResult(bytesInPacket); + bufferTooSmall = false; + } + } + + private static bool CalculatePacketSize(LinkedListNodeOfQueueItem first, out int packetSize) + { + var bytesRecevied = first.ValueRef.Data.Length; + if (first.ValueRef.Fragment == 0) + { + packetSize = bytesRecevied; + return true; + } + + var node = first.Next; + while (node is not null) + { + bytesRecevied += node.ValueRef.Data.Length; + if (node.ValueRef.Fragment == 0) + { + packetSize = bytesRecevied; + return true; + } + + node = node.Next; + } + + // deadlink + packetSize = 0; + return false; + } + + private static bool CheckQueeuSize(LinkedListOfQueueItem queue, int minimumBytes, int minimumSegments, bool stream) + { + var node = queue.First; + while (node is not null) + { + ref var buffer = ref node.ValueRef.Data; + minimumBytes = Math.Max(minimumBytes - buffer.Length, 0); + if (stream || node.ValueRef.Fragment == 0) minimumSegments = Math.Max(minimumSegments - 1, 0); + if (minimumBytes == 0 && minimumSegments == 0) return true; + node = node.Next; + } + + return minimumBytes == 0 && minimumSegments == 0; + } + + public void SetTransportClosed() + { + lock (_queue) + { + if (_transportClosed || _disposed) return; + if (_activeWait && !_signaled) + { + ClearPreviousOperation(true); + _mrvtsc.SetResult(default); + } + + _transportClosed = true; + } + } + + public int GetQueueSize() + { + int count; + lock (_queue) + { + count = _queue.Count; + } + + return Math.Max(_queue.Count - _queueSize, 0); + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpReceiveWindowNotificationOptions.cs b/KcpSharp/Base/KcpReceiveWindowNotificationOptions.cs new file mode 100644 index 0000000..a074e5e --- /dev/null +++ b/KcpSharp/Base/KcpReceiveWindowNotificationOptions.cs @@ -0,0 +1,30 @@ +namespace KianaBH.KcpSharp.Base; + +/// +/// Options for sending receive window size notification. +/// +public sealed class KcpReceiveWindowNotificationOptions +{ + /// + /// Create an instance of option object for receive window size notification functionality. + /// + /// The initial interval in milliseconds of sending window size notification. + /// The maximum interval in milliseconds of sending window size notification. + public KcpReceiveWindowNotificationOptions(int initialInterval, int maximumInterval) + { + if (initialInterval <= 0) throw new ArgumentOutOfRangeException(nameof(initialInterval)); + if (maximumInterval < initialInterval) throw new ArgumentOutOfRangeException(nameof(maximumInterval)); + InitialInterval = initialInterval; + MaximumInterval = maximumInterval; + } + + /// + /// The initial interval in milliseconds of sending window size notification. + /// + public int InitialInterval { get; } + + /// + /// The maximum interval in milliseconds of sending window size notification. + /// + public int MaximumInterval { get; } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpRentedBuffer.cs b/KcpSharp/Base/KcpRentedBuffer.cs new file mode 100644 index 0000000..f9c6552 --- /dev/null +++ b/KcpSharp/Base/KcpRentedBuffer.cs @@ -0,0 +1,195 @@ +using System.Buffers; +using System.Diagnostics; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace KianaBH.KcpSharp.Base; + +/// +/// The buffer rented and owned by KcpSharp. +/// +public readonly struct KcpRentedBuffer : IEquatable, IDisposable +{ + private readonly Memory _memory; + + internal object? Owner { get; } + + /// + /// The rented buffer. + /// + public Memory Memory => _memory; + + /// + /// The rented buffer. + /// + public Span Span => _memory.Span; + + /// + /// Whether this struct contains buffer rented from the pool. + /// + public bool IsAllocated => Owner is not null; + + /// + /// Whether this buffer contains no data. + /// + public bool IsEmpry => _memory.IsEmpty; + + internal KcpRentedBuffer(object? owner, Memory buffer) + { + Owner = owner; + _memory = buffer; + } + + /// + /// Create the buffer from the specified . + /// + /// The memory region of this buffer. + /// The rented buffer. + public static KcpRentedBuffer FromMemory(Memory memory) + { + return new KcpRentedBuffer(null, memory); + } + + /// + /// Create the buffer from the shared array pool. + /// + /// The minimum size of the buffer required. + /// The rented buffer. + public static KcpRentedBuffer FromSharedArrayPool(int size) + { + if (size < 0) throw new ArgumentOutOfRangeException(nameof(size)); + var buffer = ArrayPool.Shared.Rent(size); + return new KcpRentedBuffer(ArrayPool.Shared, buffer); + } + + /// + /// Create the buffer from the specified array pool. + /// + /// The array pool to use. + /// The byte array rented from the specified pool. + /// The rented buffer. + public static KcpRentedBuffer FromArrayPool(ArrayPool pool, byte[] buffer) + { + if (pool is null) throw new ArgumentNullException(nameof(pool)); + if (buffer is null) throw new ArgumentNullException(nameof(buffer)); + return new KcpRentedBuffer(pool, buffer); + } + + /// + /// Create the buffer from the specified array pool. + /// + /// The array pool to use. + /// The byte array segment rented from the specified pool. + /// The rented buffer. + public static KcpRentedBuffer FromArrayPool(ArrayPool pool, ArraySegment arraySegment) + { + if (pool is null) throw new ArgumentNullException(nameof(pool)); + return new KcpRentedBuffer(pool, arraySegment); + } + + /// + /// Create the buffer from the specified array pool. + /// + /// The array pool to use. + /// The minimum size of the buffer required. + /// The rented buffer. + public static KcpRentedBuffer FromArrayPool(ArrayPool pool, int size) + { + if (pool is null) throw new ArgumentNullException(nameof(pool)); + if (size < 0) throw new ArgumentOutOfRangeException(nameof(size)); + return new KcpRentedBuffer(pool, pool.Rent(size)); + } + + /// + /// Create the buffer from the memory owner. + /// + /// The owner of this memory region. + /// The rented buffer. + public static KcpRentedBuffer FromMemoryOwner(IMemoryOwner memoryOwner) + { + if (memoryOwner is null) throw new ArgumentNullException(nameof(memoryOwner)); + return new KcpRentedBuffer(memoryOwner, memoryOwner.Memory); + } + + + /// + /// Create the buffer from the memory owner. + /// + /// The owner of this memory region. + /// The memory region of the buffer. + /// The rented buffer. + public static KcpRentedBuffer FromMemoryOwner(IDisposable memoryOwner, Memory memory) + { + if (memoryOwner is null) throw new ArgumentNullException(nameof(memoryOwner)); + return new KcpRentedBuffer(memoryOwner, memory); + } + + /// + /// Forms a slice out of the current buffer that begins at a specified index. + /// + /// The index at which to begin the slice. + /// An object that contains all elements of the current instance from start to the end of the instance. + public KcpRentedBuffer Slice(int start) + { + var memory = _memory; + if ((uint)start > (uint)memory.Length) ThrowHelper.ThrowArgumentOutOfRangeException(nameof(start)); + return new KcpRentedBuffer(Owner, memory.Slice(start)); + } + + /// + /// Forms a slice out of the current memory starting at a specified index for a specified length. + /// + /// The index at which to begin the slice. + /// The number of elements to include in the slice. + /// + /// An object that contains elements from the current instance starting at + /// . + /// + public KcpRentedBuffer Slice(int start, int length) + { + var memory = _memory; + if ((uint)start > (uint)memory.Length) ThrowHelper.ThrowArgumentOutOfRangeException(nameof(start)); + if ((uint)length > (uint)(memory.Length - start)) ThrowHelper.ThrowArgumentOutOfRangeException(nameof(length)); + return new KcpRentedBuffer(Owner, memory.Slice(start, length)); + } + + /// + public void Dispose() + { + Debug.Assert(Owner is null || Owner is ArrayPool || Owner is IDisposable); + + if (Owner is null) return; + if (Owner is ArrayPool arrayPool) + if (MemoryMarshal.TryGetArray(_memory, out ArraySegment arraySegment)) + { + arrayPool.Return(arraySegment.Array!); + return; + } + + if (Owner is IDisposable disposable) disposable.Dispose(); + } + + /// + public bool Equals(KcpRentedBuffer other) + { + return ReferenceEquals(Owner, other.Owner) && _memory.Equals(other._memory); + } + + /// + public override bool Equals(object? obj) + { + return obj is KcpRentedBuffer other && Equals(other); + } + + /// + public override int GetHashCode() + { + return Owner is null ? _memory.GetHashCode() : HashCode.Combine(RuntimeHelpers.GetHashCode(Owner), _memory); + } + + /// + public override string ToString() + { + return $"KcpSharp.KcpRentedBuffer[{_memory.Length}]"; + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpSendQueue.cs b/KcpSharp/Base/KcpSendQueue.cs new file mode 100644 index 0000000..72f2328 --- /dev/null +++ b/KcpSharp/Base/KcpSendQueue.cs @@ -0,0 +1,653 @@ +#if NEED_LINKEDLIST_SHIM +using LinkedListOfQueueItem = KcpSharp.NetstandardShim.LinkedList<(KcpSharp.KcpBuffer Data, byte Fragment)>; +using LinkedListNodeOfQueueItem = KcpSharp.NetstandardShim.LinkedListNode<(KcpSharp.KcpBuffer Data, byte Fragment)>; +#else +using LinkedListOfQueueItem = + System.Collections.Generic.LinkedList<(KianaBH.KcpSharp.Base.KcpBuffer Data, byte Fragment)>; +#endif +using System.Diagnostics; +using System.Threading.Tasks.Sources; + +namespace KianaBH.KcpSharp.Base; + +internal sealed class KcpSendQueue : IValueTaskSource, IValueTaskSource, IDisposable +{ + private readonly IKcpBufferPool _bufferPool; + private readonly KcpSendReceiveQueueItemCache _cache; + private readonly int _capacity; + private readonly int _mss; + + private readonly LinkedListOfQueueItem _queue; + private readonly bool _stream; + private readonly KcpConversationUpdateActivation _updateActivation; + + private bool _ackListNotEmpty; + + private bool _activeWait; + private ReadOnlyMemory _buffer; + private CancellationTokenRegistration _cancellationRegistration; + private CancellationToken _cancellationToken; + private bool _disposed; + private bool _forStream; + private ManualResetValueTaskSourceCore _mrvtsc; + private byte _operationMode; // 0-send 1-flush 2-wait for space + private bool _signled; + + private bool _transportClosed; + private long _unflushedBytes; + private int _waitForByteCount; + private int _waitForSegmentCount; + + public KcpSendQueue(IKcpBufferPool bufferPool, KcpConversationUpdateActivation updateActivation, bool stream, + int capacity, int mss, KcpSendReceiveQueueItemCache cache) + { + _bufferPool = bufferPool; + _updateActivation = updateActivation; + _stream = stream; + _capacity = capacity; + _mss = mss; + _cache = cache; + _mrvtsc = new ManualResetValueTaskSourceCore + { + RunContinuationsAsynchronously = true + }; + + _queue = new LinkedListOfQueueItem(); + } + + public void Dispose() + { + lock (_queue) + { + if (_disposed) return; + if (_activeWait && !_signled) + { + if (_forStream) + { + ClearPreviousOperation(); + _mrvtsc.SetException(ThrowHelper.NewTransportClosedForStreamException()); + } + else + { + ClearPreviousOperation(); + _mrvtsc.SetResult(false); + } + } + + var node = _queue.First; + while (node is not null) + { + node.ValueRef.Data.Release(); + node = node.Next; + } + + _queue.Clear(); + _disposed = true; + _transportClosed = true; + } + } + + void IValueTaskSource.GetResult(short token) + { + try + { + _mrvtsc.GetResult(token); + } + finally + { + _mrvtsc.Reset(); + lock (_queue) + { + _activeWait = false; + _signled = false; + _cancellationRegistration = default; + } + } + } + + public ValueTaskSourceStatus GetStatus(short token) + { + return _mrvtsc.GetStatus(token); + } + + public void OnCompleted(Action continuation, object? state, short token, + ValueTaskSourceOnCompletedFlags flags) + { + _mrvtsc.OnCompleted(continuation, state, token, flags); + } + + bool IValueTaskSource.GetResult(short token) + { + _cancellationRegistration.Dispose(); + try + { + return _mrvtsc.GetResult(token); + } + finally + { + _mrvtsc.Reset(); + lock (_queue) + { + _activeWait = false; + _signled = false; + _cancellationRegistration = default; + } + } + } + + public bool TryGetAvailableSpace(out int byteCount, out int segmentCount) + { + lock (_queue) + { + if (_transportClosed || _disposed) + { + byteCount = 0; + segmentCount = 0; + return false; + } + + if (_activeWait && _operationMode == 0) + { + byteCount = 0; + segmentCount = 0; + return true; + } + + GetAvailableSpaceCore(out byteCount, out segmentCount); + return true; + } + } + + private void GetAvailableSpaceCore(out int byteCount, out int segmentCount) + { + var mss = _mss; + var availableFragments = _capacity - _queue.Count; + if (availableFragments < 0) + { + byteCount = 0; + segmentCount = 0; + return; + } + + var availableBytes = availableFragments * mss; + if (_stream) + { + var last = _queue.Last; + if (last is not null) availableBytes += _mss - last.ValueRef.Data.Length; + } + + byteCount = availableBytes; + segmentCount = availableFragments; + } + + public ValueTask WaitForAvailableSpaceAsync(int minimumBytes, int minimumSegments, + CancellationToken cancellationToken) + { + short token; + lock (_queue) + { + if (_transportClosed || _disposed) + { + minimumBytes = 0; + minimumSegments = 0; + return default; + } + + if ((uint)minimumBytes > (uint)(_mss * _capacity)) + return new ValueTask( + Task.FromException(ThrowHelper.NewArgumentOutOfRangeException(nameof(minimumBytes)))); + if ((uint)minimumSegments > (uint)_capacity) + return new ValueTask( + Task.FromException(ThrowHelper.NewArgumentOutOfRangeException(nameof(minimumSegments)))); + if (_activeWait) + return new ValueTask(Task.FromException(ThrowHelper.NewConcurrentSendException())); + if (cancellationToken.IsCancellationRequested) + return new ValueTask(Task.FromCanceled(cancellationToken)); + GetAvailableSpaceCore(out var currentByteCount, out var currentSegmentCount); + if (currentByteCount >= minimumBytes && currentSegmentCount >= minimumSegments) + return new ValueTask(true); + + _activeWait = true; + Debug.Assert(!_signled); + _forStream = false; + _operationMode = 2; + _waitForByteCount = minimumBytes; + _waitForSegmentCount = minimumSegments; + _cancellationToken = cancellationToken; + token = _mrvtsc.Version; + } + + _cancellationRegistration = + cancellationToken.UnsafeRegister(state => ((KcpSendQueue?)state)!.SetCanceled(), this); + + return new ValueTask(this, token); + } + + public bool TrySend(ReadOnlySpan buffer, bool allowPartialSend, out int bytesWritten) + { + lock (_queue) + { + if (allowPartialSend && !_stream) ThrowHelper.ThrowAllowPartialSendArgumentException(); + if (_transportClosed || _disposed) + { + bytesWritten = 0; + return false; + } + + var mss = _mss; + // Make sure there is enough space. + if (!allowPartialSend) + { + var spaceAvailable = mss * (_capacity - _queue.Count); + if (spaceAvailable < 0) + { + bytesWritten = 0; + return false; + } + + if (_stream) + { + var last = _queue.Last; + if (last is not null) spaceAvailable += mss - last.ValueRef.Data.Length; + } + + if (buffer.Length > spaceAvailable) + { + bytesWritten = 0; + return false; + } + } + + // Copy buffer content. + bytesWritten = 0; + if (_stream) + { + var node = _queue.Last; + if (node is not null) + { + ref var data = ref node.ValueRef.Data; + var expand = mss - data.Length; + expand = Math.Min(expand, buffer.Length); + if (expand > 0) + { + data = data.AppendData(buffer.Slice(0, expand)); + buffer = buffer.Slice(expand); + Interlocked.Add(ref _unflushedBytes, expand); + bytesWritten = expand; + } + } + + if (buffer.IsEmpty) return true; + } + + var anySegmentAdded = false; + var count = buffer.Length <= mss ? 1 : (buffer.Length + mss - 1) / mss; + Debug.Assert(count >= 1); + while (count > 0 && _queue.Count < _capacity) + { + var fragment = --count; + + var size = buffer.Length > mss ? mss : buffer.Length; + + var owner = _bufferPool.Rent(new KcpBufferPoolRentOptions(mss, false)); + var kcpBuffer = KcpBuffer.CreateFromSpan(owner, buffer.Slice(0, size)); + buffer = buffer.Slice(size); + + _queue.AddLast(_cache.Rent(kcpBuffer, _stream ? (byte)0 : (byte)fragment)); + Interlocked.Add(ref _unflushedBytes, size); + bytesWritten += size; + anySegmentAdded = true; + } + + if (anySegmentAdded) _updateActivation.Notify(); + return anySegmentAdded; + } + } + + public ValueTask SendAsync(ReadOnlyMemory buffer, CancellationToken cancellationToken) + { + short token; + lock (_queue) + { + if (_transportClosed || _disposed) return new ValueTask(false); + if (_activeWait) + return new ValueTask(Task.FromException(ThrowHelper.NewConcurrentSendException())); + if (cancellationToken.IsCancellationRequested) + return new ValueTask(Task.FromCanceled(cancellationToken)); + + var mss = _mss; + if (_stream) + { + var node = _queue.Last; + if (node is not null) + { + ref var data = ref node.ValueRef.Data; + var expand = mss - data.Length; + expand = Math.Min(expand, buffer.Length); + if (expand > 0) + { + data = data.AppendData(buffer.Span.Slice(0, expand)); + buffer = buffer.Slice(expand); + Interlocked.Add(ref _unflushedBytes, expand); + } + } + + if (buffer.IsEmpty) return new ValueTask(true); + } + + var count = buffer.Length <= mss ? 1 : (buffer.Length + mss - 1) / mss; + Debug.Assert(count >= 1); + + if (!_stream && count > 256) + return new ValueTask(Task.FromException(ThrowHelper.NewMessageTooLargeForBufferArgument())); + + // synchronously put fragments into queue. + while (count > 0 && _queue.Count < _capacity) + { + var fragment = --count; + + var size = buffer.Length > mss ? mss : buffer.Length; + var owner = _bufferPool.Rent(new KcpBufferPoolRentOptions(mss, false)); + var kcpBuffer = KcpBuffer.CreateFromSpan(owner, buffer.Span.Slice(0, size)); + buffer = buffer.Slice(size); + + _queue.AddLast(_cache.Rent(kcpBuffer, _stream ? (byte)0 : (byte)fragment)); + Interlocked.Add(ref _unflushedBytes, size); + } + + _updateActivation.Notify(); + + if (count == 0) return new ValueTask(true); + + _activeWait = true; + Debug.Assert(!_signled); + _forStream = false; + _operationMode = 0; + _buffer = buffer; + _cancellationToken = cancellationToken; + token = _mrvtsc.Version; + } + + _cancellationRegistration = + cancellationToken.UnsafeRegister(state => ((KcpSendQueue?)state)!.SetCanceled(), this); + + return new ValueTask(this, token); + } + + public ValueTask WriteAsync(ReadOnlyMemory buffer, CancellationToken cancellationToken) + { + short token; + lock (_queue) + { + if (_transportClosed || _disposed) + return new ValueTask(Task.FromException(ThrowHelper.NewTransportClosedForStreamException())); + if (_activeWait) return new ValueTask(Task.FromException(ThrowHelper.NewConcurrentSendException())); + if (cancellationToken.IsCancellationRequested) return new ValueTask(Task.FromCanceled(cancellationToken)); + + var mss = _mss; + if (_stream) + { + var node = _queue.Last; + if (node is not null) + { + ref var data = ref node.ValueRef.Data; + var expand = mss - data.Length; + expand = Math.Min(expand, buffer.Length); + if (expand > 0) + { + data = data.AppendData(buffer.Span.Slice(0, expand)); + buffer = buffer.Slice(expand); + Interlocked.Add(ref _unflushedBytes, expand); + } + } + + if (buffer.IsEmpty) return default; + } + + var count = buffer.Length <= mss ? 1 : (buffer.Length + mss - 1) / mss; + Debug.Assert(count >= 1); + + Debug.Assert(_stream); + // synchronously put fragments into queue. + while (count > 0 && _queue.Count < _capacity) + { + var size = buffer.Length > mss ? mss : buffer.Length; + var owner = _bufferPool.Rent(new KcpBufferPoolRentOptions(mss, false)); + var kcpBuffer = KcpBuffer.CreateFromSpan(owner, buffer.Span.Slice(0, size)); + buffer = buffer.Slice(size); + + _queue.AddLast(_cache.Rent(kcpBuffer, 0)); + Interlocked.Add(ref _unflushedBytes, size); + } + + _updateActivation.Notify(); + + if (count == 0) return default; + + _activeWait = true; + Debug.Assert(!_signled); + _forStream = true; + _operationMode = 0; + _buffer = buffer; + _cancellationToken = cancellationToken; + token = _mrvtsc.Version; + } + + _cancellationRegistration = + cancellationToken.UnsafeRegister(state => ((KcpSendQueue?)state)!.SetCanceled(), this); + + return new ValueTask(this, token); + } + + public ValueTask FlushAsync(CancellationToken cancellationToken) + { + short token; + lock (_queue) + { + if (_transportClosed || _disposed) return new ValueTask(false); + if (_activeWait) + return new ValueTask(Task.FromException(ThrowHelper.NewConcurrentSendException())); + if (cancellationToken.IsCancellationRequested) + return new ValueTask(Task.FromCanceled(cancellationToken)); + + _activeWait = true; + Debug.Assert(!_signled); + _forStream = false; + _operationMode = 1; + _buffer = default; + _cancellationToken = cancellationToken; + token = _mrvtsc.Version; + } + + _cancellationRegistration = + cancellationToken.UnsafeRegister(state => ((KcpSendQueue?)state)!.SetCanceled(), this); + + return new ValueTask(this, token); + } + + public ValueTask FlushForStreamAsync(CancellationToken cancellationToken) + { + short token; + lock (_queue) + { + if (_transportClosed || _disposed) + return new ValueTask(Task.FromException(ThrowHelper.NewTransportClosedForStreamException())); + if (_activeWait) return new ValueTask(Task.FromException(ThrowHelper.NewConcurrentSendException())); + if (cancellationToken.IsCancellationRequested) return new ValueTask(Task.FromCanceled(cancellationToken)); + + _activeWait = true; + Debug.Assert(!_signled); + _forStream = true; + _operationMode = 1; + _buffer = default; + _cancellationToken = cancellationToken; + token = _mrvtsc.Version; + } + + _cancellationRegistration = + cancellationToken.UnsafeRegister(state => ((KcpSendQueue?)state)!.SetCanceled(), this); + + return new ValueTask(this, token); + } + + public bool CancelPendingOperation(Exception? innerException, CancellationToken cancellationToken) + { + lock (_queue) + { + if (_activeWait && !_signled) + { + ClearPreviousOperation(); + _mrvtsc.SetException( + ThrowHelper.NewOperationCanceledExceptionForCancelPendingSend(innerException, cancellationToken)); + return true; + } + } + + return false; + } + + private void SetCanceled() + { + lock (_queue) + { + if (_activeWait && !_signled) + { + var cancellationToken = _cancellationToken; + ClearPreviousOperation(); + _mrvtsc.SetException(new OperationCanceledException(cancellationToken)); + } + } + } + + private void ClearPreviousOperation() + { + _signled = true; + _forStream = false; + _operationMode = 0; + _buffer = default; + _waitForByteCount = default; + _waitForSegmentCount = default; + _cancellationToken = default; + } + + public bool TryDequeue(out KcpBuffer data, out byte fragment) + { + lock (_queue) + { + var node = _queue.First; + if (node is null) + { + data = default; + fragment = default; + return false; + } + + (data, fragment) = node.ValueRef; + _queue.RemoveFirst(); + node.ValueRef = default; + _cache.Return(node); + + MoveOneSegmentIn(); + CheckForAvailableSpace(); + return true; + } + } + + public void NotifyAckListChanged(bool itemsListNotEmpty) + { + lock (_queue) + { + if (_transportClosed || _disposed) return; + + _ackListNotEmpty = itemsListNotEmpty; + TryCompleteFlush(Interlocked.Read(ref _unflushedBytes)); + } + } + + private void MoveOneSegmentIn() + { + if (_activeWait && !_signled && _operationMode == 0) + { + var buffer = _buffer; + var mss = _mss; + var count = buffer.Length <= mss ? 1 : (buffer.Length + mss - 1) / mss; + + var size = buffer.Length > mss ? mss : buffer.Length; + var owner = _bufferPool.Rent(new KcpBufferPoolRentOptions(mss, false)); + var kcpBuffer = KcpBuffer.CreateFromSpan(owner, buffer.Span.Slice(0, size)); + _buffer = buffer.Slice(size); + + _queue.AddLast(_cache.Rent(kcpBuffer, _stream ? (byte)0 : (byte)(count - 1))); + Interlocked.Add(ref _unflushedBytes, size); + + if (count == 1) + { + ClearPreviousOperation(); + _mrvtsc.SetResult(true); + } + } + } + + private void CheckForAvailableSpace() + { + if (_activeWait && !_signled && _operationMode == 2) + { + GetAvailableSpaceCore(out var byteCount, out var segmentCount); + if (byteCount >= _waitForByteCount && segmentCount >= _waitForSegmentCount) + { + ClearPreviousOperation(); + _mrvtsc.SetResult(true); + } + } + } + + private void TryCompleteFlush(long unflushedBytes) + { + if (_activeWait && !_signled && _operationMode == 1) + if (_queue.Last is null && unflushedBytes == 0 && !_ackListNotEmpty) + { + ClearPreviousOperation(); + _mrvtsc.SetResult(true); + } + } + + public void SubtractUnflushedBytes(int size) + { + var unflushedBytes = Interlocked.Add(ref _unflushedBytes, -size); + if (unflushedBytes == 0) + lock (_queue) + { + TryCompleteFlush(0); + } + } + + public long GetUnflushedBytes() + { + if (_transportClosed || _disposed) return 0; + return Interlocked.Read(ref _unflushedBytes); + } + + public void SetTransportClosed() + { + lock (_queue) + { + if (_transportClosed || _disposed) return; + if (_activeWait && !_signled) + { + if (_forStream) + { + ClearPreviousOperation(); + _mrvtsc.SetException(ThrowHelper.NewTransportClosedForStreamException()); + } + else + { + ClearPreviousOperation(); + _mrvtsc.SetResult(false); + } + } + + _transportClosed = true; + Interlocked.Exchange(ref _unflushedBytes, 0); + } + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpSendReceiveBufferItem.cs b/KcpSharp/Base/KcpSendReceiveBufferItem.cs new file mode 100644 index 0000000..f3e6d17 --- /dev/null +++ b/KcpSharp/Base/KcpSendReceiveBufferItem.cs @@ -0,0 +1,8 @@ +namespace KianaBH.KcpSharp.Base; + +internal struct KcpSendReceiveBufferItem +{ + public KcpBuffer Data; + public KcpPacketHeader Segment; + public KcpSendSegmentStats Stats; +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpSendReceiveBufferItemCache.cs b/KcpSharp/Base/KcpSendReceiveBufferItemCache.cs new file mode 100644 index 0000000..e25fe2a --- /dev/null +++ b/KcpSharp/Base/KcpSendReceiveBufferItemCache.cs @@ -0,0 +1,68 @@ +#if NEED_LINKEDLIST_SHIM +using LinkedListOfBufferItem = KcpSharp.NetstandardShim.LinkedList; +using LinkedListNodeOfBufferItem = KcpSharp.NetstandardShim.LinkedListNode; +#else +using LinkedListNodeOfBufferItem = + System.Collections.Generic.LinkedListNode; +using LinkedListOfBufferItem = + System.Collections.Generic.LinkedList; +#endif + +namespace KianaBH.KcpSharp.Base; + +internal struct KcpSendReceiveBufferItemCache +{ + private LinkedListOfBufferItem _items; + private SpinLock _lock; + + public static KcpSendReceiveBufferItemCache Create() + { + return new KcpSendReceiveBufferItemCache + { + _items = new LinkedListOfBufferItem(), + _lock = new SpinLock() + }; + } + + public LinkedListNodeOfBufferItem Allocate(in KcpSendReceiveBufferItem item) + { + var lockAcquired = false; + try + { + _lock.Enter(ref lockAcquired); + + var node = _items.First; + if (node is null) + { + node = new LinkedListNodeOfBufferItem(item); + } + else + { + _items.Remove(node); + node.ValueRef = item; + } + + return node; + } + finally + { + if (lockAcquired) _lock.Exit(); + } + } + + public void Return(LinkedListNodeOfBufferItem node) + { + var lockAcquired = false; + try + { + _lock.Enter(ref lockAcquired); + + node.ValueRef = default; + _items.AddLast(node); + } + finally + { + if (lockAcquired) _lock.Exit(); + } + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpSendReceiveQueueItemCache.cs b/KcpSharp/Base/KcpSendReceiveQueueItemCache.cs new file mode 100644 index 0000000..8034420 --- /dev/null +++ b/KcpSharp/Base/KcpSendReceiveQueueItemCache.cs @@ -0,0 +1,76 @@ +#if NEED_LINKEDLIST_SHIM +using LinkedListOfQueueItem = KcpSharp.NetstandardShim.LinkedList<(KcpSharp.KcpBuffer Data, byte Fragment)>; +using LinkedListNodeOfQueueItem = KcpSharp.NetstandardShim.LinkedListNode<(KcpSharp.KcpBuffer Data, byte Fragment)>; +#else +using LinkedListNodeOfQueueItem = + System.Collections.Generic.LinkedListNode<(KianaBH.KcpSharp.Base.KcpBuffer Data, byte Fragment + )>; +using LinkedListOfQueueItem = + System.Collections.Generic.LinkedList<(KianaBH.KcpSharp.Base.KcpBuffer Data, byte Fragment)>; +#endif + +namespace KianaBH.KcpSharp.Base; + +internal sealed class KcpSendReceiveQueueItemCache +{ + private readonly LinkedListOfQueueItem _list = new(); + private SpinLock _lock; + + public LinkedListNodeOfQueueItem Rent(in KcpBuffer buffer, byte fragment) + { + var lockTaken = false; + try + { + _lock.Enter(ref lockTaken); + + var node = _list.First; + if (node is null) + { + node = new LinkedListNodeOfQueueItem((buffer, fragment)); + } + else + { + node.ValueRef = (buffer, fragment); + _list.RemoveFirst(); + } + + return node; + } + finally + { + if (lockTaken) _lock.Exit(); + } + } + + public void Return(LinkedListNodeOfQueueItem node) + { + node.ValueRef = default; + + var lockTaken = false; + try + { + _lock.Enter(ref lockTaken); + + _list.AddLast(node); + } + finally + { + if (lockTaken) _lock.Exit(); + } + } + + public void Clear() + { + var lockTaken = false; + try + { + _lock.Enter(ref lockTaken); + + _list.Clear(); + } + finally + { + if (lockTaken) _lock.Exit(); + } + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpSendSegmentStats.cs b/KcpSharp/Base/KcpSendSegmentStats.cs new file mode 100644 index 0000000..6938145 --- /dev/null +++ b/KcpSharp/Base/KcpSendSegmentStats.cs @@ -0,0 +1,17 @@ +namespace KianaBH.KcpSharp.Base; + +internal readonly struct KcpSendSegmentStats +{ + public KcpSendSegmentStats(uint resendTimestamp, uint rto, uint fastAck, uint transmitCount) + { + ResendTimestamp = resendTimestamp; + Rto = rto; + FastAck = fastAck; + TransmitCount = transmitCount; + } + + public uint ResendTimestamp { get; } + public uint Rto { get; } + public uint FastAck { get; } + public uint TransmitCount { get; } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpSocketTransport.cs b/KcpSharp/Base/KcpSocketTransport.cs new file mode 100644 index 0000000..8909cd7 --- /dev/null +++ b/KcpSharp/Base/KcpSocketTransport.cs @@ -0,0 +1,123 @@ +using System.Net; +using System.Net.Sockets; + +namespace KianaBH.KcpSharp.Base; + +/// +/// Helper methods to create socket transports for KCP conversations. +/// +public static class KcpSocketTransport +{ + /// + /// Create a socket transport for KCP covnersation. + /// + /// The udp listener instance. + /// The remote endpoint. + /// The conversation ID. + /// The options of the . + /// The created socket transport instance. + public static IKcpTransport CreateConversation(UdpClient listener, IPEndPoint endPoint, + long conversationId, KcpConversationOptions? options) + { + if (listener is null) throw new ArgumentNullException(nameof(listener)); + if (endPoint is null) throw new ArgumentNullException(nameof(endPoint)); + + return new KcpSocketTransportForConversation(listener, endPoint, conversationId, options); + } + + /// + /// Create a socket transport for KCP covnersation with no conversation ID. + /// + /// The udp listener instance. + /// The remote endpoint. + /// The options of the . + /// The created socket transport instance. + public static IKcpTransport CreateConversation(UdpClient listener, IPEndPoint endPoint, + KcpConversationOptions? options) + { + if (listener is null) throw new ArgumentNullException(nameof(listener)); + if (endPoint is null) throw new ArgumentNullException(nameof(endPoint)); + + return new KcpSocketTransportForConversation(listener, endPoint, null, options); + } + + /// + /// Create a socket transport for raw channel. + /// + /// The udp listener instance. + /// The remote endpoint. + /// The conversation ID. + /// The options of the . + /// The created socket transport instance. + public static IKcpTransport CreateRawChannel(UdpClient listener, IPEndPoint endPoint, + long conversationId, KcpRawChannelOptions? options) + { + if (listener is null) throw new ArgumentNullException(nameof(listener)); + if (endPoint is null) throw new ArgumentNullException(nameof(endPoint)); + + return new KcpSocketTransportForRawChannel(listener, endPoint, conversationId, options); + } + + /// + /// Create a socket transport for raw channel with no conversation ID. + /// + /// The udp listener instance. + /// The remote endpoint. + /// The options of the . + /// The created socket transport instance. + public static IKcpTransport CreateRawChannel(UdpClient listener, IPEndPoint endPoint, + KcpRawChannelOptions? options) + { + if (listener is null) throw new ArgumentNullException(nameof(listener)); + if (endPoint is null) throw new ArgumentNullException(nameof(endPoint)); + + return new KcpSocketTransportForRawChannel(listener, endPoint, null, options); + } + + /// + /// Create a socket transport for multiplex connection. + /// + /// The udp listener instance. + /// The maximum packet size that can be transmitted over the socket. + /// + public static IKcpTransport CreateMultiplexConnection(UdpClient listener, int mtu) + { + if (listener is null) throw new ArgumentNullException(nameof(listener)); + + return new KcpSocketTransportForMultiplexConnection(listener, mtu); + } + + /// + /// Create a socket transport for multiplex connection. + /// + /// The type of the user state. + /// The udp listener instance. + /// The maximum packet size that can be transmitted over the socket. + /// + public static IKcpTransport> CreateMultiplexConnection(UdpClient listener, + IPEndPoint endPoint, int mtu) + { + if (listener is null) throw new ArgumentNullException(nameof(listener)); + if (endPoint is null) throw new ArgumentNullException(nameof(endPoint)); + + return new KcpSocketTransportForMultiplexConnection(listener, mtu); + } + + /// + /// Create a socket transport for multiplex connection. + /// + /// The type of the user state. + /// The udp listener instance. + /// The remote endpoint. + /// The maximum packet size that can be transmitted over the socket. + /// The action to invoke when state object is removed. + /// + public static IKcpTransport> CreateMultiplexConnection(UdpClient listener, + EndPoint endPoint, int mtu, Action? disposeAction) + { + if (listener is null) throw new ArgumentNullException(nameof(listener)); + if (endPoint is null) throw new ArgumentNullException(nameof(endPoint)); + + return new KcpSocketTransportForMultiplexConnection(listener, mtu, disposeAction); + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpSocketTransportForConversation.cs b/KcpSharp/Base/KcpSocketTransportForConversation.cs new file mode 100644 index 0000000..bd72aac --- /dev/null +++ b/KcpSharp/Base/KcpSocketTransportForConversation.cs @@ -0,0 +1,48 @@ +using System.Net; +using System.Net.Sockets; + +namespace KianaBH.KcpSharp.Base; + +/// +/// Socket transport for KCP conversation. +/// +internal sealed class KcpSocketTransportForConversation : KcpSocketTransport, + IKcpTransport +{ + private readonly long? _conversationId; + private readonly KcpConversationOptions? _options; + private readonly IPEndPoint _remoteEndPoint; + + private Func, object?, bool>? _exceptionHandler; + private object? _exceptionHandlerState; + + + internal KcpSocketTransportForConversation(UdpClient listener, IPEndPoint endPoint, long? conversationId, + KcpConversationOptions? options) + : base(listener, options?.Mtu ?? KcpConversationOptions.MtuDefaultValue) + { + _conversationId = conversationId; + _remoteEndPoint = endPoint; + _options = options; + } + + public void SetExceptionHandler(Func, object?, bool> handler, + object? state) + { + _exceptionHandler = handler; + _exceptionHandlerState = state; + } + + protected override KcpConversation Activate() + { + return _conversationId.HasValue + ? new KcpConversation(_remoteEndPoint, this, _conversationId.GetValueOrDefault(), _options) + : new KcpConversation(_remoteEndPoint, this, _options); + } + + protected override bool HandleException(Exception ex) + { + if (_exceptionHandler is not null) return _exceptionHandler.Invoke(ex, this, _exceptionHandlerState); + return false; + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpSocketTransportForMultiplexConnection.cs b/KcpSharp/Base/KcpSocketTransportForMultiplexConnection.cs new file mode 100644 index 0000000..c2af6bd --- /dev/null +++ b/KcpSharp/Base/KcpSocketTransportForMultiplexConnection.cs @@ -0,0 +1,42 @@ +using System.Net.Sockets; + +namespace KianaBH.KcpSharp.Base; + +internal sealed class KcpSocketTransportForMultiplexConnection : KcpSocketTransport>, + IKcpTransport> +{ + private readonly Action? _disposeAction; + private Func>, object?, bool>? _exceptionHandler; + private object? _exceptionHandlerState; + + internal KcpSocketTransportForMultiplexConnection(UdpClient listener, int mtu) + : base(listener, mtu) + { + } + + internal KcpSocketTransportForMultiplexConnection(UdpClient listener, int mtu, Action? disposeAction) + : base(listener, mtu) + { + _disposeAction = disposeAction; + } + + IKcpMultiplexConnection IKcpTransport>.Connection => Connection; + + public void SetExceptionHandler(Func>, object?, bool> handler, + object? state) + { + _exceptionHandler = handler; + _exceptionHandlerState = state; + } + + protected override KcpMultiplexConnection Activate() + { + return new KcpMultiplexConnection(this, _disposeAction); + } + + protected override bool HandleException(Exception ex) + { + if (_exceptionHandler is not null) return _exceptionHandler.Invoke(ex, this, _exceptionHandlerState); + return false; + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpSocketTransportForRawChannel.cs b/KcpSharp/Base/KcpSocketTransportForRawChannel.cs new file mode 100644 index 0000000..4395c86 --- /dev/null +++ b/KcpSharp/Base/KcpSocketTransportForRawChannel.cs @@ -0,0 +1,43 @@ +using System.Net; +using System.Net.Sockets; + +namespace KianaBH.KcpSharp.Base; + +internal sealed class KcpSocketTransportForRawChannel : KcpSocketTransport, IKcpTransport +{ + private readonly long? _conversationId; + private readonly KcpRawChannelOptions? _options; + private readonly IPEndPoint _remoteEndPoint; + + private Func, object?, bool>? _exceptionHandler; + private object? _exceptionHandlerState; + + + internal KcpSocketTransportForRawChannel(UdpClient listener, IPEndPoint endPoint, long? conversationId, + KcpRawChannelOptions? options) + : base(listener, options?.Mtu ?? KcpConversationOptions.MtuDefaultValue) + { + _conversationId = conversationId; + _remoteEndPoint = endPoint; + _options = options; + } + + public void SetExceptionHandler(Func, object?, bool> handler, object? state) + { + _exceptionHandler = handler; + _exceptionHandlerState = state; + } + + protected override KcpRawChannel Activate() + { + return _conversationId.HasValue + ? new KcpRawChannel(_remoteEndPoint, this, _conversationId.GetValueOrDefault(), _options) + : new KcpRawChannel(_remoteEndPoint, this, _options); + } + + protected override bool HandleException(Exception ex) + { + if (_exceptionHandler is not null) return _exceptionHandler.Invoke(ex, this, _exceptionHandlerState); + return false; + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpSocketTransportOfT.cs b/KcpSharp/Base/KcpSocketTransportOfT.cs new file mode 100644 index 0000000..20e6922 --- /dev/null +++ b/KcpSharp/Base/KcpSocketTransportOfT.cs @@ -0,0 +1,199 @@ +using KianaBH.Util; +using System.Buffers; +using System.Net; +using System.Net.Sockets; + +namespace KianaBH.KcpSharp.Base; + +/// +/// A Socket transport for upper-level connections. +/// +/// +public abstract class KcpSocketTransport : IKcpTransport, IDisposable where T : class, IKcpConversation +{ + private readonly int _mtu; + private readonly UdpClient _udpListener; + private T? _connection; + private CancellationTokenSource? _cts; + private bool _disposed; + + /// + /// Construct a socket transport with the specified socket and remote endpoint. + /// + /// The socket instance. + /// The maximum packet size that can be transmitted. + protected KcpSocketTransport(UdpClient listener, int mtu) + { + _udpListener = listener ?? throw new ArgumentNullException(nameof(listener)); + _mtu = mtu; + if (mtu < 50) throw new ArgumentOutOfRangeException(nameof(mtu)); + } + + /// + /// Get the upper-level connection instace. If Start is not called or the transport is closed, + /// will be thrown. + /// + /// Start is not called or the transport is closed. + public T Connection => _connection ?? throw new InvalidOperationException(); + + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + public ValueTask SendPacketAsync(Memory packet, IPEndPoint endpoint, + CancellationToken cancellationToken = default) + { + if (_disposed) return default; + if (packet.Length > _mtu) return default; + + return new ValueTask(_udpListener.SendAsync(packet.ToArray(), endpoint, cancellationToken).AsTask()); + } + + /// + /// Create the upper-level connection instance. + /// + /// The upper-level connection instance. + protected abstract T Activate(); + + /// + /// Allocate a block of memory used to receive from socket. + /// + /// The minimum size of the buffer. + /// The allocated memory buffer. + protected virtual IMemoryOwner AllocateBuffer(int size) + { +#if NEED_POH_SHIM + return MemoryPool.Shared.Rent(size); +#else + return new ArrayMemoryOwner(GC.AllocateUninitializedArray(size, true)); +#endif + } + + /// + /// Handle exception thrown when receiving from remote endpoint. + /// + /// The exception thrown. + /// Whether error should be ignored. + protected virtual bool HandleException(Exception ex) + { + return false; + } + + /// + /// Create the upper-level connection and start pumping packets from the socket to the upper-level connection. + /// + public void Start() + { + if (_disposed) throw new ObjectDisposedException(nameof(KcpSocketTransport)); + if (_connection is not null) throw new InvalidOperationException(); + + _connection = Activate(); + if (_connection is null) throw new InvalidOperationException(); + _cts = new CancellationTokenSource(); + RunReceiveLoop(); + } + + private async void RunReceiveLoop() + { + var cancellationToken = _cts?.Token ?? new CancellationToken(true); + IKcpConversation? connection = _connection; + if (connection is null || cancellationToken.IsCancellationRequested) return; + + using var memoryOwner = AllocateBuffer(_mtu); + try + { + while (!cancellationToken.IsCancellationRequested) + { + var bytesReceived = 0; + var error = false; + UdpReceiveResult result = default; + try + { + result = await _udpListener.ReceiveAsync(cancellationToken); + bytesReceived = result.Buffer.Length; + } + catch + { + } + + if (bytesReceived != 0 && bytesReceived <= _mtu) + { + if (bytesReceived == KcpConnection.HANDSHAKE_SIZE) + await KcpListener.HandleHandshake(result); + else if (!error) + await connection.InputPakcetAsync(result, cancellationToken).ConfigureAwait(false); + } + } + } + catch (OperationCanceledException) + { + // Do nothing + } + catch (Exception ex) + { + HandleExceptionWrapper(ex); + } + } + + private bool HandleExceptionWrapper(Exception ex) + { + bool result; + try + { + new Logger("KcpServer").Error("KCP Error:", ex); + result = HandleException(ex); + } + catch + { + result = false; + } + + _connection?.SetTransportClosed(); + var cts = Interlocked.Exchange(ref _cts, null); + if (cts is not null) + { + cts.Cancel(); + cts.Dispose(); + } + + return result; + } + + /// + /// Dispose all the managed and the unmanaged resources used by this instance. + /// + /// If managed resources should be disposed. + protected virtual void Dispose(bool disposing) + { + if (!_disposed) + { + if (disposing) + { + var cts = Interlocked.Exchange(ref _cts, null); + if (cts is not null) + { + cts.Cancel(); + cts.Dispose(); + } + + _connection?.Dispose(); + } + + _connection = null; + _cts = null; + _disposed = true; + } + } + + /// + /// Dispose the unmanaged resources used by this instance. + /// + ~KcpSocketTransport() + { + Dispose(false); + } +} \ No newline at end of file diff --git a/KcpSharp/Base/KcpStream.cs b/KcpSharp/Base/KcpStream.cs new file mode 100644 index 0000000..044a582 --- /dev/null +++ b/KcpSharp/Base/KcpStream.cs @@ -0,0 +1,176 @@ +namespace KianaBH.KcpSharp.Base; + +/// +/// A stream wrapper of . +/// +public sealed class KcpStream : Stream +{ + private readonly bool _ownsConversation; + private KcpConversation? _conversation; + + /// + /// Create a stream wrapper over an existing instance. + /// + /// The conversation instance. It must be in stream mode. + /// + /// Whether to dispose the instance when + /// is disposed. + /// + public KcpStream(KcpConversation conversation, bool ownsConversation) + { + if (conversation is null) throw new ArgumentNullException(nameof(conversation)); + if (!conversation.StreamMode) + throw new ArgumentException("Non-stream mode conversation is not supported.", nameof(conversation)); + _conversation = conversation; + _ownsConversation = ownsConversation; + } + + /// + public override bool CanRead => true; + + /// + public override bool CanSeek => false; + + /// + public override bool CanWrite => true; + + /// + /// The length of the stream. This always throws . + /// + public override long Length => throw new NotSupportedException(); + + /// + /// The position of the stream. This always throws . + /// + public override long Position + { + get => throw new NotSupportedException(); + set => throw new NotSupportedException(); + } + + /// + /// Indicates data is available on the stream to be read. This property checks to see if at least one byte of data is + /// currently available + /// + public bool DataAvailable + { + get + { + if (_conversation is null) ThrowHelper.ThrowObjectDisposedForKcpStreamException(); + return _conversation!.TryPeek(out var result) && result.BytesReceived != 0; + } + } + + /// + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException(); + } + + /// + public override void SetLength(long value) + { + throw new NotSupportedException(); + } + + /// + public override void Flush() + { + throw new NotSupportedException(); + } + + /// + public override Task FlushAsync(CancellationToken cancellationToken) + { + if (_conversation is null) return Task.FromException(ThrowHelper.NewObjectDisposedForKcpStreamException()); + return _conversation!.FlushAsync(cancellationToken).AsTask(); + } + + /// + public override int Read(byte[] buffer, int offset, int count) + { + throw new NotSupportedException(); + } + + /// + public override void Write(byte[] buffer, int offset, int count) + { + throw new NotSupportedException(); + } + + /// + public override Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) + { + if (_conversation is null) return Task.FromException(new ObjectDisposedException(nameof(KcpStream))); + return _conversation.ReadAsync(buffer.AsMemory(offset, count), cancellationToken).AsTask(); + } + + /// + public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) + { + if (_conversation is null) return Task.FromException(new ObjectDisposedException(nameof(KcpStream))); + return _conversation.WriteAsync(buffer.AsMemory(offset, count), cancellationToken).AsTask(); + } + + /// + public override int ReadByte() + { + throw new NotSupportedException(); + } + + /// + public override void WriteByte(byte value) + { + throw new NotSupportedException(); + } + + /// + protected override void Dispose(bool disposing) + { + if (disposing && _ownsConversation) _conversation?.Dispose(); + _conversation = null; + base.Dispose(disposing); + } + +#if !NO_FAST_SPAN + /// + public override ValueTask ReadAsync(Memory buffer, CancellationToken cancellationToken = default) + { + if (_conversation is null) + return new ValueTask(Task.FromException(new ObjectDisposedException(nameof(KcpStream)))); + return _conversation.ReadAsync(buffer, cancellationToken); + } + + /// + public override ValueTask WriteAsync(ReadOnlyMemory buffer, CancellationToken cancellationToken = default) + { + if (_conversation is null) + return new ValueTask(Task.FromException(new ObjectDisposedException(nameof(KcpStream)))); + return _conversation.WriteAsync(buffer, cancellationToken); + } + + /// + public override ValueTask DisposeAsync() + { + if (_conversation is not null) + { + _conversation.Dispose(); + _conversation = null; + } + + return base.DisposeAsync(); + } + + /// + public override int Read(Span buffer) + { + throw new NotSupportedException(); + } + + /// + public override void Write(ReadOnlySpan buffer) + { + throw new NotSupportedException(); + } +#endif +} \ No newline at end of file diff --git a/KcpSharp/Base/NetstandardShim/AwaitableSocketAsyncEventArgs.cs b/KcpSharp/Base/NetstandardShim/AwaitableSocketAsyncEventArgs.cs new file mode 100644 index 0000000..5a6d8ce --- /dev/null +++ b/KcpSharp/Base/NetstandardShim/AwaitableSocketAsyncEventArgs.cs @@ -0,0 +1,36 @@ +#if NEED_SOCKET_SHIM +using System; +using System.Net.Sockets; +using System.Threading.Tasks; +using System.Threading.Tasks.Sources; + +namespace KcpSharp +{ + internal class AwaitableSocketAsyncEventArgs : SocketAsyncEventArgs, IValueTaskSource + { + private ManualResetValueTaskSourceCore _mrvtsc = + new ManualResetValueTaskSourceCore { RunContinuationsAsynchronously = true }; + + void IValueTaskSource.GetResult(short token) => _mrvtsc.GetResult(token); + ValueTaskSourceStatus IValueTaskSource.GetStatus(short token) => _mrvtsc.GetStatus(token); + void IValueTaskSource.OnCompleted(Action continuation, object? state, short token, ValueTaskSourceOnCompletedFlags flags) + => _mrvtsc.OnCompleted(continuation, state, token, flags); + + protected override void OnCompleted(SocketAsyncEventArgs e) + { + _mrvtsc.SetResult(true); + } + + public ValueTask WaitAsync() + { + return new ValueTask(this, _mrvtsc.Version); + } + + public void Reset() + { + _mrvtsc.Reset(); + } + } +} + +#endif \ No newline at end of file diff --git a/KcpSharp/Base/NetstandardShim/CancellationTokenShim.cs b/KcpSharp/Base/NetstandardShim/CancellationTokenShim.cs new file mode 100644 index 0000000..a6d202c --- /dev/null +++ b/KcpSharp/Base/NetstandardShim/CancellationTokenShim.cs @@ -0,0 +1,12 @@ +#if NEED_CANCELLATIONTOKEN_SHIM +namespace System.Threading +{ + internal static class CancellationTokenShim + { + public static CancellationTokenRegistration UnsafeRegister(this CancellationToken cancellationToken, Action callback, object? state) + => cancellationToken.Register(callback, state); + } +} + + +#endif \ No newline at end of file diff --git a/KcpSharp/Base/NetstandardShim/LinkedListNetstandard.cs b/KcpSharp/Base/NetstandardShim/LinkedListNetstandard.cs new file mode 100644 index 0000000..a291d5b --- /dev/null +++ b/KcpSharp/Base/NetstandardShim/LinkedListNetstandard.cs @@ -0,0 +1,212 @@ +#if NEED_LINKEDLIST_SHIM +using System; +using System.Diagnostics; + +namespace KcpSharp.NetstandardShim +{ + internal class LinkedList + { + // This LinkedList is a doubly-Linked circular list. + internal LinkedListNode? head; + internal int count; + internal int version; + + public int Count + { + get { return count; } + } + + public LinkedListNode? First + { + get { return head; } + } + + public LinkedListNode? Last + { + get { return head == null ? null : head.prev; } + } + + public void AddAfter(LinkedListNode node, LinkedListNode newNode) + { + ValidateNode(node); + ValidateNewNode(newNode); + InternalInsertNodeBefore(node.next!, newNode); + newNode.list = this; + } + + public void AddBefore(LinkedListNode node, LinkedListNode newNode) + { + ValidateNode(node); + ValidateNewNode(newNode); + InternalInsertNodeBefore(node, newNode); + newNode.list = this; + if (node == head) + { + head = newNode; + } + } + + public void AddFirst(LinkedListNode node) + { + ValidateNewNode(node); + + if (head == null) + { + InternalInsertNodeToEmptyList(node); + } + else + { + InternalInsertNodeBefore(head, node); + head = node; + } + node.list = this; + } + + public void AddLast(LinkedListNode node) + { + ValidateNewNode(node); + + if (head == null) + { + InternalInsertNodeToEmptyList(node); + } + else + { + InternalInsertNodeBefore(head, node); + } + node.list = this; + } + + public void Clear() + { + LinkedListNode? current = head; + while (current != null) + { + LinkedListNode temp = current; + current = current.Next; // use Next the instead of "next", otherwise it will loop forever + temp.Invalidate(); + } + + head = null; + count = 0; + version++; + } + + public void Remove(LinkedListNode node) + { + ValidateNode(node); + InternalRemoveNode(node); + } + + public void RemoveFirst() + { + if (head == null) { throw new InvalidOperationException(); } + InternalRemoveNode(head); + } + + private void InternalInsertNodeBefore(LinkedListNode node, LinkedListNode newNode) + { + newNode.next = node; + newNode.prev = node.prev; + node.prev!.next = newNode; + node.prev = newNode; + version++; + count++; + } + + private void InternalInsertNodeToEmptyList(LinkedListNode newNode) + { + Debug.Assert(head == null && count == 0, "LinkedList must be empty when this method is called!"); + newNode.next = newNode; + newNode.prev = newNode; + head = newNode; + version++; + count++; + } + + internal void InternalRemoveNode(LinkedListNode node) + { + Debug.Assert(node.list == this, "Deleting the node from another list!"); + Debug.Assert(head != null, "This method shouldn't be called on empty list!"); + if (node.next == node) + { + Debug.Assert(count == 1 && head == node, "this should only be true for a list with only one node"); + head = null; + } + else + { + node.next!.prev = node.prev; + node.prev!.next = node.next; + if (head == node) + { + head = node.next; + } + } + node.Invalidate(); + count--; + version++; + } + + internal static void ValidateNewNode(LinkedListNode node) + { + if (node == null) + { + throw new ArgumentNullException(nameof(node)); + } + + if (node.list != null) + { + throw new InvalidOperationException(); + } + } + + internal void ValidateNode(LinkedListNode node) + { + if (node == null) + { + throw new ArgumentNullException(nameof(node)); + } + + if (node.list != this) + { + throw new InvalidOperationException(); + } + } + } + + // Note following class is not serializable since we customized the serialization of LinkedList. + internal sealed class LinkedListNode + { + internal LinkedList? list; + internal LinkedListNode? next; + internal LinkedListNode? prev; + internal T item; + + public LinkedListNode(T value) + { + item = value; + } + + public LinkedListNode? Next + { + get { return next == null || next == list!.head ? null : next; } + } + + public LinkedListNode? Previous + { + get { return prev == null || this == list!.head ? null : prev; } + } + + /// Gets a reference to the value held by the node. + public ref T ValueRef => ref item; + + internal void Invalidate() + { + list = null; + next = null; + prev = null; + } + } +} + +#endif \ No newline at end of file diff --git a/KcpSharp/Base/NetstandardShim/TaskCompletionSource.cs b/KcpSharp/Base/NetstandardShim/TaskCompletionSource.cs new file mode 100644 index 0000000..f80a248 --- /dev/null +++ b/KcpSharp/Base/NetstandardShim/TaskCompletionSource.cs @@ -0,0 +1,10 @@ +#if NEED_TCS_SHIM +namespace System.Threading.Tasks +{ + internal class TaskCompletionSource : TaskCompletionSource + { + public void TrySetResult() => TrySetResult(true); + } +} + +#endif \ No newline at end of file diff --git a/KcpSharp/Base/ThrowHelper.cs b/KcpSharp/Base/ThrowHelper.cs new file mode 100644 index 0000000..853d7df --- /dev/null +++ b/KcpSharp/Base/ThrowHelper.cs @@ -0,0 +1,84 @@ +namespace KianaBH.KcpSharp.Base; + +internal static class ThrowHelper +{ + public static void ThrowArgumentOutOfRangeException(string paramName) + { + throw new ArgumentOutOfRangeException(paramName); + } + + public static void ThrowTransportClosedForStreanException() + { + throw new IOException("The underlying transport is closed."); + } + + public static Exception NewMessageTooLargeForBufferArgument() + { + return new ArgumentException("Message is too large.", "buffer"); + } + + public static Exception NewBufferTooSmallForBufferArgument() + { + return new ArgumentException("Buffer is too small.", "buffer"); + } + + public static Exception ThrowBufferTooSmall() + { + throw new ArgumentException("Buffer is too small.", "buffer"); + } + + public static Exception ThrowAllowPartialSendArgumentException() + { + throw new ArgumentException("allowPartialSend should not be set to true in non-stream mode.", + "allowPartialSend"); + } + + public static Exception NewArgumentOutOfRangeException(string paramName) + { + return new ArgumentOutOfRangeException(paramName); + } + + public static Exception NewConcurrentSendException() + { + return new InvalidOperationException("Concurrent send operations are not allowed."); + } + + public static Exception NewConcurrentReceiveException() + { + return new InvalidOperationException("Concurrent receive operations are not allowed."); + } + + public static Exception NewTransportClosedForStreamException() + { + throw new IOException("The underlying transport is closed."); + } + + public static Exception NewOperationCanceledExceptionForCancelPendingSend(Exception? innerException, + CancellationToken cancellationToken) + { + return new OperationCanceledException("This operation is cancelled by a call to CancelPendingSend.", + innerException, cancellationToken); + } + + public static Exception NewOperationCanceledExceptionForCancelPendingReceive(Exception? innerException, + CancellationToken cancellationToken) + { + return new OperationCanceledException("This operation is cancelled by a call to CancelPendingReceive.", + innerException, cancellationToken); + } + + public static void ThrowConcurrentReceiveException() + { + throw new InvalidOperationException("Concurrent receive operations are not allowed."); + } + + public static Exception NewObjectDisposedForKcpStreamException() + { + return new ObjectDisposedException(nameof(KcpStream)); + } + + public static void ThrowObjectDisposedForKcpStreamException() + { + throw new ObjectDisposedException(nameof(KcpStream)); + } +} \ No newline at end of file diff --git a/KcpSharp/BasePacket.cs b/KcpSharp/BasePacket.cs new file mode 100644 index 0000000..d1ecbe1 --- /dev/null +++ b/KcpSharp/BasePacket.cs @@ -0,0 +1,67 @@ +using KianaBH.Util.Extensions; +using Google.Protobuf; + +namespace KianaBH.KcpSharp; + +public class BasePacket(ushort cmdId) +{ + private const uint HEADER_CONST = 0x01234567; + private const uint TAIL_CONST = 0x89ABCDEF; + + private uint HeadMagic { get; set; } + private ushort PacketVersion { get; set; } = 1; + private ushort ClientVersion { get; set; } + private uint PacketId { get; set; } + public uint UserId { get; set; } + private uint UserIp { get; set; } + private uint Sign { get; set; } + private ushort SignType { get; set; } + public ushort CmdId { get; set; } = cmdId; + private ushort HeaderLength { get; set; } + private uint BodyLength { get; set; } + private byte[] Header { get; set; } = []; + public byte[] Body { get; set; } = []; + private uint TailMagic { get; set; } + + public void SetData(byte[] data) + { + Body = data; + } + + public void SetData(IMessage message) + { + Body = message.ToByteArray(); + } + + public void SetData(string base64) + { + SetData(Convert.FromBase64String(base64)); + } + + public byte[] BuildPacket() + { + using MemoryStream? ms = new(); + using BinaryWriter? bw = new(ms); + + bw.WriteUInt32BE(HEADER_CONST); + bw.WriteUInt16BE(PacketVersion); + bw.WriteUInt16BE(ClientVersion); + bw.WriteUInt32BE(PacketId); + bw.WriteUInt32BE(UserId); + bw.WriteUInt32BE(UserIp); + bw.WriteUInt32BE(Sign); + bw.WriteUInt16BE(SignType); + bw.WriteUInt16BE(CmdId); + bw.WriteUInt16BE((ushort)(Header.Length)); + bw.WriteUInt32BE((uint)(Body.Length)); + + bw.Write(Header.ToArray()); + bw.Write(Body.ToArray()); + + bw.WriteUInt32BE(TAIL_CONST); + + var packet = ms.ToArray(); + + return packet; + } +} \ No newline at end of file diff --git a/KcpSharp/KcpConnection.cs b/KcpSharp/KcpConnection.cs new file mode 100644 index 0000000..ad8142c --- /dev/null +++ b/KcpSharp/KcpConnection.cs @@ -0,0 +1,165 @@ +using KianaBH.KcpSharp.Base; +using KianaBH.Proto; +using KianaBH.Util; +using KianaBH.Util.Security; +using Google.Protobuf; +using Google.Protobuf.Reflection; +using System.Collections.Concurrent; +using System.Net; +using System.Reflection; + +namespace KianaBH.KcpSharp; + +public class KcpConnection +{ + public const int HANDSHAKE_SIZE = 20; + public static readonly ConcurrentBag BannedPackets = []; + private static readonly Logger Logger = new("GameServer"); + public static readonly ConcurrentDictionary LogMap = []; + + public static readonly ConcurrentBag IgnoreLog = + [ + //CmdIds.PlayerHeartBeatCsReq, CmdIds.PlayerHeartBeatScRsp, + //CmdIds.SceneEntityMoveCsReq, CmdIds.SceneEntityMoveScRsp, + //CmdIds.ClientDownloadDataScNotify + ]; + + protected readonly CancellationTokenSource CancelToken; + protected readonly KcpConversation Conversation; + public readonly IPEndPoint RemoteEndPoint; + + public string DebugFile = ""; + public bool IsOnline = true; + public StreamWriter? Writer; + + public KcpConnection(KcpConversation conversation, IPEndPoint remote) + { + Conversation = conversation; + RemoteEndPoint = remote; + CancelToken = new CancellationTokenSource(); + Start(); + } + + public byte[]? XorKey { get; set; } + public ulong ClientSecretKeySeed { get; set; } + + public long? ConversationId => Conversation.ConversationId; + + public SessionStateEnum State { get; set; } = SessionStateEnum.INACTIVE; + + public virtual void Start() + { + Logger.Info($"New connection from {RemoteEndPoint}."); + State = SessionStateEnum.WAITING_FOR_TOKEN; + } + + public virtual void Stop(bool isServerStop = false) + { + Conversation.Dispose(); + try + { + CancelToken.Cancel(); + CancelToken.Dispose(); + } + catch + { + } + + IsOnline = false; + } + + public void LogPacket(string sendOrRecv, ushort opcode, byte[] payload) + { + if (!ConfigManager.Config.ServerOption.EnableDebug) return; + try + { + //Logger.DebugWriteLine($"{sendOrRecv}: {Enum.GetName(typeof(OpCode), opcode)}({opcode})\r\n{Convert.ToHexString(payload)}"); + if (IgnoreLog.Contains(opcode)) return; + if (!ConfigManager.Config.ServerOption.DebugDetailMessage) throw new Exception(); // go to catch block + var typ = AppDomain.CurrentDomain.GetAssemblies() + .SingleOrDefault(assembly => assembly.GetName().Name == "KianaProto")!.GetTypes() + .First(t => t.Name == $"{LogMap[opcode]}"); //get the type using the packet name + var descriptor = + typ.GetProperty("Descriptor", BindingFlags.Public | BindingFlags.Static)?.GetValue( + null, null) as MessageDescriptor; // get the static property Descriptor + var packet = descriptor?.Parser.ParseFrom(payload); + var formatter = JsonFormatter.Default; + var asJson = formatter.Format(packet); + var output = $"{sendOrRecv}: {LogMap[opcode]}({opcode})\r\n{asJson}"; + if (ConfigManager.Config.ServerOption.DebugMessage) + Logger.Debug(output); + if (DebugFile == "" || !ConfigManager.Config.ServerOption.SavePersonalDebugFile) return; + var sw = GetWriter(); + sw.WriteLine($"[{DateTime.Now:HH:mm:ss}] [GameServer] [DEBUG] " + output); + sw.Flush(); + } + catch + { + var output = $"{sendOrRecv}: {LogMap.GetValueOrDefault(opcode, "UnknownPacket")}({opcode})"; + if (ConfigManager.Config.ServerOption.DebugMessage) + Logger.Debug(output); + if (DebugFile != "" && ConfigManager.Config.ServerOption.SavePersonalDebugFile) + { + var sw = GetWriter(); + sw.WriteLine($"[{DateTime.Now:HH:mm:ss}] [GameServer] [DEBUG] " + output); + sw.Flush(); + } + } + } + + private StreamWriter GetWriter() + { + // Create the file if it doesn't exist + var file = new FileInfo(DebugFile); + if (!file.Exists) + { + Directory.CreateDirectory(file.DirectoryName!); + File.Create(DebugFile).Dispose(); + } + + Writer ??= new StreamWriter(DebugFile, true); + return Writer; + } + + public async Task SendPacket(byte[] packet) + { + try + { + _ = await Conversation.SendAsync(packet, CancelToken.Token); + } + catch + { + // ignore + } + } + + public async Task SendPacket(BasePacket packet) + { + // Test + if (packet.CmdId <= 0) + { + Logger.Debug("Tried to send packet with missing cmd id!"); + return; + } + + // DO NOT REMOVE (unless we find a way to validate code before sending to client which I don't think we can) + if (BannedPackets.Contains(packet.CmdId)) return; + LogPacket("Send", packet.CmdId, packet.Body); + // Header + var packetBytes = packet.BuildPacket(); + + try + { + await SendPacket(packetBytes); + } + catch + { + // ignore + } + } + + public async Task SendPacket(int cmdId) + { + await SendPacket(new BasePacket((ushort)cmdId)); + } +} \ No newline at end of file diff --git a/KcpSharp/KcpListener.cs b/KcpSharp/KcpListener.cs new file mode 100644 index 0000000..b15921a --- /dev/null +++ b/KcpSharp/KcpListener.cs @@ -0,0 +1,148 @@ +using KianaBH.Internationalization; +using KianaBH.KcpSharp.Base; +using KianaBH.Util; +using KianaBH.Util.Extensions; +using System.Net; +using System.Net.Sockets; + +namespace KianaBH.KcpSharp; + +public class KcpListener +{ + private static UdpClient? UDPClient; + private static IPEndPoint? ListenAddress; + private static IKcpTransport? KCPTransport; + private static readonly Logger Logger = new("GameServer"); + public static readonly SortedList Connections = []; + + private static readonly KcpConversationOptions ConvOpt = new() + { + StreamMode = false, + Mtu = 1400, + ReceiveWindow = 256, + SendWindow = 256, + NoDelay = true, + UpdateInterval = 100, + KeepAliveOptions = new KcpKeepAliveOptions(1000, ConfigManager.Config.GameServer.KcpAliveMs) + }; + + public static Type BaseConnection { get; set; } = typeof(KcpConnection); + + private static Socket? UDPListener => UDPClient?.Client; + private static IKcpMultiplexConnection? Multiplex => KCPTransport?.Connection; + private static int PORT => ConfigManager.Config.GameServer.Port; + + public static KcpConnection? GetConnectionByEndPoint(IPEndPoint ep) + { + return Connections.Values.FirstOrDefault(c => c.RemoteEndPoint.Equals(ep)); + } + + public static void StartListener() + { + ListenAddress = new IPEndPoint(IPAddress.Parse(ConfigManager.Config.GameServer.BindAddress), (int)PORT); + UDPClient = new UdpClient(ListenAddress); + if (UDPListener == null) return; + KCPTransport = KcpSocketTransport.CreateMultiplexConnection(UDPClient, 1400); + KCPTransport.Start(); + Logger.Info(I18NManager.Translate("Server.ServerInfo.ServerRunning", I18NManager.Translate("Word.Game"), + ConfigManager.Config.GameServer.GetDisplayAddress())); + } + + private static void RegisterConnection(KcpConnection con) + { + if (!con.ConversationId.HasValue) return; + Connections[con.ConversationId.Value] = con; + } + + public static void UnregisterConnection(KcpConnection con) + { + if (!con.ConversationId.HasValue) return; + var convId = con.ConversationId.Value; + if (Connections.Remove(convId)) + { + Multiplex?.UnregisterConversation(convId); + Logger.Info($"Connection with {con.RemoteEndPoint} has been closed"); + } + } + + public static async Task HandleHandshake(UdpReceiveResult rcv) + { + try + { + var con = GetConnectionByEndPoint(rcv.RemoteEndPoint); + await using MemoryStream? ms = new(rcv.Buffer); + using BinaryReader? br = new(ms); + var code = br.ReadInt32BE(); + br.ReadUInt32(); + br.ReadUInt32(); + var enet = br.ReadInt32BE(); + br.ReadUInt32(); + switch (code) + { + case 0x000000FF: + if (con != null) + { + Logger.Info($"Duplicate handshake from {con.RemoteEndPoint}"); + return; + } + + await AcceptConnection(rcv, enet); + break; + case 0x00000194: + if (con == null) + { + Logger.Info($"Inexistent connection asked for disconnect from {rcv.RemoteEndPoint}"); + return; + } + + await SendDisconnectPacket(con, 5); + break; + default: + Logger.Error($"Invalid handshake code received {code}"); + return; + } + } + catch (Exception ex) + { + Logger.Error($"Failed to handle handshake: {ex}"); + } + } + + private static async Task AcceptConnection(UdpReceiveResult rcv, int enet) + { + var convId = Connections.GetNextAvailableIndex(); + var convo = Multiplex?.CreateConversation(convId, rcv.RemoteEndPoint, ConvOpt); + if (convo == null) return; + var con = (KcpConnection)Activator.CreateInstance(BaseConnection, [convo, rcv.RemoteEndPoint])!; + RegisterConnection(con); + await SendHandshakeResponse(con, enet); + } + + private static async Task SendHandshakeResponse(KcpConnection user, int enet) + { + if (user == null || UDPClient == null || !user.ConversationId.HasValue) return; + var convId = user.ConversationId.Value; + await using MemoryStream? ms = new(); + await using BinaryWriter? bw = new(ms); + bw.WriteInt32BE(0x00000145); + bw.WriteConvID(convId); + bw.WriteInt32BE(enet); + bw.WriteInt32BE(0x14514545); + var data = ms.ToArray(); + await UDPClient.SendAsync(data, data.Length, user.RemoteEndPoint); + } + + public static async Task SendDisconnectPacket(KcpConnection user, int code) + { + if (user == null || UDPClient == null || !user.ConversationId.HasValue) return; + var convId = user.ConversationId.Value; + await using MemoryStream? ms = new(); + await using BinaryWriter? bw = new(ms); + bw.WriteInt32BE(0x00000194); + bw.WriteConvID(convId); + bw.WriteInt32BE(code); + bw.WriteInt32BE(0x19419494); + var data = ms.ToArray(); + await UDPClient.SendAsync(data, data.Length, user.RemoteEndPoint); + } +} \ No newline at end of file diff --git a/KcpSharp/KcpSharp.csproj b/KcpSharp/KcpSharp.csproj new file mode 100644 index 0000000..2842408 --- /dev/null +++ b/KcpSharp/KcpSharp.csproj @@ -0,0 +1,21 @@ + + + + net9.0 + enable + enable + false + KcpSharp + KianaBH.KcpSharp + + + + + + + + + + + + diff --git a/KcpSharp/SessionStateEnum.cs b/KcpSharp/SessionStateEnum.cs new file mode 100644 index 0000000..a256241 --- /dev/null +++ b/KcpSharp/SessionStateEnum.cs @@ -0,0 +1,10 @@ +namespace KianaBH.KcpSharp; + +public enum SessionStateEnum +{ + INACTIVE, + WAITING_FOR_TOKEN, + WAITING_FOR_LOGIN, + PICKING_CHARACTER, + ACTIVE +} \ No newline at end of file diff --git a/KianaBH.sln b/KianaBH.sln new file mode 100644 index 0000000..13eaa41 --- /dev/null +++ b/KianaBH.sln @@ -0,0 +1,60 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.9.34616.47 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SdkServer", "SdkServer\SdkServer.csproj", "{A84C0D8D-BF2E-449A-A46C-F5BE6FD2F42F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Common", "Common\Common.csproj", "{0690883A-D749-42F3-88CB-41D2F627C862}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GameServer", "GameServer\GameServer.csproj", "{8E3A0EA5-F4BC-4478-AEB9-CAAC07F10BD3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{0C822679-4BCC-497A-AF15-F441EC750CCE}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KianaBH", "KianaBH\KianaBH.csproj", "{71D8488F-CAED-48EE-BD5C-F325FBAB991F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Proto", "Proto\Proto.csproj", "{8A0ECA1A-167B-4B97-BF79-3665AF654A52}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KcpSharp", "KcpSharp\KcpSharp.csproj", "{CD7EFAA3-C655-40EE-8F6A-A8E2DA3B0FCB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A84C0D8D-BF2E-449A-A46C-F5BE6FD2F42F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A84C0D8D-BF2E-449A-A46C-F5BE6FD2F42F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A84C0D8D-BF2E-449A-A46C-F5BE6FD2F42F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A84C0D8D-BF2E-449A-A46C-F5BE6FD2F42F}.Release|Any CPU.Build.0 = Release|Any CPU + {0690883A-D749-42F3-88CB-41D2F627C862}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0690883A-D749-42F3-88CB-41D2F627C862}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0690883A-D749-42F3-88CB-41D2F627C862}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0690883A-D749-42F3-88CB-41D2F627C862}.Release|Any CPU.Build.0 = Release|Any CPU + {8E3A0EA5-F4BC-4478-AEB9-CAAC07F10BD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8E3A0EA5-F4BC-4478-AEB9-CAAC07F10BD3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8E3A0EA5-F4BC-4478-AEB9-CAAC07F10BD3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8E3A0EA5-F4BC-4478-AEB9-CAAC07F10BD3}.Release|Any CPU.Build.0 = Release|Any CPU + {71D8488F-CAED-48EE-BD5C-F325FBAB991F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {71D8488F-CAED-48EE-BD5C-F325FBAB991F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {71D8488F-CAED-48EE-BD5C-F325FBAB991F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {71D8488F-CAED-48EE-BD5C-F325FBAB991F}.Release|Any CPU.Build.0 = Release|Any CPU + {8A0ECA1A-167B-4B97-BF79-3665AF654A52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A0ECA1A-167B-4B97-BF79-3665AF654A52}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A0ECA1A-167B-4B97-BF79-3665AF654A52}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8A0ECA1A-167B-4B97-BF79-3665AF654A52}.Release|Any CPU.Build.0 = Release|Any CPU + {CD7EFAA3-C655-40EE-8F6A-A8E2DA3B0FCB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CD7EFAA3-C655-40EE-8F6A-A8E2DA3B0FCB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CD7EFAA3-C655-40EE-8F6A-A8E2DA3B0FCB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CD7EFAA3-C655-40EE-8F6A-A8E2DA3B0FCB}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {05A94C2B-B569-45D2-AB39-3F26D02E421A} + EndGlobalSection +EndGlobal diff --git a/KianaBH/KianaBH.csproj b/KianaBH/KianaBH.csproj new file mode 100644 index 0000000..819e8f5 --- /dev/null +++ b/KianaBH/KianaBH.csproj @@ -0,0 +1,21 @@ + + + + Exe + net9.0 + enable + enable + false + KianaBH.KianaBH + KianaBH + Source\Kiana.ico + false + + + + + + + + + diff --git a/KianaBH/Program/KianaBH.cs b/KianaBH/Program/KianaBH.cs new file mode 100644 index 0000000..f923eb4 --- /dev/null +++ b/KianaBH/Program/KianaBH.cs @@ -0,0 +1,92 @@ +using KianaBH.Data; +using KianaBH.Database; +using KianaBH.KianaBH.Tool; +using KianaBH.GameServer.Command; +using KianaBH.GameServer.Server; +using KianaBH.Internationalization; +using KianaBH.KcpSharp; +using KianaBH.Util; +using System.Globalization; + +namespace KianaBH.KianaBH.Program; + +public class KianaBH +{ + public static readonly Logger Logger = new("KianaBH"); + public static readonly DatabaseHelper DatabaseHelper = new(); + public static readonly Listener Listener = new(); + public static readonly CommandManager CommandManager = new(); + + public static async Task Main() + { + var time = DateTime.Now; + RegisterExitEvent(); + IConsole.InitConsole(); + LoaderManager.InitConfig(); + await LoaderManager.InitSdkServer(); + LoaderManager.InitPacket(); + + LoaderManager.InitDatabase(); + if (!DatabaseHelper.LoadAllData) + { + var t = Task.Run(() => + { + while (!DatabaseHelper.LoadAllData) // wait for all data to be loaded + Thread.Sleep(100); + }); + + await t.WaitAsync(new CancellationToken()); + + Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadedItem", I18NManager.Translate("Word.Database"))); + } + + Logger.Warn(I18NManager.Translate("Server.ServerInfo.WaitForAllDone")); + + await LoaderManager.InitResource(); + ResourceManager.IsLoaded = true; + + HandbookGenerator.GenerateAll(); + LoaderManager.InitCommand(); + + var elapsed = DateTime.Now - time; + Logger.Info(I18NManager.Translate("Server.ServerInfo.ServerStarted", + Math.Round(elapsed.TotalSeconds, 2).ToString(CultureInfo.InvariantCulture))); + if (ConfigManager.Config.ServerOption.EnableMission) + Logger.Warn(I18NManager.Translate("Server.ServerInfo.MissionEnabled")); + } + + # region Exit + + private static void RegisterExitEvent() + { + AppDomain.CurrentDomain.ProcessExit += (_, _) => + { + Logger.Info(I18NManager.Translate("Server.ServerInfo.Shutdown")); + ProcessExit(); + }; + AppDomain.CurrentDomain.UnhandledException += (obj, arg) => + { + Logger.Error(I18NManager.Translate("Server.ServerInfo.UnhandledException", obj.GetType().Name), + (Exception)arg.ExceptionObject); + Logger.Info(I18NManager.Translate("Server.ServerInfo.Shutdown")); + ProcessExit(); + Environment.Exit(1); + }; + + Console.CancelKeyPress += (_, eventArgs) => + { + Logger.Info(I18NManager.Translate("Server.ServerInfo.CancelKeyPressed")); + eventArgs.Cancel = true; + Environment.Exit(0); + }; + } + + private static void ProcessExit() + { + KcpListener.Connections.Values.ToList().ForEach(x => x.Stop(true)); + DatabaseHelper.SaveThread?.Interrupt(); + DatabaseHelper.SaveDatabase(); + } + + # endregion +} \ No newline at end of file diff --git a/KianaBH/Program/LoaderManager.cs b/KianaBH/Program/LoaderManager.cs new file mode 100644 index 0000000..3cc3a3a --- /dev/null +++ b/KianaBH/Program/LoaderManager.cs @@ -0,0 +1,175 @@ +using System.Reflection; +using KianaBH.Data; +using KianaBH.Database; +using KianaBH.KianaBH.Tool; +using KianaBH.GameServer.Command; +using KianaBH.GameServer.Server; +using KianaBH.GameServer.Server.Packet; +using KianaBH.Internationalization; +using KianaBH.KcpSharp; +using KianaBH.Proto; +using KianaBH.Util; +using KianaBH.Util.Security; + +namespace KianaBH.KianaBH.Program; + +public class LoaderManager : KianaBH +{ + public static void InitConfig() + { + // Initialize log + var counter = 0; + FileInfo file; + while (true) + { + file = new FileInfo(ConfigManager.Config.Path.LogPath + $"/{DateTime.Now:yyyy-MM-dd}-{++counter}.log"); + if (file is not { Exists: false, Directory: not null }) continue; + file.Directory.Create(); + break; + } + Logger.SetLogFile(file); + + // Init all directories + try + { + ConfigManager.InitDirectories(); + } + catch (Exception e) + { + Logger.Error(I18NManager.Translate("Server.ServerInfo.FailedToLoadItem", I18NManager.Translate("Word.Config")), e); + Console.ReadLine(); + return; + } + + // Starting the server + Logger.Info(I18NManager.Translate("Server.ServerInfo.StartingServer")); + + // Load the config + Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadingItem", I18NManager.Translate("Word.Config"))); + try + { + ConfigManager.LoadConfig(); + } + catch (Exception e) + { + Logger.Error( + I18NManager.Translate("Server.ServerInfo.FailedToLoadItem", I18NManager.Translate("Word.Config")), e); + Console.ReadLine(); + return; + } + + // Load the language + Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadingItem", I18NManager.Translate("Word.Language"))); + try + { + I18NManager.LoadLanguage(); + } + catch (Exception e) + { + Logger.Error( + I18NManager.Translate("Server.ServerInfo.FailedToLoadItem", I18NManager.Translate("Word.Language")), e); + Console.ReadLine(); + return; + } + } + + public static void InitDatabase() + { + // Initialize the database + try + { + _ = Task.Run(DatabaseHelper.Initialize); // do not wait + + while (!DatabaseHelper.LoadAccount) Thread.Sleep(100); + + Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadedItem", + I18NManager.Translate("Word.DatabaseAccount"))); + } + catch (Exception e) + { + Logger.Error( + I18NManager.Translate("Server.ServerInfo.FailedToLoadItem", I18NManager.Translate("Word.Database")), e); + Console.ReadLine(); + return; + } + } + + public static async Task InitSdkServer() + { + + SdkServer.SdkServer.Main([]); + Logger.Info(I18NManager.Translate("Server.ServerInfo.ServerRunning", I18NManager.Translate("Word.Dispatch"), + ConfigManager.Config.HttpServer.GetDisplayAddress())); + + KcpListener.BaseConnection = typeof(Connection); + KcpListener.StartListener(); + + await Task.CompletedTask; + } + + public static void InitPacket() + { + // get opcode from CmdIds + var opcodes = typeof(CmdIds).GetFields().Where(x => x.FieldType == typeof(int)).ToList(); + foreach (var opcode in opcodes) + { + var name = opcode.Name; + var value = (int)opcode.GetValue(null)!; + KcpConnection.LogMap.TryAdd(value, name); + } + + HandlerManager.Init(); + } + + public static async Task InitResource() + { + // Init custom files + Logger.Info(I18NManager.Translate("Server.ServerInfo.GeneratingItem", I18NManager.Translate("Word.CustomData"))); + try + { + await AssemblyGenerater.LoadCustomData(Assembly.GetExecutingAssembly()); + } + catch (Exception e) + { + Logger.Error( + I18NManager.Translate("Server.ServerInfo.FailedToLoadItem", I18NManager.Translate("Word.CustomData")), e); + Console.ReadLine(); + return; + } + + // Load the game data + try + { + Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadingItem", I18NManager.Translate("Word.GameData"))); + ResourceManager.LoadGameData(); + } + catch (Exception e) + { + Logger.Error( + I18NManager.Translate("Server.ServerInfo.FailedToLoadItem", I18NManager.Translate("Word.GameData")), e); + Console.ReadLine(); + return; + } + } + + public static void InitCommand() + { + // Register the command handlers + try + { + CommandManager.RegisterCommands(); + } + catch (Exception e) + { + Logger.Error( + I18NManager.Translate("Server.ServerInfo.FailedToInitializeItem", + I18NManager.Translate("Word.Command")), e); + Console.ReadLine(); + return; + } + IConsole.OnConsoleExcuteCommand += CommandExecutor.ConsoleExcuteCommand; + CommandExecutor.OnRunCommand += (sender, e) => { CommandManager.HandleCommand(e, sender); }; + + IConsole.ListenConsole(); + } +} \ No newline at end of file diff --git a/KianaBH/Properties/PublishProfiles/KianaBH-Win64-Debug.pubxml b/KianaBH/Properties/PublishProfiles/KianaBH-Win64-Debug.pubxml new file mode 100644 index 0000000..befc790 --- /dev/null +++ b/KianaBH/Properties/PublishProfiles/KianaBH-Win64-Debug.pubxml @@ -0,0 +1,18 @@ + + + + + Debug + Any CPU + bin\KianaBH-Win64-Debug + FileSystem + <_TargetId>Folder + net9.0 + win-x64 + false + false + false + + \ No newline at end of file diff --git a/KianaBH/Properties/PublishProfiles/KianaBH-Win64-MultiFile.pubxml b/KianaBH/Properties/PublishProfiles/KianaBH-Win64-MultiFile.pubxml new file mode 100644 index 0000000..2f39019 --- /dev/null +++ b/KianaBH/Properties/PublishProfiles/KianaBH-Win64-MultiFile.pubxml @@ -0,0 +1,19 @@ + + + + + Release + Any CPU + bin\KianaBH-MultiFile\ + FileSystem + <_TargetId>Folder + net9.0 + win-x64 + true + false + true + false + + \ No newline at end of file diff --git a/KianaBH/Properties/PublishProfiles/KianaBH-Win64-OneFile.pubxml b/KianaBH/Properties/PublishProfiles/KianaBH-Win64-OneFile.pubxml new file mode 100644 index 0000000..f691464 --- /dev/null +++ b/KianaBH/Properties/PublishProfiles/KianaBH-Win64-OneFile.pubxml @@ -0,0 +1,19 @@ + + + + + Release + Any CPU + bin\KianaBH-OneFile\ + FileSystem + <_TargetId>Folder + net9.0 + win-x64 + true + true + true + false + + \ No newline at end of file diff --git a/KianaBH/Source/Kiana.ico b/KianaBH/Source/Kiana.ico new file mode 100644 index 0000000000000000000000000000000000000000..c518cc2b66782dd590fcfad47bd6504e3f49a29e GIT binary patch literal 432254 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 z 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 Y4_X<4=%l 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

  • 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�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

      u@CkH*a)+1T25x+OoSjw76Fzs*zC8Dd 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 G@V@|`t%~yi literal 0 HcmV?d00001 diff --git a/KianaBH/Tool/AssemblyGenerater.cs b/KianaBH/Tool/AssemblyGenerater.cs new file mode 100644 index 0000000..531361c --- /dev/null +++ b/KianaBH/Tool/AssemblyGenerater.cs @@ -0,0 +1,38 @@ +using KianaBH.Util; +using System.Reflection; + +namespace KianaBH.KianaBH.Tool; + +public class AssemblyGenerater +{ + private static readonly string SourceSpace = "KianaBH.KianaBH.Source."; + + public static async ValueTask LoadCustomData(Assembly assembly) + { + string[] embededRes = assembly.GetManifestResourceNames(); + foreach (var res in embededRes) + { + var stream = assembly.GetManifestResourceStream(res); + if (stream != null && res.Contains(ConfigManager.Config.Path.DataPath.Split("/").Last())) + await WriteOutputFiles(stream, res); + } + } + + private async static ValueTask WriteOutputFiles(Stream stream, string resSpace) + { + if (stream == null) return; + + string relativePath = resSpace.Replace(SourceSpace, ""); + int lastDotIndex = relativePath.LastIndexOf('.'); + string outputPath = string.Concat( + ConfigManager.Config.Path.ConfigPath, "/", + relativePath[..lastDotIndex].Replace('.', '/'), + relativePath.AsSpan(lastDotIndex)); + + if (File.Exists(outputPath)) return; // Check if file exist + + using var fileStream = new FileStream(outputPath, FileMode.Create, FileAccess.Write); + stream.Position = 0; + await stream.CopyToAsync(fileStream); + } +} \ No newline at end of file diff --git a/KianaBH/Tool/HandbookGenerator.cs b/KianaBH/Tool/HandbookGenerator.cs new file mode 100644 index 0000000..dad1c7e --- /dev/null +++ b/KianaBH/Tool/HandbookGenerator.cs @@ -0,0 +1,95 @@ +using KianaBH.Data; +using KianaBH.GameServer.Command; +using KianaBH.Internationalization; +using KianaBH.Util; +using Newtonsoft.Json; +using System.Text; + +namespace KianaBH.KianaBH.Tool; + +public static class HandbookGenerator +{ + public static void GenerateAll() + { + var directory = new DirectoryInfo(ConfigManager.Config.Path.ResourcePath + "/TextMap"); + var handbook = new DirectoryInfo(ConfigManager.Config.Path.HandbookPath); + if (!handbook.Exists) handbook.Create(); + if (!directory.Exists) return; + + foreach (var langFile in directory.GetFiles()) + { + if (langFile.Extension != ".json") continue; + var lang = langFile.Name.Replace("TextMap", "").Replace(".json", ""); + + // Check if handbook needs to regenerate + var handbookPath = $"{ConfigManager.Config.Path.HandbookPath}/Handbook{lang}.txt"; + if (File.Exists(handbookPath)) + { + var handbookInfo = new FileInfo(handbookPath); + if (handbookInfo.LastWriteTime >= langFile.LastWriteTime) + continue; // Skip if handbook is newer than language file + } + + Generate(lang); + } + + Logger.GetByClassName() + .Info(I18NManager.Translate("Server.ServerInfo.GeneratedItem", I18NManager.Translate("Word.Handbook"))); + } + + public static void Generate(string lang) + { + var textMapPath = ConfigManager.Config.Path.ResourcePath + "/TextMap/TextMap" + lang + ".json"; + var fallbackTextMapPath = ConfigManager.Config.Path.ResourcePath + "/TextMap/TextMap" + + ConfigManager.Config.ServerOption.FallbackLanguage + ".json"; + if (!File.Exists(textMapPath)) + { + Logger.GetByClassName().Error(I18NManager.Translate("Server.ServerInfo.FailedToReadItem", textMapPath, + I18NManager.Translate("Word.NotFound"))); + return; + } + + if (!File.Exists(fallbackTextMapPath)) + { + Logger.GetByClassName().Error(I18NManager.Translate("Server.ServerInfo.FailedToReadItem", textMapPath, + I18NManager.Translate("Word.NotFound"))); + return; + } + + var textMap = JsonConvert.DeserializeObject>(File.ReadAllText(textMapPath)); + var fallbackTextMap = + JsonConvert.DeserializeObject>(File.ReadAllText(fallbackTextMapPath)); + + if (textMap == null || fallbackTextMap == null) + { + Logger.GetByClassName().Error(I18NManager.Translate("Server.ServerInfo.FailedToReadItem", textMapPath, + I18NManager.Translate("Word.Error"))); + return; + } + + var builder = new StringBuilder(); + builder.AppendLine("#Handbook generated in " + DateTime.Now.ToString("yyyy/MM/dd HH:mm")); + builder.AppendLine(); + builder.AppendLine("#Command"); + builder.AppendLine(); + GenerateCmd(builder, lang); + + builder.AppendLine(); + WriteToFile(lang, builder.ToString()); + } + + public static void GenerateCmd(StringBuilder builder, string lang) + { + foreach (var cmd in CommandManager.CommandInfo) + { + builder.Append("\t" + cmd.Key); + var desc = I18NManager.TranslateAsCertainLang(lang, cmd.Value.Description).Replace("\n", "\n\t\t"); + builder.AppendLine(": " + desc); + } + } + + public static void WriteToFile(string lang, string content) + { + File.WriteAllText($"{ConfigManager.Config.Path.HandbookPath}/Handbook{lang}.txt", content); + } +} \ No newline at end of file diff --git a/Proto/BH3.proto b/Proto/BH3.proto new file mode 100644 index 0000000..1713af6 --- /dev/null +++ b/Proto/BH3.proto @@ -0,0 +1,52490 @@ +syntax = "proto3"; + +option csharp_namespace = "KianaBH.Proto"; + +message AvatarSubSkill { + uint32 sub_skill_id = 1; + uint32 level = 2; + bool is_mask = 3; +} + +message AvatarSkill { + uint32 skill_id = 1; + repeated AvatarSubSkill sub_skill_list = 2; +} + +message Avatar { + uint32 avatar_id = 1; + uint32 star = 2; + uint32 level = 3; + uint32 exp = 4; + uint32 fragment = 5; + uint32 weapon_unique_id = 6; + uint32 stigmata_unique_id_1 = 7; + uint32 stigmata_unique_id_2 = 8; + uint32 stigmata_unique_id_3 = 9; + repeated AvatarSkill skill_list = 10; + uint32 touch_goodfeel = 11; + uint32 today_has_add_goodfeel = 12; + uint32 stage_goodfeel = 13; + repeated uint32 dress_list = 14; + uint32 dress_id = 15; + AvatarBindEquipMode mode = 17; + AvatarArtifactDetail avatar_artifact = 18; + uint32 sub_star = 19; +} + +message EquipmentItem { + EquipmentType type = 1; + uint32 id_or_unique_id = 2; + uint32 num = 3; +} + +message EquipmentItemList { + repeated EquipmentItem item_list = 1; +} + +message Mecha { + uint32 unique_id = 1; + uint32 id = 2; +} + +message Weapon { + uint32 unique_id = 1; + uint32 id = 2; + uint32 level = 3; + uint32 exp = 4; + bool is_protected = 5; + uint32 cancel_protect_time = 6; + bool is_extracted = 7; + uint32 sub_weapon_id = 8; + repeated uint32 quantum_branch_list = 9; + uint32 homology_level = 10; +} + +message Stigmata { + uint32 unique_id = 1; + uint32 id = 2; + uint32 level = 3; + uint32 exp = 4; + bool is_protected = 5; + bool is_affix_identify = 6; + uint32 cancel_protect_time = 7; + uint32 slot_num = 8; + repeated StigmataRune rune_list = 9; + repeated StigmataRune wait_select_rune_list = 10; + uint32 refine_value = 11; + uint32 promote_times = 12; + repeated StigmataRuneGroup wait_select_rune_group_list = 16; +} + +message Material { + uint32 id = 1; + uint32 num = 2; +} + +message GenericItemNum { + uint32 id = 1; + uint32 num = 2; + uint32 level = 3; +} + +message Stage { + uint32 id = 1; + uint32 progress = 2; + uint32 enter_times = 3; + uint32 reset_times = 4; + repeated uint32 challenge_index_list = 5; + uint32 bonus_end_time = 6; + uint32 bonus_enter_times = 7; + uint32 bonus_total_times = 8; + uint32 min_stage_time = 9; + uint32 max_score = 10; + uint32 stamina_discount = 11; + uint32 total_score = 12; + bool is_done = 16; + repeated uint32 backup_challenge_index_list = 18; + uint32 max_battle_score = 19; + uint32 max_rank = 20; + string client_data = 21; + uint32 first_stamina_discount = 22; +} + +message StageEventData { + uint32 begin_time = 1; + uint32 end_time = 2; + uint32 chapter_id = 3; + uint32 unlock_level = 4; +} + +message DropItem { + uint32 item_id = 1; + uint32 level = 2; + uint32 num = 3; + uint32 rarity = 4; + bool is_baodi = 5; + bool is_rare_drop = 6; + uint32 gift_item_id = 7; + uint32 gift_level = 8; + uint32 gift_num = 9; + bool is_treasure = 10; + bool is_equip_drop = 11; + bool is_stage_clear_drop = 12; + bool is_avatar_drop = 13; + bool is_theme_wanted_double_drop = 14; +} + +message RewardItemData { + uint32 id = 1; + uint32 level = 2; + uint32 num = 3; + uint32 split_fragment_num = 4; +} + +message RewardData { + uint32 exp = 1; + uint32 scoin = 2; + uint32 hcoin = 3; + uint32 stamina = 4; + uint32 friends_point = 6; + repeated RewardItemData item_list = 7; + uint32 exp_convert_scoin = 9; +} + +message StageCheatData { + enum Type { + TYPE_NONE = 0; + STAGE_ID = 1; + STAGE_PROGRESS = 2; + STAGE_MAX_SCORE = 3; + TIME_START = 1001; + TIME_USE = 1002; + AVG_FRAME_TIME = 1003; + PLAYER_LEVEL = 1004; + STAGE_SCORE = 1005; + MONSTER_TOTAL_HP = 1006; + MONSTER_TOTAL_LOSS_HP = 1007; + MONSTER_HIT_MISS_NUM = 1008; + MONSTER_HIT_NUM = 1009; + NATURE_DAMAGE_BONUS_RATIO_MAX = 1010; + STAR_RING_USE_TIME = 1011; + AVATAR_ID_1 = 2001; + AVATAR_LEVEL_1 = 2002; + AVATAR_COMBAT_1 = 2003; + ATTACK_MAX_1 = 2004; + SP_MAX_1 = 2005; + SP_BEGIN_1 = 2006; + SP_END_1 = 2007; + SP_GAIN_1 = 2008; + SP_USE_1 = 2009; + HP_MAX_1 = 2010; + HP_BEGIN_1 = 2011; + HP_END_1 = 2012; + HP_GAIN_1 = 2013; + HIT_COUNT_1 = 2014; + HIT_DAMAGE_1 = 2015; + HIT_NORMAL_DAMAGE_MAX_1 = 2016; + HIT_CRITICAL_DAMAGE_MAX_1 = 2017; + BEHIT_COUNT_1 = 2018; + BEHIT_NORMAL_DAMAGE_MAX_1 = 2019; + BEHIT_CRITICAL_DAMAGE_MAX_1 = 2020; + COMBO_MAX_1 = 2021; + AVATAR_TIME_USE_1 = 2022; + WEAPON_LEVEL_1 = 2023; + STIGMATA_LEVEL_MAX_1 = 2024; + MP_TEAM_SKILL_TIMES_1 = 2025; + MP_QTE_SKILL_TIMES_1 = 2026; + MP_BE_RESCUED_TIMES_1 = 2027; + MP_RESCUE_TIMES_1 = 2028; + MP_AVG_RESCUE_TIME_1 = 2029; + MP_CHAT_TIMES_1 = 2030; + ULTIMATE_SKILL_TIMES_1 = 2031; + ULTIMATE_SKILL_DURATION_1 = 2032; + ATTACK_SP_GAIN_1 = 2033; + WEAPON_SKILL_TIMES_1 = 2034; + SWITCH_IN_SKILL_DAMAGE_MAX_1 = 2035; + BRANCH_SKILL_DAMAGE_MAX_1 = 2036; + CHARGE_SKILL_DAMAGE_MAX_1 = 2037; + ULTIMATE_SKILL_DAMAGE_MAX_1 = 2038; + ULTIMATE_SKILL_INTERVAL_TIME_MIN_1 = 2039; + WEAPON_SKILL_INTERVAL_TIME_MIN_1 = 2040; + HIT_INTERVAL_TIME_MIN_1 = 2041; + SP_MIN_1 = 2042; + HP_MIN_1 = 2043; + STIGMATA_1_1 = 2044; + STIGMATA_1_2 = 2045; + STIGMATA_1_3 = 2046; + WEAPON_ID_1 = 2047; + DRESS_ID_1 = 2048; + SERVER_AVATAR_ID_1 = 2049; + SERVER_STIGMATA_1_1 = 2050; + SERVER_STIGMATA_1_2 = 2051; + SERVER_STIGMATA_1_3 = 2052; + SERVER_WEAPON_ID_1 = 2053; + SERVER_DRESS_ID_1 = 2054; + AVATAR_ID_2 = 2101; + AVATAR_LEVEL_2 = 2102; + AVATAR_COMBAT_2 = 2103; + ATTACK_MAX_2 = 2104; + SP_MAX_2 = 2105; + SP_BEGIN_2 = 2106; + SP_END_2 = 2107; + SP_GAIN_2 = 2108; + SP_USE_2 = 2109; + HP_MAX_2 = 2110; + HP_BEGIN_2 = 2111; + HP_END_2 = 2112; + HP_GAIN_2 = 2113; + HIT_COUNT_2 = 2114; + HIT_DAMAGE_2 = 2115; + HIT_NORMAL_DAMAGE_MAX_2 = 2116; + HIT_CRITICAL_DAMAGE_MAX_2 = 2117; + BEHIT_COUNT_2 = 2118; + BEHIT_NORMAL_DAMAGE_MAX_2 = 2119; + BEHIT_CRITICAL_DAMAGE_MAX_2 = 2120; + COMBO_MAX_2 = 2121; + AVATAR_TIME_USE_2 = 2122; + WEAPON_LEVEL_2 = 2123; + STIGMATA_LEVEL_MAX_2 = 2124; + MP_TEAM_SKILL_TIMES_2 = 2125; + MP_QTE_SKILL_TIMES_2 = 2126; + MP_BE_RESCUED_TIMES_2 = 2127; + MP_RESCUE_TIMES_2 = 2128; + MP_AVG_RESCUE_TIME_2 = 2129; + MP_CHAT_TIMES_2 = 2130; + ULTIMATE_SKILL_TIMES_2 = 2131; + ULTIMATE_SKILL_DURATION_2 = 2132; + ATTACK_SP_GAIN_2 = 2133; + WEAPON_SKILL_TIMES_2 = 2134; + SWITCH_IN_SKILL_DAMAGE_MAX_2 = 2135; + BRANCH_SKILL_DAMAGE_MAX_2 = 2136; + CHARGE_SKILL_DAMAGE_MAX_2 = 2137; + ULTIMATE_SKILL_DAMAGE_MAX_2 = 2138; + ULTIMATE_SKILL_INTERVAL_TIME_MIN_2 = 2139; + WEAPON_SKILL_INTERVAL_TIME_MIN_2 = 2140; + HIT_INTERVAL_TIME_MIN_2 = 2141; + SP_MIN_2 = 2142; + HP_MIN_2 = 2143; + STIGMATA_2_1 = 2144; + STIGMATA_2_2 = 2145; + STIGMATA_2_3 = 2146; + WEAPON_ID_2 = 2147; + DRESS_ID_2 = 2148; + SERVER_AVATAR_ID_2 = 2149; + SERVER_STIGMATA_2_1 = 2150; + SERVER_STIGMATA_2_2 = 2151; + SERVER_STIGMATA_2_3 = 2152; + SERVER_WEAPON_ID_2 = 2153; + SERVER_DRESS_ID_2 = 2154; + AVATAR_ID_3 = 2201; + AVATAR_LEVEL_3 = 2202; + AVATAR_COMBAT_3 = 2203; + ATTACK_MAX_3 = 2204; + SP_MAX_3 = 2205; + SP_BEGIN_3 = 2206; + SP_END_3 = 2207; + SP_GAIN_3 = 2208; + SP_USE_3 = 2209; + HP_MAX_3 = 2210; + HP_BEGIN_3 = 2211; + HP_END_3 = 2212; + HP_GAIN_3 = 2213; + HIT_COUNT_3 = 2214; + HIT_DAMAGE_3 = 2215; + HIT_NORMAL_DAMAGE_MAX_3 = 2216; + HIT_CRITICAL_DAMAGE_MAX_3 = 2217; + BEHIT_COUNT_3 = 2218; + BEHIT_NORMAL_DAMAGE_MAX_3 = 2219; + BEHIT_CRITICAL_DAMAGE_MAX_3 = 2220; + COMBO_MAX_3 = 2221; + AVATAR_TIME_USE_3 = 2222; + WEAPON_LEVEL_3 = 2223; + STIGMATA_LEVEL_MAX_3 = 2224; + MP_TEAM_SKILL_TIMES_3 = 2225; + MP_QTE_SKILL_TIMES_3 = 2226; + MP_BE_RESCUED_TIMES_3 = 2227; + MP_RESCUE_TIMES_3 = 2228; + MP_AVG_RESCUE_TIME_3 = 2229; + MP_CHAT_TIMES_3 = 2230; + ULTIMATE_SKILL_TIMES_3 = 2231; + ULTIMATE_SKILL_DURATION_3 = 2232; + ATTACK_SP_GAIN_3 = 2233; + WEAPON_SKILL_TIMES_3 = 2234; + SWITCH_IN_SKILL_DAMAGE_MAX_3 = 2235; + BRANCH_SKILL_DAMAGE_MAX_3 = 2236; + CHARGE_SKILL_DAMAGE_MAX_3 = 2237; + ULTIMATE_SKILL_DAMAGE_MAX_3 = 2238; + ULTIMATE_SKILL_INTERVAL_TIME_MIN_3 = 2239; + WEAPON_SKILL_INTERVAL_TIME_MIN_3 = 2240; + HIT_INTERVAL_TIME_MIN_3 = 2241; + SP_MIN_3 = 2242; + HP_MIN_3 = 2243; + STIGMATA_3_1 = 2244; + STIGMATA_3_2 = 2245; + STIGMATA_3_3 = 2246; + WEAPON_ID_3 = 2247; + DRESS_ID_3 = 2248; + SERVER_AVATAR_ID_3 = 2249; + SERVER_STIGMATA_3_1 = 2250; + SERVER_STIGMATA_3_2 = 2251; + SERVER_STIGMATA_3_3 = 2252; + SERVER_WEAPON_ID_3 = 2253; + SERVER_DRESS_ID_3 = 2254; + ELF_ID = 2301; + ELF_LEVEL = 2302; + ELF_COMBAT = 2303; + ELF_ATTACK = 2304; + ELF_SP_MAX = 2305; + ELF_ULTIMATE_SKILL_TIMES = 2306; + ELF_SP_USE = 2307; + ELF_HIT_CRITICAL_DAMAGE_MAX = 2308; + ELF_HIT_NORMAL_DAMAGE_MAX = 2309; + ELF_ULTIMATE_SKILL_INTERVAL_TIME_MIN = 2310; + ELF_HIT_INTERVAL_TIME_MIN = 2311; + SERVER_ELF_ID = 2312; + ELF_ID_2 = 2401; + ELF_LEVEL_2 = 2402; + ELF_COMBAT_2 = 2403; + ELF_ATTACK_2 = 2404; + ELF_SP_MAX_2 = 2405; + ELF_ULTIMATE_SKILL_TIMES_2 = 2406; + ELF_SP_USE_2 = 2407; + ELF_HIT_CRITICAL_DAMAGE_MAX_2 = 2408; + ELF_HIT_NORMAL_DAMAGE_MAX_2 = 2409; + ELF_ULTIMATE_SKILL_INTERVAL_TIME_MIN_2 = 2410; + ELF_HIT_INTERVAL_TIME_MIN_2 = 2411; + SERVER_ELF_ID_2 = 2412; + ELF_ID_3 = 2501; + ELF_LEVEL_3 = 2502; + ELF_COMBAT_3 = 2503; + ELF_ATTACK_3 = 2504; + ELF_SP_MAX_3 = 2505; + ELF_ULTIMATE_SKILL_TIMES_3 = 2506; + ELF_SP_USE_3 = 2507; + ELF_HIT_CRITICAL_DAMAGE_MAX_3 = 2508; + ELF_HIT_NORMAL_DAMAGE_MAX_3 = 2509; + ELF_ULTIMATE_SKILL_INTERVAL_TIME_MIN_3 = 2510; + ELF_HIT_INTERVAL_TIME_MIN_3 = 2511; + SERVER_ELF_ID_3 = 2512; + IS_MP_VOICE_USED = 3001; + MP_VOICE_USE_TIME = 3002; + SEALED_EVENT_ID = 4001; + } + + StageCheatData.Type type = 1; + float value = 2; +} + +message StageChallengeData { + uint32 challenge_index = 1; + RewardData reward = 2; +} + +message MpStageMvpReward { + uint32 extra_coin = 1; + uint32 extra_avatar_exp = 2; + uint32 extra_mp_exp = 3; +} + +message StageSpecialChallengeData { + uint32 challenge_index = 1; + DropItem drop_item = 2; +} + +message AccountBuffReward { + uint32 scoin_reward = 1; + uint32 avatar_exp_reward = 2; + uint32 player_exp_reward = 3; +} + +message AvatarTeam { + uint32 stage_type = 1; + repeated uint32 avatar_id_list = 2; +} + +message CustomAvatarTeam { + uint32 team_id = 1; + string name = 2; + repeated uint32 avatar_id_list = 3; + repeated uint32 elf_id_list = 4; + uint32 astra_mate_id = 5; + bool is_using_astra_mate = 6; +} + +message StageDropDisplayInfo { + uint32 stage_id = 1; + repeated uint32 drop_item_id_list = 2; + repeated uint32 first_drop_item_id_list = 3; + bool double_drop = 4; + repeated uint32 bonus_drop_item_id_list = 5; + repeated string battle_buff_list = 6; + repeated uint32 bonus_equip_need_list = 7; + uint32 battle_display_id = 8; + repeated string battle_attr_list = 9; + repeated RewardItemData first_drop_item_data_list = 10; +} + +message SettingDict { + message DictItem { + string key = 1; + SettingDict.ValueType type = 2; + string value = 3; + repeated string value_list = 4; + } + + enum ValueType { + VALUE_TYPE_NONE = 0; + INT = 1; + FLOAT = 2; + STRING = 3; + INT_LIST = 4; + } + + repeated SettingDict.DictItem dict_item_list = 1; +} + +message WeaponDetailData { + uint32 id = 1; + uint32 level = 2; + uint32 unique_id = 3; + uint32 sub_weapon_id = 4; + uint32 homology_level = 5; +} + +message StigmataDetailData { + uint32 id = 1; + uint32 level = 2; + repeated StigmataRune rune_list = 3; + uint32 unique_id = 7; +} + +message AvatarSubSkillDetailData { + uint32 sub_skill_id = 1; + uint32 level = 2; + bool is_mask = 3; +} + +message AvatarSkillDetailData { + uint32 skill_id = 1; + repeated AvatarSubSkillDetailData sub_skill_list = 2; +} + +message AvatarArtifactDetail { + uint32 artifact_id = 1; + uint32 artifact_level = 2; + bool is_artifact_switch_on = 3; +} + +message AvatarDetailData { + uint32 avatar_id = 1; + uint32 avatar_star = 2; + uint32 avatar_level = 3; + WeaponDetailData weapon = 4; + StigmataDetailData stigmata_1 = 5; + StigmataDetailData stigmata_2 = 6; + StigmataDetailData stigmata_3 = 7; + repeated AvatarSkillDetailData skill_list = 8; + uint32 dress_id = 9; + uint32 avatar_combat = 10; + AvatarArtifactDetail avatar_artifact = 12; + uint32 avatar_sub_star = 13; +} + +message ElfTalentDetailData { + uint32 elf_talent_id = 1; + uint32 talent_level = 2; +} + +message ElfSkillDetailData { + uint32 elf_skill_id = 1; + uint32 skill_level = 2; +} + +message ElfDetailData { + uint32 elf_id = 1; + uint32 level = 2; + uint32 star = 3; + repeated ElfTalentDetailData equip_talent_list = 4; + repeated ElfSkillDetailData skill_list = 5; +} + +message MasterDetailData { + uint32 uid = 1; + string nickname = 2; + uint32 level = 3; + MasterPupilCard card = 4; +} + +message PupilDetailData { + uint32 uid = 1; + string nickname = 2; + MasterPupilStatus status = 3; +} + +message MasterPupilDetailData { + MasterPupilData master = 1; + repeated MasterPupilData pupil_list = 2; +} + +message AdventureAvatar { + message Skill { + uint32 skill_id = 1; + uint32 skill_level = 2; + } + + uint32 avatar_id = 1; + uint32 star = 2; + repeated AdventureAvatar.Skill skill_list = 3; +} + +message PlayerAdventureData { + uint32 adventure_group_level = 1; + repeated AdventureAvatar adventure_avatar_list = 2; +} + +message PlayerDetailData { + uint32 uid = 1; + string nickname = 2; + uint32 level = 3; + AvatarDetailData leader_avatar = 4; + string self_desc = 5; + uint32 armada_id = 6; + string armada_name = 7; + uint32 mp_level = 8; + uint32 on_medal_id = 9; + bool is_newbie = 10; + bool is_goback = 11; + uint32 mp_like_num = 12; + repeated GrandKey grand_key_list = 13; + ElfDetailData leader_elf = 14; + uint32 custom_head_id = 15; + uint32 frame_id = 16; + PlayerAdventureData adventure = 17; + repeated AvatarDetailData backup_avatar_list = 18; + Medal on_medal = 19; + bool is_allow_visit = 30; + uint32 visit_avatar = 31; + uint32 be_liked_num = 32; + uint32 show_house = 33; + uint32 comfort_value = 34; + uint32 house_level = 35; + string house_name = 36; + uint32 total_wiki_score = 37; + uint32 total_achievement_num_get = 38; + uint32 total_achievement_num = 39; + uint32 chat_forbid_finish_time = 40; + uint32 master_uid = 41; + MasterPupilType master_pupil_tag = 42; + uint32 season_id = 43; + uint32 season_group_id = 44; + uint32 season_level = 45; + bool is_logoff = 46; +} + +message PlayerFriendBriefData { + uint32 uid = 1; + string nickname = 2; + uint32 level = 3; + uint32 avatar_id = 4; + uint32 avatar_star = 5; + uint32 avatar_combat = 6; + uint32 avatar_level = 7; + repeated AvatarSubSkillDetailData main_sub_skill_list = 8; + uint32 last_login_time = 10; + uint32 dress_id = 11; + uint32 armada_id = 12; + string armada_name = 13; + uint32 bond = 14; + uint32 on_medal_id = 15; + Medal on_medal = 16; + uint32 frame_id = 17; + uint32 mp_level = 18; + uint32 custom_head_id = 19; + bool is_allow_visit = 30; + uint32 visit_avatar = 31; + uint32 be_liked_num = 32; + uint32 show_house = 33; + uint32 comfort_value = 34; + uint32 house_level = 35; + string house_name = 36; + bool is_goback = 37; + uint32 avatar_sub_star = 38; + uint32 last_logout_time = 39; + uint32 online_status = 40; + uint32 season_id = 41; + uint32 season_group_id = 42; + uint32 season_level = 43; + bool is_logoff = 44; +} + +message WeaponBriefInfo { + uint32 weapon_id = 1; + uint32 weapon_level = 2; + uint32 weapon_homology_level = 3; +} + +message StigmataBriefInfo { + uint32 stigmata_id = 1; + uint32 stigmata_level = 2; +} + +message AvatarBriefInfo { + uint32 avatar_id = 1; + uint32 avatar_level = 2; + uint32 avatar_star = 3; + uint32 weapon_id = 4; + repeated uint32 stigmata_id_list = 5; + uint32 sub_weapon_id = 6; + uint32 dress_id = 7; + bool is_artifact_switch_on = 8; + uint32 weapon_homology_level = 9; + WeaponBriefInfo weapon_info = 10; + repeated StigmataBriefInfo stigmata_info_list = 11; + bool is_new_equip_info = 12; + uint32 avatar_sub_star = 13; +} + +message ElfBriefInfo { + message Skill { + uint32 skill_id = 1; + uint32 skill_level = 2; + } + + uint32 elf_id = 1; + uint32 elf_level = 2; + uint32 elf_star = 3; + repeated uint32 equip_talent_id_list = 4; + repeated ElfBriefInfo.Skill skill_list = 5; +} + +message LineupBriefInfo { + repeated AvatarBriefInfo avatar_info_list = 1; + repeated ElfBriefInfo elf_info_list = 2; +} + +message MailItem { + uint32 item_id = 1; + uint32 level = 2; + uint32 num = 3; + uint32 split_fragment_num = 4; +} + +message MailAttachment { + repeated MailItem item_list = 1; + uint32 hcoin = 2; + uint32 scoin = 3; + uint32 stamina = 4; + uint32 exp = 5; + uint32 exp_convert_scoin = 6; + uint32 mcoin = 7; +} + +message Mail { + uint32 id = 1; + MailType type = 2; + string title = 3; + string content = 4; + string sender = 5; + uint32 time = 6; + MailAttachment attachment = 7; + bool is_attachment_got = 8; + uint32 expire_time = 9; + repeated string content_param_list = 10; +} + +message MailKey { + uint32 id = 1; + MailType type = 2; +} + +message ChatMsgWeapon { + uint32 unique_id = 1; + WeaponDetailData weapon = 2; +} + +message ChatMsgStigmata { + uint32 unique_id = 1; + StigmataDetailData stigmata = 2; +} + +message ChatMsgAvatar { + uint32 id = 1; + AvatarDetailData avatar = 2; +} + +message ChatMsgLobby { + string msg = 1; + uint32 level = 2; +} + +message ChatMsgKeyValue { + string key = 1; + string value = 2; +} + +message ChatMsgInternal { + repeated ChatMsgKeyValue key_value_list = 1; +} + +message ChatSendRedEnvelope { + uint32 item_id = 1; + string msg = 2; + uint32 red_envelope_id = 3; +} + +message ChatTakeRedEnvelope { + uint32 sender_uid = 1; + string sender_nickname = 2; + uint32 item_id = 3; + uint32 take_scoin = 4; + repeated DropItem drop_item_list = 5; + string msg = 6; + Material take_material = 7; +} + +message ChatMsgElf { + uint32 id = 1; + ElfDetailData elf = 2; +} + +message ChatRedEnvelopeTakeOver { + uint32 sender_uid = 1; + string sender_nickname = 2; + uint32 item_id = 3; + string msg = 4; + uint32 red_envelope_id = 5; +} + +message ChatMsgWorldBeast { + uint32 chatworld_id = 1; + uint32 scene_id = 2; + uint64 beast_unique_id_u64 = 3; + uint32 stage_id = 4; +} + +message ChatMsgMonsterCardPvp { + uint32 activity_id = 1; + uint32 stage_id = 2; + repeated MonsterPvpCardBriefData card_data_list = 3; + repeated MonsterPvpCardBriefData support_card_data_list = 4; + uint32 site_id = 5; + uint32 level = 6; + string stage_transaction_str = 7; +} + +message ChatMsgItem { + enum ChatMsgType { + CHAT_MSG_TYPE_NONE = 0; + STR_MSG = 1; + WEAPON_MSG = 2; + STIGMATA_MSG = 3; + AVATAR_MSG = 4; + LOBBY_MSG = 5; + INTERNAL_MSG = 6; + SEND_RED_ENVELOPE_MSG = 7; + TAKE_RED_ENVELOPE_MSG = 8; + EMOJI = 9; + ELF_MSG = 10; + RED_ENVELOPE_TAKE_OVER_MSG = 11; + CHATWORLD_BEAST_MSG = 12; + MONSTER_CARD_PVP_MSG = 13; + } + + ChatMsgItem.ChatMsgType type = 1; + string msg_str = 2; + ChatMsgWeapon weapon = 3; + ChatMsgStigmata stigmata = 4; + ChatMsgAvatar avatar = 5; + ChatMsgLobby lobby = 6; + ChatMsgInternal internal = 7; + ChatSendRedEnvelope send_red_envelope = 8; + ChatTakeRedEnvelope take_red_envelope = 9; + uint32 emoji_id = 10; + ChatMsgElf elf = 11; + ChatRedEnvelopeTakeOver red_envelope_take_over = 12; + ChatMsgWorldBeast chatworld_beast = 13; + ChatMsgMonsterCardPvp monster_card_pvp = 14; +} + +message ChatMsgContent { + repeated ChatMsgItem items = 1; +} + +message ChatMsgSensitiveCheckResult { + int32 shield_type = 1; + int32 number_check = 2; + string rewrite_text = 3; +} + +message ChatMsg { + message SystemChatMsg { + SystemChatMsgType type = 1; + uint32 item_id = 2; + uint32 item_level = 3; + uint32 item_num = 4; + GachaType gacha_type = 5; + } + + enum MsgChannel { + DEFAULT = 0; + WORLD = 1; + FRIEND = 2; + ARMADA = 3; + PLAYER_CARD = 4; + LOBBY = 5; + MASTER_PUPIL = 6; + COMMON_CHATWORLD = 7; + GROUP = 8; + TEAM = 9; + CAMPAIGN = 10; + ROOM = 11; + WORLD_ACTIVITY = 12; + PRIVATE = 13; + BATTLE = 14; + } + + uint32 uid = 1; + string nickname = 2; + uint32 time = 3; + string msg = 4; + uint32 avatar_id = 5; + uint32 dress_id = 6; + ChatMsgContent content = 7; + ChatMsg.MsgChannel channel = 8; + uint32 frame_id = 9; + bool is_sensitive = 10; + bool is_goback = 11; + uint32 channel_id = 12; + uint32 custom_head_id = 13; + MasterPupilType master_pupil_tag = 14; + ChatMsg.SystemChatMsg system_msg = 15; + uint32 target_uid = 16; + uint32 season_id = 17; + uint32 season_group_id = 18; + uint32 season_level = 19; + uint32 mode = 20; + uint32 mode_para = 21; + bool is_armada_leader = 22; + bool is_team_leader = 23; + ChatMsgSensitiveCheckResult check_result = 24; + bool is_lobby_invite = 25; +} + +message AssistantFrozen { + uint32 uid = 1; + uint32 left_frozen_time = 2; + uint32 left_assistant_times = 3; +} + +message AvatarFragment { + uint32 fragment_id = 1; + uint32 num = 2; +} + +message AvatarCostPlusConfig { + uint32 star = 1; + uint32 cost_plus = 2; +} + +message BulletinActivityConfig { + uint32 activity_id = 1; + uint32 activity_type = 2; + uint32 begin_time = 3; + uint32 end_time = 4; + uint32 bulletin_id = 5; + repeated uint32 mission_ids = 6; + repeated uint32 type_param_list = 7; + string type_param_str = 8; + uint32 min_player_level = 9; + uint32 max_player_level = 10; + repeated uint32 item_list = 11; + string title_name = 12; + string title_image = 13; + string image_path = 14; + string link_button = 15; + string description = 16; + uint32 weight = 17; + string background_path = 18; + string text_image_path = 19; + repeated uint32 currency_list = 20; + string unlock_param_str = 21; + string link_button_2 = 22; +} + +message ChallengeMissionStep { + enum StepStatus { + UNLOCK = 0; + DOING = 1; + REWARDING = 2; + FINISH = 3; + } + + uint32 step_id = 1; + ChallengeMissionStep.StepStatus status = 2; + bool has_take_bonus = 3; +} + +message ChallengeMissionData { + bool is_unlock = 1; + repeated ChallengeMissionStep step_list = 2; +} + +message ActivitySeries { + uint32 series_id = 1; + uint32 available_sweep_num = 2; +} + +message StageInnerAvatarData { + uint32 avatar_id = 1; + uint32 avatar_level = 2; + uint32 avatar_star = 3; + uint32 total_output = 4; + uint32 no_restrict_output = 5; + uint32 do_restrict_output = 6; + uint32 be_restrict_output = 7; + uint32 total_input = 8; + float battle_time = 9; + float total_time = 10; + uint32 enter_times = 11; + uint32 leave_times = 12; + uint32 do_break_times = 13; + uint32 be_break_times = 14; + uint32 do_hit_times = 15; + uint32 be_hit_times = 16; + uint32 exskill_times = 17; + uint32 evade_times = 18; + uint32 evade_effect_times = 19; + uint32 attack_sp_recover = 20; + uint32 total_sp_recover = 21; + uint32 dps = 22; + uint32 special_attack_times = 23; + uint32 evade_success_times = 24; + uint32 weapon_active_skill = 25; + uint32 stage_id = 26; + uint32 normal_output = 27; + uint32 ultra_output = 28; + uint32 switchin_output = 29; + uint32 branch_output = 30; + uint32 charge_output = 31; + uint32 hp_cost = 32; + uint32 hp_recover = 33; + uint32 sp_cost = 34; + uint32 shield_damage = 35; + uint32 avatar_sub_star = 36; + bool is_player_avatar = 37; + bool is_trial_avatar = 38; + uint32 charge_attack_times = 39; + uint32 branch_attack_times = 40; + uint32 max_damage_5 = 41; + uint32 max_damage_15 = 42; +} + +message StageInnerMonsterData { + string monster_name = 1; + string monster_type = 2; + uint32 monster_level = 3; + uint32 monster_num = 4; + uint32 avg_output = 5; + uint32 avg_live_time = 6; + uint32 dps = 7; + uint32 hit_avatar_times = 8; + uint32 break_avatar_times = 9; +} + +message StageInnerElfData { + uint32 elf_id = 1; + uint32 elf_star = 2; + uint32 elf_level = 3; + uint32 attack_times = 4; + uint32 hit_times = 5; + uint32 total_output = 6; + uint32 normal_output = 7; + uint32 ultra_output = 8; + uint32 total_sp_recover = 9; + uint32 skill_use_times = 10; +} + +message Bulletin { + uint32 id = 1; + uint32 type = 2; + uint32 weight = 3; + string title_button = 4; + string title = 5; + string banner_path = 6; + string event_date_str = 7; + string content = 8; + uint32 mark = 9; + uint32 begin_time = 10; + uint32 end_time = 11; + uint32 update_time = 12; + uint32 show_config_id = 13; + uint32 client_req_type = 14; +} + +message EndlessAvatar { + uint32 avatar_id = 1; + uint32 star = 2; + uint32 level = 3; + uint32 weapon_id = 4; + uint32 stigmata_id_1 = 5; + uint32 stigmata_id_2 = 6; + uint32 stigmata_id_3 = 7; + uint32 quantum_weapon_id = 8; +} + +message OpenworldEndlessPlayerInvasionData { + uint32 id = 1; + uint32 invader_id = 2; + uint32 active_time = 3; + repeated uint32 buff_list = 4; + uint32 sub_score = 5; + uint32 battle_id = 6; + uint32 invasion_id = 7; +} + +message OpenworldEndlessPlayer { + uint32 uid = 1; + uint32 score = 2; + uint32 score_time = 3; + repeated OpenworldEndlessPlayerInvasionData invasion_list = 4; + LineupBriefInfo last_lineup_info = 5; + repeated OpenworldEndlessItem effect_item_list = 6; + uint32 max_score = 7; + uint32 reward_progress = 8; + uint32 group_level = 9; + uint32 unfinished_monster_max_progress = 10; + LineupBriefInfo max_score_lineup_info = 11; + uint32 greedy_max_finish_floor = 12; +} + +message OpenworldEndlessItem { + uint32 item_id = 1; + uint32 num = 2; +} + +message CabinTech { + int32 pos_x = 1; + int32 pos_y = 2; +} + +message Cabin { + uint32 type = 1; + uint32 level = 2; + uint32 extend_grade = 3; + uint32 level_up_end_time = 4; + repeated CabinTech tech_list = 5; +} + +message IslandVenture { + uint32 id = 1; + uint32 end_time = 2; + repeated uint32 avatar_id = 3; +} + +message CabinTechAddAttr { + AvatarAttrType attr_type = 1; + float add_ratio = 2; +} + +message StigmataRune { + uint32 rune_id = 1; + uint32 strength_percent = 2; +} + +message StigmataRuneGroup { + uint32 unique_id = 1; + repeated StigmataRune rune_list = 2; +} + +message ExtraStoryAct { + uint32 act_id = 1; + uint32 begin_time = 2; + uint32 end_time = 3; +} + +message ExtraStoryArea { + uint32 area_id = 1; + repeated ExtraStoryAct act_list = 2; + uint32 begin_time = 3; + uint32 end_time = 4; +} + +message ExtraStoryChapter { + uint32 chapter_id = 1; + uint32 min_player_level = 2; + repeated ExtraStoryArea area_list = 3; + uint32 begin_time = 4; + uint32 end_time = 5; + bool is_need_key = 6; +} + +message ExtraStoryAchieve { + uint32 achieve_id = 1; + bool is_take = 2; +} + +message IslandAvatarPos { + uint32 avatar_class = 1; + uint32 pos_type = 2; + repeated uint32 event_id_list = 3; +} + +message FriendCabin { + uint32 type = 1; + uint32 level = 2; + uint32 extend_grade = 3; +} + +message IslandVisitRecord { + IslandVisitRecordType record_type = 1; + uint32 visit_time = 2; + uint32 visit_uid = 3; + uint32 visit_event_id = 4; + repeated RewardData reward_list = 5; +} + +message MpTeamMemberInfo { + PlayerDetailData detail = 1; + PlayerCardData card = 3; +} + +message MpTeamMember { + uint32 index = 1; + uint32 uid = 2; + uint32 mp_exp = 3; + uint32 stamina = 4; + repeated MpSkill skill_list = 5; + uint32 head_avatar_id = 6; + uint32 dress_id = 7; + uint32 punish_end_time = 8; + uint32 voice_id = 9; + MpTeamMemberInfo member_info = 11; + LobbyMemberStatus status = 12; + LobbyClientStatus client_status = 13; + uint32 avatar_trial_id = 14; + bool is_wild = 15; + string region_name = 18; + OpenworldBossMp openworld_boss_info = 19; + uint32 frame_id = 20; + uint32 enter_type = 21; + uint32 custom_head_id = 22; + uint32 newbie_id = 23; + uint32 data_version = 24; + uint32 season_id = 25; + uint32 season_group_id = 26; + uint32 season_level = 27; + uint32 extra_skill_id = 28; +} + +message MpTeamData { + uint32 team_id = 1; + uint32 leader_uid = 2; + MpTeamStatus status = 3; + LobbyStatus lobby_status = 4; + repeated MpTeamMember member_list = 5; + uint32 min_level = 6; + LobbyEnterType lobby_enter_type = 7; + uint32 stage_id = 8; + string team_name = 9; + uint32 max_level = 11; +} + +message MpBadge { + uint64 unique_id_u64 = 1; + uint32 badge_id = 2; +} + +message MpBadgeData { + uint64 equiped_badge_uid_u64 = 1; + repeated MpBadge badge_list = 2; +} + +message MpSkillPoint { + MpSkillType type = 1; + uint32 value = 2; +} + +message MpSkill { + uint32 skill_id = 1; + uint32 level = 2; +} + +message MpStageSettle { + uint32 uid = 1; + uint32 score = 2; + uint32 damage = 3; + uint32 mvp_score = 4; +} + +message ConsignedOrder { + uint32 id = 1; + uint32 consigner_uid = 2; + uint32 reward_id = 3; + uint32 progress = 4; + uint32 unique_id = 5; + uint32 order_level = 6; + repeated RewardData reward_list = 7; + repeated DropItem drop_item_list = 8; + uint32 order_credit = 9; +} + +message BuffEffect { + uint32 effect_id = 1; + uint32 end_time = 2; + uint32 max_during = 3; + uint32 total_contri_num = 4; +} + +message GrandKeySkill { + uint32 key_id = 1; + uint32 skill_id = 2; + uint32 last_time = 3; +} + +message GrandKey { + uint32 id = 1; + uint32 end_time = 2; + uint32 unlock_level = 3; + uint32 scoin_num = 4; + uint32 level = 5; + uint32 breach_level = 6; + uint32 activate_level = 7; + GrandKeySkill skill = 8; + repeated uint32 unlock_skill_list = 9; +} + +message Medal { + uint32 id = 1; + uint32 end_time = 2; + int32 extra_param = 3; + bool is_favorite = 4; +} + +message CustomHead { + uint32 id = 1; + uint32 end_time = 2; +} + +message PhonePendant { + uint32 id = 1; + uint32 end_time = 2; +} + +message StageActDifficultyInfo { + uint32 act_id = 1; + uint32 difficulty = 2; + repeated uint32 has_take_challenge_num_index = 3; +} + +message GachaTotalProb { + string name = 1; + string prob = 2; + uint32 order_value = 3; +} + +message GachaDetailProb { + string name = 1; + string star = 2; + string content = 3; + string prob = 4; + bool is_up = 5; + uint32 order_value = 6; +} + +message MpMatchInfo { + uint32 stage_id = 1; + uint32 start_match_time = 2; +} + +message PlayerCardSlot { + uint32 index = 1; + uint32 target_id = 2; +} + +message PlayerCardAvatarData { + uint32 index = 1; + AvatarDetailData avatar = 2; +} + +message PlayerCardMedalData { + uint32 index = 1; + uint32 medal_id = 2; + int32 extra_param = 3; +} + +message PlayerCardElfData { + uint32 index = 1; + ElfDetailData elf = 2; +} + +message PlayerCardMsg { + uint32 index = 1; + ChatMsg msg = 2; +} + +message PlayerCardMsgData { + uint32 msg_index = 1; + uint32 msg_config = 2; + repeated PlayerCardMsg msg_list = 3; +} + +message PlayerCardData { + uint32 uid = 1; + repeated PlayerCardAvatarData avatar_list = 2; + repeated PlayerCardMedalData medal_list = 3; + PlayerCardMsgData msg_data = 4; + uint32 island_like_num = 5; + uint32 on_phone_pendant_id = 6; + repeated PlayerCardElfData elf_list = 7; +} + +message ChallengeModeAvatar { + uint32 avatar_id = 1; + uint32 hp_percent = 2; + uint32 sp_percent = 3; + uint32 last_recover_time = 4; + bool is_die = 5; +} + +message ChallengeModeArea { + uint32 area_id = 1; + repeated ChallengeModeAvatar avatar_list = 2; + repeated uint32 weapon_uid_list = 3; + repeated uint32 stigmata_uid_list = 4; +} + +message MpRecordMember { + uint32 uid = 1; + uint32 avatar_id = 2; + uint32 dress_id = 3; + bool is_mvp = 4; + bool is_leader = 5; + string nick_name = 6; + uint32 avatar_level = 7; + uint32 avatar_star_level = 8; + string region_name = 9; +} + +message MpStageRecord { + uint32 stage_id = 1; + uint32 begin_time = 2; + uint32 duration = 3; + repeated MpRecordMember member_list = 4; +} + +message StageFightInfo { + uint32 damage = 1; + uint32 elf_damage = 2; + uint32 score = 3; + uint32 charge_num = 4; +} + +message MpStageDamageInfo { + uint32 hit_damage_1 = 1; + uint32 hit_damage_2 = 2; + uint32 hit_damage_3 = 3; +} + +message GodWarStatus { + uint32 teleport_id = 1; + bool is_abandon = 3; + uint32 star_ring_energy = 4; +} + +message ScDLCStatus { + uint32 sc_dlc_fever_score = 1; + uint32 sc_dlc_climax_score = 2; +} + +message OwChapterStatus { + repeated uint32 antigravity_coin_index_list = 1; +} + +message ChapterArkStatus { + repeated uint32 chosen_branch_site_list = 1; + bool is_abandon = 2; +} + +message StageEndReqBody { + uint32 stage_id = 1; + StageEndStatus end_status = 2; + bool is_mvp = 3; + uint32 avatar_exp_reward = 4; + uint32 scoin_reward = 5; + repeated uint32 challenge_index_list = 6; + repeated DropItem drop_item_list = 7; + repeated StageCheatData cheat_data_list = 8; + uint32 stage_pass_time = 10; + uint32 max_combo_num = 11; + uint32 score = 12; + uint32 client_average_rtt = 13; + uint32 client_max_rtt = 14; + uint32 be_hit_times = 15; + uint32 team_id = 16; + uint32 mvp_score = 17; + repeated ChallengeModeAvatar avatar_list = 18; + uint32 evade_times = 19; + uint32 evade_success_times = 20; + uint32 boss_damage = 21; + uint32 battle_score = 23; + uint32 rank = 24; + MpStageRecord mp_stage_record = 25; + uint32 dungeons_evaluation = 26; + StageFightInfo fight_info = 27; + MpStageDamageInfo mp_stage_damage_info = 28; + bytes security_cmd_reply = 29; + repeated uint32 buff_id_list = 30; + uint32 stage_end_floor = 31; + GodWarStatus god_war_status = 32; + ScDLCStatus sc_dlc_status = 33; + OwChapterStatus ow_chapter_status = 34; + repeated GenericItemNum selected_item_list = 35; + ChapterArkStatus chapter_ark_status = 36; + uint32 activity_id = 37; + repeated uint32 monster_card_list = 38; +} + +message AvatarEquipBuff { + uint32 avatar_id = 1; + string buff_name = 2; + uint32 buff_num = 3; +} + +message UserRankWeeklyReportEndless { + uint32 final_boss_id = 1; + EndlessRewardType reward_type = 3; + uint32 battle_config_id = 4; +} + +message UserRankWeeklyReportExBoss { + repeated FinishedExBossInfo finished_boss_info_list = 1; + uint32 rank_percent = 2; +} + +message UserRankWeeklyReportUltraEndless { + uint32 group_level = 1; + uint32 cup_num_before = 2; + uint32 cup_num_after_schedule_settle = 3; + uint32 battle_config_id = 4; +} + +message UserRankSlgBattle { + uint32 country_id = 1; +} + +message RanchMonsterBriefInfo { + uint32 monster_id = 1; + repeated uint32 skill_id_list = 2; + uint32 monster_level = 3; +} + +message MonsterCardCardBriefData { + uint32 unique_id = 1; + uint32 star = 2; + uint32 level = 3; + repeated uint32 talent_list = 4; +} + +message MonsterCardActivityRankInfo { + repeated MonsterCardCardBriefData team_brief_data_list = 1; + uint32 collection_level = 2; + uint32 floor = 3; +} + +message ThemeTowerBuffBriefInfo { + uint32 buff_id = 1; + uint32 buff_level = 2; +} + +message DevilAutoChessActivitySpecialRankInfo { + uint32 wave_num = 1; + uint32 round_num = 2; + uint32 card_num = 3; +} + +message FutariBattleActivityBriefInfo { + uint32 support_avatar_id = 1; +} + +message UserRankData { + uint32 uid = 1; + uint32 score = 2; + uint32 rank = 3; + string nick_name = 4; + uint32 armada_id = 5; + string armada_name = 6; + uint32 avatar_id = 7; + uint32 dress_id = 8; + uint32 frame_id = 9; + string house_name = 10; + uint32 custom_head_id = 11; + bool is_logoff = 12; + repeated AvatarBriefInfo avatar_info_list = 31; + repeated ElfBriefInfo elf_info_list = 32; + string dlc_name = 33; + UserRankWeeklyReportEndless weekly_report_endless_info = 34; + UserRankWeeklyReportExBoss weekly_report_ex_boss_info = 35; + uint32 ultra_endless_group_level = 36; + UserRankWeeklyReportUltraEndless weekly_report_ultra_endless_info = 37; + UserRankSlgBattle slg_battle_info = 39; + repeated RanchMonsterBriefInfo monster_info_list = 40; + MonsterCardActivityRankInfo monster_card_rank_info = 41; + uint32 kingdom_id = 42; + repeated ThemeTowerBuffBriefInfo theme_tower_buff_info_list = 43; + DevilAutoChessActivitySpecialRankInfo devil_auto_chess_rank_info = 44; + FutariBattleActivityBriefInfo futari_battle_activity_brief_info = 45; + MonsterCardPvpPlayerBriefData monster_card_pvp_player_brief_data = 46; +} + +message RankShowData { + uint32 my_rank_type = 1; + uint32 my_rank = 2; + repeated UserRankData rank_list = 3; + uint32 my_score = 4; + bool is_feature_closed = 5; +} + +message MasterPupilRetcode { + enum Retcode { + SUCC = 0; + FAIL = 1; + PUPIL_LEVEL_LIMIT = 2; + MASTER_LEVEL_LIMIT = 3; + APPLY_NUM_LIMIT = 6; + TARGET_APPLY_NUM_LIMIT = 7; + INVALID_UID = 8; + IS_EVALED = 9; + EXAM_MISSION_UNFINISH = 10; + FAME_LEVEL_LIMIT = 12; + FAME_LEVEL_REWARDED = 13; + CONTENT_STR_INVALID = 14; + MASTER_PUPIL_TYPE_ERROR = 16; + APPLY_REPEATE = 17; + HAS_RELATION = 18; + NO_RELATION = 19; + RELATION_CD_LIMIT = 21; + HAS_STEP_UNFINISH = 22; + NO_STEP_DOING = 23; + DAILY_REFRESH_TIMES_LIMIT = 24; + SAME_DAY_TIME = 25; + RECOMMEND_CD = 26; + INVALID_STAR = 27; + NOT_OPEN = 28; + NOT_ALLOW_CROSS_REGION_MASTER_PUPIL = 29; + FEATURE_LIMIT = 30; + SELF_PUPIL_NUM_LIMIT = 101; + SELF_HAS_MASTER = 102; + SELF_STEP_ERROR = 103; + SELF_DISMISS_TIME_LIMIT = 104; + SELF_IS_GRADUATED = 105; + SELF_MONTH_PUPIL_NUM_LIMIT = 106; + SELF_IS_MASTER = 107; + SELF_FRIEND_FULL = 108; + TARGET_PUPIL_NUM_LIMIT = 201; + TARGET_HAS_MASTER = 202; + TARGET_STEP_ERROR = 203; + TARGET_DISMISS_TIME_LIMIT = 204; + TARGET_IS_GRADUATED = 205; + TARGET_MONTH_PUPIL_NUM_LIMIT = 206; + TARGET_IS_MASTER = 207; + DECLARATION_IN_CD = 208; + DECLARATION_IN_AUDIT = 209; + FEATURE_CLOSED = 210; + TARGET_RECALLED = 211; + TARGET_FRIEND_FULL = 212; + } + +} + +message MasterPupilCard { + MasterPupilType type = 1; + PlayerGenderType gender = 2; + PlayerAreaType area = 3; + PlayerInterestType interest = 4; + string declaration = 5; + uint32 uid = 6; + bool is_recommend = 7; + uint32 score = 8; +} + +message MasterPupilEventData { + message CompanyMission { + uint32 mission_id = 1; + uint32 time = 2; + } + + uint32 uid = 1; + string nickname = 2; + MasterPupilMission mission = 3; + MasterPupilApplyMsg apply = 4; + MasterPupilDealMsg deal = 5; + MasterPupilEvalMsg eval = 6; + repeated MasterPupilEventData.CompanyMission company_mission_list = 7; +} + +message MasterPupilApplyMsg { + uint32 uid = 1; + MasterPupilType type = 2; + MasterPupilCard card = 3; + uint32 level = 4; + string nickname = 5; + uint32 teacher_rank = 6; + uint32 last_online_time = 7; + uint32 avatar_id = 8; + uint32 dress_id = 9; + uint32 score = 10; + uint32 frame_id = 11; + uint32 custom_head_id = 12; + uint32 last_logout_time = 13; + uint32 online_status = 14; + bool is_logoff = 15; +} + +message MasterPupilData { + uint32 uid = 1; + MasterPupilType type = 2; + MasterPupilCard card = 3; + uint32 level = 4; + string nickname = 5; + uint32 teacher_rank = 6; + uint32 last_online_time = 7; + uint32 avatar_id = 8; + uint32 dress_id = 9; + MasterPupilStatus status = 10; + uint32 relation_time = 11; + PlayerFriendBriefData brief_data = 12; + uint32 score = 13; + bool is_logoff = 14; +} + +message MasterPupilDealMsg { + uint32 target_uid = 1; + MasterPupilType type = 2; + MasterPupilOpType op = 3; + string nickname = 4; +} + +message MasterPoolData { + repeated Material material_list = 1; +} + +message MasterPupilEvalMsg { + repeated PupilMainData pupil_list = 1; + uint32 score = 2; +} + +message MasterMainData { + uint32 exp = 1; + uint32 level = 2; + repeated uint32 reward_level = 3; + uint32 last_dismiss_time = 4; + uint32 score = 5; + uint32 period_master_medal_num = 6; +} + +message PupilFinishExamMissionMsg { + uint32 uid = 1; + string nickname = 2; + MasterPupilMission mission = 3; +} + +message MasterPupilMission { + enum MissionStatus { + MISSION_STATUS_NONE = 0; + DOING = 1; + FINISH = 2; + } + + uint32 id = 1; + uint32 status = 2; +} + +message PupilStep { + uint32 step_id = 1; + uint32 master_id = 2; + uint32 star = 3; + string comment = 4; + uint32 level = 5; + MasterPoolData pool_reward = 6; + repeated uint32 exam_mission_id_list = 7; +} + +message PupilMainData { + repeated PupilStep step_list = 1; + uint32 last_dismiss_time = 2; + uint32 pupil_id = 3; + string nickname = 4; + uint32 cur_step_id = 5; + uint32 left_assistant_times = 6; + uint32 left_frozen_time = 7; + PlayerFriendBriefData master_brief = 8; + uint32 pool_fame_num = 9; + bool is_graduated = 10; +} + +message TrialAvatar { + uint32 sample_id = 1; + uint32 end_time = 2; + bool is_first_show = 3; +} + +message Furniture { + uint32 id = 1; + uint32 pos_x = 2; + uint32 pos_y = 3; + uint32 direction = 4; + uint32 location = 5; +} + +message DormRoom { + uint32 id = 1; + string name = 2; + repeated Furniture furniture_list = 3; + repeated uint32 avatar_list = 4; +} + +message DormHouse { + uint32 id = 1; + string name = 2; + repeated DormRoom room_list = 3; + uint32 level = 4; +} + +message DepotFurniture { + uint32 id = 1; + uint32 num = 2; +} + +message DormRoomAvatar { + uint32 room_id = 1; + repeated uint32 avatar_list = 2; +} + +message DormEvent { + uint32 avatar_id = 1; + repeated uint32 event_id_list = 2; +} + +message DormFacility { + uint32 type = 1; + uint32 level = 2; + uint32 id = 3; + uint32 begin_time = 4; +} + +message DormPowerBonus { + uint32 house_id = 1; + uint32 bonus = 2; +} + +message DormFacilityData { + repeated DormFacility facility_list = 1; + uint32 level_up_facility_type = 2; + uint32 level_up_end_time = 3; + uint32 store_stamina = 4; + bool is_can_store_stamina = 5; + uint32 power = 10; + uint32 power_recover_left_time = 11; + uint32 power_recover_config_time = 12; + uint32 power_limit = 13; + uint32 base_power_limit = 14; + repeated DormPowerBonus limit_bonus_list = 15; + uint32 power_recovery = 16; + uint32 base_power_recovery = 17; + uint32 bonus_power_recovery = 18; +} + +message DormVisitRecord { + uint32 visit_time = 1; + uint32 visit_uid = 2; + uint32 visit_avatar = 3; + uint32 level = 4; + string name = 5; +} + +message AvatarRoll { + uint32 avatar_id = 1; + uint32 progress = 2; + repeated uint32 has_take_group_list = 3; + bool is_unlock = 4; +} + +message OpenworldBossMp { + uint32 boss_id = 1; + uint32 left_hp = 2; + uint32 mp_left_hp = 3; + repeated uint32 buff_list = 4; +} + +message MainlineStepMission { + bool is_update = 1; + repeated uint32 cur_mainline_step_list = 2; + repeated uint32 finished_mainline_step_list = 3; +} + +message LotteryPlayerInfo { + uint32 uid = 1; + uint32 level = 2; + uint32 vip_point = 3; + uint32 vip_level = 4; + uint32 account_type = 5; + uint32 tag = 6; + uint32 first_reward_num = 7; + bool is_last_schedule_get_rare_reward = 8; +} + +message ChatworldDishReward { + uint32 reward_id = 1; + uint32 taken_times = 2; + uint32 last_take_time = 3; +} + +message FinishedExBossInfo { + uint32 boss_id = 1; + uint32 score = 2; + repeated AvatarBriefInfo avatar_info_list = 3; + repeated ElfBriefInfo elf_info_list = 4; +} + +message WarshipComponent { + uint32 type = 1; + uint32 component_id = 2; +} + +message WarshipThemeData { + uint32 warship_id = 1; + repeated WarshipComponent component_list = 2; + uint32 bgm_play_mode = 3; + bool is_weather_fixed = 4; + uint32 weather_idx = 5; +} + +message VirtualAvatar { + uint32 virtual_avatar_id = 1; + uint32 virtual_weapon_id = 2; + uint32 virtual_stigmata_id_1 = 3; + uint32 virtual_stigmata_id_2 = 4; + uint32 virtual_stigmata_id_3 = 5; + uint32 virtual_buff_id = 6; + bool is_away = 7; +} + +message OpenworldQuest { + uint32 id = 2; + OpenworldQuestStatus status = 3; + uint32 buff_id = 4; + uint32 debuff_id = 5; + uint32 position = 6; + repeated uint32 finish_challenge_list = 7; + uint32 progress = 8; + uint32 rarity_reward_id = 9; + uint32 quest_activity_id = 10; + uint32 special_timeout_sec = 11; +} + +message OpenworldTalent { + uint32 talent_id = 1; + uint32 level = 2; +} + +message LobbyPlayer { + uint32 uid = 1; + string nick_name = 2; + uint32 level = 4; + uint32 avatar_trial_id = 5; + bool is_newbie = 6; + bool is_goback = 7; + string region_name = 8; + uint32 armada_id = 9; +} + +message SnsShowPriviledge { + uint32 sns_show_type = 1; + uint32 sns_show_priviledge_state = 2; +} + +message TakeChatRedEnvelopePlayer { + uint32 uid = 1; + string nickname = 2; + uint32 scoin_num = 3; + DropItem drop_item = 4; + Material material = 5; +} + +message WikiDetailData { + uint32 wiki_detail_type = 1; + uint32 wiki_detail_num_get = 2; + uint32 wiki_detail_score = 3; + uint32 wiki_detail_num_total = 4; +} + +message CommonUintKVStruct { + uint32 key = 1; + uint32 value = 2; +} + +message PjmsCoreUnit { + uint32 unit_id = 1; + uint32 level = 2; +} + +message PjmsAuxiliaryUnit { + uint32 unique_id = 1; + uint32 unit_id = 2; + uint32 exp = 3; + uint32 level = 4; + PjmsAuxiliaryUnitLockStatus lock_status = 7; + repeated uint32 affix_list = 8; +} + +message PanelMissionData { + message PanelMissionCycleData { + uint32 cycle_id = 1; + uint32 begin_time = 2; + uint32 end_time = 3; + } + + uint32 mission_id = 1; + repeated PanelMissionData.PanelMissionCycleData cycle_list = 2; +} + +message MonsterCardPvpPlayerData { + uint32 player_uid = 1; + string nickname = 2; + uint32 elo_score = 3; + uint32 level = 4; + repeated MonsterPvpCardBriefData card_data_list = 5; + uint32 robot_id = 6; + repeated MonsterPvpCardBriefData support_card_data_list = 7; + uint32 rank = 8; +} + +message MonsterCardPvpCombatData { + MonsterCardPvpPlayerData attacker = 1; + MonsterCardPvpPlayerData defender = 2; +} + +message MonsterPvpCardBriefData { + uint32 unique_id = 1; + uint32 star = 2; + repeated uint32 skill_list = 3; + bool is_hidden = 4; +} + +message MonsterCardPvpPlayerBriefData { + uint32 uid = 1; + uint32 max_elo_score = 2; + uint32 level = 3; + repeated MonsterPvpCardBriefData card_data_list = 4; + string nickname = 5; + uint32 last_refresh_time = 6; + uint32 today_add_elo_score = 7; + uint32 today_sub_elo_score = 8; + repeated MonsterPvpCardBriefData support_card_data_list = 9; +} + +message MonsterCardPvpCombatLog { + MonsterCardPvpPlayerData my_data = 1; + MonsterCardPvpPlayerData opponent_data = 2; + bool is_win = 3; + int32 delta_score = 4; +} + +message MonsterCardPvpCombatHistoryData { + repeated MonsterCardPvpCombatLog combat_log_list = 1; +} + +enum ConstantEnum { + CONSTANT_ENUM_NONE = 0; + UN_LIMIT_TIMES = 65535; + FRAME_DEFAULT_ID = 200001; +} + +enum SpecialItemId { + SPECIAL_ITEM_ID_NONE = 0; + ITEM_GREEN_STONE = 4; + ITEM_PURPLE_JADE = 5; + ITEM_FRIENDS_POINT = 6; + ITEM_SCOIN = 100; + ITEM_FIGHT_OPENWORLD_STAGE_BOSS = 901; + ITEM_ARMADA_WAR_ENERGE_ITEM_ID = 914; + ITEM_DLC_COIN = 801; + ITEM_DLC_REVIVE_COIN = 803; + ITEM_SC_DLC_REVIVE_COIN = 835; + ITEM_STAMINA_MEDICINE = 7033; + ITEM_BENG_HUAI_FRAGMENTS = 7032; + ITEM_WEEK_DAY_ACTIVITY_COIN = 7034; + ITEM_SPEED_UP_STAGE = 9007; + ITEM_ROGUE_STAGE_COIN = 9008; +} + +enum SpecialMailId { + SPECIAL_MAIL_ID_NONE = 0; + MAIL_INVITE = 1001; + MAIL_INVITEE = 1002; + MAIL_ACTIVITY_INVITE = 1003; + MAIL_ARMADA_KICK = 2001; + MAIL_ARMADA_DISSOLVE = 2002; + MAIL_RECLAIM_RANK_REWARD = 2017; + MAIL_CHAPTER_RESET = 2021; + MAIL_CHAPTER_RESET_AVATAR_COMPENSATE = 2022; + MAIL_MP_RAID_HCOIN_COMPENSATE = 2023; + MAIL_ARMADA_CHANGE_NAME = 2101; + MAIL_ARMADA_LEADER_OFFLINE_NOTICE = 2102; + MAIL_ARMADA_IMPEACH_LEADER_START = 2103; + MAIL_ARMADA_IMPEACH_LEADER_SUCCESS = 2104; + MAIL_ARMADA_IMPEACH_LEADER_FAIL = 2105; + MAIL_ARMADA_IMPEACH_LEADER_CANCEL = 2106; + MAIL_MP_NEWBIE = 3001; + MAIL_MP_REPORT = 3002; + MAIL_PAY_CARD = 4001; + MAIL_PAY_SUBS = 4002; + MAIL_SECURITY_PASSWORD_RESET = 4101; + MAIL_OPENWORLD_QUEST_REWARD = 5001; + MAIL_SIMULATE_REWARD = 6004; + MAIL_ARMADA_WAREHOUSE_AUTO_CANCEL = 6023; + MAIL_CHATWORLD_DISH_COMPENSATE = 6024; + MAIL_RAFFLE_COMPENSATE = 6025; + MAIL_BULLETIN_SCORE_REWARD = 6039; + MAIL_BIRTHDAY_REWARD = 6101; + MAIL_RAID_RANK_REWARD = 6201; + MAIL_RAID_SCORE_REWARD = 6202; + MAIL_RAID_SPECIAL_REWARD = 6203; + MAIL_SEASON_WEEK_RANK_REWARD = 6301; + MAIL_SEASON_RANK_REWARD = 6302; + MAIL_SEASON_SCORE_REWARD = 6303; + MAIL_EXTRA_STORY_COMPENSATE_REWARD = 6401; + MAIL_WORLD_BOSS_SCORE_REWARD = 6501; + MAIL_WORLD_BOSS_RANK_REWARD = 6502; + MAIL_WORLD_BOSS_KILL_BOSS_REWARD = 6503; + MAIL_HCOIN_GACHA_RESET = 6601; + MAIL_GACHA_EX_REWARD = 6602; + MAIL_COUPLE_TOWER_ACTIVITY_FLOOR_REWARD = 6801; + MAIL_PLAYER_WEEKLY_REPORT = 6901; + MAIL_MASTER_PUPIL_MASTER_REWARD_0_STAR = 7001; + MAIL_MASTER_PUPIL_MASTER_REWARD_1_STAR = 7002; + MAIL_MASTER_PUPIL_MASTER_REWARD_2_STAR = 7003; + MAIL_MASTER_PUPIL_MASTER_REWARD_3_STAR = 7004; + MAIL_MASTER_PUPIL_PUPIL_REWARD = 7005; + MAIL_MASTER_PUPIL_DISMISS = 7006; + MAIL_ARMADA_MATRIX_DEPOSIT_REWARD = 7101; + MAIL_ARMADA_WAR_SEASON_REWARD = 7102; + MAIL_ARMADA_WAR_BATTLE_REWARD = 7103; + MAIL_ARMADA_WAR_BATTLE_CONTRIBUTION_REWARD = 7104; + MAIL_ARMADA_WAR_BATTLE_RANK_REWARD = 7105; + MAIL_ARMADA_WAR_APPLY_NOTIFY_MAIL = 7106; + MAIL_ARMADA_WAR_ARMADA_RESET_MAIL = 7107; + MAIL_ARMADA_WAR_PLAYER_BATTLE_NUM_REWARD = 7108; + MAIL_ARMADA_FIRST_JOIN_REWARD = 7109; + MAIL_TIME_LIMIT_ADD_UP_REWARD = 7201; + MAIL_ARMADA_MATRIX_ARMADA_REWARD = 7305; + MAIL_MP_RAID_RESET_MISSION_REWARD = 7402; + MAIL_BLOCK_ZONE_MISSION_REWARD = 7403; + MAIL_AVATAR_STAR_UP_RETURN = 7601; + MAIL_ROGUE_TOWER_ENDLESS_SCORE_REWARD = 7602; + MAIL_DREAM_REWARD = 7604; + MAIL_SLG_BATTLE_COUNTRY_RANK_REWARD = 7607; + MAIL_SINGLE_WANTED_WEEKLY_ENGAGE_REWARD = 7608; + MAIL_SINGLE_WANTED_BOX_FIXED_REWARD = 7609; + MAIL_SINGLE_WANTED_BOX_CHOICE_REWARD = 7610; + MAIL_SLG_BATTLE_SCORE_REWARD = 7611; + MAIL_SLG_ACTIVITY_SCORE_REWARD = 7612; + MAIL_WANTED_OFF_COMPENSATE_REWARD = 7613; + MAIL_OPENWORLD_CHAPTER_LIMIT_REWARD_COMPENSATE = 7617; + MAIL_SC_DLC_DAILY_QUEST_COMPENSATE = 7619; + MAIL_NEWBIE_LEVEL_RUSH_COMPENSATE = 7620; + MAIL_SC_DLC_EVENT_COMPENSATE = 7621; + MAIL_MODIFY_PLAYER_DATA_580_LEVEL_DATA_COMPENSATE = 7625; + MAIL_NEWBIE_MATERIAL_RECYCLE = 8058; + MAIL_GLOABL_EXPLORE_WIN_REWARD = 8070; + MAIL_GLOABL_EXPLORE_LOSE_REWARD = 8071; +} + +enum AccountType { + ACCOUNT_NONE = 0; + ACCOUNT_MIHOYO = 1; + ACCOUNT_BILIBILI = 2; + ACCOUNT_UC = 3; + ACCOUNT_360 = 4; + ACCOUNT_YYB = 5; + ACCOUNT_XIAOMI = 6; + ACCOUNT_HUAWEI = 7; + ACCOUNT_OPPO = 8; + ACCOUNT_VIVO = 9; + ACCOUNT_MEIZU = 10; + ACCOUNT_COOLPAD = 11; + ACCOUNT_LENOVO = 12; + ACCOUNT_GIONEE = 13; + ACCOUNT_BAIDU = 14; + ACCOUNT_WANDOUJIA = 15; + ACCOUNT_LESHI = 16; + ACCOUNT_GOOGLE = 17; + ACCOUNT_FACEBOOK = 18; + ACCOUNT_ITUNES_GC = 19; + ACCOUNT_SIGNIN_APPLE = 20; + ACCOUNT_WEGAME = 21; + ACCOUNT_BYTEDANCE = 22; + ACCOUNT_STEAM = 23; + ACCOUNT_HOYOLAB = 24; +} + +enum CGType { + CG_NONE = 0; + CG_START = 1; + CG_SEVEN_CHAPTER = 2; +} + +enum AvatarPartType { + AVATAR_PART_TYPE_NONE = 0; + AVATAR_PART_TYPE_ONE = 1; + AVATAR_PART_TYPE_TWO = 2; +} + +enum EquipmentType { + EQUIPMENT_TYPE_NONE = 0; + EQUIPMENT_MATERIAL = 1; + EQUIPMENT_AVATAR_FRAGMENT = 2; + EQUIPMENT_WEAPON = 3; + EQUIPMENT_STIGMATA = 4; + EQUIPMENT_AVATAR_CARD = 5; + EQUIPMENT_ENDLESS_ITEM = 6; + EQUIPMENT_DRESS = 7; + EQUIPMENT_VIRTUAL = 8; + EQUIPMENT_MEDAL = 10; + EQUIPMENT_FURNITURE = 14; + EQUIPMENT_OPENWORLD_ENDLESS_ITEM = 15; + EQUIPMENT_CUSTOM_HEAD = 16; + EQUIPMENT_FRAME = 20; + EQUIPMENT_SHOPPING_MALL_GIFT = 30; + EQUIPMENT_MECHA = 34; + EQUIPMENT_PHONE_PENDANT = 35; + EQUIPMENT_EMOJI = 36; + EQUIPMENT_ELF_FRAGMENT = 37; + EQUIPMENT_ELF_CARD = 38; + EQUIPMENT_DLC_AVATAR_CARD = 39; + EQUIPMENT_WARSHIP = 40; + EQUIPMENT_TRIAL_WARSHIP = 41; + EQUIPMENT_ERROR = 100; +} + +enum WeaponBranchType { + WEAPON_BRANCH_TYPE_NONE = 0; + WEAPON_DEFAULT = 1; + WEAPON_BEFALL = 2; +} + +enum EquipmentVirtualType { + EQUIPMENT_VIRTUAL_TYPE_NONE = 0; + EQUIPMENT_VIRTUAL_ARMADA_FUND = 80001; + EQUIPMENT_VIRTUAL_MP_EXP = 80002; + EQUIPMENT_VIRTUAL_SCOIN = 80006; + EQUIPMENT_MASTER_FAME_EXP = 80007; + EQUIPMENT_VIRTUAL_SEASON_EXP = 80008; + EQUIPMENT_VIRTUAL_PLAYER_EXP = 80009; + EQUIPMENT_VIRTUAL_ARMADA_CONTRIBUTION = 80011; + EQUIPMENT_VIRTUAL_VITALITY = 80012; + EQUIPMENT_VIRTUAL_CARD_PRODUCT = 80013; + EQUIPMENT_VIRTUAL_CONTRACT_POINT = 80014; + EQUIPMENT_VIRTUAL_DLC_EXP = 80015; + EQUIPMENT_VIRTUAL_BATTLE_PASS_EXP_ACTIVITY = 80016; + EQUIPMENT_VIRTUAL_ADVENTURE_BADGE = 80017; + EQUIPMENT_VIRTUAL_ADVENTURE_GRAIN = 80018; + EQUIPMENT_VIRTUAL_CHAPTER_ACTIVITY_EXP = 80019; + EQUIPMENT_VIRTUAL_PICTURE_SCORE = 80020; + EQUIPMENT_VIRTUAL_OW_FOX_EXP = 80021; + EQUIPMENT_VIRTUAL_OW_AI_EXP = 80022; + EQUIPMENT_VIRTUAL_SANCTUARY_EXP = 80023; + EQUIPMENT_VIRTUAL_CUSTOM_GACHA_ENERGY = 80024; + EQUIPMENT_VIRTUAL_OPTIONAL_GACHA_ENERGY = 80026; + EQUIPMENT_VIRTUAL_NEWBIE_PRIVILEGE = 80027; + EQUIPMENT_VIRTUAL_SC_DLC_EXP = 80028; + EQUIPMENT_VIRTUAL_BATTLE_PASS_EXP_DUTY = 80029; + EQUIPMENT_VIRTUAL_CUSTOM_GOBACK_GACHA_ENERGY = 80030; + EQUIPMENT_VIRTUAL_OW_TERMINAL_EXP = 80031; + EQUIPMENT_VIRTUAL_PJMS_CHAPTER_EXP_1 = 80032; + EQUIPMENT_VIRTUAL_PJMS_CHAPTER_EXP_2 = 80033; + EQUIPMENT_VIRTUAL_PJMS_CHAPTER_EXP_3 = 80034; + EQUIPMENT_VIRTUAL_PJMS_CHAPTER_EXP_4 = 80035; + EQUIPMENT_VIRTUAL_PJMS_CHAPTER_EXP_5 = 80036; + EQUIPMENT_VIRTUAL_PJMS_CHAPTER_EXP_6 = 80037; + EQUIPMENT_VIRTUAL_PJMS_CHAPTER_EXP_7 = 80038; + EQUIPMENT_VIRTUAL_PJMS_CHAPTER_EXP_8 = 80039; + EQUIPMENT_VIRTUAL_PJMS_CHAPTER_EXP_9 = 80040; + EQUIPMENT_VIRTUAL_PJMS_CHAPTER_EXP_10 = 80041; +} + +enum MechaSlot { + MECHA_SLOT_NONE = 0; + MECHA_SLOT_LEFT_1 = 1; + MECHA_SLOT_LEFT_2 = 2; + MECHA_SLOT_CENTER = 3; + MECHA_SLOT_RIGHT_2 = 4; + MECHA_SLOT_RIGHT_1 = 5; +} + +enum WeaponType { + WEAPON_TYPE_NONE = 0; + WEAPON_DOUBLE_GUN = 1; + WEAPON_SWORD = 2; + WEAPON_HAND_GUN = 3; + WEAPON_HEAVY_SWORD = 4; + WEAPON_TAIL = 5; + WEAPON_FIST = 6; + WEAPON_SCYTHE = 7; + WEAPON_LANCE = 8; + WEAPON_BOW = 9; + WEAPON_BLADE_RING = 10; + WEAPON_JAVELIN = 11; + WEAPON_DRIVE_CORE = 12; + WEAPON_ROCKET_HAMMER = 13; + WEAPON_DUAL_CROSSBOW = 14; + WEAPON_CHAIN_SWORD = 15; + WEAPON_SWITCH_STAFF = 16; +} + +enum StigmataType { + STIGMATA_TYPE_NONE = 0; + STIGMATA_SLOT_1 = 1; + STIGMATA_SLOT_2 = 2; + STIGMATA_SLOT_3 = 3; +} + +enum EquipmentSlot { + EQUIPMENT_SLOT_NONE = 0; + EQUIPMENT_SLOT_WEAPON_1 = 1; + EQUIPMENT_SLOT_STIGMATA_1 = 2; + EQUIPMENT_SLOT_STIGMATA_2 = 3; + EQUIPMENT_SLOT_STIGMATA_3 = 4; +} + +enum StageType { + STAGE_TYPE_NONE = 0; + STAGE_STORY = 1; + STAGE_WEEK_DAY = 2; + STAGE_BEFALL = 3; + STAGE_ENDLESS = 4; + STAGE_NUCLEAR = 5; + STAGE_EXTRA_STORY = 7; + STAGE_ROGUE = 9; + STAGE_ARMADA = 10; + STAGE_OPENWORLD = 11; + STAGE_OPENWORLD_BOSS = 12; + STAGE_TUTORIAL = 13; + STAGE_CAMPWAR = 14; + STAGE_EX_BOSS = 15; + STAGE_MINUTE = 16; + STAGE_SEALED = 17; + STAGE_WORLDBOSS = 18; + STAGE_LEVELMATRIX = 19; + STAGE_PUSHTOWER = 20; + STAGE_TEAM_ASSAULT = 21; + STAGE_GENERAL_ACTIVITY = 22; + STAGE_AVATAR_TRAINING = 23; + STAGE_ARMADA_WAR = 24; + STAGE_DUNGEONS = 25; + STAGE_OPENWORLD_DEFENSE = 26; + STAGE_RECLAIM = 27; + STAGE_OPENWORLD_BOSS_MP = 28; + STAGE_OPENWORLD_ENDLESS = 29; + STAGE_MATRIX_NORMAL = 30; + STAGE_MATRIX_QAVATAR = 31; + STAGE_COUPLE_TOWER = 32; + STAGE_CAMPAIGN = 33; + STAGE_TOWER_RAID = 34; + STAGE_KINGDOM_WAR = 35; + STAGE_TVT = 36; + STAGE_QUANTUM_ENDLESS = 37; + STAGE_WANTED = 38; + STAGE_QAVATAR_PVE = 39; + STAGE_DLC_TOWER = 40; + STAGE_ENDLESS_SINGLE = 41; + STAGE_MONOPOLY_BOSS = 42; + STAGE_ADVENTURE_GROUP = 43; + STAGE_GLOBAL_WAR = 44; + STAGE_GRATUITY = 45; + STAGE_NINJA = 46; + STAGE_SINGLE_RAID_STEP = 47; + STAGE_ARMADA_STAGE_SCORE_ACTIVITY = 48; + STAGE_NEWBIE_CHALLENGE_ACTIVITY = 49; + STAGE_CHALLENGE_WAR = 50; + STAGE_MASSIVE_WAR = 51; + STAGE_SANCTUARY = 52; + STAGE_CRISIS_MODE = 53; + STAGE_SCHEDULED_MAP_SITE = 54; + STAGE_EXAMINATION = 55; + STAGE_MONOPOLY_MONSTER = 56; + STAGE_ULTIMATE_ENDLESS = 57; + STAGE_HYBRID = 58; + STAGE_DAILY_MP = 59; + STAGE_ULTRA_ENDLESS = 60; + STAGE_BUFF_TOWER = 61; + STAGE_ROGUE_TOWER = 62; + STAGE_ROGUE_TOWER_ENDLESS = 64; + STAGE_CHATWORLD_BEAST = 65; + STAGE_SLG = 66; + STAGE_THEME_WANTED = 67; + STAGE_GOD_WAR = 68; + STAGE_HYBRID_RELAY = 69; + STAGE_GENSHIN_LD = 70; + STAGE_RANCH = 71; + STAGE_SINK_CITY_DLC_PREHEAT = 72; + STAGE_SC_DLC_CHALLENGE = 73; + STAGE_OW_CHAPTER_TOWER = 74; + STAGE_OW_CHAPTER_ENDLESS_TOWER = 75; + STAGE_CHATWORLD_BOX = 76; + STAGE_SC_DLC_MP = 77; + STAGE_GREEDY_ENDLESS = 78; + STAGE_OW_CHAPTER_CYCLE = 79; + STAGE_OW_HUNT_ACTIVITY = 80; + STAGE_FRONT_ENDLESS = 81; + STAGE_MONSTER_CARD_NORMAL = 82; + STAGE_MONSTER_CARD_BOSS = 83; + STAGE_MONSTER_CARD_TOWER = 84; + STAGE_DICEY_DUNGEON_STORY = 85; + STAGE_DICEY_DUNGEON_SCHEDULE = 86; + STAGE_BUFF_ASSIST = 87; + STAGE_QCANDY_TUTORIAL = 88; + STAGE_QCANDY_PVP = 89; + STAGE_WAVE_RUSH = 90; + STAGE_AI_CYBER = 91; + STAGE_OW_CHAPTER_ANTIGRAVITY = 92; + STAGE_PLATFORM_SHOOTER = 93; + STAGE_CHAPTER_AVATAR_CULTIVATE = 94; + STAGE_GLOBAL_EXPLORE = 95; + STAGE_GLOBAL_EXPLORE_NORMAL = 96; + STAGE_MIRAGE = 97; + STAGE_SUSANNA_TRIAL = 98; + STAGE_SUSANNA_TRIAL_CHALLENGE = 99; + STAGE_GOD_WAR_AVATAR_CHALLENGE = 100; + STAGE_CHAPTER_36_RPG = 101; + STAGE_SUSANNA_TRIAL_STORY = 102; + STAGE_SHIGURE_KIRA = 103; + STAGE_THEME_TOWER = 104; + STAGE_BW_WORLD_CAMP = 105; + STAGE_MAHOU_CARD_AVATAR = 106; + STAGE_GOBACK_SPECIAL = 107; + STAGE_TILED_GAME_LUNA_MAIN = 108; + STAGE_TILED_GAME_LUNA_DAILY = 109; + STAGE_RESIDENT = 110; + STAGE_TILED_GAME_FARM_MAIN = 111; + STAGE_MINION_CLASH = 112; + STAGE_ARK_PLUS = 113; + STAGE_DICEY_DUNGEON_VOLLEYBALL = 114; + STAGE_RAID_REPLACE = 115; + STAGE_GOURMET_HUNT = 116; + STAGE_MATCH_THREE_PLUS = 117; + STAGE_SIMPLIFIED_GOD_WAR = 118; + STAGE_GAME_ROOM = 119; + STAGE_QRTS = 120; + STAGE_FUTARI_BATTLE = 121; + STAGE_PJMS_GAME_ROOM = 122; + STAGE_TILED_GAME_SRPG = 123; + STAGE_PJMS_RE_ACTIVITY = 124; + STAGE_RICH_MAN = 125; + STAGE_QRTS_AVATAR = 126; + STAGE_MONSTER_FARM = 127; + STAGE_MONSTER_MORPH = 128; + STAGE_PRPG_AVATAR = 129; + STAGE_KIANA_AUTO_CHESS = 130; + STAGE_MONSTER_CARD_SPECIAL = 131; + STAGE_SPACE_ADVENTURE = 132; + STAGE_TILED_GAME_INN = 133; +} + +enum StageDifficulty { + STAGE_DIFFICULTY_NONE = 0; + STAGE_DIFFICULTY_NORMAL = 1; + STAGE_DIFFICULTY_HARD = 2; + STAGE_DIFFICULTY_HELL = 3; +} + +enum StageRecordType { + STAGE_RECORD_TYPE_NONE = 0; + STAGE_RECORD_SCORE = 1; + STAGE_RECORD_TIME = 2; + STAGE_RECORD_TOTAL_SCORE = 3; + STAGE_RECORD_BATTLE_SCORE = 4; + STAGE_RECORD_BATTLE_SCORE_NO_COIN = 5; +} + +enum StageOpenStatus { + STAGE_OPEN_STATUS_NONE = 0; + STAGE_NOT_OPEN = 1; + STAGE_OPENED = 2; + STAGE_CLOSED = 3; +} + +enum StageStatus { + STAGE_STATUS_NONE = 0; + STAGE_LOCKED = 1; + STAGE_DOING = 2; + STAGE_DONE = 3; +} + +enum SpecialStageId { + SPECIAL_STAGE_ID_NONE = 0; + STAGE_ID_ENDLESS = 900101; + STAGE_ID_ROGUE = 900201; + STAGE_ID_ARMADA = 900301; + STAGE_ID_ARMADA_MP = 900302; + STAGE_ID_OPENWORLD = 900401; + STAGE_ID_OPENWORLD_BOSS = 900402; + STAGE_ID_OPENWORLD_DEFENSE = 900408; + STAGE_ID_EXBOSS = 900501; + STAGE_ID_ARMADA_MATRIX = 900601; + STAGE_ID_SC_DLC_TOWER = 900701; + STAGE_ID_SEVEN_CHAPTER_CG = 901000; + STAGE_ID_ARMADA_BOSS = 100000000; +} + +enum ChapterType { + CHAPTER_TYPE_NONE = 0; + CHAPTER_TYPE_MAIN_STORY = 1; + CHAPTER_TYPE_EVENT = 2; + CHAPTER_TYPE_SPECIAL_STORY = 3; + CHAPTER_MP = 4; + CHAPTER_TYPE_CHAPTER_ACTIVITY = 5; + CHAPTER_TYPE_HYBRID_SITE_ACTIVITY = 6; + CHAPTER_TYPE_OPENWORLD = 7; + CHAPTER_TYPE_PJMS = 8; + CHAPTER_TYPE_PJMS_NO_ENTER_WORLD = 9; +} + +enum AvatarReviveEnum { + AVATAR_REVIVE_ENUM_NONE = 0; + AVATAR_REVIVE_TIMES_UN_LIMIT = 65535; +} + +enum AvatarElementTag { + AVATAR_ELEMENT_TAG_NONE = 0; + AVATAR_ELEMENT_TAG_FIRE = 1004; + AVATAR_ELEMENT_TAG_ICE = 1005; + AVATAR_ELEMENT_TAG_LIGHTNING = 1006; +} + +enum TeamRestrictType { + TEAM_RESTRICT_TYPE_NONE = 0; + TEAM_RESTRICT_TYPE_AVATAR_NUM = 1; + TEAM_RESTRICT_TYPE_AVATAR_CLASS_NUM = 2; + TEAM_RESTRICT_TYPE_AVATAR_EACH_LEVEL = 3; + TEAM_RESTRICT_TYPE_AVATAR_EACH_STAR = 4; + TEAM_RESTRICT_TYPE_AVATAR_ONE_STAR = 5; + TEAM_RESTRICT_TYPE_AVATAR_CLASS_NOT_SAME = 6; + TEAM_RESTRICT_TYPE_AVATAR_ATTR_NOT_SAME = 7; + TEAM_RESTRICT_TYPE_AVATAR_EACH_ATTR = 8; + TEAM_RESTRICT_TYPE_AVATAR_NOT_ATTR = 9; + TEAM_RESTRICT_TYPE_AVATAR_EACH_CLASS = 10; + TEAM_RESTRICT_TYPE_AVATAR_NOT_CLASS = 11; + TEAM_RESTRICT_TYPE_HAS_AVATAR_ID = 12; + TEAM_RESTRICT_TYPE_AVATAR_NOT_ID = 13; + TEMA_RESTRICT_TYPE_ROLE_AVATAR_NUM = 15; + TEAM_RESTRICT_TYPE_ROLE_LIST = 16; + TEAM_RESTRICT_TYPE_IN_AVATAR_LIST = 17; + TEAM_RESTRICT_TYPE_RESISTANCE = 18; + TEAM_RESTRICT_TYPE_HAS_ELF = 19; + TEAM_RESTRICT_TYPE_AVATAR_EACH_TAG_LIST = 20; + TEAM_RESTRICT_TYPE_AVATAR_NOT_TAG_LIST = 21; + TEAM_RESTRICT_TYPE_AVATAR_ONE_TAG = 22; + TEAM_RESTRICT_TYPE_AVATAR_TAG_NUM = 23; + TEAM_RESTRICT_TYPE_AVATAR_ATTR_NUM = 24; + TEAM_RESTRICT_TYPE_AVATAR_ATTR_SAME_NUM = 25; + TEAM_RESTRICT_TYPE_IN_RPG_ROLE_LIST = 26; + TEAM_RESTRICT_TYPE_AVATAR_ELEMENT_TAG_NUM = 27; + TEAM_RESTRICT_TYPE_ALL_PJMS_AVATAR = 28; +} + +enum StageEnterTimesType { + STAGE_ENTER_TIMES_DAILY = 0; + STAGE_ENTER_TIMES_WEEKLY = 1; +} + +enum WeekdayActivityEnterTimesType { + WEEKDAY_ACTIVITY_ENTER_TIMES_DAILY = 0; + WEEKDAY_ACTIVITY_ENTER_TIMES_WEEKLY = 1; +} + +enum ActivitySeriesSweepTimesType { + ACTIVITY_SERIES_SWEEP_TIMES_NONE = 0; + ACTIVITY_SERIES_SWEEP_TIMES_DAILY = 1; + ACTIVITY_SERIES_SWEEP_TIMES_WEEKLY = 2; +} + +enum StageEndStatus { + STAGE_END_STATUS_NONE = 0; + STAGE_WIN = 1; + STAGE_NOT_MEET_CONDITION = 2; + STAGE_All_DEAD = 3; + STAGE_EXIT = 4; +} + +enum StageChallengeType { + STAGE_CHALLENGE_TYPE_NONE = 0; + CHALLENGE_LIMIT_AVATAR = 1; + CHALLENGE_LIMIT_AVATAR_KILLED = 2; + CHALLENGE_MAX_COMBO = 3; + CHALLENGE_LIMIT_BE_HIT = 4; + CHALLENGE_LIMIT_LEVEL_TIME = 5; + CHALLENGE_LIMIT_WITCH_TIME_TRIGGERED = 6; + CHALLENGE_MAX_DAMAGE_IN_WITCH_TIME = 7; + CHALLENGE_MAX_ULTIMATE_SKILL_TRIGGERED = 8; + CHALLENGE_MAX_DAMAGE_IN_CERTAIN_TIME = 9; + CHALLENGE_MAX_ULTIMATE_SKILL_TRIGGERED_BY_DISTINCT_AVATAR = 10; + CHALLENGE_LIMIT_BE_HIT_DOWN = 11; + CHALLENGE_MAX_AVATAR_CLASS_IN_TEAM = 12; + CHALLENGE_MAX_MONSTER_KILLED = 13; + CHALLENGE_MAX_AVATAR_NATURE_IN_TEAM = 14; + CHALLENGE_LIMIT_TOTAL_DAMAGE = 15; + CHALLENGE_HELPER_AVATAR_ALIVE = 16; + CHALLENGE_LIMIT_TRAP_TRIGGERED = 17; + CHALLENGE_MAX_BOX_OPENED = 18; + CHALLENGE_MAX_DEBUFF_ADD = 19; + CHALLENGE_LIMIT_BE_ADDED_DEBUFF = 20; + CHALLENGE_MAX_ALL_DAMAGE_IND_WITCH_TIME = 21; + CHALLENGE_MAX_MONSTER_KILLED_BY_SWITCH_IN_ATTACK = 22; + CHALLENGE_MAX_MONSTER_KILLED_IN_WITCH_TIME = 23; + CHALLENGE_MONSTER_LAST_KILLED_BY_SWITCH_IN_ATTACK = 24; + CHALLENGE_MAX_MONSTER_KILLED_IN_CERTAIN_TIME = 25; + CHALLENGE_MAX_MONSTER_HIT_AIR = 26; + CHALLENGE_FINISH_STAGE_NORMAL = 27; + CHALLENGE_FINISH_STAGE_FAST = 28; + CHALLENGE_FINISH_STAGE_VERY_FAST = 29; + CHALLENGE_MONSTER_KILLED_BY_BRANCH = 30; + CHALLENGE_QTE_TRIGGERED = 31; + CHALLENGE_MAX_MONSTER_KILLED_BY_ASSASSIN = 32; + CHALLENGE_MAX_MONSTER_CONTINOUS_KILLED_BY_ASSASSIN = 33; + CHALLENGE_MAX_ELITE_MONSTER_KLLED = 34; + CHALLENGE_LIMIT_DISCOVERED = 35; + CHALLENGE_MAX_DEFEND_OBJECT_DAMAGE = 36; + CHALLENGE_MAX_TEAM_SKILL_TRIGGERED = 37; + CHALLENGE_ALL_STORY_MISSION_COMPLETE = 38; + CHALLENGE_MAX_SCORE = 39; + CHALLENGE_MAX_TEAM_SKILL_TRIGGERED_FOR_ALL_TEAM_MEMBER = 40; + CHALLENGE_MAX_MONSTER_KILLED_IN_WITCH_TIME_FOR_ALL_TEAM_MEMBER = 41; + CHALLENGE_MAX_MONSTER_KILLED_FOR_ALL_TEAM_MEMBER = 42; + CHALLENGE_MONSTER_KILLED_BY_BRANCH_FOR_ALL_TEAM_MEMBER = 43; + CHALLENGE_MAX_QTE_TRIGGERED_FOR_ALL_TEAM_MEMBER = 44; + CHALLENGE_LIMIT_EVADE_SUCCESS_TRIGGERED_FOR_ALL_TEAM_MEMBER = 45; + CHALLENGE_MAX_ULTIMATE_SKILL_TRIGGERED_FOR_ALL_TEAM_MEMBER = 46; + CHALLENGE_LIMIT_AVATAR_KILLED_FOR_ALL_TEAM_MEMBER = 47; + CHALLENGE_MONSTER_KILLED_BY_QTE_FOR_ALL_TEAM_MEMBER = 48; + CHALLENGE_CLIENT_CUSTOM = 49; + CHALLENGE_CUSTOM_BUTTON = 50; + CHALLENGE_LIMIT_LEVEL_TIME2 = 51; + CHALLENGE_MONSTERCARD_LIMIT_AVATARSIDE_MONSTER_KILLED = 52; +} + +enum StagePassType { + STAGE_PASS_TYPE_NORMAL = 0; + STAGE_PASS_TYPE_BURDEN_ALLEVIATION = 1; + STAGE_PASS_TYPE_SETTLE_PRE_STAGE = 2; + STAGE_PASS_TYPE_BURDEN_ALLEVIATION_V2 = 3; + STAGE_PASS_TYPE_MONSTER_CARD_SKIP = 4; +} + +enum AvatarClassType { + AVATAR_CLASS_TYPE_NONE = 0; + AVATAR_KIANA = 1; + AVATAR_MEI = 2; + AVATAR_BRONYA = 3; + AVATAR_HIMEKO = 4; + AVATAR_THERESA = 5; + AVATAR_FUKA = 6; + AVATAR_RITA = 7; + AVATAR_DURANDAL = 8; + AVATAR_FISCHL = 9; + AVATAR_PARDOFELIS = 10; + AVATAR_FEATHEREDRABBIT = 11; + AVATAR_SENADINA = 12; + AVATAR_CORALIE = 13; + AVATAR_HELIA = 14; + AVATAR_THELEMA = 15; + AVATAR_SONGQUE = 16; +} + +enum AvatarID { + AVATAR_ID_NONE = 0; + AVATAR_KIANA_PT = 101; + AVATAR_KIANA_FX = 102; + AVATAR_KIANA_YN = 103; + AVATAR_KIANA_QN = 104; + AVATAR_MEI_CK = 201; + AVATAR_MEI_WS = 202; + AVATAR_MEI_DH = 203; + AVATAR_MEI_LD = 204; + AVATAR_SAKURA_YS = 211; + AVATAR_SAKURA_ZF = 212; + AVATAR_BRONYA_ZP = 301; + AVATAR_BRONYA_BQ = 302; + AVATAR_BRONYA_JJ = 303; + AVATAR_BRONYA_BX = 304; + AVATAR_HIMEKO_VV = 401; + AVATAR_HIMEKO_NX = 402; + AVATAR_HIMEKO_KZ = 403; + AVATAR_HIMEKO_BZ = 404; + AVATAR_THERESA_YD = 501; + AVATAR_THERESA_TP = 502; + AVATAR_THERESA_FY = 503; + AVATAR_THERESA_JX = 504; + AVATAR_RITA_NP = 701; +} + +enum GachaType { + GACHA_TYPE_NONE = 0; + GACHA_HCOIN = 2; + GACHA_SPECIAL_HCOIN = 3; + GACHA_ACTIVITY_1 = 4; + GACHA_CUSTOM_AVATAR = 5; + GACHA_ACTIVITY_2 = 6; + GACHA_CUSTOM_EQUIP = 7; + GACHA_BOX_1 = 8; + GACHA_UNIQUE = 9; + GACHA_EQUIP_HCOIN = 10; + GACHA_SPECIAL_2 = 12; + GACHA_CONTROLLABLE_BOX = 14; + GACHA_ACTIVITY_3 = 15; + GACHA_BOX_2 = 16; + GACHA_BOX_3 = 17; + GACHA_OPTIONAL_AVATAR = 18; + GACHA_OPTIONAL_EQUIP = 19; + GACHA_ADVENTURE = 20; + GACHA_BOX_4 = 21; + GACHA_BOX_5 = 22; + GACHA_ADVENTURE_EQUIP = 23; + GACHA_BOX_6 = 24; + GACHA_SP_EQUIP = 25; + GACHA_ELF_1 = 26; + GACHA_ACTIVITY_4 = 27; + GACHA_ACTIVITY_5 = 28; + GACHA_ACTIVITY_6 = 29; + GACHA_SPECIAL_3 = 30; + GACHA_ADVENTURE_NEWBIE_1 = 31; + GACHA_ADVENTURE_NEWBIE_2 = 32; + GACHA_SPECIAL_NEWBIE_1 = 33; + GACHA_SPECIAL_NEWBIE_2 = 34; + GACHA_BOX_7 = 35; + GACHA_SPECIAL_NEWBIE_3 = 36; + GACHA_SPECIAL_NEWBIE_4 = 37; + GACHA_CUSTOM_AVATAR_GOBACK = 38; + GACHA_EQUIP_GOBACK = 39; + GACHA_SPECIAL_NEWBIE_5 = 40; + GACHA_SPECIAL_NEWBIE_6 = 41; + GACHA_SPECIAL_NEWBIE_7 = 42; + GACHA_SPECIAL_NEWBIE_8 = 43; + GACHA_PJMS_AVATAR_1 = 44; + GACHA_PJMS_AVATAR_2 = 45; + GACHA_PJMS_EQUIP_1 = 46; + GACHA_PJMS_EQUIP_2 = 47; + GACHA_PJMS_ELF = 48; + GACHA_PJMS_AVATAR_3 = 49; + GACHA_PJMS_AVATAR_4 = 50; + GACHA_PJMS_EQUIP_3 = 51; + GACHA_PJMS_EQUIP_4 = 52; + GACHA_PJMS_AVATAR_NEWBIE_1 = 53; + GACHA_PJMS_AVATAR_NEWBIE_2 = 54; + GACHA_PJMS_EQUIP_NEWBIE_1 = 55; + GACHA_PJMS_EQUIP_NEWBIE_2 = 56; + GACHA_PJMS_ADVANCE_AVATAR_1 = 57; + GACHA_PJMS_ADVANCE_EQUIP_1 = 58; + GACHA_TYPE_ERROR = 100; +} + +enum PjmsGachaGroupType { + PJMS_GACHA_GROUP_NONE = 0; + PJMS_GACHA_GROUP_CORE = 1; + PJMS_GACHA_GROUP_RARE = 2; + PJMS_GACHA_GROUP_NORMAL = 3; +} + +enum PjmsGachaMergeType { + PJMS_GACHA_MERGE_NONE = 0; + PJMS_GACHA_MERGE_AVATAR = 1; + PJMS_GACHA_MERGE_EQUIP = 2; + PJMS_GACHA_MERGE_ELF = 3; + PJMS_GACHA_MERGE_AVATAR_2 = 4; + PJMS_GACHA_MERGE_EQUIP_2 = 5; + PJMS_GACHA_MERGE_AVATAR_NEWBIE = 6; + PJMS_GACHA_MERGE_EQUIP_NEWBIE = 7; + PJMS_GACHA_MERGE_ADVANCE_AVATAR = 8; + PJMS_GACHA_MERGE_ADVANCE_EQUIP = 9; +} + +enum AddFriendAction { + ADD_FRIEND_ACTION_NONE = 0; + ADD_FRIEND_ACTION_ASK = 1; + ADD_FRIEND_ACTION_AGREE = 2; + ADD_FRIEND_ACTION_REJECT = 3; +} + +enum PrivilegeProductType { + PRIVILEGE_PRODUCT_ALL = 0; + PRIVILEGE_PRODUCT_NEWBIE = 1; + PRIVILEGE_PRODUCT_GOBACK = 2; + PRIVILEGE_PRODUCT_ADVENTURE = 3; +} + +enum PrivilegeRightType { + PRIVILEGE_RIGHT_TYPE_NONE = 0; + PRIVILEGE_RIGHT_DAILY_FREE_GACHA = 1; + PRIVILEGE_RIGHT_CARD_DAILY_REWARD = 2; + PRIVILEGE_RIGHT_DAILY_ONE_FREE_GACHA = 3; + PRIVILEGE_RIGHT_DAILY_TEN_FREE_GACHA = 4; +} + +enum PrivilegeOpenType { + PRIVILEGE_OPEN_NORMAL = 0; + PRIVILEGE_OPEN_SCHEDULED = 1; +} + +enum MailType { + MAIL_TYPE_NONE = 0; + MAIL_INNER = 1; + MAIL_OUTER = 2; + MAIL_NOTICE = 3; +} + +enum SystemChatMsgType { + CHAT_MSG_NONE = 0; + CHAT_MSG_GACHA = 1; + CHAT_MSG_LOBBY = 2; + CHAT_MSG_FORGE = 3; + CHAT_MSG_SCRATCH = 4; +} + +enum StageResetType { + STAGE_RESET_TYPE_RESET = 0; + STAGE_RESET_TYPE_ADD = 1; +} + +enum DiscountType { + DISCOUNT_TYPE_NONE = 0; + DISCOUNT_EQUIP_POWER_UP_SCOIN = 1; + DISCOUNT_AVATAR_SKILL_UP_SCOIN = 2; + DISCOUNT_EQUIP_POWER_UP_BOOST_RATE = 3; + DISCOUNT_EQUIP_POWER_UP_BOOST_PROB = 4; +} + +enum BulletinActivityType { + BULLETIN_ACTIVITY_TYPE_NONE = 0; + BULLETIN_ACTIVITY_TYPE_MOSAIC = 1; + BULLETIN_ACTIVITY_TYPE_GACHA = 2; + BULLETIN_ACTIVITY_TYPE_SHOP = 3; + BULLETIN_ACTIVITY_TYPE_MISSION = 4; + BULLETIN_ACTIVITY_TYPE_BULLETIN = 5; + BULLETIN_ACTIVITY_TYPE_CITYACTIVITY = 6; + BULLETIN_ACTIVITY_TYPE_NEWROLE = 7; + BULLETIN_ACTIVITY_TYPE_GACHA_TIMELINE = 8; + BULLETIN_ACTIVITY_TYPE_ACTIVITY_TIMELINE = 9; + BULLETIN_ACTIVITY_TYPE_FLOP_CARD = 10; + BULLETIN_ACTIVITY_TYPE_BINGO = 11; + BULLETIN_ACTIVITY_TYPE_SCORE = 12; + BULLETIN_ACTIVITY_TYPE_RELATION = 13; + BULLETIN_ACTIVITY_TYPE_WEB = 14; + BULLETIN_ACTIVITY_TYPE_LOTTERY_DRAW_NUMBER = 15; + BULLETIN_ACTIVITY_TYPE_LOTTERY_TAKE_REWARD = 16; + BULLETIN_ACTIVITY_TYPE_CONTINUOUS_RECHARGE = 17; + BULLETIN_ACTIVITY_TYPE_SUPER_SIGN_IN = 18; + BULLETIN_ACTIVITY_TYPE_OVERLAP = 19; + BULLETIN_ACTIVITY_TYPE_REWARD_OVERVIEW = 20; + BULLETIN_ACTIVITY_TYPE_SCRATCH_TICKET = 21; + BULLETIN_ACTIVITY_TYPE_BBQ = 22; + BULLETIN_ACTIVITY_TYPE_PICTURE = 23; + BULLETIN_ACTIVITY_TYPE_JIGSAW = 24; + BULLETIN_ACTIVITY_TYPE_REUNION = 25; + BULLETIN_ACTIVITY_TYPE_GIFT = 26; + BULLETIN_ACTIVITY_TYPE_SLOT_MACHINE = 27; + BULLETIN_ACTIVITY_TYPE_RAFFLE = 28; + BULLETIN_ACTIVITY_TYPE_LOGIN_REWARD = 29; + BULLETIN_ACTIVITY_TYPE_LOGIN_WISH = 30; + BULLETIN_ACTIVITY_TYPE_WEBVIEW = 31; + BULLETIN_ACTIVITY_TYPE_ALLEVIATION = 32; + BULLETIN_ACTIVITY_TYPE_SHOW_PICTURE = 33; + BULLETIN_ACTIVITY_TYPE_SHOW_MAIN_EVENT_INFO = 34; + BULLETIN_ACTIVITY_TYPE_REUNION_COOK = 35; + BULLETIN_ACTIVITY_TYPE_REUNION_TIMELINE = 36; + BULLETIN_ACTIVITY_TYPE_DREAM = 37; + BULLETIN_ACTIVITY_TYPE_SPACESHIP_GIFT = 38; + BULLETIN_ACTIVITY_TYPE_MISSION_THEME = 39; + BULLETIN_ACTIVITY_TYPE_RECHARGE_ADD_UP = 41; + BULLETIN_ACTIVITY_TYPE_NEW_GIFT = 42; + BULLETIN_ACTIVITY_TYPE_ANNIVERSARY_GIFT = 43; + BULLETIN_ACTIVITY_TYPE_DATA_REFACTOR = 44; + BULLETIN_ACTIVITY_TYPE_OW_CHAPTER = 45; + BULLETIN_ACTIVITY_TYPE_PLAYER_LEVEL_LOCK = 46; + BULLETIN_ACTIVITY_TYPE_PV_LOGIN = 47; + BULLETIN_ACTIVITY_TYPE_ANNIVERSARY_INTEGRATE = 48; + BULLETIN_ACTIVITY_TYPE_MINI_MONOPOLY = 49; + BULLETIN_ACTIVITY_TYPE_MISSION_VERTICAL = 50; + BULLETIN_ACTIVITY_TYPE_PON_MACHINE = 51; + BULLETIN_ACTIVITY_TYPE_CARNIVAL_LOTTERY = 52; + BULLETIN_ACTIVITY_TYPE_MARS_TUTORIAL_VERSION_REWARD = 53; + BULLETIN_ACTIVITY_TYPE_BURDEN_ALLEVIATION_V2 = 54; + BULLETIN_ACTIVITY_TYPE_CRYSTAL_LOTTERY = 55; +} + +enum MissionType { + MISSION_NONE = 0; + MISSION_LINEAR = 1; + MISSION_BOUNTY = 2; + MISSION_TIMED = 3; + MISSION_SIDE = 4; + MISSION_CYCLE = 5; + MISSION_DAILY = 6; + MISSION_PROGRESS = 7; + MISSION_CHALLENGE = 8; + MISSION_MASTER_PUPIL_EXAM = 10; + MISSION_MASTER_PUPIL_DAILY = 11; + MISSION_AVATAR_TRAINING = 12; + MISSION_RPG_TALE = 13; + MISSION_MAINLINE_STEP = 14; + MISSION_GOBACK = 15; + MISSION_WEEKLY_ROUTINE = 16; + MISSION_ADVENTURE_GROUP = 18; + MISSION_MASTER_PUPIL_COMPANY = 19; + MISSION_ACTIVITY = 20; + MISSION_COMPETITION_SEASON = 21; + MISSION_PJMS_ACTIVITY = 22; +} + +enum MissionSubType { + MISSION_SUB_TYPE_NONE = 0; + MISSION_SUB_BRANCH = 1; + MISSION_SUB_MP_RAID = 102; + MISSION_SUB_ARMADA = 301; + MISSION_SUB_SHOP_ADD_ON = 501; + MISSION_SUB_RAFFLE = 502; + MISSION_SUB_WEB_ACTIVITY = 503; + MISSION_SUB_COMPETITION_SEASON = 504; + MISSION_SUB_DREAM = 505; + MISSION_SUB_REFRESH_CYCLE_ON_FINISH = 506; + MISSION_SUB_GOD_WAR = 507; + MISSION_SUB_SC_DLC = 508; + MISSION_SUB_CHAPTER_OW = 509; + MISSION_SUB_OW_STORY = 510; + MISSION_SUB_PJMS_ACHIEVEMENT = 511; + MISSION_SUB_RPG_TAKE_REWARD_DROP = 1301; + MISSION_SUB_GOBACK = 1501; + MISSION_SUB_GOBACK_ACTIVITY = 1502; + MISSION_SUB_GOBACK_LIMIT_TIME = 1503; + MISSION_SUB_ADVENTURE_GROUP = 1801; + MISSION_SUB_NINJA = 2001; + MISSION_SUB_ARMADA_REUNION = 2002; + MISSION_SUB_LOGIN_MISSION = 2003; + MISSION_SUB_INVITEE = 2004; +} + +enum SideMissionCond { + SIDE_MISSION_COND_NONE = 0; + SIDE_MISSION_COND_AVATAR_GOODFEEL = 1; +} + +enum MissionFinishWay { + MISSION_FINISH_NONE = 0; + MISSION_AUTO = 1; + MISSION_ANY_STORY_STAGE_NORMAL = 2; + MISSION_ANY_STORY_STAGE_HARD = 3; + MISSION_ANY_STORY_STAGE_HELL = 4; + MISSION_SPECIFIC_STAGE_ID = 5; + MISSION_SPECIFIC_MONSTER_ID = 6; + MISSION_SPECIFIC_UNIQUE_MONSTER_ID = 7; + MISSION_TRIGGER_ABILITY_ACTION = 10; + MISSION_KILL_WITH_ANIM_EVENT_ID = 11; + MISSION_AVATAR_LEVEL_UP_BY_MATERIAL = 12; + MISSION_AVATAR_SUB_SKILL_LEVEL_UP = 13; + MISSION_GACHA = 14; + MISSION_EQUIPMENT_POWER_UP = 15; + MISSION_STAGE_NORMAL_WITH_SPECIFIC_AVATAR_CLASS = 18; + MISSION_STAGE_HARD_WITH_SPECIFIC_AVATAR_CLASS = 19; + MISSION_ANY_WEEK_DAY_STAGE = 20; + MISSION_ANY_BEFALL_STAGE = 21; + MISSION_ANY_NOT_STORY_STAGE = 22; + MISSION_STAGE_HELL_WITH_SPECIFIC_AVATAR_CLASS = 27; + MISSION_STAGE_NORMAL_WITH_SPECIFIC_AVATAR = 28; + MISSION_STAGE_HARD_WITH_SPECIFIC_AVATAR = 29; + MISSION_STAGE_HELL_WITH_SPECIFIC_AVATAR = 30; + MISSION_FINISH_NO_ACHIEVEMENT_NUM = 36; + MISSION_TOTAL_AVATAR_SKILL_POINT_NUM = 37; + MISSION_TEN_HCOIN_GACHA_STAR_NUM = 43; + MISSION_STAGE_MIN_TIME_TEN_SECOND = 45; + MISSION_STAGE_ASSISTANT_NUM = 46; + MISSION_STAGE_SUCC_NUM = 47; + MISSION_STAGE_WITH_ASSISTANT_SUCC_NUM = 48; + MISSION_WEAPON_POWER_UP = 49; + MISSION_STIGMATA_POWER_UP = 50; + MISSION_ISLAND_COLLECT = 52; + MISSION_ISLAND_GET_VENTURE_REWARD = 53; + MISSION_AVATAR_TOUCH_NUM = 54; + MISSION_ISLAND_MAX_COST_POWER = 57; + MISSION_ISLAND_VENTURE_TOTAL_COST_HOUR = 58; + MISSION_AVATAR_ADD_SUB_SKILL = 64; + MISSION_MULTI_WEAPON_POWER_UP_LEVEL = 65; + MISSION_MULTI_STIGMATA_POWER_UP_LEVEL = 66; + MISSION_ISLAND_CABIN_LEVEL_UP = 67; + MISSION_ISLAND_CABIN_EXTEND_GRADE = 68; + MISSION_ISLAND_ADD_TECH = 69; + MISSION_GACHA_WITH_TYPE = 70; + MISSION_REAL_NAME = 73; + MISSION_ENDLESS_GROUP_LEVEL = 75; + MISSION_SHARE_GAME_IN_SNS = 80; + MISSION_COLLECT = 81; + MISSION_ACTIVITY_PROGRESS = 82; + MISSION_BUY_GOODS_WITH_SCOIN_OR_HCOIN = 83; + MISSION_SCOIN_EXCHANGE = 84; + MISSION_STAMINA_EXCHANGE = 85; + MISSION_CONSIGNED_ORDER = 86; + MISSION_ROGUE_STAGE = 87; + MISSION_STAGE_MAX_COMBO_PASS = 88; + MISSION_OPENWORLD_FIGHT_BOSS = 91; + MISSION_OPENWORLD_KILL_BOSS = 92; + MISSION_OPENWORLD_BOSS_DAMAGE = 93; + MISSION_OPENWORLD_QUEST_LEVEL = 94; + MISSION_OPENWORLD_FINISH_SIDE_QUEST_NUM = 96; + MISSION_EQUIPMENT_POWER_UP_NO_BACKTRACK = 98; + MISSION_FIGHT_ARMADA_STAGE = 100; + MISSION_OPENWORLD_FINISH_QUEST_NO_BACKTRACK = 101; + MISSION_OPENWORLD_REWARD_NUM = 102; + MISSION_WAREHOUSE_DONATE = 103; + MISSION_STORY_STAGE_WITH_AVATAR_NUM = 105; + MISSION_EQUIPMENT_EVO = 107; + MISSION_USE_AVATAR_KILL_MONSTER = 108; + MISSION_HELP_FRIEND_ISLAND = 112; + MISSION_STAGE_MIN_BE_HIT_PASS = 113; + MISSION_STAGE_COSMOS_BREAK = 114; + MISSION_STAGE_COSMOS_BREAK_DAMAGE = 115; + MISSION_STAGE_USE_EX_SKILL = 116; + MISSION_REFINE_STIGMATA = 117; + MISSION_DISJOIN_EQUIPMENT = 118; + MISSION_FINISH_MP_STAGE_WITH_TYPE = 119; + MISSION_USE_MP_TEAM_SKILL = 120; + MISSION_USE_MP_QTE_SKILL = 121; + MISSION_OPENWORLD_FINISH_EVENT_TYPE_NO_BACKTRACK = 122; + MISSION_MIN_BE_HIT_PASS_WITH_STAGE_ID = 123; + MISSION_FINISH_MP_STAGE = 124; + MISSION_STAGE_DEFEND_TARGET_MIN_HP_PASS = 126; + MISSION_STAGE_DEFEND_TARGET_MIN_HP_PERCENT_PASS = 127; + MISSION_GET_CARD_REWARD_NUM = 131; + MISSION_TOTAL_COST_SCOIN_NUM = 132; + MISSION_TOTAL_COST_HCOIN_NUM = 134; + MISSION_MP_MVP_NUM = 136; + MISSION_FACEBOOK_LIKE = 145; + MISSION_STAGE_MIN_TIME_WITH_STAGE_ID = 146; + MISSION_STAGE_TAG_COMBO_PASS = 147; + MISSION_STAGE_TAG_WITH_SPECIFIC_AVATAR = 148; + MISSION_POWERUP_MULTI_SPECIFIC_EQUIP_LEVEL = 151; + MISSION_EVO_MULTI_SPECIFIC_EQUIP_STAR = 152; + MISSION_EVO_ANY_BEFALL_WEAPON_STAR = 153; + MISSION_FRAGMENTS_EXCHANGE_STIGMATA = 154; + MISSION_STAGE_TAG_SUCCESS_EVADE_PASS = 156; + MISSION_CHALLENGE_SPECIFIC_STAGE_ID = 157; + MISSION_FINISH_EXBOSS_NUM = 160; + MISSION_WIN_LEVEL_EXBOSS = 162; + MISSION_GET_EXBOSS_RANK = 163; + MISSION_BIND_MOBILE = 165; + MISSION_BIND_EMAIL = 166; + MISSION_SET_ACCOUNT_USERNAME = 167; + MISSION_FINISH_SPECIFIC_MISSION = 169; + MISSION_FINISH_SPECIFIED_DIFFICULTY_RAID_WITH_MASTER = 170; + MISSION_PUBLISH_MASTER_PUPIL_CARD = 175; + MISSION_GET_EXBOSS_RANK_PERCENT = 179; + MISSION_MP_LIKE_NUM = 181; + MISSION_CLICK_LINK = 182; + MISSION_BUY_FURNITURE = 184; + MISSION_MATERIAL_RECYCLE = 192; + MISSION_OPENWORLD_FINISH_EVENT_SUBTYPE_LIST = 193; + MISSION_OPENWORLD_FINISH_QUEST_SPECIFIC_AVATAR = 194; + MISSION_EXBOSS_STAGE_SPECIFIC_AVATAR = 195; + MISSION_RAID_STAGE_SPECIFIC_AVATAR = 197; + MISSION_ISLAND_VENTURE_SPECIFIC_AVATAR = 198; + MISSION_DORM_EVENT_SPECIFIC_AVATAR = 199; + MISSION_PASS_STAGE_SPECIFIC_AVATAR = 201; + MISSION_PASS_SPECIFIC_STAGE_SPECIFIC_AVATAR = 202; + MISSION_PASS_STAGE_SPECIFIC_REQUIRE = 203; + MISSION_DORM_USE_FACILITY_NUM = 206; + MISSION_COLLECT_SPECIFIC_AMOUNT_ITEMS = 213; + MISSION_USE_SPECIFIC_AVATARS_KILL_MONSTER = 214; + MISSION_PASS_STAGE_WITH_EQUIPMENT_MAINID = 218; + MISSION_REACH_DAILY_DUTY_POINT = 219; + MISSION_REACH_WEEKLY_DUTY_POINT = 221; + MISSION_STAGE_TOTAL_BATTLE_SCORE_WITH_STAGE_TAG = 227; + MISSION_STAGE_RANK_WITH_STAGE_TAG = 228; + MISSION_GENERAL_ACTIVITY_FINISH_TIMES = 233; + MISSION_DORM_CLIENT_CUSTOM = 241; + MISSION_OPENWORLD_CHOOSE_QUEST = 242; + MISSION_SHOP_BUY_GOODS = 243; + MISSION_DORM_TAKE_DAILY_STAMINA = 244; + MISSION_OPENWORLD_MAKE_MECHA_TIMES = 253; + MISSION_OPENWORLD_TECH_ADD_EXP_TIMES = 255; + MISSION_OPENWORLD_QUEST_RATE = 256; + MISSION_OPENWORLD_QUEST_FINISHED_CHALLENGE_NUM = 258; + MISSION_OPENWORLD_QUEST_FINISHED_WITH_MECHA = 259; + MISSION_OPENWORLD_HACK_ITEM = 260; + MISSION_OPENWORLD_TD_STAGE_RATE = 261; + MISSION_OPENWORLD_QUEST_LEVEL_WITH_MAP = 264; + MISSION_OPENWORLD_FINISH_QUEST_NO_BACKTRACK_WITH_MAP = 267; + MISSION_OPENWORLD_FINISH_QUEST_NO_BACKTRACK_WITH_SUB_TYPE_AND_MAP = 268; + MISSION_OPENWORLD_FINISH_EVENT_TYPE_NO_BACKTRACK_WITH_MAP = 269; + MISSION_GOBACK_DUTY_POINT = 270; + MISSION_ONLINE_TIME = 272; + MISSION_TAKE_PHOTOS = 273; + MISSION_WIKI_CG_NUM = 276; + MISSION_BINGO_ACTIVITY_FLOP_CARD = 297; + MISSION_BINGO_ACTIVITY_BINGO_COMPLETE = 298; + MISSION_FINISH_MP_STAGE_WITH_GOBACK_PLAYER = 300; + MISSION_OPENWORLD_BOSS_GET_RATING_NUM = 301; + MISSION_OPENWORLD_BOSS_KILLED_NUM_WITHIN_TIME_LIMIT = 302; + MISSION_OPENWORLD_ACTIVITY_LEVEL = 303; + MISSION_OPENWORLD_BOSS_HUNT_FIND_CLUE_NUM = 304; + MISSION_OPENWORLD_BOSS_KILLED_NUM_SPECIFIC_AVATAR = 305; + MISSION_RPG_TALE_PASS_SITE = 309; + MISSION_RPG_TALE_OVERALL_EQUAL = 310; + MISSION_RPG_TALE_TOTAL_STAGE_SCORE = 311; + MISSION_MATRIX_FINISH_EVENT = 315; + MISSION_VIRTUAL_TRAIN_GACHA_TIMES = 319; + MISSION_VIRTUAL_TRAIN_GACHA_AVATAR_STAR = 320; + MISSION_RPG_TALE_TAKE_PRODUCT_TIMES = 321; + MISSION_RPG_TALE_TAKE_PRODUCT_NUM = 322; + MISSION_RPG_TALE_TOWER_TIMES = 324; + MISSION_FINISH_ANY_RAID_ACTIVITY = 330; + MISSION_FRIEND_INVITE = 331; + MISSION_ARMADA_APPLY = 333; + MISSION_ISLAND_CABIN_LEVEL = 335; + MISSION_SHOPPING_TIMES = 337; + MISSION_ADD_UP_VIP_POINT = 341; + MISSION_DORM_USE_FACILITY_NUM_NO_RESULT = 342; + MISSION_FINISH_SPECIFIC_PLOT_ID = 343; + MISSION_OPENWORLD_ENDLESS_SCORE = 344; + MISSION_OPENWORLD_ENDLESS_BOSS = 345; + MISSION_OPENWORLD_ENDLESS_ADD_GROUP_LEVEL = 346; + MISSION_OPENWORLD_ENDLESS_GROUP_LEVEL = 347; + MISSION_OPENWORLD_ENDLESS_FINISH_MONSTER_GROUP = 348; + MISSION_OPENWORLD_ENDLESS_USE_ITEM = 349; + MISSION_ENDLESS_FINISH_STAGE_OR_BOSS_WITH_ENDLESS_TYPE = 350; + MISSION_ENDLESS_FINISH_STAGE_OR_BOSS_SPECIFIC_AVATAR = 351; + MISSION_QUANTUM_ENDLESS_PASS_MONSTER_GROUP = 352; + MISSION_FRONT_ENDLESS_FINISH_FLOOR = 353; + MISSION_FARM_ACTIVITY_SPEED_UP_PRODUCE_TIMES = 366; + MISSION_FARM_ACTIVITY_FINISH_PRODUCE_TIMES = 367; + MISSION_FARM_ACTIVITY_FARM_LEVEL = 368; + MISSION_FARM_ACTIVITY_UNLOCK_SLOT_NUM = 369; + MISSION_FARM_ACTIVITY_FINISH_PRODUCE_SPECIFIC_MATERIAL = 370; + MISSION_TAKE_SPECIFIC_NPC_RED_ENVELOPE_NUM = 372; + MISSION_GACHA_WITH_MULTI_TYPES = 373; + MISSION_TOWER_RAID_NUM = 374; + MISSION_TOWER_RAID_BOSS_NUM = 375; + MISSION_TOWER_RAID_FINISH_ALL_NUM = 376; + MISSION_CHATWORLD_ONLINE_TIME = 377; + MISSION_CHATWORLD_USE_ITEM = 379; + MISSION_CAMPAIGN_FINISH_PHASE = 380; + MISSION_CAMPAIGN_FINISH = 381; + MISSION_CAMPAIGN_FINISH_STAGE = 382; + MISSION_STAGE_TAG_NUM_SPECIFIC_ELF = 390; + MISSION_STAGE_NUM_SPECIFIC_ELF = 391; + MISSION_ENDLESS_FINISH_STAGE_OR_BOSS_SPECIFIC_ELF = 392; + MISSION_EXBOSS_STAGE_SPECIFIC_ELF = 393; + MISSION_STORY_STAGE_SPECIFIC_ELF = 395; + MISSION_STAGE_NUM_WITH_ELF = 400; + MISSION_CAMPAIGN_SHORT_CHAT = 421; + MISSION_CAMPAIGN_FINISH_SCORE = 422; + MISSION_CAMPAIGN_MVP = 423; + MISSION_CAMPAIGN_TEAM_DRAW_RARITY = 424; + MISSION_CMAPAIGN_SELF_DRAW = 425; + MISSION_CAMPAIGN_LIKE_NUM = 426; + MISSION_CAMPAIGN_TEACH_MODE_FINISH_PHASE = 427; + MISSION_CAMPAIGN_TEACH_MODE_FINISH = 428; + MISSION_PASS_STAGE_WITH_ANY_SPECIFIC_AVATAR = 441; + MISSION_CHATWORLD_KILL_NUM = 451; + MISSION_CHATWORLD_BATTLE_SCORE = 457; + MISSION_GACHA_TOTAL_SCORE = 463; + MISSION_MONOPOLY_THROW_DICE = 464; + MISSION_MONOPOLY_EXPLORE = 465; + MISSION_MONOPOLY_PASS_AREA = 466; + MISSION_MATRIX_FINISH_FLOOR = 467; + MISSION_MATRIX_TRIGGER_EVENT = 468; + MISSION_STAGE_TAG_CHALLENGE_NUM = 469; + MISSION_EQUIPMENT_FORGE_TIMES = 470; + MISSION_GLOBAL_WAR_TOTAL_CURRENCY = 471; + MISSION_GLOBAL_WAR_CURRENCY_BY_STAGE = 472; + MISSION_GLOBAL_WAR_CURRENCY_BY_EXCHANGE = 473; + MISSION_GLOBAL_WAR_EXCHANGE_TIMES = 474; + MISSION_GLOBAL_WAR_FINISH_POINT = 475; + MISSION_GLOBAL_WAR_CURRENCY_BY_SWEEP = 476; + MISSION_GLOBAL_WAR_FINISH_OR_EXCHANGE_TIMES_WITH_POINT_ID_LIST = 477; + MISSION_SHOP_COST_MCOIN_NUM = 480; + MISSION_VIRTUAL_TRAIN_CUSTOM_LEVEL = 481; + MISSION_VIRTUAL_TRAIN_GROUP_TOTAL_LEVEL_UP_TIMES = 482; + MISSION_SEND_RED_ENVELOPE_IN_SPECIFIC_TIME = 489; + MISSION_ADVENTURE_ADD_BADGE = 491; + MISSION_ADVENTURE_FINISH_ADVENTURE_BY_RARITY = 493; + MISSION_ADVENTURE_TAKE_SCOIN = 495; + MISSION_SCRATCH_TICKET_SCRATCH_NUM = 501; + MISSION_SCRATCH_TICKET_ROUND_NUM = 502; + MISSION_BBQ_COOK_NUM = 503; + MISSION_DLC_USE_ACTIVE_SKILL = 505; + MISSION_DLC_OUTER_AREA_KILL_NUM = 506; + MISSION_DLC_SHIELD_MONSTER_KILL_NUM = 507; + MISSION_DLC_IN_CIRCLE_KILL_NUM = 508; + MISSION_DLC_AIR_KILL_NUM = 509; + MISSION_DLC_THROW_SKILL_KILL_NUM = 510; + MISSION_DLC_ACTIVE_SKILL_KILL_NUM = 511; + MISSION_DLC_BREAK_FREQUENCY_SHIELD_NUM = 512; + MISSION_DLC_BREAK_HARD_SHIELD_NUM = 513; + MISSION_DLC_EX_JUMP = 514; + MISSION_DLC_USE_THROW_SKILL = 515; + MISSION_DLC_TOWER_TOTAL_PROGRESS = 518; + MISSION_DLC_ENTER_STAGE_WITH_SPECIFIC_AVATAR = 519; + MISSION_OPENWORLD_KILL_ENEMY_WITH_MAP = 524; + MISSION_DLC_TOWER_MAX_PROGRESS_NO_BACKTRACK = 526; + MISSION_OPENWORLD_CHOOSE_ANY_QUEST = 527; + MISSION_CHATWORLD_MAKE_ACTION_NUM = 545; + MISSION_CHATWORLD_FISH_SUCC_OR_WAIT_ASSIST_NUM = 546; + MISSION_CHATWORLD_PRAY_NUM = 547; + MISSION_STAGE_TAG_FAIL_NUM = 548; + MISSION_LOGIN_WITH_SPECAIL_DEVICE_TYPE = 549; + MISSION_UNLOCK_MONTH_CARD_OR_BATTLE_PASS = 550; + MISSION_GACHA_COST_TICKET_TOTAL_SCORE = 551; + MISSION_GARDEN_HARVEST_NUM = 552; + MISSION_GARDEN_HARVEST_KIND = 553; + MISSION_GARDEN_HARVEST_NUM_BY_KIND = 554; + MISSION_JIGSAW_EXCHANGE_PIECE = 555; + MISSION_JIGSAW_FINISH_JIGSAW = 556; + MISSION_OVERLAP_SUMMON_NUM = 557; + MISSION_CHATWORLD_QUESTION = 558; + MISSION_CHATWORLD_DISH_NUM = 559; + MISSION_ARMADA_REUNION_REWARD = 560; + MISSION_ARMADA_REUNION_PREPARE = 561; + MISSION_GARDEN_SPEED_UP_TIMES = 562; + MISSION_WEB_ACTIVITY_1 = 581; + MISSION_WEB_ACTIVITY_2 = 582; + MISSION_WEB_ACTIVITY_3 = 583; + MISSION_WEB_ACTIVITY_4 = 584; + MISSION_WEB_ACTIVITY_5 = 585; + MISSION_WEB_ACTIVITY_6 = 586; + MISSION_WEB_ACTIVITY_7 = 587; + MISSION_WEB_ACTIVITY_8 = 588; + MISSION_WEB_ACTIVITY_9 = 589; + MISSION_WEB_ACTIVITY_10 = 590; + MISSION_NORMAL_FINISH_SPECIFIC_STAGE_ID = 591; + MISSION_SHOP_BUY_GOODS_ID_COST_MCOIN = 592; + MISSION_SANCTUARY_ACTIVITY_LEVEL = 593; + MISSION_SANCTUARY_TAKE_PRODUCT_TIMES = 594; + MISSION_SLOT_MACHINE_START_TIMES = 595; + MISSION_RAFFLE_DRAW_TICKET_NUM = 597; + MISSION_MONOPOLY_BUILDING_NUM = 599; + MISSION_MONOPOLY_BUILDING_LEVEL = 600; + MISSION_FINISH_MOSAIC_NUM = 601; + MISSION_MONOPOLY_USE_ITEM = 602; + MISSION_ULTRA_ENDLESS_FINISH_SITE = 603; + MISSION_ULTRA_ENDLESS_FINISH_SITE_WITH_TAG_AVATAR = 604; + MISSION_ULTRA_ENDLESS_TOTAL_SCORE = 605; + MISSION_ULTRA_ENDLESS_FINISH_SITE_NUM = 606; + MISSION_ULTRA_ENDLESS_TOTAL_ADD_SCORE = 607; + MISSION_ULTRA_ENDLESS_MAX_GROUP_LEVEL = 608; + MISSION_ULTRA_ENDLESS_SEASON_ADD_CUP_NUM = 609; + MISSION_ULTRA_ENDLESS_TOP_RANK_TIMES = 610; + MISSION_BATTLE_PASS_THEME_LEVEL = 611; + MISSION_BATTLE_PASS_UNLOCK_TICKET = 612; + MISSION_GET_EXBOSS_SCORE = 613; + MISSION_TOTAL_DUTY_POINT_IN_PERIOD = 615; + MISSION_FINISH_MISSION_TIMES_WITH_MISSION_ID_LIST = 617; + MISSION_GACHA_CONSUME_TOTAL_SCORE = 618; + MISSION_REPLAY_UPLOAD = 619; + MISSION_REPLAY_PLAY = 620; + MISSION_REPLAY_RECORD = 621; + MISSION_FINISH_ELITE_STAGE_NUM = 622; + MISSION_PASS_STAGE_NUM = 623; + MISSION_STAGE_TAG_WITH_ALL_SPECIFIC_AVATAR = 624; + MISSION_SPECIFIC_MATERIAL_ADD_NUM = 625; + MISSION_SPECIFIC_MATERIAL_COST_NUM = 626; + MISSION_UNLOCK_AVATAR_IN_SPECIFIC_NEWBIE_ACTIVITY = 627; + MISSION_QAVATAR_BATTLE_PARTICIPATE_NUM = 630; + MISSION_QAVATAR_BATTLE_KILL_NUM = 631; + MISSION_QAVATAR_BATTLE_KILL_NUM_SINGLE_GAME = 632; + MISSION_QAVATAR_BATTLE_WIN_NUM = 633; + MISSION_QAVATAR_BATTLE_SCORE = 634; + MISSION_VIRTUAL_TRAIN_SPECIFIC_STIGMATA_NUM = 635; + MISSION_VIRTUAL_TRAIN_SPECIFIC_AVATAR_NUM = 636; + MISSION_ROGUE_TOWER_ENDLESS_MAX_SCORE_WITH_AVATAR_ID_LIST = 637; + MISSION_ROGUE_TOWER_ENDLESS_TOTAL_SCORE_WITH_AVATAR_ID_LIST = 638; + MISSION_REUNION_COOK_WITH_BOOK_ID_LIST = 639; + MISSION_CHATWORLD_BEAST_TREASURE_TAKE_TIMES = 640; + MISSION_CHATWORLD_BEAST_SINGLE_DAMAGE = 641; + MISSION_CHATWORLD_BEAST_TOTAL_DAMAGE = 642; + MISSION_CHATWORLD_NORMAL_BOX_TAKE_TIMES = 643; + MISSION_ADD_UP_VIP_POINT_BY_PRODUCT = 644; + MISSION_OPENWORLD_AVATAR_ACTIVITY_CULTIVATE = 645; + MISSION_OPENWORLD_AVATAR_ACTIVITY_TALENT = 646; + MISSION_OPENWORLD_FINISH_QUEST_NO_BACKTRACK_WITH_RARITY_AND_MAP = 647; + MISSION_OPENWORLD_AVATAR_ACTIVITY_LEVEL = 648; + MISSION_BOSSRUSH_ACTIVITY_STAGE_TAG_ID_USE_SPECIFIC_BUFF_ID_LIST = 649; + MISSION_STAGE_TAG_SCORE = 650; + MISSION_OPENWORLD_AVATAR_ACCEPT_QUEST = 651; + MISSION_THEME_WANTED_STAGE_PASS_NUM = 652; + MISSION_THEME_WANTED_SPECIFIC_PROGRESS_PASS_NUM = 653; + MISSION_SLG_OCCUPIED_POINT_NUM = 656; + MISSION_SLG_OCCUPIED_BUFF_POINT_NUM = 657; + MISSION_SLG_PLAYER_SCORE = 658; + MISSION_RELAY_STAGE_PHASE_PASS_TIME = 659; + MISSION_EXBOSS_ACC_SCORE = 660; + MISSION_GOD_WAR_STAGE_WITH_ITEM = 661; + MISSION_GOD_WAR_STAGE_WITH_SUPPORT_AVATAR = 662; + MISSION_GOD_WAR_AVATAR_PUNISH_LEVEL_SUCC_NUM = 666; + MISSION_GOD_WAR_PUNISH_BUFF_SUCC_NUM = 667; + MISSION_GOD_WAR_STAGE_WITH_PUNISH_LEVEL = 668; + MISSION_GOD_WAR_COLLECTION = 669; + MISSION_GOD_WAR_COLLECTION_SUIT = 670; + MISSION_GOD_WAR_FINISH_LOBBY_ACTION = 674; + MISSION_GOD_WAR_STAGE_TAG_SPECIFIC_CHAPTER_ON_SETTLE = 675; + MISSION_GOD_WAR_MAX_SCORE_ON_SETTLE = 676; + MISSION_GOD_WAR_AVATAR_SPECIFIC_PUNISH_LEVEL_SUCC_NUM = 677; + MISSION_GOD_WAR_AVATAR_PUNISH_LEVEL_SPECIFIC_MODE_SUCC_NUM = 678; + MISSION_RANCH_MONSTER_RARITY_NUM = 691; + MISSION_RANCH_COLLCTION_POINT = 693; + MISSION_RANCH_TAKE_PRODUCT_TIMES = 694; + MISSION_RANCH_MONSTER_SYNTHESIS_WITH_FORMULA_TIMES = 695; + MISSION_RANCH_MONSTER_SYNTHESIS_WITHOUT_FORMULA_TIMES = 696; + MISSION_OPENWORLD_FINISH_STORY_NUM = 702; + MISSION_NINJA_SLOT_LIST_LEVEL = 704; + MISSION_RESTAURANT_DELIVER_QUEST_NUM = 705; + MISSION_RESTAURANT_COOK_SPECIFIC_RECIPE = 707; + MISSION_RESTAURANT_COOK_SPECIFIC_RECIPE_WITH_AVATAR = 708; + MISSION_SC_DLC_FINISH_DAILY_QUEST_NUM = 711; + MISSION_SC_DLC_TOWER_MAX_PROGRESS = 716; + MISSION_SC_DLC_ANALYSIS_MONSTER = 717; + MISSION_SC_DLC_LEVELUP_TALENT_NUM = 721; + MISSION_SC_DLC_ACHIEVE_EVENT_NUM = 722; + MISSION_SC_DLC_TOWER_FINISH_FLOOR_NUM = 723; + MISSION_TOWN_ACTIVITY_FINISH_GAMES = 751; + MISSION_TOWN_ACTIVITY_FINISH_BOSS = 752; + MISSION_TOWN_ACTIVITY_BUILD_NUM = 753; + MISSION_TOWN_ACTIVITY_BUILD_NUM_IN_ONE_GAME = 754; + MISSION_TUTORIAL_WATCH_SITE_VIDEO = 771; + MISSION_CHATWORLD_BATTLE_BOX_TAKE_TIMES = 776; + MISSION_FINISH_TUTORIAL_ID = 780; + MISSION_BOSS_CHALLENGE_FINISH_STAGE = 786; + MISSION_SELECT_ADVENTURE_QUEST = 792; + MISSION_BEGIN_ADVENTURE_STORY_SWEEP = 793; + MISSION_FINISH_EXBOSS_WITH_AVATAR_LIST = 800; + MISSION_OPENWORLD_CHAPTER_ADD_HERO_CARD_NUM = 807; + MISSION_OPENWORLD_CHAPTER_FINISH_CHALLENGE_GROUP = 812; + MISSION_OPENWORLD_CHAPTER_FINISH_CHALLENGE_GROUP_INDEX = 813; + MISSION_OPENWORLD_CHAPTER_FINISH_ENDLESS_CHALLENGE = 814; + MISSION_OPENWORLD_CHAPTER_FINISH_QUEST_NUM = 816; + MISSION_OPENWORLD_CHAPTER_FINISH_QTE_MAP_NUM = 817; + MISSION_OPENWORLD_CHAPTER_QTE_MAP_GET_MATERIAL_NUM = 818; + MISSION_OPENWORLD_CHAPTER_ACCEPT_QUEST_NUM = 819; + MISSION_MONSTER_CARD_EXP_STAGE_PASS_TIMES = 829; + MISSION_GACHA_NUM_SPECIFIC_TICKET_ID_LIST = 831; + MISSION_GACHA_NUM_AFTER_DISCOUNT_SPECIFIC_TICKET_ID_LIST = 832; + MISSION_OPENWORLD_FINISH_STORY_NO_BACKTRACK = 833; + MISSION_EX_BOSS_FINISH_BOSS_NUM_WITH_LEVEL = 834; + MISSION_BATTLE_PASS_EXP_ACTIVITY_MISSION = 835; + MISSION_BUFF_ASSIST_SELECT_BUFF_TIMES = 836; + MISSION_BUFF_ASSIST_PUBLISH_BUFF_TIMES = 837; + MISSION_DICEY_DUNGEON_ENDLESS_PASSED_FLOOR = 838; + MISSION_DICEY_DUNGEON_DAILY_PASSED_TIMES = 839; + MISSION_DICEY_DUNGEON_WEAPON_UNLOCK = 840; + MISSION_DICEY_DUNGEON_WEAPON_GACHA_TIMES = 841; + MISSION_DICEY_DUNGEON_TOTAL_ROLE_LEVEL = 842; + MISSION_DICEY_DUNGEON_ROLE_LEVEL_GREATER_EQUAL_NUM = 843; + MISSION_DICEY_DUNGEON_ROLE_NUM_LEVEL_GREATER_EQUAL = 844; + MISSION_PVZ_DAILY_PASS_TIMES = 845; + MISSION_PVZ_QAVATAR_NUM_LEVEL_GREATER_EQUAL = 846; + MISSION_PVZ_SPECIAL_MATERIAL_NUM = 847; + MISSION_OPENWORLD_CHAPTER_FURNACE_PRODUCE = 849; + MISSION_OPENWORLD_CHAPTER_FINAL_ROBOT_CATCH_KILL_CRYSTAL_MONSTER = 852; + MISSION_WAVE_RUSH_SITE_PASS_TIMES = 871; + MISSION_WAVE_RUSH_TOTAL_SCORE = 872; + MISSION_WAVE_RUSH_SITE_MAX_SCORE = 873; + MISSION_QCANDY_FINISH_BATTLE_TIMES = 876; + MISSION_QCANDY_FINISH_BATTLE_TIMES_WITH_LE_RANK = 877; + MISSION_QCANDY_MAX_RANK_SCORE = 878; + MISSION_QCANDY_SPECIFIC_MAP_ID = 879; + MISSION_WEIGHTED_FINISH_EXBOSS_NUM = 881; + MISSION_ENDLESS_DETAIL_GROUP_LEVEL = 882; + MISSION_MINI_MONOPOLY_FINISH_MAP = 886; + MISSION_AI_CYBER_REPAIR_PROGRESS = 887; + MISSION_GLOBAL_EXPLORE_AREA_EXPLORE = 888; + MISSION_GLOBAL_EXPLORE_FINISH_QUEST = 889; + MISSION_GLOBAL_EXPLORE_CUMULATIVE_DONATION = 890; + MISSION_GLOBAL_EXPLORE_SPECIFIC_EXPLORE_LEVEL = 891; + MISSION_GLOBAL_EXPLORE_TRIGGER_EVENT = 892; + MISSION_CHATWORLD_WOODEN_BOY_WIN = 893; + MISSION_CHATWORLD_WOODEN_BOY_FINISH = 894; + MISSION_CHATWORLD_QUESTION_RIGHT = 895; + MISSION_PLATFORM_SHOOTER_QAVATAR_NUM_LEVEL_GREATER_EQUAL = 896; + MISSION_PLATFORM_SHOOTER_AFFIX_NUM = 897; + MISSION_PLATFORM_SHOOTER_HAS_EXCLUSIVE_AFFIX_WEAPON_NUM = 898; + MISSION_PLATFORM_SHOOTER_RPG_COLLECTION_SCORE = 899; + MISSION_MIRAGE_ACTIVITY_CHALLENGE_SCORE_SUM = 901; + MISSION_MIRAGE_ACTIVITY_TALENT_LEVEL = 902; + MISSION_SUSANNA_TRIAL_ACTIVITY_MENTOR_PROGRESS = 903; + MISSION_SHIGURE_KIRA_ACTIVITY_CONCERT_PROGRESS = 904; + MISSION_MATCH_THREE_GEM_GACHA_TIMES = 906; + MISSION_MATCH_THREE_DAILY_PASSED_TIMES = 907; + MISSION_MATCH_THREE_ROLE_NUM_LEVEL_GREATER_EQUAL = 908; + MISSION_CHAPTER_BW_WORLD_RUNE_GOT_NUM = 911; + MISSION_CHAPTER_BW_WORLD_RUNE_REACH_LEVEL = 912; + MISSION_CHAPTER_BW_WORLD_TOWER_STAGE_SCORE = 913; + MISSION_THEME_TOWER_STAGE_PASSED_TIMES_WITH_STEP_LEVEL = 915; + MISSION_THEME_TOWER_SECTION_PASSED_TIMES_WITH_STEP_LEVEL = 916; + MISSION_THEME_TOWER_SPECIFIC_SECTION_NUM = 917; + MISSION_MAHOU_CARD_UNLOCK_DAILY_SITE_TIMES = 921; + MISSION_MAHOU_CARD_ROLE_LEVEL_GREATER_EQUAL = 922; + MISSION_MAHOU_CARD_ENTER_ROOM = 923; + MISSION_ULTRA_ENDLESS_MAX_GROUP_LEVEL_WITH_SCHEDULE = 926; + MISSION_ULTRA_ENDLESS_FINISH_SITE_SCORE = 927; + MISSION_CHAPTER_ARK_ROLE_LEVEL_EQUAL = 931; + MISSION_CHAPTER_ARK_FINISH_LINEAR_STAGE_NUM = 932; + MISSION_CHAPTER_ARK_MAIN_SUP_SKILL_LEVEL_EQUAL = 933; + MISSION_GOBACK_SCHEDULEID_AND_LOSTDAYS = 936; + MISSION_GOBACK_NOT_SCHEDULEID = 937; + MISSION_MATRIX_NEW_FINISH_TRACK_EVENT = 941; + MISSION_TILED_GAME_FARM_USE_TOOL_NUM = 946; + MISSION_TILED_GAME_FARM_FACILTIY_LEVEL = 947; + MISSION_TILED_GAME_FARM_ENTER_MINE_FLOOR = 948; + MISSION_TILED_GAME_FARM_DAILY_QUEST = 949; + MISSION_TILED_GAME_FARM_CHOOSE_DAILY_QUEST = 950; + MISSION_TILED_GAME_FARM_ADD_LIVESTOCK = 951; + MISSION_TILED_GAME_FARM_FILL_FOOD = 952; + MISSION_TILED_GAME_FARM_TAME_LIVESTOCK = 953; + MISSION_FIRST_WIN_SPECIFIC_STAGE_NUM = 954; + MISSION_TILED_GAME_FARM_UNLOCK_GALLERY = 955; + MISSION_MINION_CLASH_ACTIVITY_LEVEL_GE = 956; + MISSION_MINION_CLASH_GET_CARD_WITH_STAR = 957; + MISSION_MARBLES_SHOOT_PASS_NON_DAILY_ROOM = 961; + MISSION_MARBLES_SHOOT_DAILY_GAME_SCORE = 962; + MISSION_MARBLES_SHOOT_UNLOCK_WIKI = 963; + MISSION_MARBLES_SHOOT_AVATAR_REACH_LEVEL = 964; + MISSION_MARBLES_SHOOT_AVATAR_LEVEL_GREATER_EQUAL_NUM = 965; + MISSION_MARBLES_SHOOT_BUY_OR_LEVEL_UP_BALL_TIMES = 966; + MISSION_GOURMET_HUNT_MANAGEMENT_TIMES = 971; + MISSION_GOURMET_HUNT_KILL_SPECIFIED_BOSS = 980; + MISSION_GOURMET_HUNT_TAKE_OUT_SPECIFIED_INGREDIENT = 981; + MISSION_GOURMET_HUNT_COST_STAMINA_NUM = 983; + MISSION_GOURMET_HUNT_CLIENT_FINISH = 985; + MISSION_GOURMET_HUNT_MANAGEMENT_REVENUE_WITH_SPECIFIED_IDENTITY_TYPE = 986; + MISSION_GOURMET_HUNT_MANAGEMENT_TOTAL_REVENUE_WITH_SPECIFIED_IDENTITY_TYPE = 987; + MISSION_GOURMET_HUNT_MANAGEMENT_SOLD_RECIPE_WITH_SPECIFIED_IDENTITY_TYPE = 988; + MISSION_GOURMET_HUNT_MANAGEMENT_FINISH_SPECIAL_MISSION_WITH_SPECIFIED_IDENTITY_TYPE = 989; + MISSION_GOURMET_HUNT_BRANCH_STORE_FLAG = 990; + MISSION_WEAPON_HOMOLOGY_LEVEL = 991; + MISSION_PJMS_CHAPTER_FINISH_DAILY_QUEST_NUM = 992; + MISSION_PJMS_CHAPTER_RESIDENT_STAGE_GROUP_NUM = 993; + MISSION_PJMS_ACHIEVE_EVENT_NUM = 994; + MISSION_PJMS_CHAPTER_SET_UNIT_NUM = 995; + MISSION_PJMS_RARITY_AUXILIARY_GET_AFFIX_LIST_NUM = 996; + MISSION_PJMS_CORE_UNIT_LEVEL_NUM_GE = 997; + MISSION_PJMS_AUXILIARY_UNIT_LEVEL_NUM_GE = 998; + MISSION_PJMS_FIRST_ENTER = 999; + MISSION_RAID_REPLACE_TOTAL_CHALLENGE_NUM = 1000; + MISSION_RAID_REPLACE_STAGE_PASSED_TIMES = 1001; + MISSION_RAID_REPLACE_BOSS_STAGE_PASSED_TIMES = 1002; + MISSION_THELEMA_ACTIVITY_FINISH_QUESTION_NPC_NUM = 1010; + MISSION_THELEMA_ACTIVITY_FINISH_ALL_QUESTION_NPC_NUM = 1011; + MISSION_THELEMA_ACTIVITY_SKIP_QUESTION = 1012; + MISSION_CHATWORLD_QCANDY_WISH_TIMES = 1015; + MISSION_PJMS_SPECIFIC_STATUS_GADGET_NUM = 1016; + MISSION_CHATWORLD_UNLOCKED_EFFECT_NUM = 1017; + MISSION_CHATWORLD_TAKE_DISH_PREPARE = 1018; + MISSION_GOURMET_HUNT_UNLOCK_WEAPON_MODULE_NUM = 1021; + MISSION_MATCH_THREE_PLUS_PASS_DAILY = 1022; + MISSION_MATCH_THREE_PLUS_GACHA_TIMES = 1023; + MISSION_MATCH_THREE_PLUS_ROLE_LEVEL_EQUAL = 1024; + MISSION_UNLOCK_AVATAR_NO_BACKTRACK = 1025; + MISSION_DEVIL_AUTO_CHESS_ROLE_NUM_LEVEL_GREATER_EQUAL = 1026; + MISSION_DEVIL_AUTO_CHESS_END_GAME = 1027; + MISSION_DEVIL_AUTO_CHESS_BEGIN_GAME = 1028; + MISSION_DEVIL_AUTO_CHESS_FINISH_WAVE = 1029; + MISSION_DEVIL_AUTO_CHESS_TOTAL_SWEEP_TIMES = 1030; + MISSION_TILED_GAME_SRPG_FINISH_BATTLE_WITH_BATTLE_TYPE = 1031; + MISSION_TILED_GAME_SRPG_FINISH_BATTLE_WITH_ID = 1032; + MISSION_TILED_GAME_SRPG_FINISH_BATTLE_WITH_WIN_TYPE = 1033; + MISSION_TILED_GAME_SRPG_FINISH_BATTLE_WITH_BATTLE_TYPE_AND_AVATAR = 1034; + MISSION_TILED_GAME_SRPG_AVATAR_LEVEL_EQUAL = 1035; + MISSION_TILED_GAME_SRPG_AVATAR_MATERIAL_TYPE_NUM = 1036; + MISSION_TILED_GAME_SRPG_AVATAR_SKILL_TIMES = 1037; + MISSION_TILED_GAME_SRPG_DAMAGE_TIMES_WITH_SKILL_ONE_ROUND = 1038; + MISSION_TILED_GAME_SRPG_FINISH_BATTLE_WITH_ID_LIST = 1039; + MISSION_TILED_GAME_SRPG_BATTLE_REPORT = 1040; + MISSION_TILED_GAME_SRPG_EXPLORE_LEVEL = 1041; + MISSION_TILED_GAME_SRPG_CHALLENGE_NUM_WITH_BATTLE_ID_LIST = 1042; + MISSION_THEME_WANTED_STAGE_MULTI_PASS_NUM = 1051; + MISSION_FINISH_BY_ACTION_GRAPH = 1052; + MISSION_STIGMATA_PRISM_NUM = 1053; + MISSION_STAR_RING_ELF_NUM = 1054; + MISSION_FUTARI_BATTLE_NORMAL_STAGE_MAX_SCORE = 1055; + MISSION_FUTARI_BATTLE_STAGE_GROUP_MAX_SCORE = 1056; + MISSION_FUTARI_BATTLE_MAX_SCORE = 1057; + MISSION_RE_ACTIVITY_FIRST_WIN_SPECIFIC_TILE_MAP_LIST = 1058; + MISSION_QRTS_UPGRADE_BUFF_NUM = 1059; + MISSION_QRTS_SWEEP_NUM = 1060; + MISSION_MONSTER_FARM_HIT_MINE = 1062; + MISSION_MONSTER_FARM_USE_BREEDING_EFFECT_ITEM = 1063; + MISSION_MONSTER_FARM_BREEDING_NUM = 1064; + MISSION_MONSTER_FARM_USE_TOOL_NUM = 1065; + MISSION_MONSTER_FARM_MONSTER_NUM_WITH_ID_LIST = 1066; + MISSION_MONSTER_FARM_DAILY_QUEST = 1067; + MISSION_MONSTER_FARM_BUILDING_WITH_SPECIAL_MONSTER_LIST = 1068; + MISSION_MONSTER_FARM_BUILDING_WITH_RARE_MONSTER = 1069; + MISSION_MONSTER_FARM_RARE_MONSTER_NUM = 1070; + MISSION_PJMS_CHAPTER_KNIGHT_RICH_MAN_THROW_DICE_WITH_MAP_ID = 1071; + MISSION_PJMS_CHAPTER_KNIGHT_RICH_MAN_FINISH_SITE_TYPE_WITH_MAP_ID = 1072; + MISSION_PJMS_CHAPTER_KNIGHT_RICH_MAN_TOTAL_SCORE_WITH_MAP_ID = 1073; + MISSION_PJMS_CHAPTER_KNIGHT_RICH_MAN_THROW_CONTROL_DICE_WITH_MAP_ID = 1074; + MISSION_PJMS_CHAPTER_KNIGHT_RICH_MAN_USE_COIN_WITH_MAP_ID = 1075; + MISSION_PJMS_CHAPTER_KNIGHT_RICH_MAN_FIRST_PASS_MAP = 1076; + MISSION_PJMS_CHAPTER_KNIGHT_RICH_MAN_THROW_DICE_WITH_RICH_MAN_ID = 1077; + MISSION_PJMS_CHAPTER_KNIGHT_RICH_MAN_FINISH_SITE_TYPE_WITH_RICH_MAN_ID = 1078; + MISSION_PJMS_CHAPTER_KNIGHT_RICH_MAN_TOTAL_SCORE_WITH_RICH_MAN_ID = 1079; + MISSION_PJMS_CHAPTER_KNIGHT_RICH_MAN_THROW_CONTROL_DICE_WITH_RICH_MAN_ID = 1080; + MISSION_MONSTER_CARD_PVP_TAKE_PRODUCT_REWARD = 1081; + MISSION_MONSTER_CARD_PVP_FINISH_COMBAT = 1082; + MISSION_MONSTER_CARD_PVP_MAX_ELO_SCORE = 1083; + MISSION_MONSTER_CARD_PVP_SPECIFIC_POOL_GACHA = 1084; + MISSION_MONSTER_CARD_PVP_LEVEL = 1085; + MISSION_MONSTER_CARD_PVP_SELECT_RARITY_SKILL_NUM = 1086; + MISSION_MONSTER_FARM_DROP_MONSTER_WITH_MOOD = 1090; + MISSION_ENTER_SPECIFIC_PAGE = 1091; + MISSION_PJMS_CHAPTER_KNIGHT_RICH_MAN_USE_COIN_WITH_RICH_MAN_ID = 1096; + MISSION_TILED_GAME_PRPG_FINISH_DAILY_BATTLE = 1106; + MISSION_PJMS_CHAPTER_KNIGHT_RICH_MAN_GET_COIN_NUM_BY_GAMBLE = 1120; + MISSION_PJMS_CHAPTER_KNIGHT_RICH_MAN_GET_COIN_NUM_BY_RENT = 1121; + MISSION_PJMS_CHAPTER_KNIGHT_RICH_MAN_USE_CARD_NUM_WITH_MAP_ID = 1122; + MISSION_PJMS_CHAPTER_KNIGHT_RICH_MAN_MAX_PASS_FLOOR_WITH_MAP_ID = 1123; + MISSION_PJMS_CHAPTER_KNIGHT_RICH_MAN_PASS_FLOOR_NUM_WITH_MAP_ID = 1124; + MISSION_PJMS_CHAPTER_KNIGHT_RICH_MAP_MAX_COIN_NUM_WITH_MAP_ID = 1126; + MISSION_PJMS_CHAPTER_KNIGHT_RICH_MAN_HAS_GOT_FLOWER_TYPE_NUM = 1128; + MISSION_PJMS_CHAPTER_KNIGHT_RICH_MAN_DURANDAL_CUBE_FIRST_WIN_SPECIFIC_TILE_MAP_LIST = 1131; + MISSION_MONSTER_MORPH_MONSTER_LEVEL = 1135; + MISSION_MONSTER_MORPH_MONSTER_STAR = 1136; + MISSION_MONSTER_MORPH_STAGE_PASSED_TIMES = 1137; + MISSION_KIANA_AUTO_CHESS_FINISH_PVP_WITH_RANK = 1138; + MISSION_KIANA_AUTO_CHESS_COMBO_CARD_NUM = 1139; + MISSION_CHATWORLD_GROUP_PHOTO_TIMES_WITH_BACKDROP_ID = 1140; + MISSION_CHATWORLD_SEND_LANTERN_TIMES = 1141; + MISSION_CHATWORLD_TAKE_DANCE_REWARD_TIMES = 1142; + MISSION_KIANA_AUTO_CHESS_HONKAI_DISASTER_DAMAGE = 1143; + MISSION_KIANA_AUTO_CHESS_CARD_DAMAGE_BY_MAIN_ID = 1144; + MISSION_KIANA_AUTO_CHESS_COIN_GOT_NUM_BY_COMBO = 1145; + MISSION_KIANA_AUTO_CHESS_OVERALL_VALUE = 1146; + MISSION_TILED_GAME_INN_FINISH_MANAGE_TIMES = 1151; + MISSION_TILED_GAME_INN_TRAVEL_TIMES = 1152; + MISSION_TILED_GAME_INN_DEVELOP_DISH_NUM_WITH_SPECIFIC_TASTE = 1153; + MISSION_TILED_GAME_INN_SOLD_DISH_NUM = 1154; + MISSION_TILED_GAME_INN_EARN_GOLD_NUM_IN_ONCE_MANAGEMENT = 1155; + MISSION_TILED_GAME_INN_BUY_SPECIFIC_FURNITURE_NUM = 1156; + MISSION_TILED_GAME_INN_MANAGE_LEVEL = 1157; + MISSION_TILED_GAME_INN_FOOD_TYPE_NUM = 1158; + MISSION_TILED_GAME_INN_DEVELOP_DISH_NUM_WITH_SPECIFIC_TECHNIQUES = 1159; + MISSION_TILED_GAME_INN_SOLD_DISH_NUM_WITH_SPECIFIC_TECHNIQUES = 1160; + MISSION_TILED_GAME_INN_SOLD_DISH_NUM_WITH_SPECIFIC_TASTE = 1161; + MISSION_TILED_GAME_INN_SOLD_UP_DISH_NUM = 1162; + MISSION_TILED_GAME_INN_TRAVEl_AREA_NUM = 1163; + MISSION_TILED_GAME_INN_DEVELOP_DISH_NUM_WITH_FOOD_NUM = 1164; + MISSION_TILED_GAME_INN_COMFORTABLE_VALUE_NUM = 1165; + MISSION_TILED_GAME_INN_TRAVEL_SPECIAL_AREA_TIMES = 1166; + MISSION_TILED_GAME_INN_SOLD_EXQUISITE_DISH_NUM = 1167; + MISSION_TILED_GAME_INN_CUSTOMER_NUM_WITH_MOOD = 1168; + MISSION_TILED_GAME_INN_MANAGE_WITH_SPECIFIC_FOOD_NUM_DISHES = 1169; + MISSION_TILED_GAME_INN_TRAVEL_WITH_SPECIFIC_STAFF = 1170; + MISSION_TILED_GAME_INN_SOLD_DISH_NUM_MATCHING_CUSTOMER_TENDENCY = 1171; + MISSION_TILED_GAME_INN_SOLD_DISH_NUM_WITH_SPECIFIC_PRICE = 1172; + MISSION_BATTLE_PASS_UNLOCK_TICKET_WITH_SCHEDULE_ID = 1176; + MISSION_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_PASS_SITE = 1180; + MISSION_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_BUY_SPECIFIC_CARDS = 1181; + MISSION_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_KILL_SPECIFIC_MONSTERS = 1182; + MISSION_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_FINISH_SPECIFIC_EVENTS = 1183; + MISSION_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_ADD_CARDS_NUM = 1184; + MISSION_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_KILL_NUM = 1185; + MISSION_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_FINISH_EVENT_NUM = 1186; + MISSION_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_ADD_COIN_NUM = 1187; + MISSION_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_EDIT_BATTLE_CARD = 1188; + MISSION_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_COST_MISSILE_OR_EMP = 1189; + MISSION_BUY_BATTLE_PASS_LEVEL_USE_HCOIN_OR_MCOIN = 1200; + MISSION_CANNOT_FINISH = 9999; + MISSION_KILL_ANY_ENEMY = 10008; + MISSION_KILL_SPECIFIC_MONSTER_CATEGORY = 10009; + MISSION_STAGE_SUCC_WITH_FRIEND = 10016; + MISSION_COST_STAMINA = 10017; + MISSION_KILL_BY_ATTACK_CATEGORY_TAG = 10023; + MISSION_AVATAR_STAR = 10024; + MISSION_AVATAR_SUB_SKILL_LEVEL = 10025; + MISSION_AVATAR_LEVEL = 10026; + MISSION_STORY_STAGE_FAIL_NUM = 10031; + MISSION_STAGE_MAX_COMBO_NUM = 10032; + MISSION_STORY_STAGE_NORMAL_NUM = 10033; + MISSION_STORY_STAGE_HARD_NUM = 10034; + MISSION_STORY_STAGE_HELL_NUM = 10035; + MISSION_AVATAR_STAR_NUM = 10038; + MISSION_AVATAR_GOODFEEL_LEVEL_NUM = 10039; + MISSION_WEAPON_PICTORIAL_NUM = 10040; + MISSION_STIGMATA_PICTORIAL_NUM = 10041; + MISSION_STIGMATA_PICTORIAL_SUIT_NUM = 10042; + MISSION_FRIEND_POINT_NUM = 10044; + MISSION_STAGE_TAG_NUM = 10051; + MISSION_STAGE_TAG_V2_NUM = 10052; + MISSION_EQUIPMENT_POWER_UP_TWO_RATE = 10055; + MISSION_SCOIN_EXCHANGE_TEN_RATE = 10056; + MISSION_TOTAL_COST_STAMINA = 10059; + MISSION_STAGE_MAX_SCORE_WITH_STAGE_ID = 10060; + MISSION_STAGE_TOTAL_SCORE_WITH_STAGE_ID = 10061; + MISSION_STAGE_MAX_SCORE_WITH_STAGE_TAG = 10062; + MISSION_STAGE_TOTAL_SCORE_WITH_STAGE_TAG = 10063; + MISSION_EXTRASTORY_CHALLENGE_NUM = 10071; + MISSION_EXTRASTORY_STAGE_MAX_SCORE = 10072; + MISSION_OPENWORLD_FINISH_EVENT_TYPE = 10090; + MISSION_OPENWORLD_FINISH_QUEST_NUM = 10095; + MISSION_OPENWORLD_PERFECT_REWARD_NUM = 10097; + MISSION_JOIN_ARMADA = 10099; + MISSION_OPENWORLD_FINISH_STORY = 10104; + MISSION_AVATAR_MAX_LEVEL = 10109; + MISSION_AVATAR_MAX_SUB_SKILL_LEVEL = 10110; + MISSION_WEAPON_TYPE_MAX_LEVEL = 10111; + MISSION_BIND_ACCOUNT = 10125; + MISSION_EXTRASTORY_HAS_PASS_NUM_WITH_DIFFICULTY = 10128; + MISSION_EXTRASTORY_HAS_PASS_NUM = 10129; + MISSION_TOTAL_COST_SCOIN_NUM_BACKTRACK = 10133; + MISSION_TOTAL_COST_HCOIN_NUM_BACKTRACK = 10135; + MISSION_STAGE_TOTAL_MAX_SCORE_WITH_STAGE_TAG = 10144; + MISSION_AVATAR_DRESSED_EQUIPMENTS = 10149; + MISSION_DRESSED_ANY_BEFALL_WEAPON = 10150; + MISSION_LEVEL_MULTI_EQUIP_RARITY_BACKTRACK = 10156; + MISSION_POWERUP_MULTI_SPECIFIC_EQUIP_BACKTRACK = 10158; + MISSION_EVO_MULTI_SPECIFIC_EQUIP_BACKTRACK = 10159; + MISSION_FINISH_EXBOSS_NUM_BACKTRACK = 10161; + MISSION_OPENWORLD_TECH_LEVEL = 10164; + MISSION_UNLOCK_AVATAR = 10168; + MISSION_FINISH_PLAYER_LEVEL = 10171; + MISSION_GET_EXBOSS_SCORE_BACKTRACK = 10172; + MISSION_PUPIL_GRADUATED_BACKTRACK = 10173; + MISSION_MASTER_HAS_NUM_GRADUATED_PUPIL_BACKTRACK = 10174; + MISSION_FINISH_BE_MASTER_BACKTRACK = 10176; + MISSION_RECRUIT_NUM_PUPIL_BACKTRACK = 10177; + MISSION_FINISH_BE_PUPIL_BACKTRACK = 10178; + MISSION_SPECIFIC_STAGE_ID_BACKTRACK = 10180; + MISSION_COLLECT_FURNITURE_SUIT = 10183; + MISSION_COLLECT_SPECIFIC_ITEM = 10185; + MISSION_DORM_COMFORT_LEVEL = 10186; + MISSION_DORM_COMFORT_VALUE = 10187; + MISSION_DORM_FACILITY_LEVEL = 10188; + MISSION_DORM_HOUSE_LEVEL = 10189; + MISSION_OPENWORLD_QUEST_LEVEL_BACKTRACK = 10190; + MISSION_DORM_HOUSE_LEVEL_IN_PARAM = 10191; + MISSION_POWERUP_MULTI_SPECIFIC_EQUIP_MAINID_BACKTRACK = 10207; + MISSION_EVO_MULTI_SPECIFIC_EQUIP_MAINID_BACKTRACK = 10208; + MISSION_AVATAR_GOODFEEL_LEVEL_SPECIFIC_AVATAR = 10212; + MISSION_REACH_DAILY_DUTY_POINT_BACKTRACK = 10220; + MISSION_REACH_WEEKLY_DUTY_POINT_BACKTRACK = 10222; + MISSION_LEVEL_MULTI_EQUIP_MAINID_BACKTRACK = 10223; + MISSION_STAR_MULTI_EQUIP_MAINID_BACKTRACK = 10224; + MISSION_AVATAR_DRESSED_EQUIPMENTS_MAINID = 10225; + MISSION_AVATAR_SUB_SKILL_LEVELUP_PROGRESS = 10226; + MISSION_GENERAL_ACTIVITY_SCORE_BACKTRACK = 10234; + MISSION_OPENWORLD_MAKE_MECHA_TIMES_BACKTRACK = 10254; + MISSION_OPENWORLD_QUEST_RATE_BACKTRACK = 10257; + MISSION_OPENWORLD_TD_STAGE_RATE_BACKTRACK = 10262; + MISSION_OPENWORLD_FINISH_EVENT_TYPE_WITH_MAP = 10263; + MISSION_OPENWORLD_QUEST_LEVEL_BACKTRACK_WITH_MAP = 10265; + MISSION_OPENWORLD_FINISH_QUEST_NUM_WITH_MAP = 10266; + MISSION_WIKI_EQUIPMENT_NUM_BY_RARITY = 10274; + MISSION_WIKI_STIGMATA_SUIT_NUM_BY_RARITY = 10275; + MISSION_WIKI_ACHIEVEMENT_NUM_BY_TYPE = 10277; + MISSION_GOBACK_GAIN_EXP = 10299; + MISSION_RPG_TALE_ROLE_NUM = 10308; + MISSION_RPG_TALE_PASS_SITE_BACKTRACK = 10309; + MISSION_MATRIX_COLLECT_ITEM = 10316; + MISSION_VIRTUAL_TRAIN_AVATAR_NUM = 10317; + MISSION_VIRTUAL_TRAIN_AVATAR_STAR_NUM = 10318; + MISSION_RPG_TALE_TOWER_FLOOR = 10323; + MISSION_RPG_TALE_ABILITY_LEVEL_BACKTRACK = 10325; + MISSION_MASTER_PUPIL_INVITE = 10332; + MISSION_AVATAR_LEVEL_NUM = 10334; + MISSION_DORM_ROOM_UNLOCK = 10336; + MISSION_EQUIPMENT_POWER_UP_LEVEL_BACKTRACK = 10365; + MISSION_GOBACK_SCORE = 10378; + MISSION_AVATAR_ARTIFACT_LEVEL = 10383; + MISSION_LEVEL_LOCK_EXP = 10384; + MISSION_SET_LEVEL_LOCK_ID = 10385; + MISSION_ELF_STAR = 10386; + MISSION_ELF_LEVEL = 10387; + MISSION_ELF_STAR_NUM = 10388; + MISSION_ELF_LEVEL_NUM = 10389; + MISSION_ELF_TALENT_LEVEL = 10396; + MISSION_ELF_TALENT_GROUP_LEVEL = 10397; + MISSION_ELF_TALENT_SLOT_UNLOCK_NUM = 10398; + MISSION_ELF_TOTAL_PERIOD_UPGRADE_TIMES = 10399; + MISSION_ELF_TOTAL_SKILL_LEVEL = 10401; + MISSION_GOBACK_TOTAL_LOGIN_DAYS = 10452; + MISSION_TOTAL_LOGIN_DAYS = 10462; + MISSION_ADVENTURE_LEVEL = 10490; + MISSION_ADVENTURE_ADD_BADGE_BACKTRACK = 10492; + MISSION_ADVENTURE_FINISH_ADVENTURE = 10494; + MISSION_NINJA_SLOT_LEVEL = 10504; + MISSION_DLC_AVATAR_TALENT_TOTAL_LEVEL = 10516; + MISSION_DLC_TOWER_MAX_PROGRESS = 10517; + MISSION_DLC_SUPPORT_NPC_LEVEL = 10520; + MISSION_DLC_TALENT_LEVEL = 10521; + MISSION_DLC_LEVEL = 10522; + MISSION_DLC_COLLECTION_TYPE_NUM = 10523; + MISSION_OPENWORLD_FINISH_ONCE_EVENT_BACKTRACK_WITH_MAP = 10525; + MISSION_OPENWORLD_FINISH_SPECIFIC_STORY_NUM_BACKTRACK = 10528; + MISSION_EXAMINATION_FINISH_NUM = 10596; + MISSION_FINISH_MOSAIC_NUM_BACKTRACK = 10598; + MISSION_OPENWORLD_QUEST_ACTIVITY_TOTAL_SCORE_BACKTRACK = 10614; + MISSION_AVATAR_STAR_SUBSTAR = 10655; + MISSION_GOD_WAR_ROLE_RELATION_LEVEL_BACKTRACK = 10663; + MISSION_GOD_WAR_TALENT_LEVEL_NUM_BACKTRACK = 10664; + MISSION_GOD_WAR_AVATAR_PUNISH_LEVEL_NUM_BACKTRACK = 10665; + MISSION_GOD_WAR_COLLECTION_TYPE_NUM_BACKTRACK = 10671; + MISSION_GOD_WAR_ROLE_AVATAR_LEVEL_NUM_BACKTRACK = 10672; + MISSION_GOD_WAR_SETTLE_EVENT_BACKTRACK = 10673; + MISSION_RANCH_MONSTER_WIKI_LIST = 10692; + MISSION_BIND_HOYOLAB_ACCOUNT = 10701; + MISSION_OPENWORLD_CHAPTER_EQUIP_COST = 10703; + MISSION_RESTAURANT_FACILITY_LEVEL = 10706; + MISSION_OPENWORLD_CHAPTER_FAME_LEVEL_BACKTRACK = 10709; + MISSION_SPECIFIC_MATERIAL_NUM_BACKTRACK = 10710; + MISSION_SC_DLC_LEVEL_BACKTRACK = 10712; + MISSION_SC_DLC_AVATAR_LEVEL_BACKTRACK = 10713; + MISSION_SC_DLC_AVATAR_TALENT_NUM_BACKTRACK = 10714; + MISSION_SC_DLC_NPC_SUPPORT_LEVEL_BACKTRACK = 10715; + MISSION_SC_DLC_AVATAR_LEVEL_NUM_BACKTRACK = 10718; + MISSION_SC_DLC_UNLOCK_TALENT_NUM_BACKTRACK = 10719; + MISSION_SC_DLC_NPC_SUPPORT_LEVEL_NUM_BACKTRACK = 10720; + MISSION_SPECIFIC_STAGE_NUM_BACKTRACK = 10741; + MISSION_UNLOCK_SPECIFIC_PHOTO_NUM_BACKTRACK = 10742; + MISSION_TOWN_ACTIVITY_CHALLNGE_NUM_BACKTRACK = 10755; + MISSION_SPECIFIC_AVATAR_EQUIP_WEAPON_LEVEL_BACKTRACK = 10781; + MISSION_SPECIFIC_AVATAR_EQUIP_STIGMATA_SUIT_BACKTRACK = 10782; + MISSION_AVATAR_SPECIFIC_UNLOCK_STAR_NUM_BACKTRACK = 10783; + MISSION_AVATAR_SPECIFIC_TYPE_NUM_BACKTRACK = 10784; + MISSION_AVATAR_SPECIFIC_UNLOCK_STAR_SPECIFC_LEVEL_NUM_BACKTRACK = 10785; + MISSION_AVATAR_SPECIFIC_TYPE_SPECIFIC_LEVEL_NUM_BACKTRACK = 10790; + MISSION_GRAND_KEY_GET_ANY_BACKTRACK = 10791; + MISSION_STAGE_TAG_CHALLENGE_NUM_BACKTRACK = 10796; + MISSION_FINISH_MISSION_TIMES_WITH_MISSION_ID_LIST_BACKTRACK = 10797; + MISSION_OPENWORLD_CHAPTER_UNLOCK_HERO_BACKTRACK = 10806; + MISSION_OPENWORLD_CHAPTER_HERO_CARD_LEVEL_BACKTRACK = 10808; + MISSION_OPENWORLD_CHAPTER_HERO_LEVEL_BACKTRACK = 10809; + MISSION_OPENWORLD_ACTIVE_CARD_GROUP_BATTLE_POINT_BACKTRACK = 10810; + MISSION_OPENWORLD_CHAPTER_UNLOCK_HERO_CARD_BACKTRACK = 10811; + MISSION_OPENWORLD_CHAPTER_BUILDING_LEVEL_BACKTRACK = 10815; + MISSION_OPENWORLD_HUNT_FINISH_QUEST_NUM_BACKTRACK = 10820; + MISSION_OPENWORLD_HUNT_DESTROY_STRONGHOLD_NUM_BACKTRACK = 10821; + MISSION_OPENWORLD_HUNT_HUNTER_KILLED_MAP_NUM_BACKTRACK = 10822; + MISSION_OPENWORLD_HUNT_TALENT_TOTAL_LEVEL_BACKTRACK = 10823; + MISSION_MONSTER_CARD_COLLECTION_NUM_BACKTRACK = 10826; + MISSION_MONSTER_CARD_COLLECTION_LEVEL_BACKTRACK = 10827; + MISSION_MONSTER_CARD_NUM_LEVEL_GREATER_EQUAL_BACKTRACK = 10828; + MISSION_OPENWORLD_CHAPTER_TERMINAL_LEVEL_BACKTRACK = 10848; + MISSION_OPENWORLD_CHAPTER_MOON_CHALLENGE_TOWER_FINISH_FLOOR_BACKTRACK = 10850; + MISSION_OPENWORLD_CHAPTER_MOON_CHALLENGE_TOWER_PASS_NUM_BACKTRACK = 10851; + MISSION_OPENWORLD_CHAPTER_BUILDING_TYPE_UNLOCK_NUM_BACKTRACK = 10852; + MISSION_OPENWORLD_CHAPTER_TALENT_LEVEL_BACKTRACK = 10853; + MISSION_OPENWORLD_CHAPTER_TALENT_TOTAL_LEVEL_BACKTRACK = 10854; + MISSION_OPENWORLD_CHAPTER_TERMINAL_PERIOD_UPGRADE_AT_LEVEL_BACKTRACK = 10855; + MISSION_OPENWORLD_CHAPTER_ANTIGRAVITY_MATERIAL_COLLECTION_NUM_BACKTRACK = 10856; + MISSION_RPG_TALE_ABILITY_LEVEL_SUM_BACKTRACK = 10857; + MISSION_THEME_TOWER_SECTION_LEVEL_BACKTRACK = 10858; + MISSION_THEME_TOWER_SECTION_SCORE_BACKTRACK = 10859; + MISSION_THEME_TOWER_SPECIFIC_SCORE_BACKTRACK = 10860; + MISSION_CHAPTER_BW_WORLD_RUNE_REACH_LEVEL_BACKTRACK = 10861; + MISSION_GOBACK_SCHEDULEID_AND_LOSTDAYS_BACKTRACK = 10862; + MISSION_GOBACK_NOT_SCHEDULEID_BACKTRACK = 10863; + MISSION_PJMS_FINSIH_STORY_BACKTRACK = 10864; + MISSION_PJMS_ADD_EXPLORE_NUM_IN_MATERIAL_ID_LIST_BACKTRACK = 10865; + MISSION_PJMS_AVATAR_LEVEL_NUM_BACKTRACK = 10866; + MISSION_PJMS_ELF_LEVEL_NUM_BACKTRACK = 10867; + MISSION_PJMS_FINSIH_STORY_LIST_BACKTRACK = 10868; + MISSION_PJMS_CHAPTER_LEVEL_BACKTRACK = 10869; + MISSION_PJMS_UNLOCK_BGM_NUM_BACKTRACK = 10870; + MISSION_PJMS_UNLOCK_FURNITURE_NUM_BACKTRACK = 10871; + MISSION_PJMS_HAS_GOT_CORE_UINT_LIST_BACKTRACK = 10872; + MISSION_PJMS_HAS_GOT_AUXILIARY_UINT_LIST_BACKTRACK = 10873; + MISSION_UNLOCK_COLLECTION_ID_LIST_NUM_BACKTRACK = 10874; + MISSION_PJMS_ACTIVATE_TELEPORT_ID_LIST_NUM_BACKTRACK = 10875; + MISSION_PJMS_UNLOCK_FOG_ID_LIST_NUM_BACKTRACK = 10876; + MISSION_PJMS_CHAPTER_LEVEL_LE_BACKTRACK = 10877; + MISSION_GOURMET_HUNT_MANAGEMENT_TIMES_BACKTRACK = 10971; + MISSION_GOURMET_HUNT_MANAGEMENT_TOTAL_REVENUE_BACKTRACK = 10972; + MISSION_GOURMET_HUNT_MANAGEMENT_TOTAL_PRAISE_BACKTRACK = 10973; + MISSION_GOURMET_HUNT_RATING_GE_BACKTRACK = 10974; + MISSION_GOURMET_HUNT_UNLOCK_SPECIFIED_FURNITURE_BACKTRACK = 10975; + MISSION_GOURMET_HUNT_UNLOCKED_FURNITURE_NUM_BACKTRACK = 10976; + MISSION_GOURMET_HUNT_UNLOCKED_RECIPE_NUM_BACKTRACK = 10977; + MISSION_GOURMET_HUNT_LEVEL_BACKTRACK = 10978; + MISSION_GOURMET_HUNT_UNLOCK_SPECIFIED_WEAPON_MODULE_BACKTRACK = 10979; + MISSION_GOURMET_HUNT_OPEN_TREASURE_NUM_BACKTRACK = 10982; + MISSION_GOURMET_HUNT_UNLOCK_TELEPORT_NUM_IN_SPECIFIED_MAP_BACKTRACK = 10984; + MISSION_EXBOSS_FINISH_TIME_SCORE_BACKTRACK = 10985; + MISSION_STIGMATA_PRISM_LEVEL_NUM_BACKTRACK = 10986; + MISSION_MONSTER_FARM_UNLOCK_GALLERY_BACKTRACK = 10987; + MISSION_MONSTER_FARM_UNLOCK_MONSTER_GALLERY_BACKTRACK = 10988; + MISSION_MONSTER_FARM_RARE_MONSTER_NUM_BACKTRACK = 10989; + MISSION_MONSTER_FARM_LEVEL_BACKTRACK = 10990; + MISSION_MONSTER_FARM_ENTER_MINE_FLOOR_BACKTRACK = 10991; + MISSION_MONSTER_FARM_BUILDING_LEVEL_BACKTRACK = 10993; + MISSION_MONSTER_FARM_BUILDING_LIST_LEVEL_BACKTRACK = 10994; + MISSION_TILED_GAME_PRPG_PVP_MAX_RANK_SCORE_BACKTRACK = 10995; + MISSION_TILED_GAME_PRPG_CARD_LEVEL_SUM_BACKTRACK = 10996; + MISSION_TILED_GAME_PRPG_PVP_TOTAL_GAMES_BACKTRACK = 10997; + MISSION_TILED_GAME_PRPG_DECK_LEVEL_BACKTRACK = 10998; + MISSION_KIANA_AUTO_CHESS_PVP_HIGHEST_RANK_SCORE_BACKTRACK = 10999; + MISSION_TILED_GAME_INN_MANAGE_LEVEL_BACKTRACK = 11000; + MISSION_TILED_GAME_INN_FURNITURE_ID_NUM_BACKTRACK = 11001; + MISSION_TILED_GAME_INN_UNLOCK_DISH_NUM_WITH_SPECIFIC_TASTE_BACKTRACK = 11002; + MISSION_TILED_GAME_INN_STAFF_NUM_BACKTRACK = 11003; + MISSION_TILED_GAME_INN_FOOD_TYPE_NUM_BACKTRACK = 11004; + MISSION_TILED_GAME_INN_FINISH_MANAGE_TIMES_BACKTRACK = 11005; + MISSION_TILED_GAME_INN_UNLOCK_DISH_NUM_WITH_FOOD_NUM_BACKTRACK = 11006; + MISSION_TILED_GAME_INN_SOLD_RANK_DISH_BACKTRACK = 11007; + MISSION_TILED_GAME_INN_TRAVEL_TIMES_BACKTRACK = 11008; + MISSION_TILED_GAME_INN_UNLOCK_DISH_NUM_WITH_SPECIFIC_TASTE_COMBINATION = 11009; + MISSION_TILED_GAME_INN_COMFORTABLE_VALUE_NUM_BACKTRACK = 11010; +} + +enum LinearMissionSolveType { + LINEAR_MISSION_SOLVE_CLOSE = 0; + LINEAR_MISSION_SOLVE_RESERVE = 1; + LINEAR_MISSION_SOLVE_AUTO = 2; +} + +enum CycleMissionSolveType { + CYCLE_MISSION_SOLVE_CLOSE = 0; + CYCLE_MISSION_SOLVE_RESERVE = 1; +} + +enum ActivityType { + ACTIVITY_NONE = 0; + ACTIVITY_WEEK_DAY = 1; + ACTIVITY_BEFALL = 2; + ACTIVITY_BOSS_RUSH = 8; + ACTIVITY_MP_OPENWORLD_BOSS = 13; + ACTIVITY_MATRIX = 14; +} + +enum EndlessType { + ENDLESS_TYPE_NONE = 0; + ENDLESS_TYPE_NORMAL = 1; + ENDLESS_TYPE_OPENWORLD = 2; + ENDLESS_TYPE_QUANTUM = 3; + ENDLESS_TYPE_ULTRA = 4; + ENDLESS_TYPE_GREEDY = 5; + ENDLESS_TYPE_FRONT = 6; +} + +enum EndlessRewardType { + ENDLESS_REWARD_TYPE_NONE = 0; + ENDLESS_PROMOTE = 1; + ENDLESS_NORMAL = 2; + ENDLESS_DEMOTE = 3; +} + +enum CabinType { + CABIN_TYPE_NONE = 0; + CABIN_POWER = 1; + CABIN_ENHANCE_KIANA = 2; + CABIN_COLLECT = 3; + CABIN_MISC = 4; + CABIN_VENTURE = 5; + CABIN_ENHANCE_MEI = 6; + CABIN_ENHANCE_BRONYA = 7; + CABIN_ENHANCE_HIMEKO = 8; + CABIN_ENHANCE_THERESA = 9; + CABIN_ENHANCE_FUKA = 10; +} + +enum AvatarAttrType { + AVATAR_ATTR_TYPE_NONE = 0; + AVATAR_HP = 1; + AVATAR_SP = 2; + AVATAR_ATTACK = 3; + AVATAR_DEFENSE = 4; + AVATAR_CRITICAL = 5; +} + +enum CabinTechEffectType { + CABIN_TECH_EFFECT_TYPE_NONE = 0; + CABIN_TECH_ADD_AVATAR_ATTR = 1; + CABIN_TECH_ADD_VENTURE_MAX_NUM = 2; + CABIN_TECH_ADD_PROCESS_VENTURE_MAX_NUM = 3; + CABIN_TECH_ADD_REFRESH_VENTURE_ATTR = 4; + CABIN_TECH_ADD_FRIEND_NUM = 5; + CABIN_TECH_DISJOIN_EQUIPMENT = 6; + CABIN_TECH_ADD_COLLECT_SPEED = 7; + CABIN_TECH_ADD_COLLECT_STORAGE = 8; + CABIN_TECH_ADD_COLLECT_EXTRA_PERCENT = 9; + CABIN_TECH_ADD_COLLECT_EXTRA_RATE = 10; + CABIN_TECH_ADD_SKILL_POINT_LIMIT = 11; + CABIN_TECH_ADD_COLLECT_EQUIPMENT_DROP = 12; + CABIN_TECH_ADD_COLLECT_EQUIPMENT_PACKAGE_NUM = 13; + CABIN_TECH_SUB_COLLECT_EQUIPMENT_TIME = 14; +} + +enum IslandVentureDispatchCond { + ISLAND_VENTURE_DISPATCH_COND_NONE = 0; + ISLAND_VENTURE_AVATAR_ID = 1; + ISLAND_VENTURE_AVATAR_EACH_LEVEL = 2; + ISLAND_VENTURE_AVATAR_ONE_LEVEL = 3; + ISLAND_VENTURE_AVATAR_TOTAL_LEVEL = 4; + ISLAND_VENTURE_AVATAR_EACH_STAR = 5; + ISLAND_VENTURE_AVATAR_ONE_STAR = 6; + ISLAND_VENTURE_AVATAR_NUM = 7; + ISLAND_VENTURE_AVATAR_ATTR_NUM = 8; + ISLAND_VENTURE_AVATAR_CLASS_NUM = 9; + ISLAND_VENTURE_AVATAR_ATTR_NOT_SAME = 10; + ISLAND_VENTURE_AVATAR_CLASS_NOT_SAME = 11; +} + +enum DisjoinType { + DISJOIN_TYPE_NONE = 0; + DISJOIN_TOTAL = 1; + DISJOIN_TITLE = 2; + DISJOIN_EX = 3; +} + +enum StigmataRefineType { + STIGMATA_REFINE_TYPE_NONE = 0; + STIGMATA_REFINE_NORMAL = 1; + STIGMATA_REFINE_ADD_SLOT = 2; + STIGMATA_REFINE_SPECIAL = 3; + STIGMATA_REFINE_LOCK = 4; +} + +enum StigmataRefineTimesType { + STIGMATA_REFINE_TIMES_TYPE_NONE = 0; + STIGMATA_REFINE_TIMES_ONE = 1; + STIGMATA_REFINE_TIMES_TEN = 10; +} + +enum CommentType { + COMMENT_TYPE_NONE = 0; + COMMENT_OK = 1; + COMMENT_CANCEL = 2; + COMMENT_IGNORE = 3; +} + +enum ExtraStoryActType { + EXTRA_STORY_ACT_TYPE_NONE = 0; + EXTRA_STORY_ACT_MAIN = 1; + EXTRA_STORY_ACT_HIDDEN = 2; + EXTRA_STORY_ACT_ENTROPY = 3; + EXTRA_STORY_ACT_ACTIVITY = 4; + EXTRA_STORY_ACT_FANTASY = 5; + EXTRA_STORY_ACT_ROGUE = 6; +} + +enum AvatarRoleType { + AVATAR_ROLE_TYPE_NONE = 0; + AVATAR_ROLE_KIANA = 1; + AVATAR_ROLE_MEI = 2; + AVATAR_ROLE_BRONYA = 3; + AVATAR_ROLE_HIMEKO = 4; + AVATAR_ROLE_THERESA = 5; + AVATAR_ROLE_FUKA = 6; + AVATAR_ROLE_RITA = 7; + AVATAR_ROLE_TWINS = 8; + AVATAR_ROLE_SEELE = 9; + AVATAR_ROLE_DURANDAL = 10; + AVATAR_ROLE_ASUKA = 11; + AVATAR_ROLE_FISCHL = 12; + AVATAR_ROLE_KEQING = 13; + AVATAR_ROLE_ELYSIA = 14; + AVATAR_ROLE_MOBIUS = 15; + AVATAR_ROLE_RAVEN = 16; + AVATAR_ROLE_PARDOFELIS = 17; + AVATAR_ROLE_APONIA = 18; + AVATAR_ROLE_EDEN = 19; + AVATAR_ROLE_GRISEO = 20; + AVATAR_ROLE_VILL_V = 21; + AVATAR_ROLE_LISUSHANG = 22; + AVATAR_ROLE_AI = 23; + AVATAR_ROLE_SUSANNAH = 24; + AVATAR_ROLE_FEATHEREDRABBIT = 25; + AVATAR_ROLE_PROMETHEUS = 26; + AVATAR_ROLE_SHIGURE = 27; + AVATAR_ROLE_28 = 28; + AVATAR_ROLE_29 = 29; + AVATAR_ROLE_30 = 30; + AVATAR_ROLE_31 = 31; + AVATAR_ROLE_32 = 32; + AVATAR_ROLE_33 = 33; + AVATAR_ROLE_34 = 34; + AVATAR_ROLE_35 = 35; + AVATAR_ROLE_SAKURA = 101; + AVATAR_ROLE_KALLEN = 102; + AVATAR_ROLE_DLC_MEI = 103; + AVATAR_ROLE_DLC_ADAM = 104; + AVATAR_ROLE_DLC_CAROL = 105; + AVATAR_ROLE_DLC_BRONYA = 106; + AVATAR_ROLE_DLC_KONG = 107; + AVATAR_ROLE_200 = 200; + AVATAR_ROLE_201 = 201; + AVATAR_ROLE_202 = 202; + AVATAR_ROLE_203 = 203; + AVATAR_ROLE_204 = 204; + AVATAR_ROLE_205 = 205; + AVATAR_ROLE_206 = 206; + AVATAR_ROLE_207 = 207; + AVATAR_ROLE_208 = 208; + AVATAR_ROLE_209 = 209; +} + +enum IslandPositionType { + ISLAND_POSITION_TYPE_NONE = 0; + ISLAND_POSITION_CABIN_POWER = 1; + ISLAND_POSITION_CABIN_ENHANCE_KIANA = 2; + ISLAND_POSITION_CABIN_COLLECT = 3; + ISLAND_POSITION_CABIN_MISC = 4; + ISLAND_POSITION_CABIN_VENTURE = 5; + ISLAND_POSITION_CABIN_ENHANCE_MEI = 6; + ISLAND_POSITION_CABIN_ENHANCE_BRONYA = 7; + ISLAND_POSITION_CABIN_ENHANCE_HIMEKO = 8; + ISLAND_POSITION_CABIN_ENHANCE_THERESA = 9; + ISLAND_POSITION_CABIN_ENHANCE_FUKA = 10; + ISLAND_POSITION_NULL = 21; + ISLAND_POSITION_MAIN = 22; +} + +enum IslandEventCondType { + ISLAND_EVENT_COND_TYPE_NONE = 0; + ISLAND_EVENT_COND_ONE_WEATHER = 1; + ISLAND_EVENT_COND_AVATAR_GOODFEEL = 2; + ISLAND_EVENT_COND_HAS_AVATAR = 3; + ISLAND_EVENT_COND_ROLE_AFFINITY = 4; + ISLAND_EVENT_COND_ALL_AFFINITY = 5; + ISLAND_EVENT_COND_HAS_ONE_EQUIPMENT = 201; + ISLAND_EVENT_COND_AVATAR = 202; + ISLAND_EVENT_COND_FINISH_ONE_EVENT = 203; + ISLAND_EVENT_COND_POS = 204; + ISLAND_EVENT_COND_SITE = 205; +} + +enum DressType { + DRESS_TYPE_NONE = 0; + DRESS_BATTLE = 1; + DRESS_SUIT = 2; + DRESS_ARTIFACT = 4; +} + +enum MaterialUseType { + MATERIAL_USE_TYPE_NONE = 0; + MATERIAL_USE_GIFT = 1; + MATERIAL_USE_TREASURE = 2; + MATERIAL_USE_RAND_GIFT = 3; + MATERIAL_USE_BUFF = 4; + MATERIAL_USE_EXTRA_STORY = 5; + MATERIAL_USE_TRIAL_AVATAR = 6; + MATERIAL_USE_MATRIX_EXPLORE_POWER = 7; + MATERIAL_USE_AUTO_GIFT = 10; + MATERIAL_USE_OPTIONAL_REWARD = 11; + MATERIAL_USE_RAND_REWARD = 12; + MATERIAL_USE_RAND_AVATAR = 13; + MATERIAL_USE_ARMADA_WAR_ENERGE_ITEM = 14; + MATERIAL_USE_RAND_GIFT_RESTRICT = 15; + MATERIAL_USE_ARMADA_REUNION = 17; + MATERIAL_USE_ULTRA_ENDLESS_BUFFER_CUP = 20; + MATERIAL_USE_BATTLE_PASS_TICKET = 24; + MATERIAL_USE_AVATAR_FRAGMENT_TRANSFORM = 25; + MATERIAL_USE_BAODI_TREASURE = 27; + MATERIAL_USE_PRIVILEGE = 28; + MATERIAL_USE_OPENWORLD_AVATAR_ACTIVITY_EXP = 29; + MATERIAL_USE_CONVERT_EQUIPMENT = 30; + MATERIAL_USE_AUTO_NEW_GIFT = 31; + MATERIAL_USE_GOD_WAR_AVATAR = 32; + MATERIAL_USE_GOD_WAR_SUPPORT_AVATAR = 33; + MATERIAL_USE_RANCH_MONSTER = 34; + MATERIAL_USE_OPENWORLD_CHAPTER_EQUIP_COST = 36; + MATERIAL_USE_OPENWORLD_CHAPTER_EQUIP_BUFF = 37; + MATERIAL_USE_SC_DLC_FEVER_SLOT = 38; + MATERIAL_USE_SC_DLC_AVATAR = 39; + MATERIAL_USE_OPENWORLD_CHAPTER_FAME = 40; + MATERIAL_USE_REWARD_LINE_SCORE = 41; + MATERIAL_USE_GOD_WAR_GAIN_COIN = 42; + MATERIAL_USE_OPENWORLD_CHAPTER_HERO = 43; + MATERIAL_USE_OPENWORLD_CHAPTER_HERO_CARD = 44; + MATERIAL_USE_MONSTER_CARD = 45; + MATERIAL_USE_MONSTER_CARD_NO_OVERFLOW = 46; + MATERIAL_USE_MONSTER_CARD_DROP_NUM_LIMITED = 47; + MATERIAL_USE_PVZ_ADD_SPECIAL_MATERIAL = 48; + MATERIAL_USE_OPENWORLD_CHAPTER_FRAGMENT_TRANSFORM = 49; + MATERIAL_USE_ADD_MEDAL_PARAM = 50; + MATERIAL_USE_GLOBAL_EXPLORE_EXP = 51; + MATERIAL_USE_GLOBAL_EXPLORE_STAMINA = 52; + MATERIAL_USE_GLOBAL_EXPLORE_CONTRIBUTION = 53; + MATERIAL_USE_GLOBAL_EXPLORE_ACTIVE_EXP = 54; + MATERIAL_USE_AUTO_TRIAL_WARSHIP = 55; + MATERIAL_USE_SUSANNA_TRIAL_MENTOR_PROGRESS = 56; + MATERIAL_USE_CHAPTER_BW_WORLD_ADD_RUNE = 57; + MATERIAL_USE_CHAPTER_BW_WORLD_ADD_RUNE_WITH_NOTIFY = 58; + MATERIAL_USE_PJMS_BGM = 59; + MATERIAL_USE_ADD_PJMS_CORE_UNIT = 60; + MATERIAL_USE_ADD_PJMS_AUXILIARY_UNIT = 61; + MATERIAL_USE_ADD_MINION_CLASH_EXP = 62; + MATERIAL_USE_ADD_PJMS_FURNITURE = 63; + MATERIAL_USE_ADD_TIELD_GAME_FARM_STAMINA = 64; + MATERIAL_USE_MINION_CLASH_CARD = 65; + MATERIAL_USE_ADD_COLLECTION = 66; + MATERIAL_USE_ADD_GOURMET_HUNT_INGREDIENT = 67; + MATERIAL_USE_SET_MEDAL_MP_INFO = 68; + MATERIAL_USE_ADD_MATERIAL_AND_PJMS_EXPLORE_SCORE = 69; + MATERIAL_USE_ADD_CHATWORLD_QCANDY_ITEM = 70; + MATERIAL_USE_ADD_CHATWORLD_QCANDY_RED_ENVELOPE = 71; + MATERIAL_USE_TILED_GAME_SRPG_ADD_EXPLORE_EXP = 72; + MATERIAL_USE_WEAPON_LEVEL_UP_TICKET = 73; + MATERIAL_USE_MONSTER_CARD_PVP_ACTIVITY_EXP = 74; + MATERIAL_USE_MONSTER_FARM_ACTIVITY_MONSTER = 75; + MATERIAL_USE_STIGMATA_LEVEL_UP_TICKET = 76; + MATERIAL_USE_MONSTER_CARD_PVP_COMBAT_TIMES = 77; + MATERIAL_USE_TILED_GAME_PRPG_ADD_DECK_EXP = 78; + MATERIAL_USE_MONSTER_PVP_CARD = 79; + MATERIAL_USE_BATTLE_PASS_TICKET_UPGRADE = 80; + MATERIAL_USE_MONSTER_CARD_ADD_EXP = 81; + MATERIAL_USE_GOD_WAR_MAX_PUNISH_LEVEL = 82; + MATERIAL_USE_GET_NOTHING = 83; + MATERIAL_USE_ADD_MONSTER_MORPH_MONSTER = 84; + MATERIAL_USE_ADD_MONSTER_MORPH_MINION = 85; + MATERIAL_USE_ADD_MONSTER_MORPH_SKILL = 86; + MATERIAL_USE_TILED_GAME_INN_ADD_DROP_FOOD_NUM = 87; + MATERIAL_USE_MONSTER_CARD_PVP_CUSTOM_PACK = 88; + MATERIAL_USE_TILED_GAME_INN_ADD_FURNITURE = 89; +} + +enum IslandVisitRecordType { + ISLAND_VISIT_RECORD_TYPE_NONE = 0; + ISLAND_RECORD_HELP_FRIEND = 1; + ISLAND_RECORD_BE_HELPED = 2; + ISLAND_RECORD_LIKE = 3; + ISLAND_RECORD_BE_LIKED = 4; +} + +enum DutyType { + DUTY_TYPE_NONE = 0; + DUTY_DAILY = 1; + DUTY_WEEKLY = 2; +} + +enum LobbyMemberStatus { + LOBBY_MEMBER_STATUS_NONE = 0; + LOBBY_MEMBER_UNREADY = 1; + LOBBY_MEMBER_READY = 2; + LOBBY_MEMBER_FIGHTING = 3; +} + +enum LobbyClientStatus { + LOBBY_CLIENT_NONE = 0; + LOBBY_CLIENT_CHOOSING_AVATAR = 1; + LOBBY_CLIENT_CHOOSING_WEAPON = 2; + LOBBY_CLIENT_CHOOSING_STIGMATA = 3; +} + +enum LobbyStatus { + LOBBY_NONE = 0; + LOBBY_PREPARING = 1; + LOBBY_CONNECTING = 2; + LOBBY_FIGHTING = 3; + LOBBY_FINISHING = 4; + LOBBY_WAIT_DESTROY = 5; +} + +enum MpTeamStatus { + TEAM_STATUS_NONE = 0; + TEAM_STATUS_IN_TEAM = 1; + TEAM_STATUS_IN_LOBBY = 2; +} + +enum LobbyEnterType { + LOBBY_ENTER_TYPE_NONE = 0; + LOBBY_ENTER_TYPE_PRIVATE = 1; + LOBBY_ENTER_TYPE_ENTER = 2; + LOBBY_ENTER_TYPE_FAST = 3; +} + +enum MpLeaveTeamReason { + LEAVE_TEAM_REASON_NONE = 0; + LEAVE_TEAM_REASON_KICK = 1; +} + +enum MpDataType { + MP_DATA_ALL = 0; + MP_DATA_LEVEL = 1; + MP_DATA_EXP = 2; + MP_DATA_SKILL_POINT = 3; + MP_DATA_SKILL = 4; + MP_DATA_AVATAR = 5; + MP_DATA_PUNISH_TIME = 6; +} + +enum MpSkillType { + MP_SKILL_NONE = 0; + MP_SKILL_ATTACK = 1; + MP_SKILL_DEFENCE = 2; + MP_SKILL_OTHER = 3; +} + +enum MissionMpMemberType { + MISSION_MP_MEMBER_TYPE_NONE = 0; + MISSION_MP_LEADER = 1; + MISSION_MP_ASSISTANT = 2; +} + +enum MpMemberClientStatus { + MP_MEMBER_CLIENT_NONE = 0; + MP_MEMBER_CLIENT_IN_TEAM = 1; + MP_MEMBER_CLIENT_IN_LOBBY = 2; +} + +enum OpenworldQuestStatus { + OPENWORLD_QUEST_NONE = 0; + OPENWORLD_QUEST_DOING = 1; + OPENWORLD_QUEST_FINISH = 2; + OPENWORLD_QUEST_CLOSE = 3; +} + +enum BuffAcquireType { + BUFF_ACQUIRE_TYPE_NONE = 0; + BUFF_ACQUIRE_GOBACK = 1; + BUFF_ACQUIRE_ITEMUSE = 3; +} + +enum BuffEffectType { + BUFF_EFFECT_TYPE_NONE = 0; + BUFF_EFFECT_COMMANDER_EXP = 1; + BUFF_EFFECT_AVATAR_EXP = 2; + BUFF_EFFECT_SCOIN = 3; + BUFF_EFFECT_NEWBIE = 4; + BUFF_EFFECT_GOBACK = 5; +} + +enum AreaType { + AREA_TYPE_NONE = 0; + AREA_CN = 1; + AREA_JP = 2; + AREA_ASIA = 3; + AREA_WEST = 4; + AREA_KR = 5; + AREA_OVERSEAS = 6; +} + +enum MedalTimeType { + MEDAL_TIME_TYPE_NONE = 0; + MEDAL_TIME_FOREVER = 1; + MEDAL_TIME_DURATION = 2; + MEDAL_TIME_UNTIL = 3; +} + +enum MedalOpType { + MEDAL_OP_TYPE_NONE = 0; + MEDAL_WEAR = 1; + MEDAL_OFF = 2; + MEDAL_FAVORITE_ON = 3; + MEDAL_FAVORITE_OFF = 4; +} + +enum CustomHeadTimeType { + CUSTOM_HEAD_TIME_TYPE_NONE = 0; + CUSTOM_HEAD_TIME_FOREVER = 1; + CUSTOM_HEAD_TIME_DURATION = 2; + CUSTOM_HEAD_TIME_UNTIL = 3; +} + +enum PhonePendantTimeType { + PHONE_PENDANT_TIME_TYPE_NONE = 0; + PHONE_PENDANT_TIME_FOREVER = 1; + PHONE_PENDANT_TIME_LIMIT = 2; +} + +enum PhonePendantOpType { + PHONE_PENDANT_OP_TYPE_NONE = 0; + PHONE_PENDANT_WEAR = 1; + PHONE_PENDANT_OFF = 2; +} + +enum PlayerCardType { + CARD_ALL = 0; + CARD_AVATAR = 1; + CARD_MEDAL = 2; + CARD_MESSAGE = 3; + CARD_MSG_CONFIG = 4; + CARD_ELF = 5; +} + +enum PlayerCardMsgConfig { + CARD_MSG_ALL = 0; + CARD_MSG_FRIEND = 1; + CARD_MSG_FORBIDDEN = 2; +} + +enum RankPowerType { + RANK_POWER_TYPE_NONE = 0; + AVATAR_SSS_NUM = 101; + AVATAR_SS_NUM = 102; + AVATAR_S_NUM = 103; + AVATAR_A_NUM = 104; + WEAPON_5STAR_NUM = 201; + WEAPON_4STAR_NUM = 202; + WEAPON_3STAR_NUM = 203; + STIGMATA_5STAR_NUM = 301; + STIGMATA_4STAR_NUM = 302; + STIGMATA_3STAR_NUM = 303; +} + +enum UserRankType { + USER_RANK_NONE = 0; + USER_RANK_NORMAL = 1; + USER_RANK_PERCENT = 2; +} + +enum PlayerGenderType { + GENDER_NONE_TYPE = 0; + GENDER_MALE_TYPE = 1; + GENDER_FEMALE_TYPE = 2; +} + +enum PlayerAreaType { + AREA_NO_LIMIT = 0; + AREA_NORTH_CHINA = 1; + AREA_NORTH_EAST = 2; + AREA_EAST_CHINA = 3; + AREA_CENTRAL_CHINA = 4; + AREA_CENTRAL_SOUTH = 5; + AREA_NORTH_WEST = 6; + AREA_SOUTH_WEST = 7; + AREA_HK_MC_TW = 8; +} + +enum PlayerInterestType { + INTEREST_NONE = 0; + INTEREST_ANIMATION = 1; + INTEREST_COMIC = 2; + INTEREST_GAME = 3; + INTEREST_MUSIC = 4; + INTEREST_DANCING = 5; + INTEREST_KITIKU = 6; + INTEREST_MMD = 7; + INTEREST_TOKUSATSU = 8; +} + +enum MasterPupilOpType { + MASTER_PUPIL_OP_NONE = 0; + MASTER_PUPIL_OP_AGREE = 1; + MASTER_PUPIL_OP_REJECT = 2; + MASTER_PUPIL_OP_DISMISS = 3; +} + +enum MasterPupilType { + MASTER_PUPIL_NONE_TYPE = 0; + MASTER_PUPIL_MASTER_TYPE = 1; + MASTER_PUPIL_PUPIL_TYPE = 2; + MASTER_PUPIL_NEITHER_ALL = 4; +} + +enum MasterPupilEventType { + MASTER_PUPIL_EVENT_TYPE_NONE = 0; + MASTER_PUPIL_EVENT_GET_PUPIL = 1; + MASTER_PUPIL_EVENT_GET_MASTER = 2; + MASTER_PUPIL_EVENT_PUPIL_ONLINE = 3; + MASTER_PUPIL_EVENT_MASTER_ONLINE = 4; + MASTER_PUPIL_EVENT_PUPIL_OFFLINE = 5; + MASTER_PUPIL_EVENT_MASTER_OFFLINE = 6; + MASTER_PUPIL_EVENT_FINISH_MISSION = 7; + MASTER_PUPIL_EVENT_STEP_EVAL = 8; + MASTER_PUPIL_EVENT_PUPIL_GRADUATED = 9; + MASTER_PUPIL_EVENT_SELF_MISSION = 10; + MASTER_PUPIL_EVENT_APPLY_PUPIL = 11; + MASTER_PUPIL_EVENT_APPLY_MASTER = 12; + MASTER_PUPIL_EVENT_REJECT_MASTER = 13; + MASTER_PUPIL_EVENT_REJECT_PUPIL = 14; + MASTER_PUPIL_EVENT_AGREE_MASTER = 15; + MASTER_PUPIL_EVENT_AGREE_PUPIL = 16; + MASTER_PUPIL_EVENT_DISMISS_MASTER = 17; + MASTER_PUPIL_EVENT_DISMISS_PUPIL = 18; + MASTER_PUPIL_EVENT_COMPANY_MISSION = 19; + MASTER_PUPIL_EVNET_RECALL_APPLICATION = 20; +} + +enum MasterPupilStatus { + MASTER_PUPIL_STATUS_NONE = 0; + MASTER_PUPIL_STATUS_DURING = 1; + MASTER_PUPIL_STATUS_FINISH = 2; + MASTER_PUPIL_STATUS_DISMISS = 3; +} + +enum AvatarType { + AVATAR_TYPE_NONE = 0; + AVATAR_TRIAL_TYPE = 1; + AVATAR_LIMIT_TYPE = 2; + AVATAR_FORMAL_TYPE = 3; +} + +enum DormDataType { + DORM_DATA_ALL = 0; + DORM_DATA_DECORATION = 1; + DORM_DATA_EVENT = 3; + DORM_DATA_SNS = 4; +} + +enum FurnitureDirection { + FURNITURE_DIRECTION_DOWN = 0; + FURNITURE_DIRECTION_LEFT = 1; + FURNITURE_DIRECTION_UP = 2; + FURNITURE_DIRECTION_RIGHT = 3; +} + +enum FurnitureLocation { + FURNITURE_LOCATION_FLOOR = 0; + FURNITURE_LOCATION_WALL1 = 1; + FURNITURE_LOCATION_WALL2 = 2; + FURNITURE_LOCATION_WALL3 = 3; + FURNITURE_LOCATION_WALL4 = 4; +} + +enum RoomType { + ROOM_TYPE_NONE = 0; + ROOM_TYPE_HALL = 1; + ROOM_TYPE_BEDROOM = 2; +} + +enum DecorationEffectType { + DECORATION_EFFECT_TYPE_NONE = 0; + DECORATION_EFFECT_FURNITURE_LIMIT = 1; + DECORATION_EFFECT_AVATAR_LIMIT = 2; + DECORATION_EFFECT_UNLOCK_ROOM = 3; + DECORATION_EFFECT_POWER_LIMIT = 4; +} + +enum FacilityType { + FACILITY_TYPE_NONE = 0; + FACILITY_TYPE_AVATAR_EXP = 1; + FACILITY_TYPE_AVATAR_SKILL_POINT = 2; + FACILITY_TYPE_WEAPON_EXP = 3; + FACILITY_TYPE_STIGMATA_EXP = 4; + FACILITY_TYPE_BAR = 5; + FACILITY_TYPE_AUDIO_PLAYER = 6; + FACILITY_TYPE_ENERGY = 7; + FACILITY_TYPE_HOMELAND = 8; + FACILITY_TYPE_REFRIGERATOR = 9; + FACILITY_TYPE_DOOR = 10; +} + +enum DormEventConditionWay { + DORM_EVENT_CONDITION_WAY_NONE = 0; + DORM_EVENT_CONDITION_WAY_PASS_STAGE = 1; + DORM_EVENT_CONDITION_WAY_ISLAND_ADVANTURE = 2; + DORM_EVENT_CONDITION_WAY_AVATAR_STAR_UP = 3; + DORM_EVENT_CONDITION_WAY_MP_STAGE = 4; + DORM_EVENT_CONDITION_WAY_OPEN_WORLD_QUEST = 5; + DORM_EVENT_CONDITION_WAY_MVP = 6; + DORM_EVENT_CONDITION_WAY_NO_FIGHT = 7; + DORM_EVENT_CONDITION_WAY_LEVEL_UP = 8; + DORM_EVENT_CONDITION_WAY_PASS_STAGE_WITH_ROLE = 9; + DORM_EVENT_CONDITION_WAY_FINISH_MISSION = 11; + DORM_EVENT_CONDITION_WAY_ENDLESS_STAGE_PASS = 12; + DORM_EVENT_CONDITION_WAY_OFFLINE = 13; + DORM_EVENT_CONDITION_WAY_BIRTHDAY = 14; + DORM_EVENT_CONDITION_WAY_GACHA = 15; + DORM_EVENT_CONDITION_WAY_NEW_ROLE = 16; + DORM_EVENT_CONDITION_WAY_ACTIVE_DEGREE = 17; +} + +enum AvatarRollType { + AVATAR_ROLL_TYPE_NONE = 0; + AVATAR_ROLL_AVATAR = 1; + AVATAR_ROLL_STIGMATA = 2; + AVATAR_ROLL_ERROR = 100; +} + +enum AvatarBindEquipMode { + AVATAR_BIND_EQUIP_COMMON = 0; + AVATAR_BIND_EQUIP_EXTRA_STORY = 1; +} + +enum GalInteractTriggerCondition { + GAL_INTERACT_TRIGGER_CONDITION_NONE = 0; + GALINTERACT_CONDITION_DRESS = 1; + GALINTERACT_CONDITION_SHAKE = 2; + GALINTERACT_CONDITION_MAIN_SCREEN = 3; + GALINTERACT_CONDITION_INTERVAL = 4; + GALINTERACT_CONDITION_DATETIME_YMD = 5; + GALINTERACT_CONDITION_DATETIME_MD = 6; + GALINTERACT_CONDITION_WEEKDAY = 7; + GALINTERACT_CONDITION_DAILY_DUTY_POINT = 8; + GALINTERACT_CONDITION_WEEKLY_DUTY_POINT = 9; + GALINTERACT_CONDITION_WEATHER = 10; + GALINTERACT_CONDITION_GACHA = 11; + GALINTERACT_CONDITION_ONLINE_TIME = 12; + GALINTERACT_CONDITION_LOGIN_ITERVAL = 13; + GALINTERACT_CONDITION_MONTH_DAY_INTERVAL = 14; + GALINTERACT_CONDITION_USER_BIRTHDAY = 15; + GALINTERACT_CONDITION_GOODFEEL_LEVEL = 16; + GALINTERACT_CONDITION_AFFINITY_GET_GIFT_LEVEL = 17; + GALINTERACT_CONDITION_MISSION_FINISH = 18; +} + +enum GalInteractBubbleType { + GALINTERACT_BUBBLE_NO = 0; + GALINTERACT_BUBBLE_YES = 1; + GALINTERACT_BUBBLE_PLACEHOLD = 2; + GALINTERACT_BUBBLE_WITH_CONDITION = 3; +} + +enum ExtraStoryChapterType { + EXTRA_STORY_CHAPTER_INVALID = 0; + EXTRA_STORY_CHAPTER_NORMAL = 1; + EXTRA_STORY_CHAPTER_LINE = 2; +} + +enum GeneralActivityType { + GENERAL_ACTIVITY_INVALID = 0; + GENERAL_ACTIVITY_MAIN_STORY = 1; + GENERAL_ACTIVITY_EXTRA_STORY = 2; + GENERAL_ACTIVITY_ENDLESS = 3; + GENERAL_ACTIVITY_SEALED = 4; + GENERAL_ACTIVITY_SIN_DEMON_EX = 5; + GENERAL_ACTIVITY_WORLD_BOSS = 6; + GENERAL_ACTIVITY_OPENWORLD_NORMAL = 7; + GENERAL_ACTIVITY_RAID = 8; + GENERAL_ACTIVITY_NORMAL_ACTIVITY = 9; + GENERAL_ACTIVITY_SELAED_MODE = 12; + GENERAL_ACTIVITY_ARMADA_MATRIX = 13; + GENERAL_ACTIVITY_DUNGEONS = 15; + GENERAL_ACTIVITY_OPENWORLD_ACTIVITY_BOSS = 17; + GENERAL_ACTIVITY_OPENWORLD_ACTIVITY_ENDLESS = 18; + GENERAL_ACTIVITY_CAMPAIGN = 19; + GENERAL_ACTIVITY_RPG_TALE = 20; + GENERAL_ACTIVITY_MONOPOLY = 21; + GENERAL_ACTIVITY_GARDEN = 22; + GENERAL_ACTIVITY_SANCTUARY = 23; + GENERAL_ACTIVITY_ELITE_STAGE = 24; + GENERAL_ACTIVITY_OPENWORLD_AVATAR = 26; + GENERAL_ACTIVITY_GOD_WAR = 27; + GENERAL_ACTIVITY_OPENWORLD_CHAPTER = 28; + GENERAL_ACTIVITY_TUTORIAL_ENTRY = 29; + GENERAL_ACTIVITY_OPENWORLD_HUNT_ACTIVITY = 30; + GENERAL_ACTIVITY_AI_CYBER = 31; + GENERAL_ACTIVITY_MAIN_STORY_OW_STAGE = 32; + GENERAL_ACTIVITY_MIRAGE = 33; + GENERAL_ACTIVITY_FARM = 34; + GENERAL_ACTIVITY_MAIN_STORY_ACTIVITY = 35; + GENERAL_ACTIVITY_RAID_REPLACE = 36; + GENERAL_ACTIVITY_FUTARI_BATTLE = 37; + GENERAL_ACTIVITY_RE_ACTIVITY = 38; + GENERAL_ACTIVITY_UNIVERAL = 99; + GENERAL_ACTIVITY_PUSH_TOWER = 100; + GENERAL_ACTIVITY_STAGE = 102; + GENERAL_ACTIVITY_MASTER_PUPIL = 104; + GENERAL_ACTIVITY_TOWER_RAID = 105; + GENERAL_ACTIVITY_QUANTUM_ENDLESS = 108; + GENERAL_ACTIVITY_THEME_WANTED = 109; + GENERAL_ACTIVITY_ENDLESS_SINGLE = 110; + GENERAL_ACTIVITY_GLOBAL_WAR = 112; + GENERAL_ACTIVITY_NEWBIE = 114; + GENERAL_ACTIVITY_NINJA = 115; + GENERAL_ACTIVITY_ARMADA_BOSS = 116; + GENERAL_ACTIVITY_CRISIS_MODE = 120; + GENERAL_ACTIVITY_SCHEDULED_MAP_SITE = 121; + GENERAL_ACTIVITY_SLG = 122; + GENERAL_ACTIVITY_BOSS_CHALLENGE = 123; + GENERAL_ACTIVITY_FRONT_ENDLESS = 124; + GENERAL_ACTIVITY_WAVE_RUSH = 125; + GENERAL_ACTIVITY_THEME_TOWER = 126; + GENERAL_ACTIVITY_MARS_CHAPTER_ENTRY = 127; + GENERAL_ACTIVITY_PJMS_ACTIVITY_PANEL = 128; + GENERAL_ACTIVITY_SIMPLIFIED_GOD_WAR = 129; + GENERAL_ACTIVITY_RESIDENT_ACTIVITY = 130; +} + +enum GeneralActivityScheduledMapSiteType { + GENERAL_ACTIVITY_SCHEDULED_MAP_SITE_TYPE_NONE = 0; + GENERAL_ACTIVITY_SCHEDULED_MAP_SITE_DAILY_RAID = 1; + GENERAL_ACTIVITY_SCHEDULED_MAP_SITE_MINI_SKY_FIRE = 2; + GENERAL_ACTIVITY_SCHEDULED_MAP_SITE_TWO_PLUS_TWO_PVE = 3; + GENERAL_ACTIVITY_SCHEDULED_MAP_SITE_BOSS_RUSH = 4; + GENERAL_ACTIVITY_SCHEDULED_MAP_SITE_CHAPTER_OW = 6; +} + +enum GeneralStageActivityScoreType { + GENERAL_STAGE_ACTIVITY_SCORE_TYPE_NONE = 0; + GENERAL_ACTIVITY_SCORE_ACCUM = 1; + GENERAL_ACTIVITY_SCORE_TOP = 2; + GENERAL_ACTIVITY_SCORE_SINGLE_TOP = 3; + GENERAL_ACTIVITY_SCORE_MATERIAL_NUM = 4; +} + +enum GeneralActivityStageExchangeType { + GENERAL_ACTIVITY_EXCHANGE_TYPE_NONE = 0; + GENERAL_ACTIVITY_EXCHANGE_TYPE_TIMES = 1; + GENERAL_ACTIVITY_EXCHANGE_TYPE_RESET = 2; +} + +enum GeneralActivityScoreRewardType { + GENERAL_ACTIVITY_SCORE_REWARD_TYPE_NONE = 0; + GENERAL_ACTIVITY_SCORE_REWARD_AUTO = 1; + GENERAL_ACTIVITY_SCORE_REWARD_MANUAL = 2; +} + +enum StorySweepGroupType { + STORY_SWEEP_GROUP_TYPE_NONE = 0; + STORY_SWEEP_GROUP_AVATAR_FRAGMENT = 1; + STORY_SWEEP_GROUP_MATERIAL = 2; + STORY_SWEEP_GROUP_ACTIVITY = 3; + STORY_SWEEP_GROUP_MATERIAL_NEW = 4; +} + +enum PhoneEventStatus { + PHONE_EVENT_NONE = 0; + PHONE_EVENT_FINISH = 1; + PHONE_EVENT_REFUSE = 2; + PHONE_EVENT_HOLD = 3; + PHONE_EVENT_OVER = 4; +} + +enum EventType { + EVENT_TYPE_NONE = 0; + EVENT_TYPE_ISLAND = 1; + EVENT_TYPE_CITY_ACTIVITY = 2; +} + +enum ArmadaImpeachOperation { + ARMADA_IMPEACH_OPERATION_NONE = 0; + START_IMPEACH = 1; + END_IMPEACH = 2; + CANCEL_IMPEACH = 3; +} + +enum ArmadaImpeachStatus { + ARMADA_IMPEACH_STATUS_NORMAL = 0; + ARMADA_IMPEACH_STATUS_IMPEACH = 1; + ARMADA_IMPEACH_STATUS_ELECTION = 2; +} + +enum LoginActivityRewardType { + LOGIN_ACTIVITY_REWARD_NORMAL = 0; + LOGIN_ACTIVITY_REWARD_BONUS = 1; +} + +enum CheckConditionEnum { + CHECK_CONDITION_ENUM_NONE = 0; + CHECK_CONDITION_WEAPON = 13; + CHECK_CONDITION_STIGMATA_SLOT_1 = 14; + CHECK_CONDITION_STIGMATA_SLOT_2 = 15; + CHECK_CONDITION_STIGMATA_SLOT_3 = 16; +} + +enum GobackLoginRewardType { + GOBACK_LOGIN_REWARD_TYPE_NONE = 0; + GOBACK_LOGIN_REWARD_COMMON = 1; + GOBACK_LOGIN_REWARD_BONUS = 2; +} + +enum GobackNewbieLevelSourceType { + GOBACK_NEWBIE_LEVEL_SOURCE_GOBACK_NEWBIE_LEVEL = 0; + GOBACK_NEWBIE_LEVEL_SOURCE_GOBACK_LEVEL = 1; +} + +enum CycleMissionProgressType { + CYCLE_MISSION_PROGRESS_TYPE_NONE = 0; + CYCLE_MISSION_PROGRESS_ALL = 1; + CYCLE_MISSION_PROGRESS_ONE_BY_ONE = 2; +} + +enum WikiType { + WIKI_TYPE_OVERVIEW = 0; + WIKI_TYPE_WEAPON = 1; + WIKI_TYPE_STIGMATA = 2; + WIKI_TYPE_FURNITURE = 3; + WIKI_TYPE_CG = 4; + WIKI_TYPE_MEDAL = 5; + WIKI_TYPE_ACHIEVEMENT = 6; + WIKI_TYPE_DRESS = 7; + WIKI_TYPE_EMOJI = 8; + WIKI_TYPE_AVATAR = 9; + WIKI_TYPE_ACTIVITY = 10; + WIKI_TYPE_MONSTER = 11; +} + +enum AchievementType { + ACHIEVE_TYPE_NONE = 0; + ACHIEVE_TYPE_CAPTAIN = 1; + ACHIEVE_TYPE_DEVELOP = 2; + ACHIEVE_TYPE_SOCIAL = 3; + ACHIEVE_TYPE_STAGE = 4; + ACHIEVE_TYPE_ISLAND = 5; + ACHIEVE_TYPE_CHALLENGE = 6; + ACHIEVE_TYPE_DORM = 7; + ACHIEVE_TYPE_EXTRA_STORY = 8; +} + +enum PhotoType { + PHOTO_TYPE_ALL = 0; + PHOTO_TYPE_CITY_ACTIVITY = 1; + PHOTO_TYPE_ANNIVERSARY = 2; + PHOTO_TYPE_RPG_TALE = 3; + PHOTO_TYPE_FARM = 4; + PHOTO_TYPE_KINGDOM_WAR = 5; + PHOTO_TYPE_DLC = 6; + PHOTO_TYPE_GLOBAL_WAR = 7; + PHOTO_TYPE_NINJA = 8; + PHOTO_TYPE_CHAPTER_HIDDEN = 9; + PHOTO_TYPE_OW_AVATAR = 10; + PHOTO_TYPE_SLG = 11; + PHOTO_TYPE_GOD_WAR = 12; + PHOTO_TYPE_OPENWORLD_CHAPTER = 13; + PHOTO_TYPE_SC_DLC = 14; + PHOTO_TYPE_OW_HUNT = 15; + PHOTO_TYPE_GLOBAL_EXPLORE = 16; + PHOTO_TYPE_MARS_CHAPTER = 17; +} + +enum PhotoUnlockType { + PHOTO_UNLOCK_TYPE_NONE = 0; + PHOTO_UNLOCK_FINISH_OW_EVENT = 1; + PHOTO_UNLOCK_KILL_MONSTER = 2; + PHOTO_UNLOCK_FINISH_OW_STORY = 3; + PHOTO_UNLOCK_FINISH_DLC_DIALOG = 4; + PHOTO_UNLOCK_GOD_WAR = 5; + PHOTO_UNLOCK_VISUAL_NOVEL = 6; + PHOTO_UNLOCK_MATERIAL = 7; + PHOTO_UNLOCK_FINISH_PJMS_STORY = 8; +} + +enum MpStageMatchType { + MP_STAGE_MATCH_TYPE_NONE = 0; + CREATE_ENTER = 1; + MATCH_ENTER = 2; +} + +enum MpStageMemberLimitType { + MP_MEMBER_LIMIT_NONE = 0; + MP_MEMBER_LIMIT_MASTER_ONLY = 1; + MP_MEMBER_LIMIT_PUPIL_ONLY = 2; + MP_MEMBER_LIMIT_ARMADA_ONLY = 3; + MP_MEMBER_LIMIT_NEWBIE_ONLY = 4; +} + +enum DisplayCurrencyType { + DISPLAY_CURRENCY_TYPE_NONE = 0; + DISPLAY_CURRENCY_TYPE_SCOIN = 1; + DISPLAY_CURRENCY_TYPE_STAMINA = 2; + DISPLAY_CURRENCY_TYPE_HCOIN = 3; + DISPLAY_CURRENCY_TYPE_PURPLE_JADE = 5; + DISPLAY_CURRENCY_TYPE_MCOIN = 6; + DISPLAY_CURRENCY_TYPE_PLAIN_DRESS_TICKET = 7; + DISPLAY_CURRENCY_TYPE_LUXURY_DRESS_TICKET = 8; + DISPLAY_CURRENCY_TYPE_VITALITY = 12; + DISPLAY_CURRENCY_TYPE_ETHER_PHLOGISTON = 13; + DISPLAY_CURRENCY_TYPE_BRILLIANT_PURE_CRYSTAL = 14; + DISPLAY_CURRENCY_TYPE_HONOR_MEDAL = 15; +} + +enum SellCurrencyType { + SELL_CURRENCY_TYPE_NONE = 0; + SELL_CURRENCY_TYPE_SCOIN = 1; + SELL_CURRENCY_TYPE_PURPLE_JADE = 5; +} + +enum TowerRaidRating { + TOWER_RAID_RATING_NONE = 0; + TOWER_RAID_RATING_DEGRADE = 1; + TOWER_RAID_RATING_KEEP = 2; + TOWER_RAID_RATING_UPGRADE = 3; +} + +enum ChatgroupPosition { + CHATGROUP_POSITION_NONE = 0; + CHATGROUP_POSITION_CREATER = 1; + CHATGROUP_POSITION_MEMBER = 2; +} + +enum WorldChatroomType { + WORLD_CHATROOM_TYPE_NONE = 0; + WORLD_CHATROOM_TYPE_NORMAL = 1; + WORLD_CHATROOM_TYPE_ACTIVITY = 2; +} + +enum ActivityWorldChatroomType { + ACTIVITY_WORLD_CHATROOM_TYPE_NONE = 0; + ACTIVITY_WORLD_CHATROOM_TYPE_GLOBAL_WAR = 2; + ACTIVITY_WORLD_CHATROOM_TYPE_CHATWORLD_BEAST = 3; + ACTIVITY_WORLD_CHATROOM_TYPE_SLG = 4; + ACTIVITY_WORLD_CHATROOM_TYPE_GLOBAL_EXPLORE = 5; +} + +enum FrameTimeType { + FRAME_TIME_FOREVER = 0; + FRAME_TIME_LIMIT = 1; +} + +enum AvatarTeamType { + AVATAR_TEAM_TYPE_NONE = 0; + AVATAR_TEAM_NORMAL = 1; + AVATAR_TEAM_VIRTUAL = 2; + AVATAR_TEAM_DLC = 3; + AVATAR_TEAM_SC_DLC = 4; +} + +enum FeatureSwitchType { + FEATURE_SWITCH_NONE = 0; + FEATURE_SWITCH_STAGE = 1; + FEATURE_SWITCH_SHOP = 2; + FEATURE_SWITCH_SHOP_GOODS_POOL = 3; + FEATURE_SWITCH_ACTIVITY_PANEL = 4; + FEATURE_SWITCH_MISSION_HIDE = 5; + FEATURE_SWITCH_ITEM_USE = 6; + FEATURE_SWITCH_MATERIAL_HIDE = 7; + FEATURE_SWITCH_MISSION_REWARD = 8; + FEATURE_SWITCH_MAIL_ATTACHMENT_TAKE = 9; + FEATURE_SWITCH_DANMAKU = 10; + FEATURE_SWITCH_EX_BOSS = 11; + FEATURE_SWITCH_SHOP_GOODS_POOL_HIDE = 12; + FEATURE_SWITCH_CHAT = 13; + FEATURE_SWITCH_HEXIE = 14; + FEATURE_SWITCH_MCOIN_BUY = 15; + FEATURE_SWITCH_SHOP_GOODS = 16; + FEATURE_SWITCH_CMD_CD = 17; + FEATURE_SWITCH_ENDLESS = 18; + FEATURE_SWITCH_EX_BOSS_ENTER = 19; + FEATURE_SWITCH_GACHA = 20; + FEATURE_SWITCH_AVATAR_FRAGMENT = 22; + FEATURE_SWITCH_ELF_FRAGMENT = 23; + FEATURE_SWITCH_EQUIP_FORGE = 24; + FEATURE_SWITCH_BATTLE_PASS = 25; + FEATURE_SWITCH_GACHA_COIN_TRANSFER = 26; + FEATURE_SWITCH_RPG_TALE_SITE = 27; + FEATURE_SWITCH_ACTIVITY = 28; + FEATURE_SWITCH_THEME_WANTED = 29; + FEATURE_SWITCH_SNS_REQUEST = 30; + FEATURE_SWITCH_GOD_WAR = 31; + FEATURE_SWITCH_SERVER_STOP_GACHA_MSG = 32; + FEATURE_SWITCH_REFINE_RUNE = 34; + FEATURE_SWITCH_CHANGE_FRIEND_REMARK = 35; + FEATURE_SWITCH_GACHA_DAILY_TIMES_LIMIT = 36; + FEATURE_SWITCH_INVITE_ACTIVITY = 37; + FEATURE_SWITCH_QCANDY_ACTIVITY = 38; + FEATURE_SWITCH_GLOBAL_EXPLORE = 39; + FEATURE_SWITCH_RPG_TALE_ACTIVITY = 40; + FEATURE_SWITCH_RANK = 41; + FEATURE_SWITCH_CHAPTER_BW_WORLD = 42; + FEATURE_SWITCH_ULTRA_ENDLESS_FORCE_SYNC_LOCAL_SCORE = 43; + FEATURE_SWITCH_EX_BOSS_LOCK_AVATAR = 44; + FEATURE_SWITCH_CHAPTER_ARK = 45; + FEATURE_SWITCH_RAID_REPLACE = 46; + FEATURE_SWITCH_PJMS_ENTER_WORLD = 47; + FEATURE_SWITCH_PJMS_CHAPTER_QUEST = 48; + FEATURE_SWITCH_PJMS_ACTIVITY = 49; + FEATURE_SWITCH_PJMS_FIRST_ENTER = 50; + FEATURE_SWITCH_EQUIPMENT_QUICK_LEVEL_UP = 51; + FEATURE_SWITCH_SIMPLIFIED_GOD_WAR = 52; + FEATURE_SWITCH_DEVIL_AUTO_CHESS = 53; + FEATURE_SWITCH_TILE = 54; + FEATURE_SWITCH_FUTARI_BATTLE = 55; + FEATURE_SWITCH_RPG_TALE_AREA = 56; + FEATURE_SWITCH_PJMS_CHAPTER_KNIGHT_RICH_MAN = 57; + FEATURE_SWITCH_BATTLE_PASS_UPGRADE = 58; + FEATURE_SWITCH_CROSS_ROOM = 59; + FEATURE_SWITCH_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE = 60; +} + +enum FeatureSwitchOpType { + FEATURE_SWITCH_OP_NONE = 0; + FEATURE_SWITCH_OP_ADD = 1; + FEATURE_SWITCH_OP_DEL = 2; +} + +enum DialogType { + DIALOG_TYPE_NONE = 0; + DIALOG_TYPE_CONTENT = 1; + DIALOG_TYPE_SELECT = 2; + DIALOG_TYPE_HIDE = 3; +} + +enum DeviceType { + DEVICE_TYPE_NONE = 0; + DEVICE_TYPE_ANDROID = 1; + DEVICE_TYPE_IOS = 2; + DEVICE_TYPE_PC = 3; +} + +enum UserType { + USER_TYPE_NONE = 0; + USER_TYPE_ANDROID = 1; + USER_TYPE_IOS = 2; + USER_TYPE_PC = 3; + USER_TYPE_CHANNEL = 4; + USER_TYPE_WEGAME = 5; + USER_TYPE_STEAM = 6; +} + +enum BonusThemeType { + BONUS_THEME_TYPE_NONE = 0; + BONUS_THEME_TYPE_BONUS_SCORE_RATIO = 1; + BONUS_THEME_TYPE_BONUS_SCORE_FIXED = 2; + BONUS_THEME_TYPE_BONUS_DROP_PROB = 3; + BONUS_THEME_TYPE_BONUS_DROP_FIXED = 4; +} + +enum FeatureLimitLevel { + LIMIT_LEVEL_ALL = 0; + LIMIT_LEVEL_MAIN = 100; + LIMIT_LEVEL_CHAT = 200; +} + +enum RoomMode { + ROOM_MODE_INVALID = 0; + ROOM_MODE_QAVATAR_BATTLE = 3; + ROOM_MODE_QCANDY_BATTLE = 4; + ROOM_MODE_PRPG = 5; + ROOM_MODE_KIANA_AUTO_CHESS = 6; + ROOM_MODE_GROUP_PHOTO = 7; +} + +enum BattleMode { + BATTLE_MODE_NONE = 0; + BATTLE_MODE_QAVATAR_BATTLE = 1; +} + +enum CommonChatMsgType { + COMMON_CHAT_MSG_NONE = 0; + COMMON_CHAT_MSG_TEAM = 1; + COMMON_CHAT_MSG_CAMPAIGN = 2; + COMMON_CHAT_MSG_ROOM = 3; + COMMON_CHAT_MSG_PRIVATE = 4; + COMMON_CHAT_MSG_CAHT_GROUP = 5; + COMMON_CHAT_MSG_WORLD_CHAT = 6; + COMMON_CHAT_MSG_ARMADA_CHAT = 7; +} + +enum OpenworldStageType { + OPENWORLD_STAGE_TYPE_NONE = 0; + OPENWORLD_STAGE_TYPE_MAINLINE = 1; + OPENWORLD_STAGE_TYPE_EXPORE = 2; +} + +enum SecurityEngineCheckType { + SECURITY_ENGINE_CHECK_NONE = 0; + SECURITY_ENGINE_CHECK_LOGIN = 1; + SECURITY_ENGINE_CHECK_STAGE = 2; +} + +enum DropLimitType { + DROP_LIMIT_TYPE_NONE = 0; + DROP_LIMIT_STAGE = 1; + DROP_LIMIT_DLC = 2; + DROP_LIMIT_GOD_WAR = 3; + DROP_LIMIT_SC_DLC = 4; + DROP_LIMIT_CHAPTER_OW = 5; + DROP_LIMIT_CHAPTER_OW_MOON_TOWER = 6; + DROP_LIMIT_QCANDY = 7; +} + +enum DropLimitRefreshType { + DROP_LIMIT_REFRESH_TYPE_NONE = 0; + DROP_LIMIT_REFRESH_WEEK_DAY = 1; + DROP_LIMIT_REFRESH_MONTH = 2; +} + +enum DanmakuChannelType { + DANMAKU_CHANNEL_NONE = 0; + DANMAKU_CHANNEL_NORMAL = 1; +} + +enum StageTagRestrictType { + STAGE_TAG_RESTRICT_NONE = 0; + STAGE_TAG_RESTRICT_TAG = 1; + STAGE_TAG_RESTRICT_NO_TAG = 2; + STAGE_TAG_RESTRICT_ATTRIBUTE = 3; + STAGE_TAG_RESTRICT_NO_ATTRIBUTE = 4; + STAGE_TAG_RESTRICT_ROLE = 5; + STAGE_TAG_RESTRICT_NO_ROLE = 6; +} + +enum ExaminationTagType { + EXAMINATION_TYPE_NONE = 0; + EXAMINATION_TYPE_AVATAR = 1; + EXAMINATION_TYPE_ELF = 2; + EXAMINATION_TYPE_MONSTER = 3; + EXAMINATION_TYPE_COMMON = 4; +} + +enum WarshipItemType { + WARSHIP_ITEM_TYPE_NONE = 0; + WARSHIP_ITEM_TYPE_WARSHIP = 1; + WARSHIP_ITEM_TYPE_BGM = 2; +} + +enum WarshipBgmPlayMode { + WARSHIP_BGM_PLAY_MODE_RANDOM = 0; + WARSHIP_BGM_PLAY_MODE_SINGLE = 1; +} + +enum LoginRewardTriggerType { + LOGIN_REWARD_TRIGGER_TYPE_NONE = 0; + LOGIN_REWARD_TRIGGER_TYPE_ONCE = 1; + LOGIN_REWARD_TRIGGER_TYPE_ALWAYS = 2; +} + +enum OffLineTagType { + OFFLINE_TAG_TYPE_NORMAL = 0; + OFFLINE_TAG_TYPE_SMURF = 1; +} + +enum AuditOpType { + AUDIT_OP_NONE = 0; + AUDIT_OP_CHANGE_NICKNAME = 1; + AUDIT_OP_CHANGE_DESC = 2; + AUDIT_OP_CHANGE_ARMADA_NAME = 3; + AUDIT_OP_CHANGE_ARMADA_BULLETIN = 4; + AUDIT_OP_CREATE_CHATGROUP = 5; + AUDIT_OP_CHANGE_CHATGROUP = 6; + AUDIT_OP_CHANGE_DORM = 7; + AUDIT_OP_CHANGE_MASTER_PUPIL_CARD = 8; +} + +enum BuffEffectUseType { + BUFF_EFFECT_USE_TYPE_NONE = 0; + BUFF_EFFECT_USE_STAGE = 1; + BUFF_EFFECT_USE_MISSION = 2; + BUFF_EFFECT_USE_VIRTUAL_EQUIPMENT = 3; +} + +enum ChapterGroupSiteFinishWay { + CHAPTER_GROUP_SITE_FINISH_WAY_INVALID = 0; + CHAPTER_GROUP_SITE_FINISH_WAY_PASS_STAGE_AND = 1; + CHAPTER_GROUP_SITE_FINISH_WAY_PASS_STAGE_OR = 2; + CHAPTER_GROUP_SITE_FINISH_WAY_FINISH_MISSION_AND = 3; + CHAPTER_GROUP_SITE_FINISH_WAY_FINISH_MISSION_OR = 4; + CHAPTER_GROUP_SITE_FINISH_WAY_TIME_ARRIVED = 5; + CHAPTER_GROUP_SITE_FINISH_WAY_FINISH_STORY_AND = 6; + CHAPTER_GROUP_SITE_FINISH_WAY_FINISH_STORY_OR = 7; +} + +enum InviteeActivityType { + INVITEE_ACTIVITY_TYPE_NONE = 0; + INVITEE_ACTIVITY_TYPE_NEWBIE = 1; + INVITEE_ACTIVITY_TYPE_GOBACK = 2; +} + +enum InviterActivityType { + INVITER_ACTIVITY_TYPE_NONE = 0; + INVITER_ACTIVITY_TYPE_NORMAL = 1; + INVITER_ACTIVITY_TYPE_LIMIT_TIME = 2; +} + +enum BulletinType { + BULLETIN_TYPE_EVENT = 0; + BULLETIN_TYPE_SYSTEM = 1; + BULLETIN_TYPE_BANNER = 2; + BULLETIN_TYPE_ACTIVITY_PAGE = 3; + BULLETIN_TYPE_LOGIN_HINT = 5; + BULLETIN_TYPE_VERSION = 6; + BULLETIN_TYPE_MALL_BANNER = 7; + BULLETIN_TYPE_BP_MALL_BANNER = 8; + BULLETIN_TYPE_MAIN_PAGE_PHONE = 9; + BULLETIN_TYPE_RETURNEE_MALL_BANNER = 10; + BULLETIN_TYPE_ACTIVITY_GIFT = 11; + BULLETIN_TYPE_MALL_RECHARGE_SUB_TAB_BANNER = 12; + BULLETIN_TYPE_MALL_BUNDLE_COIN_SUB_TAB_BANNER = 13; + BULLETIN_TYPE_RETURNEE_MALL_BANNER_V2 = 14; + BULLETIN_TYPE_RETURNEE_MALL_BANNER_V3 = 15; + BULLETIN_TYPE_PLACEHOLDER_01 = 16; + BULLETIN_TYPE_PLACEHOLDER_02 = 17; + BULLETIN_TYPE_PLACEHOLDER_03 = 18; + BULLETIN_TYPE_PLACEHOLDER_04 = 19; + BULLETIN_TYPE_PLACEHOLDER_05 = 20; +} + +enum BulletinNotShownFlagType { + BULLETIN_NOT_SHOWN_FLAG_TYPE_NONE = 0; + BULLETIN_NOT_SHOWN_FLAG_TYPE_FINISH_MISSION_AND = 1; + BULLETIN_NOT_SHOWN_FLAG_TYPE_FINISH_MISSION_OR = 2; + BULLETIN_NOT_SHOWN_FLAG_TYPE_HAS_GOT_ITEM_AND = 3; + BULLETIN_NOT_SHOWN_FLAG_TYPE_HAS_GOT_ITEM_OR = 4; +} + +enum SnsShowType { + SNS_NONE = 0; + SNS_MAIN = 1; + SNS_WAR_HISTORY = 2; + SNS_WIKI = 3; + SNS_MSG_CARD = 4; +} + +enum SnsShowPriviledgeState { + SNS_SHOW_NONE = 0; + SNS_SHOW_OPEN_TO_PUBLIC = 1; + SNS_SHOW_OPEN_TO_FRIENDS = 2; + SNS_SHOW_OPEN_TO_SELF = 3; +} + +enum AfterProcessFuncType { + AFTER_PROCESS_FUNC_TYPE_NONE = 0; + AFTER_PROCESS_FUNC_PJMS_RUN_DISPATCH_EVENT = 1; + AFTER_PROCESS_FUNC_PJMS_CLEAR_WAIT_DELETE_STORY = 2; + AFTER_PROCESS_FUNC_PJMS_SYNC_CUR_WORLD = 3; + AFTER_PROCESS_FUNC_PJMS_SYNC_STORY_STATUS = 4; + AFTER_PROCESS_FUNC_PJMS_SYNC_CHAPTER_DELAY_DATA = 5; + AFTER_PROCESS_FUNC_PJMS_SYNC_CONDITION_DATA = 6; +} + +enum PjmsAuxiliaryUnitLockStatus { + PJMS_AUXILIARY_UNIT_LOCK_STATUS_UNLOCKED = 0; + PJMS_AUXILIARY_UNIT_LOCK_STATUS_LOCKED = 1; +} + +enum ResidentActivityType { + RESIDENT_ACTIVITY_TYPE_NONE = 0; + RESIDENT_ACTIVITY_TYPE_RPG = 1; +} + +enum ResidentActivityInitialType { + RESIDENT_ACTIVITY_INITIAL_TYPE_NONE = 0; + RESIDENT_ACTIVITY_INITIAL_TYPE_STAGE = 1; + RESIDENT_ACTIVITY_INITIAL_TYPE_MISSION = 2; + RESIDENT_ACTIVITY_INITIAL_TYPE_STORY = 3; +} + +message Mission { + uint32 _mission_id = 1; + MissionStatus _status = 2; + uint32 _progress = 3; + uint32 _begin_time = 4; + uint32 _end_time = 5; + uint32 _priority = 6; + uint32 _finished_times = 7; + uint32 _finished_times_limit = 8; + uint32 _cycle_id = 9; +} + +message WeekDayActivity { + uint32 _activity_id = 1; + repeated uint32 _stage_id_list = 2; + uint32 _enter_times = 3; + uint32 _begin_time = 4; + uint32 _end_time = 5; + uint32 _activity_end_time = 6; + uint32 _exchange_times = 7; + repeated uint32 _challenge_reward_granted_list = 11; + uint32 _activity_begin_time = 12; + uint32 _force_open_time = 13; + uint32 _schedule_id = 17; +} + +enum MissionStatus { + MISSION_STATUS_NONE = 0; + MISSION_NOT_BEGIN = 1; + MISSION_DOING = 2; + MISSION_FINISH = 3; + MISSION_TIMEOUT = 4; + MISSION_CLOSE = 5; + MISSION_WAIT_DELETE = 6; +} + +message ScratchTicketPoint { + uint32 x_pos = 1; + uint32 y_pos = 2; + uint32 ticket_item_id = 3; +} + +// CmdID: 4150 +message GetScratchTicketReq { + uint32 activity_id = 1; +} + +// CmdID: 4151 +message GetScratchTicketRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + } + + GetScratchTicketRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 plate_id = 3; + repeated ScratchTicketPoint point_list = 4; + uint32 reset_times = 5; + uint32 round = 6; + uint32 core_plate_end_round = 7; + bool has_got_core_plate = 8; +} + +// CmdID: 4152 +message ScratchReq { + uint32 x_pos = 1; + uint32 y_pos = 2; + uint32 activity_id = 3; +} + +// CmdID: 4153 +message ScratchRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + POS_ERROR = 3; + POS_REPEAT = 4; + MATERIAL_LACK = 5; + } + + ScratchRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 4154 +message ResetScratchTicketPlateReq { + uint32 activity_id = 1; +} + +// CmdID: 4155 +message ResetScratchTicketPlateRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + TIMES_LIMIT = 3; + MATERIAL_LACK = 4; + CORE_PLATE = 5; + ACTIVITY_LIMIT = 6; + } + + ResetScratchTicketPlateRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 4156 +message AddOnActivityRewardNotify { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + uint32 mission_id = 1; + RewardData reward_data = 2; +} + +// CmdID: 4157 +message GetBingoActivityDataReq { + uint32 activity_id = 1; +} + +message BingoCard { + enum BingoCardStatus { + CARD_STATUS_WRONG = 0; + CARD_STATUS_CORRECT = 1; + } + + uint32 card_id = 1; + BingoCard.BingoCardStatus card_status = 2; +} + +message BingoData { + uint32 bingo_id = 1; + repeated BingoCard card_list = 2; + uint32 reset_times = 3; +} + +// CmdID: 4158 +message GetBingoActivityDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetBingoActivityDataRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated BingoData bingo_data_list = 3; +} + +// CmdID: 4159 +message BingoActivityFlopCardReq { + uint32 activity_id = 1; + uint32 bingo_id = 2; + uint32 card_id = 3; +} + +// CmdID: 4160 +message BingoActivityFlopCardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + ITEMS_LACK = 3; + HAS_FINISED = 4; + HAS_FLOPED = 5; + } + + BingoActivityFlopCardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 bingo_id = 3; + uint32 card_id = 4; + repeated RewardData reward_list = 5; + repeated DropItem drop_item_list = 6; + bool is_all_finished = 7; +} + +// CmdID: 4161 +message BingoActivityResetBingoReq { + uint32 activity_id = 1; + uint32 bingo_id = 2; +} + +// CmdID: 4162 +message BingoActivityResetBingoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_TIMES = 2; + NO_COMPLETE = 3; + NOT_OPEN = 4; + ITEMS_LACK = 5; + } + + BingoActivityResetBingoRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 4163 +message GetBulletinScoreActivityReq { + uint32 activity_id = 1; +} + +message BulletinScoreActivity { + uint32 activity_id = 1; + uint32 score = 2; + repeated uint32 has_take_reward_list = 3; + repeated uint32 has_take_reward_progress_list = 4; +} + +// CmdID: 4164 +message GetBulletinScoreActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetBulletinScoreActivityRsp.Retcode retcode = 1; + repeated BulletinScoreActivity activity_list = 2; +} + +// CmdID: 4165 +message TakeBulletinScoreActivityRewardReq { + uint32 activity_id = 1; +} + +// CmdID: 4166 +message TakeBulletinScoreActivityRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKE_ALL = 2; + } + + TakeBulletinScoreActivityRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated RewardData reward_list = 3; +} + +// CmdID: 4167 +message GetContinuousRechargeActivityReq { +} + +// CmdID: 4168 +message GetContinuousRechargeActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetContinuousRechargeActivityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 progress = 3; + uint32 today_vip_point = 4; + repeated uint32 has_take_reward_progress_list = 5; + uint32 last_refresh_time = 6; +} + +// CmdID: 4169 +message TakeContinuousRechargeRewardReq { + uint32 progress = 1; +} + +// CmdID: 4170 +message TakeContinuousRechargeRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + PROGRESS_LACK = 3; + HAS_TAKE = 4; + } + + TakeContinuousRechargeRewardRsp.Retcode retcode = 1; + RewardData reward = 2; +} + +message FlopActivityCardData { + uint32 id = 1; + uint32 state = 2; + uint32 card_number = 3; +} + +message FlopActivityRewardData { + uint32 index = 1; + uint32 state = 2; +} + +message FlopActivityData { + uint32 activity_id = 1; + repeated FlopActivityCardData card_list = 2; + repeated uint32 has_take_reward_list = 3; + uint32 flop_times = 4; + uint32 cur_front_card = 5; + uint32 show_id = 6; + uint32 total_flop_times = 7; +} + +// CmdID: 4173 +message GetFlopActivityDataReq { + uint32 activity_id = 1; +} + +// CmdID: 4174 +message GetFlopActivityDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetFlopActivityDataRsp.Retcode retcode = 1; + FlopActivityData activity_data = 2; +} + +// CmdID: 4171 +message TakeFlopRewardReq { + uint32 activity_id = 1; + uint32 reward_index = 2; +} + +// CmdID: 4172 +message TakeFlopRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + LOCK = 3; + HAS_TAKE = 4; + } + + TakeFlopRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 reward_index = 3; + repeated RewardData reward_list = 4; +} + +// CmdID: 4175 +message FlopActivityFlopCardReq { + uint32 activity_id = 1; + uint32 card_id = 2; +} + +// CmdID: 4176 +message FlopActivityFlopCardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + HAS_FLOP = 3; + HAS_UNLOCK = 4; + NO_TIMES = 5; + ITEMS_LACK = 6; + } + + FlopActivityFlopCardRsp.Retcode retcode = 1; + FlopActivityData activity_data = 2; + uint32 reward_index = 3; + repeated RewardData reward_list = 4; +} + +// CmdID: 4177 +message GetLotteryActivityReq { +} + +message LotteryData { + uint32 lottery_id = 1; + repeated uint32 lottery_number = 2; + repeated uint32 reward_taken_lottery_number = 3; + uint32 draw_number_begin_time = 4; + uint32 draw_number_end_time = 5; + uint32 take_reward_begin_time = 6; + uint32 first_reward_id = 7; + string first_reward_number_str = 8; + uint32 second_reward_id = 9; + string second_reward_number_str = 10; + uint32 third_reward_id = 11; + uint32 max_draw_times = 12; + uint32 special_number = 13; +} + +// CmdID: 4178 +message GetLotteryActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetLotteryActivityRsp.Retcode retcode = 1; + uint32 cur_group_id = 2; + repeated LotteryData lottery_data_list = 3; +} + +// CmdID: 4179 +message LotteryUseBoxReq { +} + +// CmdID: 4180 +message LotteryUseBoxRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_NOT_ENOUGH = 2; + NOT_OPEN = 3; + } + + LotteryUseBoxRsp.Retcode retcode = 1; + repeated Material get_material_list = 2; +} + +// CmdID: 4181 +message LotteryDrawNumberReq { + uint32 lottery_id = 1; +} + +// CmdID: 4182 +message LotteryDrawNumberRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_NOT_ENOUGH = 2; + NOT_OPEN = 3; + TIMES_LIMIT = 4; + } + + LotteryDrawNumberRsp.Retcode retcode = 1; + uint32 lottery_id = 2; + uint32 lottery_number = 3; +} + +// CmdID: 4183 +message LotteryTakeRewardReq { + uint32 lottery_id = 1; +} + +message LotteryReward { + uint32 lottery_id = 1; + uint32 lottery_number = 2; + RewardData reward_data = 3; + uint32 reward_type = 4; +} + +// CmdID: 4184 +message LotteryTakeRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_LOTTERY_NUMBER = 2; + REWARD_TAKEN = 3; + NO_REWARD = 4; + NOT_OPEN = 5; + } + + LotteryTakeRewardRsp.Retcode retcode = 1; + repeated LotteryReward lottery_reward_list = 2; +} + +// CmdID: 4185 +message GetTowerRaidActivityReq { +} + +message TowerRaidAvatar { + uint32 avatar_id = 1; + uint32 enter_times = 2; + uint32 weapon_id = 3; + repeated uint32 stigmata_id_list = 4; +} + +message TowerRaidBossStage { + uint32 stage_id = 1; + uint32 boss_left_hp = 2; +} + +// CmdID: 4186 +message GetTowerRaidActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetTowerRaidActivityRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + uint32 activity_id = 3; + uint32 hard_level = 4; + uint32 enter_times = 5; + bool is_settled = 6; + repeated TowerRaidAvatar avatar_list = 7; + repeated TowerRaidBossStage boss_stage_list = 8; +} + +// CmdID: 4187 +message TakeTowerRaidRewardReq { +} + +// CmdID: 4188 +message TakeTowerRaidRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAVE_TAKE = 2; + NOT_FINISH = 3; + } + + TakeTowerRaidRewardRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + uint32 activity_id = 3; + uint32 hard_level = 4; + repeated RewardData reward_list = 5; + TowerRaidRating rating = 6; + repeated DropItem drop_item_list = 7; +} + +// CmdID: 4189 +message UpdateTowerRaidBossReq { + uint32 stage_id = 1; + uint32 boss_left_hp = 2; +} + +// CmdID: 4190 +message UpdateTowerRaidBossRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_BEGIN = 2; + STAGE_ERROR = 3; + } + + UpdateTowerRaidBossRsp.Retcode retcode = 1; + uint32 stage_id = 2; + uint32 boss_left_hp = 3; +} + +// CmdID: 4191 +message TowerRaidLockAvatarNotify { + repeated TowerRaidAvatar avatar_list = 1; +} + +// CmdID: 4192 +message GetLoginActivityReq { +} + +message LoginActivityData { + uint32 id = 1; + uint32 login_days = 2; + repeated uint32 has_take_days_reward_list = 3; + repeated uint32 has_take_days_bonus_reward_list = 4; + uint32 accept_time = 5; + uint32 duration_end_time = 6; +} + +// CmdID: 4193 +message GetLoginActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_BEGIN = 2; + LEVEL_LACK = 3; + } + + GetLoginActivityRsp.Retcode retcode = 1; + repeated LoginActivityData login_list = 2; +} + +// CmdID: 4194 +message TakeLoginActivityRewardReq { + uint32 id = 1; + uint32 take_days = 2; + LoginActivityRewardType reward_type = 3; +} + +// CmdID: 4195 +message TakeLoginActivityRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LEVEL_LACK = 2; + HAS_TAKE = 3; + LOGIN_DAYS_LACK = 4; + NOT_NEWBIE = 5; + DURATION_END = 6; + } + + TakeLoginActivityRewardRsp.Retcode retcode = 1; + uint32 id = 2; + uint32 take_days = 3; + repeated RewardData reward_list = 4; + LoginActivityRewardType reward_type = 5; +} + +message ChapterActivityBoss { + uint32 boss_stage_id = 1; + uint32 left_hp = 2; + uint32 cur_section_id = 3; +} + +message ChapterActivityExclusiveStage { + uint32 group_id = 1; + uint32 stage_id = 2; +} + +message ChapterActivityStage { + uint32 stage_id = 1; + uint32 max_floor = 2; + uint32 pass_times = 3; + uint32 max_score = 4; +} + +message ChapterActivity { + uint32 chapter_id = 1; + uint32 level = 2; + uint32 level_exp = 3; + repeated uint32 has_take_reward_level_list = 4; + bool is_take_daily_reward = 5; + repeated ChapterActivityBoss boss_list = 6; + uint32 player_level = 7; + uint32 daily_reward_id = 8; + repeated ChapterActivityStage stage_list = 10; +} + +// CmdID: 4200 +message GetChapterActivityDataReq { +} + +// CmdID: 4201 +message GetChapterActivityDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetChapterActivityDataRsp.Retcode retcode = 1; + repeated ChapterActivity chapter_activity_list = 3; +} + +// CmdID: 4202 +message TakeChapterActivityLevelRewardReq { + uint32 chapter_id = 1; + uint32 level = 2; + bool is_take_all = 3; +} + +// CmdID: 4203 +message TakeChapterActivityLevelRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LACK_LEVEL = 2; + HAVE_TAKE = 3; + NO_REWARD = 4; + } + + TakeChapterActivityLevelRewardRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + repeated uint32 level_list = 3; + repeated RewardData reward_list = 4; + bool is_take_all = 5; +} + +// CmdID: 4204 +message SyncChapterActivityDataNotify { + uint32 chapter_id = 1; + ChapterActivity chapter_activity = 2; +} + +// CmdID: 4386 +message ResetChapterActivityExclusiveStageReq { + uint32 chapter_id = 1; + uint32 group_id = 2; + uint32 stage_id = 3; +} + +// CmdID: 4387 +message ResetChapterActivityExclusiveStageRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + GROUP_NOT_EXIST = 2; + STAGE_NOT_EXIST = 3; + ACTIVITY_NOT_OPEN = 4; + } + + ResetChapterActivityExclusiveStageRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + uint32 group_id = 3; + uint32 stage_id = 4; +} + +// CmdID: 4388 +message ResetChapterActivityTalentReq { + uint32 chapter_id = 1; +} + +// CmdID: 4389 +message ResetChapterActivityTalentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + NOT_ALLOWED = 3; + } + + ResetChapterActivityTalentRsp.Retcode retcode = 1; + uint32 chapter_id = 2; +} + +// CmdID: 4390 +message ReportChapterActivityStageReq { + uint32 chapter_id = 1; + uint32 stage_id = 2; + uint32 floor = 3; +} + +// CmdID: 4391 +message ReportChapterActivityStageRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + STAGE_NOT_EXIST = 3; + } + + ReportChapterActivityStageRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + uint32 stage_id = 3; +} + +message MissionThemeData { + uint32 theme_id = 1; + bool is_theme_upgrade = 2; + repeated uint32 has_take_extra_reward_mission_list = 3; + bool is_has_take_all_extra_reward = 4; +} + +// CmdID: 4205 +message GetMissionThemeDataReq { + uint32 theme_id = 1; + bool is_get_all = 2; +} + +// CmdID: 4206 +message GetMissionThemeDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetMissionThemeDataRsp.Retcode retcode = 1; + uint32 theme_id = 2; + bool is_get_all = 3; + repeated MissionThemeData mission_theme_list = 4; +} + +// CmdID: 4207 +message UpgradeMissionThemeReq { + uint32 theme_id = 1; +} + +// CmdID: 4208 +message UpgradeMissionThemeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + HCOIN_LACK = 3; + MCOIN_LACK = 4; + MATERIAL_LACK = 5; + } + + UpgradeMissionThemeRsp.Retcode retcode = 1; + uint32 theme_id = 2; + RewardData reward_data = 3; +} + +// CmdID: 4209 +message TakeMissionThemeRewardReq { + uint32 theme_id = 1; + uint32 mission_id = 2; +} + +// CmdID: 4210 +message TakeMissionThemeRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MISSION_NOT_FINISH = 2; + ALREADY_TAKEN = 3; + EQUIPMENT_FULL = 4; + EQUIPMENT_MATERIAL_LIMIT = 5; + EQUIPMENT_FRAGMENT_LIMIT = 6; + } + + TakeMissionThemeRewardRsp.Retcode retcode = 1; + uint32 theme_id = 2; + uint32 mission_id = 3; + RewardData reward_data = 4; +} + +message OfflineResource { + uint32 resource_type = 1; + uint32 has_take_box_num = 2; + uint32 available_box_num = 3; +} + +// CmdID: 4211 +message GetOfflineResourceDataReq { +} + +// CmdID: 4212 +message GetOfflineResourceDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_SCHEDULE = 2; + } + + GetOfflineResourceDataRsp.Retcode retcode = 1; + uint32 cur_schedule_id = 2; + repeated OfflineResource offline_resource_list = 3; +} + +// CmdID: 4213 +message TakeOfflineResourceBoxReq { + uint32 resource_type = 1; + uint32 box_id = 2; + uint32 box_num = 3; +} + +// CmdID: 4214 +message TakeOfflineResourceBoxRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_SCHEDULE = 2; + EQUIPMENT_FULL = 3; + EQUIPMENT_MATERIAL_LIMIT = 4; + STAMINA_LACK = 5; + HCOIN_LACK = 6; + MATERIAL_LACK = 7; + BOX_LACK = 8; + } + + TakeOfflineResourceBoxRsp.Retcode retcode = 1; + repeated RewardData reward_data_list = 2; + OfflineResource offline_resource_data = 3; +} + +message OverlapGrid { + uint32 id = 1; + uint32 summon_id = 2; +} + +message OverlapActivityData { + uint32 activity_id = 1; + repeated OverlapGrid grid_list = 2; + repeated uint32 has_take_reward_id_list = 3; + uint32 overlap_id = 4; +} + +// CmdID: 4215 +message GetOverlapActivityDataReq { + uint32 activity_id = 1; +} + +// CmdID: 4216 +message GetOverlapActivityDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetOverlapActivityDataRsp.Retcode retcode = 1; + OverlapActivityData activity_data = 2; +} + +// CmdID: 4217 +message TakeOverlapActivityRewardReq { + uint32 activity_id = 1; + uint32 id = 2; +} + +// CmdID: 4218 +message TakeOverlapActivityRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + HAS_TAKEN = 3; + NOT_FINISH = 4; + } + + TakeOverlapActivityRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 id = 3; + RewardData reward_data = 4; +} + +// CmdID: 4219 +message OverlapActivitySummonReq { + uint32 activity_id = 1; +} + +// CmdID: 4220 +message OverlapActivitySummonRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_NOT_ENOUGH = 2; + NOT_OPEN = 3; + FULL = 4; + } + + OverlapActivitySummonRsp.Retcode retcode = 1; + uint32 activity_id = 2; + OverlapGrid grid = 3; + RewardData reward_data = 4; +} + +// CmdID: 4221 +message OverlapActivityMoveReq { + uint32 activity_id = 1; + uint32 from_grid_id = 2; + uint32 to_grid_id = 3; +} + +// CmdID: 4222 +message OverlapActivityMoveRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + OverlapActivityMoveRsp.Retcode retcode = 1; + uint32 activity_id = 2; + OverlapGrid from_grid = 3; + OverlapGrid to_grid = 4; +} + +message WeeklyRoutineMission { + uint32 mission_id = 1; + uint32 cur_contribution = 2; + uint32 weekly_contribution = 3; + uint32 mission_finish_times = 4; +} + +// CmdID: 4229 +message GetWeeklyRoutineActivityReq { +} + +// CmdID: 4230 +message GetWeeklyRoutineActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_SCHEDULE = 2; + } + + GetWeeklyRoutineActivityRsp.Retcode retcode = 1; + uint32 cur_schedule_id = 2; + repeated WeeklyRoutineMission weekly_routine_mission_list = 3; + repeated uint32 has_take_routine_reward_id_list = 4; + uint32 weekly_routine_contribution = 5; +} + +// CmdID: 4231 +message TakeWeeklyRoutineRewardReq { + uint32 weekly_routine_reward_id = 1; +} + +// CmdID: 4232 +message TakeWeeklyRoutineRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ROUTINE_CONTRIBUTION_LACK = 2; + HAS_TAKE = 3; + } + + TakeWeeklyRoutineRewardRsp.Retcode retcode = 1; + uint32 weekly_routine_reward_id = 2; + RewardData reward_data = 3; +} + +// CmdID: 4233 +message GetRankScheduleDataReq { +} + +message RankScheduleData { + uint32 schedule_id = 1; + uint32 type = 2; + uint32 begin_time = 3; + uint32 end_time = 4; +} + +// CmdID: 4234 +message GetRankScheduleDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetRankScheduleDataRsp.Retcode retcode = 1; + repeated RankScheduleData rank_schedule_list = 2; +} + +// CmdID: 4235 +message GetRankScheduleRankReq { + uint32 schedule_id = 1; +} + +// CmdID: 4236 +message GetRankScheduleRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetRankScheduleRankRsp.Retcode retcode = 1; + RankShowData rank_data = 3; +} + +// CmdID: 4241 +message GetSurveyDataReq { +} + +message SurveyData { + uint32 id = 1; + string url = 2; +} + +// CmdID: 4242 +message GetSurveyDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetSurveyDataRsp.Retcode retcode = 1; + repeated SurveyData survey_data_list = 2; +} + +// CmdID: 4243 +message FinishSurveyNotify { + uint32 survey_id = 1; +} + +// CmdID: 4244 +message GetThemeDataReq { +} + +message ThemeData { + uint32 theme_id = 1; + uint32 begin_time = 2; + uint32 end_time = 3; + uint32 bonus_drop_times = 4; + uint32 total_bonus_score = 5; +} + +// CmdID: 4245 +message GetThemeDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetThemeDataRsp.Retcode retcode = 1; + repeated ThemeData theme_list = 2; +} + +// CmdID: 4246 +message SyncThemeDataNotify { + ThemeData theme = 1; +} + +// CmdID: 4247 +message GrantOuterRewardNotify { + uint32 event_type = 1; + uint32 event_id = 2; + RewardData reward_data = 3; + string ticket = 4; +} + +// CmdID: 4248 +message GetNewbieActivityReq { +} + +message NewbieLevelRush { + bool is_purchased = 1; + uint32 free_reward_max_take_level = 2; + uint32 purchase_reward_max_take_level = 3; +} + +// CmdID: 4249 +message GetNewbieActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_NEWBIE = 2; + } + + GetNewbieActivityRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + uint32 end_time = 3; + NewbieLevelRush level_rush = 7; +} + +// CmdID: 4250 +message GetBbqActivityDataReq { + uint32 activity_id = 1; +} + +// CmdID: 4251 +message GetBbqActivityDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetBbqActivityDataRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 bbq_level = 3; + uint32 bbq_exp = 4; + uint32 max_reward_taken_level = 5; + uint32 can_use_bbq_count = 6; +} + +// CmdID: 4252 +message BbqActivityCookReq { + uint32 activity_id = 1; + uint32 bonus_level = 2; +} + +// CmdID: 4253 +message BbqActivityCookRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + ITEMS_LACK = 3; + } + + BbqActivityCookRsp.Retcode retcode = 1; + uint32 activity_id = 2; + RewardData reward_data = 3; + uint32 bbq_level = 4; + uint32 bbq_exp = 5; + uint32 can_use_bbq_count = 6; +} + +// CmdID: 4254 +message BbqActivityTakeLevelUpRewardReq { + uint32 activity_id = 1; +} + +// CmdID: 4255 +message BbqActivityTakeLevelUpRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NO_REWARD = 3; + } + + BbqActivityTakeLevelUpRewardRsp.Retcode retcode = 1; + repeated RewardData reward_data_list = 2; + uint32 max_reward_taken_level = 3; +} + +// CmdID: 4262 +message GetTradingCardActivityReq { +} + +// CmdID: 4263 +message GetTradingCardActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetTradingCardActivityRsp.Retcode retcode = 1; + uint32 cur_schedule_id = 2; + uint32 trade_num = 3; +} + +// CmdID: 4264 +message TakeTradingCardRewardReq { +} + +// CmdID: 4265 +message TakeTradingCardRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_JOIN_ARMADA = 3; + TRADE_NUM_LIMIT = 4; + LACK_MATERIAL = 5; + } + + TakeTradingCardRewardRsp.Retcode retcode = 1; + RewardData reward_data = 2; + uint32 trade_num = 3; +} + +message PictureStep { + uint32 step_id = 1; + uint32 choice_id = 2; +} + +// CmdID: 4266 +message GetPictureActivityReq { + uint32 activity_id = 1; +} + +// CmdID: 4267 +message GetPictureActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetPictureActivityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated PictureStep step_list = 3; + bool is_share = 4; + bool is_take_share_reward = 5; + uint32 score = 6; +} + +// CmdID: 4268 +message PictureActivityChooseReq { + uint32 activity_id = 1; + uint32 step_id = 2; + uint32 choice_id = 3; +} + +// CmdID: 4269 +message PictureActivityChooseRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + HAS_CHOOSE = 3; + SCORE_LACK = 4; + PRE_NOT_CHOOSE = 5; + } + + PictureActivityChooseRsp.Retcode retcode = 1; + RewardData reward = 2; + PictureStep step = 3; +} + +// CmdID: 4270 +message PictureActivityShareReq { + uint32 activity_id = 1; + bool is_take_reward = 2; +} + +// CmdID: 4271 +message PictureActivityShareRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + HAS_TAKE = 3; + NOT_SHARE = 4; + NOT_FINISH = 5; + } + + PictureActivityShareRsp.Retcode retcode = 1; + RewardData reward = 2; +} + +// CmdID: 4272 +message SyncPictureActivityScoreNotify { + uint32 activity_id = 1; + uint32 score = 2; +} + +message JigsawBlockData { + uint32 block_id = 1; + uint32 piece_id = 2; +} + +message JigsawData { + uint32 jigsaw_id = 1; + repeated JigsawBlockData block_list = 2; + repeated uint32 waiting_piece_id_list = 3; + repeated uint32 taken_reward_group_id_list = 4; + bool is_finish_reward_taken = 5; + bool is_finished = 6; +} + +// CmdID: 4273 +message GetJigsawActivityReq { + uint32 activity_id = 1; +} + +// CmdID: 4274 +message GetJigsawActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetJigsawActivityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated JigsawData jigsaw_list = 3; +} + +// CmdID: 4275 +message JigsawExchangePieceReq { + uint32 activity_id = 1; + uint32 jigsaw_id = 2; +} + +// CmdID: 4276 +message JigsawExchangePieceRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + JIGSAW_NOT_BEGIN = 3; + PRE_JIGSAW_NOT_FINISHED = 4; + ITEMS_LACK = 5; + NO_PIECE = 6; + } + + JigsawExchangePieceRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 jigsaw_id = 3; +} + +// CmdID: 4277 +message JigsawMoveWaitingPieceReq { + uint32 activity_id = 1; + uint32 jigsaw_id = 2; + uint32 target_x = 3; + uint32 target_y = 4; +} + +// CmdID: 4278 +message JigsawMoveWaitingPieceRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + JIGSAW_NOT_BEGIN = 3; + PRE_JIGSAW_NOT_FINISHED = 4; + NO_WAITING_PIECE = 5; + OUT_OF_RANGE = 6; + BLOCK_LOCKED = 7; + } + + JigsawMoveWaitingPieceRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 jigsaw_id = 3; +} + +// CmdID: 4279 +message JigsawMovePieceInJigsawAreaReq { + uint32 activity_id = 1; + uint32 jigsaw_id = 2; + uint32 source_x = 3; + uint32 source_y = 4; + uint32 target_x = 5; + uint32 target_y = 6; +} + +// CmdID: 4280 +message JigsawMovePieceInJigsawAreaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + JIGSAW_NOT_BEGIN = 3; + PRE_JIGSAW_NOT_FINISHED = 4; + NO_SOURCE_PIECE = 5; + OUT_OF_RANGE = 6; + LOCKED = 7; + } + + JigsawMovePieceInJigsawAreaRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 jigsaw_id = 3; +} + +// CmdID: 4281 +message JigsawTakeGroupRewardReq { + uint32 activity_id = 1; + uint32 jigsaw_id = 2; + uint32 group_id = 3; +} + +// CmdID: 4282 +message JigsawTakeGroupRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + JIGSAW_NOT_BEGIN = 3; + PRE_JIGSAW_NOT_FINISHED = 4; + NOT_FINISHED = 5; + HAS_TAKEN = 6; + } + + JigsawTakeGroupRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 jigsaw_id = 3; + uint32 group_id = 4; + RewardData reward = 5; +} + +// CmdID: 4283 +message JigsawTakeFinishRewardReq { + uint32 activity_id = 1; + uint32 jigsaw_id = 2; +} + +// CmdID: 4284 +message JigsawTakeFinishRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + JIGSAW_NOT_BEGIN = 3; + PRE_JIGSAW_NOT_FINISHED = 4; + NOT_FINISHED = 5; + HAS_TAKEN = 6; + } + + JigsawTakeFinishRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 jigsaw_id = 3; + RewardData reward = 4; +} + +message GardenSite { + uint32 site_id = 1; + uint32 crop_id = 2; + uint32 delay_begin_time = 3; +} + +message GardenCrop { + uint32 crop_id = 1; + uint32 harvest_num = 2; +} + +message GardenActivityData { + uint32 garden_id = 1; + repeated GardenSite site_list = 2; + repeated GardenCrop crop_list = 3; + uint32 daily_harvest_num = 4; + uint32 last_grow_time = 5; +} + +// CmdID: 4287 +message GetGardenActivityReq { +} + +// CmdID: 4288 +message GetGardenActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetGardenActivityRsp.Retcode retcode = 1; + GardenActivityData garden = 2; +} + +// CmdID: 4289 +message GardenHarvestReq { + repeated uint32 site_list = 1; +} + +// CmdID: 4290 +message GardenHarvestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + DAILY_HARVEST_LIMIT = 3; + } + + GardenHarvestRsp.Retcode retcode = 1; + GardenActivityData garden = 2; +} + +// CmdID: 4291 +message GardenSpeedUpWithMaterialReq { +} + +// CmdID: 4292 +message GardenSpeedUpWithMaterialRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + MATERIAL_NOT_ENOUGH = 3; + SITE_FULL = 4; + } + + GardenSpeedUpWithMaterialRsp.Retcode retcode = 1; + GardenActivityData garden = 2; +} + +// CmdID: 4293 +message GardenRefreshSiteReq { +} + +// CmdID: 4294 +message GardenRefreshSiteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GardenRefreshSiteRsp.Retcode retcode = 1; + uint32 garden_id = 2; + repeated GardenSite site_list = 3; + uint32 last_grow_time = 4; +} + +// CmdID: 4295 +message GetGardenScheduleReq { +} + +// CmdID: 4296 +message GetGardenScheduleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetGardenScheduleRsp.Retcode retcode = 1; + uint32 garden_id = 2; + uint32 begin_time = 3; + uint32 end_time = 4; + bool is_garden_opened = 5; +} + +// CmdID: 4297 +message GetDropLimitActivityReq { +} + +message DropLimitItem { + uint32 limit_id = 1; + uint32 got_num = 2; +} + +message DropLimitActivity { + uint32 activity_id = 1; + uint32 begin_time = 2; + uint32 end_time = 3; + repeated DropLimitItem drop_limit_got_num_list = 4; +} + +// CmdID: 4298 +message GetDropLimitActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetDropLimitActivityRsp.Retcode retcode = 1; + repeated DropLimitActivity drop_limit_activity_list = 2; +} + +// CmdID: 4299 +message GetLoginMissionActivityReq { +} + +message LoginMissionActivity { + uint32 id = 1; + repeated uint32 has_finished_mission_list = 2; + uint32 unlock_days = 3; + uint32 login_days = 4; +} + +// CmdID: 4300 +message GetLoginMissionActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetLoginMissionActivityRsp.Retcode retcode = 1; + repeated uint32 has_finished_activity_list = 2; + repeated LoginMissionActivity activity_list = 3; +} + +// CmdID: 4301 +message TakeLoginMissionRewardReq { + uint32 activity_id = 1; +} + +// CmdID: 4302 +message TakeLoginMissionRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_FINISHED = 2; + HAS_TAKE = 3; + } + + TakeLoginMissionRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated RewardData reward_list = 3; +} + +message SanctuaryActivityData { + uint32 activity_id = 1; + uint32 level = 2; + uint32 exp = 3; + uint32 has_take_reward_level = 4; + uint32 product_counter_time = 5; + uint32 product_storage_num = 6; + bool is_init = 7; + uint32 player_level_group_id = 8; + repeated uint32 stage_id_list = 9; + bool is_new_stage = 10; +} + +// CmdID: 4305 +message SanctuaryGetMainInfoReq { +} + +// CmdID: 4306 +message SanctuaryGetMainInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + SanctuaryGetMainInfoRsp.Retcode retcode = 1; + SanctuaryActivityData activity_data = 2; + uint32 begin_time = 3; + uint32 end_time = 4; +} + +// CmdID: 4307 +message SanctuaryTakeLevelRewardReq { +} + +// CmdID: 4308 +message SanctuaryTakeLevelRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + SanctuaryTakeLevelRewardRsp.Retcode retcode = 1; + uint32 has_take_reward_level = 2; + RewardData reward_data = 3; +} + +// CmdID: 4309 +message SanctuaryTakeProductReq { +} + +// CmdID: 4310 +message SanctuaryTakeProductRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + SanctuaryTakeProductRsp.Retcode retcode = 1; + RewardData reward_data = 2; +} + +// CmdID: 4311 +message SanctuaryStartNotify { +} + +message ActivityRewardStatisticItemData { + uint32 show_id = 1; + uint32 num = 2; +} + +message ActivityRewardStatisticData { + uint32 id = 1; + repeated ActivityRewardStatisticItemData item_data_list = 2; +} + +// CmdID: 4312 +message GetActivityRewardStatisticDataReq { + uint32 id = 1; +} + +// CmdID: 4313 +message GetActivityRewardStatisticDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetActivityRewardStatisticDataRsp.Retcode retcode = 1; + uint32 id = 2; + ActivityRewardStatisticData activity_reward_data = 3; +} + +// CmdID: 4314 +message SanctuaryStageEndNotify { + uint32 total_add_exp = 1; + uint32 bonus_add_exp = 2; + uint32 old_level = 3; + uint32 old_exp = 4; +} + +// CmdID: 4315 +message GetSlotMachineMainInfoReq { + uint32 activity_id = 1; +} + +// CmdID: 4316 +message GetSlotMachineMainInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + } + + GetSlotMachineMainInfoRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 cur_gacha_id = 3; + uint32 gacha_times = 4; + uint32 has_take_reward_progress = 5; + bool is_next_super_gacha = 6; +} + +// CmdID: 4317 +message StartSlotMachineReq { + uint32 activity_id = 1; +} + +// CmdID: 4318 +message StartSlotMachineRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + MATERIAL_LACK = 3; + } + + StartSlotMachineRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 box_item_id = 3; +} + +// CmdID: 4319 +message TakeSlotMachineProgressRewardReq { + uint32 activity_id = 1; +} + +// CmdID: 4320 +message TakeSlotMachineProgressRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + NO_REWARD = 3; + } + + TakeSlotMachineProgressRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated RewardData reward_list = 3; +} + +// CmdID: 4321 +message GetBulletinActivityMissionReq { + repeated uint32 activity_id_list = 1; +} + +message BulletinMissionGroup { + uint32 activity_id = 1; + repeated PanelMissionData mission_list = 2; +} + +// CmdID: 4322 +message GetBulletinActivityMissionRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + } + + GetBulletinActivityMissionRsp.Retcode retcode = 1; + repeated BulletinMissionGroup mission_group_list = 2; +} + +// CmdID: 4323 +message GetExaminationActivityReq { +} + +message Examination { + uint32 id = 1; + uint32 last_answer = 2; + bool is_finished = 3; + repeated uint32 answer_list = 4; + bool is_evaluated = 5; +} + +// CmdID: 4324 +message GetExaminationActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetExaminationActivityRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + uint32 cur_examination_idx = 3; + uint32 finished_round = 4; + repeated Examination examination_list = 5; + uint32 examination_stage_id = 6; +} + +// CmdID: 4325 +message FinishExaminationReq { + uint32 examination_id = 1; + uint32 answer_index = 2; +} + +// CmdID: 4326 +message FinishExaminationRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_FINISHED = 2; + NOT_CUR_EXAMINATION = 3; + } + + FinishExaminationRsp.Retcode retcode = 1; + uint32 examination_id = 2; + bool is_finished = 3; + RewardData reward_data = 4; +} + +// CmdID: 4327 +message StartNextRoundExaminationReq { +} + +// CmdID: 4328 +message StartNextRoundExaminationRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_FINISHED = 2; + } + + StartNextRoundExaminationRsp.Retcode retcode = 1; +} + +// CmdID: 4329 +message EvaluateExaminationReq { + uint32 examination_id = 1; + bool is_like = 2; +} + +// CmdID: 4330 +message EvaluateExaminationRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + EvaluateExaminationRsp.Retcode retcode = 1; +} + +// CmdID: 4331 +message ChapterActivityDailyRewardNotify { + uint32 chapter_id = 1; + RewardData daily_reward = 2; +} + +// CmdID: 4332 +message GetSupportActivityReq { +} + +message SupportData { + uint32 support_index = 1; + bool is_take_share_reward = 2; + uint32 support_end_time = 3; + uint32 support_begin_time = 4; + uint32 count_down_time = 5; +} + +// CmdID: 4333 +message GetSupportActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetSupportActivityRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + SupportData support_data = 3; + bool is_take_global_reward = 4; +} + +// CmdID: 4334 +message SupportActivitySupportReq { +} + +// CmdID: 4335 +message SupportActivitySupportRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + IN_CD_TIME = 3; + HAS_SUPPORT = 4; + } + + SupportActivitySupportRsp.Retcode retcode = 1; + uint32 support_index = 2; +} + +// CmdID: 4336 +message SupportActivityTakeShareRewardReq { +} + +// CmdID: 4337 +message SupportActivityTakeShareRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + HAS_TAKE = 3; + NOT_SUPPORT = 4; + } + + SupportActivityTakeShareRewardRsp.Retcode retcode = 1; + RewardData reward_data = 2; +} + +// CmdID: 4338 +message SupportActivityTakeGlobalRewardReq { +} + +// CmdID: 4339 +message SupportActivityTakeGlobalRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + HAS_TAKE = 3; + } + + SupportActivityTakeGlobalRewardRsp.Retcode retcode = 1; + RewardData reward_data = 2; +} + +// CmdID: 4340 +message GetMosaicActivityReq { +} + +message MosaicActivity { + uint32 activity_id = 1; + uint32 progress = 2; + bool is_take_reward = 3; +} + +// CmdID: 4341 +message GetMosaicActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetMosaicActivityRsp.Retcode retcode = 1; + repeated MosaicActivity activity_list = 2; +} + +// CmdID: 4342 +message TakeMosaicActivityRewardReq { + uint32 activity_id = 1; +} + +// CmdID: 4343 +message TakeMosaicActivityRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKE = 2; + NOT_FINISHED = 3; + NOT_OPEN = 4; + } + + TakeMosaicActivityRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + RewardData reward_data = 3; +} + +// CmdID: 4346 +message GetMissionGroupMainInfoReq { +} + +// CmdID: 4347 +message GetMissionGroupMainInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetMissionGroupMainInfoRsp.Retcode retcode = 1; + repeated uint32 has_take_reward_mission_group_list = 2; +} + +// CmdID: 4348 +message TakeMissionGroupRewardReq { + uint32 group_id = 1; +} + +// CmdID: 4349 +message TakeMissionGroupRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKEN = 2; + NO_REWARD = 3; + NOT_FINISH = 4; + } + + TakeMissionGroupRewardRsp.Retcode retcode = 1; + RewardData reward_data = 2; +} + +// CmdID: 4350 +message ChapterActivityTakeDailyRewardReq { + uint32 chapter_id = 1; +} + +// CmdID: 4351 +message ChapterActivityTakeDailyRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKE = 2; + ACTIVITY_NOT_OPEN = 3; + } + + ChapterActivityTakeDailyRewardRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + RewardData daily_reward = 3; +} + +message ReunionCookHistory { + uint32 book_id = 1; + uint32 daily_num = 2; + uint32 total_num = 3; +} + +message ReunionCookActivity { + uint32 cur_schedule_id = 1; + uint32 start_time = 2; + uint32 end_time = 3; + uint32 cook_score = 4; + uint32 last_settle_reward_score = 5; + repeated ReunionCookHistory cook_history = 6; + uint32 score_reward_group = 7; + uint32 group_id = 8; +} + +// CmdID: 4380 +message ReunionCookGetActivityReq { +} + +// CmdID: 4381 +message ReunionCookGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + ReunionCookGetActivityRsp.Retcode retcode = 1; + ReunionCookActivity reunion_cook_activity = 2; +} + +message ReunionCookData { + uint32 book_id = 1; + uint32 cook_times = 2; + repeated Material recycle_material_list = 3; +} + +// CmdID: 4382 +message ReunionCookMakeDinnerReq { + uint32 book_id = 1; + repeated Material recycle_material_list = 2; + ReunionCookBookType book_type = 3; + repeated ReunionCookData cook_data = 4; +} + +// CmdID: 4383 +message ReunionCookMakeDinnerRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + INVALID_BOOK_ID = 3; + INVALID_MATERIAL = 4; + MATERIAL_LACK = 5; + TIMES_LIMIT = 6; + DUPLICATE_BOOK_ID = 7; + } + + ReunionCookMakeDinnerRsp.Retcode retcode = 1; + uint32 book_id = 2; + RewardData reward_data = 3; +} + +// CmdID: 4384 +message ReunionCookTakeScoreRewardReq { +} + +// CmdID: 4385 +message ReunionCookTakeScoreRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ReunionCookTakeScoreRewardRsp.Retcode retcode = 1; + RewardData reward_data = 2; +} + +enum CmdTypeActivity { + CMD_TYPE_ACTIVITY_NONE = 0; + CMD_GET_SCRATCH_TICKET_REQ = 4150; + CMD_GET_SCRATCH_TICKET_RSP = 4151; + CMD_SCRATCH_REQ = 4152; + CMD_SCRATCH_RSP = 4153; + CMD_RESET_SCRATCH_TICKET_PLATE_REQ = 4154; + CMD_RESET_SCRATCH_TICKET_PLATE_RSP = 4155; + CMD_ADD_ON_ACTIVITY_REWARD_NOTIFY = 4156; + CMD_GET_BINGO_ACTIVITY_DATA_REQ = 4157; + CMD_GET_BINGO_ACTIVITY_DATA_RSP = 4158; + CMD_BINGO_ACTIVITY_FLOP_CARD_REQ = 4159; + CMD_BINGO_ACTIVITY_FLOP_CARD_RSP = 4160; + CMD_BINGO_ACTIVITY_RESET_BINGO_REQ = 4161; + CMD_BINGO_ACTIVITY_RESET_BINGO_RSP = 4162; + CMD_GET_BULLETIN_SCORE_ACTIVITY_REQ = 4163; + CMD_GET_BULLETIN_SCORE_ACTIVITY_RSP = 4164; + CMD_TAKE_BULLETIN_SCORE_ACTIVITY_REWARD_REQ = 4165; + CMD_TAKE_BULLETIN_SCORE_ACTIVITY_REWARD_RSP = 4166; + CMD_GET_CONTINUOUS_RECHARGE_ACTIVITY_REQ = 4167; + CMD_GET_CONTINUOUS_RECHARGE_ACTIVITY_RSP = 4168; + CMD_TAKE_CONTINUOUS_RECHARGE_REWARD_REQ = 4169; + CMD_TAKE_CONTINUOUS_RECHARGE_REWARD_RSP = 4170; + CMD_TAKE_FLOP_ACTIVITY_REWARD_REQ = 4171; + CMD_TAKE_FLOP_ACTIVITY_REWARD_RSP = 4172; + CMD_GET_FLOP_ACTIVITY_DATA_REQ = 4173; + CMD_GET_FLOP_ACTIVITY_DATA_RSP = 4174; + CMD_FLOP_ACTIVITY_FLOP_CARD_REQ = 4175; + CMD_FLOP_ACTIVITY_FLOP_CARD_RSP = 4176; + CMD_GET_LOTTERY_ACTIVITY_REQ = 4177; + CMD_GET_LOTTERY_ACTIVITY_RSP = 4178; + CMD_LOTTERY_USE_BOX_REQ = 4179; + CMD_LOTTERY_USE_BOX_RSP = 4180; + CMD_LOTTERY_DRAW_NUMBER_REQ = 4181; + CMD_LOTTERY_DRAW_NUMBER_RSP = 4182; + CMD_LOTTERY_TAKE_REWARD_REQ = 4183; + CMD_LOTTERY_TAKE_REWARD_RSP = 4184; + CMD_GET_TOWER_RAID_ACTIVITY_REQ = 4185; + CMD_GET_TOWER_RAID_ACTIVITY_RSP = 4186; + CMD_TAKE_TOWER_RAID_REWARD_REQ = 4187; + CMD_TAKE_TOWER_RAID_REWARD_RSP = 4188; + CMD_UPDATE_TOWER_RAID_BOSS_REQ = 4189; + CMD_UPDATE_TOWER_RAID_BOSS_RSP = 4190; + CMD_TOWER_RAID_LOCK_AVATAR_NOTIFY = 4191; + CMD_GET_LOGIN_ACTIVITY_REQ = 4192; + CMD_GET_LOGIN_ACTIVITY_RSP = 4193; + CMD_TAKE_LOGIN_ACTIVITY_REWARD_REQ = 4194; + CMD_TAKE_LOGIN_ACTIVITY_REWARD_RSP = 4195; + CMD_GET_CHAPTER_ACTIVITY_DATA_REQ = 4200; + CMD_GET_CHAPTER_ACTIVITY_DATA_RSP = 4201; + CMD_TAKE_CHAPTER_ACTIVITY_LEVEL_REWARD_REQ = 4202; + CMD_TAKE_CHAPTER_ACTIVITY_LEVEL_REWARD_RSP = 4203; + CMD_SYNC_CHAPTER_ACTIVITY_DATA_NOTIFY = 4204; + CMD_GET_MISSION_THEME_DATA_REQ = 4205; + CMD_GET_MISSION_THEME_DATA_RSP = 4206; + CMD_UPGRADE_MISSION_THEME_REQ = 4207; + CMD_UPGRADE_MISSION_THEME_RSP = 4208; + CMD_TAKE_MISSION_THEME_REWARD_REQ = 4209; + CMD_TAKE_MISSION_THEME_REWARD_RSP = 4210; + CMD_GET_OFFLINE_RESOURCE_DATA_REQ = 4211; + CMD_GET_OFFLINE_RESOURCE_DATA_RSP = 4212; + CMD_TAKE_OFFLINE_RESOURCE_BOX_REQ = 4213; + CMD_TAKE_OFFLINE_RESOURCE_BOX_RSP = 4214; + CMD_GET_OVERLAP_ACTIVITY_DATA_REQ = 4215; + CMD_GET_OVERLAP_ACTIVITY_DATA_RSP = 4216; + CMD_TAKE_OVERLAP_ACTIVITY_REWARD_REQ = 4217; + CMD_TAKE_OVERLAP_ACTIVITY_REWARD_RSP = 4218; + CMD_OVERLAP_ACTIVITY_SUMMON_REQ = 4219; + CMD_OVERLAP_ACTIVITY_SUMMON_RSP = 4220; + CMD_OVERLAP_ACTIVITY_MOVE_REQ = 4221; + CMD_OVERLAP_ACTIVITY_MOVE_RSP = 4222; + CMD_GET_WEEKLY_ROUTINE_ACTIVITY_REQ = 4229; + CMD_GET_WEEKLY_ROUTINE_ACTIVITY_RSP = 4230; + CMD_TAKE_WEEKLY_ROUTINE_REWARD_REQ = 4231; + CMD_TAKE_WEEKLY_ROUTINE_REWARD_RSP = 4232; + CMD_GET_RANK_SCHEDULE_DATA_REQ = 4233; + CMD_GET_RANK_SCHEDULE_DATA_RSP = 4234; + CMD_GET_RANK_SCHEDULE_RANK_REQ = 4235; + CMD_GET_RANK_SCHEDULE_RANK_RSP = 4236; + CMD_GET_SURVEY_DATA_REQ = 4241; + CMD_GET_SURVEY_DATA_RSP = 4242; + CMD_FINISH_SURVEY_NOTIFY = 4243; + CMD_GET_THEME_DATA_REQ = 4244; + CMD_GET_THEME_DATA_RSP = 4245; + CMD_SYNC_THEME_DATA_NOTIFY = 4246; + CMD_GRANT_OUTER_REWARD_NOTIFY = 4247; + CMD_GET_NEWBIE_ACTIVITY_REQ = 4248; + CMD_GET_NEWBIE_ACTIVITY_RSP = 4249; + CMD_GET_BBQ_ACTIVITY_DATA_REQ = 4250; + CMD_GET_BBQ_ACTIVITY_DATA_RSP = 4251; + CMD_BBQ_ACTIVITY_COOK_REQ = 4252; + CMD_BBQ_ACTIVITY_COOK_RSP = 4253; + CMD_BBQ_ACTIVITY_TAKE_LEVEL_UP_REWARD_REQ = 4254; + CMD_BBQ_ACTIVITY_TAKE_LEVEL_UP_REWARD_RSP = 4255; + CMD_TAKE_NEWBIE_ACTIVITY_LEVEL_REWARD_REQ = 4256; + CMD_TAKE_NEWBIE_ACTIVITY_LEVEL_REWARD_RSP = 4257; + CMD_GET_TRADING_CARD_ACTIVITY_REQ = 4262; + CMD_GET_TRADING_CARD_ACTIVITY_RSP = 4263; + CMD_TAKE_TRADING_CARD_REWARD_REQ = 4264; + CMD_TAKE_TRADING_CARD_REWARD_RSP = 4265; + CMD_GET_PICTURE_ACTIVITY_REQ = 4266; + CMD_GET_PICTURE_ACTIVITY_RSP = 4267; + CMD_PICTURE_ACTIVITY_CHOOSE_REQ = 4268; + CMD_PICTURE_ACTIVITY_CHOOSE_RSP = 4269; + CMD_PICTURE_ACTIVITY_SHARE_REQ = 4270; + CMD_PICTURE_ACTIVITY_SHARE_RSP = 4271; + CMD_SYNC_PICTURE_ACTIVITY_SCORE_NOTIFY = 4272; + CMD_GET_JIGSAW_ACTIVITY_REQ = 4273; + CMD_GET_JIGSAW_ACTIVITY_RSP = 4274; + CMD_JIGSAW_EXCHANGE_PIECE_REQ = 4275; + CMD_JIGSAW_EXCHANGE_PIECE_RSP = 4276; + CMD_JIGSAW_MOVE_WAITING_PIECE_REQ = 4277; + CMD_JIGSAW_MOVE_WAITING_PIECE_RSP = 4278; + CMD_JIGSAW_MOVE_PIECE_IN_JIGSAW_AREA_REQ = 4279; + CMD_JIGSAW_MOVE_PIECE_IN_JIGSAW_AREA_RSP = 4280; + CMD_JIGSAW_TAKE_GROUP_REWARD_REQ = 4281; + CMD_JIGSAW_TAKE_GROUP_REWARD_RSP = 4282; + CMD_JIGSAW_TAKE_FINISH_REWARD_REQ = 4283; + CMD_JIGSAW_TAKE_FINISH_REWARD_RSP = 4284; + CMD_GET_GARDEN_ACTIVITY_REQ = 4287; + CMD_GET_GARDEN_ACTIVITY_RSP = 4288; + CMD_GARDEN_HARVEST_REQ = 4289; + CMD_GARDEN_HARVEST_RSP = 4290; + CMD_GARDEN_SPEED_UP_WITH_MATERIAL_REQ = 4291; + CMD_GARDEN_SPEED_UP_WITH_MATERIAL_RSP = 4292; + CMD_GARDEN_REFRESH_SITE_REQ = 4293; + CMD_GARDEN_REFRESH_SITE_RSP = 4294; + CMD_GET_GARDEN_SCHEDULE_REQ = 4295; + CMD_GET_GARDEN_SCHEDULE_RSP = 4296; + CMD_GET_DROP_LIMIT_ACTIVITY_REQ = 4297; + CMD_GET_DROP_LIMIT_ACTIVITY_RSP = 4298; + CMD_GET_LOGIN_MISSION_ACTIVITY_REQ = 4299; + CMD_GET_LOGIN_MISSION_ACTIVITY_RSP = 4300; + CMD_TAKE_LOGIN_MISSION_REWARD_REQ = 4301; + CMD_TAKE_LOGIN_MISSION_REWARD_RSP = 4302; + CMD_SANCTUARY_GET_MAIN_INFO_REQ = 4305; + CMD_SANCTUARY_GET_MAIN_INFO_RSP = 4306; + CMD_SANCTUARY_TAKE_LEVEL_REWARD_REQ = 4307; + CMD_SANCTUARY_TAKE_LEVEL_REWARD_RSP = 4308; + CMD_SANCTUARY_TAKE_PRODUCT_REQ = 4309; + CMD_SANCTUARY_TAKE_PRODUCT_RSP = 4310; + CMD_SANCTUARY_START_NOTIFY = 4311; + CMD_GET_ACTIVITY_REWARD_STATISTIC_DATA_REQ = 4312; + CMD_GET_ACTIVITY_REWARD_STATISTIC_DATA_RSP = 4313; + CMD_SANCTUARY_STAGE_END_NOTIFY = 4314; + CMD_GET_SLOT_MACHINE_MAIN_INFO_REQ = 4315; + CMD_GET_SLOT_MACHINE_MAIN_INFO_RSP = 4316; + CMD_START_SLOT_MACHINE_REQ = 4317; + CMD_START_SLOT_MACHINE_RSP = 4318; + CMD_TAKE_SLOT_MACHINE_PROGRESS_REWARD_REQ = 4319; + CMD_TAKE_SLOT_MACHINE_PROGRESS_REWARD_RSP = 4320; + CMD_GET_BULLETIN_ACTIVITY_MISSION_REQ = 4321; + CMD_GET_BULLETIN_ACTIVITY_MISSION_RSP = 4322; + CMD_GET_EXAMINATION_ACTIVITY_REQ = 4323; + CMD_GET_EXAMINATION_ACTIVITY_RSP = 4324; + CMD_FINISH_EXAMINATION_REQ = 4325; + CMD_FINISH_EXAMINATION_RSP = 4326; + CMD_START_NEXT_ROUND_EXAMINATION_REQ = 4327; + CMD_START_NEXT_ROUND_EXAMINATION_RSP = 4328; + CMD_EVALUATE_EXAMINATION_REQ = 4329; + CMD_EVALUATE_EXAMINATION_RSP = 4330; + CMD_CHAPTER_ACTIVITY_DAILY_REWARD_NOTIFY = 4331; + CMD_GET_SUPPORT_ACTIVITY_REQ = 4332; + CMD_GET_SUPPORT_ACTIVITY_RSP = 4333; + CMD_SUPPORT_ACTIVITY_SUPPORT_REQ = 4334; + CMD_SUPPORT_ACTIVITY_SUPPORT_RSP = 4335; + CMD_SUPPORT_ACTIVITY_TAKE_SHARE_REWARD_REQ = 4336; + CMD_SUPPORT_ACTIVITY_TAKE_SHARE_REWARD_RSP = 4337; + CMD_SUPPORT_ACTIVITY_TAKE_GLOBAL_REWARD_REQ = 4338; + CMD_SUPPORT_ACTIVITY_TAKE_GLOBAL_REWARD_RSP = 4339; + CMD_GET_MOSAIC_ACTIVITY_REQ = 4340; + CMD_GET_MOSAIC_ACTIVITY_RSP = 4341; + CMD_TAKE_MOSAIC_ACTIVITY_REWARD_REQ = 4342; + CMD_TAKE_MOSAIC_ACTIVITY_REWARD_RSP = 4343; + CMD_GET_MISSION_GROUP_MAIN_INFO_REQ = 4346; + CMD_GET_MISSION_GROUP_MAIN_INFO_RSP = 4347; + CMD_TAKE_MISSION_GROUP_REWARD_REQ = 4348; + CMD_TAKE_MISSION_GROUP_REWARD_RSP = 4349; + CMD_CHAPTER_ACTIVITY_TAKE_DAILY_REWARD_REQ = 4350; + CMD_CHAPTER_ACTIVITY_TAKE_DAILY_REWARD_RSP = 4351; + CMD_REUNION_COOK_GET_ACTIVITY_REQ = 4380; + CMD_REUNION_COOK_GET_ACTIVITY_RSP = 4381; + CMD_REUNION_COOK_MAKE_DINNER_REQ = 4382; + CMD_REUNION_COOK_MAKE_DINNER_RSP = 4383; + CMD_REUNION_COOK_TAKE_SCORE_REWARD_REQ = 4384; + CMD_REUNION_COOK_TAKE_SCORE_REWARD_RSP = 4385; + CMD_RESET_CHAPTER_ACTIVITY_EXCLUSIVE_STAGE_REQ = 4386; + CMD_RESET_CHAPTER_ACTIVITY_EXCLUSIVE_STAGE_RSP = 4387; + CMD_RESET_CHAPTER_ACTIVITY_TALENT_REQ = 4388; + CMD_RESET_CHAPTER_ACTIVITY_TALENT_RSP = 4389; + CMD_REPORT_CHAPTER_ACTIVITY_STAGE_REQ = 4390; + CMD_REPORT_CHAPTER_ACTIVITY_STAGE_RSP = 4391; +} + +enum BingoCardType { + BINGO_CARD_WRONG = 0; + BINGO_CARD_CORRECT = 1; +} + +enum FlopActivityRewardState { + FLOP_ACTIVITY_REWARD_STATE_LOCK = 0; + FLOP_ACTIVITY_REWARD_STATE_UNLOCK = 1; + FLOP_ACTIVITY_REWARD_STATE_HAS_GOT = 2; +} + +enum FlopActivityCardState { + FLOP_ACTIVITY_CARD_STATE_NOT_FLOP = 0; + FLOP_ACTIVITY_CARD_STATE_FLOP = 1; + FLOP_ACTIVITY_CARD_STATE_REWARD_UNLOCK = 2; +} + +enum LotteryRewardType { + LOTTERY_REWARD_TYPE_INVALID = 0; + LOTTERY_REWARD_TYPE_FIRST_REWARD = 1; + LOTTERY_REWARD_TYPE_SECOND_REWARD = 2; + LOTTERY_REWARD_TYPE_THIRD_REWARD = 3; +} + +enum HybridSiteType { + HYBRID_SITE_TYPE_STORE = 0; + HYBRID_SITE_TYPE_CYCLE = 1; + HYBRID_SITE_TYPE_EX = 2; + HYBRID_SITE_TYPE_BOSS = 3; + HYBRID_SITE_TYPE_COLLECTION = 4; + HYBRID_SITE_TYPE_MP = 5; + HYBRID_SITE_TYPE_CHALLENGE = 6; + HYBRID_SITE_TYPE_ZONE_CYCLE = 7; + HYBRID_SITE_TYPE_ZONE_CHALLENGE = 8; + HYBRID_SITE_TYPE_EX_BOSS = 9; + HYBRID_SITE_TYPE_TOWER = 10; + HYBRID_SITE_TYPE_CG = 11; + HYBRID_SITE_TYPE_GOD_WAR = 12; + HYBRID_SITE_TYPE_BW_WORLD_BRANCH = 13; + HYBRID_SITE_TYPE_BW_WORLD_THEME = 14; + HYBRID_SITE_TYPE_BW_WORLD_TOWER = 15; + HYBRID_SITE_TYPE_CHAPTER_ARK_TUTORIAL = 16; + HYBRID_SITE_TYPE_CHAPTER_ARK_MID_TERM_DAILY = 17; + HYBRID_SITE_TYPE_CHAPTER_ARK_ROGUE_TOWER = 18; + HYBRID_SITE_TYPE_CHAPTER_ARK_SUPPORT_CHALLENGE = 19; +} + +enum OfflineResourceType { + OFFLINE_RESOURCE_TYPE_NONE = 0; + OFFLINE_RESOURCE_TYPE_OW_QUEST = 1; + OFFLINE_RESOURCE_TYPE_OW_MECHA = 2; + OFFLINE_RESOURCE_TYPE_WEEK_DAY = 3; + OFFLINE_RESOURCE_TYPE_ARMADA = 4; + OFFLINE_RESOURCE_TYPE_ENDLESS = 5; + OFFLINE_RESOURCE_TYPE_EX_BOSS = 6; +} + +enum RankScheduleType { + RANK_SCHEDULE_TYPE_NONE = 0; + RANK_SCHEDULE_DORM = 1; +} + +enum OuterRewardType { + OUTER_REWARD_TYPE_NONE = 0; + OUTER_REWARD_TYPE_REDEEM = 1; +} + +enum AutoDeleteType { + AUTO_DELETE_TYPE_NONE = 0; + AUTO_DELETE_BINGO = 2; + AUTO_DELETE_BULLETIN_SCORE = 3; + AUTO_DELETE_CONTINUOUS_RECHARGE = 4; + AUTO_DELETE_FARM = 5; + AUTO_DELETE_FLOP = 6; + AUTO_DELETE_LOTTERY = 8; + AUTO_DELETE_ELF_EQUIP_TALENT_FREE = 9; + AUTO_DELETE_THEME = 10; + AUTO_DELETE_RELATION = 11; + AUTO_DELETE_BBQ = 12; + AUTO_DELETE_CITY = 13; + AUTO_DELETE_MONOPOLY = 15; + AUTO_DELETE_OVERLAP = 16; + AUTO_DELETE_RECLAIM = 17; + AUTO_DELETE_SCRATCH = 18; + AUTO_DELETE_SEASON = 19; + AUTO_DELETE_TOWER_RAID = 20; + AUTO_DELETE_GLOBAL_WAR = 22; + AUTO_DELETE_LOGIN = 23; + AUTO_DELETE_GENERAL = 24; + AUTO_DELETE_NINJA = 25; + AUTO_DELETE_QUESTION = 26; + AUTO_DELETE_TRADING_CARD = 27; + AUTO_DELETE_ARMADA_STAGE_SCORE = 28; + AUTO_DELETE_PICTURE = 29; + AUTO_DELETE_JIGSAW = 30; + AUTO_DELETE_ARMADA_REUNION = 31; + AUTO_DELETE_GARDEN = 32; + AUTO_DELETE_DROP_LIMIT = 33; + AUTO_DELETE_RPG_TALE = 34; + AUTO_DELETE_SANCTUARY = 35; + AUTO_DELETE_ACTIVITY_REWARD = 36; + AUTO_DELETE_SLOT_MACHINE = 37; + AUTO_DELETE_EXAMINATION = 38; + AUTO_DELETE_SUPPORT = 39; + AUTO_DELETE_MOSAIC = 40; + AUTO_DELETE_LOGIN_WISH = 41; + AUTO_DELETE_BURDEN_ALLEVIATION = 44; + AUTO_DELETE_CHATWORLD_BEAST = 45; + AUTO_DELETE_CHATWORLD_BOX = 46; + AUTO_DELETE_DREAM = 47; + AUTO_DELETE_OPENWORLD_AVATAR = 48; + AUTO_DELETE_GRANT_TICKET = 49; + AUTO_DELETE_SLG = 50; + AUTO_DELETE_GLOBAL_POLLING = 51; + AUTO_DELETE_REWARD_LINE_SCHEDULE = 52; + AUTO_DELETE_GOD_WAR_TALE = 53; + AUTO_DELETE_OPENWORLD_HUNT = 54; + AUTO_DELETE_BUFF_ASSIST = 55; + AUTO_DELETE_WAVE_RUSH = 56; + AUTO_DELETE_AI_CYBER = 57; + AUTO_DELETE_MINI_MONOPOLY = 58; + AUTO_DELETE_MIRAGE = 59; + AUTO_DELETE_THEME_TOWER = 60; + AUTO_DELETE_PON_MACHINE = 61; + AUTO_DELETE_CARNIVAL_LOTTERY = 63; + AUTO_DELETE_ARK_PLUS = 64; + AUTO_DELETE_PJMS_ACTIVITY = 65; + AUTO_DELETE_PJMS_SUB_MODULE = 66; + AUTO_DELETE_SIMPLIFIED_GOD_WAR = 67; + AUTO_DELETE_FUTARI_BATTLE = 68; + AUTO_DELETE_CRYSTAL_LOTTERY = 69; +} + +enum SupportActivityType { + ACTIVITY_TYPE_GLOBAL_SUPPORT = 0; + ACTIVITY_TYPE_NORMAL = 1; +} + +enum ReunionCookBookType { + REUNION_COOK_BOOK_TYPE_NONE = 0; + REUNION_COOK_BOOK_NORMAL = 1; + REUNION_COOK_BOOK_RECYCLE = 2; +} + +enum LoginRewardActivityType { + LOGIN_REWARD_ACTIVITY_NONE = 0; + LOGIN_REWARD_ACTIVITY_NORMAL = 1; + LOGIN_REWARD_ACTIVITY_NEWBIE = 2; +} + +message Dream { + uint32 dream_id = 1; + uint32 unlock_id = 2; + bool is_open = 3; + uint32 selected_dream_reward_id = 4; + uint32 score = 5; + bool is_reward_taken = 6; + uint32 exchange_score_times = 7; +} + +message DreamActivity { + uint32 activity_id = 1; + repeated Dream dream_list = 2; +} + +// CmdID: 5750 +message DreamGetActivityReq { + uint32 activity_id = 1; +} + +// CmdID: 5751 +message DreamGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + DreamGetActivityRsp.Retcode retcode = 1; + DreamActivity activity = 2; +} + +// CmdID: 5752 +message DreamOpenDreamReq { + uint32 activity_id = 1; + uint32 dream_id = 2; + uint32 select_dream_reward_id = 3; +} + +// CmdID: 5753 +message DreamOpenDreamRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_EXIST = 2; + DREAM_NOT_EXIST = 3; + REWARD_NOT_EXIST = 4; + HAS_OPEN_DREAM = 5; + LOCKED = 6; + REWARD_TAKEN = 7; + } + + DreamOpenDreamRsp.Retcode retcode = 1; + uint32 unlock_id = 2; +} + +// CmdID: 5754 +message DreamGiveUpDreamReq { + uint32 activity_id = 1; + uint32 dream_id = 2; +} + +// CmdID: 5755 +message DreamGiveUpDreamRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_EXIST = 2; + DREAM_NOT_EXIST = 3; + } + + DreamGiveUpDreamRsp.Retcode retcode = 1; +} + +// CmdID: 5756 +message DreamExchangeScoreReq { + uint32 activity_id = 1; + uint32 dream_id = 2; + uint32 num = 3; +} + +// CmdID: 5757 +message DreamExchangeScoreRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_EXIST = 2; + DREAM_NOT_EXIST = 3; + TIMES_NOT_ENOUGH = 4; + HCOIN_NOT_ENOUGH = 5; + SCORE_FULL = 6; + } + + DreamExchangeScoreRsp.Retcode retcode = 1; +} + +// CmdID: 5758 +message DreamTakeRewardReq { + uint32 activity_id = 1; + uint32 dream_id = 2; +} + +// CmdID: 5759 +message DreamTakeRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_EXIST = 2; + DREAM_NOT_EXIST = 3; + SCORE_NOT_ENOUGH = 4; + REWARD_TAKEN = 5; + } + + DreamTakeRewardRsp.Retcode retcode = 1; + RewardData reward_data = 2; +} + +// CmdID: 5790 +message GetThemeWantedReq { +} + +message ThemeWantedStageGroupInfo { + uint32 stage_group_id = 1; + uint32 progress = 2; + repeated uint32 not_pass_progress_list = 3; +} + +message ThemeWantedActivity { + uint32 schedule_id = 1; + uint32 activity_id = 2; + repeated uint32 open_stage_group_id_list = 3; + repeated ThemeWantedStageGroupInfo stage_group_info_list = 4; + uint32 end_time = 6; +} + +// CmdID: 5791 +message GetThemeWantedRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + FEATURE_CLOSED = 3; + } + + GetThemeWantedRsp.Retcode retcode = 1; + ThemeWantedActivity theme_wanted_activity = 2; +} + +// CmdID: 5794 +message ThemeWantedRefreshTicketReq { +} + +// CmdID: 5795 +message ThemeWantedRefreshTicketRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ThemeWantedRefreshTicketRsp.Retcode retcode = 1; +} + +message GlobalPollingTargetData { + uint32 id = 1; + uint64 score_u64 = 2; + uint32 vote_num = 3; +} + +// CmdID: 5811 +message GlobalPollingGetDataReq { +} + +// CmdID: 5812 +message GlobalPollingGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 3; + FEATURE_CLOSED = 4; + } + + GlobalPollingGetDataRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + uint32 last_support_time = 3; + uint32 support_target_id = 4; + uint32 vote_begin_time = 5; + repeated GlobalPollingTargetData target_data_list = 6; +} + +// CmdID: 5813 +message GlobalPollingSupportReq { + uint32 target_id = 1; +} + +// CmdID: 5814 +message GlobalPollingSupportRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + TARGET_ID_INVALID = 3; + IN_CD = 4; + } + + GlobalPollingSupportRsp.Retcode retcode = 1; +} + +// CmdID: 5815 +message GlobalPollingVoteReq { + uint32 target_id = 1; + uint32 num = 2; +} + +// CmdID: 5816 +message GlobalPollingVoteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 3; + VOTE_NOT_OPEN = 4; + TARGET_ID_INVALID = 5; + TOO_FREQUENT = 6; + MATERIAL_LACK = 7; + FEATURE_CLOSED = 8; + } + + GlobalPollingVoteRsp.Retcode retcode = 1; +} + +// CmdID: 5831 +message GetCollaborationScheduleReq { +} + +// CmdID: 5832 +message GetCollaborationScheduleRsp { + message Schedule { + uint32 id = 1; + uint32 begin_time = 2; + uint32 end_time = 3; + } + + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetCollaborationScheduleRsp.Retcode retcode = 1; + repeated GetCollaborationScheduleRsp.Schedule schedule_list = 2; +} + +// CmdID: 5833 +message RanchGetActivityReq { + uint32 activity_id = 1; +} + +message RanchMonsterSkill { + uint32 skill_id = 1; + bool is_locked = 2; +} + +message RanchMonster { + uint32 unique_id = 1; + uint32 monster_id = 2; + repeated RanchMonsterSkill skill_list = 3; + uint32 ranch_area_id = 4; + uint32 ranch_last_settle_time = 5; + uint32 monster_level = 6; + uint32 monster_exp = 7; +} + +message RanchArea { + uint32 area_id = 1; + uint32 cur_product_num = 2; + repeated uint32 monster_unique_id_list = 3; + uint32 production_efficiency = 4; +} + +message RanchStage { + uint32 stage_id = 1; + uint32 take_challenge_reward_times = 2; + uint32 max_challenge_score = 3; + repeated RanchMonster drop_monster_list = 4; + repeated uint32 unique_id_list = 5; +} + +// CmdID: 5834 +message RanchGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + RanchGetActivityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated RanchMonster monster_list = 3; + repeated RanchArea area_list = 4; + uint32 next_refresh_time = 5; + repeated RanchStage stage_list = 6; + repeated uint32 battle_unique_id_list = 7; +} + +// CmdID: 5835 +message RanchSynthesisMonsterReq { + uint32 activity_id = 1; + uint32 synthesis_id = 2; + uint32 main_unique_id = 3; + uint32 assist_unique_id = 4; +} + +// CmdID: 5836 +message RanchSynthesisMonsterRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MONSTER_NOT_EXIST = 2; + UNIQUE_ID_REPEATED = 3; + MONSTER_ALREADY_ASSIGNED = 4; + MATERIAL_LACK = 5; + MONSTER_NOT_MATCH = 6; + } + + RanchSynthesisMonsterRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 synthesis_id = 3; + uint32 main_unique_id = 4; + uint32 assist_unique_id = 5; + uint32 output_unique_id = 6; +} + +// CmdID: 5837 +message RanchFreeMonsterReq { + uint32 activity_id = 1; + repeated uint32 unique_id_list = 2; +} + +// CmdID: 5838 +message RanchFreeMonsterRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MONSTER_NOT_EXIST = 2; + UNIQUE_ID_REPEATED = 3; + MONSTER_ALREADY_ASSIGNED = 4; + } + + RanchFreeMonsterRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated uint32 unique_id_list = 3; + uint32 return_material_num = 4; +} + +// CmdID: 5839 +message RanchAssignMonsterReq { + uint32 activity_id = 1; + repeated uint32 unique_id_list = 2; + uint32 area_id = 3; +} + +// CmdID: 5840 +message RanchAssignMonsterRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MONSTER_NOT_EXIST = 2; + UNIQUE_ID_REPEATED = 3; + AREA_NOT_EXIST = 4; + MONSTER_ALREADY_ASSIGNED = 5; + SLOT_NOT_ENOUGH = 6; + } + + RanchAssignMonsterRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated uint32 unique_id_list = 3; + uint32 area_id = 4; +} + +// CmdID: 5841 +message RanchFireMonsterReq { + uint32 activity_id = 1; + repeated uint32 unique_id_list = 2; +} + +// CmdID: 5842 +message RanchFireMonsterRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MONSTER_NOT_EXIST = 2; + UNIQUE_ID_REPEATED = 3; + AREA_NOT_EXIST = 4; + MONSTER_NOT_ASSIGNED = 5; + } + + RanchFireMonsterRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated uint32 unique_id_list = 3; +} + +// CmdID: 5843 +message RanchTakeProductReq { + uint32 activity_id = 1; +} + +// CmdID: 5844 +message RanchTakeProductRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MONSTER_NUM_OVERFLOW = 2; + } + + RanchTakeProductRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated uint32 unique_id_list = 3; +} + +// CmdID: 5845 +message RanchGetMonsterWikiReq { + uint32 activity_id = 1; +} + +message RanchMonsterWiki { + uint32 monster_id = 1; + uint32 unlock_time = 2; + uint32 battle_times = 3; + uint32 catch_times = 4; + repeated uint32 skill_id_list = 5; +} + +message RanchSkillWiki { + uint32 skill_type = 1; + uint32 skill_id = 2; +} + +// CmdID: 5846 +message RanchGetMonsterWikiRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + RanchGetMonsterWikiRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated RanchMonsterWiki monster_wiki_list = 3; + repeated RanchSkillWiki skill_wiki_list = 4; + uint32 collection_point = 5; +} + +// CmdID: 5847 +message RanchSyncMonsterNotify { + uint32 activity_id = 1; + repeated RanchMonster monster_list = 2; + repeated uint32 del_monster_unique_id_list = 3; + RanchNotifyType notify_type = 4; + uint32 stage_id = 5; +} + +// CmdID: 5848 +message RanchDelMonsterNotify { + uint32 activity_id = 1; + repeated uint32 del_monster_unique_id_list = 2; +} + +// CmdID: 5849 +message RanchLockMonsterSkillReq { + uint32 activity_id = 1; + uint32 unique_id = 2; + repeated uint32 lock_skill_idx_list = 3; +} + +// CmdID: 5850 +message RanchLockMonsterSkillRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MONSTER_NOT_EXIST = 2; + LOCK_NUM_LIMIT = 3; + } + + RanchLockMonsterSkillRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 unique_id = 3; + repeated uint32 lock_skill_idx_list = 4; +} + +// CmdID: 5851 +message RanchSetBattleMonsterReq { + uint32 activity_id = 1; + repeated uint32 unique_id_list = 2; +} + +// CmdID: 5852 +message RanchSetBattleMonsterRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MONSTER_NOT_EXIST = 2; + } + + RanchSetBattleMonsterRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated uint32 unique_id_list = 3; +} + +message RestaurantRoom { + uint32 room_id = 1; + uint32 avatar_id = 2; + uint32 material_id = 3; + double speed = 4; + double progress = 5; + uint32 status = 6; +} + +message RestaurantOrder { + uint32 material_id = 1; + uint32 price = 2; +} + +// CmdID: 5860 +message GetRestaurantActivityReq { + uint32 activity_id = 1; +} + +// CmdID: 5861 +message GetRestaurantActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetRestaurantActivityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 facility_level = 3; + repeated RestaurantRoom room_list = 4; + repeated RestaurantOrder order_list = 5; + uint32 weather_id = 6; +} + +// CmdID: 5862 +message LevelUpRestaurantFacilityReq { + uint32 activity_id = 1; +} + +// CmdID: 5863 +message LevelUpRestaurantFacilityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_LACK = 2; + MISSION_UNFINISH = 3; + } + + LevelUpRestaurantFacilityRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 5864 +message AssignRestaurantWorkReq { + uint32 activity_id = 1; + uint32 room_id = 2; + uint32 avatar_id = 3; + uint32 material_id = 4; +} + +// CmdID: 5865 +message AssignRestaurantWorkRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ROOM_NOT_EXIST = 2; + ALREADY_ASSIGN = 3; + AVATAR_WORK_LIMIT = 4; + } + + AssignRestaurantWorkRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 room_id = 3; + uint32 avatar_id = 4; + uint32 material_id = 5; +} + +// CmdID: 5866 +message CancelRestaurantWorkReq { + uint32 activity_id = 1; + uint32 room_id = 2; +} + +// CmdID: 5867 +message CancelRestaurantWorkRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ROOM_NOT_EXIST = 2; + WORK_NOT_BEGIN = 3; + } + + CancelRestaurantWorkRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 room_id = 3; +} + +// CmdID: 5868 +message TakeRestaurantOrderReq { + uint32 activity_id = 1; +} + +// CmdID: 5869 +message TakeRestaurantOrderRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ORDER_LIST_EMPTY = 2; + } + + TakeRestaurantOrderRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 5870 +message DeliverRestaurantQuestReq { + uint32 activity_id = 1; + uint32 quest_id = 2; +} + +// CmdID: 5871 +message DeliverRestaurantQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_LACK = 2; + } + + DeliverRestaurantQuestRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 quest_id = 3; +} + +// CmdID: 5872 +message AccelerateRestaurantWorkReq { + uint32 activity_id = 1; + uint32 room_id = 2; + uint32 num = 3; +} + +// CmdID: 5873 +message AccelerateRestaurantWorkRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_LACK = 2; + ROOM_NOT_EXIST = 3; + WORK_NOT_DOING = 4; + TICKET_LACK = 5; + STOCK_LIMIT = 6; + AVATAR_INVALID = 7; + } + + AccelerateRestaurantWorkRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 room_id = 3; + uint32 num = 4; +} + +// CmdID: 5881 +message NewbieLevelRushPurchaseReq { +} + +// CmdID: 5882 +message NewbieLevelRushPurchaseRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + PURCHASED = 2; + MCOIN_LACK = 3; + } + + NewbieLevelRushPurchaseRsp.Retcode retcode = 1; +} + +// CmdID: 5883 +message NewbieLevelRushTakeRewardReq { +} + +// CmdID: 5884 +message NewbieLevelRushTakeRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + NewbieLevelRushTakeRewardRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; +} + +message RewardLineActivity { + uint32 id = 1; + uint32 schedule_id = 2; + uint32 score = 3; + uint32 last_taken_reward_score = 4; + bool is_closed = 5; +} + +// CmdID: 5890 +message GetRewardLineActivityReq { + uint32 id = 1; + bool is_get_closed_activity = 2; +} + +// CmdID: 5891 +message GetRewardLineActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CLOSED = 2; + ACTIVITY_NOT_EXIST = 3; + } + + GetRewardLineActivityRsp.Retcode retcode = 1; + repeated RewardLineActivity reward_line_activity_list = 2; + bool is_get_closed_activity = 3; +} + +// CmdID: 5892 +message TakeRewardLineActivityRewardReq { + uint32 id = 1; +} + +// CmdID: 5893 +message TakeRewardLineActivityRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CLOSED = 2; + NO_REWARD = 3; + ACTIVITY_NOT_EXIST = 4; + } + + TakeRewardLineActivityRewardRsp.Retcode retcode = 1; + repeated RewardData reward_data_list = 2; +} + +// CmdID: 5920 +message MonsterCardGetActivityReq { + uint32 activity_id = 1; +} + +message MonsterCard { + uint32 unique_id = 1; + uint32 level = 2; + uint32 star = 3; + uint32 fragment_num = 4; + repeated uint32 talent_list = 5; +} + +message MonsterCardRandomTalentConfirmData { + uint32 unique_id = 1; + uint32 cost_material_id = 2; + uint32 talent_index = 3; + uint32 old_talent_id = 4; + uint32 new_talent_id = 5; +} + +// CmdID: 5921 +message MonsterCardGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + MonsterCardGetActivityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated MonsterCard card_list = 3; + uint32 has_take_daily_reward_times = 4; + MonsterCardRandomTalentConfirmData random_talent_confirm_data = 5; +} + +// CmdID: 5922 +message MonsterCardLevelUpReq { + uint32 activity_id = 1; + uint32 unique_id = 2; + uint32 target_level = 3; +} + +// CmdID: 5923 +message MonsterCardLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_LACK = 2; + LEVEL_LIMIT = 3; + TARGET_LEVEL_ERROR = 4; + } + + MonsterCardLevelUpRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 unique_id = 3; + uint32 target_level = 4; +} + +// CmdID: 5924 +message MonsterCardStarUpReq { + uint32 activity_id = 1; + uint32 unique_id = 2; +} + +// CmdID: 5925 +message MonsterCardStarUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FRAGMENT_LACK = 2; + LEVEL_LACK = 3; + STAR_LIMIT = 4; + } + + MonsterCardStarUpRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 unique_id = 3; +} + +// CmdID: 5926 +message MonsterCardLearnRandomTalentReq { + uint32 activity_id = 1; + uint32 unique_id = 2; + uint32 cost_material_id = 3; + uint32 talent_index = 4; +} + +// CmdID: 5927 +message MonsterCardLearnRandomTalentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_LACK = 2; + MATERIAL_ERROR = 3; + INDEX_ERROR = 4; + NEED_TO_CONFIRM = 5; + } + + MonsterCardLearnRandomTalentRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 unique_id = 3; + uint32 cost_material_id = 4; + uint32 talent_index = 5; + uint32 old_talent_id = 6; + uint32 new_talent_id = 7; +} + +// CmdID: 5933 +message MonsterCardConfirmRandomTalentReq { + uint32 activity_id = 1; + MonsterCardRandomTalentConfirmType type = 2; +} + +// CmdID: 5934 +message MonsterCardConfirmRandomTalentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + MonsterCardConfirmRandomTalentRsp.Retcode retcode = 1; + uint32 activity_id = 2; + MonsterCardRandomTalentConfirmType type = 3; + MonsterCardRandomTalentConfirmData confirm_data = 4; +} + +// CmdID: 5928 +message MonsterCardSyncCardNotify { + uint32 activity_id = 1; + bool is_all = 2; + repeated MonsterCard card_list = 3; + MonsterCardSyncType type = 4; +} + +// CmdID: 5929 +message MonsterCardGetTowerRankReq { + uint32 activity_id = 1; +} + +// CmdID: 5930 +message MonsterCardGetTowerRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + MonsterCardGetTowerRankRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 num = 3; + RankShowData rank_data = 4; + uint32 rank_percent = 5; + MonsterCardActivityRankInfo self_rank_data = 6; +} + +// CmdID: 5931 +message MonsterCardGetBossRankReq { + uint32 activity_id = 1; + uint32 stage_id = 2; +} + +// CmdID: 5932 +message MonsterCardGetBossRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + MonsterCardGetBossRankRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 stage_id = 3; + uint32 num = 4; + RankShowData rank_data = 5; + uint32 rank_percent = 6; + MonsterCardActivityRankInfo self_rank_data = 7; +} + +// CmdID: 5935 +message MonsterCardFragmentOverflowNotify { + uint32 activity_id = 1; + Material overflow_cost_material = 2; + repeated Material return_material_list = 3; +} + +// CmdID: 5941 +message BuffAssistGetActivityReq { +} + +message BuffAssistBuffSlot { + uint32 slot_id = 1; + uint32 buff_id = 2; + bool is_used = 3; +} + +message BuffAssistBuffPool { + uint32 pool_id = 1; + uint32 unique_id = 2; + uint32 producer_uid = 3; + string producer_nickname = 4; + repeated BuffAssistBuffSlot buff_slot_list = 5; + uint32 expire_time = 6; + repeated uint32 assist_word_id_list = 7; + uint32 buff_schedule_id = 8; + uint32 producer_type = 9; + uint32 producer_head_id = 10; + uint32 producer_assist_level = 11; +} + +message BuffAssistPlayerBuffSlot { + uint32 slot_id = 1; + uint32 buff_id = 2; + bool is_replace = 3; +} + +message BuffAssistHistory { + uint32 assist_type = 1; + string peer_nickname = 2; + uint32 peer_assist_level = 3; + uint32 assist_stage_id = 4; + repeated uint32 assist_word_id_list = 5; +} + +message BuffAssistStageAssistInfo { + uint32 producer_uid = 1; + uint32 peer_uid = 2; + uint32 peer_assist_level = 3; + uint32 assist_stage_id = 4; + repeated uint32 assist_word_id_list = 5; + repeated BuffAssistBuffSlot buff_slot_list = 6; + uint32 buff_pool_unique_id = 7; +} + +message BuffAssistActivity { + uint32 activity_id = 1; + uint32 buff_schedule_id = 2; + BuffAssistBuffPool wait_select_buff_pool = 3; + repeated BuffAssistBuffPool produce_buff_pool_list = 4; + repeated BuffAssistPlayerBuffSlot buff_slot_list = 5; + uint32 refresh_buff_pool_times = 6; + uint32 cur_stage_group_id = 7; + uint32 left_select_buff_times = 8; + repeated BuffAssistHistory history_list = 9; + uint32 assist_level = 10; + uint32 assist_num = 11; + uint32 be_assisted_num = 12; + uint32 publish_buff_pool_times = 13; +} + +// CmdID: 5942 +message BuffAssistGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + BuffAssistGetActivityRsp.Retcode retcode = 1; + BuffAssistActivity activity = 2; +} + +// CmdID: 5943 +message BuffAssistRefreshWaitSelectBuffPoolReq { +} + +// CmdID: 5944 +message BuffAssistRefreshWaitSelectBuffPoolRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NO_VALID_POOL = 3; + REFRESH_TIMES_LACK = 4; + SYSTEM_BUSY = 5; + } + + BuffAssistRefreshWaitSelectBuffPoolRsp.Retcode retcode = 1; + BuffAssistBuffPool buff_pool = 2; +} + +// CmdID: 5945 +message BuffAssistSelectBuffReq { + uint32 buff_slot_id = 1; + uint32 wait_select_buff_slot_id = 2; +} + +// CmdID: 5946 +message BuffAssistSelectBuffRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NO_BUFF = 3; + BUFF_SLOT_ERROR = 4; + BUFF_SLOT_REPLACED = 5; + WAIT_SELECT_BUFF_SLOT_ERROR = 6; + SELECT_TIMES_LACK = 7; + BUFF_SLOT_LOCKED = 8; + } + + BuffAssistSelectBuffRsp.Retcode retcode = 1; +} + +// CmdID: 5947 +message BuffAssistPublishBuffPoolReq { + uint32 pool_id = 1; + repeated uint32 assist_word_id_list = 2; + BuffAssistBuffPool buff_pool = 3; + bool is_anonymous = 4; +} + +// CmdID: 5948 +message BuffAssistPublishBuffPoolRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + ASSIST_WORD_ERROR = 3; + POOL_ERROR = 4; + BUFF_SCHEDULE_ERROR = 5; + BUFF_POOL_FULL = 6; + LACK_TIMES = 7; + REPEATED_PUBLISH = 8; + } + + BuffAssistPublishBuffPoolRsp.Retcode retcode = 1; + uint32 pool_id = 2; +} + +// CmdID: 5949 +message BuffAssistStageEndNotify { + uint32 stage_id = 1; + repeated BuffAssistBuffPool cur_stage_buff_pool_list = 2; +} + +// CmdID: 5950 +message BuffAssistRecvStageAssistInfoNotify { + uint32 activity_id = 1; + BuffAssistStageAssistInfo assist_info = 2; +} + +// CmdID: 5961 +message WaveRushGetActivityReq { +} + +message WaveRushStageScore { + uint32 stage_id = 1; + uint32 score = 2; +} + +message WaveRushBuff { + uint32 buff_id = 1; + uint32 buff_level = 2; +} + +message WaveRushBuffSuite { + uint32 suite_id = 1; + string suite_name = 2; + repeated uint32 buff_id_list = 3; +} + +message WaveRushActivity { + uint32 schedule_id = 1; + repeated WaveRushStageScore stage_score_list = 2; + repeated WaveRushBuff buff_list = 3; + repeated WaveRushBuffSuite buff_suite_list = 4; + uint32 active_buff_suite_id = 5; + repeated uint32 cur_daily_stage_id_list = 6; + uint32 daily_drop_material_num = 7; + uint32 daily_drop_limit_num = 8; +} + +// CmdID: 5962 +message WaveRushGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + WaveRushGetActivityRsp.Retcode retcode = 1; + WaveRushActivity activity = 2; +} + +// CmdID: 5963 +message WaveRushGetRankReq { + uint32 stage_id = 1; +} + +// CmdID: 5964 +message WaveRushGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + WaveRushGetRankRsp.Retcode retcode = 1; + uint32 stage_id = 2; + uint32 rank = 3; + uint32 rank_percent = 4; + RankShowData rank_data = 5; +} + +// CmdID: 5965 +message WaveRushLevelUpBuffReq { + uint32 buff_id = 1; +} + +// CmdID: 5966 +message WaveRushLevelUpBuffRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + CANNOT_UNLOCK_BY_LEVEL_UP = 3; + BUFF_ERROR = 4; + NOT_MEET_CONDITION = 5; + MATERIAL_LACK = 6; + } + + WaveRushLevelUpBuffRsp.Retcode retcode = 1; +} + +// CmdID: 5967 +message WaveRushUpdateBuffSuiteReq { + uint32 suite_id = 1; + string suite_name = 2; + repeated uint32 buff_id_list = 3; +} + +// CmdID: 5968 +message WaveRushUpdateBuffSuiteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + BUFF_ERROR = 2; + SLOT_LACK = 3; + SENSITIVE_WORDS = 4; + NAME_FORMAT_ERROR = 5; + SUITE_ID_ERROR = 6; + } + + WaveRushUpdateBuffSuiteRsp.Retcode retcode = 1; +} + +// CmdID: 5969 +message WaveRushActiveBuffSuiteReq { + uint32 suite_id = 1; +} + +// CmdID: 5970 +message WaveRushActiveBuffSuiteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + WaveRushActiveBuffSuiteRsp.Retcode retcode = 1; +} + +message MiniMonopolyMap { + uint32 map_id = 1; + repeated uint32 reward_taken_grid_list = 2; + uint32 current_grid = 3; + bool is_map_unlocked = 4; +} + +message MiniMonopolyActivity { + uint32 activity_id = 1; + repeated MiniMonopolyMap mini_monopoly_map_list = 2; + bool is_map_switchable = 3; +} + +// CmdID: 5981 +message MiniMonopolyGetDataReq { + uint32 activity_id = 1; +} + +// CmdID: 5982 +message MiniMonopolyGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + MiniMonopolyGetDataRsp.Retcode retcode = 1; + MiniMonopolyActivity mini_monopoly_activity = 2; +} + +// CmdID: 5983 +message MiniMonopolyThrowDiceReq { + uint32 sector_id = 1; + uint32 map_id = 2; + uint32 activity_id = 3; +} + +// CmdID: 5984 +message MiniMonopolyThrowDiceRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_DICE = 2; + NOT_OPEN = 3; + } + + MiniMonopolyThrowDiceRsp.Retcode retcode = 1; + uint32 map_id = 2; + uint32 dice_number = 3; + repeated RewardData reward_list = 4; + bool is_finish_round = 5; + uint32 activity_id = 6; + uint32 finish_grid_id = 7; + bool is_compensate_reward = 8; +} + +// CmdID: 5985 +message MiniMonopolyUseItemReq { + uint32 item_id = 1; + uint32 map_id = 2; + uint32 param = 3; + uint32 activity_id = 4; +} + +// CmdID: 5986 +message MiniMonopolyUseItemRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_ITEM = 2; + NO_DICE = 3; + NOT_OPEN = 4; + } + + MiniMonopolyUseItemRsp.Retcode retcode = 1; + uint32 map_id = 2; + uint32 dice_number = 3; + repeated RewardData reward_list = 4; + bool is_finish_round = 5; + uint32 activity_id = 6; + uint32 finish_grid_id = 7; + bool is_compensate_reward = 8; +} + +// CmdID: 5991 +message AvatarCultivateGetActivityReq { +} + +message AvatarCultivateActivityAreaDropRecord { + uint32 area_id = 1; + uint32 cur_drop_num = 2; +} + +message AvatarCultivateActivityRewardLineRecord { + uint32 stage_id = 1; + uint32 max_score = 2; +} + +// CmdID: 5992 +message AvatarCultivateGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + AvatarCultivateGetActivityRsp.Retcode retcode = 1; + repeated AvatarCultivateActivityAreaDropRecord drop_record_list = 2; + repeated AvatarCultivateActivityRewardLineRecord reward_line_record_list = 3; +} + +enum CmdTypeActivity2 { + CMD_TYPE_ACTIVITY_2_NONE = 0; + CMD_DREAM_GET_ACTIVITY_REQ = 5750; + CMD_DREAM_GET_ACTIVITY_RSP = 5751; + CMD_DREAM_OPEN_DREAM_REQ = 5752; + CMD_DREAM_OPEN_DREAM_RSP = 5753; + CMD_DREAM_GIVE_UP_DREAM_REQ = 5754; + CMD_DREAM_GIVE_UP_DREAM_RSP = 5755; + CMD_DREAM_EXCHANGE_SCORE_REQ = 5756; + CMD_DREAM_EXCHANGE_SCORE_RSP = 5757; + CMD_DREAM_TAKE_REWARD_REQ = 5758; + CMD_DREAM_TAKE_REWARD_RSP = 5759; + CMD_GET_THEME_WANTED_REQ = 5790; + CMD_GET_THEME_WANTED_RSP = 5791; + CMD_THEME_WANTED_REFRESH_TICKET_REQ = 5794; + CMD_THEME_WANTED_REFRESH_TICKET_RSP = 5795; + CMD_GLOBAL_POLLING_GET_DATA_REQ = 5811; + CMD_GLOBAL_POLLING_GET_DATA_RSP = 5812; + CMD_GLOBAL_POLLING_SUPPORT_REQ = 5813; + CMD_GLOBAL_POLLING_SUPPORT_RSP = 5814; + CMD_GLOBAL_POLLING_VOTE_REQ = 5815; + CMD_GLOBAL_POLLING_VOTE_RSP = 5816; + CMD_GET_COLLABORATION_SCHEDULE_REQ = 5831; + CMD_GET_COLLABORATION_SCHEDULE_RSP = 5832; + CMD_RANCH_GET_ACTIVITY_REQ = 5833; + CMD_RANCH_GET_ACTIVITY_RSP = 5834; + CMD_RANCH_SYNTHESIS_MONSTER_REQ = 5835; + CMD_RANCH_SYNTHESIS_MONSTER_RSP = 5836; + CMD_RANCH_FREE_MONSTER_REQ = 5837; + CMD_RANCH_FREE_MONSTER_RSP = 5838; + CMD_RANCH_ASSIGN_MONSTER_REQ = 5839; + CMD_RANCH_ASSIGN_MONSTER_RSP = 5840; + CMD_RANCH_FIRE_MONSTER_REQ = 5841; + CMD_RANCH_FIRE_MONSTER_RSP = 5842; + CMD_RANCH_TAKE_PRODUCT_REQ = 5843; + CMD_RANCH_TAKE_PRODUCT_RSP = 5844; + CMD_RANCH_GET_MONSTER_WIKI_REQ = 5845; + CMD_RANCH_GET_MONSTER_WIKI_RSP = 5846; + CMD_RANCH_SYNC_MONSTER_NOTIFY = 5847; + CMD_RANCH_DEL_MONSTER_NOTIFY = 5848; + CMD_RANCH_LOCK_MONSTER_SKILL_REQ = 5849; + CMD_RANCH_LOCK_MONSTER_SKILL_RSP = 5850; + CMD_RANCH_SET_BATTLE_MONSTER_REQ = 5851; + CMD_RANCH_SET_BATTLE_MONSTER_RSP = 5852; + CMD_GET_RESTAURANT_ACTIVITY_REQ = 5860; + CMD_GET_RESTAURANT_ACTIVITY_RSP = 5861; + CMD_LEVELUP_RESTAURANT_FACILITY_REQ = 5862; + CMD_LEVELUP_RESTAURANT_FACILITY_RSP = 5863; + CMD_ASSIGN_RESTAURANT_WORK_REQ = 5864; + CMD_ASSIGN_RESTAURANT_WORK_RSP = 5865; + CMD_CANCEL_RESTAURANT_WORK_REQ = 5866; + CMD_CANCEL_RESTAURANT_WORK_RSP = 5867; + CMD_TAKE_RESTAURANT_ORDER_REQ = 5868; + CMD_TAKE_RESTAURANT_ORDER_RSP = 5869; + CMD_DELIVER_RESTAURANT_QUEST_REQ = 5870; + CMD_DELIVER_RESTAURANT_QUEST_RSP = 5871; + CMD_ACCELERATE_RESTAURANT_WORK_REQ = 5872; + CMD_ACCELERATE_RESTAURANT_WORK_RSP = 5873; + CMD_NEWBIE_LEVEL_RUSH_PURCHASE_REQ = 5881; + CMD_NEWBIE_LEVEL_RUSH_PURCHASE_RSP = 5882; + CMD_NEWBIE_LEVEL_RUSH_TAKE_REWARD_REQ = 5883; + CMD_NEWBIE_LEVEL_RUSH_TAKE_REWARD_RSP = 5884; + CMD_GET_REWARD_LINE_ACTIVITY_REQ = 5890; + CMD_GET_REWARD_LINE_ACTIVITY_RSP = 5891; + CMD_TAKE_REWARD_LINE_ACTIVITY_REWARD_REQ = 5892; + CMD_TAKE_REWARD_LINE_ACTIVITY_REWARD_RSP = 5893; + CMD_MONSTER_CARD_GET_ACTIVITY_REQ = 5920; + CMD_MONSTER_CARD_GET_ACTIVITY_RSP = 5921; + CMD_MONSTER_CARD_LEVEL_UP_REQ = 5922; + CMD_MONSTER_CARD_LEVEL_UP_RSP = 5923; + CMD_MONSTER_CARD_STAR_UP_REQ = 5924; + CMD_MONSTER_CARD_STAR_UP_RSP = 5925; + CMD_MONSTER_CARD_LEARN_RANDOM_TALENT_REQ = 5926; + CMD_MONSTER_CARD_LEARN_RANDOM_TALENT_RSP = 5927; + CMD_MONSTER_CARD_SYNC_CARD_NOTIFY = 5928; + CMD_MONSTER_CARD_GET_TOWER_RANK_REQ = 5929; + CMD_MONSTER_CARD_GET_TOWER_RANK_RSP = 5930; + CMD_MONSTER_CARD_GET_BOSS_RANK_REQ = 5931; + CMD_MONSTER_CARD_GET_BOSS_RANK_RSP = 5932; + CMD_MONSTER_CARD_CONFIRM_RANDOM_TALENT_REQ = 5933; + CMD_MONSTER_CARD_CONFIRM_RANDOM_TALENT_RSP = 5934; + CMD_MONSTER_CARD_FRAGMENT_OVERFLOW_NOTIFY = 5935; + CMD_BUFF_ASSIST_GET_ACTIVITY_REQ = 5941; + CMD_BUFF_ASSIST_GET_ACTIVITY_RSP = 5942; + CMD_BUFF_ASSIST_REFRESH_WAIT_SELECT_BUFF_POOL_REQ = 5943; + CMD_BUFF_ASSIST_REFRESH_WAIT_SELECT_BUFF_POOL_RSP = 5944; + CMD_BUFF_ASSIST_SELECT_BUFF_REQ = 5945; + CMD_BUFF_ASSIST_SELECT_BUFF_RSP = 5946; + CMD_BUFF_ASSIST_PUBLISH_BUFF_POOL_REQ = 5947; + CMD_BUFF_ASSIST_PUBLISH_BUFF_POOL_RSP = 5948; + CMD_BUFF_ASSIST_STAGE_END_NOTIFY = 5949; + CMD_BUFF_ASSIST_RECV_STAGE_ASSIST_INFO_NOTIFY = 5950; + CMD_WAVE_RUSH_GET_ACTIVITY_REQ = 5961; + CMD_WAVE_RUSH_GET_ACTIVITY_RSP = 5962; + CMD_WAVE_RUSH_GET_RANK_REQ = 5963; + CMD_WAVE_RUSH_GET_RANK_RSP = 5964; + CMD_WAVE_RUSH_LEVEL_UP_BUFF_REQ = 5965; + CMD_WAVE_RUSH_LEVEL_UP_BUFF_RSP = 5966; + CMD_WAVE_RUSH_UPDATE_BUFF_SUITE_REQ = 5967; + CMD_WAVE_RUSH_UPDATE_BUFF_SUITE_RSP = 5968; + CMD_WAVE_RUSH_ACTIVE_BUFF_SUITE_REQ = 5969; + CMD_WAVE_RUSH_ACTIVE_BUFF_SUITE_RSP = 5970; + CMD_MINI_MONOPOLY_GET_DATA_REQ = 5981; + CMD_MINI_MONOPOLY_GET_DATA_RSP = 5982; + CMD_MINI_MONOPOLY_THROW_DICE_REQ = 5983; + CMD_MINI_MONOPOLY_THROW_DICE_RSP = 5984; + CMD_MINI_MONOPOLY_USE_ITEM_REQ = 5985; + CMD_MINI_MONOPOLY_USE_ITEM_RSP = 5986; + CMD_AVATAR_CULTIVATE_GET_ACTIVITY_REQ = 5991; + CMD_AVATAR_CULTIVATE_GET_ACTIVITY_RSP = 5992; +} + +enum DreamUnlockType { + DREAM_UNLOCK_TYPE_NONE = 0; + DREAM_UNLOCK_TYPE_NO_NEWBIE_SCHEDULE = 1; + DREAM_UNLOCK_TYPE_HAS_NOT_FINISHED_DREAM = 2; + DREAM_UNLOCK_TYPE_GOBACK_LEVEL = 3; + DREAM_UNLOCK_TYPE_AVATAR_LOCKED = 4; + DREAM_UNLOCK_TYPE_HAS_NOT_GOT_ITEM = 5; +} + +enum RanchMonsterSkillType { + RANCH_MONSTER_SKILL_TYPE_NONE = 0; + RANCH_MONSTER_SKILL_ACTIVE = 1; + RANCH_MONSTER_SKILL_PASSIVE = 2; + RANCH_MONSTER_SKILL_FAST_PRODUCTION = 3; + RANCH_MONSTER_SKILL_RARITY_UP = 4; +} + +enum RanchNotifyType { + RANCH_NOTIFY_UNKNOWN = 0; + RANCH_NOTIFY_SYNTHESIS = 1; + RANCH_NOTIFY_STAGE_END = 2; + RANCH_NOTIFY_LOCK = 3; +} + +enum RanchRarityType { + RANCH_RARITY_TYPE_NONE = 0; + RANCH_LEGENDARY = 4; +} + +enum RanchSynthesisType { + RANCH_SYNTHESIS_TYPE_NONE = 0; + RANCH_SYNSHESIS_WITHOUT_FORMULA = 1; + RANCH_SYNSHESIS_WITH_FORMULA = 2; +} + +enum RanchMonsterSourceType { + RANCH_MONSTER_SOURCE_TYPE_NONE = 0; + RANCH_MONSTER_SOURCE_STAGE = 1; + RANCH_MONSTER_SOURCE_MATERIAL = 2; + RANCH_MONSTER_SOURCE_SYNTHESIS_WITH_FOMULA = 3; + RANCH_MONSTER_SOURCE_PRODUCT = 4; + RANCH_MONSTER_SOURCE_SYNTHESIS_WITHOUT_FORMULA = 5; + RANCH_MONSTER_SOURCE_GM = 6; +} + +enum WeekDayActivityOpenType { + WEEK_DAY_ACTIVITY_OPEN_DAILY = 0; + WEEK_DAY_ACTIVITY_OPEN_WEEK_DAY = 1; +} + +enum RestaurantWorkStatus { + RESTAURANT_WORK_STATUS_NONE = 0; + RESTAURANT_WORK_NOT_BEGIN = 1; + RESTAURANT_WORK_DOING = 2; + RESTAURANT_WORK_PAUSE = 3; +} + +enum RestaurantRoomType { + RESTAURANT_ROOM_TYPE_NONE = 0; + RESTAURANT_ROOM_STORE = 1; + RESTAURANT_ROOM_KITCHEN = 2; + RESTAURANT_ROOM_CHECKOUT = 3; +} + +enum RestaurantSkillType { + RESTAURANT_SKILL_TYPE_NONE = 0; + RESTAURANT_SKILL_COOK_ID_SPEED_UP = 1; + RESTAURANT_SKILL_COOK_TAG_SPEED_UP = 2; + RESTAURANT_SKILL_COOK_ALL_SPEED_UP = 3; + RESTAURANT_SKILL_SELL_ID_SPEED_UP = 4; + RESTAURANT_SKILL_SELL_TAG_SPEED_UP = 5; + RESTAURANT_SKILL_SELL_ALL_SPEED_UP = 6; + RESTAURANT_SKILL_SELL_ID_PRICE_UP = 7; + RESTAURANT_SKILL_SELL_TAG_PRICE_UP = 8; + RESTAURANT_SKILL_SELL_ALL_PRICE_UP = 9; +} + +enum MonsterCardRandomTalentConfirmType { + MONSTER_CARD_RANDOM_TALENT_CONFIRM_TYPE_NONE = 0; + MONSTER_CARD_RANDOM_TALENT_CONFIRM_TYPE_CONFIRM = 1; + MONSTER_CARD_RANDOM_TALENT_CONFIRM_TYPE_ABANDON = 2; +} + +enum MonsterCardStageType { + MONSTER_CARD_STAGE_TYPE_NONE = 0; + MONSTER_CARD_STAGE_TYPE_NORMAL = 1; + MONSTER_CARD_STAGE_TYPE_BOSS = 2; + MONSTER_CARD_STAGE_TYPE_EXP = 3; + MONSTER_CARD_STAGE_TYPE_TOWER = 4; + MONSTER_CARD_STAGE_TYPE_PVP = 5; + MONSTER_CARD_STAGE_TYPE_BOSS_NEW = 6; + MONSTER_CARD_STAGE_TYPE_SPECIAL_DEFEND = 7; + MONSTER_CARD_STAGE_TYPE_SPECIAL_HEALTH = 8; + MONSTER_CARD_STAGE_TYPE_SPECIAL_SPEED = 9; + MONSTER_CARD_STAGE_TYPE_SPECIAL_BOSS = 10; + MONSTER_CARD_STAGE_TYPE_ELITE = 11; +} + +enum MonsterCardSyncType { + MONSTER_CARD_SYNC_TYPE_NONE = 0; + MONSTER_CARD_SYNC_TYPE_LEVEL_UP = 1; + MONSTER_CARD_SYNC_TYPE_STAR_UP = 2; + MONSTER_CARD_SYNC_TYPE_LEARN_TALENT = 3; + MONSTER_CARD_SYNC_TYPE_NEW_CARD = 4; + MONSTER_CARD_SYNC_TYPE_REFRESH = 5; + MONSTER_CARD_SYNC_TYPE_ADD_FRAGMENT = 6; +} + +enum MonsterCardSkillType { + MONSTER_CARD_SKILL_TYPE_NONE = 0; + MONSTER_CARD_SKILL_TYPE_ATK = 1; + MONSTER_CARD_SKILL_TYPE_LB = 2; + MONSTER_CARD_SKILL_TYPE_AUTO = 3; + MONSTER_CARD_SKILL_TYPE_PASSIVE = 4; + MONSTER_CARD_SKILL_TYPE_WEATHER = 5; + MONSTER_CARD_SKILL_TYPE_TALENT = 6; + MONSTER_CARD_SKILL_TYPE_UNLOCK = 99; +} + +enum MonsterCardLevelLimitType { + MONSTER_CARD_LEVEL_LIMIT_TYPE_NONE = 0; + MONSTER_CARD_LEVEL_LIMIT_TYPE_PASS_RPG_SITE = 1; +} + +enum MonsterCardSelectCardCondition { + MONSTER_CARD_SELECT_CARD_CONDITION_NONE = 0; + MONSTER_CARD_SELECT_CARD_CONDITION_LEVEL_GREATER_EQUAL = 1; +} + +enum BuffAssistBuffProducerType { + BUFF_ASSIST_BUFF_PRODUCER_TYPE_NONE = 0; + BUFF_ASSIST_BUFF_PRODUCER_PLAYER = 1; + BUFF_ASSIST_BUFF_PRODUCER_NPC = 2; + BUFF_ASSIST_BUFF_PRODUCER_ROBOT = 3; +} + +enum BuffAssistType { + BUFF_ASSIST_TYPE_NONE = 0; + BUFF_ASSIST_PRODUCER = 1; + BUFF_ASSIST_CONSUMER = 2; +} + +enum WaveRushStageType { + WAVE_RUSH_STAGE_TYPE_NONE = 0; + WAVE_RUSH_STAGE_MAINLINE = 1; + WAVE_RUSH_STAGE_DAILY = 2; + WAVE_RUSH_STAGE_TOWER = 3; +} + +enum WaveRushLimitConditionType { + WAVE_RUSH_LIMIT_CONDITION_NONE = 0; + WAVE_RUSH_LIMIT_CONDITION_PRE_SITE = 1; +} + +enum WaveRushBuffType { + WAVE_RUSH_BUFF_TYPE_NONE = 0; + WAVE_RUSH_CORE_BUFF = 1; + WAVE_RUSH_NORMAL_BUFF = 2; + WAVE_RUSH_WEATHER_BUFF = 3; + WAVE_RUSH_ATTR_BUFF = 4; +} + +enum MiniMonopolyItemType { + MINI_MONOPOLY_ITEM_TYPE_NONE = 0; + MINI_MONOPOLY_ITEM_CONTROLLABLE_DICE = 1; +} + +enum AvatarCultivateActivityStageType { + AVATAR_CULTIVATE_ACTIVITY_STAGE_TYPE_NONE = 0; + AVATAR_CULTIVATE_ACTIVITY_STAGE_TYPE_SWEEP = 1; + AVATAR_CULTIVATE_ACTIVITY_STAGE_TYPE_CHALLENGE = 2; + AVATAR_CULTIVATE_ACTIVITY_STAGE_TYPE_NORMAL = 3; +} + +message ThemeTowerSection { + uint32 section_id = 1; + uint32 section_level = 2; + uint32 drop_material_num = 3; +} + +message ThemeTowerStageScore { + uint32 stage_id = 1; + uint32 score = 2; +} + +message ThemeTowerActivity { + uint32 schedule_id = 1; + repeated ThemeTowerStageScore stage_score_list = 2; + repeated ThemeTowerSection section_list = 3; + repeated uint32 has_passed_stage_id_list = 4; +} + +// CmdID: 7070 +message ThemeTowerGetActivityReq { +} + +// CmdID: 7071 +message ThemeTowerGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + ThemeTowerGetActivityRsp.Retcode retcode = 1; + ThemeTowerActivity activity = 2; +} + +// CmdID: 7072 +message ThemeTowerGetRankReq { + uint32 schedule_id = 1; +} + +// CmdID: 7073 +message ThemeTowerGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ThemeTowerGetRankRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + uint32 rank = 3; + uint32 rank_percent = 4; + RankShowData rank_data = 5; +} + +// CmdID: 7074 +message ThemeTowerLevelUpSectionReq { + uint32 section_id = 1; +} + +// CmdID: 7075 +message ThemeTowerLevelUpSectionRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + SECTION_ERROR = 3; + SECTION_LEVEL_ERROR = 4; + MATERIAL_LACK = 5; + } + + ThemeTowerLevelUpSectionRsp.Retcode retcode = 1; +} + +// CmdID: 7062 +message ShigureKiraAddConcertProgressReq { + uint32 activity_id = 1; + uint32 target_progress = 2; +} + +// CmdID: 7063 +message ShigureKiraAddConcertProgressRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + TARGET_PROGRESS_ERROR = 3; + MATERIAL_LACK = 4; + } + + ShigureKiraAddConcertProgressRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 target_progress = 3; +} + +message ShigureKiraActivity { + uint32 activity_id = 1; + uint32 progress = 2; +} + +// CmdID: 7060 +message ShigureKiraGetActivityReq { + uint32 activity_id = 1; +} + +// CmdID: 7061 +message ShigureKiraGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ShigureKiraGetActivityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + ShigureKiraActivity shigure_kira_activity = 3; +} + +message SusannaTrialMentorProgress { + uint32 area_id = 1; + repeated uint32 has_taken_progress_config_id_list = 2; + uint32 progress = 3; + uint32 last_site_id = 4; +} + +message SusannaTrialActivity { + uint32 activity_id = 1; + repeated SusannaTrialMentorProgress mentor_progress_list = 2; +} + +// CmdID: 7050 +message SusannaTrialGetActivityReq { + uint32 activity_id = 1; +} + +// CmdID: 7051 +message SusannaTrialGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + SusannaTrialGetActivityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + SusannaTrialActivity susanna_trial_activity = 3; +} + +// CmdID: 7052 +message SusannaTrialTakeMentorProgressRewardReq { + uint32 activity_id = 1; + uint32 area_id = 2; +} + +// CmdID: 7053 +message SusannaTrialTakeMentorProgressRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + SusannaTrialTakeMentorProgressRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 area_id = 3; + RewardData reward = 4; +} + +// CmdID: 7054 +message SusannaTrialTakePlotRewardReq { + uint32 activity_id = 1; + uint32 area_id = 2; + uint32 config_id = 3; +} + +// CmdID: 7055 +message SusannaTrialTakePlotRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LACK_PROGRESS = 2; + } + + SusannaTrialTakePlotRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 area_id = 3; + uint32 config_id = 4; + RewardData reward = 5; +} + +message PonMachineItemData { + uint32 id = 1; + uint32 num = 2; +} + +// CmdID: 7100 +message GetPonMachineActivityReq { + uint32 activity_id = 1; +} + +// CmdID: 7101 +message GetPonMachineActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + } + + GetPonMachineActivityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated PonMachineItemData has_got_item_list = 3; +} + +// CmdID: 7102 +message StartPonMachineReq { + uint32 activity_id = 1; + uint32 gacha_num = 2; +} + +// CmdID: 7103 +message StartPonMachineRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + MATERIAL_LACK = 3; + GACHA_NUM_EXCEED_ITEM_NUM = 4; + INVALID_GACHA_NUM = 5; + } + + StartPonMachineRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 gacha_num = 3; + repeated uint32 item_id_list = 4; +} + +// CmdID: 7111 +message CarnivalLotteryBetReq { + uint32 activity_id = 1; +} + +// CmdID: 7112 +message CarnivalLotteryBetRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_MATERIAL = 2; + NOT_OPEN = 3; + CLOSED = 4; + } + + CarnivalLotteryBetRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 bet_num = 3; +} + +// CmdID: 7113 +message CarnivalLotteryGetInfoReq { + uint32 activity_id = 1; +} + +message CarnivalLotteryParticipationReward { + uint32 reward_id = 1; + uint32 reward_num = 2; +} + +// CmdID: 7114 +message CarnivalLotteryGetInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + CarnivalLotteryGetInfoRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 bet_num = 3; + uint32 special_reward = 4; + repeated CarnivalLotteryParticipationReward has_taken_reward_list = 5; + bool is_special_reward_taken = 6; + bool is_participation_reward_taken = 7; +} + +// CmdID: 7115 +message CarnivalLotteryTakeSpecialRewardReq { + uint32 activity_id = 1; +} + +// CmdID: 7116 +message CarnivalLotteryTakeSpecialRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_REWARD = 2; + HAS_TAKEN = 3; + } + + CarnivalLotteryTakeSpecialRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + RewardData special_reward = 3; +} + +// CmdID: 7117 +message CarnivalLotteryOpenRewardReq { + uint32 activity_id = 1; +} + +// CmdID: 7118 +message CarnivalLotteryOpenRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + CarnivalLotteryOpenRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + RewardData participation_reward = 3; +} + +// CmdID: 7121 +message TiledGameLunaTrapReq { + uint32 activity_id = 1; + uint32 trap_type = 2; +} + +// CmdID: 7122 +message TiledGameLunaTrapRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + TiledGameLunaTrapRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 trap_type = 3; + uint32 player_health = 4; + bool is_player_dead = 5; +} + +// CmdID: 7123 +message GetTiledGameLunaReq { + uint32 activity_id = 1; +} + +// CmdID: 7124 +message GetTiledGameLunaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetTiledGameLunaRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 player_health = 3; +} + +// CmdID: 7125 +message TiledGameLunaBattleReq { + uint32 activity_id = 1; + uint32 level = 2; + uint32 monster_id = 3; + uint32 monster_unique_id = 4; + uint32 map_id = 5; + bool is_only_check = 6; +} + +// CmdID: 7126 +message TiledGameLunaBattleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LEVEL_ERROR = 2; + } + + TiledGameLunaBattleRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 player_health = 3; + bool is_player_dead = 4; +} + +// CmdID: 7129 +message TiledGameLunaHealReq { + uint32 activity_id = 1; + uint32 heal_health = 2; + bool is_heal_to_max_health = 3; +} + +// CmdID: 7130 +message TiledGameLunaHealRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + TiledGameLunaHealRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 7141 +message MinionClashGetActivityReq { + uint32 activity_id = 1; +} + +message MinionClashTalent { + uint32 talent_id = 1; + uint32 level = 2; +} + +message MinionClashCard { + uint32 card_id = 1; + uint32 star = 2; + uint32 fragment_num = 3; +} + +message MinionClashBuild { + uint32 branch = 1; + repeated uint32 card_id_list = 2; +} + +message MinionClashActivity { + uint32 activity_id = 1; + repeated Material daily_drop_record_list = 2; + uint32 activity_level = 3; + uint32 cur_exp = 4; + repeated MinionClashTalent talent_list = 5; + repeated MinionClashCard card_list = 6; + repeated MinionClashBuild build_list = 7; + uint32 remain_skill_point = 8; +} + +// CmdID: 7142 +message MinionClashGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + MinionClashGetActivityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + MinionClashActivity activity = 3; +} + +// CmdID: 7143 +message MinionClashGetGachaInfoReq { + uint32 activity_id = 1; + bool is_all = 2; + repeated uint32 pool_id_list = 3; +} + +message MinionClashGachaRecord { + uint32 card_id = 1; + uint32 num = 2; +} + +message MinionClashGachaPool { + uint32 pool_id = 1; + repeated MinionClashGachaRecord has_got_card_list = 2; + uint32 no_baodi_times = 3; +} + +// CmdID: 7144 +message MinionClashGetGachaInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + CONDITION_MISMATCH = 3; + } + + MinionClashGetGachaInfoRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated MinionClashGachaPool gacha_pool_list = 3; + uint32 gacha_random = 4; +} + +// CmdID: 7145 +message MinionClashDoGachaReq { + uint32 activity_id = 1; + uint32 pool_id = 2; + uint32 gacha_random = 3; + MinionClashDoGachaType do_gacha_type = 4; +} + +message MinionClashGachaResult { + uint32 card_id = 1; + repeated Material transformed_material_list = 2; +} + +// CmdID: 7146 +message MinionClashDoGachaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + EMPTY_POOL = 3; + GACHA_RANDOM_MISMATCH = 4; + GACHA_COIN_LACK = 5; + CONDITION_MISMATCH = 6; + } + + MinionClashDoGachaRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 gacha_random = 3; + repeated uint32 got_card_id_list = 4; +} + +// CmdID: 7147 +message MinionClashLevelUpTalentReq { + uint32 activity_id = 1; + uint32 talent_id = 2; + uint32 target_level = 3; +} + +// CmdID: 7148 +message MinionClashLevelUpTalentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + SKILL_POINT_LACK = 3; + CONDITION_MISMATCH = 4; + BRANCH_LOCKED = 5; + TARGET_LEVEL_ERROR = 6; + } + + MinionClashLevelUpTalentRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 talent_id = 3; + uint32 target_level = 4; +} + +// CmdID: 7149 +message MinionClashReportStageBeginReq { + uint32 activity_id = 1; + MinionClashBuild build = 2; + uint32 stage_id = 3; +} + +// CmdID: 7150 +message MinionClashReportStageBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + BUILD_MISMATCH = 3; + TOO_FEW_CARDS = 4; + CARD_ERROR = 5; + } + + MinionClashReportStageBeginRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 stage_id = 3; +} + +// CmdID: 7151 +message MinionClashUpdateBuildReq { + uint32 activity_id = 1; + MinionClashBuild build = 2; +} + +// CmdID: 7152 +message MinionClashUpdateBuildRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + BRANCH_LOCKED = 3; + CARD_ERROR = 4; + CARD_NUM_LIMIT = 5; + } + + MinionClashUpdateBuildRsp.Retcode retcode = 1; + uint32 activity_id = 2; + MinionClashBuild build = 3; +} + +// CmdID: 7153 +message MinionClashStarUpCardReq { + uint32 activity_id = 1; + uint32 card_id = 2; + uint32 target_star = 3; +} + +// CmdID: 7154 +message MinionClashStarUpCardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + FRAGMENT_LACK = 3; + STAR_LIMIT = 4; + CARD_NOT_EXIST = 5; + TARGET_STAR_ERROR = 6; + } + + MinionClashStarUpCardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 card_id = 3; + uint32 target_star = 4; +} + +// CmdID: 7161 +message ThelemaActivityGetActivityReq { + uint32 activity_id = 1; +} + +message ThelemaActivityNpcInfo { + uint32 npc_id = 1; + uint32 finished_phase_num = 2; +} + +// CmdID: 7162 +message ThelemaActivityGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + ThelemaActivityGetActivityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated ThelemaActivityNpcInfo npc_info_list = 3; +} + +// CmdID: 7163 +message ThelemaActivityFinishQuestionReq { + uint32 activity_id = 1; + uint32 npc_id = 2; + uint32 phase = 3; +} + +// CmdID: 7164 +message ThelemaActivityFinishQuestionRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + PHASE_ERROR = 3; + NPC_ERROR = 4; + ORG_ERROR = 5; + } + + ThelemaActivityFinishQuestionRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 npc_id = 3; + uint32 phase = 4; +} + +message MatchThreePlusRole { + uint32 role_id = 1; + uint32 level = 2; +} + +message MatchThreePlusPiece { + uint32 piece_id = 1; + uint32 star = 2; +} + +message MatchThreePlusCombination { + uint32 role_id = 1; + repeated uint32 piece_id_list = 2; +} + +message MatchThreePlusActivity { + uint32 activity_id = 1; + repeated MatchThreePlusRole role_list = 2; + repeated MatchThreePlusPiece piece_list = 3; + repeated MatchThreePlusCombination combination_list = 4; + uint32 has_got_daily_material_num = 5; +} + +// CmdID: 7171 +message MatchThreePlusGetActivityReq { +} + +// CmdID: 7172 +message MatchThreePlusGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + MatchThreePlusGetActivityRsp.Retcode retcode = 1; + MatchThreePlusActivity activity = 2; +} + +// CmdID: 7173 +message MatchThreePlusRoleLevelUpReq { + uint32 role_id = 1; + uint32 target_level = 2; +} + +// CmdID: 7174 +message MatchThreePlusRoleLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + INVALID_ROLE = 2; + TARGET_LEVEL_ERROR = 3; + MATERIAL_LACK = 4; + CONDITION_NOT_MEET = 5; + NOT_OPEN = 6; + } + + MatchThreePlusRoleLevelUpRsp.Retcode retcode = 1; + uint32 role_id = 2; +} + +// CmdID: 7175 +message MatchThreePlusGachaDisplayReq { +} + +message MatchThreePlusGachaInfo { + uint32 piece_id = 1; + uint32 gacha_get_num = 2; + uint32 total_gacha_num = 3; +} + +message MatchThreePlusGachaPool { + uint32 pool_id = 1; + repeated MatchThreePlusGachaInfo gacha_info_list = 2; +} + +// CmdID: 7176 +message MatchThreePlusGachaDisplayRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + MatchThreePlusGachaDisplayRsp.Retcode retcode = 1; + uint32 gacha_random = 2; + repeated MatchThreePlusGachaPool pool_list = 3; +} + +// CmdID: 7177 +message MatchThreePlusGachaReq { + uint32 gacha_random = 1; +} + +// CmdID: 7178 +message MatchThreePlusGachaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + RANDOM_ERROR = 2; + MATERIAL_LACK = 3; + NOT_OPEN = 4; + NO_POOL_ITEMS = 5; + POOL_ITEM_NEED_ROLE = 6; + } + + MatchThreePlusGachaRsp.Retcode retcode = 1; + uint32 new_gacha_random = 2; + MatchThreePlusPiece piece = 3; + repeated MatchThreePlusGachaPool pool_list = 4; + uint32 need_role_id = 5; +} + +// CmdID: 7179 +message MatchThreePlusRoomBeginReq { + uint32 room_id = 1; + MatchThreePlusCombination combination = 2; +} + +// CmdID: 7180 +message MatchThreePlusRoomBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + ROLE_ERROR = 3; + PIECE_ERROR = 4; + INVALID_ROOM = 5; + NOT_IN_SITE = 6; + ROLE_RESTRICT = 7; + PIECE_SLOT_LOCK = 8; + } + + MatchThreePlusRoomBeginRsp.Retcode retcode = 1; + uint32 room_id = 2; + uint32 dynamic_level = 3; + string transaction_str = 4; +} + +// CmdID: 7181 +message MatchThreePlusRoomEndReq { + enum Status { + WIN = 0; + LOSE = 1; + ABANDON = 2; + } + + uint32 room_id = 1; + MatchThreePlusRoomEndReq.Status status = 2; + uint32 score = 3; +} + +// CmdID: 7182 +message MatchThreePlusRoomEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + ROOM_ERROR = 3; + } + + MatchThreePlusRoomEndRsp.Retcode retcode = 1; + uint32 room_id = 2; + uint32 status = 3; + uint32 score = 4; + bool is_first_win = 5; + RewardData reward_data = 6; + repeated DropItem daily_drop_item_list = 7; + bool is_daily_pass = 8; +} + +// CmdID: 7183 +message MatchThreePlusGetRankReq { + uint32 room_id = 1; +} + +// CmdID: 7184 +message MatchThreePlusGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + INVALID_ROOM = 3; + } + + MatchThreePlusGetRankRsp.Retcode retcode = 1; + uint32 room_id = 2; + RankShowData rank_data = 3; + uint32 rank_percent = 4; + uint32 rank = 5; +} + +// CmdID: 7185 +message MatchThreePlusUpdateCombinationReq { + repeated MatchThreePlusCombination combination_list = 1; +} + +// CmdID: 7186 +message MatchThreePlusUpdateCombinationRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + INVALID_ROLE = 3; + INVALID_PIECE = 4; + PIECE_OWNER_RESTRICT = 5; + PIECE_NUM_LIMIT = 6; + REPEAT_ROLE = 7; + PIECE_SLOT_LOCK = 8; + } + + MatchThreePlusUpdateCombinationRsp.Retcode retcode = 1; + repeated MatchThreePlusCombination combination_list = 2; +} + +// CmdID: 7187 +message MatchThreePlusSyncAutoUnlockNotify { + repeated uint32 role_id_list = 1; + repeated uint32 piece_id_list = 2; +} + +// CmdID: 7191 +message TiledGameSrpgGetActivityReq { + uint32 activity_id = 1; +} + +// CmdID: 7192 +message TiledGameSrpgGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + TiledGameSrpgGetActivityRsp.Retcode retcode = 1; + TiledGameSrpgActivity activity = 2; +} + +message TiledGameSrpgAvatar { + uint32 avatar_id = 1; + uint32 level = 2; + uint32 hp = 3; + uint32 trial_id = 4; + bool is_avatar_material_got = 5; +} + +message TiledGameSrpgBattleInfo { + uint32 battle_id = 1; + repeated TiledGameSrpgAvatar avatar_list = 2; + string transaction_str = 4; +} + +message TiledGameSrpgFinishedBattleRecord { + uint32 battle_id = 1; + repeated uint32 finished_challenge_id_list = 2; +} + +message TiledGameSrpgActivity { + uint32 activity_id = 1; + uint32 explore_level = 2; + uint32 explore_exp = 3; + uint32 daily_explore_exp = 4; + repeated TiledGameSrpgFinishedBattleRecord finished_battle_record_list = 5; + repeated TiledGameSrpgAvatar avatar_list = 6; + TiledGameSrpgBattleInfo story_battle = 7; + TiledGameSrpgBattleInfo challenge_battle = 8; + repeated uint32 cur_daily_quest_mission_group_list = 9; + repeated uint32 taken_reward_bp_list = 10; + uint32 daily_explore_exp_limit = 11; +} + +// CmdID: 7193 +message TiledGameSrpgAvatarLevelUpReq { + uint32 activity_id = 1; + uint32 avatar_id = 2; + uint32 target_level = 3; +} + +// CmdID: 7194 +message TiledGameSrpgAvatarLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + TARGET_LEVEL_ERROR = 3; + RPG_FLAG_LIMIT = 4; + MATERIAL_LACK = 5; + } + + TiledGameSrpgAvatarLevelUpRsp.Retcode retcode = 1; + TiledGameSrpgAvatar avatar = 2; +} + +// CmdID: 7195 +message TiledGameSrpgBattleBeginReq { + uint32 activity_id = 1; + uint32 battle_id = 2; + repeated uint32 avatar_list = 3; + uint32 enter_battle_type = 4; +} + +// CmdID: 7196 +message TiledGameSrpgBattleBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + IN_BATTLE = 3; + AVATAR_ERROR = 4; + MAP_ERROR = 5; + } + + TiledGameSrpgBattleBeginRsp.Retcode retcode = 1; + TiledGameSrpgBattleInfo battle = 2; +} + +// CmdID: 7197 +message TiledGameSrpgBattleEndReq { + uint32 activity_id = 1; + TiledGameSrpgBattleInfo battle = 2; + StageEndStatus end_status = 3; + repeated uint32 finished_challenge_id_list = 4; + uint32 round_num = 5; + uint32 total_time = 6; +} + +// CmdID: 7198 +message TiledGameSrpgBattleEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NO_BATTLE = 3; + } + + TiledGameSrpgBattleEndRsp.Retcode retcode = 1; + RewardData reward = 2; +} + +// CmdID: 7199 +message TiledGameSrpgTakeBpRewardReq { + uint32 activity_id = 1; + uint32 bp_id = 2; +} + +// CmdID: 7200 +message TiledGameSrpgTakeBpRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + HAS_TAKEN = 3; + } + + TiledGameSrpgTakeBpRewardRsp.Retcode retcode = 1; + RewardData reward_data = 2; + uint32 bp_id = 3; +} + +message GameRoomStageScoreRecord { + uint32 stage_id = 1; + uint32 score = 2; +} + +// CmdID: 7211 +message GameRoomActivityGetActivityReq { + uint32 activity_id = 1; +} + +// CmdID: 7212 +message GameRoomActivityGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GameRoomActivityGetActivityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated uint32 passed_stage_id_list = 3; + repeated GameRoomStageScoreRecord stage_score_record_list = 4; +} + +// CmdID: 7213 +message GameRoomActivityGetRankReq { + uint32 activity_id = 1; + uint32 stage_id = 2; +} + +// CmdID: 7214 +message GameRoomActivityGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GameRoomActivityGetRankRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 stage_id = 3; + uint32 rank = 4; + uint32 rank_percent = 5; + RankShowData rank_data = 6; +} + +message QRtsTalent { + uint32 index = 1; + repeated uint32 talent_id_list = 2; + uint32 source_type = 3; + uint32 selected_talent_id = 4; + uint32 talent_param = 5; +} + +message QRtsBuilding { + uint32 building_point_id = 1; + uint32 building_id = 2; + uint32 building_param = 3; +} + +message QRtsGame { + uint32 cur_stage_id = 1; + uint32 role_id = 2; + repeated QRtsBuilding building_list = 3; + uint32 gold_num = 4; + uint32 round = 5; + uint32 total_get_gold_num = 6; + repeated QRtsTalent selected_talent_list = 7; + QRtsTalent wait_select_talent = 8; + uint32 score = 9; + uint32 total_time = 10; + uint32 total_cost_gold_num = 11; + uint32 night_total_cost_gold_num = 12; + uint32 game_transaction_id = 13; + uint32 round_transaction_id = 14; + uint32 last_quit_score = 15; +} + +// CmdID: 7221 +message QRtsActivityGetActivityReq { + uint32 activity_id = 1; +} + +// CmdID: 7222 +message QRtsActivityGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + QRtsActivityGetActivityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + QRtsGame mainline_game = 3; + QRtsGame challenge_game = 4; + repeated uint32 buff_id_list = 5; +} + +// CmdID: 7223 +message QRtsActivityFinishRoundReq { + uint32 activity_id = 1; + uint32 round = 2; + uint32 get_gold_num = 3; + uint32 cost_gold_num = 4; + repeated uint32 safe_building_point_id_list = 5; + uint32 score = 6; + uint32 total_time = 7; + uint32 gold_num = 8; + uint32 total_get_gold_num = 9; + uint32 total_cost_gold_num = 10; + uint32 night_total_cost_gold_num = 11; +} + +// CmdID: 7224 +message QRtsActivityFinishRoundRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_CUR_ROUND = 3; + GOLD_NUM_ERROR = 4; + OVER_MAX_ROUND = 5; + } + + QRtsActivityFinishRoundRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 round = 3; + uint32 total_gold_num = 4; +} + +// CmdID: 7225 +message QRtsActivityResetRoundReq { + uint32 activity_id = 1; + uint32 round = 2; +} + +// CmdID: 7226 +message QRtsActivityResetRoundRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_CUR_ROUND = 3; + } + + QRtsActivityResetRoundRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 round = 3; +} + +// CmdID: 7227 +message QRtsActivityBuildReq { + uint32 activity_id = 1; + uint32 building_point_id = 2; + uint32 building_id = 3; +} + +// CmdID: 7228 +message QRtsActivityBuildRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + LACK_GOLD = 3; + LACK_BASE_LEVEL = 4; + NO_PRE_BUILDING = 5; + BUILDING_LOCKED = 6; + BUILDING_POINT_ERROR = 7; + } + + QRtsActivityBuildRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 building_point_id = 3; + uint32 building_id = 4; +} + +// CmdID: 7229 +message QRtsActivitySelectTalentReq { + uint32 activity_id = 1; + QRtsTalent select_talent = 2; +} + +// CmdID: 7230 +message QRtsActivitySelectTalentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + INDEX_ERROR = 3; + TALENT_SELECTED = 4; + NOT_IN_LIST = 5; + TALENT_LOCKED = 6; + } + + QRtsActivitySelectTalentRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 7231 +message QRtsActivitySyncGameNotify { + QRtsGame game = 1; +} + +// CmdID: 7232 +message QRtsActivitySweepReq { + uint32 activity_id = 1; +} + +// CmdID: 7233 +message QRtsActivitySweepRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + LACK_TICKET = 3; + } + + QRtsActivitySweepRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 7234 +message QRtsActivityUpgradeBuffReq { + uint32 activity_id = 1; + uint32 buff_id = 2; +} + +// CmdID: 7235 +message QRtsActivityUpgradeBuffRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + BUFF_LOCKED = 3; + LACK_MATERIAL = 4; + PREV_FLOOR_UNCOMPLETED = 5; + ALREADY_UPGRADED = 6; + } + + QRtsActivityUpgradeBuffRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 buff_id = 3; +} + +// CmdID: 7236 +message QRtsActivityClearGameReq { + uint32 activity_id = 1; + uint32 stage_id = 2; +} + +// CmdID: 7237 +message QRtsActivityClearGameRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + QRtsActivityClearGameRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 stage_id = 3; +} + +// CmdID: 7238 +message QRtsActivityWishReq { + uint32 activity_id = 1; +} + +// CmdID: 7239 +message QRtsActivityWishRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + LACK_GOLD = 3; + WISH_NOT_SELECTED = 4; + LACK_BASE_LEVEL = 5; + WISH_EMPTY = 6; + } + + QRtsActivityWishRsp.Retcode retcode = 1; + uint32 activity_id = 2; + QRtsTalent talent = 3; +} + +// CmdID: 7241 +message GetBurdenAlleviationV2Req { +} + +// CmdID: 7242 +message GetBurdenAlleviationV2Rsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetBurdenAlleviationV2Rsp.Retcode retcode = 1; + uint32 schedule_id = 2; +} + +message BurdenAlleviationV2ParamOwQuest { + uint32 map_id = 1; + uint32 quest_id = 2; + repeated uint32 challenge_list = 3; +} + +message BurdenAlleviationV2ParamThemeWanted { + uint32 stage_id = 1; + uint32 sweep_times = 2; + bool is_extra_drop = 3; +} + +message BurdenAlleviationV2ParamExamination { +} + +message BurdenAlleviationV2ParamArmadaStageScoreActivity { + uint32 stage_id = 1; +} + +message BurdenAlleviationV2ParamRaidReplace { + uint32 activity_id = 1; +} + +// CmdID: 7243 +message TriggerBurdenAlleviationV2Req { + uint32 schedule_id = 1; + uint32 alleviation_id = 2; + repeated BurdenAlleviationV2ParamOwQuest ow_param_list = 3; + BurdenAlleviationV2ParamThemeWanted theme_wanted_param = 4; + BurdenAlleviationV2ParamExamination examination_param = 5; + repeated BurdenAlleviationV2ParamArmadaStageScoreActivity armada_stage_param_list = 6; + BurdenAlleviationV2ParamRaidReplace raid_replace_param = 7; +} + +// CmdID: 7244 +message TriggerBurdenAlleviationV2Rsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + MATERIAL_LACK = 3; + ALLEVIATION_ID_ERROR = 4; + FINISHED_ALL_EXAMINATION = 5; + SCHEDULE_MISMATCH = 6; + OW_MAP_ERROR = 7; + OW_QUEST_ERROR = 8; + REPEATED_OW_QUEST = 9; + FEATURE_CLOSED = 10; + STAGE_ERROR = 11; + THEME_WANTED_TICKET_LACK = 12; + NOT_IN_ARMADA = 13; + ARMADA_ACTIVITY_NOT_OPEN = 14; + ARMADA_STAGE_HIGH_SCORE = 15; + REPEATED_ARMADA_STAGE = 16; + OW_FAST_PASS_INVALID = 17; + RAID_REPLACE_NOT_OPEN = 18; + RAID_REPLACE_COMPLETE = 19; + } + + TriggerBurdenAlleviationV2Rsp.Retcode retcode = 1; + uint32 schedule_id = 2; + uint32 alleviation_id = 3; + RewardData reward = 4; + repeated DropItem drop_list = 5; + repeated DropItem extra_drop_list = 6; +} + +message FutariBattleStage { + uint32 stage_id = 1; + uint32 pass_floor = 2; + uint32 score = 3; +} + +message FutariBattleGroup { + uint32 group_id = 1; + repeated FutariBattleStage stage_list = 2; +} + +// CmdID: 7245 +message FutariBattleActivityGetActivityReq { +} + +// CmdID: 7246 +message FutariBattleActivityGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + FEATURE_CLOSED = 3; + } + + FutariBattleActivityGetActivityRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + repeated FutariBattleGroup group_list = 3; +} + +// CmdID: 7247 +message FutariBattleActivityGetRankReq { + uint32 schedule_id = 1; + uint32 group_id = 2; +} + +// CmdID: 7248 +message FutariBattleActivityGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + FEATURE_CLOSED = 3; + } + + FutariBattleActivityGetRankRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + uint32 group_id = 3; + uint32 rank = 4; + uint32 rank_percent = 5; + RankShowData rank_data = 6; +} + +// CmdID: 7249 +message FutariBattleActivityPassStageFloorReq { + uint32 stage_id = 1; + uint32 floor_id = 2; +} + +// CmdID: 7250 +message FutariBattleActivityPassStageFloorRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_STAGE = 2; + STAGE_INVALID = 3; + FLOOR_INVALID = 4; + FEATURE_CLOSED = 5; + } + + FutariBattleActivityPassStageFloorRsp.Retcode retcode = 1; +} + +message ReActivityTile { + uint32 tower_id = 1; + uint32 floor_id = 2; +} + +// CmdID: 7251 +message ReActivityGetDataReq { + uint32 activity_id = 1; +} + +message ReActivity { + uint32 activity_id = 1; + repeated ReActivityTile finished_tile_list = 2; + repeated uint32 unlocked_area_list = 3; +} + +// CmdID: 7252 +message ReActivityGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + ReActivityGetDataRsp.Retcode retcode = 1; + ReActivity activity = 2; +} + +// CmdID: 7253 +message ReActivityTileBeginReq { + uint32 activity_id = 1; + ReActivityTile tile = 2; + uint32 last_max_save_point_id = 3; + uint32 last_skill_use_times = 4; + uint32 last_collection_num = 5; +} + +// CmdID: 7254 +message ReActivityTileBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + AREA_LOCKED = 3; + } + + ReActivityTileBeginRsp.Retcode retcode = 1; + uint32 activity_id = 2; + ReActivityTile tile = 3; +} + +// CmdID: 7255 +message ReActivityTileEndReq { + uint32 activity_id = 1; + ReActivityTile tile = 2; + StageEndStatus end_status = 3; + uint32 max_save_point_id = 4; + uint32 skill_use_times = 5; + uint32 collection_num = 6; +} + +// CmdID: 7256 +message ReActivityTileEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + ReActivityTileEndRsp.Retcode retcode = 1; + uint32 activity_id = 2; + ReActivityTile tile = 3; + RewardData reward = 4; +} + +// CmdID: 7260 +message ResidentActivityGetDataReq { +} + +// CmdID: 7261 +message ResidentActivityGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LEVEL_LACK = 2; + } + + ResidentActivityGetDataRsp.Retcode retcode = 1; + repeated uint32 unlocked_resident_activity_id = 2; +} + +// CmdID: 7262 +message ResidentActivityUnlockActivityReq { + uint32 id = 1; +} + +// CmdID: 7263 +message ResidentActivityUnlockActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_UNLOCKED = 2; + NOT_OPEN = 3; + LEVEL_LACK = 4; + MATERIAL_LACK = 5; + } + + ResidentActivityUnlockActivityRsp.Retcode retcode = 1; + uint32 id = 2; +} + +// CmdID: 7270 +message QRtsActivityGetRankReq { + uint32 activity_id = 1; + uint32 stage_id = 2; +} + +// CmdID: 7271 +message QRtsActivityGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NO_RANK = 3; + } + + QRtsActivityGetRankRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 stage_id = 3; + uint32 rank = 4; + uint32 rank_percent = 5; + RankShowData rank_data = 6; +} + +message MonsterPvpCard { + uint32 unique_id = 1; + uint32 star = 2; + uint32 fragment_num = 3; + repeated uint32 skill_list = 4; +} + +message WaitSelectSkillData { + uint32 unique_id = 1; + uint32 skill_idx = 2; + uint32 old_skill_id = 3; + uint32 new_skill_id = 4; + uint32 cost_material_id = 5; +} + +message MonsterCardPvpProductivty { + uint32 last_calc_time = 1; + uint32 total_minute = 2; + uint32 exp_per_minute = 3; + uint32 book_1_per_minute = 4; + uint32 book_2_per_minute = 5; + uint32 book_3_per_minute = 6; + uint32 total_exp = 7; + uint32 total_book_1 = 8; + uint32 total_book_2 = 9; + uint32 total_book_3 = 10; +} + +// CmdID: 7275 +message MonsterCardPvpGetActivityReq { + uint32 activity_id = 1; + uint32 schedule_id = 2; +} + +message MonsterCardPvpCustomTeam { + uint32 team_idx = 1; + repeated uint32 card_id_list = 2; + repeated uint32 support_card_id_list = 3; +} + +message MonsterCardPvpActivity { + uint32 activity_id = 1; + uint32 level = 2; + uint32 exp = 3; + repeated MonsterPvpCard monster_card_list = 4; + WaitSelectSkillData wait_select_skill_data = 5; + uint32 elo_score = 6; + repeated MonsterCardPvpPlayerData opponent_list = 7; + repeated uint32 defend_card_unique_id_list = 8; + uint32 opponent_refresh_times = 9; + uint32 pvp_combat_day_times = 10; + repeated uint32 robot_id_list = 11; + MonsterCardPvpProductivty productivity_data = 12; + uint32 daily_combat_reward_num = 13; + repeated MonsterCardPvpCustomTeam custom_team_list = 14; + uint32 cur_combat_random = 15; + repeated uint32 defend_support_card_unique_id_list = 16; + bool is_skip_progress = 17; + repeated uint32 has_got_card_material_list = 18; +} + +// CmdID: 7276 +message MonsterCardPvpGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 3; + } + + MonsterCardPvpGetActivityRsp.Retcode retcode = 1; + MonsterCardPvpActivity monster_card_pvp_activity = 2; +} + +// CmdID: 7277 +message MonsterCardPvpSelectInitCardVecReq { + uint32 activity_id = 1; + uint32 select_idx = 2; +} + +// CmdID: 7278 +message MonsterCardPvpSelectInitCardVecRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 3; + ERROR_INDEX = 4; + } + + MonsterCardPvpSelectInitCardVecRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 7279 +message MonsterCardPvpStarUpCardReq { + uint32 activity_id = 1; + uint32 unique_id = 2; +} + +// CmdID: 7280 +message MonsterCardPvpStarUpCardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + FRAGMENT_LACK = 3; + LEVEL_LACK = 4; + } + + MonsterCardPvpStarUpCardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 unique_id = 3; +} + +// CmdID: 7281 +message MonsterCardPvpOpenSkillPackReq { + uint32 activity_id = 1; + uint32 unique_id = 2; + uint32 cost_material_id = 3; + uint32 skill_idx = 4; + bool is_skip_prev = 5; +} + +// CmdID: 7282 +message MonsterCardPvpOpenSkillPackRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + MATERIAL_LACK = 3; + INDEX_ERROR = 4; + NEED_TO_CONFIRM = 5; + NO_SKILL = 6; + } + + MonsterCardPvpOpenSkillPackRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 unique_id = 3; + uint32 skill_idx = 4; + uint32 old_skill_id = 5; + uint32 new_skill_id = 6; + uint32 cost_material_id = 7; + bool is_skip_prev = 8; +} + +// CmdID: 7283 +message MonsterCardPvpSelectNewSkillReq { + uint32 activity_id = 1; + bool is_select = 2; +} + +// CmdID: 7284 +message MonsterCardPvpSelectNewSkillRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NO_NEED_SELECT = 3; + } + + MonsterCardPvpSelectNewSkillRsp.Retcode retcode = 1; + uint32 activity_id = 2; + bool is_select = 3; + WaitSelectSkillData wait_select_skill_data = 4; +} + +// CmdID: 7285 +message MonsterCardPvpGetPvpOpponentReq { + uint32 activity_id = 1; + uint32 schedule_id = 2; + bool is_need_refresh = 3; +} + +// CmdID: 7286 +message MonsterCardPvpGetPvpOpponentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + MATCH_ROBOT_SUCC = 3; + MATCH_ROBOT_FAIL = 4; + REDIS_ERROR = 5; + GET_DATA = 6; + PVP_NOT_OPEN = 7; + TIMES_LACK = 8; + } + + MonsterCardPvpGetPvpOpponentRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated MonsterCardPvpPlayerData opponent_list = 3; + repeated uint32 robot_id_list = 4; + uint32 rank = 5; + uint32 elo_score = 6; + uint32 combat_random = 7; +} + +// CmdID: 7287 +message MonsterCardPvpFinishCombatReq { + uint32 activity_id = 1; + bool is_win = 2; + uint32 combat_random = 3; + MonsterCardPvpFinishCombatType finish_type = 4; + uint32 combat_time = 5; +} + +// CmdID: 7288 +message MonsterCardPvpFinishCombatRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + PVP_NOT_OPEN = 3; + ROBOT_ERROR = 4; + OPPONENT_ERROR = 5; + REDIS_ERROR = 6; + DATA_ERROR = 7; + TIMES_LACK = 8; + RANDOM_MISMATCH = 9; + } + + MonsterCardPvpFinishCombatRsp.Retcode retcode = 1; + uint32 activity_id = 2; + RewardData reward_data = 3; + uint32 elo_score = 4; + uint32 max_elo_score = 5; + bool is_win = 6; + uint32 combat_random = 7; + MonsterCardPvpFinishCombatType finish_type = 8; + uint32 old_elo_score = 9; +} + +// CmdID: 7289 +message MonsterCardPvpUpdatePlayerInfoReq { + uint32 activity_id = 1; + repeated uint32 monster_card_list = 2; + uint32 schedule_id = 3; + string nickname = 4; + uint32 level = 5; + repeated MonsterPvpCardBriefData card_data_list = 6; + repeated uint32 support_card_list = 7; + repeated MonsterPvpCardBriefData support_card_data_list = 8; +} + +// CmdID: 7290 +message MonsterCardPvpUpdatePlayerInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + PVP_NOT_OPEN = 3; + UPDATE_ERROR = 4; + } + + MonsterCardPvpUpdatePlayerInfoRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated uint32 monster_card_list = 3; + repeated uint32 support_card_list = 4; +} + +// CmdID: 7291 +message MonsterCardPvpGetDefendDataReq { + uint32 activity_id = 1; + uint32 schedule_id = 2; +} + +// CmdID: 7292 +message MonsterCardPvpGetDefendDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + PVP_NOT_OPEN = 3; + REDIS_ERROR = 4; + } + + MonsterCardPvpGetDefendDataRsp.Retcode retcode = 1; + uint32 activity_id = 2; + MonsterCardPvpCombatHistoryData combat_history = 3; +} + +// CmdID: 7293 +message MonsterCardPvpGetPvpRankReq { + uint32 activity_id = 1; + uint32 schedule_id = 2; +} + +// CmdID: 7294 +message MonsterCardPvpGetPvpRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + PVP_NOT_OPEN = 3; + REDIS_ERROR = 4; + } + + MonsterCardPvpGetPvpRankRsp.Retcode retcode = 1; + uint32 activity_id = 2; + RankShowData rank_data = 3; + uint32 rank_percent = 4; + uint32 rank = 5; +} + +// CmdID: 7295 +message MonsterCardPvpTakeProductRewardReq { + uint32 activity_id = 1; +} + +// CmdID: 7296 +message MonsterCardPvpTakeProductRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + PRODUCTIVITY_NOT_BEGIN = 3; + } + + MonsterCardPvpTakeProductRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 add_exp_num = 3; + uint32 add_book_1_num = 4; + uint32 add_book_2_num = 5; + uint32 add_book_3_num = 6; + uint32 convert_material_num = 7; +} + +// CmdID: 7297 +message MonsterCardPvpGetGachaDisplayReq { + uint32 activity_id = 1; +} + +// CmdID: 7298 +message MonsterCardPvpGetGachaDisplayRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + MonsterCardPvpGetGachaDisplayRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 gacha_random = 3; + repeated uint32 valid_pool_id_list = 4; +} + +// CmdID: 7299 +message MonsterCardPvpGachaReq { + uint32 activity_id = 1; + uint32 gacha_random = 2; + uint32 pool_id = 3; + uint32 times = 4; +} + +// CmdID: 7300 +message MonsterCardPvpGachaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + POOL_ERROR = 3; + GACHA_RANDOM_MISMATCH = 4; + TIMES_ERROR = 5; + TIMES_LACK = 6; + MATERIAL_LACK = 7; + } + + MonsterCardPvpGachaRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 gacha_random = 3; + repeated uint32 material_id_list = 4; +} + +// CmdID: 7301 +message MonsterCardPvpStartCombatReq { + uint32 activity_id = 1; + MonsterCardPvpCombatData combat_data = 2; + uint32 combat_random = 3; +} + +// CmdID: 7302 +message MonsterCardPvpStartCombatRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + PVP_NOT_OPEN = 3; + ROBOT_ERROR = 4; + OPPONENT_ERROR = 5; + REDIS_ERROR = 6; + DATA_ERROR = 7; + TIMES_LACK = 8; + RANDOM_MISMATCH = 9; + } + + MonsterCardPvpStartCombatRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 combat_random = 3; +} + +// CmdID: 7303 +message MonsterCardPvpCustomTeamReq { + uint32 activity_id = 1; + MonsterCardPvpCustomTeam custom_team = 2; + uint32 site_id = 3; +} + +// CmdID: 7304 +message MonsterCardPvpCustomTeamRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + CARD_NOT_EXIST = 3; + TEAM_LEN_ERROR = 4; + IDX_ERROR = 5; + COST_OVERFLOW = 6; + CARD_REPEATED = 7; + SUPPORT_CARD_NOT_EXIST = 8; + SUPPORT_CARD_REPEATED = 9; + SUPPORT_CARD_NUM_ERROR = 10; + SITE_LOCKED = 11; + } + + MonsterCardPvpCustomTeamRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 site_id = 3; +} + +// CmdID: 7305 +message MonsterCardPvpSkipReq { + uint32 activity_id = 1; + bool is_abandon = 2; +} + +// CmdID: 7306 +message MonsterCardPvpSkipRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_SUPPORT = 3; + MISSION_NOT_FINISH = 4; + ALREADY_USED = 5; + TALE_NOT_FOUND = 6; + MEDAL_NOT_OWNED = 7; + } + + MonsterCardPvpSkipRsp.Retcode retcode = 1; + uint32 activity_id = 2; + bool is_abandon = 3; + RewardData reward_data = 4; +} + +// CmdID: 7311 +message MonsterMorphGetActivityReq { + uint32 activity_id = 1; +} + +message MonsterMorphMonster { + uint32 monster_id = 1; + uint32 level = 2; + uint32 star = 3; +} + +message MonsterMorphMinionAffix { + uint32 affix_id = 1; +} + +message MonsterMorphMinionAffixGroup { + uint32 unique_id = 1; + repeated MonsterMorphMinionAffix affix_list = 2; +} + +message MonsterMorphMinion { + uint32 minion_id = 1; + uint32 star = 2; + repeated MonsterMorphMinionAffix affix_list = 3; + repeated MonsterMorphMinionAffixGroup wait_select_affix_group_list = 4; +} + +message MonsterMorphActivity { + uint32 activity_id = 1; + repeated MonsterMorphMonster monster_list = 2; + repeated MonsterMorphMinion minion_list = 3; + repeated uint32 unlocked_skill_list = 4; +} + +// CmdID: 7312 +message MonsterMorphGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + MonsterMorphGetActivityRsp.Retcode retcode = 1; + MonsterMorphActivity activity = 2; +} + +// CmdID: 7313 +message MonsterMorphLevelUpMonsterReq { + uint32 activity_id = 1; + uint32 monster_id = 2; + uint32 target_level = 3; +} + +// CmdID: 7314 +message MonsterMorphLevelUpMonsterRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + MONSTER_NOT_EXIST = 3; + TARGET_LEVEL_ERROR = 4; + MATERIAL_LACK = 5; + } + + MonsterMorphLevelUpMonsterRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 monster_id = 3; + uint32 target_level = 4; +} + +// CmdID: 7315 +message MonsterMorphStarUpMonsterReq { + uint32 activity_id = 1; + uint32 monster_id = 2; + uint32 target_star = 3; +} + +// CmdID: 7316 +message MonsterMorphStarUpMonsterRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + MONSTER_NOT_EXIST = 3; + TARGET_STAR_ERROR = 4; + MATERIAL_LACK = 5; + MINION_LOCKED = 6; + } + + MonsterMorphStarUpMonsterRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 monster_id = 3; + uint32 target_star = 4; +} + +// CmdID: 7317 +message MonsterMorphRefineMinionAffixReq { + MonsterMorphMinionRefineType type = 1; + uint32 activity_id = 2; + uint32 minion_id = 3; + repeated uint32 lock_affix_index_list = 4; + bool is_retry = 5; +} + +// CmdID: 7318 +message MonsterMorphRefineMinionAffixRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + MATERIAL_LACK = 3; + LOCK_INDEX_ERROR = 4; + MINION_NOT_EXIST = 5; + MINION_WAIT_AFFIX_EXIST = 6; + } + + MonsterMorphRefineMinionAffixRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 minion_id = 3; + repeated MonsterMorphMinionAffixGroup affix_group_list = 4; +} + +// CmdID: 7319 +message MonsterMorphSelectNewMinionAffixReq { + uint32 activity_id = 1; + uint32 minion_id = 2; + bool is_select = 3; + uint32 select_unique_id = 4; +} + +// CmdID: 7320 +message MonsterMorphSelectNewMinionAffixRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + MINION_NOT_EXIST = 3; + SELECT_EMPTY = 4; + TOO_FAST = 5; + WAIT_AFFIX_EMPTY = 6; + WAIT_AFFIX_NOT_EXIST = 7; + } + + MonsterMorphSelectNewMinionAffixRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 minion_id = 3; + bool is_select = 4; + uint32 select_unique_id = 5; +} + +// CmdID: 7321 +message MonsterMorphGetRankReq { + uint32 activity_id = 1; + uint32 stage_id = 2; +} + +// CmdID: 7322 +message MonsterMorphGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NO_RANK = 3; + } + + MonsterMorphGetRankRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 stage_id = 3; + uint32 rank = 4; + uint32 rank_percent = 5; + RankShowData rank_data = 6; +} + +// CmdID: 7323 +message MonsterMorphSweepReq { + uint32 activity_id = 1; + uint32 stage_id = 2; +} + +// CmdID: 7324 +message MonsterMorphSweepRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STAGE_TYPE_ERROR = 3; + STAGE_NOT_EXIST = 4; + STAGE_NOT_PASS = 5; + CHALLENGE_NUM_LACK = 6; + TICIKET_LACK = 7; + DROP_ITEM_ERROR = 8; + } + + MonsterMorphSweepRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 stage_id = 3; + repeated DropItem drop_item_list = 4; +} + +// CmdID: 7331 +message CrystalLotteryGetMainDataReq { + uint32 activity_id = 1; +} + +// CmdID: 7332 +message CrystalLotteryGetMainDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + FEATURE_CLOSED = 3; + TOO_FREQUENT = 4; + } + + CrystalLotteryGetMainDataRsp.Retcode retcode = 1; + uint32 activity_id = 2; + bool is_enroll = 3; + bool is_reward_taken = 4; + uint32 reward_hcoin_num = 5; +} + +// CmdID: 7333 +message CrystalLotteryEnrollReq { + uint32 activity_id = 1; +} + +// CmdID: 7334 +message CrystalLotteryEnrollRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + HAS_ENROLL = 3; + ENROLL_NOT_OPEN = 4; + MISSION_NOT_FINISH = 5; + FEATURE_CLOSED = 6; + } + + CrystalLotteryEnrollRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 7335 +message CrystalLotteryTakeRewardReq { + uint32 activity_id = 1; +} + +// CmdID: 7336 +message CrystalLotteryTakeRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + NOT_ENROLL = 3; + HAS_TAKEN = 4; + FEATURE_CLOSED = 5; + ACTIVITY_NOT_EXIST = 6; + REWARD_NOT_OPEN = 7; + SETTLE_REWARD_FAIL = 8; + } + + CrystalLotteryTakeRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 hcoin = 3; +} + +message TiledGameInspiration { + uint32 inspiration_id = 1; + uint32 level = 2; + uint32 fail_count = 3; +} + +message TiledGameFurnitureInfo { + uint32 id = 1; + uint32 pos_x = 2; + uint32 pos_y = 3; + uint32 direction = 4; + uint32 location = 5; +} + +message TiledGameInnStaffScheduleInfo { + TiledGameInnRole role = 1; + repeated uint32 staff_id_list = 2; +} + +message TiledGameInnManagementMenu { + uint32 dish_id = 1; + uint32 num = 2; + bool is_up = 3; +} + +message TiledGameInnSiteInfo { + uint32 site_id = 1; + uint32 pass_times = 2; +} + +// CmdID: 7341 +message TiledGameInnGetActivityReq { + uint32 activity_id = 1; +} + +message TiledGameInnCustomerTendency { + uint32 taste = 1; + uint32 cook_techniques = 2; +} + +message TiledGameInnBuyRecord { + uint32 goods_id = 1; + uint32 num = 2; +} + +message TiledGameInnStaff { + uint32 staff_id = 1; + uint32 status = 2; +} + +// CmdID: 7342 +message TiledGameInnGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + TiledGameInnGetActivityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 level = 3; + uint32 today_get_food_num = 4; + repeated TiledGameInnSiteInfo site_info_list = 5; + repeated uint32 dish_list = 7; + repeated GenericItemNum furniture_list = 8; + repeated TiledGameInspiration inspiration_list = 9; + repeated TiledGameFurnitureInfo furniture_info_list = 10; + uint32 inn_level = 11; + TiledGameInnCustomerTendency today_customer_tendency = 12; + repeated GenericItemNum unlocked_food_list = 14; + repeated TiledGameInnBuyRecord buy_record_list = 15; + repeated TiledGameInnStaff staff_list = 16; + uint32 left_travel_times = 17; + uint32 cur_daily_mission = 18; + uint32 left_drop_food_num = 19; + uint32 left_purchase_budget = 20; + uint32 accumulate_earn_gold = 21; +} + +// CmdID: 7343 +message TiledGameInnBuyFurnitureReq { + uint32 activity_id = 1; + uint32 shop_goods_id = 2; + uint32 num = 3; +} + +// CmdID: 7344 +message TiledGameInnBuyFurnitureRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NUM_LIMIT = 3; + MATERIAL_LACK = 4; + GOODS_NOT_EXIST = 5; + LEVEL_LIMIT = 6; + } + + TiledGameInnBuyFurnitureRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 7345 +message TiledGameInnEditInnReq { + uint32 activity_id = 1; + repeated TiledGameFurnitureInfo furniture_info_list = 2; +} + +// CmdID: 7346 +message TiledGameInnEditInnRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + FURNITURE_LACK = 3; + FURNITURE_ERROR = 4; + FURNITURE_NUM_LIMIT = 5; + TOO_OFTEN = 6; + } + + TiledGameInnEditInnRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 7347 +message TiledGameInnStartManagementReq { + uint32 activity_id = 1; + repeated TiledGameInnStaffScheduleInfo staff_schedule_info_list = 2; + repeated TiledGameInnManagementMenu menu_list = 3; +} + +// CmdID: 7348 +message TiledGameInnStartManagementRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + ROLE_INVALID = 3; + ROLE_REPEATED = 4; + STAFF_REPEATED = 5; + STAFF_NUM_LIMITED = 6; + STAFF_LOCKED = 7; + DISH_LOCKED = 8; + FOOD_LACK = 9; + DISH_NUM_LIMIT = 10; + DISH_REPEATED = 11; + } + + TiledGameInnStartManagementRsp.Retcode retcode = 1; + uint32 activity_id = 2; + string management_transaction_str = 3; +} + +// CmdID: 7349 +message TiledGameInnStopManagementReq { + uint32 activity_id = 1; + uint32 gold_earned = 2; + repeated TiledGameInnManagementMenu sold_dish_list = 3; + string management_transaction_str = 4; + uint32 fee = 5; + uint32 sold_dishes_revenue = 6; + uint32 other_revenue = 7; + uint32 sold_exquisite_dish_num = 8; + repeated uint32 customer_mood_list = 9; +} + +// CmdID: 7350 +message TiledGameInnStopManagementRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_MANAGEMENT = 3; + DISH_LOCKED = 4; + DISH_REPEATED = 5; + DISH_NUM_LIMIT = 6; + FOOD_LACK = 7; + } + + TiledGameInnStopManagementRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 total_purchase_cost = 3; + uint32 real_purchase_cost = 4; +} + +// CmdID: 7351 +message TiledGameInnStartTravelReq { + uint32 activity_id = 1; + uint32 site_id = 2; + repeated uint32 staff_id_list = 3; + repeated uint32 up_food_list = 4; + repeated uint32 trigger_event_list = 5; +} + +// CmdID: 7352 +message TiledGameInnStartTravelRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + SITE_LOCKED = 3; + IN_TRAVEL = 4; + STAFF_MISMATCH = 5; + STAFF_LOCKED = 6; + UP_FOOD_INVALID = 7; + FOOD_DROP_NUM_LIMIT = 8; + NO_OBTAINED_FOOD = 9; + STAFF_NUM_LIMIT = 10; + TRAVEL_TIMES_LIMIT = 11; + NO_STAFF = 12; + STAFF_REPEATED = 13; + } + + TiledGameInnStartTravelRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated GenericItemNum up_food_extra_num_list = 3; +} + +// CmdID: 7353 +message TiledGameInnEndTravelReq { + uint32 activity_id = 1; +} + +// CmdID: 7354 +message TiledGameInnEndTravelRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + TiledGameInnEndTravelRsp.Retcode retcode = 1; + uint32 activity_id = 2; + RewardData reward = 3; +} + +// CmdID: 7355 +message TiledGameInnLevelUpReq { + uint32 activity_id = 1; +} + +// CmdID: 7356 +message TiledGameInnLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + PRE_MISSION_NOT_FINISH = 3; + } + + TiledGameInnLevelUpRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 level = 3; +} + +// CmdID: 7357 +message TiledGameInnDevelopDishReq { + uint32 activity_id = 1; + uint32 inspiration_id = 2; + repeated uint32 food_list = 3; +} + +// CmdID: 7358 +message TiledGameInnDevelopDishRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + INSPIRATION_NOT_EXIST = 3; + FOOD_LACK = 4; + DISH_UNLOCKED = 5; + } + + TiledGameInnDevelopDishRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 succ_developed_dish_id = 3; + TiledGameInspiration inspiration_info = 4; +} + +// CmdID: 7359 +message TiledGameInnLevelUpInnReq { + uint32 activity_id = 1; + uint32 inn_level = 2; +} + +// CmdID: 7360 +message TiledGameInnLevelUpInnRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + INN_LEVEL_MISMATCH = 3; + MANAGE_LEVEL_LIMIT = 4; + MATERIAL_LACK = 5; + } + + TiledGameInnLevelUpInnRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 inn_level = 3; +} + +message TiledGameInnRedisBriefData { + repeated TiledGameFurnitureInfo furniture_info_list = 1; +} + +// CmdID: 7361 +message TiledGameInnSyncInnDataNotify { + uint32 schedule_id = 1; + TiledGameInnRedisBriefData inn_brief_data = 2; +} + +// CmdID: 7362 +message TiledGameInnGetOtherInnDataReq { + uint32 activity_id = 1; + uint32 target_uid = 2; + uint32 schedule_id = 3; +} + +// CmdID: 7363 +message TiledGameInnGetOtherInnDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + TARGET_NOT_FRIEND = 3; + } + + TiledGameInnGetOtherInnDataRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 target_uid = 3; + repeated TiledGameFurnitureInfo furniture_info_list = 4; +} + +// CmdID: 7364 +message TiledGameInnAddLeftDropNumNotify { + uint32 activity_id = 1; + uint32 add_left_drop_num = 2; +} + +// CmdID: 7375 +message TowerDefenseGetActivityReq { + uint32 activity_id = 1; +} + +message TowerDefenseActivity { + uint32 activity_id = 1; + repeated TowerDefenseAvatar avatar_list = 2; + repeated TowerDefenseBattle cur_battle_list = 3; + repeated TowerDefenseFinishedBattleRecord finished_battle_record_list = 4; +} + +message TowerDefenseAvatar { + uint32 avatar_id = 1; +} + +message TowerDefenseBattle { + uint32 battle_id = 1; + repeated TowerDefenseBattleTurn saved_turn_list = 2; + string transaction_str = 3; +} + +message TowerDefenseBattleTurn { + uint32 turn = 1; + bytes client_ext = 2; +} + +message TowerDefenseFinishedBattleRecord { + uint32 battle_id = 1; + uint32 floor = 2; + uint32 score = 3; +} + +// CmdID: 7376 +message TowerDefenseGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + TowerDefenseGetActivityRsp.Retcode retcode = 1; + TowerDefenseActivity activity = 2; + uint32 activity_id = 3; +} + +// CmdID: 7377 +message TowerDefenseSaveTurnReq { + uint32 activity_id = 1; + uint32 battle_id = 2; + uint32 turn = 3; + bytes client_ext = 4; +} + +// CmdID: 7378 +message TowerDefenseSaveTurnRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + SIZE_LIMIT = 3; + } + + TowerDefenseSaveTurnRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 7379 +message TowerDefenseBattleBeginReq { + uint32 activity_id = 1; + uint32 battle_id = 2; + repeated uint32 avatar_list = 3; +} + +// CmdID: 7380 +message TowerDefenseBattleBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + IN_BATTLE = 3; + AVATAR_ERROR = 4; + } + + TowerDefenseBattleBeginRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 battle_id = 3; + uint32 tower_id = 4; + uint32 floor_id = 5; +} + +// CmdID: 7381 +message TowerDefenseBattleEndReq { + enum BattleEndStatus { + BATTLE_END_STATUS_NONE = 0; + BATTLE_WIN = 1; + BATTLE_EXIT = 2; + BATTLE_NOT_MEET_CONDITION = 3; + } + + uint32 activity_id = 1; + uint32 battle_id = 2; + TowerDefenseBattleEndReq.BattleEndStatus end_status = 3; + uint32 floor = 4; + uint32 score = 5; +} + +// CmdID: 7382 +message TowerDefenseBattleEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NO_BATTLE = 3; + NO_TOWER = 4; + } + + TowerDefenseBattleEndRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 battle_id = 3; + RewardData first_reward_data = 4; + uint32 tower_id = 5; + uint32 floor_id = 6; +} + +enum CmdTypeActivity3 { + CMD_TYPE_ACTIVITY_3_NONE = 0; + CMD_SUSANNA_TRIAL_GET_ACTIVITY_REQ = 7050; + CMD_SUSANNA_TRIAL_GET_ACTIVITY_RSP = 7051; + CMD_SUSANNA_TRIAL_TAKE_MENTOR_PROGRESS_REWARD_REQ = 7052; + CMD_SUSANNA_TRIAL_TAKE_MENTOR_PROGRESS_REWARD_RSP = 7053; + CMD_SUSANNA_TRIAL_TAKE_PLOT_REWARD_REQ = 7054; + CMD_SUSANNA_TRIAL_TAKE_PLOT_REWARD_RSP = 7055; + CMD_SHIGURE_KIRA_GET_ACTIVITY_REQ = 7060; + CMD_SHIGURE_KIRA_GET_ACTIVITY_RSP = 7061; + CMD_SHIGURE_KIRA_ADD_CONCERT_PROGRESS_REQ = 7062; + CMD_SHIGURE_KIRA_ADD_CONCERT_PROGRESS_RSP = 7063; + CMD_THEME_TOWER_GET_ACTIVITY_REQ = 7070; + CMD_THEME_TOWER_GET_ACTIVITY_RSP = 7071; + CMD_THEME_TOWER_GET_RANK_REQ = 7072; + CMD_THEME_TOWER_GET_RANK_RSP = 7073; + CMD_THEME_TOWER_LEVEL_UP_SECTION_REQ = 7074; + CMD_THEME_TOWER_LEVEL_UP_SECTION_RSP = 7075; + CMD_GET_PON_MACHINE_ACTIVITY_REQ = 7100; + CMD_GET_PON_MACHINE_ACTIVITY_RSP = 7101; + CMD_START_PON_MACHINE_REQ = 7102; + CMD_START_PON_MACHINE_RSP = 7103; + CMD_CARNIVAL_LOTTERY_BET_REQ = 7111; + CMD_CARNIVAL_LOTTERY_BET_RSP = 7112; + CMD_CARNIVAL_LOTTERY_GET_INFO_REQ = 7113; + CMD_CARNIVAL_LOTTERY_GET_INFO_RSP = 7114; + CMD_CARNIVAL_LOTTERY_TAKE_SPECIAL_REWARD_REQ = 7115; + CMD_CARNIVAL_LOTTERY_TAKE_SPECIAL_REWARD_RSP = 7116; + CMD_CARNIVAL_LOTTERY_OPEN_REWARD_REQ = 7117; + CMD_CARNIVAL_LOTTERY_OPEN_REWARD_RSP = 7118; + CMD_TILED_GAME_LUNA_TRAP_REQ = 7121; + CMD_TILED_GAME_LUNA_TRAP_RSP = 7122; + CMD_GET_TILED_GAME_LUNA_REQ = 7123; + CMD_GET_TILED_GAME_LUNA_RSP = 7124; + CMD_TILED_GAME_LUNA_BATTLE_REQ = 7125; + CMD_TILED_GAME_LUNA_BATTLE_RSP = 7126; + CMD_TILED_GAME_LUNA_HEAL_REQ = 7129; + CMD_TILED_GAME_LUNA_HEAL_RSP = 7130; + CMD_MINION_CLASH_GET_ACTIVITY_REQ = 7141; + CMD_MINION_CLASH_GET_ACTIVITY_RSP = 7142; + CMD_MINION_CLASH_GET_GACHA_INFO_REQ = 7143; + CMD_MINION_CLASH_GET_GACHA_INFO_RSP = 7144; + CMD_MINION_CLASH_DO_GACHA_REQ = 7145; + CMD_MINION_CLASH_DO_GACHA_RSP = 7146; + CMD_MINION_CLASH_LEVEL_UP_TALENT_REQ = 7147; + CMD_MINION_CLASH_LEVEL_UP_TALENT_RSP = 7148; + CMD_MINION_CLASH_REPORT_STAGE_BEGIN_REQ = 7149; + CMD_MINION_CLASH_REPORT_STAGE_BEGIN_RSP = 7150; + CMD_MINION_CLASH_UPDATE_BUILD_REQ = 7151; + CMD_MINION_CLASH_UPDATE_BUILD_RSP = 7152; + CMD_MINION_CLASH_STAR_UP_CARD_REQ = 7153; + CMD_MINION_CLASH_STAR_UP_CARD_RSP = 7154; + CMD_THELEMA_ACTIVITY_GET_ACTIVITY_REQ = 7161; + CMD_THELEMA_ACTIVITY_GET_ACTIVITY_RSP = 7162; + CMD_THELEMA_ACTIVITY_FINISH_QUESTION_REQ = 7163; + CMD_THELEMA_ACTIVITY_FINISH_QUESTION_RSP = 7164; + CMD_MATCH_THREE_PLUS_GET_ACTIVITY_REQ = 7171; + CMD_MATCH_THREE_PLUS_GET_ACTIVITY_RSP = 7172; + CMD_MATCH_THREE_PLUS_ROLE_LEVEL_UP_REQ = 7173; + CMD_MATCH_THREE_PLUS_ROLE_LEVEL_UP_RSP = 7174; + CMD_MATCH_THREE_PLUS_GACHA_DISPLAY_REQ = 7175; + CMD_MATCH_THREE_PLUS_GACHA_DISPLAY_RSP = 7176; + CMD_MATCH_THREE_PLUS_GACHA_REQ = 7177; + CMD_MATCH_THREE_PLUS_GACHA_RSP = 7178; + CMD_MATCH_THREE_PLUS_ROOM_BEGIN_REQ = 7179; + CMD_MATCH_THREE_PLUS_ROOM_BEGIN_RSP = 7180; + CMD_MATCH_THREE_PLUS_ROOM_END_REQ = 7181; + CMD_MATCH_THREE_PLUS_ROOM_END_RSP = 7182; + CMD_MATCH_THREE_PLUS_GET_RANK_REQ = 7183; + CMD_MATCH_THREE_PLUS_GET_RANK_RSP = 7184; + CMD_MATCH_THREE_PLUS_UPDATE_COMBINATION_REQ = 7185; + CMD_MATCH_THREE_PLUS_UPDATE_COMBINATION_RSP = 7186; + CMD_MATCH_THREE_PLUS_SYNC_AUTO_UNLOCK_NOTIFY = 7187; + CMD_TILED_GAME_SRPG_GET_ACTIVITY_REQ = 7191; + CMD_TILED_GAME_SRPG_GET_ACTIVITY_RSP = 7192; + CMD_TILED_GAME_SRPG_AVATAR_LEVEL_UP_REQ = 7193; + CMD_TILED_GAME_SRPG_AVATAR_LEVEL_UP_RSP = 7194; + CMD_TILED_GAME_SRPG_BATTLE_BEGIN_REQ = 7195; + CMD_TILED_GAME_SRPG_BATTLE_BEGIN_RSP = 7196; + CMD_TILED_GAME_SRPG_BATTLE_END_REQ = 7197; + CMD_TILED_GAME_SRPG_BATTLE_END_RSP = 7198; + CMD_TILED_GAME_SRPG_TAKE_BP_REWARD_REQ = 7199; + CMD_TILED_GAME_SRPG_TAKE_BP_REWARD_RSP = 7200; + CMD_GAME_ROOM_ACTIVITY_GET_ACTIVITY_REQ = 7211; + CMD_GAME_ROOM_ACTIVITY_GET_ACTIVITY_RSP = 7212; + CMD_GAME_ROOM_ACTIVITY_GET_RANK_REQ = 7213; + CMD_GAME_ROOM_ACTIVITY_GET_RANK_RSP = 7214; + CMD_QRTS_ACTIVITY_GET_ACTIVITY_REQ = 7221; + CMD_QRTS_ACTIVITY_GET_ACTIVITY_RSP = 7222; + CMD_QRTS_ACTIVITY_FINISH_ROUND_REQ = 7223; + CMD_QRTS_ACTIVITY_FINISH_ROUND_RSP = 7224; + CMD_QRTS_ACTIVITY_RESET_ROUND_REQ = 7225; + CMD_QRTS_ACTIVITY_RESET_ROUND_RSP = 7226; + CMD_QRTS_ACTIVITY_BUILD_REQ = 7227; + CMD_QRTS_ACTIVITY_BUILD_RSP = 7228; + CMD_QRTS_ACTIVITY_SELECT_TALENT_REQ = 7229; + CMD_QRTS_ACTIVITY_SELECT_TALENT_RSP = 7230; + CMD_QRTS_ACTIVITY_SYNC_GAME_NOTIFY = 7231; + CMD_QRTS_ACTIVITY_SWEEP_REQ = 7232; + CMD_QRTS_ACTIVITY_SWEEP_RSP = 7233; + CMD_QRTS_ACTIVITY_UPGRADE_BUFF_REQ = 7234; + CMD_QRTS_ACTIVITY_UPGRADE_BUFF_RSP = 7235; + CMD_QRTS_ACTIVITY_CLEAR_GAME_REQ = 7236; + CMD_QRTS_ACTIVITY_CLEAR_GAME_RSP = 7237; + CMD_QRTS_ACTIVITY_WISH_REQ = 7238; + CMD_QRTS_ACTIVITY_WISH_RSP = 7239; + CMD_GET_BURDEN_ALLEVIATION_V2_REQ = 7241; + CMD_GET_BURDEN_ALLEVIATION_V2_RSP = 7242; + CMD_TRIGGER_BURDEN_ALLEVIATION_V2_REQ = 7243; + CMD_TRIGGER_BURDEN_ALLEVIATION_V2_RSP = 7244; + CMD_FUTARI_BATTLE_ACTIVITY_GET_ACTIVITY_REQ = 7245; + CMD_FUTARI_BATTLE_ACTIVITY_GET_ACTIVITY_RSP = 7246; + CMD_FUTARI_BATTLE_ACTIVITY_GET_RANK_REQ = 7247; + CMD_FUTARI_BATTLE_ACTIVITY_GET_RANK_RSP = 7248; + CMD_FUTARI_BATTLE_ACTIVITY_PASS_STAGE_FLOOR_REQ = 7249; + CMD_FUTARI_BATTLE_ACTIVITY_PASS_STAGE_FLOOR_RSP = 7250; + CMD_RE_ACTIVITY_GET_DATA_REQ = 7251; + CMD_RE_ACTIVITY_GET_DATA_RSP = 7252; + CMD_RE_ACTIVITY_TILE_BEGIN_REQ = 7253; + CMD_RE_ACTIVITY_TILE_BEGIN_RSP = 7254; + CMD_RE_ACTIVITY_TILE_END_REQ = 7255; + CMD_RE_ACTIVITY_TILE_END_RSP = 7256; + CMD_RESIDENT_ACTIVITY_GET_DATA_REQ = 7260; + CMD_RESIDENT_ACTIVITY_GET_DATA_RSP = 7261; + CMD_RESIDENT_ACTIVITY_UNLOCK_ACTIVITY_REQ = 7262; + CMD_RESIDENT_ACTIVITY_UNLOCK_ACTIVITY_RSP = 7263; + CMD_QRTS_ACTIVITY_GET_RANK_REQ = 7270; + CMD_QRTS_ACTIVITY_GET_RANK_RSP = 7271; + CMD_MONSTER_CARD_PVP_GET_ACTIVITY_REQ = 7275; + CMD_MONSTER_CARD_PVP_GET_ACTIVITY_RSP = 7276; + CMD_MONSTER_CARD_PVP_SELECT_INIT_CARD_VEC_REQ = 7277; + CMD_MONSTER_CARD_PVP_SELECT_INIT_CARD_VEC_RSP = 7278; + CMD_MONSTER_CARD_PVP_STAR_UP_CARD_REQ = 7279; + CMD_MONSTER_CARD_PVP_STAR_UP_CARD_RSP = 7280; + CMD_MONSTER_CARD_PVP_OPEN_SKILL_PACK_REQ = 7281; + CMD_MONSTER_CARD_PVP_OPEN_SKILL_PACK_RSP = 7282; + CMD_MONSTER_CARD_PVP_SELECT_NEW_SKILL_REQ = 7283; + CMD_MONSTER_CARD_PVP_SELECT_NEW_SKILL_RSP = 7284; + CMD_MONSTER_CARD_PVP_GET_PVP_OPPONENT_REQ = 7285; + CMD_MONSTER_CARD_PVP_GET_PVP_OPPONENT_RSP = 7286; + CMD_MONSTER_CARD_PVP_FINISH_COMBAT_REQ = 7287; + CMD_MONSTER_CARD_PVP_FINISH_COMBAT_RSP = 7288; + CMD_MONSTER_CARD_PVP_UPDATE_PLAYER_INFO_REQ = 7289; + CMD_MONSTER_CARD_PVP_UPDATE_PLAYER_INFO_RSP = 7290; + CMD_MONSTER_CARD_PVP_GET_DEFEND_DATA_REQ = 7291; + CMD_MONSTER_CARD_PVP_GET_DEFEND_DATA_RSP = 7292; + CMD_MONSTER_CARD_PVP_GET_PVP_RANK_REQ = 7293; + CMD_MONSTER_CARD_PVP_GET_PVP_RANK_RSP = 7294; + CMD_MONSTER_CARD_PVP_TAKE_PRODUCT_REWARD_REQ = 7295; + CMD_MONSTER_CARD_PVP_TAKE_PRODUCT_REWARD_RSP = 7296; + CMD_MONSTER_CARD_PVP_GET_GACHA_DISPLAY_REQ = 7297; + CMD_MONSTER_CARD_PVP_GET_GACHA_DISPLAY_RSP = 7298; + CMD_MONSTER_CARD_PVP_GACHA_REQ = 7299; + CMD_MONSTER_CARD_PVP_GACHA_RSP = 7300; + CMD_MONSTER_CARD_PVP_START_COMBAT_REQ = 7301; + CMD_MONSTER_CARD_PVP_START_COMBAT_RSP = 7302; + CMD_MONSTER_CARD_PVP_CUSTOM_TEAM_REQ = 7303; + CMD_MONSTER_CARD_PVP_CUSTOM_TEAM_RSP = 7304; + CMD_MONSTER_CARD_PVP_SKIP_REQ = 7305; + CMD_MONSTER_CARD_PVP_SKIP_RSP = 7306; + CMD_MONSTER_MORPH_GET_ACTIVITY_REQ = 7311; + CMD_MONSTER_MORPH_GET_ACTIVITY_RSP = 7312; + CMD_MONSTER_MORPH_LEVEL_UP_MONSTER_REQ = 7313; + CMD_MONSTER_MORPH_LEVEL_UP_MONSTER_RSP = 7314; + CMD_MONSTER_MORPH_STAR_UP_MONSTER_REQ = 7315; + CMD_MONSTER_MORPH_STAR_UP_MONSTER_RSP = 7316; + CMD_MONSTER_MORPH_REFINE_MINION_AFFIX_REQ = 7317; + CMD_MONSTER_MORPH_REFINE_MINION_AFFIX_RSP = 7318; + CMD_MONSTER_MORPH_SELECT_NEW_MINION_AFFIX_REQ = 7319; + CMD_MONSTER_MORPH_SELECT_NEW_MINION_AFFIX_RSP = 7320; + CMD_MONSTER_MORPH_GET_RANK_REQ = 7321; + CMD_MONSTER_MORPH_GET_RANK_RSP = 7322; + CMD_MONSTER_MORPH_SWEEP_REQ = 7323; + CMD_MONSTER_MORPH_SWEEP_RSP = 7324; + CMD_CRYSTAL_LOTTERY_GET_MAIN_DATA_REQ = 7331; + CMD_CRYSTAL_LOTTERY_GET_MAIN_DATA_RSP = 7332; + CMD_CRYSTAL_LOTTERY_ENROLL_REQ = 7333; + CMD_CRYSTAL_LOTTERY_ENROLL_RSP = 7334; + CMD_CRYSTAL_LOTTERY_TAKE_REWARD_REQ = 7335; + CMD_CRYSTAL_LOTTERY_TAKE_REWARD_RSP = 7336; + CMD_TILED_GAME_INN_GET_ACTIVITY_REQ = 7341; + CMD_TILED_GAME_INN_GET_ACTIVITY_RSP = 7342; + CMD_TILED_GAME_INN_BUY_FURNITURE_REQ = 7343; + CMD_TILED_GAME_INN_BUY_FURNITURE_RSP = 7344; + CMD_TILED_GAME_INN_EDIT_INN_REQ = 7345; + CMD_TILED_GAME_INN_EDIT_INN_RSP = 7346; + CMD_TILED_GAME_INN_START_MANAGEMENT_REQ = 7347; + CMD_TILED_GAME_INN_START_MANAGEMENT_RSP = 7348; + CMD_TILED_GAME_INN_STOP_MANAGEMENT_REQ = 7349; + CMD_TILED_GAME_INN_STOP_MANAGEMENT_RSP = 7350; + CMD_TILED_GAME_INN_START_TRAVEL_REQ = 7351; + CMD_TILED_GAME_INN_START_TRAVEL_RSP = 7352; + CMD_TILED_GAME_INN_END_TRAVEL_REQ = 7353; + CMD_TILED_GAME_INN_END_TRAVEL_RSP = 7354; + CMD_TILED_GAME_INN_LEVEL_UP_REQ = 7355; + CMD_TILED_GAME_INN_LEVEL_UP_RSP = 7356; + CMD_TILED_GAME_INN_DEVELOP_DISH_REQ = 7357; + CMD_TILED_GAME_INN_DEVELOP_DISH_RSP = 7358; + CMD_TILED_GAME_INN_LEVEL_UP_INN_REQ = 7359; + CMD_TILED_GAME_INN_LEVEL_UP_INN_RSP = 7360; + CMD_TILED_GAME_INN_SYNC_INN_DATA_NOTIFY = 7361; + CMD_TILED_GAME_INN_GET_OTHER_INN_DATA_REQ = 7362; + CMD_TILED_GAME_INN_GET_OTHER_INN_DATA_RSP = 7363; + CMD_TILED_GAME_INN_ADD_LEFT_DROP_NUM_NOTIFY = 7364; + CMD_TOWER_DEFENSE_GET_ACTIVITY_REQ = 7375; + CMD_TOWER_DEFENSE_GET_ACTIVITY_RSP = 7376; + CMD_TOWER_DEFENSE_SAVE_TURN_REQ = 7377; + CMD_TOWER_DEFENSE_SAVE_TURN_RSP = 7378; + CMD_TOWER_DEFENSE_BATTLE_BEGIN_REQ = 7379; + CMD_TOWER_DEFENSE_BATTLE_BEGIN_RSP = 7380; + CMD_TOWER_DEFENSE_BATTLE_END_REQ = 7381; + CMD_TOWER_DEFENSE_BATTLE_END_RSP = 7382; +} + +enum ThemeTowerBuffType { + THEME_TOWER_BUFF_TYPE_NONE = 0; + THEME_TOWER_WEATHER_BUFF = 1; + THEME_TOWER_SPECIAL_BUFF = 2; + THEME_TOWER_COMMON_BUFF = 3; + THEME_TOWER_ACTIVE_BUFF = 4; +} + +enum TiledGameLunaTrapDamageType { + TILED_GAME_LUNA_TRAP_DAMAGE_TYPE_NONE = 0; + TILED_GAME_LUNA_TRAP_DAMAGE_TYPE_FIXED_DAMAGE = 1; + TILED_GAME_LUNA_TRAP_DAMAGE_TYPE_PERCENTAGE_DAMAGE = 2; +} + +enum QRtsBuildingType { + Q_RTS_BUILDING_TYPE_NONE = 0; + QRTS_BUILDING_TYPE_BASE = 1; + QRTS_BUILDING_TYPE_DEFENSE_TOWER = 2; + QRTS_BUILDING_TYPE_RANGE_BARRACK = 3; + QRTS_BUILDING_TYPE_MELEE_BARRACK = 4; + QRTS_BUILDING_TYPE_FIXED_GAIN_MINER = 5; + QRTS_BUILDING_TYPE_INCREASING_GAIN_MINER = 6; + QRTS_BUILDING_TYPE_WALL = 7; + QRTS_BUILDING_TYPE_BARRICADE = 8; +} + +enum QRtsTalentSourceType { + QRTS_TALENT_SOURCE_TYPE_NONE = 0; + QRTS_TALENT_SOURCE_TYPE_ROUND = 1; + QRTS_TALENT_SOURCE_TYPE_WISH = 2; + QRTS_TALENT_SOURCE_TYPE_BASE_LEVEL = 3; +} + +enum QRtsTalentType { + Q_RTS_TALENT_TYPE_NONE = 0; + QRTS_TALENT_TYPE_NORMAL = 1; + QRTS_TALENT_TYPE_ULTRA = 2; + QRTS_TALENT_TYPE_RANDOM = 3; + QRTS_TALENT_TYPE_BASE = 4; + QRTS_TALENT_TYPE_ATTRIBUTE = 5; +} + +enum QRtsStageType { + Q_RTS_STAGE_TYPE_NONE = 0; + QRTS_STAGE_TYPE_MAINLINE = 1; + QRTS_STAGE_TYPE_CHALLENGE = 2; + QRTS_STAGE_TYPE_RANK_CHALLENGE = 3; +} + +enum QRtsServerEffect { + Q_RTS_SERVER_EFFECT_NONE = 0; + QRTS_SERVER_EFFECT_MINER_GAIN_UP = 1; + QRTS_SERVER_EFFECT_FIXED_GAIN_MINER_PROTECT = 2; + QRTS_SERVER_EFFECT_INCREASING_GAIN_MINER_ENFORCE = 3; + QRTS_SERVER_EFFECT_MINER_EXTRA_GOLD = 4; + QRTS_SERVER_EFFECT_BASE_PRODUCE_GOLD = 5; + QRTS_SERVER_EFFECT_BUILDING_CASHBACK = 6; +} + +enum BurdenAlleviationV2Type { + BURDEN_ALLEVIATION_V_2_TYPE_NONE = 0; + BURDEN_ALLEVIATION_V2_OW_QUEST = 1; + BURDEN_ALLEVIATION_V2_THEME_WANTED = 2; + BURDEN_ALLEVIATION_V2_EXAMINATION = 3; + BURDEN_ALLEVIATION_V2_ARMADA_STAGE_SCORE_ACTIVITY = 4; + BURDEN_ALLEVIATION_V2_RAID_REPLACE = 5; +} + +enum ShigureKiraProgressSlotType { + SHIGURE_KIRA_PROGRESS_SLOT_NONE = 0; + SHIGURE_KIRA_PROGRESS_SLOT_FANCHANT = 1; + SHIGURE_KIRA_PROGRESS_SLOT_CONCERT = 2; +} + +enum MonsterCardPvpFinishCombatType { + MONSTER_CARD_PVP_FINISH_COMBAT_TYPE_NONE = 0; + MONSTER_CARD_PVP_FINISH_COMBAT_TYPE_NORMAL = 1; + MONSTER_CARD_PVP_FINISH_COMBAT_TYPE_GIVE_UP = 2; + MONSTER_CARD_PVP_FINISH_COMBAT_TYPE_ABANDON = 3; +} + +enum MonsterCardPvpCardHiddenConditionType { + MONSTER_CARD_PVP_CARD_HIDDEN_CONDITION_TYPE_NONE = 0; + MONSTER_CARD_PVP_CARD_HIDDEN_CONDITION_OPPONENT_RANK = 1; + MONSTER_CARD_PVP_CARD_HIDDEN_CONDITION_COMBAT_TIMES = 2; + MONSTER_CARD_PVP_CARD_HIDDEN_CONDITION_ELO_SCORE = 3; +} + +enum MinionClashConditionType { + MINION_CLASH_CONDITION_TYPE_NONE = 0; + MINION_CLASH_CONDITION_TYPE_ACTIVITY_LEVEL_GE = 1; + MINION_CLASH_CONDITION_TYPE_BRANCH_TALENT_LEVEL_GE = 2; + MINION_CLASH_CONDITION_TYPE_PASS_STAGE_LIST = 3; + MINION_CLASH_CONDITION_TYPE_PASS_RPG_SITE_LIST = 4; +} + +enum MinionClashStageType { + MINION_CLASH_STAGE_TYPE_NONE = 0; + MINION_CLASH_STAGE_TYPE_NORMAL_AVATAR = 1; + MINION_CLASH_STAGE_TYPE_NORMAL_CARD = 2; + MINION_CLASH_STAGE_TYPE_DAILY = 3; + MINION_CLASH_STAGE_TYPE_TOWER = 4; + MINION_CLASH_STAGE_TYPE_TUTORIAL = 5; +} + +enum MinionClashDoGachaType { + MINION_CLASH_DO_GACHA_TYPE_NONE = 0; + MINION_CLASH_DO_GACHA_TYPE_ONCE = 1; + MINION_CLASH_DO_GACHA_TYPE_UP_TO_10 = 2; +} + +enum MatchThreePlusRoomType { + MATCH_THREE_PLUS_ROOM_TYPE_NONE = 0; + MATCH_THREE_PLUS_ROOM_MAIN = 1; + MATCH_THREE_PLUS_ROOM_SIDE = 2; + MATCH_THREE_PLUS_ROOM_DAILY = 3; + MATCH_THREE_PLUS_ROOM_TOWER = 4; + MATCH_THREE_PLUS_ROOM_TUTORIAL = 5; +} + +enum TiledGameSrpgBattleType { + TILED_GAME_SRPG_BATTLE_TYPE_NONE = 0; + TILED_GAME_SRPG_BATTLE_STORY = 1; + TILED_GAME_SRPG_BATTLE_CHALLENGE = 2; +} + +enum TiledGameSrpgWinType { + TILED_GAME_SRPG_WIN_TYPE_NONE = 0; + TILED_GAME_SRPG_WIN_ELIMINATE = 1; + TILED_GAME_SRPG_WIN_CHASE = 2; + TILED_GAME_SRPG_WIN_SURVIVE = 3; + TILED_GAME_SRPG_WIN_CAPTURE = 4; +} + +enum GameRoomActivityGameType { + GAME_ROOM_ACTIVITY_GAME_TYPE_NONE = 0; + GAME_ROOM_ACTIVITY_GAME_TYPE_BRICK_BREAKER = 1; + GAME_ROOM_ACTIVITY_GAME_TYPE_NS_SHAFT = 2; +} + +enum GameRoomActivityGameStageType { + GAME_ROOM_ACTIVITY_GAME_STAGE_TYPE_NONE = 0; + GAME_ROOM_ACTIVITY_GAME_STAGE_TYPE_NORMAL = 1; + GAME_ROOM_ACTIVITY_GAME_STAGE_TYPE_RANK = 2; +} + +enum FutariBattleStageGroupType { + FUTARI_BATTLE_STAGE_GROUP_TYPE_NONE = 0; + FUTARI_BATTLE_STAGE_GROUP_NORMAL = 1; + FUTARI_BATTLE_STAGE_GROUP_BOSS = 2; +} + +enum FutariBattleStageType { + FUTARI_BATTLE_STAGE_TYPE_NONE = 0; + FUTARI_BATTLE_STAGE_NORMAL = 1; + FUTARI_BATTLE_STAGE_BOSS = 2; +} + +enum ReActivitySiteContentType { + RE_ACTIVITY_SITE_CONTENT_NONE = 0; + RE_ACTIVITY_SITE_CONTENT_PLOT = 1; + RE_ACTIVITY_SITE_CONTENT_PROP_STAGE = 2; + RE_ACTIVITY_SITE_CONTENT_JUMP_STAGE = 3; + RE_ACTIVITY_SITE_CONTENT_TILE = 4; +} + +enum MonsterCardPvpCardCheckResult { + SUCC = 0; + CARD_NOT_EXIST = 1; + CARD_REPEATED = 2; + CARD_CONFIG_NOT_FOUND = 3; + CARD_EMPTY = 4; + CARD_SUPPORT_NOT_EXIST = 5; + CARD_SUPPORT_REPEATED = 6; + CARD_COST_LIMIT = 7; +} + +enum MonsterMorphStageType { + MONSTER_MORPH_STAGE_TYPE_NONE = 0; + MONSTER_MORPH_STAGE_TYPE_MAINLINE = 1; + MONSTER_MORPH_STAGE_TYPE_BRANCH = 2; + MONSTER_MORPH_STAGE_TYPE_CYCLE = 3; + MONSTER_MORPH_STAGE_TYPE_CHALLENGE = 4; + MONSTER_MORPH_STAGE_TYPE_RANK_CHALLENGE = 5; + MONSTER_MORPH_STAGE_TYPE_MAINLINE_AVATAR = 6; +} + +enum MonsterMorphMinionRefineType { + MONSTER_MORPH_MINION_REFINE_TYPE_NONE = 0; + MONSTER_MORPH_MINION_REFINE_NORMAL = 1; + MONSTER_MORPH_MINION_REFINE_LOCK = 2; +} + +enum TiledGameInnFurnitureDirection { + TILED_GAME_INN_FURNITURE_DIRECTION_DOWN = 0; + TILED_GAME_INN_FURNITURE_DIRECTION_UP = 1; + TILED_GAME_INN_FURNITURE_DIRECTION_LEFT = 2; + TILED_GAME_INN_FURNITURE_DIRECTION_RIGHT = 3; +} + +enum TiledGameInnFurnitureType { + TILED_GAME_INN_FURNITURE_TYPE_NONE = 0; + TILED_GAME_INN_FURNITURE_TYPE_TABLE = 1; + TILED_GAME_INN_FURNITURE_TYPE_FLOOR_DECORATION = 2; + TILED_GAME_INN_FURNITURE_TYPE_WALL_DECORATION = 3; +} + +enum TiledGameInnRole { + TILED_GAME_INN_ROLE_NONE = 0; + TILED_GAME_INN_ROLE_CHEF = 1; + TILED_GAME_INN_ROLE_WAITER = 2; + TILED_GAME_INN_ROLE_MANAGEMENT = 3; + TILED_GAME_INN_ROLE_CLEANER = 4; + TILED_GAME_INN_ROLE_PURCHASER = 5; +} + +enum TiledGameInnTasteTag { + TILED_GAME_INN_TASTE_TAG_NONE = 0; + TILED_GAME_INN_TASTE_TAG_SOUR = 1; + TILED_GAME_INN_TASTE_TAG_SWEET = 2; + TILED_GAME_INN_TASTE_TAG_SALINE = 3; + TILED_GAME_INN_TASTE_TAG_SPICY = 4; + TILED_GAME_INN_TASTE_TAG_ORIGINAL = 5; +} + +enum TiledGameInnTechniquesTag { + TILED_GAME_INN_TECHNIQUES_TAG_NONE = 0; + TILED_GAME_INN_TECHNIQUES_TAG_STIR_FRY = 1; + TILED_GAME_INN_TECHNIQUES_TAG_FRY = 2; + TILED_GAME_INN_TECHNIQUES_TAG_STEAM = 3; + TILED_GAME_INN_TECHNIQUES_TAG_BOIL = 4; + TILED_GAME_INN_TECHNIQUES_TAG_BAKE = 5; +} + +enum TiledGameInnStaffStatus { + TILED_GAME_INN_STAFF_STATUS_NONE = 0; + TILED_GAME_INN_STAFF_STATUS_LOCK = 1; + TILED_GAME_INN_STAFF_STATUS_UNLOCK = 2; +} + +enum TiledGameInnSkillType { + TILED_GAME_INN_SKILL_TYPE_NONE = 0; + TILED_GAME_INN_SKILL_TYPE_MORE_PURCHASE_NUM = 9; + TILED_GAME_INN_SKILL_TYPE_PURCHASE_WITH_PROBABILITY_FREE = 14; +} + +enum TowerDefenseBattleType { + TOWER_DEFENSE_BATTLE_TYPE_NONE = 0; + TOWER_DEFENSE_BATTLE_MAINLINE = 1; + TOWER_DEFENSE_BATTLE_STORY = 2; + TOWER_DEFENSE_BATTLE_CHALLENGE = 3; + TOWER_DEFENSE_BATTLE_ENDLESS = 4; +} + +message AdventureDecorationSlot { + uint32 slot_id = 1; + uint32 furniture_id = 2; + uint32 direction = 3; +} + +message AdventureGroupAvatar { + uint32 avatar_id = 1; + repeated uint32 old_finished_record_list = 2; + repeated uint32 finished_record_list = 3; +} + +message AdventureGroupQuest { + uint32 pool_id = 1; + uint32 quest_id = 2; + uint32 accept_time = 3; + repeated uint32 avatar_list = 4; + uint32 status = 5; + uint32 elf_id = 6; +} + +message AdventureGroupAvailableQuest { + uint32 pool_id = 1; + uint32 quest_id = 2; +} + +// CmdID: 3900 +message GetAdventureGroupReq { +} + +message CabinLevel { + uint32 cabin_type = 1; + uint32 level = 2; + uint32 extend_grade = 3; +} + +message FacilityLevel { + uint32 facility_type = 1; + uint32 level = 2; +} + +// CmdID: 3901 +message GetAdventureGroupRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetAdventureGroupRsp.Retcode retcode = 1; + uint32 old_level = 2; + uint32 old_badge = 3; + repeated AdventureGroupAvatar avatar_list = 5; + repeated AdventureGroupQuest quest_list = 6; + repeated AdventureGroupAvailableQuest available_quest_list = 7; + uint32 grain = 8; + uint32 has_take_reward_level = 9; + uint32 next_scoin_add_time = 10; + uint32 storage_scoin = 11; + uint32 storage_stamina = 12; + repeated uint32 has_take_compensation_list = 13; + repeated AdventureDecorationSlot decoration_slot_list = 15; + uint32 today_reset_quest_num = 17; + uint32 level = 18; + uint32 badge = 19; + uint32 extra_badge_cost_num = 20; +} + +message SelectAdventureQuestReqData { + uint32 pool_id = 1; + repeated uint32 avatar_list = 2; + uint32 elf_id = 3; + uint32 quest_id = 4; +} + +// CmdID: 3902 +message SelectAdventureQuestReq { + repeated SelectAdventureQuestReqData select_adeventure_quest_list = 4; + bool is_quick_select = 5; +} + +// CmdID: 3903 +message SelectAdventureQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_FINISHED = 2; + HAS_TAKE = 3; + LACK_GRAIN = 4; + LACK_STAMINA = 5; + AVATAR_LOCK = 6; + AVATAR_IN_QUEST = 7; + AVATAR_NUM_ERROR = 8; + ELF_LOCK = 9; + ELF_IN_QUEST = 10; + SKILL_LACK = 11; + POOL_REPEATED = 12; + AVATAR_REPEATED = 13; + ELF_REPEATED = 14; + } + + SelectAdventureQuestRsp.Retcode retcode = 1; +} + +// CmdID: 3904 +message TakeAdventureQuestRewardReq { + uint32 pool_id = 1; + bool is_take_all = 3; +} + +// CmdID: 3905 +message TakeAdventureQuestRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_QUEST = 2; + HAS_TAKE = 3; + NOT_END = 4; + } + + TakeAdventureQuestRewardRsp.Retcode retcode = 1; + repeated DropItem drop_item_list = 3; + repeated AdventureGroupAvailableQuest quest_list = 5; +} + +// CmdID: 3910 +message ClaimScoinReq { +} + +// CmdID: 3911 +message ClaimScoinRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SCOIN_FULL = 2; + } + + ClaimScoinRsp.Retcode retcode = 1; + uint32 add_scoin = 2; + bool is_extra = 3; +} + +message IslandStorySweepAvatar { + uint32 sweep_id = 1; + repeated uint32 avatar_id_list = 2; +} + +// CmdID: 3912 +message AdventureStorySweepReq { + repeated IslandStorySweepAvatar adventure_story_sweep_list = 3; + bool is_quick_sweep = 4; +} + +message IslandStorySweepData { + uint32 sweep_id = 1; + uint32 over_time = 2; + bool is_finished = 3; + bool is_sieged = 4; + repeated uint32 avatar_id_list = 5; +} + +// CmdID: 3913 +message AdventureStorySweepRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_MEET_RESTRICT = 2; + HAS_TAKEN = 3; + LACK_MATERIAL = 4; + STAMINA_LACK = 5; + EQUIPMENT_FULL = 6; + EQUIPMENT_MATERIAL_LIMIT = 7; + EQUIPMENT_FRAGMENT_LIMIT = 8; + ENTER_TIMES_LACK = 9; + NOT_MEET_FAST = 10; + EXCEED_STAMINA = 11; + NOT_FINISH_CHALLENGE = 12; + AVATAR_SWEEPING = 13; + TEAM_LIMIT = 14; + AVATAR_ERROR = 15; + STAGE_NOT_EXIST = 16; + ACTIVITY_ENTER_TIMES_LACK = 17; + LEVEL_LACK = 18; + } + + AdventureStorySweepRsp.Retcode retcode = 1; + uint32 used_stamina = 3; + repeated IslandStorySweepData sweep_data_list = 4; +} + +// CmdID: 3914 +message GetAdventureStorySweepInfoReq { +} + +// CmdID: 3915 +message GetAdventureStorySweepInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetAdventureStorySweepInfoRsp.Retcode retcode = 1; + repeated IslandStorySweepData story_sweep_list = 2; + uint32 used_stamina = 3; + repeated IslandStorySweepAvatar last_story_sweep_avatar_list = 4; +} + +// CmdID: 3916 +message TakeAdventureStorySweepRewardReq { + uint32 sweep_id = 1; + bool is_take_all = 2; + repeated uint32 sweep_group_type_list = 3; +} + +// CmdID: 3917 +message TakeAdventureStorySweepRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_EXIST = 2; + NOT_FINISHED = 3; + } + + TakeAdventureStorySweepRewardRsp.Retcode retcode = 1; + uint32 sweep_id = 2; + uint32 siege_stage_id = 3; + repeated DropItem drop_item_list = 4; + uint32 player_exp_reward = 5; + uint32 exp_convert_scoin = 6; + uint32 scoin_reward = 7; + uint32 rank_scoin = 8; + bool is_take_all = 9; + repeated uint32 sweep_group_type_list = 10; +} + +// CmdID: 3918 +message TakeAdventureCompensationReq { + repeated CompensationType type_list = 1; +} + +// CmdID: 3919 +message TakeAdventureCompensationRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKE = 2; + } + + TakeAdventureCompensationRsp.Retcode retcode = 1; + repeated CompensationType type_list = 2; + RewardData reward_data = 3; +} + +// CmdID: 3920 +message EditAdventureRoomReq { + AdventureDecorationSlot decoration_slot = 1; +} + +// CmdID: 3921 +message EditAdventureRoomRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SLOT_UNLOCK = 2; + FURNITURE_LACK = 3; + FURNITURE_TYPE_ERROR = 4; + COLLECTION_TYPE_ERROR = 5; + } + + EditAdventureRoomRsp.Retcode retcode = 1; + uint32 slot_id = 2; +} + +// CmdID: 3922 +message CancelAdventureQuestReq { + uint32 pool_id = 1; +} + +// CmdID: 3923 +message CancelAdventureQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_SELECTED = 2; + OVER_TIME = 3; + } + + CancelAdventureQuestRsp.Retcode retcode = 1; + uint32 pool_id = 2; +} + +// CmdID: 3924 +message ResetAdventureQuestReq { + uint32 pool_id = 1; +} + +// CmdID: 3925 +message ResetAdventureQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_QUEST = 2; + NO_TIMES = 3; + HAS_FINISHED = 4; + HAS_SELECTED = 5; + } + + ResetAdventureQuestRsp.Retcode retcode = 1; + uint32 pool_id = 2; +} + +enum CmdTypeAdventure { + CMD_TYPE_ADVENTURE_NONE = 0; + CMD_GET_ADVENTURE_GROUP_REQ = 3900; + CMD_GET_ADVENTURE_GROUP_RSP = 3901; + CMD_SELECT_ADVENTURE_QUEST_REQ = 3902; + CMD_SELECT_ADVENTURE_QUEST_RSP = 3903; + CMD_TAKE_ADVENTURE_QUEST_REWARD_REQ = 3904; + CMD_TAKE_ADVENTURE_QUEST_REWARD_RSP = 3905; + CMD_CLAIM_SCOIN_REQ = 3910; + CMD_CLAIM_SCOIN_RSP = 3911; + CMD_ADVENTURE_STORY_SWEEP_REQ = 3912; + CMD_ADVENTURE_STORY_SWEEP_RSP = 3913; + CMD_GET_ADVENTURE_STORY_SWEEP_INFO_REQ = 3914; + CMD_GET_ADVENTURE_STORY_SWEEP_INFO_RSP = 3915; + CMD_TAKE_ADVENTURE_STORY_SWEEP_REWARD_REQ = 3916; + CMD_TAKE_ADVENTURE_STORY_SWEEP_REWARD_RSP = 3917; + CMD_TAKE_ADVENTURE_COMPENSATION_REQ = 3918; + CMD_TAKE_ADVENTURE_COMPENSATION_RSP = 3919; + CMD_EDIT_ADVENTURE_ROOM_REQ = 3920; + CMD_EDIT_ADVENTURE_ROOM_RSP = 3921; + CMD_CANCEL_ADVENTURE_QUEST_REQ = 3922; + CMD_CANCEL_ADVENTURE_QUEST_RSP = 3923; + CMD_RESET_ADVENTURE_QUEST_REQ = 3924; + CMD_RESET_ADVENTURE_QUEST_RSP = 3925; +} + +enum AdventureQuestStatus { + ADVENTURE_QUEST_STATUS_NONE = 0; + ADVENTURE_QUEST_STATUS_DOING = 1; + ADVENTURE_QUEST_STATUS_FINISHED = 2; +} + +enum AdventureAvatarType { + ADVENTURE_AVATAR_TYPE_NONE = 0; + ADVENTURE_AVATAR_S = 1; + ADVENTURE_AVATAR_A = 2; + ADVENTURE_AVATAR_NORMAL = 3; +} + +enum AdventureQuestResult { + ADVENTURE_QUEST_RESULT_NONE = 0; + ADVENTURE_QUEST_RESULT_FAIL = 1; + ADVENTURE_QUEST_RESULT_SUCC = 2; + ADVENTURE_QUEST_RESULT_BIG_SUCC = 3; +} + +enum CompensationType { + COMPENSATION_NONE = 0; + COMPENSATION_ISLAND = 1; + COMPENSATION_DORM = 2; + COMPENSATION_ADVENTURE_GROUP = 3; +} + +// CmdID: 6650 +message AiCyberGetActivityReq { +} + +message AiCyberArea { + uint32 area_id = 1; + bool is_puzzle_reward_taken = 2; + uint32 cur_daily_stage_id = 3; +} + +message AiCyberDailyStageDrop { + uint32 material_id = 1; + uint32 material_num = 2; +} + +message AiCyberActivity { + uint32 schedule_id = 1; + uint32 repair_progress = 2; + repeated AiCyberArea area_list = 3; + repeated AiCyberDailyStageDrop daily_stage_drop_list = 4; + uint32 hyperion_id = 5; + uint32 main_ui_id = 6; +} + +// CmdID: 6651 +message AiCyberGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + AiCyberGetActivityRsp.Retcode retcode = 1; + AiCyberActivity ai_cyber_activity = 2; + string bless = 3; +} + +// CmdID: 6652 +message AiCyberTakePuzzleRewardReq { + uint32 area_id = 1; +} + +// CmdID: 6653 +message AiCyberTakePuzzleRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_REWARD = 2; + ACTIVITY_NOT_OPEN = 3; + AREA_ERROR = 4; + HAS_TAKE = 5; + } + + AiCyberTakePuzzleRewardRsp.Retcode retcode = 1; + uint32 area_id = 2; + RewardData reward_data = 3; +} + +// CmdID: 6654 +message AiCyberAddRepairProgressReq { + uint32 target_progress = 1; +} + +// CmdID: 6655 +message AiCyberAddRepairProgressRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + TARGET_PROGRESS_ERROR = 3; + CONDITION_NOT_MEET = 4; + MATERIAL_LACK = 5; + } + + AiCyberAddRepairProgressRsp.Retcode retcode = 1; + uint32 target_progress = 2; +} + +// CmdID: 6656 +message AiCyberSetBlessReq { + string bless = 1; +} + +// CmdID: 6657 +message AiCyberSetBlessRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + HAS_SET = 3; + SENSITIVE_WORDS = 4; + FORMAT_ERROR = 5; + } + + AiCyberSetBlessRsp.Retcode retcode = 1; + string bless = 2; +} + +// CmdID: 6658 +message AiCyberRefreshTicketReq { +} + +// CmdID: 6659 +message AiCyberRefreshTicketRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + } + + AiCyberRefreshTicketRsp.Retcode retcode = 1; + uint32 ticket_material_id = 2; + uint32 add_num = 3; +} + +// CmdID: 6660 +message AiCyberUpdateClientSettingReq { + uint32 hyperion_id = 1; + uint32 main_ui_id = 2; +} + +// CmdID: 6661 +message AiCyberUpdateClientSettingRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + } + + AiCyberUpdateClientSettingRsp.Retcode retcode = 1; +} + +enum CmdTypeAicyber { + CMD_TYPE_AICYBER_NONE = 0; + CMD_AI_CYBER_GET_ACTIVITY_REQ = 6650; + CMD_AI_CYBER_GET_ACTIVITY_RSP = 6651; + CMD_AI_CYBER_TAKE_PUZZLE_REWARD_REQ = 6652; + CMD_AI_CYBER_TAKE_PUZZLE_REWARD_RSP = 6653; + CMD_AI_CYBER_ADD_REPAIR_PROGRESS_REQ = 6654; + CMD_AI_CYBER_ADD_REPAIR_PROGRESS_RSP = 6655; + CMD_AI_CYBER_SET_BLESS_REQ = 6656; + CMD_AI_CYBER_SET_BLESS_RSP = 6657; + CMD_AI_CYBER_REFRESH_TICKET_REQ = 6658; + CMD_AI_CYBER_REFRESH_TICKET_RSP = 6659; + CMD_AI_CYBER_UPDATE_CLIENT_SETTING_REQ = 6660; + CMD_AI_CYBER_UPDATE_CLIENT_SETTING_RSP = 6661; +} + +enum AiCyberUnlockConditionType { + AI_CYBER_UNLOCK_CONDITION_TYPE_NONE = 0; + AI_CYBER_UNLOCK_DATE_TIME = 1; + AI_CYBER_UNLOCK_PRE_STAGE = 2; + AI_CYBER_UNLOCK_REPAIR_PROGRESS = 3; + AI_CYBER_UNLOCK_PRE_EVENT = 4; +} + +enum AiCyberStageType { + AI_CYBER_STAGE_INVALID = 0; + AI_CYBER_STAGE_MAIN = 1; + AI_CYBER_STAGE_DAILY = 2; + AI_CYBER_STAGE_CHALLENGE = 3; +} + +// CmdID: 2601 +message GetArmadaDataReq { + uint32 level = 1; +} + +// CmdID: 2602 +message GetArmadaDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LEVEL_LACK = 2; + } + + GetArmadaDataRsp.Retcode retcode = 1; + ArmadaPlayerStatus status = 2; + ArmadaData armada = 3; + repeated ArmadaBriefData apply_list = 4; + uint32 join_cd_finish_time = 5; + bool is_need_recommend = 6; + uint32 last_mail_time = 7; + ArmadaBriefData recommend_armada = 8; + bool is_new = 9; +} + +// CmdID: 2603 +message CreateArmadaReq { + string name = 1; + ArmadaLabel label = 2; +} + +// CmdID: 2604 +message CreateArmadaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LEVEL_LACK = 2; + SCOIN_LACK = 3; + HCOIN_LACK = 4; + IN_ARMADA = 5; + IN_APPLYING = 6; + NAME_REPEAT = 7; + NAME_FORMAT_ERROR = 8; + NAME_SENSITIVE_WORDS = 9; + IN_CD_TIME = 10; + ACCOUNT_NONE = 11; + IN_LOW_POPL_CD_TIME = 12; + LABEL_ERROR = 13; + IN_AUDIT = 14; + } + + CreateArmadaRsp.Retcode retcode = 1; + uint32 armada_id = 2; + string armada_name = 3; + string audit_armada_name = 4; +} + +// CmdID: 2605 +message SearchArmadaReq { + string name = 1; + repeated uint32 label_id_list = 2; +} + +// CmdID: 2606 +message SearchArmadaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + SearchArmadaRsp.Retcode retcode = 1; + repeated ArmadaBriefData armada_list = 2; +} + +// CmdID: 2607 +message ApplyJoinArmadaReq { + uint32 armada_id = 1; + uint32 level = 2; +} + +// CmdID: 2608 +message ApplyJoinArmadaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STATUS_ERROR = 2; + ARMADA_NOT_EXIST = 3; + LEVEL_LACK = 4; + MEMBER_FULL = 5; + APPLY_FULL = 6; + IN_CD_TIME = 7; + APPLY_LIMIT = 8; + HAS_APPLYED = 9; + IN_LOW_POPL_CD_TIME = 10; + FEATURE_CLOSED = 11; + } + + ApplyJoinArmadaRsp.Retcode retcode = 1; +} + +// CmdID: 2609 +message DealArmadaApplyReq { + uint32 target_uid = 1; + bool agree = 2; +} + +// CmdID: 2610 +message DealArmadaApplyRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + NOT_GRANTED = 3; + NOT_TARGET = 4; + ARMADA_FULL = 5; + } + + DealArmadaApplyRsp.Retcode retcode = 1; + uint32 target_uid = 2; + bool agree = 3; +} + +// CmdID: 2611 +message GetArmadaManageDataReq { +} + +// CmdID: 2612 +message GetArmadaManageDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_GRANTED = 2; + NOT_IN_ARMADA = 3; + } + + GetArmadaManageDataRsp.Retcode retcode = 1; + repeated ArmadaApply apply_list = 2; + repeated ArmadaApplyResult apply_result_list = 3; + uint32 apply_level = 4; + bool auto_pass = 5; + uint32 auto_pass_level = 6; + uint32 build_owner = 7; + uint32 build_ownership_time = 8; +} + +// CmdID: 2613 +message SetArmadaApplyReq { + uint32 apply_level = 1; + bool auto_pass = 2; + uint32 auto_pass_level = 3; +} + +// CmdID: 2614 +message SetArmadaApplyRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_GRANTED = 2; + NOT_IN_ARMADA = 3; + LEVEL_ERROR = 4; + } + + SetArmadaApplyRsp.Retcode retcode = 1; +} + +// CmdID: 2615 +message SetArmadaBulletinReq { + string bulletin = 1; + string contact = 2; +} + +// CmdID: 2616 +message SetArmadaBulletinRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_GRANTED = 2; + FORMAT_ERROR = 3; + SENSITIVE_WORDS = 4; + NOT_IN_ARMADA = 5; + IN_CD = 6; + IN_AUDIT = 7; + } + + SetArmadaBulletinRsp.Retcode retcode = 1; + string bulletin = 2; + string old_bulletin = 3; + string audit_bulletin = 4; + uint32 cd_end_time = 5; +} + +// CmdID: 2617 +message GetRecommendArmadaReq { + uint32 level = 1; + repeated uint32 friend_uid_list = 2; +} + +// CmdID: 2618 +message GetRecommendArmadaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LEVEL_LACK = 2; + } + + GetRecommendArmadaRsp.Retcode retcode = 1; + repeated ArmadaBriefData armada_list = 2; +} + +// CmdID: 2619 +message TransferArmadaLeaderReq { + uint32 target_uid = 1; +} + +// CmdID: 2620 +message TransferArmadaLeaderRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_GRANTED = 2; + NOT_IN_ARMADA = 3; + TARGET_NOT_IN_ARMADA = 4; + LEVEL_LACK = 5; + } + + TransferArmadaLeaderRsp.Retcode retcode = 1; +} + +// CmdID: 2621 +message SetArmadaPositionReq { + uint32 target_uid = 1; + ArmadaPosition position = 2; +} + +// CmdID: 2622 +message SetArmadaPositionRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_GRANTED = 2; + NOT_IN_ARMADA = 3; + TARGET_NOT_IN_ARMADA = 4; + OFFICER_FULL = 5; + } + + SetArmadaPositionRsp.Retcode retcode = 1; +} + +// CmdID: 2623 +message KickArmadaMemberReq { + uint32 target_uid = 1; +} + +// CmdID: 2624 +message KickArmadaMemberRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_GRANTED = 2; + NOT_IN_ARMADA = 3; + TARGET_NOT_IN_ARMADA = 4; + IN_PROTECT = 5; + } + + KickArmadaMemberRsp.Retcode retcode = 1; +} + +// CmdID: 2625 +message DissolveArmadaReq { +} + +// CmdID: 2626 +message DissolveArmadaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_GRANTED = 2; + NOT_IN_ARMADA = 3; + IN_DISSOLVE = 4; + IN_ARMADA_WAR = 5; + } + + DissolveArmadaRsp.Retcode retcode = 1; +} + +// CmdID: 2627 +message QuitArmadaReq { +} + +// CmdID: 2628 +message QuitArmadaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 3; + IS_LEADER = 4; + } + + QuitArmadaRsp.Retcode retcode = 1; +} + +// CmdID: 2629 +message CancelApplyArmadaReq { + uint32 armada_id = 1; +} + +// CmdID: 2630 +message CancelApplyArmadaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + CancelApplyArmadaRsp.Retcode retcode = 1; +} + +// CmdID: 2631 +message LevelUpArmadaCabinReq { + ArmadaCabinType type = 1; + uint32 cabin_id = 2; + uint32 grid_id = 3; +} + +// CmdID: 2632 +message LevelUpArmadaCabinRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ARMADA_LEVEL_LACK = 2; + FUND_LACK = 3; + POPL_LACK = 4; + BUSY = 5; + LEVEL_LACK = 6; + CABIN_NOT_EXIST = 7; + CABIN_FULL = 8; + GRID_ERROR = 9; + NOT_GRANTED = 10; + NOT_IN_ARMADA = 11; + NO_OWNERSHIP = 12; + } + + LevelUpArmadaCabinRsp.Retcode retcode = 1; + ArmadaCabinType type = 2; + uint32 cabin_id = 3; + uint32 grid_id = 4; + uint32 level_up_end_time = 5; +} + +// CmdID: 2633 +message CancelLevelUpArmadaCabinReq { + ArmadaCabinType type = 1; + uint32 cabin_id = 2; +} + +// CmdID: 2634 +message CancelLevelUpArmadaCabinRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CABIN_NOT_IN_LEVELUP = 2; + NOT_GRANTED = 3; + NOT_IN_ARMADA = 4; + NO_OWNERSHIP = 5; + } + + CancelLevelUpArmadaCabinRsp.Retcode retcode = 1; +} + +// CmdID: 2635 +message MoveArmadaCabinReq { + repeated ArmadaGrid grid_list = 1; +} + +// CmdID: 2636 +message MoveArmadaCabinRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + NOT_GRANTED = 3; + DATA_ERROR = 4; + NO_OWNERSHIP = 5; + } + + MoveArmadaCabinRsp.Retcode retcode = 1; +} + +// CmdID: 2639 +message GetConsignedOrderDataReq { +} + +// CmdID: 2640 +message GetConsignedOrderDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + } + + GetConsignedOrderDataRsp.Retcode retcode = 1; + uint32 progress = 2; + repeated ConsignedOrder order_list = 3; + uint32 cd_finish_time = 4; + uint32 finish_order_times = 5; + uint32 total_order_times = 6; + uint32 armada_finish_times = 7; + uint32 apply_order_times = 8; + uint32 total_apply_times = 9; + uint32 my_credit = 10; + bool is_reward_taken = 11; +} + +// CmdID: 2641 +message ChooseConsignedOrderReq { + uint32 index = 1; + bool is_choose_all = 3; + repeated ConsignedOrder choosen_order_list = 4; +} + +// CmdID: 2642 +message ChooseConsignedOrderRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + STATUS_ERROR = 3; + INDEX_ERROR = 4; + TIMES_LIMIT = 5; + } + + ChooseConsignedOrderRsp.Retcode retcode = 1; + repeated ConsignedOrder choosen_order_list = 3; + bool is_choose_all = 4; +} + +// CmdID: 2643 +message FinishConsignedOrderReq { + EquipmentItem item = 1; + uint32 unique_id = 2; + uint32 consign_id = 3; + uint32 progress = 4; + uint32 order_level = 5; + ConsignedOrder order = 6; + ConsignedOrder next_order = 7; + uint32 reliable_id = 8; +} + +// CmdID: 2644 +message FinishConsignedOrderRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + IN_CD_TIME = 3; + TIMES_LACK = 4; + CONSUME_ITEM_NOT_EXIST = 5; + CONSUME_ITEM_IN_USE = 6; + CONSUME_ITEM_REPEAT = 7; + CONSUME_ITEM_PROTECTED = 8; + COST_GACHA_TICKET = 9; + COST_SENIOR_EQUIP_FROM_NEW_DEVICE = 10; + COST_SENIOR_EQUIP_CANCEL_PROTECT_TOO_SOON = 11; + ITEM_LACK = 12; + STATUS_ERROR = 13; + ORDER_FINISHED = 14; + ORDER_PROGRESS_CHANGE = 15; + CONSUME_ITEM_IN_FACILITY = 16; + CONSUME_ITEM_GRAND_KEY = 17; + CONSUME_ITEM_PROTECTED_BY_SECURITY_PASSWORD = 18; + } + + FinishConsignedOrderRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; + repeated DropItem drop_item_list = 3; + EquipmentItem item = 4; + uint32 consign_id = 5; + uint32 reliable_id = 8; + uint32 progress = 9; + uint32 finish_order_times = 10; +} + +// CmdID: 2645 +message ResetConsignedOrderReq { +} + +// CmdID: 2646 +message ResetConsignedOrderRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + IN_CD_TIME = 3; + } + + ResetConsignedOrderRsp.Retcode retcode = 1; +} + +// CmdID: 2647 +message GetWareHouseDataReq { +} + +// CmdID: 2648 +message GetWareHouseDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + STATUS_ERROR = 3; + } + + GetWareHouseDataRsp.Retcode retcode = 1; + repeated WareHouseDemand demand_list = 2; + WareHouseStatus status = 3; + WareHouseDemand my_demand = 4; + uint32 donate_uid = 5; + uint32 cd_finish_time = 6; + uint32 day_donate_times = 7; + uint32 max_donate_times = 8; +} + +// CmdID: 2649 +message PostWareHouseDemandReq { + uint32 demand_id = 1; +} + +// CmdID: 2650 +message PostWareHouseDemandRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + STATUS_ERROR = 3; + SCOIN_LACK = 4; + ITEM_LACK = 5; + LEVEL_LACK = 6; + NOT_VALID = 7; + } + + PostWareHouseDemandRsp.Retcode retcode = 1; + uint32 demand_id = 2; +} + +// CmdID: 2651 +message CancelWareHouseDemandReq { +} + +// CmdID: 2652 +message CancelWareHouseDemandRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + STATUS_ERROR = 3; + } + + CancelWareHouseDemandRsp.Retcode retcode = 1; + uint32 demand_id = 2; + bool is_auto_cancel = 3; +} + +// CmdID: 2653 +message DonateWareHouseItemReq { + EquipmentItem item = 1; + uint32 target_uid = 2; + uint32 demand_id = 3; +} + +// CmdID: 2654 +message DonateWareHouseItemRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + TARGET_NOT_IN_ARMADA = 3; + STATUS_ERROR = 4; + CONSUME_ITEM_NOT_EXIST = 5; + CONSUME_ITEM_IN_USE = 6; + CONSUME_ITEM_REPEAT = 7; + CONSUME_ITEM_PROTECTED = 8; + COST_GACHA_TICKET = 9; + COST_SENIOR_EQUIP_FROM_NEW_DEVICE = 10; + COST_SENIOR_EQUIP_CANCEL_PROTECT_TOO_SOON = 11; + DONATE_ITEM_LACK = 12; + DONATE_TIMES_LACK = 13; + CONSUME_ITEM_IN_FACILITY = 14; + CONSUME_ITEM_GRAND_KEY = 15; + CONSUME_ITEM_PROTECTED_BY_SECURITY_PASSWORD = 16; + } + + DonateWareHouseItemRsp.Retcode retcode = 1; + EquipmentItem item = 2; + uint32 demand_id = 3; + repeated RewardData reward_list = 4; +} + +// CmdID: 2655 +message GetWareHouseItemReq { +} + +// CmdID: 2656 +message GetWareHouseItemRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + STATUS_ERROR = 3; + } + + GetWareHouseItemRsp.Retcode retcode = 1; + uint32 demand_id = 2; + WareHouseStatus status = 3; + uint32 cd_finish_time = 4; +} + +// CmdID: 2657 +message EnterArmadaChatroomReq { +} + +// CmdID: 2658 +message EnterArmadaChatroomRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + } + + EnterArmadaChatroomRsp.Retcode retcode = 1; + repeated ChatMsg his_chat_msg_list = 2; + repeated ArmadaSystemChatMsg his_system_chat_msg_list = 3; +} + +// CmdID: 2661 +message SendArmadaSystemChatMsgNotify { + ArmadaSystemChatMsg chat_msg = 1; +} + +// CmdID: 2662 +message RecvArmadaSystemChatMsgNotify { + ArmadaSystemChatMsg chat_msg = 1; +} + +// CmdID: 2677 +message DonateWareHouseNotify { +} + +// CmdID: 2678 +message ArmadaBuildNotify { + ArmadaBuildNotifyType type = 1; + ArmadaData armada_data = 2; + repeated ArmadaGrid grid_list = 3; +} + +// CmdID: 2679 +message ArmadaBulletinNotify { + string bulletin = 1; + string contact = 2; +} + +// CmdID: 2680 +message ArmadaManageNotify { + ArmadaManageNotifyType type = 1; + uint32 target_uid = 2; +} + +// CmdID: 2681 +message ArmadaPlayerNotify { + ArmadaPlayerNotifyType type = 1; + uint32 target_uid = 2; + ArmadaMember member = 3; + repeated uint32 member_list = 5; + string new_name = 6; +} + +// CmdID: 2682 +message ArmadaApplyNotify { + ArmadaApplyNotifyType type = 1; + uint32 target_uid = 2; +} + +// CmdID: 2683 +message CancelDissolveArmadaReq { +} + +// CmdID: 2684 +message CancelDissolveArmadaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_GRANTED = 2; + NOT_IN_ARMADA = 3; + } + + CancelDissolveArmadaRsp.Retcode retcode = 1; +} + +// CmdID: 2685 +message GetArmadaBuildOwnershipReq { +} + +// CmdID: 2686 +message GetArmadaBuildOwnershipRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_GRANTED = 2; + NOT_IN_ARMADA = 3; + } + + GetArmadaBuildOwnershipRsp.Retcode retcode = 1; + uint32 build_owner = 2; + uint32 build_ownership_time = 3; +} + +// CmdID: 2687 +message ReleaseArmadaBuildOwnershipReq { +} + +// CmdID: 2688 +message ReleaseArmadaBuildOwnershipRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_GRANTED = 2; + NOT_IN_ARMADA = 3; + } + + ReleaseArmadaBuildOwnershipRsp.Retcode retcode = 1; +} + +// CmdID: 2689 +message ArmadaSendMailReq { + string content = 1; + string sender = 2; +} + +// CmdID: 2690 +message ArmadaSendMailRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_GRANTED = 2; + NOT_IN_ARMADA = 3; + FORMAT_ERROR = 4; + SENSITIVE_WORDS = 5; + SEND_CD = 6; + } + + ArmadaSendMailRsp.Retcode retcode = 1; +} + +// CmdID: 2691 +message ChangeArmadaNameReq { + string name = 1; + bool is_scoin_lack = 2; + bool is_hcoin_lack = 3; +} + +// CmdID: 2692 +message ChangeArmadaNameRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SCOIN_LACK = 2; + HCOIN_LACK = 3; + NAME_REPEAT = 4; + NAME_FORMAT_ERROR = 5; + NAME_SENSITIVE_WORDS = 6; + NOT_IN_ARMADA = 7; + POSITION_LIMIT = 8; + IN_CD = 9; + IN_AUDIT = 10; + } + + ChangeArmadaNameRsp.Retcode retcode = 1; + string name = 2; + string old_name = 3; + string audit_name = 4; + bool is_change_name_free = 5; + uint32 cd_end_time = 6; +} + +// CmdID: 2693 +message JoinArmadaElectionReq { +} + +// CmdID: 2694 +message JoinArmadaElectionRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + IMPEACH_NOT_START = 3; + IN_OPTIONAL_LIST = 4; + LEVEL_LACK = 5; + ACCOUNT_NONE = 6; + } + + JoinArmadaElectionRsp.Retcode retcode = 1; + ArmadaImpeachData impeach_data = 2; +} + +// CmdID: 2731 +message ArmadaLogoutNotify { +} + +// CmdID: 2732 +message QuickApplyJoinArmadaReq { + uint32 level = 1; +} + +// CmdID: 2733 +message QuickApplyJoinArmadaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LEVEL_LACK = 2; + ALREADY_IN_ARMADA = 3; + NO_QUICK_APPLY_ARMADA = 4; + IN_CD_TIME = 5; + IN_LOW_POPL_CD_TIME = 6; + FEATURE_CLOSED = 7; + } + + QuickApplyJoinArmadaRsp.Retcode retcode = 1; +} + +// CmdID: 2799 +message OpenArmadaStageReq { + uint32 hard_level = 1; +} + +// CmdID: 2800 +message OpenArmadaStageRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + NOT_LEADER = 3; + TIME_LIMIT = 4; + BOSS_NOT_FOUND = 5; + LEVEL_LOCK = 6; + POPL_LACK = 7; + HAS_OPEN = 8; + NOT_FINISH = 9; + } + + OpenArmadaStageRsp.Retcode retcode = 1; + uint32 hard_level = 2; +} + +// CmdID: 2801 +message TakeArmadaAchievementReq { + uint32 id = 1; + bool is_take_all = 2; +} + +// CmdID: 2802 +message TakeArmadaAchievementRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + NOT_REACH = 3; + HAS_TAKE = 4; + ALREADY_DISSOLVE = 5; + } + + TakeArmadaAchievementRsp.Retcode retcode = 1; + uint32 id = 2; + RewardData reward_data = 3; + repeated uint32 take_achievement_id_list = 4; + repeated uint32 id_list = 5; + repeated RewardData reward_list = 6; +} + +// CmdID: 2803 +message GetRecommendArmadaMemberListReq { + repeated uint32 uid_list = 1; +} + +// CmdID: 2804 +message GetRecommendArmadaMemberListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + TOO_FREQUENT = 3; + NOT_LEADER = 4; + ZERO = 5; + } + + GetRecommendArmadaMemberListRsp.Retcode retcode = 1; + repeated PlayerFriendBriefData recommend_list = 2; +} + +// CmdID: 2805 +message JoinQuitArmadaNotify { + uint32 uid = 1; + uint32 armada_id = 2; +} + +// CmdID: 2806 +message ArmadaPlayerContributionSyncNotify { + uint32 armada_contribution = 1; + uint32 uid = 2; + uint32 week_contribution = 3; + uint32 total_contribution = 4; +} + +message ArmadaMember { + uint32 uid = 1; + ArmadaPosition position = 2; + PlayerFriendBriefData brief_data = 3; + uint32 week_popl = 4; + uint32 total_popl = 5; + uint32 week_fund = 6; + uint32 total_fund = 7; + uint32 week_contribution = 8; + uint32 total_contribution = 9; +} + +message ArmadaGrid { + uint32 id = 1; + ArmadaCabinType type = 2; + uint32 cabin_id = 3; +} + +message ArmadaContact { + uint32 id = 1; + uint32 level = 2; + repeated uint32 member_list = 3; +} + +message ArmadaHangar { + uint32 id = 1; + uint32 level = 2; +} + +message ArmadaWorkshop { + uint32 id = 1; + uint32 level = 2; +} + +message ArmadaExchequer { + uint32 id = 1; + uint32 level = 2; +} + +message ArmadaBossroom { + uint32 id = 1; + uint32 level = 2; +} + +message ArmadaOptionalLeader { + uint32 id = 1; + uint32 contribution = 2; +} + +message ArmadaImpeachData { + uint32 impeach_status = 1; + repeated ArmadaOptionalLeader optional_leader_list = 2; + uint32 election_end_time = 3; +} + +message ArmadaData { + ArmadaBriefData brief = 1; + repeated ArmadaMember member_list = 2; + ArmadaPosition position = 3; + repeated ArmadaGrid grid_list = 4; + repeated ArmadaContact contact_list = 5; + repeated ArmadaHangar hangar_list = 6; + repeated ArmadaWorkshop workshop_list = 7; + repeated ArmadaExchequer exchequer_list = 8; + repeated ArmadaBossroom bossroom_list = 9; + ArmadaCabinType level_up_cabin_type = 10; + uint32 level_up_cabin_id = 11; + uint32 level_up_end_time = 12; + uint32 dissolve_time = 13; + ArmadaPlayerData armada_player_data = 14; + ArmadaImpeachData impeach_data = 15; + bool is_armada_change_name_free = 16; +} + +message ArmadaPlayerData { + uint32 uid = 1; + repeated uint32 take_achievement_id_list = 2; +} + +message ArmadaBriefData { + uint32 id = 1; + string name = 2; + uint32 level = 3; + string bulletin = 4; + uint32 apply_level = 5; + bool auto_pass = 6; + uint32 auto_pass_level = 7; + uint32 fund = 8; + uint32 fund_cap = 9; + uint32 ap = 10; + uint32 ap_cap = 11; + uint32 popl = 12; + uint32 popl_cap = 13; + uint32 member_num = 14; + uint32 member_cap = 15; + uint32 leader_id = 16; + string leader_name = 17; + string contact = 18; + uint32 contribution = 19; + bool is_low_popl = 20; + uint32 recent_contribution = 21; + uint32 active_level = 23; + uint32 active_member_num = 24; + repeated uint32 friend_uid_list = 25; + PlayerFriendBriefData leader_brief_data = 26; + ArmadaLabel label = 27; +} + +message ArmadaApply { + uint32 uid = 1; + PlayerFriendBriefData brief_data = 2; +} + +message ArmadaApplyResult { + uint32 uid = 1; + PlayerFriendBriefData brief_data = 2; + bool agree = 3; +} + +message WareHouseDemand { + uint32 id = 1; + uint32 uid = 2; +} + +message ArmadaSystemChatMsg { + ArmadaSystemChatMsgType type = 1; + uint32 uid = 2; + string nickname = 3; + uint32 avatar_id = 4; + uint32 dress_id = 5; + uint32 time = 6; + GachaType gacha_type = 7; + uint32 item_id = 8; + uint32 target_avatar_id = 9; + uint32 mission_id = 10; + uint32 armada_level = 11; + ArmadaCabinType cabin_type = 12; + uint32 cabin_level = 13; + ArmadaPosition position = 14; + uint32 target_uid = 15; + uint32 popl_cost = 16; + string old_name = 17; + string new_name = 18; + string text_map = 19; +} + +// CmdID: 2821 +message GetArmadaStageScoreActivityReq { +} + +message ArmadaStageScorePlayerScore { + uint32 uid = 1; + uint32 score = 2; + repeated uint32 avatar_list = 3; +} + +message ArmadaStageScore { + uint32 stage_id = 1; + uint32 score = 2; +} + +// CmdID: 2822 +message GetArmadaStageScoreActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + NOT_OPEN = 3; + } + + GetArmadaStageScoreActivityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 has_take_self_score = 3; + uint32 has_take_armada_score = 4; + repeated ArmadaStageScore stage_score_list = 5; + repeated ArmadaStageScorePlayerScore armada_score_list = 6; +} + +// CmdID: 2823 +message TakeArmadaStageScoreActivityRewardReq { + ArmadaStageScoreActivityRewardType type = 1; +} + +// CmdID: 2824 +message TakeArmadaStageScoreActivityRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + HAS_TAKE = 3; + NOT_FINISH_STAGE = 4; + } + + TakeArmadaStageScoreActivityRewardRsp.Retcode retcode = 1; + ArmadaStageScoreActivityRewardType type = 2; + repeated RewardData reward_list = 3; + repeated ArmadaStageScorePlayerScore score_list = 4; +} + +// CmdID: 2825 +message GetArmadaActivityListReq { +} + +message ArmadaActivity { + ArmadaActivityType type = 1; + uint32 schedule_id = 2; + uint32 begin_time = 3; + uint32 end_time = 4; + uint32 open_day_time = 5; + uint32 close_day_time = 6; +} + +// CmdID: 2826 +message GetArmadaActivityListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetArmadaActivityListRsp.Retcode retcode = 1; + repeated ArmadaActivity activity_list = 2; +} + +message ArmadaReunionMission { + uint32 mission_id = 1; + uint32 finish_times = 2; +} + +// CmdID: 2834 +message GetArmadaReunionActivityReq { +} + +message ArmadaReunionPlayer { + uint32 uid = 1; + repeated Material material_list = 2; +} + +// CmdID: 2835 +message GetArmadaReunionActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_ARMADA = 3; + } + + GetArmadaReunionActivityRsp.Retcode retcode = 1; + uint32 cur_schedule_id = 2; + repeated ArmadaReunionMission mission_list = 3; + repeated ArmadaReunionPlayer player_list = 4; + repeated ChatworldDishReward reward_list = 5; +} + +// CmdID: 2836 +message ArmadaReunionRewardNotify { + ArmadaReunionMission mission = 1; + RewardData reward_data = 2; +} + +// CmdID: 2837 +message TakeArmadaReunionRewardReq { + uint32 reward_id = 1; +} + +// CmdID: 2838 +message TakeArmadaReunionRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_ARMADA = 3; + HAVE_TAKEN = 4; + QUIT_SHORT = 5; + IN_CD_TIME = 6; + } + + TakeArmadaReunionRewardRsp.Retcode retcode = 1; + uint32 reward_id = 2; + RewardData reward_data = 3; + repeated ChatworldDishReward reward_list = 4; +} + +message ArmadaLabel { + uint32 prefix_id = 1; + repeated uint32 label_id_list = 2; + string recruit = 3; +} + +// CmdID: 2840 +message SetArmadaLabelReq { + ArmadaLabel label = 1; +} + +// CmdID: 2841 +message SetArmadaLabelRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + NOT_LEADER = 3; + LABEL_ERROR = 4; + PREFIX_ERROR = 5; + FORMAT_ERROR = 6; + HEXIE_OPEN = 7; + SENSITIVE_WORDS = 8; + } + + SetArmadaLabelRsp.Retcode retcode = 1; + ArmadaLabel label = 2; +} + +// CmdID: 2842 +message GetArmadaStageScoreRankReq { + uint32 stage_id = 1; +} + +// CmdID: 2843 +message GetArmadaStageScoreRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STAGE_ERROR = 3; + } + + GetArmadaStageScoreRankRsp.Retcode retcode = 1; + uint32 stage_id = 2; + RankShowData rank_data = 3; +} + +enum CmdTypeArmada { + CMD_TYPE_ARMADA_NONE = 0; + CMD_GET_ARMADA_DATA_REQ = 2601; + CMD_GET_ARMADA_DATA_RSP = 2602; + CMD_CREATE_ARMADA_REQ = 2603; + CMD_CREATE_ARMADA_RSP = 2604; + CMD_SEARCH_ARMADA_REQ = 2605; + CMD_SEARCH_ARMADA_RSP = 2606; + CMD_APPLY_JOIN_ARMADA_REQ = 2607; + CMD_APPLY_JOIN_ARMADA_RSP = 2608; + CMD_DEAL_ARMADA_APPLY_REQ = 2609; + CMD_DEAL_ARMADA_APPLY_RSP = 2610; + CMD_GET_ARMADA_MANAGE_DATA_REQ = 2611; + CMD_GET_ARMADA_MANAGE_DATA_RSP = 2612; + CMD_SET_ARMADA_APPLY_REQ = 2613; + CMD_SET_ARMADA_APPLY_RSP = 2614; + CMD_SET_ARMADA_BULLETIN_REQ = 2615; + CMD_SET_ARMADA_BULLETIN_RSP = 2616; + CMD_GET_RECOMMEND_ARMADA_REQ = 2617; + CMD_GET_RECOMMEND_ARMADA_RSP = 2618; + CMD_TRANSFER_ARMADA_LEADER_REQ = 2619; + CMD_TRANSFER_ARMADA_LEADER_RSP = 2620; + CMD_SET_ARMADA_POSITION_REQ = 2621; + CMD_SET_ARMADA_POSITION_RSP = 2622; + CMD_KICK_ARMADA_MEMBER_REQ = 2623; + CMD_KICK_ARMADA_MEMBER_RSP = 2624; + CMD_DISSOLVE_ARMADA_REQ = 2625; + CMD_DISSOLVE_ARMADA_RSP = 2626; + CMD_QUIT_ARMADA_REQ = 2627; + CMD_QUIT_ARMADA_RSP = 2628; + CMD_CANCEL_APPLY_ARMADA_REQ = 2629; + CMD_CANCEL_APPLY_ARMADA_RSP = 2630; + CMD_LEVEL_UP_ARMADA_CABIN_REQ = 2631; + CMD_LEVEL_UP_ARMADA_CABIN_RSP = 2632; + CMD_CANCEL_LEVEL_UP_ARMADA_CABIN_REQ = 2633; + CMD_CANCEL_LEVEL_UP_ARMADA_CABIN_RSP = 2634; + CMD_MOVE_ARMADA_CABIN_REQ = 2635; + CMD_MOVE_ARMADA_CABIN_RSP = 2636; + CMD_GET_CONSIGNED_ORDER_DATA_REQ = 2639; + CMD_GET_CONSIGNED_ORDER_DATA_RSP = 2640; + CMD_CHOOSE_CONSIGNED_ORDER_REQ = 2641; + CMD_CHOOSE_CONSIGNED_ORDER_RSP = 2642; + CMD_FINISH_CONSIGNED_ORDER_REQ = 2643; + CMD_FINISH_CONSIGNED_ORDER_RSP = 2644; + CMD_RESET_CONSIGNED_ORDER_REQ = 2645; + CMD_RESET_CONSIGNED_ORDER_RSP = 2646; + CMD_GET_WAREHOUSE_DATA_REQ = 2647; + CMD_GET_WAREHOUSE_DATA_RSP = 2648; + CMD_POST_WAREHOUSE_DEMAND_REQ = 2649; + CMD_POST_WAREHOUSE_DEMAND_RSP = 2650; + CMD_CANCEL_WAREHOUSE_DEMAND_REQ = 2651; + CMD_CANCEL_WAREHOUSE_DEMAND_RSP = 2652; + CMD_DONATE_WAREHOUSE_ITEM_REQ = 2653; + CMD_DONATE_WAREHOUSE_ITEM_RSP = 2654; + CMD_GET_WAREHOUSE_ITEM_REQ = 2655; + CMD_GET_WAREHOUSE_ITEM_RSP = 2656; + CMD_ENTER_ARMADA_CHATROOM_REQ = 2657; + CMD_ENTER_ARMADA_CHATROOM_RSP = 2658; + CMD_SEND_ARMADA_SYSTEM_CHAT_MSG_NOTIFY = 2661; + CMD_RECV_ARMADA_SYSTEM_CHAT_MSG_NOTIFY = 2662; + CMD_DONATE_WAREHOSUE_NOTIFY = 2677; + CMD_ARMADA_BUILD_NOTIFY = 2678; + CMD_ARMADA_BULLETIN_NOTIFY = 2679; + CMD_ARMADA_MANAGE_NOTIFY = 2680; + CMD_ARMADA_PLAYER_NOTIFY = 2681; + CMD_ARMADA_APPLY_NOTIFY = 2682; + CMD_CANCEL_DISSOLVE_ARMADA_REQ = 2683; + CMD_CANCEL_DISSOLVE_ARMADA_RSP = 2684; + CMD_GET_ARMADA_BUILD_OWNERSHIP_REQ = 2685; + CMD_GET_ARMADA_BUILD_OWNERSHIP_RSP = 2686; + CMD_RELEASE_ARMADA_BUILD_OWNERSHIP_REQ = 2687; + CMD_RELEASE_ARMADA_BUILD_OWNERSHIP_RSP = 2688; + CMD_ARMADA_SEND_MAIL_REQ = 2689; + CMD_ARMADA_SEND_MAIL_RSP = 2690; + CMD_CHANGE_ARMADA_NAME_REQ = 2691; + CMD_CHANGE_ARMADA_NAME_RSP = 2692; + CMD_JOIN_ARMADA_ELECTION_REQ = 2693; + CMD_JOIN_ARMADA_ELECTION_RSP = 2694; + CMD_ARMADA_LOGOUT_NOTIFY = 2731; + CMD_QUICK_APPLY_JOIN_ARMADA_REQ = 2732; + CMD_QUICK_APPLY_JOIN_ARMADA_RSP = 2733; + CMD_OPEN_ARMADA_STAGE_REQ = 2799; + CMD_OPEN_ARMADA_STAGE_RSP = 2800; + CMD_TAKE_ARMADA_ACHIEVEMENT_REQ = 2801; + CMD_TAKE_ARMADA_ACHIEVEMENT_RSP = 2802; + CMD_GET_RECOMMEND_ARMADA_MEMBER_LIST_REQ = 2803; + CMD_GET_RECOMMEND_ARMADA_MEMBER_LIST_RSP = 2804; + CMD_JOIN_QUIT_ARMADA_NOTIFY = 2805; + CMD_ARMADA_PLAYER_CONTRIBUTION_SYNC_NOTIFY = 2806; + CMD_GET_ARMADA_STAGE_SCORE_ACTIVITY_REQ = 2821; + CMD_GET_ARMADA_STAGE_SCORE_ACTIVITY_RSP = 2822; + CMD_TAKE_ARMADA_STAGE_SCORE_ACTIVITY_REWARD_REQ = 2823; + CMD_TAKE_ARMADA_STAGE_SCORE_ACTIVITY_REWARD_RSP = 2824; + CMD_GET_ARMADA_ACTIVITY_LIST_REQ = 2825; + CMD_GET_ARMADA_ACTIVITY_LIST_RSP = 2826; + CMD_GET_ARMADA_REUNION_ACTIVITY_REQ = 2834; + CMD_GET_ARMADA_REUNION_ACTIVITY_RSP = 2835; + CMD_ARMADA_REUNION_REWARD_NOTIFY = 2836; + CMD_TAKE_ARMADA_REUNION_REWARD_REQ = 2837; + CMD_TAKE_ARMADA_REUNION_REWARD_RSP = 2838; + CMD_SET_ARMADA_LABEL_REQ = 2840; + CMD_SET_ARMADA_LABEL_RSP = 2841; + CMD_GET_ARMADA_STAGE_SCORE_RANK_REQ = 2842; + CMD_GET_ARMADA_STAGE_SCORE_RANK_RSP = 2843; +} + +enum ArmadaPlayerStatus { + ARMADA_PLAYER_STATUS_NONE = 0; + ARMADA_PLAYER_NOT_JOIN = 1; + ARMADA_PLAYER_APPLY = 2; + ARMADA_PLAYER_CHOOSE_CONTACT = 3; + ARMADA_PLAYER_JOINED = 4; +} + +enum ArmadaPosition { + ARMADA_POSITION_NONE = 0; + ARMADA_POSITION_LEADER = 1; + ARMADA_POSITION_VICELEADER = 2; + ARMADA_POSITION_MEMBER = 3; +} + +enum ArmadaCabinType { + ARMADA_CABIN_NONE = 0; + ARMADA_CABIN_MAIN = 1; + ARMADA_CABIN_CONTACT = 2; + ARMADA_CABIN_HANGAR = 3; + ARMADA_CABIN_WORKSHOP = 4; + ARMADA_CABIN_EXCHEQUER = 5; + ARMADA_CABIN_BOSS = 6; +} + +enum WareHouseStatus { + WAREHOUSE_STATUS_NONE = 0; + WAREHOUSE_STATUS_NORMAL = 1; + WAREHOUSE_STATUS_DEMANDING = 2; + WAREHOUSE_STATUS_FINISH = 3; + WAREHOUSE_STATUS_CD = 4; +} + +enum ArmadaSystemChatMsgType { + ARMADA_SYSTEM_CHAT_MSG_TYPE_NONE = 0; + ARMADA_CHAT_MSG_GACHA = 1; + ARMADA_CHAT_MSG_AVATAR_STAR_UP = 2; + ARMADA_CHAT_MSG_AVATAR_UNLOCK = 3; + ARMADA_CHAT_MSG_JOIN_ARMADA = 4; + ARMADA_CHAT_MSG_MISSION_FINISH = 5; + ARMADA_CHAT_MSG_LEVEL_UP = 6; + ARMADA_CHAT_MSG_CABIN_BUILD_FINISH = 7; + ARMADA_CHAT_MSG_CABIN_LEVEL_UP = 8; + ARMADA_CHAT_MSG_POSITION = 9; + ARMADA_CHAT_MSG_KICK = 10; + ARMADA_CHAT_MSG_KEEPUP = 11; + ARMADA_CHAT_MSG_CANCEL_DISSOLVE = 12; + ARMADA_CHAT_MSG_CHANGE_NAME = 13; + ARMADA_CHAT_MSG_TEXT_MAP = 14; +} + +enum ArmadaBuildNotifyType { + ARMADA_BUILD_NOTIFY_TYPE_NONE = 0; + ARMADA_BUILD_NOTIFY_START = 1; + ARMADA_BUILD_NOTIFY_CANCEL = 2; + ARMADA_BUILD_NOTIFY_FINISH = 3; + ARMADA_BUILD_NOTIFY_MOVE = 4; +} + +enum ArmadaManageNotifyType { + ARMADA_MANAGE_NOTIFY_TYPE_NONE = 0; + ARMADA_MANAGE_NOTIFY_LEADER = 1; + ARMADA_MANAGE_NOTIFY_VICE_LEADER_SET = 2; + ARMADA_MANAGE_NOTIFY_VICE_LEADER_CANCEL = 3; +} + +enum ArmadaPlayerNotifyType { + ARMADA_PLAYER_NOTIFY_TYPE_NONE = 0; + ARMADA_PLAYER_NOTIFY_JOIN = 1; + ARMADA_PLAYER_NOTIFY_QUIT = 2; + ARMADA_PLAYER_NOTIFY_KICK = 3; + ARMADA_PLAYER_NOTIFY_DISSOLVE = 4; + ARMADA_PLAYER_NOTIFY_CHANGE_NAME = 5; +} + +enum ArmadaApplyNotifyType { + ARMADA_APPLY_NOTIFY_TYPE_NONE = 0; + ARMADA_APPLY_NOTIFY_NEW = 1; + ARMADA_APPLY_NOTIFY_APPROVE = 2; + ARMADA_APPLY_NOTIFY_REJECT = 3; +} + +enum ArmadaStageScoreActivityRewardType { + ARMADA_STAGE_SCORE_ACTIVITY_REWARD_TYPE_NONE = 0; + ARMADA_STAGE_SCORE_ACTIVITY_REWARD_TYPE_SELF = 1; + ARMADA_STAGE_SCORE_ACTIVITY_REWARD_TYPE_ARMADA = 2; +} + +enum ArmadaActivityType { + ARMADA_ACTIVITY_TYPE_NONE = 0; + ARMADA_ACTIVITY_ARMADA_BOSS = 1; + ARMADA_ACTIVITY_MATRIX = 2; + ARMADA_ACTIVITY_QUESTION = 3; + ARMADA_ACTIVITY_TRADING_CARD = 4; + ARMADA_ACTIVITY_ARMADA_STAGE_SCORE_ACTIVITY = 5; + ARMADA_ACTIVITY_REUNION = 6; +} + +enum ArmadaLabelType { + ARMADA_LABEL_TYPE_NONE = 0; + ARMADA_LABEL_PREFIX = 1; + ARMADA_LABEL = 2; +} + +// CmdID: 3000 +message GetAvatarMissionActivityReq { +} + +// CmdID: 3001 +message GetAvatarMissionActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetAvatarMissionActivityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 avatar_sample_id = 3; + uint32 choose_avatar_time = 4; + uint32 reset_choose_times = 5; + uint32 last_refresh_time = 6; + uint32 daily_contract_point = 7; + bool is_daily_reward_taken = 8; + uint32 activity_finish_days = 9; + repeated uint32 taken_reward_days_list = 10; + uint32 daily_reward_num = 11; +} + +// CmdID: 3002 +message ChooseAvatarMissionAvatarReq { + uint32 sample_id = 1; +} + +// CmdID: 3003 +message ChooseAvatarMissionAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + HAVE_CHOOSEN = 3; + } + + ChooseAvatarMissionAvatarRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 sample_id = 3; +} + +// CmdID: 3004 +message TakeAvatarMissionDailyRewardReq { +} + +// CmdID: 3005 +message TakeAvatarMissionDailyRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + HAVE_TAKEN = 3; + LACK_CONTRACT_POINT = 4; + } + + TakeAvatarMissionDailyRewardRsp.Retcode retcode = 1; + RewardData reward = 2; +} + +// CmdID: 3006 +message TakeAvatarMissionPhaseRewardReq { + uint32 days = 1; +} + +// CmdID: 3007 +message TakeAvatarMissionPhaseRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + HAVE_TAKEN = 3; + LACK_DAYS = 4; + NO_REWARD = 5; + } + + TakeAvatarMissionPhaseRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 days = 3; + RewardData reward = 4; +} + +// CmdID: 3008 +message ResetAvatarMissionAvatarReq { +} + +// CmdID: 3009 +message ResetAvatarMissionAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + CAN_NOT_RESET = 3; + NOT_CHOOSE = 4; + } + + ResetAvatarMissionAvatarRsp.Retcode retcode = 1; +} + +enum CmdTypeAvatarmission { + CMD_TYPE_AVATARMISSION_NONE = 0; + CMD_GET_AVATAR_MISSION_ACTIVITY_REQ = 3000; + CMD_GET_AVATAR_MISSION_ACTIVITY_RSP = 3001; + CMD_CHOOSE_AVATAR_MISSION_AVATAR_REQ = 3002; + CMD_CHOOSE_AVATAR_MISSION_AVATAR_RSP = 3003; + CMD_TAKE_AVATAR_MISSION_DAILY_REWARD_REQ = 3004; + CMD_TAKE_AVATAR_MISSION_DAILY_REWARD_RSP = 3005; + CMD_TAKE_AVATAR_MISSION_PHASE_REWARD_REQ = 3006; + CMD_TAKE_AVATAR_MISSION_PHASE_REWARD_RSP = 3007; + CMD_RESET_AVATAR_MISSION_AVATAR_REQ = 3008; + CMD_RESET_AVATAR_MISSION_AVATAR_RSP = 3009; +} + +// CmdID: 3750 +message GetBattlePassReq { +} + +// CmdID: 3751 +message GetBattlePassRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetBattlePassRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + uint32 level = 3; + uint32 exp = 4; + uint32 has_take_reward_level = 5; + repeated uint32 has_got_ticket_list = 6; + uint32 phase_max_exp = 7; + uint32 phase_exp = 8; + bool is_take_phase_free_exp = 9; + uint32 next_schedule_inherit_exp = 12; + uint32 cur_schedule_inherit_exp = 13; +} + +// CmdID: 3752 +message BuyBattlePassTicketReq { + BattlePassTicketType type = 1; +} + +// CmdID: 3753 +message BuyBattlePassTicketRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + TYPE_ERROR = 3; + HAS_GOT = 4; + LACK_MCOIN = 5; + FEATURE_CLOSED = 6; + UPGRADE_FEATURE_CLOSED = 7; + } + + BuyBattlePassTicketRsp.Retcode retcode = 1; + repeated RewardData advanced_reward_list = 2; + repeated RewardData luxury_reward_list = 3; + repeated uint32 prev_has_got_ticket_list = 4; +} + +// CmdID: 3754 +message TakeBattlePassLevelRewardReq { +} + +// CmdID: 3755 +message TakeBattlePassLevelRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + HAS_TAKE = 3; + FEATURE_CLOSED = 4; + } + + TakeBattlePassLevelRewardRsp.Retcode retcode = 1; + repeated RewardData basic_reward_list = 2; + repeated RewardData advanced_reward_list = 3; + repeated RewardData luxury_reward_list = 4; +} + +// CmdID: 3756 +message BuyBattlePassLevelReq { + uint32 target_level = 1; + uint32 hcoin_cost = 2; + uint32 mcoin_cost = 3; +} + +// CmdID: 3757 +message BuyBattlePassLevelRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + HCOIN_LACK = 3; + LEVEL_ERROR = 4; + HCOIN_ERROR = 5; + FEATURE_CLOSED = 6; + MCOIN_LACK = 7; + MCOIN_ERROR = 8; + } + + BuyBattlePassLevelRsp.Retcode retcode = 1; +} + +// CmdID: 3758 +message TakeBattlePassPhaseExpReq { +} + +// CmdID: 3759 +message TakeBattlePassPhaseExpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + HAS_TAKE = 3; + } + + TakeBattlePassPhaseExpRsp.Retcode retcode = 1; + uint32 add_exp = 2; +} + +// CmdID: 3767 +message GetBattlePassMissionPanelReq { + uint32 panel_id = 1; +} + +// CmdID: 3768 +message GetBattlePassMissionPanelRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetBattlePassMissionPanelRsp.Retcode retcode = 1; + repeated PanelMissionData mission_list = 2; +} + +enum CmdTypeBattlepass { + CMD_TYPE_BATTLEPASS_NONE = 0; + CMD_GET_BATTLE_PASS_REQ = 3750; + CMD_GET_BATTLE_PASS_RSP = 3751; + CMD_BUY_BATTLE_PASS_TICKET_REQ = 3752; + CMD_BUY_BATTLE_PASS_TICKET_RSP = 3753; + CMD_TAKE_BATTLE_PASS_LEVEL_REWARD_REQ = 3754; + CMD_TAKE_BATTLE_PASS_LEVEL_REWARD_RSP = 3755; + CMD_BUY_BATTLE_PASS_LEVEL_REQ = 3756; + CMD_BUY_BATTLE_PASS_LEVEL_RSP = 3757; + CMD_TAKE_BATTLE_PASS_PHASE_EXP_REQ = 3758; + CMD_TAKE_BATTLE_PASS_PHASE_EXP_RSP = 3759; + CMD_GET_BATTLE_PASS_MISSION_PANEL_REQ = 3767; + CMD_GET_BATTLE_PASS_MISSION_PANEL_RSP = 3768; +} + +enum BattlePassTicketType { + BATTLE_PASS_TICKET_NONE = 0; + BATTLE_PASS_TICKET_NORMAL = 1; + BATTLE_PASS_TICKET_ADVANCED = 2; + BATTLE_PASS_TICKET_LUXURY = 3; +} + +enum BuyBattlePassType { + BUY_BATTLE_PASS_TYPE_NONE = 0; + BUY_BATTLE_PASS_USE_HCOIN = 1; + BUY_BATTLE_PASS_USE_MCOIN = 2; +} + +// CmdID: 7950 +message ChapterArkGetDataReq { + uint32 chapter_id = 1; +} + +message ChapterArkRoleInfo { + uint32 id = 1; + uint32 level = 2; +} + +message ChapterArkSkillInfo { + uint32 id = 1; + uint32 level = 2; +} + +message ChapterArkSupSkillInfo { + uint32 id = 1; + uint32 level = 2; +} + +message ChapterArkTowerChallengeInfo { + uint32 tower_id = 1; + uint32 cur_floor_id = 2; + uint32 avatar_id = 3; + uint32 avatar_hp = 4; + repeated uint32 buff_list = 5; + uint32 total_score = 6; + uint32 total_cost_time = 7; +} + +message ChapterArkTowerSettledInfo { + uint32 tower_id = 1; + uint32 max_floor = 2; + uint32 max_score = 3; +} + +message ChapterArk { + uint32 chapter_id = 1; + repeated ChapterArkRoleInfo role_list = 2; + repeated uint32 avatar_list = 3; + repeated ChapterArkSkillInfo skill_list = 4; + repeated uint32 daily_stage_list = 5; + repeated uint32 cur_day_finished_daily_stage_iist = 6; + uint32 reward_line_taken_progress = 7; + bool is_finish_opening = 8; + repeated uint32 branch_stage_chosen_site_list = 9; + repeated uint32 passed_daily_stage_list = 10; + uint32 cur_phase_id = 11; + repeated uint32 mid_term_daily_stage_list = 12; + uint32 mid_term_daily_drop_material_num = 13; + repeated ChapterArkSupSkillInfo sup_skill_list = 14; + repeated ChapterArkTowerChallengeInfo tower_challenge_info_list = 15; + repeated ChapterArkTowerSettledInfo tower_settled_info_list = 16; +} + +// CmdID: 7951 +message ChapterArkGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSED = 2; + } + + ChapterArkGetDataRsp.Retcode retcode = 1; + ChapterArk chapter_ark = 2; +} + +// CmdID: 7952 +message ChapterArkRoleLevelUpReq { + uint32 chapter_id = 1; + uint32 role_id = 2; + uint32 target_level = 3; +} + +// CmdID: 7953 +message ChapterArkRoleLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ROLE_ERROR = 2; + NO_UNLOCK_AVATAR = 3; + TARGET_LEVEL_ERROR = 4; + LEVEL_LIMIT = 5; + MATERIAL_LACK = 6; + FEATURE_CLOSED = 7; + } + + ChapterArkRoleLevelUpRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + uint32 role_id = 3; +} + +// CmdID: 7954 +message ChapterArkSkillUnlockReq { + uint32 chapter_id = 1; + uint32 skill_id = 2; +} + +// CmdID: 7955 +message ChapterArkSkillUnlockRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SKILL_ERROR = 2; + NOT_MEET_CONDITION = 3; + RELATED_AVATAR_LOCKED = 4; + FEATURE_CLOSED = 5; + MATERIAL_LACK = 6; + } + + ChapterArkSkillUnlockRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + uint32 skill_id = 3; +} + +// CmdID: 7956 +message ChapterArkSkillLevelUpReq { + uint32 chapter_id = 1; + uint32 skill_id = 2; + uint32 target_level = 3; +} + +// CmdID: 7957 +message ChapterArkSkillLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SKILL_ERROR = 2; + IS_LOCK = 3; + TARGET_LEVEL_ERROR = 4; + MATERIAL_LACK = 5; + FEATURE_CLOSED = 6; + } + + ChapterArkSkillLevelUpRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + uint32 skill_id = 3; +} + +// CmdID: 7958 +message ChapterArkTakeRewardLineRewardReq { + uint32 chapter_id = 1; +} + +// CmdID: 7959 +message ChapterArkTakeRewardLineRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_REWARD = 2; + FEATURE_CLOSED = 3; + } + + ChapterArkTakeRewardLineRewardRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + RewardData reward_data = 3; + uint32 reward_line_taken_progress = 4; +} + +// CmdID: 7960 +message ChapterArkGetRankReq { + uint32 chapter_id = 1; + uint32 stage_id = 2; +} + +// CmdID: 7961 +message ChapterArkGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_RANK = 2; + STAGE_ERROR = 3; + FEATURE_CLOSED = 4; + } + + ChapterArkGetRankRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + uint32 stage_id = 3; + RankShowData rank_data = 4; + uint32 rank_percent = 5; + uint32 rank = 6; +} + +// CmdID: 7962 +message ChapterArkFinishOpeningReq { + uint32 chapter_id = 1; +} + +// CmdID: 7963 +message ChapterArkFinishOpeningRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSED = 2; + } + + ChapterArkFinishOpeningRsp.Retcode retcode = 1; + uint32 chapter_id = 2; +} + +// CmdID: 7964 +message ChapterArkSyncAutoUnlockNotify { + uint32 chapter_id = 1; + repeated uint32 avatar_id_list = 2; + repeated uint32 skill_id_list = 3; +} + +// CmdID: 7965 +message ChapterArkSupSkillLevelUpReq { + uint32 chapter_id = 1; + uint32 sup_skill_id = 2; + uint32 target_level = 3; +} + +// CmdID: 7966 +message ChapterArkSupSkillLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSED = 2; + SUP_SKILL_ERROR = 3; + TARGET_LEVEL_ERROR = 4; + MATERIAL_LACK = 5; + RELATED_AVATAR_LOCKED = 6; + SUP_SKILL_LOCKED = 7; + AVATAR_LEVEL_LACKED = 8; + } + + ChapterArkSupSkillLevelUpRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + uint32 sup_skill_id = 3; +} + +// CmdID: 7967 +message ChapterArkSettleTowerReq { + uint32 tower_id = 1; +} + +// CmdID: 7968 +message ChapterArkSettleTowerRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + INVALID_TOWER = 2; + FEATURE_CLOSED = 3; + } + + ChapterArkSettleTowerRsp.Retcode retcode = 1; + uint32 tower_id = 2; + ChapterArkTowerChallengeInfo tower_challenge_info = 3; + RewardData reward_data = 4; + bool is_abandon = 5; +} + +// CmdID: 7969 +message ChapterArkReportTowerFloorReq { + uint32 tower_id = 1; + uint32 floor_id = 2; + uint32 avatar_hp = 3; + repeated uint32 select_buff_list = 4; + uint32 score = 5; + uint32 cost_time = 6; +} + +// CmdID: 7970 +message ChapterArkReportTowerFloorRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + INVALID_TOWER = 2; + NOT_BEGIN = 3; + FLOOR_ERROR = 4; + FEATURE_CLOSED = 5; + INVALID_BUFF = 6; + } + + ChapterArkReportTowerFloorRsp.Retcode retcode = 1; + uint32 tower_id = 2; + uint32 floor_id = 3; +} + +// CmdID: 7971 +message ArkPlusActivityGetDataReq { +} + +message ArkPlusBuffInfo { + uint32 buff_id = 1; + uint32 num = 2; +} + +message ArkPlusChallengeInfo { + uint32 stage_id = 1; + uint32 cur_room_id = 2; + uint32 room_event_id = 3; + uint32 last_room_id = 4; + uint32 settled_progress = 5; + repeated uint32 avatar_id_list = 6; + repeated uint32 avatar_trial_list = 7; + repeated ArkPlusBuffInfo buff_list = 8; + string transaction_str = 9; + uint32 total_time = 10; + int32 temperature = 11; + uint32 ice_coffin_add_lift_material_num = 12; +} + +message ArkPlusSettledChallengeInfo { + uint32 stage_id = 1; + uint32 max_lift_score = 2; +} + +message ArkPlusActivity { + uint32 schedule_id = 1; + ArkPlusChallengeInfo cur_challenge_info = 2; + repeated ArkPlusSettledChallengeInfo settled_challenge_info_list = 3; +} + +// CmdID: 7972 +message ArkPlusActivityGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + ArkPlusActivityGetDataRsp.Retcode retcode = 1; + ArkPlusActivity ark_plus_activity = 2; +} + +// CmdID: 7973 +message ArkPlusActivityFinishRoomReq { + uint32 stage_id = 1; + uint32 cur_room_id = 2; + uint32 next_room_id = 3; + uint32 lift_material_num = 4; + uint32 coin_material_num = 5; + uint32 room_time = 6; + uint32 battle_time = 7; + int32 temperature = 8; +} + +// CmdID: 7974 +message ArkPlusActivityFinishRoomRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STAGE_NOT_BEGIN = 3; + CUR_ROOM_MISMATCH = 4; + INVALID_NEXT_ROOM = 5; + INVALID_MATERIAL = 6; + AVATAR_ERROR = 7; + } + + ArkPlusActivityFinishRoomRsp.Retcode retcode = 1; + uint32 stage_id = 2; + uint32 cur_room_id = 3; + uint32 next_room_id = 4; + uint32 next_room_event = 5; + uint32 get_buff_id = 6; + uint32 coin_material_num = 7; + uint32 settled_progress = 8; + uint32 lift_material_num = 9; +} + +// CmdID: 7975 +message ArkPlusActivityResetChallengeReq { + uint32 stage_id = 1; +} + +// CmdID: 7976 +message ArkPlusActivityResetChallengeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_CHALLENGE = 3; + } + + ArkPlusActivityResetChallengeRsp.Retcode retcode = 1; + uint32 stage_id = 2; + ArkPlusChallengeInfo challenge_info = 3; +} + +// CmdID: 7977 +message ArkPlusActivityGetRankReq { + uint32 stage_id = 1; +} + +// CmdID: 7978 +message ArkPlusActivityGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NO_RANK = 3; + } + + ArkPlusActivityGetRankRsp.Retcode retcode = 1; + uint32 stage_id = 2; + uint32 schedule_id = 3; + RankShowData rank_data = 4; + uint32 rank_percent = 5; + uint32 rank = 6; +} + +// CmdID: 7979 +message ArkPlusActivityAddLiftMaterialReq { + uint32 stage_id = 1; + uint32 room_id = 2; + uint32 material_num = 3; + int32 ice_coffin_add_material_num = 4; +} + +// CmdID: 7980 +message ArkPlusActivityAddLiftMaterialRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STAGE_NOT_BEGIN = 3; + ROOM_MISMATCH = 4; + MATERIAL_NUM_MISMATCH = 5; + INVALID_ADD_MATERIAL_NUM = 6; + } + + ArkPlusActivityAddLiftMaterialRsp.Retcode retcode = 1; + uint32 material_num = 2; + uint32 ice_coffin_total_add_material_num = 3; +} + +enum CmdTypeChapterark { + CMD_TYPE_CHAPTERARK_NONE = 0; + CMD_CHAPTER_ARK_GET_DATA_REQ = 7950; + CMD_CHAPTER_ARK_GET_DATA_RSP = 7951; + CMD_CHAPTER_ARK_ROLE_LEVEL_UP_REQ = 7952; + CMD_CHAPTER_ARK_ROLE_LEVEL_UP_RSP = 7953; + CMD_CHAPTER_ARK_SKILL_UNLOCK_REQ = 7954; + CMD_CHAPTER_ARK_SKILL_UNLOCK_RSP = 7955; + CMD_CHAPTER_ARK_SKILL_LEVEL_UP_REQ = 7956; + CMD_CHAPTER_ARK_SKILL_LEVEL_UP_RSP = 7957; + CMD_CHAPTER_ARK_TAKE_REWARD_LINE_REWARD_REQ = 7958; + CMD_CHAPTER_ARK_TAKE_REWARD_LINE_REWARD_RSP = 7959; + CMD_CHAPTER_ARK_GET_RANK_REQ = 7960; + CMD_CHAPTER_ARK_GET_RANK_RSP = 7961; + CMD_CHAPTER_ARK_FINISH_OPENING_REQ = 7962; + CMD_CHAPTER_ARK_FINISH_OPENING_RSP = 7963; + CMD_CHAPTER_ARK_SYNC_AUTO_UNLOCK_NOTIFY = 7964; + CMD_CHAPTER_ARK_SUP_SKILL_LEVEL_UP_REQ = 7965; + CMD_CHAPTER_ARK_SUP_SKILL_LEVEL_UP_RSP = 7966; + CMD_CHAPTER_ARK_SETTLE_TOWER_REQ = 7967; + CMD_CHAPTER_ARK_SETTLE_TOWER_RSP = 7968; + CMD_CHAPTER_ARK_REPORT_TOWER_FLOOR_REQ = 7969; + CMD_CHAPTER_ARK_REPORT_TOWER_FLOOR_RSP = 7970; + CMD_ARK_PLUS_ACTIVITY_GET_DATA_REQ = 7971; + CMD_ARK_PLUS_ACTIVITY_GET_DATA_RSP = 7972; + CMD_ARK_PLUS_ACTIVITY_FINISH_ROOM_REQ = 7973; + CMD_ARK_PLUS_ACTIVITY_FINISH_ROOM_RSP = 7974; + CMD_ARK_PLUS_ACTIVITY_RESET_CHALLENGE_REQ = 7975; + CMD_ARK_PLUS_ACTIVITY_RESET_CHALLENGE_RSP = 7976; + CMD_ARK_PLUS_ACTIVITY_GET_RANK_REQ = 7977; + CMD_ARK_PLUS_ACTIVITY_GET_RANK_RSP = 7978; + CMD_ARK_PLUS_ACTIVITY_ADD_LIFT_MATERIAL_REQ = 7979; + CMD_ARK_PLUS_ACTIVITY_ADD_LIFT_MATERIAL_RSP = 7980; +} + +enum ChapterArkStageType { + CHAPTER_ARK_STAGE_TYPE_NONE = 0; + CHAPTER_ARK_STAGE_MAIN = 1; + CHAPTER_ARK_STAGE_BRANCH = 2; + CHAPTER_ARK_STAGE_DAILY = 3; + CHAPTER_ARK_STAGE_LINEAR = 4; + CHAPTER_ARK_STAGE_CHALLENGE = 5; + CHAPTER_ARK_STAGE_TUTORIAL = 6; + CHAPTER_ARK_STAGE_MID_TERM_DAILY = 7; + CHAPTER_ARK_STAGE_TOWER = 8; + CHAPTER_ARK_STAGE_SUPPORT_CHALLENGE = 9; +} + +enum ChapterArkStageAvatarChoiceType { + CHAPTER_ARK_STAGE_AVATAR_CHOICE_NO_CHARACTER = 0; + CHAPTER_ARK_STAGE_AVATAR_CHOICE_TRIAL = 1; + CHAPTER_ARK_STAGE_AVATAR_CHOICE_VIRTUAL = 2; + CHAPTER_ARK_STAGE_AVATAR_CHOICE_NORMAL = 3; +} + +enum ChapterArkSkillType { + CHAPTER_ARK_SKILL_TYPE_NONE = 0; + CHAPTER_ARK_SKILL_MAIN = 1; + CHAPTER_ARK_SKILL_SUB = 2; + CHAPTER_ARK_SKILL_ASSIST = 3; + CHAPTER_ARK_SKILL_PROPERTY = 4; +} + +enum ChapterArkAttribute { + CHAPTER_ARK_ATTRIBUTE_NONE = 0; + CHAPTER_ARK_ATTRIBUTE_PHYSICS = 1; + CHAPTER_ARK_ATTRIBUTE_FIRE = 2; + CHAPTER_ARK_ATTRIBUTE_LIGHTNING = 3; +} + +enum ChapterArkSupSkillType { + CHAPTER_ARK_SUP_SKILL_TYPE_NONE = 0; + CHAPTER_ARK_SUP_SKILL_MAIN = 1; + CHAPTER_ARK_SUP_SKILL_GENRE = 2; + CHAPTER_ARK_SUP_SKILL_GENRE_SUB = 3; + CHAPTER_ARK_SUP_SKILL_AWAKEN = 4; +} + +// CmdID: 7650 +message ChapterBwWorldGetDataReq { + uint32 chapter_id = 1; +} + +message ChapterBwWorldRune { + uint32 unique_id = 1; + uint32 rune_id = 2; + uint32 level = 3; + uint32 exp = 4; + repeated uint32 affix_id_list = 5; +} + +message ChapterBwWorldTowerStage { + uint32 stage_id = 1; + uint32 max_score = 2; + uint32 save_point_floor = 3; +} + +message ChapterBwWorld { + uint32 chapter_id = 1; + repeated uint32 equip_rune_unique_id_list = 2; + repeated ChapterBwWorldRune rune_list = 3; + uint32 reward_line_taken_progress = 4; + repeated ChapterBwWorldTowerStage tower_stage_list = 5; +} + +// CmdID: 7651 +message ChapterBwWorldGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSED = 2; + } + + ChapterBwWorldGetDataRsp.Retcode retcode = 1; + ChapterBwWorld chapter_bw_world = 2; +} + +// CmdID: 7652 +message ChapterBwWorldUpdateEquipRuneReq { + uint32 chapter_id = 1; + repeated uint32 rune_unique_id_list = 2; +} + +// CmdID: 7653 +message ChapterBwWorldUpdateEquipRuneRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + RUNE_ERROR = 2; + FEATURE_CLOSED = 3; + } + + ChapterBwWorldUpdateEquipRuneRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + repeated uint32 rune_unique_id_list = 3; +} + +// CmdID: 7654 +message ChapterBwWorldRuneLevelUpReq { + uint32 chapter_id = 1; + uint32 main_rune_unique_id = 2; + uint32 target_level = 3; + uint32 target_exp = 4; + repeated Material exp_material_list = 5; + repeated uint32 assist_rune_unique_id_list = 6; +} + +// CmdID: 7655 +message ChapterBwWorldRuneLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TARGET_LEVEL_ERROR = 2; + RUNE_ERROR = 3; + MATERIAL_LACK = 4; + GEN_AFFIX_ERROR = 5; + FEATURE_CLOSED = 6; + } + + ChapterBwWorldRuneLevelUpRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + ChapterBwWorldRune main_rune = 3; + repeated Material return_material_list = 4; + ChapterBwWorldRune old_main_rune = 5; +} + +// CmdID: 7656 +message ChapterBwWorldRuneSynthesisReq { + uint32 chapter_id = 1; + uint32 main_rune_unique_id = 2; + uint32 assist_rune_unique_id = 3; + uint32 main_rune_affix_index = 4; + uint32 assist_rune_affix_index = 5; +} + +// CmdID: 7657 +message ChapterBwWorldRuneSynthesisRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + RUNE_ERROR = 2; + AFFIX_ERROR = 3; + FEATURE_CLOSED = 4; + } + + ChapterBwWorldRuneSynthesisRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + ChapterBwWorldRune main_rune = 3; + repeated Material return_material_list = 4; +} + +// CmdID: 7658 +message ChapterBwWorldGetRankReq { + uint32 chapter_id = 1; + uint32 stage_id = 2; +} + +// CmdID: 7659 +message ChapterBwWorldGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_RANK = 2; + FEATURE_CLOSED = 3; + } + + ChapterBwWorldGetRankRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + uint32 stage_id = 3; + RankShowData rank_data = 4; + uint32 rank_percent = 5; + uint32 rank = 6; +} + +// CmdID: 7660 +message ChapterBwWorldTakeRewardLineRewardReq { + uint32 chapter_id = 1; +} + +// CmdID: 7661 +message ChapterBwWorldTakeRewardLineRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_REWARD = 2; + FEATURE_CLOSED = 3; + } + + ChapterBwWorldTakeRewardLineRewardRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + RewardData reward_data = 3; + uint32 reward_line_taken_progress = 4; +} + +// CmdID: 7662 +message ChapterBwWorldSyncRuneNotify { + uint32 chapter_id = 1; + uint32 stage_id = 2; + repeated ChapterBwWorldRune new_rune_list = 3; +} + +// CmdID: 7663 +message ChapterBwWorldTowerStageReportFloorReq { + uint32 chapter_id = 1; + uint32 stage_id = 2; + uint32 floor = 3; + uint32 score = 4; + uint32 cost_time = 5; + StageEndStatus end_status = 6; +} + +// CmdID: 7664 +message ChapterBwWorldTowerStageReportFloorRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SCORE_ERROR = 2; + FEATURE_CLOSED = 3; + FLOOR_ERROR = 4; + STAGE_ERROR = 5; + } + + ChapterBwWorldTowerStageReportFloorRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + uint32 stage_id = 3; + uint32 floor = 4; + uint32 score = 5; + uint32 cost_time = 6; + StageEndStatus end_status = 7; +} + +// CmdID: 7665 +message ChapterBwWorldRefreshTicketReq { + uint32 chapter_id = 1; +} + +// CmdID: 7666 +message ChapterBwWorldRefreshTicketRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSED = 2; + HAS_TAKE = 3; + } + + ChapterBwWorldRefreshTicketRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + RewardData add_ticket = 3; +} + +enum CmdTypeChapterbwworld { + CMD_TYPE_CHAPTERBWWORLD_NONE = 0; + CMD_CHAPTER_BW_WORLD_GET_DATA_REQ = 7650; + CMD_CHAPTER_BW_WORLD_GET_DATA_RSP = 7651; + CMD_CHAPTER_BW_WORLD_UPDATE_EQUIP_RUNE_REQ = 7652; + CMD_CHAPTER_BW_WORLD_UPDATE_EQUIP_RUNE_RSP = 7653; + CMD_CHAPTER_BW_WORLD_RUNE_LEVEL_UP_REQ = 7654; + CMD_CHAPTER_BW_WORLD_RUNE_LEVEL_UP_RSP = 7655; + CMD_CHAPTER_BW_WORLD_RUNE_SYNTHESIS_REQ = 7656; + CMD_CHAPTER_BW_WORLD_RUNE_SYNTHESIS_RSP = 7657; + CMD_CHAPTER_BW_WORLD_GET_RANK_REQ = 7658; + CMD_CHAPTER_BW_WORLD_GET_RANK_RSP = 7659; + CMD_CHAPTER_BW_WORLD_TAKE_REWARD_LINE_REWARD_REQ = 7660; + CMD_CHAPTER_BW_WORLD_TAKE_REWARD_LINE_REWARD_RSP = 7661; + CMD_CHAPTER_BW_WORLD_SYNC_RUNE_NOTIFY = 7662; + CMD_CHAPTER_BW_WORLD_TOWER_STAGE_REPORT_FLOOR_REQ = 7663; + CMD_CHAPTER_BW_WORLD_TOWER_STAGE_REPORT_FLOOR_RSP = 7664; + CMD_CHAPTER_BW_WORLD_REFRESH_TICKET_REQ = 7665; + CMD_CHAPTER_BW_WORLD_REFRESH_TICKET_RSP = 7666; +} + +enum ChapterBwWorldStageType { + CHAPTER_BW_WORLD_STAGE_TYPE_NONE = 0; + CHAPTER_BW_WORLD_STAGE_MAIN = 1; + CHAPTER_BW_WORLD_STAGE_BRANCH = 2; + CHAPTER_BW_WORLD_STAGE_DAILY = 3; + CHAPTER_BW_WORLD_STAGE_PRE_CHALLENGE = 4; + CHAPTER_BW_WORLD_STAGE_CHALLENGE = 5; + CHAPTER_BW_WORLD_STAGE_THEME = 6; + CHAPTER_BW_WORLD_STAGE_TOWER = 7; +} + +enum ChapterBwWorldRuneMainType { + CHAPTER_BW_WORLD_RUNE_MAIN_TYPE_NONE = 0; + CHAPTER_BW_WORLD_RUNE_MAIN_TYPE_WHITE = 1; + CHAPTER_BW_WORLD_RUNE_MAIN_TYPE_BLACK = 2; + CHAPTER_BW_WORLD_RUNE_MAIN_TYPE_CHAOS = 3; +} + +// CmdID: 8350 +message ChapterKnightRichManGetDataReq { + uint32 rich_man_id = 1; +} + +message ChapterKnightRichManMapRecord { + uint32 map_id = 1; + uint32 max_score = 2; + uint32 total_score = 3; + uint32 pass_times = 4; + uint32 floor = 5; +} + +message ChapterKnightRichManEffect { + uint32 effect_id = 1; + uint32 left_times = 2; + uint32 card_id = 3; + uint32 event_id = 4; + uint32 map_id = 5; + uint32 weather_id = 6; +} + +message ChapterKnightRichManCard { + uint32 card_id = 1; + uint32 num = 2; +} + +message ChapterKnightRichManBuff { + uint32 buff_id = 1; + uint32 level = 2; +} + +message ChapterKnightRichManItem { + uint32 card_id = 1; + ChapterKnightRichManBuff buff = 2; + bool is_selected = 3; + uint32 cost_coin = 4; + uint32 flower_id = 5; +} + +message ChapterKnightRichManShop { + uint32 shop_refresh_times = 1; + repeated ChapterKnightRichManItem shop_item_list = 2; +} + +message ChapterKnightRichManEventGroup { + uint32 event_group_id = 1; + uint32 left_times = 2; +} + +message PjmsChapterKnightRichManGambleResult { + uint32 p1_point = 1; + uint32 p2_point = 2; + uint32 gamble_id = 3; +} + +message PjmsChapterKnightRichManHouseOpRecord { + uint32 house_operate_num = 1; + uint32 rent = 2; +} + +message ChapterKnightRichManCurSite { + uint32 site_id = 1; + ChapterKnightRichManSiteStatus status = 2; + repeated ChapterKnightRichManItem wait_select_item_list = 4; + ChapterKnightRichManEventGroup event_group = 5; + PjmsChapterKnightRichManGambleResult gamble_result = 6; + PjmsChapterKnightRichManHouseOpRecord house_op_record = 8; +} + +message ChapterKnightRichManFlower { + uint32 flower_id = 1; + uint32 add_coin_num = 2; +} + +message PjmsChapterKnightRichManHouse { + uint32 house_level = 1; + uint32 num = 2; +} + +message ChapterKnightRichManReplacedSite { + uint32 site_id = 1; + ChapterKnightRichManSiteType site_type = 2; +} + +message ChapterKnightRichManCurFloor { + uint32 floor = 1; + uint32 weather_id = 2; + uint32 next_weather_id = 3; + uint32 next_weather_id_after_refresh = 4; + uint32 refresh_weather_times = 5; + uint32 left_move_times = 6; + repeated uint32 finish_floor_wait_select_flower_list = 7; + uint32 finish_floor_select_flower_times = 8; + repeated uint32 roadblock_site_id_list = 9; + uint32 last_dice_num = 11; + ChapterKnightRichManFloorStatus status = 12; + uint32 left_cheat_times = 13; + repeated ChapterKnightRichManReplacedSite replaced_site_list = 14; +} + +message ChapterKnightRichManMap { + uint32 map_id = 1; + ChapterKnightRichManCurSite cur_site = 2; + uint32 control_dice_count = 3; + uint32 score = 4; + uint32 coin_num = 5; + uint32 total_coin_num = 6; + uint32 stage_times = 7; + repeated ChapterKnightRichManEffect effect_list = 8; + repeated ChapterKnightRichManCard card_list = 9; + repeated ChapterKnightRichManBuff buff_list = 10; + uint32 refresh_wait_select_item_times = 12; + uint32 move_times = 13; + ChapterKnightRichManCurFloor cur_floor = 14; + repeated uint32 flower_id_list = 15; + repeated uint32 equip_flower_list = 16; + uint32 used_card_num = 18; + uint32 max_dice_num_times = 19; + repeated PjmsChapterKnightRichManHouse house_list = 20; + repeated uint32 finish_site_dice_num_list = 21; +} + +message ChapterKnightRichMan { + uint32 rich_man_id = 1; + repeated ChapterKnightRichManMapRecord map_record_list = 2; + ChapterKnightRichManMap cur_map = 3; + ChapterKnightRichManMap cur_map_at_floor_end = 4; +} + +// CmdID: 8351 +message ChapterKnightRichManGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + ChapterKnightRichManGetDataRsp.Retcode retcode = 1; + ChapterKnightRichMan rich_man = 2; + uint32 rich_man_id = 3; +} + +// CmdID: 8352 +message ChapterKnightRichManGetRankReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; +} + +// CmdID: 8353 +message ChapterKnightRichManGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NO_RANK = 3; + } + + ChapterKnightRichManGetRankRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; + uint32 map_id = 3; + RankShowData rank_data = 4; + uint32 rank_percent = 5; + uint32 rank = 6; +} + +// CmdID: 8354 +message ChapterKnightRichManGetMapReq { + uint32 rich_man_id = 1; +} + +// CmdID: 8355 +message ChapterKnightRichManGetMapRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + MAP_ERROR = 3; + } + + ChapterKnightRichManGetMapRsp.Retcode retcode = 1; + ChapterKnightRichManMap map = 2; + uint32 rich_man_id = 3; +} + +// CmdID: 8356 +message ChapterKnightRichManBeginMapReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; +} + +// CmdID: 8357 +message ChapterKnightRichManBeginMapRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + IN_MAP = 3; + NO_MEET_CONDITION = 4; + } + + ChapterKnightRichManBeginMapRsp.Retcode retcode = 1; + ChapterKnightRichManMap map = 2; + uint32 rich_man_id = 3; +} + +// CmdID: 8358 +message ChapterKnightRichManEndMapReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; +} + +// CmdID: 8359 +message ChapterKnightRichManEndMapRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + ChapterKnightRichManEndMapRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; + ChapterKnightRichManMap map = 3; +} + +// CmdID: 8360 +message ChapterKnightRichManThrowDiceReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; + uint32 end_site = 3; + bool is_use_control_dice = 4; + uint32 dice_num = 5; +} + +// CmdID: 8361 +message ChapterKnightRichManThrowDiceRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STATUS_ERROR = 3; + SITE_ERROR = 4; + } + + ChapterKnightRichManThrowDiceRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; +} + +// CmdID: 8362 +message ChapterKnightRichManFinishGameReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; + uint32 try_times = 3; + uint32 reset_times = 5; +} + +// CmdID: 8363 +message ChapterKnightRichManFinishGameRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STATUS_ERROR = 3; + } + + ChapterKnightRichManFinishGameRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; +} + +// CmdID: 8364 +message ChapterKnightRichManRefreshShopReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; + uint32 shop_refresh_times = 3; +} + +// CmdID: 8365 +message ChapterKnightRichManRefreshShopRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STATUS_ERROR = 3; + LACK_COIN = 4; + } + + ChapterKnightRichManRefreshShopRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; + ChapterKnightRichManShop shop = 3; +} + +// CmdID: 8366 +message ChapterKnightRichManBuyShopGoodsReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; + uint32 shop_goods_idx = 3; +} + +// CmdID: 8367 +message ChapterKnightRichManBuyShopGoodsRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STATUS_ERROR = 3; + LACK_COIN = 4; + } + + ChapterKnightRichManBuyShopGoodsRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; + ChapterKnightRichManShop shop = 3; +} + +// CmdID: 8368 +message ChapterKnightRichManFinishSiteReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; +} + +// CmdID: 8369 +message ChapterKnightRichManFinishSiteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STATUS_ERROR = 3; + } + + ChapterKnightRichManFinishSiteRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; +} + +// CmdID: 8370 +message ChapterKnightRichManUseCardReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; + uint32 card_id = 3; + repeated uint32 use_param_list = 4; + bool is_abandon = 5; +} + +// CmdID: 8371 +message ChapterKnightRichManUseCardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STATUS_ERROR = 3; + CARD_ERROR = 4; + } + + ChapterKnightRichManUseCardRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; +} + +// CmdID: 8372 +message ChapterKnightRichManLevelUpBuffReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; + uint32 buff_id = 3; + uint32 target_level = 4; +} + +// CmdID: 8373 +message ChapterKnightRichManLevelUpBuffRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STATUS_ERROR = 3; + TARGET_LEVEL_ERROR = 4; + LACK_COIN = 5; + } + + ChapterKnightRichManLevelUpBuffRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; +} + +// CmdID: 8374 +message ChapterKnightRichManSelectItemReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; + uint32 item_idx = 3; +} + +// CmdID: 8375 +message ChapterKnightRichManSelectItemRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STATUS_ERROR = 3; + } + + ChapterKnightRichManSelectItemRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; +} + +// CmdID: 8376 +message ChapterKnightRichManTriggerEventReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; + uint32 event_id = 3; +} + +// CmdID: 8377 +message ChapterKnightRichManTriggerEventRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STATUS_ERROR = 3; + } + + ChapterKnightRichManTriggerEventRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; +} + +// CmdID: 8378 +message ChapterKnightRichManGetItemNotify { + uint32 coin_num = 1; + uint32 score = 2; + repeated ChapterKnightRichManCard card_list = 3; + repeated ChapterKnightRichManBuff buff_list = 4; + uint32 control_dice_count = 5; + bool is_once_sub_coin = 6; + bool is_once_sub_card = 7; + bool is_once_sub_buff = 8; + repeated uint32 flower_id_list = 9; + repeated ChapterKnightRichManFlower flower_effect_list = 10; + uint32 move_times = 11; +} + +// CmdID: 8379 +message ChapterKnightRichManRefreshWaitSelectItemReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; + uint32 left_refresh_times = 3; +} + +// CmdID: 8380 +message ChapterKnightRichManRefreshWaitSelectItemRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STATUS_ERROR = 3; + LACK_TIMES = 4; + } + + ChapterKnightRichManRefreshWaitSelectItemRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; +} + +// CmdID: 8381 +message ChapterKnightRichManGetShopReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; +} + +// CmdID: 8382 +message ChapterKnightRichManGetShopRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STATUS_ERROR = 3; + } + + ChapterKnightRichManGetShopRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; + ChapterKnightRichManShop shop = 3; +} + +// CmdID: 8383 +message ChapterKnightRichManSelectInitReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; + uint32 buff_id = 3; + uint32 flower_id = 4; +} + +// CmdID: 8384 +message ChapterKnightRichManSelectInitRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STATUS_ERROR = 3; + } + + ChapterKnightRichManSelectInitRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; +} + +// CmdID: 8385 +message ChapterKnightRichManReloadFloorReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; +} + +// CmdID: 8386 +message ChapterKnightRichManReloadFloorRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + ChapterKnightRichManReloadFloorRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; +} + +// CmdID: 8387 +message ChapterKnightRichManEnterFloorReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; +} + +// CmdID: 8388 +message ChapterKnightRichManEnterFloorRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STATUS_ERROR = 3; + } + + ChapterKnightRichManEnterFloorRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; +} + +// CmdID: 8389 +message ChapterKnightRichManEquipFlowerReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; + repeated uint32 flower_id_list = 3; +} + +// CmdID: 8390 +message ChapterKnightRichManEquipFlowerRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STATUS_ERROR = 3; + FLOWER_ERROR = 4; + } + + ChapterKnightRichManEquipFlowerRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; +} + +// CmdID: 8391 +message ChapterKnightRichManRefreshWeatherReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; +} + +// CmdID: 8392 +message ChapterKnightRichManRefreshWeatherRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STATUS_ERROR = 3; + LACK_TIMES = 4; + } + + ChapterKnightRichManRefreshWeatherRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; +} + +// CmdID: 8393 +message ChapterKnightRichManSelectWeatherReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; + uint32 weather_id = 3; +} + +// CmdID: 8394 +message ChapterKnightRichManSelectWeatherRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STATUS_ERROR = 3; + } + + ChapterKnightRichManSelectWeatherRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; +} + +// CmdID: 8395 +message ChapterKnightRichManFinishGambleReq { + enum GambleEndStatus { + GAMBLE_END_STATUS_NONE = 0; + GAMBLE_END_WIN = 1; + GAMBLE_END_LOSE = 2; + GAMBLE_END_NONE = 3; + } + + enum GambleChoice { + GAMBLE_CHOICE_NONE = 0; + GAMBLE_CHOICE_P1 = 1; + GAMBLE_CHOICE_P2 = 2; + GAMBLE_CHOICE_TIE = 3; + } + + uint32 rich_man_id = 1; + uint32 map_id = 2; + uint32 use_coin_num = 3; + uint32 get_coin_num = 4; + ChapterKnightRichManFinishGambleReq.GambleEndStatus end_status = 5; + bool is_cheat = 6; + ChapterKnightRichManFinishGambleReq.GambleChoice choice = 7; +} + +// CmdID: 8396 +message ChapterKnightRichManFinishGambleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STATUS_ERROR = 3; + LACK_COIN = 4; + USE_COIN_EXCEED_LIMIT = 5; + CHEAT_TIMES_LIMIT = 6; + } + + ChapterKnightRichManFinishGambleRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; +} + +// CmdID: 8397 +message ChapterKnightRichManBeginGambleReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; +} + +// CmdID: 8398 +message ChapterKnightRichManBeginGambleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STATUS_ERROR = 3; + } + + ChapterKnightRichManBeginGambleRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; + PjmsChapterKnightRichManGambleResult gamble_result = 3; +} + +// CmdID: 8399 +message ChapterKnightRichManFloorEndSelectFlowerReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; + uint32 flower_id = 3; +} + +// CmdID: 8400 +message ChapterKnightRichManFloorEndSelectFlowerRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STATUS_ERROR = 3; + } + + ChapterKnightRichManFloorEndSelectFlowerRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; +} + +// CmdID: 8401 +message ChapterKnightRichManBuyHouseReq { + uint32 rich_man_id = 1; + uint32 map_id = 2; + uint32 house_level = 3; + uint32 op_times = 4; + bool is_upgrade = 5; +} + +// CmdID: 8402 +message ChapterKnightRichManBuyHouseRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STATUS_ERROR = 3; + LACK_COIN = 4; + TIMES_LIMIT = 5; + HOUSE_UNOWNED = 6; + REPEATE_REQUEST = 7; + } + + ChapterKnightRichManBuyHouseRsp.Retcode retcode = 1; + uint32 rich_man_id = 2; +} + +message PjmsChapterKnightDurandalCubeTileInfo { + uint32 tower_id = 1; + uint32 floor_id = 2; +} + +// CmdID: 8411 +message PjmsChapterKnightDurandalCubeGetDataReq { + uint32 activity_id = 1; +} + +// CmdID: 8412 +message PjmsChapterKnightDurandalCubeGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + PjmsChapterKnightDurandalCubeGetDataRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated PjmsChapterKnightDurandalCubeTileInfo finished_tile_list = 3; +} + +// CmdID: 8413 +message PjmsChapterKnightDurandalCubeTileBeginReq { + uint32 activity_id = 1; + PjmsChapterKnightDurandalCubeTileInfo tile = 2; + uint32 last_max_save_point_id = 3; + string last_button_click_times_str = 4; +} + +// CmdID: 8414 +message PjmsChapterKnightDurandalCubeTileBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + AREA_LOCKED = 3; + } + + PjmsChapterKnightDurandalCubeTileBeginRsp.Retcode retcode = 1; + uint32 activity_id = 2; + PjmsChapterKnightDurandalCubeTileInfo tile = 3; +} + +// CmdID: 8415 +message PjmsChapterKnightDurandalCubeTileEndReq { + uint32 activity_id = 1; + PjmsChapterKnightDurandalCubeTileInfo tile = 2; + StageEndStatus end_status = 3; + uint32 max_save_point_id = 4; + string button_click_times_str = 5; +} + +// CmdID: 8416 +message PjmsChapterKnightDurandalCubeTileEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + PjmsChapterKnightDurandalCubeTileEndRsp.Retcode retcode = 1; + uint32 activity_id = 2; + PjmsChapterKnightDurandalCubeTileInfo tile = 3; + RewardData reward = 4; +} + +// CmdID: 8421 +message PjmsChapterKnightSpaceAdventureGetMainDataReq { + uint32 activity_id = 1; +} + +message PjmsChapterKnightSpaceAdventureShopGoods { + PjmsChapterKnightSpaceAdventureShopGoodsType type = 1; + uint32 goods_param = 2; + uint32 cost = 3; + uint32 left_buy_times = 4; +} + +message PjmsChapterKnightSpaceAdventureShop { + uint32 shop_id = 1; + PjmsChapterKnightSpaceAdventureShopGoods goods_energy_limit = 2; + PjmsChapterKnightSpaceAdventureShopGoods goods_repair = 3; + PjmsChapterKnightSpaceAdventureShopGoods goods_missile = 4; + PjmsChapterKnightSpaceAdventureShopGoods goods_emp = 5; + repeated PjmsChapterKnightSpaceAdventureShopGoods goods_card_list = 6; +} + +message PjmsChapterKnightSpaceAdventureArea { + uint32 area_id = 1; + uint32 cur_site_id = 2; + bool is_passed_cur_site = 3; + repeated uint32 passed_site_list = 4; + repeated uint32 card_list = 11; + repeated uint32 battle_card_list = 12; + uint32 cur_hp = 13; + uint32 max_hp = 14; + uint32 missile_num = 15; + uint32 emp_num = 16; + uint32 max_energy = 17; + uint32 slot_num = 18; + uint32 coin = 31; + PjmsChapterKnightSpaceAdventureShop cur_shop = 32; + uint32 cur_event_id = 41; + string transaction_str = 51; +} + +message PjmsChapterKnightSpaceAdventure { + uint32 activity_id = 1; + repeated PjmsChapterKnightSpaceAdventureArea area_list = 2; + repeated uint32 passed_area_list = 3; +} + +// CmdID: 8422 +message PjmsChapterKnightSpaceAdventureGetMainDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + FEATURE_CLOSED = 3; + } + + PjmsChapterKnightSpaceAdventureGetMainDataRsp.Retcode retcode = 1; + uint32 activity_id = 2; + PjmsChapterKnightSpaceAdventure activity = 3; +} + +// CmdID: 8423 +message PjmsChapterKnightSpaceAdventureSiteBeginReq { + uint32 activity_id = 1; + uint32 area_id = 2; + uint32 site_id = 3; +} + +// CmdID: 8424 +message PjmsChapterKnightSpaceAdventureSiteBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + CUR_SITE_NOT_PASSED = 3; + NOT_REACHABLE = 4; + FEATURE_CLOSED = 5; + } + + PjmsChapterKnightSpaceAdventureSiteBeginRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 area_id = 3; + uint32 site_id = 4; + uint32 event_id = 5; + string site_transaction_str = 6; + uint32 site_fail_times = 7; +} + +// CmdID: 8425 +message PjmsChapterKnightSpaceAdventureSiteEndReq { + enum EndReason { + END_REASON_NONE = 0; + PASS = 1; + FAIL = 2; + QUIT = 4; + } + + uint32 activity_id = 1; + uint32 area_id = 2; + uint32 site_id = 3; + uint32 cur_hp = 4; + uint32 cur_missile_num = 5; + uint32 cur_emp_num = 6; + PjmsChapterKnightSpaceAdventureSiteEndReq.EndReason end_reason = 7; + string client_report = 8; +} + +// CmdID: 8426 +message PjmsChapterKnightSpaceAdventureSiteEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + CUR_SITE_MISMATCH = 3; + FEATURE_CLOSED = 4; + } + + PjmsChapterKnightSpaceAdventureSiteEndRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 area_id = 3; + uint32 site_id = 4; +} + +// CmdID: 8427 +message PjmsChapterKnightSpaceAdventureChooseSiteEventReq { + uint32 activity_id = 1; + uint32 area_id = 2; + uint32 site_id = 3; + uint32 event_id = 4; + uint32 action_id = 5; +} + +// CmdID: 8428 +message PjmsChapterKnightSpaceAdventureChooseSiteEventRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + CUR_SITE_MISMATCH = 3; + EVENT_ID_MISMATCH = 4; + ACTION_ID_MISMATCH = 5; + FEATURE_CLOSED = 6; + } + + PjmsChapterKnightSpaceAdventureChooseSiteEventRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 area_id = 3; + uint32 site_id = 4; + uint32 event_id = 5; + uint32 action_id = 6; +} + +// CmdID: 8429 +message PjmsChapterKnightSpaceAdventureUpdateBattleCardReq { + uint32 activity_id = 1; + uint32 area_id = 2; + repeated uint32 new_battle_card_list = 3; +} + +// CmdID: 8430 +message PjmsChapterKnightSpaceAdventureUpdateBattleCardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + CARD_ID_ERROR = 3; + CARD_LACK = 4; + SLOT_LIMIT = 5; + FEATURE_CLOSED = 6; + } + + PjmsChapterKnightSpaceAdventureUpdateBattleCardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 area_id = 3; +} + +// CmdID: 8431 +message PjmsChapterKnightSpaceAdventureGetShopDataReq { + uint32 activity_id = 1; + uint32 area_id = 2; +} + +// CmdID: 8432 +message PjmsChapterKnightSpaceAdventureGetShopDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NO_VALID_SHOP_NOW = 3; + FEATURE_CLOSED = 4; + } + + PjmsChapterKnightSpaceAdventureGetShopDataRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 area_id = 3; + PjmsChapterKnightSpaceAdventureShop shop = 4; + uint32 coin = 5; +} + +// CmdID: 8433 +message PjmsChapterKnightSpaceAdventureRefreshShopReq { + uint32 activity_id = 1; + uint32 area_id = 2; +} + +// CmdID: 8434 +message PjmsChapterKnightSpaceAdventureRefreshShopRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + COIN_LACK = 3; + FEATURE_CLOSED = 4; + } + + PjmsChapterKnightSpaceAdventureRefreshShopRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 area_id = 3; + PjmsChapterKnightSpaceAdventureShop shop = 4; + uint32 coin = 5; +} + +// CmdID: 8435 +message PjmsChapterKnightSpaceAdventureBuyShopGoodsReq { + uint32 activity_id = 1; + uint32 area_id = 2; + PjmsChapterKnightSpaceAdventureShopGoodsType goods_type = 3; + uint32 goods_idx = 4; +} + +// CmdID: 8436 +message PjmsChapterKnightSpaceAdventureBuyShopGoodsRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + COIN_LACK = 3; + SOLD_OUT = 4; + ENERGY_LIMIT = 5; + FULL_HP = 6; + FEATURE_CLOSED = 7; + } + + PjmsChapterKnightSpaceAdventureBuyShopGoodsRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 area_id = 3; +} + +// CmdID: 8437 +message PjmsChapterKnightSpaceAdventureStatusNotify { + uint32 activity_id = 1; + uint32 area_id = 2; + uint32 cur_site = 3; + repeated uint32 new_card_list = 11; + int32 hp_delta = 12; + int32 max_hp_delta = 13; + int32 missile_num_delta = 14; + int32 emp_num_delta = 15; + int32 max_energy_delta = 16; + int32 slot_num_delta = 17; + int32 coin_delta = 18; +} + +// CmdID: 8438 +message PjmsChapterKnightSpaceAdventureResetAreaReq { + uint32 activity_id = 1; + uint32 area_id = 2; +} + +// CmdID: 8439 +message PjmsChapterKnightSpaceAdventureResetAreaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + AREA_LOCKED = 3; + FEATURE_CLOSED = 4; + } + + PjmsChapterKnightSpaceAdventureResetAreaRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 area_id = 3; +} + +enum CmdTypeChapterknight { + CMD_TYPE_CHAPTERKNIGHT_NONE = 0; + CMD_CHAPTER_KNIGHT_RICH_MAN_GET_DATA_REQ = 8350; + CMD_CHAPTER_KNIGHT_RICH_MAN_GET_DATA_RSP = 8351; + CMD_CHAPTER_KNIGHT_RICH_MAN_GET_RANK_REQ = 8352; + CMD_CHAPTER_KNIGHT_RICH_MAN_GET_RANK_RSP = 8353; + CMD_CHAPTER_KNIGHT_RICH_MAN_GET_MAP_REQ = 8354; + CMD_CHAPTER_KNIGHT_RICH_MAN_GET_MAP_RSP = 8355; + CMD_CHAPTER_KNIGHT_RICH_MAN_BEGIN_MAP_REQ = 8356; + CMD_CHAPTER_KNIGHT_RICH_MAN_BEGIN_MAP_RSP = 8357; + CMD_CHAPTER_KNIGHT_RICH_MAN_END_MAP_REQ = 8358; + CMD_CHAPTER_KNIGHT_RICH_MAN_END_MAP_RSP = 8359; + CMD_CHAPTER_KNIGHT_RICH_MAN_THROW_DICE_REQ = 8360; + CMD_CHAPTER_KNIGHT_RICH_MAN_THROW_DICE_RSP = 8361; + CMD_CHAPTER_KNIGHT_RICH_MAN_FINISH_GAME_REQ = 8362; + CMD_CHAPTER_KNIGHT_RICH_MAN_FINISH_GAME_RSP = 8363; + CMD_CHAPTER_KNIGHT_RICH_MAN_REFRESH_SHOP_REQ = 8364; + CMD_CHAPTER_KNIGHT_RICH_MAN_REFRESH_SHOP_RSP = 8365; + CMD_CHAPTER_KNIGHT_RICH_MAN_BUY_SHOP_GOODS_REQ = 8366; + CMD_CHAPTER_KNIGHT_RICH_MAN_BUY_SHOP_GOODS_RSP = 8367; + CMD_CHAPTER_KNIGHT_RICH_MAN_FINISH_SITE_REQ = 8368; + CMD_CHAPTER_KNIGHT_RICH_MAN_FINISH_SITE_RSP = 8369; + CMD_CHAPTER_KNIGHT_RICH_MAN_USE_CARD_REQ = 8370; + CMD_CHAPTER_KNIGHT_RICH_MAN_USE_CARD_RSP = 8371; + CMD_CHAPTER_KNIGHT_RICH_MAN_LEVEL_UP_BUFF_REQ = 8372; + CMD_CHAPTER_KNIGHT_RICH_MAN_LEVEL_UP_BUFF_RSP = 8373; + CMD_CHAPTER_KNIGHT_RICH_MAN_SELECT_ITEM_REQ = 8374; + CMD_CHAPTER_KNIGHT_RICH_MAN_SELECT_ITEM_RSP = 8375; + CMD_CHAPTER_KNIGHT_RICH_MAN_TRIGGER_EVENT_REQ = 8376; + CMD_CHAPTER_KNIGHT_RICH_MAN_TRIGGER_EVENT_RSP = 8377; + CMD_CHAPTER_KNIGHT_RICH_MAN_GET_ITEM_NOTIFY = 8378; + CMD_CHAPTER_KNIGHT_RICH_MAN_REFRESH_WAIT_SELECT_ITEM_REQ = 8379; + CMD_CHAPTER_KNIGHT_RICH_MAN_REFRESH_WAIT_SELECT_ITEM_RSP = 8380; + CMD_CHAPTER_KNIGHT_RICH_MAN_GET_SHOP_REQ = 8381; + CMD_CHAPTER_KNIGHT_RICH_MAN_GET_SHOP_RSP = 8382; + CMD_CHAPTER_KNIGHT_RICH_MAN_SELECT_INIT_REQ = 8383; + CMD_CHAPTER_KNIGHT_RICH_MAN_SELECT_INIT_RSP = 8384; + CMD_CHAPTER_KNIGHT_RICH_MAN_RELOAD_FLOOR_REQ = 8385; + CMD_CHAPTER_KNIGHT_RICH_MAN_RELOAD_FLOOR_RSP = 8386; + CMD_CHAPTER_KNIGHT_RICH_MAN_ENTER_FLOOR_REQ = 8387; + CMD_CHAPTER_KNIGHT_RICH_MAN_ENTER_FLOOR_RSP = 8388; + CMD_CHAPTER_KNIGHT_RICH_MAN_EQUIP_FLOWER_REQ = 8389; + CMD_CHAPTER_KNIGHT_RICH_MAN_EQUIP_FLOWER_RSP = 8390; + CMD_CHAPTER_KNIGHT_RICH_MAN_REFRESH_WEATHER_REQ = 8391; + CMD_CHAPTER_KNIGHT_RICH_MAN_REFRESH_WEATHER_RSP = 8392; + CMD_CHAPTER_KNIGHT_RICH_MAN_SELECT_WEATHER_REQ = 8393; + CMD_CHAPTER_KNIGHT_RICH_MAN_SELECT_WEATHER_RSP = 8394; + CMD_CHAPTER_KNIGHT_RICH_MAN_FINISH_GAMBLE_REQ = 8395; + CMD_CHAPTER_KNIGHT_RICH_MAN_FINISH_GAMBLE_RSP = 8396; + CMD_CHAPTER_KNIGHT_RICH_MAN_BEGIN_GAMBLE_REQ = 8397; + CMD_CHAPTER_KNIGHT_RICH_MAN_BEGIN_GAMBLE_RSP = 8398; + CMD_CHAPTER_KNIGHT_RICH_MAN_FLOOR_END_SELECT_FLOWER_REQ = 8399; + CMD_CHAPTER_KNIGHT_RICH_MAN_FLOOR_END_SELECT_FLOWER_RSP = 8400; + CMD_CHAPTER_KNIGHT_RICH_MAN_BUY_HOUSE_REQ = 8401; + CMD_CHAPTER_KNIGHT_RICH_MAN_BUY_HOUSE_RSP = 8402; + CMD_PJMS_CHAPTER_KNIGHT_DURANDAL_CUBE_GET_DATA_REQ = 8411; + CMD_PJMS_CHAPTER_KNIGHT_DURANDAL_CUBE_GET_DATA_RSP = 8412; + CMD_PJMS_CHAPTER_KNIGHT_DURANDAL_CUBE_TILE_BEGIN_REQ = 8413; + CMD_PJMS_CHAPTER_KNIGHT_DURANDAL_CUBE_TILE_BEGIN_RSP = 8414; + CMD_PJMS_CHAPTER_KNIGHT_DURANDAL_CUBE_TILE_END_REQ = 8415; + CMD_PJMS_CHAPTER_KNIGHT_DURANDAL_CUBE_TILE_END_RSP = 8416; + CMD_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_GET_MAIN_DATA_REQ = 8421; + CMD_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_GET_MAIN_DATA_RSP = 8422; + CMD_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_SITE_BEGIN_REQ = 8423; + CMD_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_SITE_BEGIN_RSP = 8424; + CMD_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_SITE_END_REQ = 8425; + CMD_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_SITE_END_RSP = 8426; + CMD_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_CHOOSE_SITE_EVENT_REQ = 8427; + CMD_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_CHOOSE_SITE_EVENT_RSP = 8428; + CMD_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_UPDATE_BATTLE_CARD_REQ = 8429; + CMD_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_UPDATE_BATTLE_CARD_RSP = 8430; + CMD_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_GET_SHOP_DATA_REQ = 8431; + CMD_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_GET_SHOP_DATA_RSP = 8432; + CMD_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_REFRESH_SHOP_REQ = 8433; + CMD_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_REFRESH_SHOP_RSP = 8434; + CMD_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_BUY_SHOP_GOODS_REQ = 8435; + CMD_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_BUY_SHOP_GOODS_RSP = 8436; + CMD_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_STATUS_NOTIFY = 8437; + CMD_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_RESET_AREA_REQ = 8438; + CMD_PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_RESET_AREA_RSP = 8439; +} + +enum ChapterKnightRichManSiteStatus { + CHAPTER_KNIGHT_RICH_MAN_SITE_STATUS_NONE = 0; + CHAPTER_KNIGHT_RICH_MAN_SITE_STATUS_FINISH = 1; + CHAPTER_KNIGHT_RICH_MAN_SITE_STATUS_IN_GAME = 2; + CHAPTER_KNIGHT_RICH_MAN_SITE_STATUS_IN_STAGE = 3; + CHAPTER_KNIGHT_RICH_MAN_SITE_STATUS_IN_SHOP = 4; + CHAPTER_KNIGHT_RICH_MAN_SITE_STATUS_WAIT_LEVEL_UP_BUFF = 5; + CHAPTER_KNIGHT_RICH_MAN_SITE_STATUS_WAIT_TRIGGER_EVENT = 6; + CHAPTER_KNIGHT_RICH_MAN_SITE_STATUS_WAIT_SELECT_ITEM = 7; + CHAPTER_KNIGHT_RICH_MAN_SITE_STATUS_WAIT_SELECT_INIT = 8; + CHAPTER_KNIGHT_RICH_MAN_SITE_STATUS_WAIT_GAMBLE = 9; + CHAPTER_KNIGHT_RICH_MAN_SITE_STATUS_WAIT_BUY_HOUSE = 10; +} + +enum ChapterKnightRichManFloorStatus { + CHAPTER_KNIGHT_RICH_MAN_FLOOR_STATUS_NONE = 0; + CHAPTER_KNIGHT_RICH_MAN_FLOOR_STATUS_DOING = 1; + CHAPTER_KNIGHT_RICH_MAN_FLOOR_STATUS_NOT_MEET_GOAL = 2; + CHAPTER_KNIGHT_RICH_MAN_FLOOR_STATUS_SELECT_FLOWER = 3; + CHAPTER_KNIGHT_RICH_MAN_FLOOR_STATUS_FINISH_FLOOR = 4; +} + +enum ChapterKnightRichManSiteType { + CHAPTER_KNIGHT_RICH_MAN_SITE_TYPE_NONE = 0; + CHAPTER_KNIGHT_RICH_MAN_SITE_TYPE_START = 1; + CHAPTER_KNIGHT_RICH_MAN_SITE_TYPE_SHOP = 2; + CHAPTER_KNIGHT_RICH_MAN_SITE_TYPE_LEVEL_UP = 3; + CHAPTER_KNIGHT_RICH_MAN_SITE_TYPE_STAGE = 4; + CHAPTER_KNIGHT_RICH_MAN_SITE_TYPE_ELITE_STAGE = 5; + CHAPTER_KNIGHT_RICH_MAN_SITE_TYPE_BOSS_STAGE = 6; + CHAPTER_KNIGHT_RICH_MAN_SITE_TYPE_ROLL_EVENT = 7; + CHAPTER_KNIGHT_RICH_MAN_SITE_TYPE_CHOICE_EVENT = 8; + CHAPTER_KNIGHT_RICH_MAN_SITE_TYPE_RANDOM_EVENT = 9; + CHAPTER_KNIGHT_RICH_MAN_SITE_TYPE_GAME = 10; + CHAPTER_KNIGHT_RICH_MAN_SITE_TYPE_SCORE = 11; + CHAPTER_KNIGHT_RICH_MAN_SITE_TYPE_COIN = 12; + CHAPTER_KNIGHT_RICH_MAN_SITE_TYPE_CARD = 13; + CHAPTER_KNIGHT_RICH_MAN_SITE_TYPE_FLOWER = 14; + CHAPTER_KNIGHT_RICH_MAN_SITE_TYPE_GAMBLE = 15; + CHAPTER_KNIGHT_RICH_MAN_SITE_TYPE_HOUSE_PROPERTY = 16; + CHAPTER_KNIGHT_RICH_MAN_SITE_TYPE_START_V2 = 17; +} + +enum ChapterKnightRichManEventType { + CHAPTER_KNIGHT_RICH_MAN_EVENT_EMPTY = 0; + CHAPTER_KNIGHT_RICH_MAN_EVENT_ALL = 1; + CHAPTER_KNIGHT_RICH_MAN_EVENT_ADD_EFFECT = 2; + CHAPTER_KNIGHT_RICH_MAN_EVENT_RANDOM_ADD_BUFF_WITH_LEVEL = 3; + CHAPTER_KNIGHT_RICH_MAN_EVENT_RANDOM_LEVEL_UP_BUFF = 4; + CHAPTER_KNIGHT_RICH_MAN_EVENT_ADD_COIN = 5; + CHAPTER_KNIGHT_RICH_MAN_EVENT_ADD_COIN_BY_PERCENT = 6; + CHAPTER_KNIGHT_RICH_MAN_EVENT_LOSE_ALL_COIN = 7; + CHAPTER_KNIGHT_RICH_MAN_EVENT_ADD_SCORE = 8; + CHAPTER_KNIGHT_RICH_MAN_EVENT_ADD_SCORE_BY_PERCENT = 9; + CHAPTER_KNIGHT_RICH_MAN_EVENT_RANDOM_ADD_CARD = 10; + CHAPTER_KNIGHT_RICH_MAN_EVENT_ADD_CARD = 11; + CHAPTER_KNIGHT_RICH_MAN_EVENT_LOSE_ALL_CARD = 12; + CHAPTER_KNIGHT_RICH_MAN_EVENT_ADD_COIN_WITH_GAMBLING = 13; + CHAPTER_KNIGHT_RICH_MAN_EVENT_ADD_SCORE_WITH_GAMBLING = 14; + CHAPTER_KNIGHT_RICH_MAN_EVENT_ADD_CARD_WITH_GAMBLING = 15; + CHAPTER_KNIGHT_RICH_MAN_EVENT_ADD_COIN_BY_NEXT_FLOOR_MIN_COIN_PERCENT = 16; + CHAPTER_KNIGHT_RICH_MAN_EVENT_RANDOM_ADD_FLOWER = 17; + CHAPTER_KNIGHT_RICH_MAN_EVENT_ADD_FLOWER_WITH_GAMBLING = 18; +} + +enum ChapterKnightRichManCardType { + CHAPTER_KNIGHT_RICH_MAN_CARD_TYPE_NONE = 0; + CHAPTER_KNIGHT_RICH_MAN_CARD_ADD_EFFECT = 1; + CHAPTER_KNIGHT_RICH_MAN_CARD_ADD_CONTROL_DICE = 2; + CHAPTER_KNIGHT_RICH_MAN_CARD_TRIGGER_RANDOM_EVENT_GROUP = 3; + CHAPTER_KNIGHT_RICH_MAN_CARD_RANDOM_LEVEL_UP_BUFF = 4; + CHAPTER_KNIGHT_RICH_MAN_CARD_RANDOM_ADD_BUFF = 5; + CHAPTER_KNIGHT_RICH_MAN_CARD_ADD_SCORE = 6; + CHAPTER_KNIGHT_RICH_MAN_CARD_ADD_REFRESH_TIMES_AFTER_STAGE = 7; + CHAPTER_KNIGHT_RICH_MAN_CARD_GAMBLE = 8; + CHAPTER_KNIGHT_RICH_MAN_CARD_ADD_NEXT_FLOOR_MIN_COIN_PRECENT_COIN = 9; + CHAPTER_KNIGHT_RICH_MAN_CARD_REENTER_SITE = 10; + CHAPTER_KNIGHT_RICH_MAN_CARD_PUT_ROADBLOCK = 11; + CHAPTER_KNIGHT_RICH_MAN_CARD_TRADE_HOUSE = 12; +} + +enum ChapterKnightRichManEffectType { + CHAPTER_KNIGHT_RICH_MAN_EFFECT_EMPTY = 0; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_MORE_COIN_PERCENT_SETTLE_SITE = 1; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_MORE_SCORE_PERCENT_SETTLE_SITE = 2; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_MORE_CARD_PERCENT_SETTLE_SITE = 3; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_NO_COIN_SETTLE_SITE = 4; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_NO_BUFF_SETTLE_SITE = 5; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_NO_CARD_SETTLE_SITE = 6; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_ADD_CONTROL_DICE_MOVE_TIMES = 11; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_ADD_SELF_PERCENT_COIN_NUM_MOVE_TIMES = 12; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_DEL_SELF_PERCENT_COIN_NUM_MOVE_TIMES = 13; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_ADD_RANDOM_CARD_MOVE_TIMES = 14; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_MORE_EVENT_TIMES_EVENT_SITE = 16; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_ADD_SELF_PERCENT_COIN_LOSE_EFFECT = 17; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_SKIP_STAGE = 18; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_HIGHER_BUFF_LEVEL_AFTER_STAGE = 19; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_ADD_SCORE_USE_COIN = 20; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_MORE_COIN_PERCENT_OVERALL = 21; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_SHOP_BUY_PRICE_LOWER_PERCENT = 22; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_CANNOT_USE_CARD = 23; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_HIGHER_NEXT_FLOOR_MIN_COIN_BY_PERCENT = 24; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_MORE_PERCENT_BET_AMOUNT = 25; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_THROW_MIN_DICE_NUM = 26; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_MORE_PERCENT_HOUSE_RENT = 27; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_REPLACE_GAMBLE_SITE_WITH_COIN_SITE = 28; + CHAPTER_KNIGHT_RICH_MAN_EFFECT_REPLACE_HOUSE_PROPERTY_SITE_WITH_COIN_SITE = 29; +} + +enum ChapterKnightRichManFlowerId { + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_NONE = 0; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_ENTER_SITE_ADD_COIN = 1; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_ENTER_SITE_ADD_COIN_BY_EQUIP_FLOWER_NUM = 7; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_ENTER_SITE_ADD_COIN_BY_NEXT_FLOOR_MIN_COIN_PERCENT = 19; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_SETTLE_COIN_SITE_MORE_COIN_PERCENT_BY_EQUIP_FLOWER_NUM = 8; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_SETTLE_COIN_SITE_MORE_COIN_PERCENT = 17; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_SETTLE_CARD_SITE_ADD_COIN_BY_USE_CARD_NUM = 12; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_ENTER_FLOOR_EXTRA_MOVE_TIMES = 6; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_ENTER_FLOOR_MORE_CONTROL_DICE = 2; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_ENTER_FLOOR_MORE_CARD_SITE = 10; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_ENTER_FLOOR_ADD_GAMBLE_CHEAT_TIMES = 28; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_ENTER_FLOOR_MORE_GAMBLE_SITE = 29; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_ENTER_FLOOR_MORE_HOUSE_SITE = 30; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_THROW_DICE_ADD_COIN_IF_CONTROL_DICE = 3; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_THROW_DICE_MULTI_DICE_WITH_ONE = 4; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_THROW_DICE_MULTI_DICE_WITH_SUM = 5; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_THROW_DICE_ADD_COIN_IF_SAME_DICE_NUM = 13; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_THROW_DICE_ADD_COIN_IF_SAME_ODD_OR_EVEN_DICE_NUM = 14; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_THROW_DICE_ADD_COIN_IF_MAX_DICE_NUM = 15; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_THROW_DICE_ADD_COIN_BY_DICE_NUM = 16; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_THROW_DICE_ADD_EXTRA_MOVE_TIMES_BY_CHANCE = 21; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_USE_CARD_ADD_COIN = 11; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_USE_CARD_ADD_RANDOM_CARD_BY_CHANCE = 9; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_TRIGGER_EVENT_MORE_COIN_PERCENT = 18; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_FINISH_SITE_ADD_COIN_BY_PERCENT = 20; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_HOUSE_MORE_PERCENT_RENT = 22; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_HOUSE_MORE_OPERATE_TIME = 23; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_HOUSE_LOWER_PRICE = 24; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_GAMBLE_BET_COIN_NUM_BY_COIN_PERCENT = 25; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_GAMBLE_MORE_ODDS = 26; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_GAMBLE_RETURN_PERCENT_COIN_WHEN_LOSE = 27; + CHAPTER_KNIGHT_RICH_MAN_FLOWER_ID_CONVERT_TO_COIN = 31; +} + +enum ChapterKnightRichManBuffGradeType { + CHAPTER_KNIGHT_RICH_MAN_BUFF_GRADE_TYPE_NONE = 0; + CHAPTER_KNIGHT_RICH_MAN_BUFF_GRADE_CORE = 1; + CHAPTER_KNIGHT_RICH_MAN_BUFF_GRADE_NORMAL = 2; + CHAPTER_KNIGHT_RICH_MAN_BUFF_GRADE_SPECIAL = 3; + CHAPTER_KNIGHT_RICH_MAN_BUFF_GRADE_CONVERT_TO_SCORE = 4; +} + +enum ChapterKnightRichManEndFloorType { + CHAPTER_KNIGHT_RICH_MAN_END_FLOOR_TYPE_NONE = 0; + CHAPTER_KNIGHT_RICH_MAN_END_FLOOR_REACH_SITE = 1; + CHAPTER_KNIGHT_RICH_MAN_END_FLOOR_USE_ALL_DICE = 2; +} + +enum PjmsChapterKnightDurandalCubeSiteType { + PJMS_CHAPTER_KNIGHT_DURANDAL_CUBE_SITE_TYPE_NONE = 0; + PJMS_CHAPTER_DURANDAL_CUBE_SITE_PLOT = 1; + PJMS_CHAPTER_DURANDAL_CUBE_SITE_STAGE = 2; + PJMS_CHAPTER_DURANDAL_CUBE_SITE_TILE = 3; +} + +enum PjmsChapterKnightSpaceAdventureConditionType { + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_CONDITION_NONE = 0; + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_CONDITION_HP_PERCENT_IN_RANGE = 1; + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_CONDITION_OWN_ALL_CARD = 2; + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_CONDITION_NOT_OWN_ANY_CARD = 3; + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_CONDITION_CUR_TIME_GE = 4; +} + +enum PjmsChapterKnightSpaceAdventureSiteType { + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_SITE_TYPE_BEGIN = 0; + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_SITE_TYPE_SHIP_FIGHT = 1; + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_SITE_TYPE_AVATAR = 2; + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_SITE_TYPE_EVENT = 3; + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_SITE_TYPE_SHOP = 4; + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_SITE_TYPE_PLOT = 5; +} + +enum PjmsChapterKnightSpaceAdventureActionType { + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_ACTION_TYPE_NONE = 0; + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_ACTION_TYPE_APPLY_STATUS = 1; + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_ACTION_TYPE_ADD_CARDS = 2; + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_ACTION_TYPE_TRIGGER_ACTION_LIST = 3; + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_ACTION_TYPE_TRIGGER_RANDOM_ACTION = 4; + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_ACTION_TYPE_ADD_RANDOM_CARD = 5; + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_ACTION_TYPE_NO_MORE_HP_HEAL = 6; +} + +enum PjmsChapterKnightSpaceAdventureShopGoodsType { + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_SHOP_GOODS_INVALID = 0; + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_SHOP_GOODS_ENERGY_LIMIT = 1; + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_SHOP_GOODS_REPAIR = 2; + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_SHOP_GOODS_MISSILE = 3; + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_SHOP_GOODS_EMP = 4; + PJMS_CHAPTER_KNIGHT_SPACE_ADVENTURE_SHOP_GOODS_CARD = 5; +} + +message ChatgroupMember { + uint32 uid = 1; + ChatgroupPosition position = 2; + PlayerFriendBriefData brief_data = 3; +} + +message Chatgroup { + uint32 chatgroup_id = 1; + string name = 2; + string notice = 3; + uint32 icon_id = 4; + repeated ChatgroupMember member_list = 5; + repeated uint32 label_id_list = 6; +} + +// CmdID: 2200 +message CreateChatgroupReq { + string name = 1; + string notice = 2; + uint32 icon_id = 3; + repeated uint32 label_id_list = 4; +} + +// CmdID: 2201 +message CreateChatgroupRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CREATE_MAX = 2; + JOIN_MAX = 3; + SENSITIVE_WORD = 4; + LEVEL_LACK = 5; + LABEL_ERROR = 6; + NAME_FORMAT_ERROR = 7; + NOTICE_FORMAT_ERROR = 8; + FEATURE_LIMIT = 9; + IN_AUDIT = 10; + } + + CreateChatgroupRsp.Retcode retcode = 1; + Chatgroup chatgroup = 2; + string audit_name = 3; + string audit_notice = 4; +} + +// CmdID: 2202 +message InviteChatgroupReq { + uint32 chatgroup_id = 1; + repeated uint32 friend_list = 2; + repeated uint32 master_pupil_list = 3; + repeated uint32 stranger_uid_list = 4; +} + +// CmdID: 2203 +message InviteChatgroupRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_CREATER = 2; + EXCEED_MAX_MEMBER_NUM = 3; + GROUP_NOT_FOUND = 4; + NOT_IN_GROUP = 5; + UID_NOT_EXIST = 6; + FRIEND_ERROR = 7; + MASTER_PUPIL_ERROR = 8; + FEATURE_LIMIT = 9; + FEATURE_CLOSED = 10; + } + + InviteChatgroupRsp.Retcode retcode = 1; + repeated uint32 succ_uid_list = 2; + repeated uint32 succ_stranger_uid_list = 3; +} + +message ChatgroupInvite { + uint32 chatgroup_id = 1; + string name = 2; + string notice = 3; + uint32 icon_id = 4; + uint32 inviter_uid = 5; + PlayerFriendBriefData inviter_info = 6; + uint32 invite_time = 7; + uint32 chatgroup_member_num = 8; +} + +// CmdID: 2204 +message GetChatgroupListReq { + bool is_all = 1; + repeated uint32 chatgroup_id_list = 2; +} + +// CmdID: 2205 +message GetChatgroupListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetChatgroupListRsp.Retcode retcode = 1; + bool is_all = 2; + repeated Chatgroup chatgroup_list = 3; + repeated ChatgroupInvite invite_list = 4; +} + +// CmdID: 2206 +message SetChatgroupReq { + uint32 chatgroup_id = 1; + string name = 2; + string notice = 3; + uint32 icon_id = 4; + repeated uint32 label_id_list = 5; +} + +// CmdID: 2207 +message SetChatgroupRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_CREATER = 2; + SENSITIVE_WORD = 3; + LABEL_ERROR = 4; + NAME_FORMAT_ERROR = 5; + NOTICE_FORMAT_ERROR = 6; + FORBIDDEN = 7; + IN_CD = 8; + IN_AUDIT = 9; + } + + SetChatgroupRsp.Retcode retcode = 1; + uint32 chatgroup_id = 2; + string name = 3; + string notice = 4; + uint32 icon_id = 5; + repeated uint32 label_id_list = 6; + string old_name = 7; + string old_notice = 8; + string audit_name = 9; + string audit_notice = 10; + uint32 cd_end_time = 11; +} + +// CmdID: 2208 +message LeaveChatgroupReq { + uint32 chatgroup_id = 1; +} + +// CmdID: 2209 +message LeaveChatgroupRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_MEMBER = 2; + } + + LeaveChatgroupRsp.Retcode retcode = 1; + uint32 chatgroup_id = 2; +} + +message ChatgroupJoinMsg { + uint32 inviter_uid = 1; + repeated ChatgroupMember member_list = 2; +} + +message ChatgroupSettingMsg { + uint32 operator_uid = 1; + string name = 2; + string notice = 3; + uint32 icon_id = 4; + repeated uint32 label_id_list = 5; +} + +message ChatgroupLeaveMsg { + uint32 operator_uid = 1; + uint32 leave_uid = 2; +} + +// CmdID: 2211 +message ChatgroupSystemNotify { + ChatgroupSystemNotifyType type = 1; + uint32 chatgroup_id = 2; + Chatgroup chatgroup = 3; + ChatgroupJoinMsg join_msg = 4; + ChatgroupLeaveMsg leave_msg = 5; + ChatgroupSettingMsg setting_msg = 6; + ChatgroupInvite invite = 7; + repeated uint32 target_uid_list = 8; + string chatgroup_name = 9; + uint32 time = 10; +} + +// CmdID: 2212 +message KickChatgroupMemberReq { + uint32 chatgroup_id = 1; + uint32 target_uid = 2; +} + +// CmdID: 2213 +message KickChatgroupMemberRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_CREATER = 2; + KICK_SELF = 3; + NOT_MEMBER = 4; + } + + KickChatgroupMemberRsp.Retcode retcode = 1; + uint32 chatgroup_id = 2; + uint32 target_uid = 3; +} + +// CmdID: 2214 +message DealChatgroupInviteReq { + enum InviteAction { + INVITE_NONE = 0; + INVITE_AGREE = 1; + INVITE_REJECT = 2; + } + + uint32 chatgroup_id = 1; + DealChatgroupInviteReq.InviteAction action = 2; +} + +// CmdID: 2215 +message DealChatgroupInviteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + INVITE_NOT_EXIST = 2; + ALREADY_IN = 3; + JOIN_MAX = 4; + CHATGROUP_FULL = 5; + } + + DealChatgroupInviteRsp.Retcode retcode = 1; + uint32 chatgroup_id = 2; +} + +// CmdID: 2216 +message InviteToMultiChatgroupReq { + uint32 target_uid = 1; + repeated uint32 chatgroup_id_list = 2; + bool is_has_relation = 3; +} + +// CmdID: 2217 +message InviteToMultiChatgroupRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + JOIN_MAX_NUM = 2; + FEATURE_CLOSED = 3; + } + + InviteToMultiChatgroupRsp.Retcode retcode = 1; + uint32 target_uid = 2; + repeated uint32 chatgroup_id_list = 3; + bool is_stranger = 4; +} + +// CmdID: 2218 +message GetChatgroupHistoryChatMsgReq { + uint32 chatgroup_id = 1; +} + +// CmdID: 2219 +message GetChatgroupHistoryChatMsgRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetChatgroupHistoryChatMsgRsp.Retcode retcode = 1; + uint32 chatgroup_id = 2; + repeated ChatMsg chat_msg_list = 3; +} + +// CmdID: 2231 +message EnterWorldChatroomReq { + uint32 chatroom_id = 1; + ActivityWorldChatroomType activity_type = 2; + uint32 para = 3; + uint32 player_level = 4; + string player_region = 5; +} + +// CmdID: 2232 +message EnterWorldChatroomRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LEVEL_LACK = 2; + CHATROOM_ID_ERROR = 3; + CHATROOM_FULL = 4; + NO_KINGDOM = 5; + TOO_OFTEN = 6; + FEATURE_CLOSED = 7; + NO_GLOBAL_EXPLORE_KINGDOM = 8; + } + + EnterWorldChatroomRsp.Retcode retcode = 1; + uint32 chatroom_id = 2; + repeated ChatMsg his_chat_msg_list = 3; + ActivityWorldChatroomType activity_type = 4; + uint32 player_num = 5; +} + +// CmdID: 2233 +message LeaveChatroomNotify { + uint32 new_chatroom_id = 1; +} + +message BattleChatParam { + BattleMode battle_mode = 1; + uint32 battle_para = 2; +} + +message RoomChatParam { + bool is_broadcast_msg = 1; +} + +message PrivateChatParam { + ChatRelationType relation_type = 1; +} + +message GroupChatParam { + uint32 chatgroup_id = 1; +} + +message ExtraChatParam { + RoomChatParam room_chat_param = 1; + PrivateChatParam private_chat_param = 2; + GroupChatParam group_chat_param = 3; + BattleChatParam battle_chat_param = 4; +} + +// CmdID: 2234 +message SendChatMsgNotify { + ChatMsg chat_msg = 1; + repeated uint32 target_uid_list = 2; + ExtraChatParam extra_chat_param = 3; +} + +// CmdID: 2235 +message RecvChatMsgNotify { + repeated ChatMsg chat_msg_list = 1; +} + +// CmdID: 2236 +message RecvOfflinePrivateChatMsgNotify { + repeated ChatMsg chat_msg_list = 1; +} + +// CmdID: 2237 +message GetPrivateHistoryChatMsgReq { + repeated uint32 uid_list = 1; +} + +message HistoryPrivateChatMsg { + uint32 uid = 1; + repeated ChatMsg chat_msg_list = 2; +} + +// CmdID: 2238 +message GetPrivateHistoryChatMsgRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetPrivateHistoryChatMsgRsp.Retcode retcode = 1; + repeated HistoryPrivateChatMsg chat_list = 2; +} + +// CmdID: 2239 +message ChatCloseNotify { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSE = 2; + LEVEL_LIMIT = 3; + } + + ChatCloseNotify.Retcode retcode = 1; +} + +enum CmdTypeChat { + CMD_TYPE_CHAT_NONE = 0; + CMD_CREATE_CHATGROUP_REQ = 2200; + CMD_CREATE_CHATGROUP_RSP = 2201; + CMD_INVITE_CHATGROUP_REQ = 2202; + CMD_INVITE_CHATGROUP_RSP = 2203; + CMD_GET_CHATGROUP_LIST_REQ = 2204; + CMD_GET_CHATGROUP_LIST_RSP = 2205; + CMD_SET_CHATGROUP_REQ = 2206; + CMD_SET_CHATGROUP_RSP = 2207; + CMD_LEAVE_CHATGROUP_REQ = 2208; + CMD_LEAVE_CHATGROUP_RSP = 2209; + CMD_CHATGROUP_SYSTEM_NOTIFY = 2211; + CMD_KICK_CHATGROUP_MEMBER_REQ = 2212; + CMD_KICK_CHATGROUP_MEMBER_RSP = 2213; + CMD_DEAL_CHATGROUP_INVITE_REQ = 2214; + CMD_DEAL_CHATGROUP_INVITE_RSP = 2215; + CMD_INVITE_TO_MULTI_CHATGROUP_REQ = 2216; + CMD_INVITE_TO_MULTI_CHATGROUP_RSP = 2217; + CMD_GET_CHATGROUP_HISTORY_CHAT_MSG_REQ = 2218; + CMD_GET_CHATGROUP_HISTORY_CHAT_MSG_RSP = 2219; + CMD_ENTER_WORLD_CHATROOM_REQ = 2231; + CMD_ENTER_WORLD_CHATROOM_RSP = 2232; + CMD_LEAVE_CHATROOM_NOTIFY = 2233; + CMD_SEND_CHAT_MSG_NOTIFY = 2234; + CMD_RECV_CHAT_MSG_NOTIFY = 2235; + CMD_RECV_OFFLINE_PRIVATE_CHAT_MSG_NOTIFY = 2236; + CMD_GET_HISTORY_PRIVATE_CHAT_MSG_REQ = 2237; + CMD_GET_HISTORY_PRIVATE_CHAT_MSG_RSP = 2238; + CMD_CHAT_CLOSED_NOTIFY = 2239; +} + +enum ChatgroupSystemNotifyType { + CHATGROUP_NOTIFY_NONE = 0; + CHATGROUP_NOTIFY_NEW = 1; + CHATGROUP_NOTIFY_JOIN = 2; + CHATGROUP_NOTIFY_LEAVE = 3; + CHATGROUP_NOTIFY_DISSOLVE = 4; + CHATGROUP_NOTIFY_SETTING = 5; + CHATGROUP_NOTIFY_INVITE = 6; +} + +enum ChatRelationType { + CHAT_RELATION_TYPE_NONE = 0; + CHAT_RELATION_TYPE_FRIEND = 1; + CHAT_RELATION_TYPE_MASTER_PUPIL = 2; +} + +message ChatworldEntity { + uint32 unique_id = 1; + uint32 entity_type = 2; + uint32 camp_tag = 3; + ChatworldPosition position = 4; + ChatworldPlayerInfo player_info = 16; + ChatworldItem chatworld_item = 17; + ChatworldStance chatworld_stance = 18; + ChatworldFishSpot chatworld_fish_spot = 19; + ChatworldQuestion chatworld_question = 20; + ChatworldBeast chatworld_beast = 21; + ChatworldBox chatworld_box = 22; + ChatworldWoodenBoy chatworld_wooden_boy = 23; +} + +message ChatworldQuestion { + uint32 activity_id = 1; + uint32 question_id = 2; + ChatworldQuestionStatus status = 3; + uint32 end_time = 4; + uint32 right_answer_id = 5; +} + +message ChatworldEntityMsg { + repeated ChatworldEntity update_entity_list = 1; + repeated uint32 delete_entity_list = 2; +} + +message ChatworldPosition { + float x = 1; + float y = 2; + float z = 3; + float rotation = 4; + float speed = 5; + uint64 time_ms_u64 = 6; + float aim_rotation = 7; + bool is_teleport = 8; +} + +message CommonChatworldRedEnvelope { + uint32 red_envelope_id = 1; + uint32 expire_time = 2; + uint32 sender_uid = 3; + uint32 item_id = 4; +} + +message ChatworldBuff { + uint32 buff_id = 1; + uint64 expire_time_ms_u64 = 2; +} + +message ChatworldStance { + uint32 stance_id = 1; + ChatworldPosition position = 2; + uint32 holding_stance_camp_tag = 3; + uint32 camp_1_stance_progress = 4; + uint32 camp_2_stance_progress = 5; +} + +message ChatworldStanceMsg { + repeated ChatworldStance stance_list = 1; +} + +message ChatworldCollectBattleItem { + uint32 item_id = 1; + uint32 item_num = 2; +} + +message ChatworldBattle { + uint32 score = 1; + uint32 kill_num = 2; + uint32 kill_streak = 3; + uint32 legendary_times = 4; + repeated ChatworldCollectBattleItem collect_battle_item_list = 5; +} + +message ChatworldPlayerInfo { + uint32 uid = 1; + string nickname = 2; + uint32 avatar_id = 3; + uint32 chat_dress_id = 4; + ChatworldPosition position = 5; + uint32 chat_avatar_id = 6; + uint32 chat_frame_id = 7; + repeated uint32 holding_list = 8; + uint32 level = 9; + string armada_name = 10; + uint32 mp_level = 11; + uint32 on_medal_id = 12; + uint32 action_id = 13; + repeated CommonChatworldRedEnvelope chatworld_red_envelope_list = 14; + bool is_all_info = 15; + uint32 left_hp = 16; + uint32 next_reborn_time = 17; + repeated ChatworldBuff buff_list = 18; + uint32 runtime_tag = 20; + uint32 custom_head_id = 22; + Medal on_medal = 23; + ChatworldBattle battle_info = 32; +} + +message ChatworldFishInfo { + uint32 daily_get_currency_num = 1; +} + +message ChatworldFisher { + uint32 uid = 1; + uint32 seat_idx = 2; + ChatworldFisherStatus fisher_status = 3; + uint64 status_start_time_ms_u64 = 4; + uint32 wait_assist_fish_hard_level = 5; + repeated uint32 assist_uid_list = 6; + repeated uint32 like_uid_list = 7; + uint32 last_get_fish_id = 8; + uint64 last_get_fish_time_ms_u64 = 9; + ChatworldFishInfo fish_info = 10; +} + +message ChatworldFishSpot { + uint32 fish_spot_id = 1; + repeated ChatworldFisher fisher_list = 2; +} + +message ChatworldBeast { + enum Status { + STATUS_NONE = 0; + CHALLENGE = 1; + TREASURE = 2; + } + + uint64 beast_unique_id_u64 = 1; + uint32 beast_id = 2; + uint32 stage_id = 4; + uint32 left_hp = 5; + ChatworldBeast.Status status = 6; + repeated uint32 wait_take_treasure_uid_list = 7; + uint32 expire_time = 8; + uint32 challenger_num = 9; + uint32 treasure_rank_id = 10; +} + +message ChatworldBox { + uint32 box_series_id = 1; + uint32 schedule_id = 3; + uint32 expire_time = 4; +} + +message ChatworldBoxActivity { + uint32 schedule_id = 1; + repeated uint64 open_box_unique_id_u64_list = 2; +} + +message ChatworldPlayerScene { + uint32 left_hp = 1; + uint32 score = 2; + uint32 last_login_time = 3; +} + +// CmdID: 2400 +message EnterCommonChatworldReq { + uint32 chatworld_id = 1; + ChatworldPlayerInfo player_info = 2; + uint32 scene_id = 3; + ChatworldPlayerScene scene_data = 4; + uint32 last_chatworld_id = 5; + uint32 camp_tag = 6; + uint32 last_scene_id = 7; +} + +// CmdID: 2401 +message EnterCommonChatworldRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHATWORLD_ID_ERROR = 2; + ENTER_ERROR = 3; + CHATWORLD_FULL = 4; + LACK_LEVEL = 5; + NO_QAVATAR = 6; + NOT_JOIN_ACTIVITY = 7; + SCENE_NOT_EXIST = 8; + NOT_OPEN = 9; + IS_ENTERING = 10; + NOT_IN_ARMADA = 11; + } + + EnterCommonChatworldRsp.Retcode retcode = 1; + uint32 chatworld_id = 2; + repeated ChatworldEntity player_info_list = 3; + ChatworldEntity self_info = 4; + repeated CommonChatworldRedEnvelope npc_red_envelope_list = 5; + uint32 time = 6; + uint32 scene_id = 7; +} + +// CmdID: 2402 +message LeaveCommonChatworldReq { +} + +// CmdID: 2403 +message LeaveCommonChatworldRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + LeaveCommonChatworldRsp.Retcode retcode = 1; + bool is_kicked = 2; +} + +message ChatworldMsgMove { + ChatworldPosition target_position = 1; +} + +message ChatworldMsgUseItem { + uint32 material_id = 1; + uint32 num = 2; + repeated uint32 target_uid_list = 3; + string msg = 4; + bytes extra_data = 5; +} + +message ChatworldMsgInteract { + ChatworldInteractType interact_type = 1; + uint32 target_npc_id = 2; +} + +message ChatworldMsgAction { + uint32 action_id = 1; + uint32 target_uid = 2; +} + +message CommonChatworldRedEnvelopeMsg { + uint32 sender_uid = 1; + uint32 channel = 2; + bool is_sender_npc = 3; + CommonChatworldRedEnvelope chatworld_red_envelope = 4; + string msg = 5; +} + +message ChatworldTreasureMsg { + uint32 cur_treasure_schedule_id = 1; + repeated ChatworldTreasure new_treasure_list = 2; + repeated ChatworldTreasure update_treasure_list = 3; + repeated ChatworldTreasure delete_treasure_list = 4; +} + +message ChatworldSkillAttackMsg { + repeated uint32 skill_unique_id_list = 1; + uint32 skill_id = 2; + ChatworldPosition attack_pos = 3; +} + +message ChatworldEntityHp { + uint32 hit_unique_id = 1; + uint32 old_hp = 2; + uint32 left_hp = 3; +} + +message ChatworldSkillDamageMsg { + uint32 skill_unique_id = 1; + uint32 skill_id = 2; + ChatworldPosition damage_pos = 3; + repeated ChatworldEntityHp entity_hp_list = 4; +} + +message ChatworldItem { + uint32 item_id = 1; + uint32 item_hp = 2; +} + +message ChatworldSkillCancelMsg { + uint32 skill_unique_id = 1; +} + +message ChatworldItemMsg { + repeated ChatworldItem update_item_list = 1; + repeated uint32 delete_item_list = 2; +} + +message ChatworldBanquetLanternInfo { + uint32 lantern_uid = 1; + uint32 expire_time = 2; + uint32 sender_uid = 3; + bool is_npc_sender = 4; +} + +message ChatworldBanquetMsg { + uint32 sender_uid = 1; + bool is_npc_sender = 2; + uint32 greeting_id = 3; + ChatworldBanquetLanternInfo send_lantern_info = 4; + ChatworldBanquetLanternInfo taken_lantern_info = 5; +} + +message ChatworldMsgItem { + enum ChatworldMsgType { + CHATWORLD_MSG_TYPE_NONE = 0; + STR_MSG = 1; + ENTER_CHATWORLD = 2; + MOVE_IN_CHATWORLD = 3; + LEAVE_CHATWORLD = 4; + INT_MSG = 5; + CLIENT_MSG = 6; + NORMAL_MSG = 7; + USE_ITEM = 8; + CHANGE_AVATAR = 9; + INTERACT_MSG = 10; + ACTION_MSG = 11; + SEND_RED_ENVELOPE = 12; + RED_ENVELOPE_TAKEN_OVER = 13; + TREASURE_MSG = 14; + SKILL_ATTACK_MSG = 15; + SKILL_DAMAGE_MSG = 16; + PLAYER_REBORN_MSG = 17; + BUFF_MSG = 18; + SKILL_CANCEL_MSG = 20; + PLAYER_BATTLE_MSG = 21; + ENTITY_MSG = 23; + ENTITY_HP_MSG = 24; + CHANGE_ENTER_EFFECT = 25; + BANQUET_MSG = 26; + } + + ChatworldMsgItem.ChatworldMsgType type = 1; + ChatworldEntity player_info = 2; + int32 msg_int = 5; + bytes client_msg = 6; + ChatMsgItem normal_msg = 7; + ChatworldMsgUseItem use_item_msg = 8; + ChatworldMsgInteract interact_msg = 10; + ChatworldMsgAction action_msg = 11; + CommonChatworldRedEnvelopeMsg red_envelope_msg = 12; + ChatworldTreasureMsg chatworld_treasure_msg = 13; + ChatworldSkillAttackMsg skill_attack_msg = 14; + ChatworldSkillDamageMsg skill_damage_msg = 15; + ChatworldSkillCancelMsg skill_cancel_msg = 17; + ChatworldEntityMsg entity_msg = 20; + ChatworldEntityHp entity_hp_msg = 21; + ChatworldBanquetMsg banquet_msg = 22; +} + +message ChatworldMsg { + repeated ChatworldMsgItem item_list = 1; + uint32 uid = 2; + uint64 time_ms_u64 = 3; + float client_time = 4; + bool is_system_msg = 5; + ChatMsgSensitiveCheckResult check_result = 6; +} + +// CmdID: 2404 +message SendCommonChatworldMsgNotify { + ChatworldMsg msg = 1; +} + +// CmdID: 2405 +message RecvCommonChatworldMsgNotify { + repeated ChatworldMsg chat_msg_list = 1; +} + +// CmdID: 2407 +message ChatworldUseItemReq { + ChatworldMsgUseItem use_item_msg = 1; +} + +// CmdID: 2408 +message ChatworldUseItemRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ITEM_LACK = 2; + SENSITIVE_WORD = 3; + NOT_IN_CHATWORLD = 4; + } + + ChatworldUseItemRsp.Retcode retcode = 1; + uint32 material_id = 2; + uint32 num = 3; + repeated uint32 target_uid_list = 4; +} + +// CmdID: 2409 +message ChatworldChangeAvatarReq { + uint32 avatar_id = 1; + uint32 scene_id = 2; +} + +// CmdID: 2410 +message ChatworldChangeAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_CHATWORLD = 2; + AVATAR_LOCK = 3; + SCENE_NOT_EXIST = 4; + IN_MATCH_STATUS = 5; + IN_READY_STATUS = 6; + } + + ChatworldChangeAvatarRsp.Retcode retcode = 1; + uint32 avatar_id = 2; + uint32 scene_id = 3; +} + +// CmdID: 2411 +message GetChatworldListReq { + uint32 start_id = 1; + uint32 end_id = 2; + uint32 scene_id = 3; +} + +message ChatworldBrief { + uint32 chatworld_id = 1; + uint32 player_num = 2; + bool is_has_untaken_treasure = 3; + uint32 beast_num = 4; +} + +// CmdID: 2412 +message GetChatworldListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetChatworldListRsp.Retcode retcode = 1; + repeated ChatworldBrief chatworld_list = 2; + uint32 show_max_id = 3; + uint32 scene_id = 4; + repeated uint32 redis_chatworld_list = 5; +} + +// CmdID: 2413 +message ChatworldInteractReq { + ChatworldMsgInteract interact_msg = 1; +} + +// CmdID: 2414 +message ChatworldInteractRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_CHATWORLD = 3; + HELD_BY_OTHER = 4; + NOT_HOLD = 5; + } + + ChatworldInteractRsp.Retcode retcode = 1; + ChatworldMsgInteract interact_msg = 2; +} + +message ChatworldTreasure { + uint32 chatworld_id = 1; + uint32 treasure_id = 2; + ChatworldPosition position = 3; + bool is_reward_taken = 4; + repeated uint32 open_uid_list = 5; +} + +// CmdID: 2415 +message GetChatworldTreasureDataReq { + uint32 chatworld_id = 1; + uint32 cur_treasure_schedule_id = 2; +} + +// CmdID: 2416 +message GetChatworldTreasureDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_CHATWORLD = 2; + } + + GetChatworldTreasureDataRsp.Retcode retcode = 1; + uint32 chatworld_id = 2; + repeated ChatworldTreasure chatworld_treasure_list = 3; +} + +// CmdID: 2417 +message OpenChatworldTreasureReq { + uint32 chatworld_id = 1; + uint32 treasure_id = 2; + uint32 cur_treasure_schedule_id = 3; + bool is_gs_check = 4; +} + +// CmdID: 2418 +message OpenChatworldTreasureRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + OPEN_NUM_LIMIT = 2; + MATERIAL_LACK = 3; + HAS_OPEN = 4; + HAS_TAKEN = 5; + TREASURE_EXPIRE = 6; + NOT_IN_CHATWORLD = 7; + } + + OpenChatworldTreasureRsp.Retcode retcode = 1; + uint32 chatworld_id = 2; + uint32 treasure_id = 3; + repeated DropItem drop_item_list = 4; + bool is_take_reward = 5; + uint32 cur_treasure_schedule_id = 6; + repeated uint32 open_uid_list = 7; +} + +// CmdID: 2419 +message ChatworldTreasureRewardNotify { + uint32 chatworld_id = 1; + uint32 treasure_id = 2; + repeated DropItem drop_item_list = 3; +} + +// CmdID: 2420 +message ChatworldSkillDamageJudgeReq { + uint32 skill_unique_id = 1; + repeated uint32 hit_unique_id_list = 2; + ChatworldPosition damage_pos = 3; +} + +// CmdID: 2421 +message ChatworldSkillDamageJudgeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_CHATWORLD = 2; + HIT_NOT_IN_CHATWORLD = 3; + NO_ATTACK = 4; + EXCEED_RANGE = 5; + CAN_NOT_HIT = 6; + INVALID_PATH = 7; + DAMAGE_FREE = 8; + NOT_ENEMY = 9; + IS_DEAD = 10; + } + + ChatworldSkillDamageJudgeRsp.Retcode retcode = 1; + ChatworldSkillDamageMsg damage_msg = 2; + uint32 score = 3; +} + +// CmdID: 2422 +message ChatworldBattleUseItemReq { + uint32 item_id = 1; +} + +// CmdID: 2423 +message ChatworldBattleUseItemRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_CHATWORLD = 2; + NOT_EXIST = 3; + } + + ChatworldBattleUseItemRsp.Retcode retcode = 1; +} + +// CmdID: 2424 +message ChatworldPosResetNotify { + ChatworldPosition reset_pos = 1; +} + +// CmdID: 2425 +message ChatworldBattleCollectItemReq { + uint32 item_id = 1; + uint32 item_unique_id = 2; +} + +// CmdID: 2426 +message ChatworldBattleCollectItemRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_CHATWORLD = 2; + NOT_EXIST = 3; + CAMP_INVALID = 4; + LACK_TIMES = 5; + ITEM_NOT_USED = 6; + ITEM_LIMIT = 7; + } + + ChatworldBattleCollectItemRsp.Retcode retcode = 1; + uint32 item_id = 2; + uint32 item_unique_id = 3; + RewardData reward_data = 4; +} + +message ChatworldActivitySchedule { + uint32 schedule_id = 1; + uint32 activity_id = 2; + uint32 begin_time = 3; + uint32 end_time = 4; + uint32 begin_day_time = 5; + uint32 end_day_time = 6; +} + +// CmdID: 2427 +message ChatworldGetActivityScheduleReq { + uint32 scene_id = 1; +} + +// CmdID: 2428 +message ChatworldGetActivityScheduleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ChatworldGetActivityScheduleRsp.Retcode retcode = 1; + uint32 scene_id = 2; + repeated ChatworldActivitySchedule schedule_list = 3; +} + +// CmdID: 2429 +message ChatworldFishJoinSpotReq { + uint32 fish_spot_id = 1; + uint32 seat_idx = 2; + ChatworldFishInfo fish_info = 3; +} + +// CmdID: 2430 +message ChatworldFishJoinSpotRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SPOT_FULL = 2; + CURRENCY_LIMIT = 3; + } + + ChatworldFishJoinSpotRsp.Retcode retcode = 1; + uint32 fish_spot_id = 2; + uint32 seat_idx = 3; +} + +// CmdID: 2431 +message ChatworldFishLeaveSpotReq { + uint32 fish_spot_id = 1; +} + +// CmdID: 2432 +message ChatworldFishLeaveSpotRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ChatworldFishLeaveSpotRsp.Retcode retcode = 1; + uint32 fish_spot_id = 2; +} + +// CmdID: 2433 +message ChatworldFishStartReq { + uint32 fish_spot_id = 1; +} + +// CmdID: 2434 +message ChatworldFishStartRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CURRENCY_LIMIT = 2; + } + + ChatworldFishStartRsp.Retcode retcode = 1; + uint32 fish_spot_id = 2; +} + +// CmdID: 2435 +message ChatworldFishEndReq { + enum FishEndStatus { + FISH_END_SUCC = 0; + FISH_END_WAIT_ASSIST = 1; + FISH_END_FAIL = 2; + } + + ChatworldFishEndReq.FishEndStatus fish_end_status = 1; + uint32 fish_spot_id = 2; + uint32 fish_group_id = 3; + uint32 fish_hard_level = 4; +} + +// CmdID: 2436 +message ChatworldFishEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ChatworldFishEndRsp.Retcode retcode = 1; + uint32 fish_spot_id = 2; +} + +// CmdID: 2437 +message ChatworldFishAssistReq { + uint32 fish_spot_id = 1; + uint32 target_uid = 2; +} + +// CmdID: 2438 +message ChatworldFishAssistRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CURRENCY_LIMIT = 2; + } + + ChatworldFishAssistRsp.Retcode retcode = 1; + uint32 fish_spot_id = 2; + uint32 target_uid = 3; +} + +// CmdID: 2439 +message ChatworldFishLikeReq { + uint32 fish_spot_id = 1; + uint32 target_uid = 2; +} + +// CmdID: 2440 +message ChatworldFishLikeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CURRENCY_LIMIT = 2; + } + + ChatworldFishLikeRsp.Retcode retcode = 1; + uint32 fish_spot_id = 2; + uint32 target_uid = 3; +} + +// CmdID: 2441 +message ChatworldFishRewardNotify { + FishRewardSrc reward_src = 1; + uint32 fish_id = 2; + uint32 add_currency_num = 3; + uint32 cur_daily_get_currency_num = 4; + RewardData extra_reward_data = 5; +} + +// CmdID: 2442 +message ChatworldFishCancelWaitAssistReq { + uint32 fish_spot_id = 1; +} + +// CmdID: 2443 +message ChatworldFishCancelWaitAssistRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_WAIT = 2; + } + + ChatworldFishCancelWaitAssistRsp.Retcode retcode = 1; + uint32 fish_spot_id = 2; +} + +// CmdID: 2444 +message ChatworldFishKickPlayerNotify { + enum KickReason { + KICK_NONE = 0; + KICK_CURRENCY_FULL = 1; + KICK_NO_ACTION = 2; + } + + ChatworldFishKickPlayerNotify.KickReason kick_reason = 1; +} + +// CmdID: 2445 +message ChatworldFishGetActivityInfoReq { +} + +// CmdID: 2446 +message ChatworldFishGetActivityInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ChatworldFishGetActivityInfoRsp.Retcode retcode = 1; + ChatworldFishInfo fish_info = 2; +} + +// CmdID: 2451 +message ChatworldGetPrayInfoReq { + uint32 scene_id = 1; +} + +// CmdID: 2452 +message ChatworldGetPrayInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + ChatworldGetPrayInfoRsp.Retcode retcode = 1; + uint32 pray_id = 2; + bool is_has_prayed = 3; + uint32 has_taken_character_pray_num = 4; + uint32 total_character_pray_num = 5; +} + +// CmdID: 2453 +message ChatworldPrayReq { + uint32 scene_id = 1; +} + +// CmdID: 2454 +message ChatworldPrayRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_CHATWORLD = 2; + PRAYED = 3; + NOT_OPEN = 4; + } + + ChatworldPrayRsp.Retcode retcode = 1; + uint32 pray_id = 2; + RewardData reward_data = 3; +} + +// CmdID: 2455 +message ChatworldGrantRewardNotify { + uint32 activity_type = 1; + uint32 activity_id = 2; + uint32 reward_id = 3; + uint32 extra_int = 4; + RewardData reward_data = 5; +} + +// CmdID: 2456 +message ChatworldGetDishInfoReq { +} + +// CmdID: 2457 +message ChatworldGetDishInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + ChatworldGetDishInfoRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + bool is_prepare_reward_taken = 3; + repeated ChatworldDishReward dish_reward_list = 4; + repeated uint32 taken_dish_limited_reward_list = 5; +} + +// CmdID: 2458 +message ChatworldTakeDishRewardReq { + DishRewardType reward_type = 1; + uint32 reward_id = 2; +} + +// CmdID: 2459 +message ChatworldTakeDishRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAVE_TAKEN = 2; + NOT_OPEN = 3; + NO_REWARD = 4; + IN_CD_TIME = 5; + } + + ChatworldTakeDishRewardRsp.Retcode retcode = 1; + DishRewardType reward_type = 2; + RewardData reward_data = 3; +} + +// CmdID: 2460 +message ChatworldBeastAddResultNotify { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_POSITION = 2; + ROOM_LIMIT = 3; + } + + ChatworldBeastAddResultNotify.Retcode retcode = 1; +} + +// CmdID: 2461 +message ChatworldBeastChallengeReq { + uint64 beast_unique_id_u64 = 1; + uint32 beast_id = 2; +} + +// CmdID: 2462 +message ChatworldBeastChallengeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + DAILY_LIMIT = 3; + PLAYER_FULL = 4; + EXPIRE = 5; + FINISH = 6; + TIME_NOT_ENOUGH = 7; + } + + ChatworldBeastChallengeRsp.Retcode retcode = 1; + ChatworldBeast beast = 2; + uint32 chatworld_id = 3; + uint32 scene_id = 4; +} + +// CmdID: 2463 +message ChatworldBeastSyncReq { + uint64 beast_unique_id_u64 = 1; + uint32 cost_hp = 2; +} + +// CmdID: 2464 +message ChatworldBeastSyncRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ChatworldBeastSyncRsp.Retcode retcode = 1; + uint64 beast_unique_id_u64 = 2; + uint32 from_uid = 3; + uint32 cost_hp = 4; + uint32 left_hp = 5; +} + +// CmdID: 2465 +message ChatworldBeastGetActivityReq { +} + +// CmdID: 2466 +message ChatworldBeastGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + ChatworldBeastGetActivityRsp.Retcode retcode = 1; + uint32 daily_senior_challenge_times = 2; + uint32 daily_junior_challenge_times = 3; + uint32 daily_senior_treasure_times = 4; + uint32 daily_junior_treasure_times = 5; + uint32 refresh_begin_time = 6; + uint32 refresh_end_time = 7; + uint32 refresh_interval = 8; +} + +// CmdID: 2467 +message ChatworldBoxGetDataReq { +} + +// CmdID: 2468 +message ChatworldBoxGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + ChatworldBoxGetDataRsp.Retcode retcode = 1; + repeated ChatworldBoxActivity box_activity_list = 3; +} + +// CmdID: 2469 +message ChatworldBoxTakeRewardReq { + uint32 unique_id = 1; + uint32 schedule_id = 2; +} + +// CmdID: 2470 +message ChatworldBoxTakeRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + HAS_TAKE = 3; + DAILY_LIMIT = 4; + BOX_NOT_EXIST = 5; + FINISH = 6; + } + + ChatworldBoxTakeRewardRsp.Retcode retcode = 1; + RewardData reward_data = 2; + uint32 box_series_id = 4; + uint32 schedule_id = 5; + uint32 stage_id = 6; + uint32 box_unique_id = 7; + repeated uint64 open_box_unique_id_u64_list = 8; + uint32 chatworld_id = 9; + uint32 scene_id = 10; +} + +// CmdID: 2471 +message ChatworldBeastTakeTreasureReq { + uint64 beast_unique_id_u64 = 1; + uint32 beast_id = 2; +} + +// CmdID: 2472 +message ChatworldBeastTakeTreasureRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKE = 2; + DAILY_LIMIT = 3; + NOT_EXIST = 4; + NO_RIGHT = 5; + NOT_OPEN = 6; + } + + ChatworldBeastTakeTreasureRsp.Retcode retcode = 1; + repeated DropItem drop_item_list = 2; + uint32 beast_id = 3; + uint32 treasure_rank_id = 4; +} + +// CmdID: 2473 +message ChatworldBeastAbandonChallengeReq { +} + +// CmdID: 2474 +message ChatworldBeastAbandonChallengeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ChatworldBeastAbandonChallengeRsp.Retcode retcode = 1; +} + +// CmdID: 2475 +message ChatworldGetCinemaInfoReq { +} + +// CmdID: 2476 +message ChatworldGetCinemaInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + ChatworldGetCinemaInfoRsp.Retcode retcode = 1; + uint32 group_id = 2; +} + +message ChatworldWoodenBoyPlayer { + uint32 uid = 1; + uint32 score = 2; + bool is_caught = 3; + uint32 spot_id = 4; +} + +message ChatworldWoodenBoy { + uint32 activity_id = 1; + ChatworldWoodenBoyStatus status = 2; + uint32 status_end_time = 3; + bool is_npc_win = 4; + repeated ChatworldWoodenBoyPlayer player_list = 5; +} + +// CmdID: 2477 +message ChatworldWoodenBoyEnterReq { +} + +// CmdID: 2478 +message ChatworldWoodenBoyEnterRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AREA_FULL = 2; + AREA_PLAYING = 3; + ALREADY_IN = 4; + } + + ChatworldWoodenBoyEnterRsp.Retcode retcode = 1; +} + +// CmdID: 2479 +message ChatworldWoodenBoyLeaveReq { +} + +// CmdID: 2480 +message ChatworldWoodenBoyLeaveRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ChatworldWoodenBoyLeaveRsp.Retcode retcode = 1; +} + +// CmdID: 2481 +message ChatworldWoodenBoyStartNotify { + uint32 start_time = 1; + repeated uint32 npc_switch_time_list = 2; + uint32 timeline_id = 3; +} + +// CmdID: 2482 +message ChatworldWoodenBoySettleNotify { + bool is_win = 1; + uint32 activity_id = 2; +} + +// CmdID: 2483 +message ChatworldWoodenBoyUpdateStatusReq { + uint32 score = 1; + bool is_caught = 2; +} + +// CmdID: 2484 +message ChatworldWoodenBoyUpdateStatusRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ChatworldWoodenBoyUpdateStatusRsp.Retcode retcode = 1; +} + +// CmdID: 2485 +message ChatworldQuestionSettleNotify { + uint32 activity_id = 1; + bool is_right = 2; + uint32 question_id = 3; + uint32 reward_id = 4; +} + +// CmdID: 2486 +message ChatWorldGetWishInfoReq { + uint32 activity_id = 1; + uint32 pool_id = 2; +} + +message ChatWorldWishPool { + uint32 pool_id = 1; + repeated uint32 has_got_reward_list = 2; + uint32 no_baodi_times = 3; + uint32 wish_random = 4; + uint32 total_wish_num = 5; +} + +// CmdID: 2487 +message ChatWorldGetWishInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + ChatWorldGetWishInfoRsp.Retcode retcode = 1; + ChatWorldWishPool wish_pool_info = 2; +} + +// CmdID: 2488 +message ChatWorldDoWishReq { + uint32 activity_id = 1; + uint32 pool_id = 2; + uint32 wish_num = 3; + uint32 wish_random = 4; +} + +// CmdID: 2489 +message ChatWorldDoWishRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_EXIST = 2; + MATERIAL_LACK = 3; + ALL_REWARD_GETTED = 4; + } + + ChatWorldDoWishRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 wish_random = 3; + repeated uint32 got_reward_id_list = 4; +} + +// CmdID: 2492 +message ChatWorldExchangeGoodsReq { + uint32 activity_id = 1; + uint32 item_id = 2; +} + +// CmdID: 2493 +message ChatWorldExchangeGoodsRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_EXIST = 2; + MATERIAL_LACK = 3; + ITEM_NOT_EXIST = 4; + } + + ChatWorldExchangeGoodsRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 item_id = 3; + uint32 num = 4; +} + +// CmdID: 2494 +message ChatworldChangeEnterEffectReq { + uint32 enter_effect_id = 1; + uint32 scene_id = 2; +} + +// CmdID: 2495 +message ChatworldChangeEnterEffectRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_CHATWORLD = 2; + ENTER_EFFECT_LOCK = 3; + SCENE_NOT_EXIST = 4; + IN_MATCH_STATUS = 5; + IN_READY_STATUS = 6; + } + + ChatworldChangeEnterEffectRsp.Retcode retcode = 1; + uint32 enter_effect_id = 2; + uint32 scene_id = 3; +} + +// CmdID: 2496 +message ChatworldQCandyActivityGetReq { + uint32 activity_id = 1; +} + +// CmdID: 2497 +message ChatworldQCandyActivityGetRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_EXIST = 2; + } + + ChatworldQCandyActivityGetRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 last_choose_avatar_id = 3; + uint32 last_choose_enter_effect_id = 4; + repeated uint32 unlocked_avatar_id_list = 5; + repeated uint32 unlocked_enter_effect_id_list = 6; + ChatWorldWishPool wish_info = 7; +} + +message ChatworldGroupPhotoMember { + uint32 avatar_id = 1; + uint32 spot = 2; + uint32 pose_id = 3; +} + +// CmdID: 2506 +message ChatworldGroupPhotoGetOpenedBackDropReq { +} + +// CmdID: 2507 +message ChatworldGroupPhotoGetOpenedBackDropRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ChatworldGroupPhotoGetOpenedBackDropRsp.Retcode retcode = 1; + repeated uint32 opened_backdrop_id_list = 2; +} + +// CmdID: 2498 +message ChatworldGroupPhotoUpdatePlayerInfoReq { + uint32 schedule_id = 1; + uint32 backdrop_id = 2; + uint32 spot = 3; + uint32 pose_id = 4; +} + +// CmdID: 2499 +message ChatworldGroupPhotoUpdatePlayerInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + SPOT_NOT_EXIST = 3; + NOT_IN_ROOM = 4; + } + + ChatworldGroupPhotoUpdatePlayerInfoRsp.Retcode retcode = 1; +} + +// CmdID: 2500 +message ChatworldBanquetSendLanternReq { + uint32 greeting_id = 1; + string trans_str = 2; +} + +// CmdID: 2501 +message ChatworldBanquetSendLanternRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + MATERIAL_LACK = 3; + GREETING_ID_INVALID = 4; + NOT_IN_CHATWORLD = 5; + } + + ChatworldBanquetSendLanternRsp.Retcode retcode = 1; + RewardData reward = 2; + uint32 greeting_id = 3; + string trans_str = 4; +} + +// CmdID: 2502 +message ChatworldBanquetTakeLanternRewardReq { + uint32 lantern_uid = 1; + uint32 greeting_id = 2; +} + +// CmdID: 2503 +message ChatworldBanquetTakeLanternRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + TOO_OFTEN = 3; + TIMES_LIMIT = 4; + GREETING_ID_INVALID = 5; + HAS_TAKEN = 6; + NOT_EXIST = 7; + NOT_IN_CHATWORLD = 8; + } + + ChatworldBanquetTakeLanternRewardRsp.Retcode retcode = 1; + uint32 lantern_uid = 2; + RewardData reward = 3; + bool is_npc_sender = 4; + string trans_str = 5; +} + +// CmdID: 2504 +message ChatworldBanquetGetDataReq { +} + +// CmdID: 2505 +message ChatworldBanquetGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_CHATWORLD = 3; + } + + ChatworldBanquetGetDataRsp.Retcode retcode = 1; + uint32 take_lantern_reward_times = 2; + float dance_time = 3; + uint32 take_dance_reward_times = 4; +} + +// CmdID: 2508 +message ChatworldBanquetReportDanceTimeReq { + float dance_time = 1; +} + +// CmdID: 2509 +message ChatworldBanquetReportDanceTimeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_CHATWORLD = 3; + } + + ChatworldBanquetReportDanceTimeRsp.Retcode retcode = 1; +} + +// CmdID: 2510 +message ChatworldBanquetTakeDanceRewardReq { +} + +// CmdID: 2511 +message ChatworldBanquetTakeDanceRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_CHATWORLD = 3; + TIMES_LIMIT = 4; + } + + ChatworldBanquetTakeDanceRewardRsp.Retcode retcode = 1; + RewardData reward = 2; + uint32 today_take_reward_times = 3; +} + +// CmdID: 2512 +message ChatworldAddRobotNotify { + uint32 robot_num = 1; + uint32 chatworld_id = 2; + ChatworldPosition position = 3; + ChatworldPlayerInfo player_info = 4; + uint32 scene_id = 5; + ChatworldPlayerScene scene_data = 6; +} + +enum CmdTypeChatworld { + CMD_TYPE_CHATWORLD_NONE = 0; + CMD_ENTER_COMMON_CHATWORLD_REQ = 2400; + CMD_ENTER_COMMON_CHATWORLD_RSP = 2401; + CMD_LEAVE_COMMON_CHATWORLD_REQ = 2402; + CMD_LEAVE_COMMON_CHATWORLD_RSP = 2403; + CMD_SEND_COMMON_CHATWORLD_MSG_NOTIFY = 2404; + CMD_RECV_COMMON_CHATWORLD_MSG_NOTIFY = 2405; + CMD_CHATWORLD_USE_ITEM_REQ = 2407; + CMD_CHATWORLD_USE_ITEM_RSP = 2408; + CMD_CHATWORLD_CHANGE_AVATAR_REQ = 2409; + CMD_CHATWORLD_CHANGE_AVATAR_RSP = 2410; + CMD_GET_CHATWORLD_LIST_REQ = 2411; + CMD_GET_CHATWORLD_LIST_RSP = 2412; + CMD_CHATWORLD_INTERACT_REQ = 2413; + CMD_CHATWORLD_INTERACT_RSP = 2414; + CMD_GET_CHATWORLD_TREASURE_DATA_REQ = 2415; + CMD_GET_CHATWORLD_TREASURE_DATA_RSP = 2416; + CMD_OPEN_CHATWORLD_TREASURE_REQ = 2417; + CMD_OPEN_CHATWORLD_TREASURE_RSP = 2418; + CMD_CHATWORLD_TREASURE_REWARD_NOTIFY = 2419; + CMD_CHATWORLD_SKILL_DAMAGE_JUDGE_REQ = 2420; + CMD_CHATWORLD_SKILL_DAMAGE_JUDGE_RSP = 2421; + CMD_CHATWORLD_BATTLE_USE_ITEM_REQ = 2422; + CMD_CHATWORLD_BATTLE_USE_ITEM_RSP = 2423; + CMD_CHATWORLD_POS_RESET_NOTIFY = 2424; + CMD_CHATWORLD_BATTLE_COLLECT_ITEM_REQ = 2425; + CMD_CHATWORLD_BATTLE_COLLECT_ITEM_RSP = 2426; + CMD_CHATWORLD_GET_ACTIVITY_SCHEDULE_REQ = 2427; + CMD_CHATWORLD_GET_ACTIVITY_SCHEDULE_RSP = 2428; + CMD_CHATWORLD_FISH_JOIN_SPOT_REQ = 2429; + CMD_CHATWORLD_FISH_JOIN_SPOT_RSP = 2430; + CMD_CHATWORLD_FISH_LEAVE_SPOT_REQ = 2431; + CMD_CHATWORLD_FISH_LEAVE_SPOT_RSP = 2432; + CMD_CHATWORLD_FISH_START_REQ = 2433; + CMD_CHATWORLD_FISH_START_RSP = 2434; + CMD_CHATWORLD_FISH_END_REQ = 2435; + CMD_CHATWORLD_FISH_END_RSP = 2436; + CMD_CHATWORLD_FISH_ASSIST_REQ = 2437; + CMD_CHATWORLD_FISH_ASSIST_RSP = 2438; + CMD_CHATWORLD_FISH_LIKE_REQ = 2439; + CMD_CHATWORLD_FISH_LIKE_RSP = 2440; + CMD_CHATWORLD_FISH_REWARD_NOTIFY = 2441; + CMD_CHATWORLD_FISH_CANCEL_WAIT_ASSIST_REQ = 2442; + CMD_CHATWORLD_FISH_CANCEL_WAIT_ASSIST_RSP = 2443; + CMD_CHATWORLD_FISH_KICK_PLAYER_NOTIFY = 2444; + CMD_CHATWORLD_FISH_GET_ACTIVITY_INFO_REQ = 2445; + CMD_CHATWORLD_FISH_GET_ACTIVITY_INFO_RSP = 2446; + CMD_CHATWORLD_GET_PRAY_INFO_REQ = 2451; + CMD_CHATWORLD_GET_PRAY_INFO_RSP = 2452; + CMD_CHATWORLD_PRAY_REQ = 2453; + CMD_CHATWORLD_PRAY_RSP = 2454; + CMD_CHATWORLD_GRANT_REWARD_NOTIFY = 2455; + CMD_CHATWORLD_GET_DISH_INFO_REQ = 2456; + CMD_CHATWORLD_GET_DISH_INFO_RSP = 2457; + CMD_CHATWORLD_TAKE_DISH_REWARD_REQ = 2458; + CMD_CHATWORLD_TAKE_DISH_REWARD_RSP = 2459; + CMD_CHATWORLD_BEAST_ADD_RESULT_NOTIFY = 2460; + CMD_CHATWORLD_BEAST_CHALLENGE_REQ = 2461; + CMD_CHATWORLD_BEAST_CHALLENGE_RSP = 2462; + CMD_CHATWORLD_BEAST_SYNC_REQ = 2463; + CMD_CHATWORLD_BEAST_SYNC_RSP = 2464; + CMD_CHATWORLD_BEAST_GET_ACTIVITY_REQ = 2465; + CMD_CHATWORLD_BEAST_GET_ACTIVITY_RSP = 2466; + CMD_CHATWORLD_BOX_GET_DATA_REQ = 2467; + CMD_CHATWORLD_BOX_GET_DATA_RSP = 2468; + CMD_CHATWORLD_BOX_TAKE_REWARD_REQ = 2469; + CMD_CHATWORLD_BOX_TAKE_REWARD_RSP = 2470; + CMD_CHATWORLD_BEAST_TAKE_TREASURE_REQ = 2471; + CMD_CHATWORLD_BEAST_TAKE_TREASURE_RSP = 2472; + CMD_CHATWORLD_BEAST_ABANDON_CHALLENGE_REQ = 2473; + CMD_CHATWORLD_BEAST_ABANDON_CHALLENGE_RSP = 2474; + CMD_CHATWORLD_GET_CINEMA_INFO_REQ = 2475; + CMD_CHATWORLD_GET_CINEMA_INFO_RSP = 2476; + CMD_CHATWORLD_WOODEN_BOY_ENTER_REQ = 2477; + CMD_CHATWORLD_WOODEN_BOY_ENTER_RSP = 2478; + CMD_CHATWORLD_WOODEN_BOY_LEAVE_REQ = 2479; + CMD_CHATWORLD_WOODEN_BOY_LEAVE_RSP = 2480; + CMD_CHATWORLD_WOODEN_BOY_START_NOTIFY = 2481; + CMD_CHATWORLD_WOODEN_BOY_SETTLE_NOTIFY = 2482; + CMD_CHATWORLD_WOODEN_BOY_UPDATE_STATUS_REQ = 2483; + CMD_CHATWORLD_WOODEN_BOY_UPDATE_STATUS_RSP = 2484; + CMD_CHATWORLD_QUESTION_SETTLE_NOTIFY = 2485; + CMD_CHATWORLD_GET_WISH_INFO_REQ = 2486; + CMD_CHATWORLD_GET_WISH_INFO_RSP = 2487; + CMD_CHATWORLD_DO_WISH_REQ = 2488; + CMD_CHATWORLD_DO_WISH_RSP = 2489; + CMD_CHATWORLD_EXCHANGE_GOODS_REQ = 2492; + CMD_CHATWORLD_EXCHANGE_GOODS_RSP = 2493; + CMD_CHATWORLD_CHANGE_ENTER_EFFECT_REQ = 2494; + CMD_CHATWORLD_CHANGE_ENTER_EFFECT_RSP = 2495; + CMD_CHATWORLD_QCANDY_ACTIVITY_GET_REQ = 2496; + CMD_CHATWORLD_QCANDY_ACTIVITY_GET_RSP = 2497; + CMD_CHATWORLD_GROUP_PHOTO_UPDATE_PLAYER_INFO_REQ = 2498; + CMD_CHATWORLD_GROUP_PHOTO_UPDATE_PLAYER_INFO_RSP = 2499; + CMD_CHATWORLD_BANQUET_SEND_LANTERN_REQ = 2500; + CMD_CHATWORLD_BANQUET_SEND_LANTERN_RSP = 2501; + CMD_CHATWORLD_BANQUET_TAKE_LANTERN_REWARD_REQ = 2502; + CMD_CHATWORLD_BANQUET_TAKE_LANTERN_REWARD_RSP = 2503; + CMD_CHATWORLD_BANQUET_GET_DATA_REQ = 2504; + CMD_CHATWORLD_BANQUET_GET_DATA_RSP = 2505; + CMD_CHATWORLD_BANQUET_REPORT_DANCE_TIME_REQ = 2508; + CMD_CHATWORLD_BANQUET_REPORT_DANCE_TIME_RSP = 2509; + CMD_CHATWORLD_BANQUET_TAKE_DANCE_REWARD_REQ = 2510; + CMD_CHATWORLD_BANQUET_TAKE_DANCE_REWARD_RSP = 2511; + CMD_CHATWORLD_GROUP_PHOTO_GET_OPENED_BACKDROP_REQ = 2506; + CMD_CHATWORLD_GROUP_PHOTO_GET_OPENED_BACKDROP_RSP = 2507; + CMD_CHATWORLD_ADD_ROBOT_NOTIFY = 2512; + CMD_CHATWORLD_DUMMY = 2599; +} + +enum ChatworldComponentType { + CHATWORLD_COMPONENT_TYPE_NONE = 0; + CHATWORLD_COMPONENT_TYPE_MOVE = 1; + CHATWORLD_COMPONENT_TYPE_BUFF = 2; + CHATWORLD_COMPONENT_TYPE_SKILL = 3; + CHATWORLD_COMPONENT_TYPE_HEALTH = 4; + CHATWORLD_COMPONENT_TYPE_COLLISION = 5; +} + +enum ChatworldEntityType { + CHATWORLD_ENTITY_TYPE_NONE = 0; + CHATWORLD_ENTITY_TYPE_PLAYER = 1; + CHATWORLD_ENTITY_TYPE_SKILL = 2; + CHATWORLD_ENTITY_TYPE_ITEM = 3; + CHATWORLD_ENTITY_TYPE_STANCE = 4; + CHATWORLD_ENTITY_TYPE_FISH = 5; + CHATWORLD_ENTITY_TYPE_QUESTION = 6; + CHATWORLD_ENTITY_TYPE_BEAST = 7; + CHATWORLD_ENTITY_TYPE_BOX = 8; + CHATWORLD_ENTITY_TYPE_WOODEN_BOY = 9; +} + +enum ChatworldQuestionStatus { + CHATWORLD_QUESTION_NONE = 0; + CHATWORLD_QUESTION_PREPARE = 1; + CHATWORLD_QUESTION_ANSWER = 2; + CHATWORLD_QUESTION_RESULT = 3; + CHATWORLD_QUESTION_CD = 4; +} + +enum ChatworldBattleCampTag { + CHATWORLD_BATTLE_CAMP_TAG_NONE = 0; + CHATWORLD_BATTLE_CAMP_TAG_1 = 1; + CHATWORLD_BATTLE_CAMP_TAG_2 = 2; +} + +enum ChatworldBattleItemEffectTarget { + CHATWORLD_BATTLE_ITEM_EFFECT_ALL = 0; + CHATWORLD_BATTLE_ITEM_EFFECT_ENEMY_CAMP = 1; + CHATWORLD_BATTLE_ITEM_EFFECT_SELF_CAMP = 2; +} + +enum ChatworldFisherStatus { + CHATWORLD_FISHER_STATUS_NONE = 0; + CHATWORLD_FISHER_STATUS_PREPARE = 1; + CHATWORLD_FISHER_STATUS_START = 2; + CHATWORLD_FISHER_STATUS_END = 3; + CHATWORLD_FISHER_STATUS_WAIT_ASSIST = 4; +} + +enum ChatworldBoxType { + CHATWORLD_BOX_TYPE_NONE = 0; + CHATWORLD_BOX_TYPE_REWARD = 1; + CHATWORLD_BOX_TYPE_BATTLE = 2; +} + +enum ChatworldInteractType { + CHATWORLD_INTERACT_TYPE_NONE = 0; + CHATWORLD_INTERACT_TYPE_HOLD = 1; + CHATWORLD_INTERACT_TYPE_UNHOLD = 2; +} + +enum SkillDamageCollisionType { + SKILL_DAMAGE_COLLISION_TYPE_NONE = 0; + SKILL_DAMAGE_COLLISION_TYPE_POINT = 1; + SKILL_DAMAGE_COLLISION_TYPE_CIRCLE = 2; + SKILL_DAMAGE_COLLISION_TYPE_RECT = 3; + SKILL_DAMAGE_COLLISION_TYPE_SECTOR = 4; +} + +enum ChatworldBuffType { + CHATWORLD_BUFF_TYPE_NONE = 0; + CHATWORLD_BUFF_TYPE_DAMAGE_FREE = 1; + CHATWORLD_BUFF_TYPE_SPEED = 2; +} + +enum ChatworldType { + CHATWORLD_TYPE_NONE = 0; + CHATWORLD_TYPE_PLAIN = 1; + CHATWORLD_TYPE_BRAWL = 3; + CHATWORLD_TYPE_STANCE = 4; + CHATWORLD_TYPE_SPRING_FESTIVAL = 5; +} + +enum ChatworldEnterType { + CHATWORLD_ENTER_TYPE_NONE = 0; + CHATWORLD_ENTER_TYPE_WORLD = 1; + CHATWORLD_ENTER_TYPE_ARMADA = 2; +} + +enum ChatworldActivityType { + CHATWORLD_ACTIVITY_TYPE_NONE = 0; + CHATWORLD_ACTIVITY_TYPE_MAIN_PAGE_NOTICE = 1; + CHATWORLD_ACTIVITY_TYPE_ACTIVITY_NOTICE = 2; + CHATWORLD_ACTIVITY_TYPE_FIRE_WORKS = 3; + CHATWORLD_ACTIVITY_TYPE_FISH = 4; + CHATWORLD_ACTIVITY_TYPE_PRAY = 5; + CHATWORLD_ACTIVITY_TYPE_QUESTION = 6; + CHATWORLD_ACTIVITY_TYPE_PREPARE = 7; + CHATWORLD_ACTIVITY_TYPE_ARMADA_REUNION = 8; + CHATWORLD_ACTIVITY_TYPE_DISH = 9; + CHATWORLD_ACTIVITY_TYPE_BEAST = 10; + CHATWORLD_ACTIVITY_TYPE_BOX = 11; + CHATWORLD_ACTIVITY_TYPE_PRAY_WITH_ORDER = 12; + CHATWORLD_ACTIVITY_TYPE_CINEMA = 13; + CHATWORLD_ACTIVITY_TYPE_WOODEN_BOY = 14; + CHATWORLD_ACTIVITY_TYPE_QCANDY = 15; + CHATWORLD_ACTIVITY_TYPE_GROUPPHOTO = 16; + CHATWORLD_ACTIVITY_TYPE_BANQUET = 17; +} + +enum ChatworldFishHardLevel { + CHATWORLD_FISH_HARD_LEVEL_NONE = 0; + CHATWORLD_FISH_HARD_LEVEL_EASY = 1; + CHATWORLD_FISH_HARD_LEVEL_NORMAL = 2; + CHATWORLD_FISH_HARD_LEVEL_HARD = 3; +} + +enum FishRewardSrc { + FISH_REWARD_SRC_NONE = 0; + FISH_REWARD_SRC_NORMAL = 1; + FISH_REWARD_SRC_GET_MISSED = 2; + FISH_REWARD_SRC_ASSIST = 3; + FISH_REWARD_SRC_LIKE = 4; +} + +enum ChatworldPrayType { + CHATWORLD_PRAY_TYPE_NONE = 0; + CHATWORLD_PRAY_TYPE_NORMAL = 1; + CHATWORLD_PRAY_TYPE_CHARACTER = 2; + CHATWORLD_PRAY_TYPE_OLD = 3; +} + +enum DishRewardType { + DISH_REWARD_TYPE_NONE = 0; + DISH_REWARD_TYPE_PREPARE = 1; + DISH_REWARD_TYPE_DAILY = 2; + DISH_REWARD_TYPE_LIMITED = 3; +} + +enum ChatwoldBeastLevel { + CHATWOLD_BEAST_LEVEL_NONE = 0; + CHATWORLD_BEAST_SENIOR = 1; + CHATWORLD_BEAST_JUNIOR = 2; +} + +enum ChatworldBeastAwardType { + CHATWORLD_BEAST_AWARD_TYPE_NONE = 0; + CHATWORLD_BEAST_AWARD_HP_RATIO = 1; + CHATWORLD_BEAST_AWARD_SCORE = 2; +} + +enum ChatworldWoodenBoyStatus { + CHATWORLD_WOODEN_BOY_NONE = 0; + CHATWORLD_WOODEN_BOY_PREPARE = 1; + CHATWORLD_WOODEN_BOY_PLAY = 2; + CHATWORLD_WOODEN_BOY_RESULT = 3; + CHATWORLD_WOODEN_BOY_CD = 4; +} + +enum ChatWorldWishItemType { + CHATWORLD_WISH_ITEM_NONE = 0; + CHATWORLD_WISH_ITEM_REWARD = 1; + CHATWORLD_WISH_ITEM_AVATAR = 2; + CHATWORLD_WISH_ITEM_ENTER_EFFECT = 3; + CHATWORLD_WISH_ITEM_REDENVELOPE = 4; +} + +enum ChatWorldGoodsType { + CHATWORLD_GOODS_NONE = 0; + CHATWORLD_GOODS_AVATAR = 1; + CHATWORLD_GOODS_EFFECT = 2; + CHATWORLD_GOODS_COIN = 3; +} + +enum ChatWorldGoodsSourceType { + CHATWORLD_SOURCE_TYPE_NONE = 0; + CHATWORLD_SOURCE_TYPE_EXCHANGE = 1; + CHATWORLD_SOURCE_TYPE_WISH = 2; + CHATWORLD_SOURCE_TYPE_DEFAULT_UNLOCK = 3; +} + +enum ChatworldAvatarType { + CHATWORLD_AVATAR_NONE = 0; + CHATWORLD_AVATAR_DORM = 1; + CHATWORLD_AVATAR_QCANDY = 2; +} + +enum ChatworldBanquetNpcType { + CHATWORLD_BANQUET_NPC_TYPE_NONE = 0; + CHATWORLD_BANQUET_NPC_TYPE_LANTERN = 1; + CHATWORLD_BANQUET_NPC_TYPE_DANMAKU = 2; +} + +enum ChatworldObjectType { + CHATWORLD_OBJECT_TYPE_NONE = 0; + CHATWORLD_OBJECT_TYPE_OBJECT = 1; + CHATWORLD_OBJECT_TYPE_NPC = 2; + CHATWORLD_OBJECT_TYPE_TREASURE = 3; + CHATWORLD_OBJECT_TYPE_FIREWORKS = 4; +} + +message ProtoVector2Int { + int32 x = 1; + int32 y = 2; +} + +message WorldMapServerLocalMessage { + uint32 last_report_time = 1; + repeated int32 main_line_Story_list = 2; + repeated int32 main_chapter_activity_section_list = 3; + uint32 last_sin_ex = 4; + repeated int32 entered_open_world_list = 5; + uint32 last_endless = 6; +} + +message AugmentPerformanceLocalMessage { + repeated int32 finished_entry_perform_id_list = 1; + repeated ProtoVector2Int selected_finish_dialog_id_list = 2; +} + +message AvatarServerLocalMessage { + repeated int32 favorite_avatar_id_list = 1; + repeated int32 new_avatar_id_list = 2; +} + +message NinjaEventIDPlayedServerLocalMessage { + repeated int32 played_event_id_list = 1; +} + +message GeneralAvatarActivityServeLocalMessage { + bool entered_sourec_page = 1; +} + +message TimerIDToTimeStamp { + int32 timer_id = 1; + uint32 time_stamp = 2; +} + +message OpenWorldServerLocalMessage { + repeated TimerIDToTimeStamp started_timer_id_to_time_stamp_list = 1; +} + +message PlotGroupIDToTriggerTime { + uint32 plot_group_id = 1; + int32 trigger_time = 2; +} + +message CardSuiteEpicActiveTime { + int32 id = 1; + uint32 time_stamp = 2; +} + +message HeroSpiritsEventNotice { + uint32 hero_id = 1; + bool is_already_notice = 2; +} + +message ChapterOWServerLocalMessage { + repeated int32 triggered_tips_id_list = 1; + bool is_ow_map_unlocked = 2; + bool is_ow_map_churchLight_unlocked = 3; + bool is_ow_map_church_light_break_played = 4; + bool is_ow_map_anim_tips_shown = 5; + bool is_ow_map_memory_tips_shown = 6; + repeated PlotGroupIDToTriggerTime plot_group_trigger_time_list = 7; + int32 last_played_site_id = 8; + uint32 last_played_tower_id = 9; + bool enterd_endless_tower = 10; + repeated CardSuiteEpicActiveTime card_suite_epic_active_time_list = 11; + repeated HeroSpiritsEventNotice hero_spirits_event_notice_list = 12; + repeated int32 hero_card_collection_popup_list = 13; + repeated int32 achievement_collection_popup_list = 14; + bool show_create_suite_btn_popup = 15; + repeated int32 new_got_hero_id_list = 16; + repeated int32 new_got_hero_card_id_list = 17; + bool hide_vfx_in_level = 18; + bool played_fuse_anim = 19; + bool played_resurrection_anim = 20; + bool played_sp_hero_unlock_anim = 21; + repeated ProtoVector2Int collection_unlock_num_list = 22; + repeated ProtoVector2Int bag_item_num_list = 23; + repeated int32 bag_item_popup_list = 24; + repeated ProtoVector2Int story_series_num_list = 25; + repeated int32 unlocked_activate_talent_id_list = 26; + repeated int32 final_achievement_relic_popup_list = 27; +} + +message PictureTutorial { + int32 activity_id = 1; + repeated int32 tutorial_id_list = 2; +} + +message AvatarTutorialLocalMessage { + repeated uint32 entered_avatar_tutorial_activity_id_list = 1; + repeated uint32 entered_newbie_guide_tutorial_id_list = 2; + repeated PictureTutorial finished_picture_tutorial_list = 3; + repeated PictureTutorial in_level_hinted_picture_tutorial_list = 4; +} + +message PhoneNoticeLocalMessage { + int32 notice_schedule_id = 1; + uint32 last_notice_time = 2; + repeated int32 finished_perform_list = 3; +} + +message LoginPostData { + int32 all_show_times = 1; + uint32 begin_time_of_record_day = 2; + int32 show_times_in_record_day = 3; +} + +message NewbieLoginPostEntry { + uint32 id = 1; + LoginPostData data = 2; +} + +message NewbieActivityServerMessage { + repeated NewbieLoginPostEntry newbie_login_post_data_list = 1; +} + +message KingdomsWarServerMessage { + bool played_start_story = 1; + int64 story_play_record = 2; +} + +message GlobalExploreServerMessage { + repeated int32 clicked_event_collection_id_list = 1; + repeated int32 viewed_message_id_list = 2; +} + +message MainStoryLevelSpecialJobServerMessage { + repeated int32 job_id_list = 1; +} + +message ChapterMemoirServerMessage { + bool has_access_ender_panel = 1; +} + +message QCandyServerMessage { + bool has_show_trial_level_dialog = 1; +} + +message SusannaTrialServerMessage { + repeated int32 HasEnteredAreas = 1; +} + +message GodWarServerMessage { + repeated uint32 viewed_typewriter_doc_id_list = 1; +} + +message ThemeTowerServerMessage { + repeated int32 HasEnteredSections = 1; +} + +message TiledGameLunaServerMessage { + uint32 CurrentTracingMissionId = 1; + uint32 CurrentTowerId = 2; + repeated int32 HasShownMissionGroupBeginHint = 3; +} + +message MainLineBagMessage { + repeated int32 clicked_storage_itemid_list = 1; +} + +message AdventureServerMessage { + bool newsys_dialog_displayed = 1; +} + +message SpecialReturneeServerMessage { + bool has_skip_firstlogin_dialog = 1; + uint32 skip_endless_dialog_recordID = 2; + uint32 last_play_tutorial_time_stamp = 3; + bool has_play_tutorial = 4; + bool has_clicked_monthcardbtn = 5; +} + +message TiledGameFarmServerMessage { + uint32 CurrentTracingMissionID = 1; + uint32 EquippedItemID = 2; + repeated uint32 ViewdAchivementIDs = 3; + uint32 EquippedSeedItemID = 4; + repeated uint32 GetMissionIDs = 5; + repeated uint32 GetAchivementIDs = 6; + repeated uint32 ViewedHandbookItemIDs = 7; +} + +message NewRedDotDressIdServerMessage { + repeated uint32 NewRedDotDressIdList = 1; +} + +message GourmetHuntServerMessage { + uint32 current_tracing_mission_group_id = 1; + repeated int32 hasShownMissionGroupBeginHint = 2; +} + +message ChatLobbyTextFireworkItemUseExtraData { + uint32 TextFireworkMetaID = 1; + int32 PosX = 2; + int32 PosY = 3; + int32 PosZ = 4; +} + +message ChatLobbyServerMessage { + repeated uint32 triggered_tutorial_object_id_list = 1; +} + +message NewElfMessage { + bool inited = 1; + repeated int32 clicked_id_list = 2; +} + +message TiledGameSRPGServerMessage { + uint32 CurrentTracingMissionId = 1; + uint32 CurrentTowerId = 2; + repeated int32 HasShownMissionGroupBeginHint = 3; +} + +message PjmsActivityReMessage { + repeated int32 UnlockedSkillIDList = 1; + int32 OpenAreaNum = 2; +} + +message PJMSStoryTrialTeamEditServerMessage { + repeated int32 TrialUseSelfAvatarIDList = 1; +} + +message MonsterFarmServerMessage { + int32 CurrentTracingMissionID = 1; + int32 EquippedItemID = 2; + repeated int32 ViewdAchivementIDs = 3; + int32 EquippedSeedItemID = 4; + repeated int32 GetMissionIDs = 5; + repeated int32 GetAchivementIDs = 6; + repeated int32 ViewedHandbookItemIDs = 7; + repeated uint32 MonstersMarkedForDel = 8; +} + +message WorldMapResidentActivityServerMessage { + bool is_in_resident_activity = 1; + uint32 first_login_level_record = 2; + uint32 last_resident_activity_id = 3; + repeated uint32 popup_new_resident_activity_id_record = 4; + repeated uint32 outer_popup_new_resident_activity_id_record = 5; +} + +message SparklePRPGServerMessage { + uint32 CurrentTowerId = 1; +} + +message MarsDurandalCubeRedDotServerMessage { + uint32 last_time_goto_area_page = 1; +} + +message MCKChapterRewardRedDotServerMessage { + bool already_click_tower_tab = 1; + bool already_click_explore_tower_btn = 2; +} + +message KianaAutoChessServerMessage { + repeated KianaAutoChessOverAllValue kiana_auto_chess_overallvalue_list = 1; + repeated int32 kiana_auto_chess_rune_list = 2; + repeated KianaAutoChessItem kiana_auto_chess_item_list = 3; + repeated KianaAutoChessCard kiana_auto_chess_card_list = 4; + int32 free_refresh_times = 5; + int32 bag_cell_count = 6; + int32 shop_upgrade_price_reduce = 7; + int32 gold_num = 8; + int32 player_max_hp = 9; + int32 player_hp = 10; + int32 player_level = 11; + int32 shop_refresh_cost = 12; + int32 chosen_battle_npc_id = 13; + repeated KianaAutoChessPveNpc npc_data_list = 14; + repeated KianaAutoChessCard redundant_card_list = 15; + int32 shop_extra_refresh_card_level = 16; +} + +message KianaAutoChessOverAllValue { + int32 key = 1; + float value = 2; +} + +message KianaAutoChessCard { + int32 cardId = 1; + int32 cardExp = 2; +} + +message KianaAutoChessItem { + int32 itemId = 1; + int32 itemLevel = 2; +} + +message KianaAutoChessPveNpc { + int32 npc_Id = 1; + int32 npc_Hp = 2; + int32 npc_MaxHp = 3; +} + +message TiledGameInnServerMessage { + repeated TiledGameInnMissionGroupStatusMessage mission_group_status_list = 1; + int32 track_mission_id = 2; + uint32 last_time_fetch_daily_mission = 3; + bool has_show_daily_mission_finish_hint = 4; + repeated uint32 unlock_area_id_list = 6; +} + +message TiledGameInnMissionGroupStatusMessage { + int32 group_id = 1; + int32 group_status = 2; +} + +message TiledGameInnUnLockSiteGroupMessage { + uint32 area_id = 1; + uint32 site_group_id = 2; +} + +message DevilAutoChessEvent { + DevilAutoChessEventType type = 1; + uint32 event_param = 2; +} + +message DevilAutoChessRole { + uint32 role_id = 1; + uint32 level = 2; +} + +message DevilAutoChessCard { + uint32 unique_id = 1; + uint32 card_id = 2; +} + +message DevilAutoChessWiki { + repeated uint32 card_collection_list = 1; + repeated uint32 treasure_collection_list = 2; + repeated uint32 achievement_collection_list = 3; + repeated uint32 bond_collection_list = 4; +} + +message DevilAutoChessGame { + uint32 game_id = 1; + uint32 wave_id = 2; + uint32 role_id = 3; + uint32 hp_lost = 4; + repeated DevilAutoChessCard card_list = 5; + repeated uint32 treasure_id_list = 6; + uint32 action_random = 7; + repeated uint32 wait_select_card_list = 8; + repeated uint32 wait_select_treasure_list = 9; + uint32 removal_num = 10; + uint32 refresh_num = 11; + uint32 promote_num = 12; + uint32 energy = 13; + string game_transaction_str = 14; + string ext_info = 15; +} + +message DevilAutoChessActivity { + uint32 activity_id = 1; + repeated DevilAutoChessRole role_list = 2; + repeated DevilAutoChessGame game_save_point_list = 3; + DevilAutoChessWiki wiki = 4; + repeated uint32 passed_game_list = 5; + repeated uint32 unlock_card_list = 6; +} + +// CmdID: 8200 +message DevilAutoChessGetActivityReq { + uint32 activity_id = 1; +} + +// CmdID: 8201 +message DevilAutoChessGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + FEATURE_CLOSE = 3; + } + + DevilAutoChessGetActivityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + DevilAutoChessActivity activity = 3; +} + +// CmdID: 8202 +message DevilAutoChessRoleLevelUpReq { + uint32 role_id = 1; + uint32 target_level = 2; +} + +// CmdID: 8203 +message DevilAutoChessRoleLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + INVALID_ROLE = 2; + TARGET_LEVEL_ERROR = 3; + MATERIAL_LACK = 4; + CONDITION_NOT_MEET = 5; + NOT_OPEN = 6; + FEATURE_CLOSE = 7; + } + + DevilAutoChessRoleLevelUpRsp.Retcode retcode = 1; + DevilAutoChessRole role = 2; +} + +// CmdID: 8204 +message DevilAutoChessBeginGameReq { + uint32 activity_id = 1; + uint32 game_id = 2; + uint32 role_id = 3; + uint32 wave_id = 4; +} + +// CmdID: 8205 +message DevilAutoChessBeginGameRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + ROLE_ERROR = 3; + INVALID_GAME = 4; + WAVE_MISMATCH = 5; + RPG_SITE_CANNOT_ENTER = 6; + FEATURE_CLOSE = 7; + } + + DevilAutoChessBeginGameRsp.Retcode retcode = 1; + uint32 game_id = 2; + DevilAutoChessGame game = 3; +} + +// CmdID: 8206 +message DevilAutoChessGetGameReq { + uint32 activity_id = 1; +} + +// CmdID: 8207 +message DevilAutoChessGetGameRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_GAME = 3; + } + + DevilAutoChessGetGameRsp.Retcode retcode = 1; + uint32 activity_id = 2; + DevilAutoChessGame game = 3; +} + +// CmdID: 8208 +message DevilAutoChessEndGameReq { + enum Status { + WIN = 0; + LOSE = 1; + ABANDON = 2; + } + + uint32 game_id = 1; + DevilAutoChessEndGameReq.Status status = 2; + uint32 score = 3; + uint32 wave_num = 4; + uint32 round_num = 5; + uint32 card_num = 6; +} + +// CmdID: 8209 +message DevilAutoChessEndGameRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + GAME_ERROR = 3; + WAVE_ERROR = 4; + } + + DevilAutoChessEndGameRsp.Retcode retcode = 1; + uint32 game_id = 2; + bool is_first_win = 3; + RewardData first_reward_data = 4; + repeated uint32 role_id_list = 5; + repeated uint32 card_id_list = 6; + RewardData normal_reward_data = 7; +} + +// CmdID: 8210 +message DevilAutoChessRemoveCardReq { + uint32 action_random = 1; + uint32 card_unique_id = 2; +} + +// CmdID: 8211 +message DevilAutoChessRemoveCardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_GAME = 3; + UNIQUE_ID_ERROR = 4; + LACK_NUM = 5; + ACTION_RANDOM_ERROR = 6; + } + + DevilAutoChessRemoveCardRsp.Retcode retcode = 1; + uint32 remove_card_unique_id = 2; + uint32 action_random = 3; + uint32 cur_removal_num = 4; +} + +// CmdID: 8212 +message DevilAutoChessRefreshTreasurePoolReq { + uint32 action_random = 1; +} + +// CmdID: 8213 +message DevilAutoChessRefreshTreasurePoolRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_GAME = 3; + LACK_NUM = 4; + ACTION_RANDOM_ERROR = 5; + } + + DevilAutoChessRefreshTreasurePoolRsp.Retcode retcode = 1; +} + +// CmdID: 8214 +message DevilAutoChessRefreshCardPoolReq { + uint32 action_random = 1; +} + +// CmdID: 8215 +message DevilAutoChessRefreshCardPoolRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_GAME = 3; + LACK_NUM = 4; + ACTION_RANDOM_ERROR = 5; + } + + DevilAutoChessRefreshCardPoolRsp.Retcode retcode = 1; +} + +// CmdID: 8216 +message DevilAutoChessPromoteCardReq { + uint32 action_random = 1; + repeated uint32 source_card_unique_id_list = 2; + uint32 target_card_id = 3; +} + +// CmdID: 8217 +message DevilAutoChessPromoteCardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_GAME = 3; + SOURCE_CARD_ERROR = 4; + TARGET_CARD_ERROR = 5; + LACK_NUM = 6; + ACTION_RANDOM_ERROR = 7; + } + + DevilAutoChessPromoteCardRsp.Retcode retcode = 1; + uint32 card_unique_id = 2; + uint32 target_card_id = 3; + uint32 action_random = 4; + uint32 cur_promote_num = 5; +} + +// CmdID: 8218 +message DevilAutoChessSelectTreasureReq { + uint32 action_random = 1; + uint32 treasure_id = 2; +} + +// CmdID: 8219 +message DevilAutoChessSelectTreasureRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_GAME = 3; + TREASURE_ERROR = 4; + NUM_LIMIT = 5; + ACTION_RANDOM_ERROR = 6; + } + + DevilAutoChessSelectTreasureRsp.Retcode retcode = 1; +} + +// CmdID: 8220 +message DevilAutoChessSelectCardReq { + uint32 action_random = 1; + uint32 card_id = 2; +} + +// CmdID: 8221 +message DevilAutoChessSelectCardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_GAME = 3; + CARD_ERROR = 4; + NUM_LIMIT = 5; + ACTION_RANDOM_ERROR = 6; + } + + DevilAutoChessSelectCardRsp.Retcode retcode = 1; + uint32 card_unique_id = 2; +} + +// CmdID: 8222 +message DevilAutoChessFinishWaveReq { + uint32 action_random = 1; + uint32 wave_id = 2; + uint32 round_num = 3; + uint32 hp_lost = 4; + uint32 energy = 5; + string ext_info = 6; +} + +// CmdID: 8223 +message DevilAutoChessFinishWaveRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_GAME = 3; + ACTION_RANDOM_ERROR = 4; + WAVE_ERROR = 5; + INFO_SIZE_LIMIT = 6; + } + + DevilAutoChessFinishWaveRsp.Retcode retcode = 1; +} + +// CmdID: 8224 +message DevilAutoChessTriggerEventReq { + uint32 action_random = 1; + repeated DevilAutoChessEvent event_list = 2; +} + +// CmdID: 8225 +message DevilAutoChessTriggerEventRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_GAME = 3; + ACTION_RANDOM_ERROR = 4; + } + + DevilAutoChessTriggerEventRsp.Retcode retcode = 1; +} + +// CmdID: 8226 +message DevilAutoChessSweepChallengeReq { + uint32 game_id = 1; + uint32 sweep_material_num = 2; +} + +// CmdID: 8227 +message DevilAutoChessSweepChallengeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + GAME_TYPE_ERROR = 3; + GAME_NOT_PASS = 4; + MATERIAL_ERROR = 5; + } + + DevilAutoChessSweepChallengeRsp.Retcode retcode = 1; + uint32 game_id = 2; + RewardData normal_reward_data = 3; +} + +// CmdID: 8228 +message DevilAutoChessGetSpecialRankReq { + uint32 game_id = 1; +} + +// CmdID: 8229 +message DevilAutoChessGetSpecialRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + INVALID_GAME = 3; + FEATURE_CLOSE = 4; + } + + DevilAutoChessGetSpecialRankRsp.Retcode retcode = 1; + uint32 game_id = 2; + RankShowData rank_data = 3; + uint32 rank_percent = 4; + DevilAutoChessActivitySpecialRankInfo self_rank_data = 5; + uint32 rank = 6; +} + +// CmdID: 8230 +message DevilAutoChessGetWikiReq { + uint32 activity_id = 1; +} + +// CmdID: 8231 +message DevilAutoChessGetWikiRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + FEATURE_CLOSE = 3; + } + + DevilAutoChessGetWikiRsp.Retcode retcode = 1; + DevilAutoChessWiki wiki = 2; + repeated uint32 unlock_card_list = 3; +} + +// CmdID: 8232 +message DevilAutoChessUnlockAchievementReq { + uint32 activity_id = 1; + uint32 achievement_id = 2; +} + +// CmdID: 8233 +message DevilAutoChessUnlockAchievementRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + DevilAutoChessUnlockAchievementRsp.Retcode retcode = 1; + uint32 achievement_id = 2; +} + +// CmdID: 8234 +message DevilAutoChessUnlockBondReq { + uint32 activity_id = 1; + uint32 bond_id = 2; +} + +// CmdID: 8235 +message DevilAutoChessUnlockBondRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + DevilAutoChessUnlockBondRsp.Retcode retcode = 1; + uint32 bond_id = 2; +} + +enum CmdTypeDevilautochess { + CMD_TYPE_DEVILAUTOCHESS_NONE = 0; + CMD_DEVIL_AUTO_CHESS_GET_ACTIVITY_REQ = 8200; + CMD_DEVIL_AUTO_CHESS_GET_ACTIVITY_RSP = 8201; + CMD_DEVIL_AUTO_CHESS_ROLE_LEVEL_UP_REQ = 8202; + CMD_DEVIL_AUTO_CHESS_ROLE_LEVEL_UP_RSP = 8203; + CMD_DEVIL_AUTO_CHESS_BEGIN_GAME_REQ = 8204; + CMD_DEVIL_AUTO_CHESS_BEGIN_GAME_RSP = 8205; + CMD_DEVIL_AUTO_CHESS_GET_GAME_REQ = 8206; + CMD_DEVIL_AUTO_CHESS_GET_GAME_RSP = 8207; + CMD_DEVIL_AUTO_CHESS_END_GAME_REQ = 8208; + CMD_DEVIL_AUTO_CHESS_END_GAME_RSP = 8209; + CMD_DEVIL_AUTO_CHESS_REMOVE_CARD_REQ = 8210; + CMD_DEVIL_AUTO_CHESS_REMOVE_CARD_RSP = 8211; + CMD_DEVIL_AUTO_CHESS_REFRESH_TREASURE_POOL_REQ = 8212; + CMD_DEVIL_AUTO_CHESS_REFRESH_TREASURE_POOL_RSP = 8213; + CMD_DEVIL_AUTO_CHESS_REFRESH_CARD_POOL_REQ = 8214; + CMD_DEVIL_AUTO_CHESS_REFRESH_CARD_POOL_RSP = 8215; + CMD_DEVIL_AUTO_CHESS_PROMOTE_CARD_REQ = 8216; + CMD_DEVIL_AUTO_CHESS_PROMOTE_CARD_RSP = 8217; + CMD_DEVIL_AUTO_CHESS_SELECT_TREASURE_REQ = 8218; + CMD_DEVIL_AUTO_CHESS_SELECT_TREASURE_RSP = 8219; + CMD_DEVIL_AUTO_CHESS_SELECT_CARD_REQ = 8220; + CMD_DEVIL_AUTO_CHESS_SELECT_CARD_RSP = 8221; + CMD_DEVIL_AUTO_CHESS_FINISH_WAVE_REQ = 8222; + CMD_DEVIL_AUTO_CHESS_FINISH_WAVE_RSP = 8223; + CMD_DEVIL_AUTO_CHESS_TRIGGER_EVENT_REQ = 8224; + CMD_DEVIL_AUTO_CHESS_TRIGGER_EVENT_RSP = 8225; + CMD_DEVIL_AUTO_CHESS_SWEEP_CHALLENGE_REQ = 8226; + CMD_DEVIL_AUTO_CHESS_SWEEP_CHALLENGE_RSP = 8227; + CMD_DEVIL_AUTO_CHESS_GET_SPECIAL_RANK_REQ = 8228; + CMD_DEVIL_AUTO_CHESS_GET_SPECIAL_RANK_RSP = 8229; + CMD_DEVIL_AUTO_CHESS_GET_WIKI_REQ = 8230; + CMD_DEVIL_AUTO_CHESS_GET_WIKI_RSP = 8231; + CMD_DEVIL_AUTO_CHESS_UNLOCK_ACHIEVEMENT_REQ = 8232; + CMD_DEVIL_AUTO_CHESS_UNLOCK_ACHIEVEMENT_RSP = 8233; + CMD_DEVIL_AUTO_CHESS_UNLOCK_BOND_REQ = 8234; + CMD_DEVIL_AUTO_CHESS_UNLOCK_BOND_RSP = 8235; +} + +enum DevilAutoChessGameType { + DEVIL_AUTO_CHESS_GAME_TYPE_NONE = 0; + DEVIL_AUTO_CHESS_GAME_TYPE_STORY = 1; + DEVIL_AUTO_CHESS_GAME_TYPE_CHALLENGE = 2; + DEVIL_AUTO_CHESS_GAME_TYPE_SPECIAL = 3; +} + +enum DevilAutoChessCollectionType { + DEVIL_AUTO_CHESS_COLLECTION_TYPE_NONE = 0; + DEVIL_AUTO_CHESS_COLLECTION_TYPE_CARD = 1; + DEVIL_AUTO_CHESS_COLLECTION_TYPE_TREASURE = 2; + DEVIL_AUTO_CHESS_COLLECTION_TYPE_ACHIEVEMENT = 3; + DEVIL_AUTO_CHESS_COLLECTION_TYPE_BOND = 4; +} + +enum DevilAutoChessCardRarity { + DEVIL_AUTO_CHESS_CARD_RARITY_NONE = 0; + DEVIL_AUTO_CHESS_CARD_RARITY_COMMON = 1; + DEVIL_AUTO_CHESS_CARD_RARITY_RARE = 2; + DEVIL_AUTO_CHESS_CARD_RARITY_EPIC = 3; + DEVIL_AUTO_CHESS_CARD_RARITY_LEGENDARY = 4; +} + +enum DevilAutoChessEventType { + DEVIL_AUTO_CHESS_EVENT_TYPE_NONE = 0; + DEVIL_AUTO_CHESS_EMPTY = 1; + DEVIL_AUTO_CHESS_ADD_CARD = 2; + DEVIL_AUTO_CHESS_REMOVE_CARD = 3; + DEVIL_AUTO_CHESS_REMOVE_TREASURE = 4; + DEVIL_AUTO_CHESS_ADD_PROMOTE = 5; + DEVIL_AUTO_CHESS_ADD_REFRESH = 6; + DEVIL_AUTO_CHESS_ADD_REMOVAL = 7; + DEVIL_AUTO_CHESS_ADD_EPIC_CARD_EXT_WEIGHT = 8; + DEVIL_AUTO_CHESS_SUB_EPIC_CARD_EXT_WEIGHT = 9; + DEVIL_AUTO_CHESS_ADD_LEGENDARY_CARD_EXT_WEIGHT = 10; + DEVIL_AUTO_CHESS_SUB_LEGENDARY_CARD_EXT_WEIGHT = 11; + DEVIL_AUTO_CHESS_ADD_EXT_WAIT_SELECT_CARD_NUM = 12; + DEVIL_AUTO_CHESS_REFERSH_CARD_POOL = 13; + DEVIL_AUTO_CHESS_SUB_PROMOTE = 14; + DEVIL_AUTO_CHESS_SUB_REFRESH = 15; + DEVIL_AUTO_CHESS_SUB_REMOVAL = 16; + DEVIL_AUTO_CHESS_REFERSH_TREASURE_POOL = 17; +} + +message DiceyDungeonRole { + uint32 role_id = 1; + uint32 level = 2; +} + +message DiceyDungeonWeapon { + uint32 weapon_id = 1; + uint32 level = 2; +} + +message DiceyDungeonOrnament { + uint32 ornament_id = 1; + uint32 level = 2; +} + +message DiceyDungeonInfo { + uint32 dungeon_id = 1; + uint32 floor = 2; + uint32 dungeon_room_id = 3; + DiceyDungeonRole role = 4; + uint32 health = 5; + DiceyDungeonWeapon weapon = 6; + repeated uint32 passed_room_id_list = 7; + repeated DiceyDungeonOrnament ornament_list = 8; + repeated uint32 wait_select_ornament_id_list = 9; + repeated uint32 random_dicey_num_list = 10; + uint32 left_refresh_ornament_times = 11; + uint32 dicey_battle_score = 12; + uint32 total_dicey_battle_score = 13; +} + +message DiceyDungeonHasGotDailyMaterial { + uint32 material_id = 1; + uint32 num = 2; +} + +message DiceyDungeonActivity { + uint32 activity_id = 1; + repeated DiceyDungeonRole role_list = 2; + repeated DiceyDungeonWeapon weapon_list = 3; + DiceyDungeonInfo story_dicey_dungeon_info = 4; + DiceyDungeonInfo schedule_dicey_dungeon_info = 5; + DiceyDungeonInfo endless_dicey_dungeon_info = 6; + repeated uint32 passed_endless_dungeon_room_id_list = 7; + uint32 cur_schedule_id = 8; + uint32 refresh_ornament_random = 9; + repeated DiceyDungeonHasGotDailyMaterial has_got_daily_material_list = 11; +} + +// CmdID: 6500 +message DiceyDungeonActivityGetDataReq { + uint32 tale_id = 1; + uint32 activity_id = 2; +} + +// CmdID: 6501 +message DiceyDungeonActivityGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_EXIST = 2; + } + + DiceyDungeonActivityGetDataRsp.Retcode retcode = 1; + DiceyDungeonActivity dungeon_activity = 2; +} + +// CmdID: 6502 +message DiceyDungeonActivityRoleLevelUpReq { + uint32 tale_id = 1; + uint32 activity_id = 2; + uint32 role_id = 3; +} + +// CmdID: 6503 +message DiceyDungeonActivityRoleLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_EXIST = 2; + ROLE_NOT_EXIST = 3; + MATERIAL_LACK = 4; + SITE_LOCK = 5; + } + + DiceyDungeonActivityRoleLevelUpRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 6504 +message DiceyDungeonActivityDungeonBeginReq { + uint32 tale_id = 1; + uint32 activity_id = 2; + DiceyDungeonInfo dungeon_info = 3; + DiceyDungeonType dungeon_type = 4; +} + +// CmdID: 6505 +message DiceyDungeonActivityDungeonBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_EXIST = 2; + ROLE_NOT_EXIST = 3; + WEAPON_NOT_EXIST = 4; + ROLE_RESTRICT = 5; + TICKET_LACK = 6; + DUNGEON_TYPE_ERROR = 7; + SCHEDULE_ERROR = 8; + ORNAMENT_NUM_ERROR = 9; + ORNAMENT_ERROR = 10; + } + + DiceyDungeonActivityDungeonBeginRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 dungeon_id = 3; +} + +// CmdID: 6506 +message DiceyDungeonActivityDungeonEndReq { + uint32 tale_id = 1; + uint32 activity_id = 2; + DiceyDungeonInfo dungeon_info = 3; + DiceyDungeonType dungeon_type = 4; +} + +// CmdID: 6507 +message DiceyDungeonActivityDungeonEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_EXIST = 2; + DUNGEON_NOT_BEGIN = 3; + ROLE_ERROR = 4; + WEAPON_ERROR = 5; + DUNGEON_ROOM_ERROR = 6; + } + + enum Status { + WIN = 0; + LOSE = 1; + ABANDON = 2; + } + + DiceyDungeonActivityDungeonEndRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 dungeon_id = 3; + DiceyDungeonActivityDungeonEndRsp.Status status = 4; + RewardData reward_data = 5; + uint32 total_dicey_battle_score = 7; + repeated DropItem daily_drop_item_list = 8; +} + +// CmdID: 6508 +message DiceyDungeonActivityRoomBeginReq { + uint32 tale_id = 1; + uint32 activity_id = 2; + uint32 select_dungeon_room_id = 3; + DiceyDungeonType dungeon_type = 4; + DiceyDungeonInfo dungeon_info = 5; +} + +// CmdID: 6509 +message DiceyDungeonActivityRoomBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_EXIST = 2; + DUNGEON_NOT_BEGIN = 3; + SELECT_ROOM_ERROR = 4; + ROLE_ERROR = 5; + WEAPON_ERROR = 6; + DUNGEON_ROOM_ERROR = 7; + } + + DiceyDungeonActivityRoomBeginRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 dungeon_id = 3; + uint32 dungeon_room_id = 4; +} + +// CmdID: 6510 +message DiceyDungeonActivityRoomEndReq { + enum Status { + WIN = 0; + LOSE = 1; + SKIP = 2; + } + + uint32 tale_id = 1; + uint32 activity_id = 2; + DiceyDungeonInfo dungeon_info = 3; + DiceyDungeonActivityRoomEndReq.Status status = 4; + DiceyDungeonType dungeon_type = 5; + uint32 battle_time = 6; + uint32 battle_round = 7; +} + +// CmdID: 6511 +message DiceyDungeonActivityRoomEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_EXIST = 2; + DUNGEON_NOT_BEGIN = 3; + DUNGEON_ROOM_ERROR = 4; + ROLE_ERROR = 5; + WEAPON_ERROR = 6; + CHECK_EVENT_FAIL = 7; + } + + DiceyDungeonActivityRoomEndRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 dungeon_id = 3; + uint32 dungeon_room_id = 4; +} + +// CmdID: 6512 +message DiceyDungeonActivityGetWeaponGachaDisplayReq { + uint32 tale_id = 1; + uint32 activity_id = 2; +} + +// CmdID: 6513 +message DiceyDungeonActivityGetWeaponGachaDisplayRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_EXIST = 2; + } + + DiceyDungeonActivityGetWeaponGachaDisplayRsp.Retcode retcode = 1; + repeated uint32 valid_pool_id_list = 2; + uint32 gacha_random = 3; + uint32 activity_id = 4; +} + +// CmdID: 6514 +message DiceyDungeonActivityWeaponGachaReq { + uint32 tale_id = 1; + uint32 activity_id = 2; + uint32 gacha_random = 3; +} + +// CmdID: 6515 +message DiceyDungeonActivityWeaponGachaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_EXIST = 2; + MATERIAL_LACK = 3; + ALL_WEAPON_GETTED = 4; + } + + DiceyDungeonActivityWeaponGachaRsp.Retcode retcode = 1; + uint32 weapon_id = 2; + bool is_new = 3; + uint32 gacha_random = 4; + uint32 activity_id = 5; +} + +// CmdID: 6516 +message DiceyDungeonActivitySelectOrnamentReq { + uint32 tale_id = 1; + uint32 activity_id = 2; + uint32 select_ornament_id = 3; + uint32 replace_ornament_id = 4; + bool is_abandon = 5; + DiceyDungeonInfo dungeon_info = 6; + DiceyDungeonType dungeon_type = 7; +} + +// CmdID: 6517 +message DiceyDungeonActivitySelectOrnamentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_EXIST = 2; + SELECT_ORNAMENT_ERROR = 3; + REPLACE_ORNAMENT_ERROR = 4; + DUNGEON_NOT_BEGIN = 5; + DUNGEON_ROOM_ERROR = 6; + ROLE_ERROR = 7; + WEAPON_ERROR = 8; + NO_REPLACE_ORNAMENT = 9; + } + + DiceyDungeonActivitySelectOrnamentRsp.Retcode retcode = 1; + uint32 activity_id = 2; + bool is_abandon = 3; +} + +// CmdID: 6518 +message DiceyDungeonActivityRefreshOrnamentReq { + uint32 tale_id = 1; + uint32 activity_id = 2; + uint32 refresh_ornament_random = 3; + DiceyDungeonInfo dungeon_info = 4; + DiceyDungeonType dungeon_type = 5; +} + +// CmdID: 6519 +message DiceyDungeonActivityRefreshOrnamentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_EXIST = 2; + DUNGEON_NOT_BEGIN = 3; + SELECT_ROOM_ERROR = 4; + ROLE_ERROR = 5; + WEAPON_ERROR = 6; + DUNGEON_ROOM_ERROR = 7; + REFRESH_TIMES_LACK = 8; + CANNOT_REFRESH = 9; + } + + DiceyDungeonActivityRefreshOrnamentRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 6520 +message DiceyDungeonActivityGetDailyScoreRankReq { + uint32 tale_id = 1; + uint32 activity_id = 2; + uint32 dungeon_id = 3; +} + +// CmdID: 6521 +message DiceyDungeonActivityGetDailyScoreRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_EXIST = 2; + SCHEDULE_ERROR = 3; + } + + DiceyDungeonActivityGetDailyScoreRankRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 dungeon_id = 3; + RankShowData rank_data = 4; + uint32 rank_percent = 5; +} + +enum CmdTypeDiceydungeon { + CMD_TYPE_DICEYDUNGEON_NONE = 0; + CMD_DICEY_DUNGEON_ACTIVITY_GET_DATA_REQ = 6500; + CMD_DICEY_DUNGEON_ACTIVITY_GET_DATA_RSP = 6501; + CMD_DICEY_DUNGEON_ACTIVITY_ROLE_LEVEL_UP_REQ = 6502; + CMD_DICEY_DUNGEON_ACTIVITY_ROLE_LEVEL_UP_RSP = 6503; + CMD_DICEY_DUNGEON_ACTIVITY_DUNGEON_BEGIN_REQ = 6504; + CMD_DICEY_DUNGEON_ACTIVITY_DUNGEON_BEGIN_RSP = 6505; + CMD_DICEY_DUNGEON_ACTIVITY_DUNGEON_END_REQ = 6506; + CMD_DICEY_DUNGEON_ACTIVITY_DUNGEON_END_RSP = 6507; + CMD_DICEY_DUNGEON_ACTIVITY_ROOM_BEGIN_REQ = 6508; + CMD_DICEY_DUNGEON_ACTIVITY_ROOM_BEGIN_RSP = 6509; + CMD_DICEY_DUNGEON_ACTIVITY_ROOM_END_REQ = 6510; + CMD_DICEY_DUNGEON_ACTIVITY_ROOM_END_RSP = 6511; + CMD_DICEY_DUNGEON_ACTIVITY_GET_WEAPON_GACHA_DISPLAY_REQ = 6512; + CMD_DICEY_DUNGEON_ACTIVITY_GET_WEAPON_GACHA_DISPLAY_RSP = 6513; + CMD_DICEY_DUNGEON_ACTIVITY_WEAPON_GACHA_REQ = 6514; + CMD_DICEY_DUNGEON_ACTIVITY_WEAPON_GACHA_RSP = 6515; + CMD_DICEY_DUNGEON_ACTIVITY_SELECT_ORNAMENT_REQ = 6516; + CMD_DICEY_DUNGEON_ACTIVITY_SELECT_ORNAMENT_RSP = 6517; + CMD_DICEY_DUNGEON_ACTIVITY_REFRESH_ORNAMENT_REQ = 6518; + CMD_DICEY_DUNGEON_ACTIVITY_REFRESH_ORNAMENT_RSP = 6519; + CMD_DICEY_DUNGEON_ACTIVITY_GET_DAILY_SCORE_RANK_REQ = 6520; + CMD_DICEY_DUNGEON_ACTIVITY_GET_DAILY_SCORE_RANK_RSP = 6521; +} + +enum DiceyDungeonType { + DICEY_DUNGEON_NONE = 0; + DICEY_DUNGEON_STORY = 1; + DICEY_DUNGEON_SCHEDULE = 2; + DICEY_DUNGEON_ENDLESS = 3; +} + +enum DiceyDungeonRoomType { + DICEY_DUNGEON_ROOM_TYPE_NONE = 0; + DICEY_DUNGEON_ROOM_DICEY_BATTLE = 1; + DICEY_DUNGEON_ROOM_AVATAR_BATTLE = 2; + DICEY_DUNGEON_ROOM_ORNAMENT_REWARD = 3; + DICEY_DUNGEON_ROOM_HP_RECOVER = 4; + DICEY_DUNGEON_ROOM_PLOT = 5; + DICEY_DUNGEON_ROOM_BOSS = 6; + DICEY_DUNGEON_ROOM_SKIP = 7; +} + +enum DiceyDungeonSkillType { + DICEY_DUNGEON_SKILL_NONE = 0; + DICEY_DUNGEON_SKILL_INITIATIVE = 1; + DICEY_DUNGEON_SKILL_PASSIVE = 2; +} + +enum DiceyDungeonRoleAttributeType { + DICEY_DUNGEON_ROLE_ATTRIBUTE_TYPE_NONE = 0; + DICEY_DUNGEON_ROLE_ATTR_STRENGTH = 1; + DICEY_DUNGEON_ROLE_ATTR_AGILITY = 2; + DICEY_DUNGEON_ROLE_ATTR_INTELLIGENCE = 3; +} + +enum DiceyDungeonGachaType { + DICEY_DUNGEON_GACHA_TYPE_NONE = 0; + DICEY_DUNGEON_GACHA_WEAPON = 1; + DICEY_DUNGEON_GACHA_ORNAMENT_INITIATIVE = 2; + DICEY_DUNGEON_GACHA_ORNAMENT_PASSIVE = 3; +} + +message DLCAvatarTalent { + uint32 talent_id = 1; + uint32 level = 2; + uint32 affix_set_id = 4; + uint32 wait_select_affix_set_id = 6; + bool is_mask = 7; +} + +message DLCAvatar { + uint32 avatar_id = 1; + repeated DLCAvatarTalent talent_list = 2; + repeated uint32 equip_talent_list = 3; +} + +message DLCSupportNPC { + uint32 npc_id = 1; + uint32 support_point = 2; + uint32 support_level = 3; +} + +// CmdID: 3550 +message GetDLCReq { +} + +// CmdID: 3551 +message GetDLCRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetDLCRsp.Retcode retcode = 1; + string name = 2; + uint32 level = 3; + uint32 exp = 4; + uint32 has_take_reward_level = 5; + repeated DLCSupportNPC support_npc_list = 6; + repeated uint32 finished_dialog_id_list = 7; +} + +// CmdID: 3552 +message LevelUpDLCAvatarTalentReq { + uint32 talent_id = 1; + uint32 target_level = 2; +} + +// CmdID: 3553 +message LevelUpDLCAvatarTalentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_NOT_EXIST = 2; + TARGET_LEVEL_ERROR = 3; + PRE_TALENT_LACK = 4; + MATERIAL_LACK = 5; + DLC_LEVEL_LACK = 6; + PRE_AVATAR_LOCK = 7; + WAIT_SELECT_AFFIX_SET_NOT_EMPTY = 8; + } + + LevelUpDLCAvatarTalentRsp.Retcode retcode = 1; + uint32 talent_id = 2; +} + +// CmdID: 3554 +message EquipDLCAvatarTalentReq { + uint32 avatar_id = 1; + repeated uint32 equip_talent_list = 2; +} + +// CmdID: 3555 +message EquipDLCAvatarTalentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_NOT_EXIST = 2; + TALENT_NOT_EXIST = 3; + TALENT_TYPE_ERROR = 4; + TALENT_TAG_REPEAT = 5; + } + + EquipDLCAvatarTalentRsp.Retcode retcode = 1; +} + +// CmdID: 3556 +message SyncDLCAvatarNotify { + repeated DLCAvatar avatar_list = 1; +} + +// CmdID: 3557 +message ModifyDLCNameReq { + string name = 1; +} + +// CmdID: 3558 +message ModifyDLCNameRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FORMAT_ERROR = 2; + SENSITIVE_WORDS = 3; + } + + ModifyDLCNameRsp.Retcode retcode = 1; +} + +// CmdID: 3559 +message GetDLCAvatarReq { +} + +// CmdID: 3560 +message GetDLCAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetDLCAvatarRsp.Retcode retcode = 1; + repeated DLCAvatar avatar_list = 2; +} + +// CmdID: 3561 +message TakeDLCLevelRewardReq { +} + +// CmdID: 3562 +message TakeDLCLevelRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_REWARD = 2; + } + + TakeDLCLevelRewardRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; +} + +message DLCTowerAvatarInfo { + uint32 avatar_id = 1; + uint32 hp_percent = 2; + uint32 sp_percent = 3; +} + +// CmdID: 3563 +message DLCTowerStageBeginReq { + repeated uint32 avatar_id_list = 1; +} + +// CmdID: 3564 +message DLCTowerStageBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_BEGIN = 2; + PROGRESS_FULL = 3; + AVATAR_ERROR = 4; + AVATAR_DIE = 5; + } + + DLCTowerStageBeginRsp.Retcode retcode = 1; + uint32 progress = 2; +} + +// CmdID: 3565 +message DLCTowerStageEndReq { + StageEndStatus end_status = 1; + repeated DLCTowerAvatarInfo avatar_info_list = 2; + uint32 progress = 3; + uint32 stage_pass_time = 4; + repeated DropItem drop_item_list = 6; +} + +// CmdID: 3566 +message DLCTowerStageEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_BEGIN = 3; + PROGRESS_ERROR = 4; + PRODUCE_NUM_ERROR = 5; + AVATAR_ERROR = 6; + } + + DLCTowerStageEndRsp.Retcode retcode = 1; + uint32 progress = 2; + RewardData reward_data = 3; + uint32 end_progress = 4; + uint32 score = 5; + bool is_new_record = 6; +} + +// CmdID: 3569 +message DLCAvatarReviveReq { + DLCAvatarReviveCostType cost_type = 1; + uint32 map_id = 3; + uint32 avatar_id = 4; + repeated DropItem drop_item_list = 5; +} + +// CmdID: 3570 +message DLCAvatarReviveRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_LACK = 2; + TIMES_LACK = 3; + NOT_IN_STAGE = 4; + MAP_ERROR = 5; + AVATAR_ERROR = 6; + } + + DLCAvatarReviveRsp.Retcode retcode = 1; + uint32 revive_times = 2; + DLCAvatarReviveCostType cost_type = 3; + uint32 map_id = 4; + uint32 avatar_id = 5; +} + +// CmdID: 3571 +message GetDLCTowerRankReq { +} + +// CmdID: 3572 +message GetDLCTowerRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetDLCTowerRankRsp.Retcode retcode = 1; + RankShowData rank_data = 2; +} + +// CmdID: 3573 +message TakeDLCTowerRankRewardNotify { + RewardData reward_data = 1; + uint32 rank = 2; + uint32 score = 3; +} + +message DLCTowerFloorMaxScore { + uint32 floor = 1; + uint32 max_score = 2; +} + +// CmdID: 3574 +message GetDLCTowerReq { +} + +// CmdID: 3575 +message GetDLCTowerRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetDLCTowerRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + uint32 progress = 3; + repeated DLCTowerAvatarInfo avatar_info_list = 4; + uint32 tower_cost_time = 5; + uint32 max_progress = 6; + uint32 avatar_revive_times = 7; + repeated DLCTowerFloorMaxScore floor_max_score_list = 8; +} + +// CmdID: 3576 +message ResetDLCTowerProgressReq { +} + +// CmdID: 3577 +message ResetDLCTowerProgressRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ResetDLCTowerProgressRsp.Retcode retcode = 1; +} + +// CmdID: 3578 +message FinishDLCDialogReq { + uint32 dialog_id = 1; +} + +// CmdID: 3579 +message FinishDLCDialogRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_SUPPORT_DIALOG = 2; + ALREADY_TAKEN = 3; + } + + FinishDLCDialogRsp.Retcode retcode = 1; + uint32 dialog_id = 2; + uint32 add_support_point = 3; +} + +// CmdID: 3580 +message RefreshDLCTalentAffixReq { + uint32 avatar_id = 1; + uint32 talent_id = 2; +} + +// CmdID: 3581 +message RefreshDLCTalentAffixRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_ERROR = 2; + NOT_REFRESHABLE_TALENT = 3; + MATERIAL_LACK = 4; + WAIT_SELECT_AFFIX_SET_NOT_EMPTY = 5; + } + + RefreshDLCTalentAffixRsp.Retcode retcode = 1; + uint32 new_affix_set_id = 2; +} + +// CmdID: 3584 +message SelectDLCTalentAffixReq { + uint32 avatar_id = 1; + uint32 talent_id = 2; + bool is_select = 3; +} + +// CmdID: 3585 +message SelectDLCTalentAffixRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_NEW_AFFIX = 2; + } + + SelectDLCTalentAffixRsp.Retcode retcode = 1; +} + +// CmdID: 3586 +message UnlockDLCPhotoReq { + uint32 unique_monster_id = 1; +} + +// CmdID: 3587 +message UnlockDLCPhotoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + UnlockDLCPhotoRsp.Retcode retcode = 1; +} + +// CmdID: 3588 +message SwitchDLCAvatarTalentReq { + uint32 avatar_id = 1; + uint32 talent_id = 2; +} + +// CmdID: 3589 +message SwitchDLCAvatarTalentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_NOT_EXIST = 2; + TALENT_NOT_EXIST = 3; + TALENT_CAN_NOT_SWITCH = 4; + } + + SwitchDLCAvatarTalentRsp.Retcode retcode = 1; +} + +// CmdID: 3590 +message ReportDLCDropItemReq { + repeated DropItem drop_item_list = 1; +} + +// CmdID: 3591 +message ReportDLCDropItemRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ReportDLCDropItemRsp.Retcode retcode = 1; +} + +enum CmdTypeDlc { + CMD_TYPE_DLC_NONE = 0; + CMD_GET_DLC_REQ = 3550; + CMD_GET_DLC_RSP = 3551; + CMD_LEVEL_UP_DLC_AVATAR_TALENT_REQ = 3552; + CMD_LEVEL_UP_DLC_AVATAR_TALENT_RSP = 3553; + CMD_EQUIP_DLC_AVATAR_TALENT_REQ = 3554; + CMD_EQUIP_DLC_AVATAR_TALENT_RSP = 3555; + CMD_SYNC_DLC_AVATAR_NOTIFY = 3556; + CMD_MODIFY_DLC_NAME_REQ = 3557; + CMD_MODIFY_DLC_NAME_RSP = 3558; + CMD_GET_DLC_AVATAR_REQ = 3559; + CMD_GET_DLC_AVATAR_RSP = 3560; + CMD_TAKE_DLC_LEVEL_REWARD_REQ = 3561; + CMD_TAKE_DLC_LEVEL_REWARD_RSP = 3562; + CMD_DLC_TOWER_STAGE_BEGIN_REQ = 3563; + CMD_DLC_TOWER_STAGE_BEGIN_RSP = 3564; + CMD_DLC_TOWER_STAGE_END_REQ = 3565; + CMD_DLC_TOWER_STAGE_END_RSP = 3566; + CMD_DLC_AVATAR_REVIVE_REQ = 3569; + CMD_DLC_AVATAR_REVIVE_RSP = 3570; + CMD_GET_DLC_TOWER_RANK_REQ = 3571; + CMD_GET_DLC_TOWER_RANK_RSP = 3572; + CMD_TAKE_DLC_RANK_REWARD_NOTIFY = 3573; + CMD_GET_DLC_TOWER_REQ = 3574; + CMD_GET_DLC_TOWER_RSP = 3575; + CMD_RESET_DLC_TOWER_PROGRESS_REQ = 3576; + CMD_RESET_DLC_TOWER_PROGRESS_RSP = 3577; + CMD_FINISH_DLC_DIALOG_REQ = 3578; + CMD_FINISH_DLC_DIALOG_RSP = 3579; + CMD_REFRESH_DLC_TALENT_AFFIX_REQ = 3580; + CMD_REFRESH_DLC_TALENT_AFFIX_RSP = 3581; + CMD_SELECT_DLC_TALENT_AFFIX_REQ = 3584; + CMD_SELECT_DLC_TALENT_AFFIX_RSP = 3585; + CMD_UNLOCK_DLC_PHOTO_REQ = 3586; + CMD_UNLOCK_DLC_PHOTO_RSP = 3587; + CMD_SWITCH_DLC_AVATAR_TALENT_REQ = 3588; + CMD_SWITCH_DLC_AVATAR_TALENT_RSP = 3589; + CMD_REPORT_DLC_DROP_ITEM_REQ = 3590; + CMD_REPORT_DLC_DROP_ITEM_RSP = 3591; +} + +enum DLCSupportType { + DLC_SUPPORT_TYPE_NONE = 0; + DLC_SUPPORT_TYPE_COLLECTION = 1; + DLC_SUPPORT_TYPE_STAGE_BEGIN = 2; + DLC_SUPPORT_TYPE_STORY = 3; + DLC_SUPPORT_TYPE_DIALOG = 4; + DLC_SUPPORT_TYPE_QUEST = 5; +} + +enum DLCTalentType { + DLC_TALENT_TYPE_NONE = 0; + DLC_TALENT_TYPE_AUTO = 1; + DLC_TALENT_TYPE_ACTIVE = 2; + DLC_TALENT_TYPE_PASSIVE = 3; + DLC_TALENT_TYPE_REFRESHABLE = 4; +} + +enum DLCAvatarReviveType { + DLC_AVATAR_REVIVE_TYPE_NONE = 0; + DLC_AVATAR_REVIVE_TYPE_DLC_TOWER = 1; + DLC_AVATAR_REVIVE_TYPE_DLC_STAGE = 2; + DLC_AVATAR_REVIVE_TYPE_OUTER_STAGE = 3; + DLC_AVATAR_REVIVE_TYPE_DLC_OW = 4; +} + +enum DLCAvatarReviveCostType { + DLC_AVATAR_REVIVE_COST_TYPE_NONE = 0; + DLC_AVATAR_REVIVE_COST_TYPE_REVIVE_COIN = 1; + DLC_AVATAR_REVIVE_COST_TYPE_COIN = 2; +} + +message ElfTalent { + uint32 talent_id = 1; + uint32 talent_level = 2; + uint32 equip_elf_id = 3; +} + +message ElfFragment { + uint32 elf_id = 1; + uint32 fragment_num = 2; +} + +message ElfSkill { + uint32 skill_id = 1; + uint32 skill_level = 2; +} + +message Elf { + uint32 elf_id = 1; + uint32 star = 2; + uint32 level = 3; + uint32 exp = 4; + repeated uint32 equip_talent_id_list = 5; + repeated ElfSkill skill_list = 6; + uint32 compensate_level = 7; + uint32 total_compensate_exp = 8; +} + +// CmdID: 2100 +message GetElfDataReq { +} + +// CmdID: 2101 +message GetElfDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetElfDataRsp.Retcode retcode = 1; + repeated Elf elf_list = 2; + repeated ElfFragment elf_fragment_list = 3; + repeated ElfTalent elf_talent_list = 4; + bool is_take_compensation = 5; +} + +// CmdID: 2102 +message SyncElfDataNotify { + repeated Elf elf_list = 3; +} + +// CmdID: 2103 +message SyncElfFragmentNotify { + repeated ElfFragment elf_fragment_list = 3; +} + +// CmdID: 2105 +message ElfStarUpReq { + uint32 elf_id = 1; +} + +// CmdID: 2106 +message ElfStarUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ELF_NOT_EXIST = 2; + FRAGMENT_LACK = 3; + STAR_FULL = 4; + LEVEL_LACK = 5; + FEATURE_CLOSED = 6; + } + + ElfStarUpRsp.Retcode retcode = 1; + uint32 elf_id = 2; + bool is_unlock = 3; +} + +// CmdID: 2107 +message AddElfExpByMaterialReq { + uint32 elf_id = 1; + uint32 material_id = 2; + uint32 material_num = 3; +} + +// CmdID: 2108 +message AddElfExpByMaterialRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ELF_NOT_EXIST = 2; + ELF_LEVEL_FULL = 3; + MATERIAL_NOT_ENOUGH = 4; + MATERIAL_CAN_NOT_ADD_EXP = 5; + SCOIN_LACK = 6; + } + + AddElfExpByMaterialRsp.Retcode retcode = 1; + uint32 old_level = 2; + uint32 old_exp = 3; +} + +// CmdID: 2121 +message ElfFragmentTransformReq { + uint32 elf_fragment_id = 1; + uint32 elf_fragment_num = 2; + repeated GenericItemNum fragment_list = 3; +} + +// CmdID: 2122 +message ElfFragmentTransformRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STAR_LACK = 2; + FRAGMENT_LACK = 3; + MATERIAL_FULL = 4; + FEATURE_CLOSED = 5; + } + + ElfFragmentTransformRsp.Retcode retcode = 1; + uint32 add_material_id = 2; + uint32 add_material_num = 3; + repeated GenericItemNum return_list = 4; +} + +// CmdID: 2123 +message ElfSkillLevelUpReq { + uint32 elf_id = 1; + uint32 elf_skill_id = 2; + bool is_level_up_all = 4; +} + +// CmdID: 2124 +message ElfSkillLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ELF_LOCKED = 2; + SCOIN_LACK = 3; + MATERIAL_NOT_ENOUGH = 4; + LEVEL_FULL = 5; + ELF_STAR_NOT_ENOUGH = 6; + PRE_SKILL_LEVEL_NOT_ENOUGH = 7; + ELF_LEVEL_NOT_ENOUGH = 8; + NOT_NORMAL_ELF = 9; + NO_VALID_SKILL = 10; + } + + ElfSkillLevelUpRsp.Retcode retcode = 1; + ElfSkill elf_skill = 2; +} + +// CmdID: 2125 +message ElfTakeCompensationReq { +} + +// CmdID: 2126 +message ElfTakeCompensationRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKE = 2; + } + + ElfTakeCompensationRsp.Retcode retcode = 1; + repeated RewardItemData item_list = 2; +} + +enum CmdTypeElf { + CMD_TYPE_ELF_NONE = 0; + CMD_GET_ELF_DATA_REQ = 2100; + CMD_GET_ELF_DATA_RSP = 2101; + CMD_SYNC_ELF_DATA_NOTIFY = 2102; + CMD_SYNC_ELF_FRAGMENT_NOTIFY = 2103; + CMD_ELF_STAR_UP_REQ = 2105; + CMD_ELF_STAR_UP_RSP = 2106; + CMD_ADD_ELF_EXP_BY_MATERIAL_REQ = 2107; + CMD_ADD_ELF_EXP_BY_MATERIAL_RSP = 2108; + CMD_ELF_FRAGMENT_TRANSFORM_REQ = 2121; + CMD_ELF_FRAGMENT_TRANSFORM_RSP = 2122; + CMD_ELF_SKILL_LEVEL_UP_REQ = 2123; + CMD_ELF_SKILL_LEVEL_UP_RSP = 2124; + CMD_ELF_TAKE_COMPENSATION_REQ = 2125; + CMD_ELF_TAKE_COMPENSATION_RSP = 2126; +} + +enum ElfType { + ELF_TYPE_NONE = 0; + ELF_TYPE_ELF = 1; + ELF_TYPE_ASTRA_MATE = 2; + ELF_TYPE_ASTRA_MATE_HERO = 3; +} + +enum ElfSkillSystemType { + ELF_SKILL_SYSTEM_TYPE_NONE = 0; + ELF_SKILL_SYSTEM_TYPE_ELF_SKILL = 1; + ELF_SKILL_SYSTEM_TYPE_ASTRA_SKILL = 2; +} + +// CmdID: 3406 +message GetLastEndlessRewardDataReq { +} + +// CmdID: 3407 +message GetLastEndlessRewardDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_JOIN = 2; + } + + GetLastEndlessRewardDataRsp.Retcode retcode = 1; + uint32 begin_time = 2; + uint32 group_level = 3; + uint32 rank = 4; + uint32 progress_or_score = 5; + EndlessRewardType reward_type = 6; + uint32 reward_id = 7; + repeated RewardData reward_list = 8; + uint32 cur_group_level = 9; + uint32 type = 10; +} + +// CmdID: 3417 +message TakeEndlessBaseRewardReq { + EndlessType type = 1; +} + +// CmdID: 3418 +message TakeEndlessBaseRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_REWARD = 2; + NOT_JOIN = 3; + } + + TakeEndlessBaseRewardRsp.Retcode retcode = 1; + uint32 reward_progress = 2; + repeated RewardData reward_list = 3; + repeated uint32 reward_id_list = 4; + EndlessType type = 5; +} + +// CmdID: 3419 +message GetOpenworldEndlessDataReq { + uint32 level = 1; + EndlessType type = 2; + bool is_finish_front = 3; +} + +message OpenworldEndlessMonsterGroup { + uint32 group_id = 1; + uint32 progress = 2; + uint32 old_progress = 3; +} + +message QuantumEndless { + uint32 cur_monster_group = 1; + uint32 monster_progress = 2; + uint32 finish_monster_num = 3; +} + +message GreedyEndless { + bool is_need_enroll = 1; + uint32 floor_config_id = 2; + uint32 reward_config_id = 3; + uint32 cur_floor = 4; + uint32 max_finish_floor = 5; + repeated uint32 finish_challenge_id_list = 6; +} + +// CmdID: 3420 +message GetOpenworldEndlessDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LEVEL_LACK = 2; + NO_ENDLESS = 3; + URGENCY_STOP = 4; + ULTRA_ENDLESS = 5; + FEATURE_CLOSED = 6; + } + + GetOpenworldEndlessDataRsp.Retcode retcode = 1; + uint32 group_id = 3; + uint32 group_level = 4; + uint32 begin_time = 5; + uint32 end_time = 6; + uint32 close_time = 7; + repeated OpenworldEndlessPlayer endless_data_list = 8; + repeated PlayerFriendBriefData brief_data_list = 9; + uint32 random_seed = 10; + repeated OpenworldEndlessItem item_list = 11; + repeated uint32 finish_monster_group_list = 12; + uint32 battle_config_id = 13; + repeated OpenworldEndlessItem effect_item_list = 14; + repeated OpenworldEndlessItem trap_add_item_list = 15; + uint32 boss_extra_score = 16; + uint32 is_just_join = 17; + uint32 cur_top_group_level = 18; + uint32 top_group_player_num = 19; + uint32 top_group_promote_unlock_player_num = 20; + uint32 invasion_id = 21; + uint32 hard_level = 22; + repeated OpenworldEndlessWarInfo war_info_list = 23; + repeated uint32 event_sub_type_id_list = 24; + repeated uint32 trap_item_show_id_list = 25; + repeated OpenworldEndlessMonsterGroup monster_group_list = 26; + EndlessType type = 27; + QuantumEndless quantum_endless = 28; + GreedyEndless greedy_endless = 29; +} + +// CmdID: 3421 +message OpenworldEndlessItemUpdateNotify { + repeated OpenworldEndlessItem item_list = 1; +} + +message OpenworldInvasionItem { + uint32 invasion_id = 1; + repeated uint32 avatar_list = 2; + repeated uint32 buff_list = 3; +} + +// CmdID: 3422 +message UseOpenworldEndlessItemReq { + uint32 item_id = 1; + uint32 target_uid = 2; + OpenworldInvasionItem invasion = 3; + uint32 item_num = 4; +} + +// CmdID: 3423 +message UseOpenworldEndlessItemRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ITEM_LACK = 2; + INVASION_AVATAR_ERROR = 3; + TARGET_ERROR = 4; + TARGET_GROUP_ERROR = 5; + OUT_OF_RANGE = 6; + INVASION_FULL = 7; + INVASION_ID_ERROR = 8; + ENDLESS_STATUS_ERROR = 9; + NOT_JOIN = 10; + TRAP_FULL = 11; + } + + UseOpenworldEndlessItemRsp.Retcode retcode = 1; + uint32 new_invasion_id = 2; + uint32 item_id = 3; + uint32 battle_id = 4; + repeated OpenworldEndlessItem effect_item_list = 5; + uint32 old_invaison_id = 6; + uint32 target_id = 7; + uint32 invasion_buff_num = 8; +} + +// CmdID: 3424 +message FinishOpenworldEndlessMonsterGroupReq { + uint32 group_id = 1; + LineupBriefInfo lineup_info = 2; + uint32 extra_score = 3; + uint32 battle_id = 4; + uint32 cost_time = 5; + repeated StageCheatData cheat_data_list = 6; + uint32 stage_id = 7; + string transaction_str = 8; + EndlessType type = 9; + uint32 quantum_monster_progress = 10; + bool is_skip_level = 11; + uint32 final_boss_id = 12; +} + +// CmdID: 3425 +message FinishOpenworldEndlessMonsterGroupRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + FinishOpenworldEndlessMonsterGroupRsp.Retcode retcode = 1; + repeated uint32 finish_monster_group_list = 2; + uint32 group_id = 3; + repeated OpenworldEndlessItem clear_item_list = 4; + uint32 score = 5; + uint32 battle_id = 6; + uint32 old_score = 7; + bool is_boss = 8; + string transaction_str = 9; + repeated OpenworldEndlessMonsterGroup monster_group_list = 10; + uint32 group_level = 11; + LineupBriefInfo lineup_info = 12; + EndlessType type = 13; + QuantumEndless quantum_endless = 14; + bool is_skip_level = 15; + uint32 final_boss_id = 16; + LineupBriefInfo max_score_lineup_info = 17; +} + +message OpenworldEndlessTrap { + uint32 item_id = 1; + uint32 battle_id = 2; + uint32 unique_id = 3; + uint32 set_uid = 4; +} + +message OpenworldEndlessBattle { + uint32 battle_id = 1; + repeated OpenworldEndlessTrap trap_list = 2; + uint32 scene_gear = 3; +} + +// CmdID: 3426 +message GetOpenworldEndlessStageInnerDataReq { + uint32 area_id = 1; +} + +// CmdID: 3427 +message GetOpenworldEndlessStageInnerDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetOpenworldEndlessStageInnerDataRsp.Retcode retcode = 1; + repeated OpenworldEndlessBattle battle_list = 2; + repeated OpenworldEndlessItem effect_item_list = 3; +} + +// CmdID: 3428 +message TriggerOpenworldEndlessTrapReq { + uint32 unique_id = 1; + uint32 item_id = 2; +} + +// CmdID: 3429 +message TriggerOpenworldEndlessTrapRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_JOIN = 2; + } + + TriggerOpenworldEndlessTrapRsp.Retcode retcode = 1; +} + +// CmdID: 3430 +message FinishOpenworldEndlessInvasionMonsterReq { + uint32 id = 1; + uint32 battle_id = 2; + string transaction_str = 3; +} + +// CmdID: 3431 +message FinishOpenworldEndlessInvasionMonsterRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ENDLESS_STATUS_ERROR = 2; + NOT_JOIN = 3; + NO_INVASION = 4; + } + + FinishOpenworldEndlessInvasionMonsterRsp.Retcode retcode = 1; + uint32 sub_score = 2; + uint32 id = 3; + repeated OpenworldEndlessItem clear_item_list = 4; + uint32 score = 5; + uint32 battle_id = 6; + string transaction_str = 7; +} + +// CmdID: 3432 +message GetEndlessStatusReq { + uint32 level = 1; + bool is_finish_front = 2; +} + +message EndlessStatus { + EndlessType endless_type = 1; + uint32 begin_time = 2; + uint32 end_time = 3; + uint32 close_time = 4; + uint32 sin_type = 5; + uint32 progress_or_score = 6; + uint32 group_level = 7; + LineupBriefInfo last_lineup_info = 8; + bool can_join_in = 9; + uint32 pre_general_activity_id = 10; + repeated uint32 replace_endless_group_list = 11; + LineupBriefInfo max_score_lineup_info = 12; + uint32 greedy_max_finish_floor = 13; +} + +// CmdID: 3433 +message GetEndlessStatusRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetEndlessStatusRsp.Retcode retcode = 1; + EndlessStatus cur_status = 2; + repeated EndlessStatus next_status_list = 3; + uint32 selected_endless_type = 4; +} + +message OpenworldEndlessReprotInvasion { + uint32 id = 1; + uint32 battle_id = 2; +} + +message OpenworldEndlessReprotBattle { + uint32 battle_id = 1; + uint32 scene_gear = 2; +} + +// CmdID: 3434 +message ReportOpenworldEndlessDataReq { + OpenworldEndlessDataType type = 1; + OpenworldEndlessReprotInvasion invasion = 2; + OpenworldEndlessReprotBattle battle = 3; +} + +// CmdID: 3435 +message ReportOpenworldEndlessDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ReportOpenworldEndlessDataRsp.Retcode retcode = 1; +} + +// CmdID: 3438 +message OpenworldEndlessBattleBeginReq { + uint32 battle_id = 1; + uint32 group_level = 2; + uint32 monster_group_id = 3; + uint32 layer_number = 4; + string transaction_str = 5; + EndlessType type = 6; +} + +// CmdID: 3439 +message OpenworldEndlessBattleBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + OpenworldEndlessBattleBeginRsp.Retcode retcode = 1; +} + +message QuantumEndlessBattleWave { + uint32 wave_id = 1; + StageEndStatus end_status = 2; + uint32 cost_time = 3; +} + +message QuantumEndlessBattleAoe { + uint32 aoe_num = 1; + uint32 evade_num = 2; +} + +// CmdID: 3440 +message OpenworldEndlessBattleEndReq { + uint32 battle_id = 1; + uint32 group_level = 2; + uint32 invasion_id = 3; + uint32 invasion_buff_num = 4; + uint32 cost_time = 5; + StageEndStatus end_status = 6; + repeated StageInnerAvatarData avatar_list = 7; + uint32 monster_group_id = 8; + uint32 environment_id = 9; + uint32 layer_number = 10; + string transaction_str = 11; + string monster_str = 12; + repeated StageInnerElfData elf_list = 13; + EndlessType type = 14; + string quantum_string = 15; + string wave_string = 16; + string aoe_string = 17; +} + +// CmdID: 3441 +message OpenworldEndlessBattleEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + OpenworldEndlessBattleEndRsp.Retcode retcode = 1; +} + +message OpenworldEndlessWarInfo { + enum Type { + NONE = 0; + SET_TRAP = 1; + TRIGGER_TRAP = 2; + SCENE_GEAR = 3; + INVASION = 4; + INVASION_SUB_SCORE = 5; + FINISH_INVASION = 6; + } + + uint32 uid = 1; + OpenworldEndlessWarInfo.Type type = 2; + uint32 item_id = 3; + uint32 battle_id = 4; + uint32 target_id = 5; + uint32 from_who = 6; + uint32 invasion_id = 7; + uint32 score = 8; + uint32 scene_gear = 9; + uint32 time = 10; +} + +// CmdID: 3442 +message OpenworldEndlessWarInfoNotify { + OpenworldEndlessWarInfo war_info = 1; +} + +// CmdID: 3443 +message GetOpenworldEndlessPlayerWarInfoReq { + uint32 target_uid = 1; +} + +// CmdID: 3444 +message GetOpenworldEndlessPlayerWarInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetOpenworldEndlessPlayerWarInfoRsp.Retcode retcode = 1; + uint32 target_uid = 2; + repeated OpenworldEndlessWarInfo war_info_list = 3; +} + +// CmdID: 3445 +message OpenworldEndlessPlayerUpdateNotify { + OpenworldEndlessPlayer player_data = 1; + PlayerFriendBriefData brief_data = 2; + EndlessType type = 3; +} + +// CmdID: 3446 +message GetOpenworldEndlessTopGroupReq { + EndlessType type = 9; +} + +// CmdID: 3447 +message GetOpenworldEndlessTopGroupRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TOP_GROUP_NOT_OPEN = 2; + } + + GetOpenworldEndlessTopGroupRsp.Retcode retcode = 1; + repeated OpenworldEndlessPlayer endless_data_list = 2; + repeated PlayerFriendBriefData brief_data_list = 3; + repeated OpenworldEndlessWarInfo war_info_list = 4; + uint32 hard_level = 5; + EndlessType type = 6; +} + +// CmdID: 3448 +message SetOpenworldEndlessMonsterGroupProgressReq { + uint32 group_id = 1; + uint32 progress = 2; + EndlessType type = 3; +} + +// CmdID: 3449 +message SetOpenworldEndlessMonsterGroupProgressRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + GROUP_ERROR = 2; + PROGRESS_ERROR = 3; + HAS_FINISHED = 4; + } + + SetOpenworldEndlessMonsterGroupProgressRsp.Retcode retcode = 1; + repeated OpenworldEndlessMonsterGroup monster_group_list = 2; + EndlessType type = 3; +} + +// CmdID: 3450 +message OpenworldEndlessChangeAvatarReq { + repeated uint32 avatar_id_list = 1; +} + +// CmdID: 3451 +message OpenworldEndlessChangeAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_ERROR = 2; + STAGE_ERROR = 3; + } + + OpenworldEndlessChangeAvatarRsp.Retcode retcode = 1; +} + +// CmdID: 3452 +message EndlessInSettleNotify { +} + +// CmdID: 3453 +message GreedyEndlessEnrollReq { +} + +// CmdID: 3454 +message GreedyEndlessEnrollRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ALREADY_ENROLL = 2; + } + + GreedyEndlessEnrollRsp.Retcode retcode = 1; + uint32 new_group_id = 2; +} + +// CmdID: 3455 +message GreedyEndlessReportFloorEndReq { + uint32 floor = 1; + repeated uint32 finish_challenge_id_list = 3; + uint32 score = 4; + uint32 extra_score = 5; + LineupBriefInfo lineup_info = 6; + uint32 stage_cost_time = 7; + StageEndStatus end_status = 8; + repeated StageCheatData cheat_data_list = 9; +} + +// CmdID: 3456 +message GreedyEndlessReportFloorEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSED = 2; + NOT_CUR_FLOOR = 3; + } + + GreedyEndlessReportFloorEndRsp.Retcode retcode = 1; + RewardData reward_data = 2; + uint32 next_floor = 3; + uint32 max_finish_floor = 4; + uint32 total_score = 5; + repeated uint32 finish_challenge_id_list = 6; + LineupBriefInfo max_score_lineup_info = 7; +} + +// CmdID: 3457 +message GreedyEndlessFloorRewardNotify { + RewardData reward_data = 1; + uint32 max_finish_floor = 2; + repeated uint32 finish_challenge_id_list = 6; +} + +// CmdID: 3458 +message GreedyEndlessGetRankReq { +} + +// CmdID: 3459 +message GreedyEndlessGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_RANK = 2; + } + + GreedyEndlessGetRankRsp.Retcode retcode = 1; + RankShowData rank_data = 2; +} + +// CmdID: 3460 +message GreedyEndlessTakeRankRewardReq { +} + +// CmdID: 3461 +message GreedyEndlessTakeRankRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKE = 2; + NO_REWARD = 3; + } + + GreedyEndlessTakeRankRewardRsp.Retcode retcode = 1; + uint32 group_level = 2; + uint32 rank_percent = 3; + RewardData reward_data = 4; +} + +// CmdID: 3462 +message EndlessSelectTypeReq { + EndlessType endless_type = 1; + uint32 level = 2; +} + +// CmdID: 3463 +message EndlessSelectTypeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + IN_ULTRA = 2; + NOT_IN_NEXT_SCHEDULE = 3; + LACK_LEVEL = 4; + } + + EndlessSelectTypeRsp.Retcode retcode = 1; + EndlessType endless_type = 2; +} + +// CmdID: 3464 +message GreedyEndlessReportFloorBeginReq { + uint32 floor = 1; +} + +// CmdID: 3465 +message GreedyEndlessReportFloorBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GreedyEndlessReportFloorBeginRsp.Retcode retcode = 1; +} + +enum CmdTypeEndless { + CMD_TYPE_ENDLESS_NONE = 0; + CMD_GET_LAST_ENDLESS_REWARD_DATA_REQ = 3406; + CMD_GET_LAST_ENDLESS_REWARD_DATA_RSP = 3407; + CMD_TAKE_ENDLESS_BASE_REWARD_REQ = 3417; + CMD_TAKE_ENDLESS_BASE_REWARD_RSP = 3418; + CMD_GET_OPENWORLD_ENDLESS_DATA_REQ = 3419; + CMD_GET_OPENWORLD_ENDLESS_DATA_RSP = 3420; + CMD_OPENWORLD_ENDLESS_ITEM_UPDATE_NOTIFY = 3421; + CMD_USE_OPENWORLD_ENDLESS_ITEM_REQ = 3422; + CMD_USE_OPENWORLD_ENDLESS_ITEM_RSP = 3423; + CMD_FINISH_OPENWORLD_ENDLESS_MONSTER_GROUP_REQ = 3424; + CMD_FINISH_OPENWORLD_ENDLESS_MONSTER_GROUP_RSP = 3425; + CMD_GET_OPENWORLD_ENDLESS_STAGE_INNER_DATA_REQ = 3426; + CMD_GET_OPENWORLD_ENDLESS_STAGE_INNER_DATA_RSP = 3427; + CMD_TRIGGER_OPENWORLD_ENDLESS_TRAP_REQ = 3428; + CMD_TRIGGER_OPENWORLD_ENDLESS_TRAP_RSP = 3429; + CMD_FINISH_OPENWORLD_ENDLESS_INVASION_MONSTER_REQ = 3430; + CMD_FINISH_OPENWORLD_ENDLESS_INVASION_MONSTER_RSP = 3431; + CMD_GET_ENDLESS_STATUS_REQ = 3432; + CMD_GET_ENDLESS_STATUS_RSP = 3433; + CMD_REPORT_OPENWORLD_ENDLESS_DATA_REQ = 3434; + CMD_REPORT_OPENWORLD_ENDLESS_DATA_RSP = 3435; + CMD_OPENWORLD_ENDLESS_BATTLE_BEGIN_REQ = 3438; + CMD_OPENWORLD_ENDLESS_BATTLE_BEGIN_RSP = 3439; + CMD_OPENWORLD_ENDLESS_BATTLE_END_REQ = 3440; + CMD_OPENWORLD_ENDLESS_BATTLE_END_RSP = 3441; + CMD_OPENWORLD_ENDLESS_WAR_INFO_NOTIFY = 3442; + CMD_GET_OPENWORLD_ENDLESS_PLAYER_WAR_INFO_REQ = 3443; + CMD_GET_OPENWORLD_ENDLESS_PLAYER_WAR_INFO_RSP = 3444; + CMD_OPENWORLD_ENDLESS_PLAYER_UPDATE_NOTIFY = 3445; + CMD_GET_OPENWORLD_ENDLESS_TOP_GROUP_REQ = 3446; + CMD_GET_OPENWORLD_ENDLESS_TOP_GROUP_RSP = 3447; + CMD_SET_OPENWORLD_ENDLESS_MONSTER_GROUP_PROGRESS_REQ = 3448; + CMD_SET_OPENWORLD_ENDLESS_MONSTER_GROUP_PROGRESS_RSP = 3449; + CMD_OPENWORLD_ENDLESS_CHANGE_AVATAR_REQ = 3450; + CMD_OPENWORLD_ENDLESS_CHANGE_AVATAR_RSP = 3451; + CMD_ENDLESS_IN_SETTLE_NOTIFY = 3452; + CMD_GREEDY_ENDLESS_ENROLL_REQ = 3453; + CMD_GREEDY_ENDLESS_ENROLL_RSP = 3454; + CMD_GREEDY_ENDLESS_REPORT_FLOOR_END_REQ = 3455; + CMD_GREEDY_ENDLESS_REPORT_FLOOR_END_RSP = 3456; + CMD_GREEDY_ENDLESS_FLOOR_REWARD_NOTIFY = 3457; + CMD_GREEDY_ENDLESS_GET_RANK_REQ = 3458; + CMD_GREEDY_ENDLESS_GET_RANK_RSP = 3459; + CMD_GREEDY_ENDLESS_TAKE_RANK_REWARD_REQ = 3460; + CMD_GREEDY_ENDLESS_TAKE_RANK_REWARD_RSP = 3461; + CMD_ENDLESS_SELECT_TYPE_REQ = 3462; + CMD_ENDLESS_SELECT_TYPE_RSP = 3463; + CMD_GREEDY_ENDLESS_REPORT_FLOOR_BEGIN_REQ = 3464; + CMD_GREEDY_ENDLESS_REPORT_FLOOR_BEGIN_RSP = 3465; +} + +enum OpenworldEndlessItemType { + OPENWORLD_ENDLESS_ITEM_TYPE_NONE = 0; + OPENWORLD_ENDLESS_ITEM_INVASION = 1; + OPENWORLD_ENDLESS_ITEM_BUFF = 2; + OPENWORLD_ENDLESS_ITEM_TRAP = 3; + OPENWORLD_ENDLESS_ITEM_COUNTER = 4; + OPENWORLD_ENDLESS_ITEM_CONSUME = 5; + OPENWORLD_ENDLESS_ITEM_TRAP_BUFF = 6; +} + +enum OpenworldEndlessInvasionBuffConditionType { + OPENWORLD_ENDLESS_INVASION_BUFF_CONDITION_TYPE_NONE = 0; + INVASION_BUFF_CONDITION_TOTAL_LEVEL = 1; + INVASION_BUFF_CONDITION_NUM_LEVEL = 2; + INVASION_BUFF_CONDITION_NUM_LEVEL_ATTRIBUTE = 3; + INVASION_BUFF_CONDITION_NUM_LEVEL_ALL_ATTRIBUTE = 4; + INVASION_BUFF_CONDITION_NUM_CLASS = 5; + INVASION_BUFF_CONDITION_ID_STAR_LEVEL = 6; +} + +enum OpenworldEndlessDataType { + OPENWORLD_ENDLESS_DATA_TYPE_NONE = 0; + OPENWORLD_ENDLESS_DATA_TYPE_INVAISON = 1; + OPENWORLD_ENDLESS_DATA_TYPE_SCENE_GEAR = 2; +} + +enum GreedyEndlessFloorType { + GREEDY_ENDLESS_FLOOR_TYPE_NONE = 0; + GREEDY_ENDLESS_FLOOR_DEMOTE = 1; + GREEDY_ENDLESS_FLOOR_NORMAL = 2; + GREEDY_ENDLESS_FLOOR_PROMOTE = 3; +} + +// CmdID: 3650 +message GetEquipmentForgeDataReq { +} + +message EquipmentForge { + uint32 forge_id = 1; + uint32 times = 2; +} + +// CmdID: 3651 +message GetEquipmentForgeDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetEquipmentForgeDataRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + repeated EquipmentForge has_forge_list = 3; + repeated uint32 forge_list = 4; +} + +// CmdID: 3652 +message ForgeEquipmentReq { + uint32 forge_id = 1; + EquipmentItemList consume_item_list = 2; + uint32 keep_rune_equip_unique_id = 4; + EquipmentItemList keep_rune_cost_item_list = 5; +} + +// CmdID: 3653 +message ForgeEquipmentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LEVEL_LIMIT = 2; + NO_TIMES = 3; + CONSUME_ITEM_NOT_EXIST = 4; + CONSUME_ITEM_IN_USE = 5; + CONSUME_ITEM_REPEAT = 6; + CONSUME_ITEM_PROTECTED = 7; + COST_GACHA_TICKET = 8; + COST_SENIOR_EQUIP_FROM_NEW_DEVICE = 9; + COST_SENIOR_EQUIP_CANCEL_PROTECT_TOO_SOON = 10; + CONSUME_ITEM_GRAND_KEY = 11; + CONSUME_ITEM_IN_FACILITY = 12; + CURRENCY_LACK = 13; + CONSUME_ITEM_MATCHING_REDUNDANT = 14; + CONSUME_ITEM_MATCHING_LACK = 15; + CONSUME_WEAPON_LOCKED = 16; + QUANTUM_WEAPON_NUM_LIMIT = 17; + QUANTUM_FORGE_CLOSED = 18; + WAIT_SELECTED_RUNE = 19; + NO_RUNE = 20; + CONSUME_ITEM_PROTECTED_BY_SECURITY_PASSWORD = 21; + FEATURE_CLOSED = 22; + } + + ForgeEquipmentRsp.Retcode retcode = 1; + uint32 forge_id = 2; + repeated Material return_material_list = 3; +} + +// CmdID: 3654 +message ExtractEquipmentReq { + EquipmentType type = 1; + uint32 unique_id = 2; + uint32 capsule_id = 3; +} + +// CmdID: 3655 +message ExtractEquipmentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + JUST_SUPPORT_WEAPON = 2; + CONSUME_ITEM_NOT_EXIST = 3; + CONSUME_ITEM_IN_USE = 4; + CONSUME_ITEM_PROTECTED = 5; + COST_SENIOR_EQUIP_FROM_NEW_DEVICE = 6; + COST_SENIOR_EQUIP_CANCEL_PROTECT_TOO_SOON = 7; + NOT_CULTIVATED = 8; + ACTIVITY_NOT_OPEN = 9; + EQUIP_NOT_OPEN = 10; + MATERIAL_NOT_FITTED = 11; + MATERIAL_LACK = 12; + CONSUME_ITEM_IN_FACILITY = 13; + CONSUME_ITEM_GRAND_KEY = 14; + CONSUME_ITEM_REPEAT = 15; + COST_GACHA_TICKET = 16; + CONSUME_ITEM_PROTECTED_BY_SECURITY_PASSWORD = 17; + } + + ExtractEquipmentRsp.Retcode retcode = 1; + uint32 unique_id = 2; + repeated Material material_list = 3; +} + +// CmdID: 3657 +message ReforgeEquipmentReq { + EquipmentType type = 1; + uint32 unique_id = 2; + uint32 target_equip_id = 3; +} + +// CmdID: 3658 +message ReforgeEquipmentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + JUST_SUPPORT_WEAPON = 2; + CONSUME_ITEM_NOT_EXIST = 3; + CONSUME_ITEM_IN_USE = 4; + CONSUME_ITEM_PROTECTED = 5; + COST_SENIOR_EQUIP_FROM_NEW_DEVICE = 6; + COST_SENIOR_EQUIP_CANCEL_PROTECT_TOO_SOON = 7; + EQUIPMENT_NOT_EXTRACTED = 8; + ACTIVITY_NOT_OPEN = 9; + EQUIPMENT_NOT_OPEN = 10; + TIMES_LACK = 11; + CONSUME_ITEM_IN_FACILITY = 12; + TARGET_NOT_FITTED = 13; + CONSUME_ITEM_GRAND_KEY = 14; + CONSUME_ITEM_REPEAT = 15; + COST_GACHA_TICKET = 16; + CONSUME_ITEM_PROTECTED_BY_SECURITY_PASSWORD = 17; + } + + ReforgeEquipmentRsp.Retcode retcode = 1; + uint32 unique_id = 2; + uint32 remain_reforge_times = 3; +} + +// CmdID: 3659 +message GetExtractReforgeActivityReq { +} + +message ExtractEquipmentActivity { + message OpenExtractWeapon { + uint32 quality = 1; + uint32 base_type = 2; + } + + repeated ExtractEquipmentActivity.OpenExtractWeapon extract_weapon_list = 4; + repeated uint32 mainid_black_list = 5; + bool is_reforge = 6; + repeated uint32 reforge_main_id_list = 7; + uint32 reforge_times = 8; + uint32 powerup_material_ratio = 10; + uint32 reforge_init_level = 11; + uint32 remain_reforge_times = 12; +} + +message BackEquipmentActivity { + repeated uint32 mainid_list = 1; + uint32 remain_back_times = 2; +} + +// CmdID: 3660 +message GetExtractReforgeActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetExtractReforgeActivityRsp.Retcode retcode = 1; + uint32 begin_time = 2; + uint32 end_time = 3; + ExtractEquipmentActivity extract_equipment_activity = 4; + BackEquipmentActivity back_equipment_activity = 5; +} + +// CmdID: 3661 +message GetEquipmentBackReq { +} + +message EquipmentForgeConsume { + message ConsumeEquip { + uint32 id = 1; + uint32 level = 2; + uint32 exp = 3; + } + + uint32 unique_id = 1; + repeated EquipmentForgeConsume.ConsumeEquip equip_list = 2; + repeated Material material_list = 3; +} + +// CmdID: 3662 +message GetEquipmentBackRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetEquipmentBackRsp.Retcode retcode = 1; + repeated EquipmentForgeConsume consume_equip_list = 2; +} + +// CmdID: 3663 +message BackEquipmentReq { + uint32 unique_id = 1; +} + +// CmdID: 3664 +message BackEquipmentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + CONSUME_ITEM_NOT_EXIST = 3; + CONSUME_ITEM_IN_USE = 4; + CONSUME_ITEM_PROTECTED = 5; + COST_SENIOR_EQUIP_FROM_NEW_DEVICE = 6; + COST_SENIOR_EQUIP_CANCEL_PROTECT_TOO_SOON = 7; + EQUIPMENT_NOT_OPEN = 8; + TIMES_LACK = 9; + CONSUME_ITEM_IN_FACILITY = 10; + CONSUME_ITEM_GRAND_KEY = 11; + CONSUME_ITEM_REPEAT = 12; + COST_GACHA_TICKET = 13; + CONSUME_ITEM_PROTECTED_BY_SECURITY_PASSWORD = 14; + } + + BackEquipmentRsp.Retcode retcode = 1; + repeated uint32 unique_id_list = 2; + repeated Material material_list = 3; + uint32 remain_back_times = 4; +} + +enum CmdTypeEquipforge { + CMD_TYPE_EQUIPFORGE_NONE = 0; + CMD_GET_EQUIPMENT_FORGE_DATA_REQ = 3650; + CMD_GET_EQUIPMENT_FORGE_DATA_RSP = 3651; + CMD_FORGE_EQUIPMENT_REQ = 3652; + CMD_FORGE_EQUIPMENT_RSP = 3653; + CMD_EXTRACT_EQUIPMENT_REQ = 3654; + CMD_EXTRACT_EQUIPMENT_RSP = 3655; + CMD_REFORGE_EQUIPMENT_REQ = 3657; + CMD_REFORGE_EQUIPMENT_RSP = 3658; + CMD_GET_EXTRACT_REFORGE_ACTIVITY_REQ = 3659; + CMD_GET_EXTRACT_REFORGE_ACTIVITY_RSP = 3660; + CMD_GET_EQUIPMENT_BACK_REQ = 3661; + CMD_GET_EQUIPMENT_BACK_RSP = 3662; + CMD_BACK_EQUIPMENT_REQ = 3663; + CMD_BACK_EQUIPMENT_RSP = 3664; +} + +enum EquipmentForgeType { + EQUIPMENT_FORGE_TYPE_NONE = 0; + EQUIPMENT_FORGE_TIMES = 1; + EQUIPMENT_FORGE_PACKAGE_NUM = 2; +} + +enum EquipmentForgeRefreshType { + EQUIPMENT_FORGE_REFRESH_NONE = 0; + EQUIPMENT_FORGE_REFRESH_SCHEDULE = 1; + EQUIPMENT_FORGE_REFRESH_DAILY = 2; +} + +message GachaItem { + uint32 item_id = 1; + uint32 level = 2; + uint32 num = 3; + uint32 split_fragment_num = 4; + bool is_rare_drop = 5; + uint32 gift_item_id = 6; + uint32 gift_level = 7; + uint32 gift_num = 8; + repeated GenericItemNum transfer_item_list = 9; + bool is_client_display_transfer = 10; +} + +message GachaSortItem { + uint32 item_id = 1; + uint32 level = 2; + uint32 num = 3; +} + +message GachaFreeInfo { + GachaFreeType free_type = 1; + uint32 free_times = 2; + uint32 total_free_times = 3; + uint32 next_auto_refresh_time = 4; +} + +message GachaDisplayCommonData { + string title_image = 1; + string supply_image = 2; + string title = 3; + string content = 4; + repeated uint32 up_avatar_list = 5; + repeated WeaponDetailData up_weapon_list = 6; + repeated StigmataDetailData up_stigmata_list = 7; + string rule = 8; + string content_detail = 9; + repeated uint32 up_item_list = 10; + string content_url = 11; + string btn_image_path = 12; + repeated GachaSortItem sort_item_list = 13; + bool is_enable_prompt = 14; + uint32 gacha_id = 15; + uint32 data_begin_time = 16; + uint32 data_end_time = 17; + repeated uint32 up_elf_list = 18; + string display_ext = 19; + uint32 free_gacha_times = 20; + repeated GachaFreeInfo free_info_list = 21; +} + +message GachaLog { + uint32 time = 1; + GachaItem item = 2; +} + +message WishWellData { + message Equip { + uint32 equip_id = 1; + uint32 equip_level = 2; + } + + uint32 left_times = 1; + uint32 set_id = 2; + uint32 material_id = 3; + uint32 material_num = 4; + uint32 equip_need_num = 5; + repeated WishWellData.Equip equip_list = 6; + uint32 max_wish_times = 7; +} + +message HcoinGachaData { + uint32 ticket_hcoin_cost = 2; + uint32 ticket_material_id = 3; + WishWellData wish_well_data = 7; + uint32 shining_type = 8; + uint32 gacha_panel_type = 9; + uint32 protect_type_id = 10; + uint32 protect_left_times = 11; + GachaProtectDisplayInfo protect_display_info = 12; + uint32 display_max_times = 13; +} + +message FriendsPointGachaData { + uint32 friends_point_cost = 2; +} + +message GachaExRewardInfo { + message ExReward { + uint32 need_gacha_times = 1; + uint32 reward_id = 2; + bool is_taken = 3; + } + + message ExRewardDisplayDetail { + uint32 need_gacha_times = 1; + uint32 item_id = 2; + uint32 item_num = 3; + bool is_taken = 4; + bool is_display_shining = 5; + } + + repeated GachaExRewardInfo.ExReward ex_reward_list = 15; + uint32 display_ex_reward_item = 16; + uint32 display_ex_reward_type = 17; + repeated GachaExRewardInfo.ExRewardDisplayDetail display_ex_reward_detail_list = 18; +} + +message ProtectEntry { + repeated DropItem possible_item_list = 1; + uint32 total_times = 2; + uint32 drop_times = 3; +} + +message ActivityGachaData { + uint32 ticket_hcoin_cost = 2; + uint32 ticket_material_id = 3; + uint32 cost_material_id = 4; + uint32 cost_material_num = 5; + uint32 baodi_times = 6; + GachaType gacha_type = 9; + uint32 gacha_times = 10; + repeated ProtectEntry display_protect_entry_list = 11; + bool is_protect_recycle = 12; + uint32 display_protect_times = 13; + uint32 no_protect_gacha_times = 14; + GachaExRewardInfo gacha_ex_reward_info = 15; + SettingDict display_setting_dict = 16; + WishWellData wish_well_data = 17; +} + +message GachaProtectDisplayInfo { + enum ProtectDisplayType { + NO_DISPLAY = 0; + AVATAR_DISPLAY = 1; + EQUIP_DISPLAY = 2; + } + + GachaProtectDisplayInfo.ProtectDisplayType protect_display_type = 1; + uint32 display_key_avatar = 2; + repeated uint32 display_key_item_list = 3; + repeated uint32 droped_up_item_list = 4; + uint32 no_protect_gacha_times = 5; + uint32 display_key_elf_card_id = 6; +} + +message CustomGachaItemData { + uint32 id = 1; + uint32 total_num = 2; + uint32 gacha_num = 3; +} + +message CustomGachaData { + enum ProtectDisplayType { + NO_DISPLAY = 0; + AVATAR_DISPLAY = 1; + EQUIP_DISPLAY = 2; + } + + uint32 ticket_hcoin_cost = 2; + uint32 ticket_material_id = 3; + uint32 cost_material_id = 4; + uint32 cost_material_num = 5; + bool is_enable_baodi = 6; + GachaType gacha_type = 9; + uint32 total_gacha_times = 10; + uint32 gacha_times = 11; + repeated CustomGachaItemData item_list = 12; + uint32 display_max_times = 13; + uint32 no_protect_gacha_times = 14; + CustomGachaData.ProtectDisplayType protect_display_type = 15; + uint32 display_key_avatar = 16; + uint32 display_video_avatar = 17; + repeated uint32 droped_up_item_list = 18; + uint32 shining_type = 19; + uint32 gacha_panel_type = 20; + repeated uint32 display_key_item_list = 21; + string display_extra_para = 22; + uint32 ex_id = 23; + uint32 ex_energy = 24; + uint32 ex_gacha_num = 25; + GachaExRewardInfo gacha_ex_reward_info = 26; + GachaProtectDisplayInfo protect_display_info = 27; +} + +message BoxGachaItemData { + uint32 id = 1; + uint32 total_num = 2; + uint32 gacha_num = 3; + uint32 item_num_per_drop = 4; +} + +message BoxGachaDisplayData { + repeated BoxGachaItemData item_list = 1; + repeated GachaItem show_list = 2; + uint32 pre_gacha_id = 3; + string web_link = 4; + uint32 link_type = 5; + string link_para = 6; + string link_para_str = 7; +} + +message BoxGachaData { + BoxGachaDisplayData box_gacha_data = 2; + uint32 ticket_hcoin_cost = 3; + uint32 ticket_material_id = 4; + uint32 cost_material_id = 5; + uint32 cost_material_num = 6; + bool is_enable_baodi = 7; + uint32 max_gacha_times = 10; + uint32 gacha_times = 11; +} + +message UniqueGachaSelectItemPool { + repeated uint32 select_item_list = 1; +} + +message UniqueGachaData { + uint32 ticket_hcoin_cost = 2; + uint32 ticket_material_id = 3; + uint32 left_gacha_times = 7; + UniqueGachaSelectItemPool select_item_pool = 8; +} + +message PrayGachaItemData { + uint32 id = 1; + uint32 total_num = 2; + uint32 gacha_num = 3; +} + +message PrayGachaData { + uint32 ticket_hcoin_cost = 2; + uint32 ticket_material_id = 3; + uint32 cost_material_id = 4; + uint32 cost_material_num = 5; + uint32 max_gacha_times = 8; + uint32 gacha_times = 9; + bool is_finished = 10; + repeated GachaItem protect_item_list = 11; + repeated PrayGachaItemData pool_item_list = 12; + uint32 gacha_id = 13; + uint32 pray_value_per_gacha = 14; +} + +message ControllableBoxGachaSelectableGroup { + uint32 group_id = 1; + uint32 select_drop_id = 2; + repeated uint32 drop_id_list = 3; +} + +message ControllableBoxGachaItem { + uint32 drop_id = 1; + uint32 item_id = 2; + uint32 item_level = 3; + uint32 item_num = 4; + bool is_shining = 5; + bool is_core = 6; + SettingDict display_setting_dict = 9; +} + +message ControllableBoxGachaItemData { + repeated ControllableBoxGachaItem item_list = 1; + repeated uint32 has_got_item_list = 2; + repeated ControllableBoxGachaSelectableGroup selecetable_group_list = 3; +} + +message ControllableBoxGachaData { + ControllableBoxGachaItemData show_gacha_data = 2; + uint32 ticket_hcoin_cost = 3; + uint32 ticket_material_id = 4; + repeated uint32 ticket_material_num_list = 5; + repeated uint32 hcoin_cost_list = 6; + SettingDict display_setting_dict = 9; +} + +message OptionalGachaItemData { + uint32 sub_gacha_id = 1; + string choose_image = 2; + bool is_recommend = 3; + GachaDisplayCommonData common_data = 4; +} + +message OptionalGachaData { + uint32 choosed_sub_gacha_id = 1; + repeated OptionalGachaItemData candidate_gacha_list = 2; + uint32 reset_left_times = 3; + string title_image = 4; + uint32 display_max_times = 5; + uint32 no_protect_gacha_times = 6; + repeated ProtectEntry protect_item_list = 8; + bool is_protect_display = 9; + uint32 ticket_hcoin_cost = 10; + uint32 ticket_material_id = 11; + WishWellData wish_well_data = 12; + uint32 ex_id = 13; + uint32 ex_energy = 14; + uint32 ex_gacha_num = 15; + GachaProtectDisplayInfo protect_display_info = 16; +} + +message AdventureGachaData { + uint32 ticket_hcoin_cost = 1; + uint32 ticket_material_id = 2; + bool is_enable_baodi = 3; + uint32 gacha_times = 4; + bool is_protect_display = 5; + uint32 display_max_times = 6; + uint32 no_protect_gacha_times = 7; + bool is_got_s_avatar_protect = 8; + double new_s_avatar_prob = 9; + uint32 next_s_avatar_assure_gacha_times = 10; + uint32 next_s_avatar_assure_new_need_times = 11; + uint32 free_gacha_times = 12; +} + +message AdventureEquipGachaData { + uint32 ticket_hcoin_cost = 1; + uint32 ticket_material_id = 2; + bool is_enable_baodi = 3; + uint32 gacha_times = 4; + uint32 new_protect_equip_prob = 5; + uint32 next_assure_new_equip_need_times = 6; +} + +message SpEquipGachaData { + uint32 ticket_hcoin_cost = 2; + uint32 ticket_material_id = 3; + uint32 cost_material_id = 4; + uint32 cost_material_num = 5; + uint32 baodi_times = 6; + GachaType gacha_type = 9; + uint32 gacha_times = 10; + repeated ProtectEntry display_protect_entry_list = 11; + bool is_protect_recycle = 12; + uint32 display_protect_times = 13; + uint32 no_protect_gacha_times = 14; + GachaExRewardInfo gacha_ex_reward_info = 15; + SettingDict display_setting_dict = 16; + WishWellData wish_well_data = 17; +} + +message SpecialCommonGachaData { + uint32 ticket_hcoin_cost = 2; + uint32 ticket_material_id = 3; + uint32 cost_material_id = 4; + uint32 cost_material_num = 5; + uint32 baodi_times = 6; + GachaType gacha_type = 9; + uint32 gacha_times = 10; + repeated ProtectEntry display_protect_entry_list = 11; + bool is_protect_recycle = 12; + uint32 display_protect_times = 13; + uint32 no_protect_gacha_times = 14; + GachaExRewardInfo gacha_ex_reward_info = 15; + SettingDict display_setting_dict = 16; + WishWellData wish_well_data = 17; + GachaProtectDisplayInfo protect_display_info = 18; +} + +message PjmsGachaData { + uint32 ticket_hcoin_cost = 1; + uint32 ticket_material_id = 2; + uint32 gacha_times = 3; + uint32 display_protect_times = 4; + uint32 no_protect_gacha_times = 5; + SettingDict display_setting_dict = 6; + GachaExRewardInfo gacha_ex_reward_info = 7; + GachaProtectDisplayInfo protect_display_info = 8; +} + +message GachaExFragment { + uint32 ex_id = 1; + uint32 ex_energy = 2; + uint32 ex_num = 3; + uint32 ex_energy_add = 4; + uint32 fragment_add = 5; + uint32 ex_energy_add_orig = 6; + uint32 ex_energy_add_bonus = 7; + uint32 avatar_id = 8; +} + +// CmdID: 4700 +message GachaReq { + GachaType type = 1; + uint32 num = 2; + bool is_use_hcoin = 3; + uint32 gacha_random = 4; + uint32 simulate_magic = 5; + bool is_use_free_gacha = 6; + uint32 free_gacha_ticket_id = 7; +} + +// CmdID: 4701 +message GachaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FRIENDS_POINT_LACK = 2; + TICKET_LACK = 3; + EQUIPMENT_FULL = 4; + GACHA_CLOSED = 5; + HCOIN_LACK = 6; + EQUIPMENT_MATERIAL_LIMIT = 7; + EQUIPMENT_FRAGMENT_LIMIT = 8; + MAX_TIMES_LIMIT = 9; + GACHA_FINISHED = 10; + USE_HCOIN_FORBID = 11; + REQUIRE_SELECT = 12; + NOT_NEWBIE = 13; + FEATURE_CLOSED = 14; + DAILY_TIMES_LIMIT = 15; + NOT_GOBACK = 16; + FREE_TYPE_MISMATCH = 17; + FREE_TICKET_NOT_HCOIN = 18; + FREE_TICKET_ID_MISMATCH = 19; + } + + GachaRsp.Retcode retcode = 1; + repeated GachaItem item_list = 2; + uint32 gacha_random = 4; + GetGachaDisplayRsp display = 5; + GachaExFragment ex_fragment = 6; + bool is_use_free_gacha = 7; + GachaType type = 8; +} + +// CmdID: 4702 +message GetGachaDisplayReq { + bool is_all = 1; + GachaType type = 2; +} + +message GachaDisplayInfo { + GachaType gacha_type = 1; + GachaDisplayCommonData common_data = 2; + HcoinGachaData hcoin_gacha_data = 3; + FriendsPointGachaData friends_point_gacha_data = 4; + ActivityGachaData activity_gacha_data = 5; + CustomGachaData custom_gacha_data = 6; + UniqueGachaData unique_gacha_data = 7; + BoxGachaData box_gacha_data = 8; + PrayGachaData pray_gacha_data = 9; + ControllableBoxGachaData controllable_box_gacha_data = 10; + OptionalGachaData optional_gacha_data = 11; + AdventureGachaData adventure_gacha_data = 12; + AdventureEquipGachaData adventure_equip_gacha_data = 13; + SpEquipGachaData sp_equip_gacha_data = 14; + SpecialCommonGachaData special_gacha_data = 15; + PjmsGachaData pjms_gacha_data = 16; +} + +message GachaTenDiscountInfo { + uint32 activity_id = 1; + uint32 begin_time = 2; + uint32 end_time = 3; + uint32 ticket_cost_num = 4; + bool is_used = 5; + repeated uint32 gacha_type_list = 6; +} + +// CmdID: 4703 +message GetGachaDisplayRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetGachaDisplayRsp.Retcode retcode = 1; + bool is_all = 2; + GachaType type = 3; + uint32 pray_gacha_id = 4; + uint32 gacha_random = 5; + repeated GachaDisplayInfo gacha_display_info_list = 6; + repeated GachaTenDiscountInfo gacha_ten_discount_info_list = 7; + repeated GachaDailyTimesLimit gacha_daily_times_limit_list = 8; +} + +// CmdID: 4704 +message BuyGachaTicketReq { + uint32 material_id = 1; + uint32 num = 2; +} + +// CmdID: 4705 +message BuyGachaTicketRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_ID_ERROR = 2; + HCOIN_LACK = 3; + EQUIPMENT_MATERIAL_LIMIT = 4; + } + + BuyGachaTicketRsp.Retcode retcode = 1; + uint32 material_id = 2; + uint32 num = 3; + uint32 hcoin_cost = 4; +} + +// CmdID: 4706 +message GetGachaLogReq { +} + +// CmdID: 4707 +message GetGachaLogRsp { + message GachaLogInfo { + GachaType gacha_type = 1; + repeated GachaLog log_list = 2; + } + + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetGachaLogRsp.Retcode retcode = 1; + repeated GetGachaLogRsp.GachaLogInfo log_info_list = 2; +} + +// CmdID: 4708 +message GetGachaProbReq { + uint32 gacha_type = 1; +} + +// CmdID: 4709 +message GetGachaProbRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetGachaProbRsp.Retcode retcode = 1; + uint32 gacha_type = 2; + repeated GachaTotalProb total_prob_list = 3; + repeated GachaDetailProb detail_prob_list = 4; + repeated GachaDetailProb baodi_prob_list = 5; +} + +message WishCostEquip { + uint32 cost_equip_id = 1; + uint32 cost_equip_num = 2; +} + +// CmdID: 4710 +message WishWellReq { + uint32 wish_id = 1; + repeated WishCostEquip cost_equip_list = 2; + GachaType gacha_type = 3; + bool is_force_set = 4; +} + +// CmdID: 4711 +message WishWellRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + EQUIP_NUM_ERROR = 2; + MATERIAL_NOT_ENOUGH = 3; + WISH_TIMES_LIMIT = 4; + DEVICE_ERROR = 5; + MATERIAL_ERROR = 6; + } + + WishWellRsp.Retcode retcode = 1; + uint32 wish_id = 2; + repeated RewardData reward_list = 3; + GachaType gacha_type = 4; +} + +// CmdID: 4712 +message BuyControllableBoxGachaTicketReq { + uint32 gacha_id = 1; +} + +// CmdID: 4713 +message BuyControllableBoxGachaTicketRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + GACHA_ID_ERROR = 2; + HCOIN_LACK = 3; + EQUIPMENT_MATERIAL_LIMIT = 4; + NOT_OPENT = 5; + NOT_LACK = 6; + GACHA_EMPTY = 7; + } + + BuyControllableBoxGachaTicketRsp.Retcode retcode = 1; + uint32 material_id = 2; + uint32 num = 3; + uint32 hcoin_cost = 4; +} + +// CmdID: 4714 +message TakeGachaExRewardReq { + GachaType gacha_type = 1; + uint32 gacha_id = 2; + uint32 ex_reward_gacha_times = 3; +} + +// CmdID: 4715 +message TakeGachaExRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKEN = 2; + GACHA_TIMES_LACK = 3; + NO_REWARD = 4; + GACHA_ID_ERROR = 5; + } + + TakeGachaExRewardRsp.Retcode retcode = 1; + GachaType gacha_type = 2; + uint32 gacha_id = 3; + uint32 ex_reward_gacha_times = 4; + RewardData reward = 5; +} + +// CmdID: 4716 +message ChooseOptionalGachaReq { + GachaType gacha_type = 1; + uint32 sub_gacha_id = 2; +} + +// CmdID: 4717 +message ChooseOptionalGachaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ChooseOptionalGachaRsp.Retcode retcode = 1; + GachaType gacha_type = 2; + uint32 sub_gacha_id = 3; + GachaExFragment ex_fragment = 4; +} + +// CmdID: 4718 +message SelectControllableBoxGachaSelectableGroupItemReq { + uint32 gacha_id = 1; + uint32 group_id = 2; + uint32 select_item_id = 3; +} + +// CmdID: 4719 +message SelectControllableBoxGachaSelectableGroupItemRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + GACHA_ID_ERROR = 2; + GROUP_ID_ERROR = 3; + ITEM_ID_ERROR = 4; + FIRST_IS_TAKEN = 5; + } + + SelectControllableBoxGachaSelectableGroupItemRsp.Retcode retcode = 1; + uint32 gacha_id = 2; + ControllableBoxGachaSelectableGroup group_info = 3; +} + +// CmdID: 4722 +message UniqueGachaUpdateItemPoolReq { + repeated uint32 select_item_list = 1; +} + +// CmdID: 4723 +message UniqueGachaUpdateItemPoolRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + UniqueGachaUpdateItemPoolRsp.Retcode retcode = 1; +} + +message GachaDailyTimesLimit { + GachaType type = 1; + uint32 group_daily_times = 2; + uint32 group_daily_limit_times = 3; + string group_limit_display_ext = 4; +} + +enum CmdTypeGacha { + CMD_TYPE_GACHA_NONE = 0; + CMD_GACHA_REQ = 4700; + CMD_GACHA_RSP = 4701; + CMD_GET_GACHA_DISPLAY_REQ = 4702; + CMD_GET_GACHA_DISPLAY_RSP = 4703; + CMD_BUY_GACHA_TICKET_REQ = 4704; + CMD_BUY_GACHA_TICKET_RSP = 4705; + CMD_GET_GACHA_LOG_REQ = 4706; + CMD_GET_GACHA_LOG_RSP = 4707; + CMD_GET_GACHA_PROB_REQ = 4708; + CMD_GET_GACHA_PROB_RSP = 4709; + CMD_WISH_WELL_REQ = 4710; + CMD_WISH_WELL_RSP = 4711; + CMD_BUY_CONTROLLABLE_BOX_GACHA_TICKET_REQ = 4712; + CMD_BUY_CONTROLLABLE_BOX_GACHA_TICKET_RSP = 4713; + CMD_TAKE_GACHA_EX_REWARD_REQ = 4714; + CMD_TAKE_GACHA_EX_REWARD_RSP = 4715; + CMD_CHOOSE_OPTIONAL_GACHA_REQ = 4716; + CMD_CHOOSE_OPTIONAL_GACHA_RSP = 4717; + CMD_SELECT_CONTROLLABLE_BOX_GACHA_SELECTABLE_GROUP_ITEM_REQ = 4718; + CMD_SELECT_CONTROLLABLE_BOX_GACHA_SELECTABLE_GROUP_ITEM_RSP = 4719; + CMD_UNIQUE_GACHA_UPDATE_ITEM_POOL_REQ = 4722; + CMD_UNIQUE_GACHA_UPDATE_ITEM_POOL_RSP = 4723; +} + +enum GachaUniqueType { + GACHA_UNIQUE_NONE = 0; + GACHA_UNIQUE_WEAPON = 1; + GACHA_UNIQUE_STIGMATA = 2; + GACHA_UNIQUE_EQUIP = 3; +} + +enum GachaProtectType { + GACHA_PROTECT_NONE = 0; + GACHA_PROTECT_UP = 1; + GACHA_PROTECT_NO_UP = 2; +} + +enum GachaAdventureConditionType { + GACHA_ADVENTURE_CONDITION_NONE = 0; + GACHA_ADVENTURE_CONDITION_CONDITION_ID = 1; + GACHA_ADVENTURE_CONDITION_ITEM_ID = 2; +} + +enum GachaFreeType { + GACHA_FREE_NONE = 0; + GACHA_FREE_ONE_PULL = 1; + GACHA_FREE_TEN_PULLS = 2; +} + +enum GachaExRewardDisplayType { + GACHA_EX_REWARD_DISPLAY_NONE = 0; + GACHA_EX_REWARD_DISPLAY_BRIEF = 1; + GACHA_EX_REWARD_DISPLAY_DETAIL = 2; + GACHA_EX_REWARD_DISPLAY_SHINING = 3; +} + +enum AdventureSubGroupType { + ADVENTURE_SUB_GROUP_NORMAL = 0; + ADVENTURE_SUB_GROUP_S_AVATAR = 1; + ADVENTURE_SUB_GROUP_A_AVATAR = 2; +} + +// CmdID: 4000 +message GeneralActivityScoreRewardNotify { + uint32 activity_id = 1; + uint32 id = 2; + repeated RewardData reward_list = 3; +} + +// CmdID: 4001 +message GeneralActivityGetScoreRewardInfoReq { + repeated uint32 activity_id_list = 1; +} + +message GeneralActivityScoreRewardInfo { + uint32 activity_id = 1; + uint32 cur_score = 2; + repeated uint32 score_reward_taken_list = 3; +} + +// CmdID: 4002 +message GeneralActivityGetScoreRewardInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GeneralActivityGetScoreRewardInfoRsp.Retcode retcode = 1; + repeated GeneralActivityScoreRewardInfo score_info_list = 2; +} + +// CmdID: 4003 +message GeneralActivityGetScheduleReq { +} + +message GeneralActivityScheduleInfo { + uint32 activity_id = 1; + uint32 show_time = 2; + uint32 begin_time = 3; + uint32 settle_time = 4; + uint32 end_time = 5; + uint32 begin_day_time = 6; + uint32 end_day_time = 7; + uint32 left_times = 8; + uint32 schedule_id = 9; +} + +// CmdID: 4004 +message GeneralActivityGetScheduleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GeneralActivityGetScheduleRsp.Retcode retcode = 1; + repeated GeneralActivityScheduleInfo schedule_list = 2; +} + +// CmdID: 4005 +message GeneralActivityGetMainInfoReq { + repeated uint32 activity_id_list = 1; +} + +message GeneralActivityBasicInfo { + uint32 activity_id = 1; + uint32 cur_score = 2; + repeated uint32 series_activity_id = 3; + repeated uint32 score_reward_taken_list = 4; + uint32 schedule_id = 5; +} + +message GeneralActivitySettleInfo { + uint32 activity_id = 1; + uint32 rank_type = 2; + uint32 rank = 3; + repeated RewardData reward_list = 4; +} + +message PushTowerActivityInfo { + uint32 enter_times = 1; + repeated uint32 stage_reward_taken_list = 2; + bool is_clear_reward_taken = 3; + uint32 grow_buff_level = 4; +} + +message GeneralActivityStageGroupScheduleInfo { + uint32 stage_group_id = 1; + uint32 begin_time = 2; + uint32 end_time = 3; +} + +message GeneralActivityStage { + uint32 enter_times = 1; + uint32 exchange_times = 2; + uint32 cur_score = 3; + repeated uint32 stage_reward_taken_list = 4; + uint32 bonus_score_times = 5; + repeated GeneralActivityStageGroupScheduleInfo stage_group_schedule_list = 6; + repeated uint32 stage_group_reward_taken_list = 7; +} + +message EndlessSingleModeScore { + uint32 floor = 1; + uint32 score = 2; +} + +message EndlessSingleModeMonsterScore { + uint32 monster_group_id = 1; + uint32 score = 2; +} + +message EndlessSingleModeItem { + uint32 item_id = 1; + uint32 item_num = 2; +} + +message EndlessSingleModeActivity { + uint32 cur_floor = 1; + repeated EndlessSingleModeScore floor_score_list = 2; + bool is_settled = 3; + uint32 reset_times = 4; + uint32 monster_random_id = 5; + uint32 activity_type = 6; + repeated EndlessSingleModeMonsterScore ow_monster_score_list = 7; + repeated EndlessSingleModeItem ow_item_list = 8; +} + +message CrisisModeActivity { + repeated GeneralActivityStageGroupScheduleInfo stage_group_schedule_list = 1; + repeated uint32 stage_reward_taken_list = 2; +} + +message ScheduledMapSiteActivity { + repeated GeneralActivityStageGroupScheduleInfo stage_group_schedule_list = 1; + uint32 enter_times = 2; +} + +message BossChallengeAvatar { + uint32 avatar_id = 1; + uint32 hp_percent = 2; + uint32 sp_percent = 3; +} + +message BossChallengeScDLCStatus { + uint32 sc_dlc_fever_score = 1; + uint32 sc_dlc_climax_score = 2; +} + +message BossChallengeStage { + uint32 stage_id = 1; + uint32 unlock_time = 2; + uint32 max_reward_idx = 3; + uint32 cur_floor = 4; + uint32 cur_stage_cost_time = 5; + uint32 min_stage_cost_time = 6; + repeated BossChallengeAvatar avatar_list = 7; + BossChallengeScDLCStatus sc_dlc_status = 8; +} + +message BossChallengeActivity { + repeated BossChallengeStage stage_list = 1; +} + +message FrontEndlessActivity { + message FloorScore { + uint32 floor = 1; + uint32 score = 2; + } + + uint32 cur_floor = 1; + repeated FrontEndlessActivity.FloorScore floor_score_list = 2; +} + +message GeneralActivity { + GeneralActivityBasicInfo general_basic_info = 1; + GeneralActivitySettleInfo settle_info = 2; + PushTowerActivityInfo push_tower_info = 3; + GeneralActivityStage activity_stage = 5; + EndlessSingleModeActivity endless_single = 7; + CrisisModeActivity crisis_mode = 11; + ScheduledMapSiteActivity scheduled_map_site = 12; + BossChallengeActivity boss_challenge = 13; + FrontEndlessActivity front_endless = 14; +} + +// CmdID: 4006 +message GeneralActivityGetMainInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GeneralActivityGetMainInfoRsp.Retcode retcode = 1; + repeated GeneralActivity activity_list = 2; +} + +// CmdID: 4007 +message GeneralActivityGetRankReq { + uint32 activity_id = 1; +} + +// CmdID: 4008 +message GeneralActivityGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GeneralActivityGetRankRsp.Retcode retcode = 1; + uint32 activity_id = 2; + RankShowData rank_data = 3; +} + +// CmdID: 4009 +message PushTowerActivityTakeStageRewardReq { + uint32 activity_id = 1; + uint32 stage_config_id = 2; +} + +// CmdID: 4010 +message PushTowerActivityTakeStageRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + PushTowerActivityTakeStageRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 stage_config_id = 3; + repeated RewardData reward_data_list = 4; +} + +// CmdID: 4011 +message PushTowerActivityTakeClearRewardReq { + uint32 activity_id = 1; +} + +// CmdID: 4012 +message PushTowerActivityTakeClearRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKE_CAMPAIGN_REWARD = 2; + } + + PushTowerActivityTakeClearRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated RewardData reward_data_list = 3; +} + +// CmdID: 4030 +message GeneralActivityStageExchangeEnterTimesReq { + uint32 activity_id = 1; +} + +// CmdID: 4031 +message GeneralActivityStageExchangeEnterTimesRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_LACK = 2; + RESET_TIMES_LACK = 3; + } + + GeneralActivityStageExchangeEnterTimesRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 enter_times = 3; + uint32 exchange_times = 4; +} + +// CmdID: 4032 +message GeneralActivityStageTakeStageRewardReq { + uint32 activity_id = 1; + uint32 stage_id = 2; +} + +// CmdID: 4033 +message GeneralActivityStageTakeStageRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GeneralActivityStageTakeStageRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 stage_id = 3; + repeated RewardData reward_data_list = 4; +} + +// CmdID: 4034 +message TakeGeneralActivityScoreRewardReq { + uint32 activity_id = 1; + uint32 score_id = 2; +} + +// CmdID: 4035 +message TakeGeneralActivityScoreRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKEN = 2; + NOT_REACH = 3; + NOT_OPEN = 4; + } + + TakeGeneralActivityScoreRewardRsp.Retcode retcode = 1; + RewardData reward_data = 2; + uint32 activity_id = 3; + uint32 score_id = 4; +} + +// CmdID: 4036 +message GeneralActivityStageTakeStageGroupRewardReq { + uint32 activity_id = 1; + uint32 activity_stage_group_id = 2; +} + +// CmdID: 4037 +message GeneralActivityStageTakeStageGroupRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKEN = 2; + NOT_REACH = 3; + } + + GeneralActivityStageTakeStageGroupRewardRsp.Retcode retcode = 1; + RewardData reward_data = 2; + uint32 activity_id = 3; + uint32 activity_stage_group_id = 4; +} + +// CmdID: 4038 +message EndlessSingleModeActivityFinishFloorReq { + uint32 stage_id = 1; + uint32 floor = 2; + uint32 score = 3; + uint32 cost_time = 4; + repeated StageCheatData cheat_data_list = 5; +} + +// CmdID: 4039 +message EndlessSingleModeActivityFinishFloorRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_CUR_FLOOR = 2; + } + + EndlessSingleModeActivityFinishFloorRsp.Retcode retcode = 1; +} + +// CmdID: 4040 +message EndlessSingleModeActivityResetReq { + uint32 activity_id = 1; +} + +// CmdID: 4041 +message EndlessSingleModeActivityResetRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_LACK = 2; + STAMINA_LACK = 3; + } + + EndlessSingleModeActivityResetRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 4042 +message EndlessSingleModeActivityBattleBeginReq { + uint32 activity_id = 1; + uint32 map_id = 2; + uint32 area_id = 3; + uint32 battle_id = 4; + uint32 group_level = 5; + uint32 monster_group_id = 6; + uint32 layer_number = 7; +} + +// CmdID: 4043 +message EndlessSingleModeActivityBattleBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + EndlessSingleModeActivityBattleBeginRsp.Retcode retcode = 1; +} + +// CmdID: 4044 +message EndlessSingleModeActivityBattleEndReq { + uint32 activity_id = 1; + uint32 map_id = 2; + uint32 area_id = 3; + uint32 battle_id = 4; + uint32 monster_group_id = 5; + uint32 score = 6; + uint32 cost_time = 7; + StageEndStatus end_status = 8; + repeated StageInnerAvatarData avatar_list = 9; + uint32 environment_id = 10; + uint32 layer_number = 11; + repeated StageInnerElfData elf_list = 12; +} + +// CmdID: 4045 +message EndlessSingleModeActivityBattleEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + EndlessSingleModeActivityBattleEndRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 map_id = 3; + uint32 area_id = 4; + uint32 battle_id = 5; + uint32 monster_group_id = 6; +} + +// CmdID: 4046 +message EndlessSingleModeActivityTakeItemReq { + uint32 activity_id = 1; + uint32 item_id = 2; + uint32 item_num = 3; +} + +// CmdID: 4047 +message EndlessSingleModeActivityTakeItemRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ITEM_FULL = 2; + } + + EndlessSingleModeActivityTakeItemRsp.Retcode retcode = 1; +} + +// CmdID: 4048 +message EndlessSingleModeActivityUseItemReq { + uint32 activity_id = 1; + uint32 item_id = 2; + uint32 item_num = 3; +} + +// CmdID: 4049 +message EndlessSingleModeActivityUseItemRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ITEM_LACK = 2; + } + + EndlessSingleModeActivityUseItemRsp.Retcode retcode = 1; +} + +// CmdID: 4052 +message GeneralActivityGetStageRankReq { + uint32 stage_id = 1; + uint32 rank_id = 2; +} + +// CmdID: 4053 +message GeneralActivityGetStageRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GeneralActivityGetStageRankRsp.Retcode retcode = 1; + uint32 stage_id = 2; + RankShowData rank_data = 3; +} + +// CmdID: 4056 +message CrisisModeActivityTakeStageRewardReq { + uint32 activity_id = 1; + uint32 stage_id = 2; +} + +// CmdID: 4057 +message CrisisModeActivityTakeStageRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKEN = 2; + } + + CrisisModeActivityTakeStageRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 stage_id = 3; + RewardData reward_data = 4; +} + +// CmdID: 4060 +message GeneralActivityTakeTicketReq { + uint32 activity_id = 1; +} + +message GeneralActivityTicket { + uint32 material_id = 1; + uint32 add_num = 2; +} + +// CmdID: 4061 +message GeneralActivityTakeTicketRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GeneralActivityTakeTicketRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated GeneralActivityTicket ticket_list = 3; +} + +// CmdID: 4062 +message BossChallengeActivityGetStageRankReq { + uint32 activity_id = 1; + uint32 stage_id = 2; +} + +// CmdID: 4063 +message BossChallengeActivityGetStageRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + BossChallengeActivityGetStageRankRsp.Retcode retcode = 1; + uint32 rank = 2; + uint32 rank_ratio = 3; +} + +// CmdID: 4064 +message FrontEndlessActivityBattleBeginReq { + uint32 activity_id = 1; + uint32 stage_id = 2; + uint32 floor = 3; +} + +// CmdID: 4065 +message FrontEndlessActivityBattleBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + FrontEndlessActivityBattleBeginRsp.Retcode retcode = 1; +} + +// CmdID: 4066 +message FrontEndlessActivityBattleEndReq { + uint32 activity_id = 1; + uint32 stage_id = 2; + uint32 floor = 3; + uint32 score = 4; + StageEndStatus end_status = 5; + uint32 cost_time = 6; +} + +// CmdID: 4067 +message FrontEndlessActivityBattleEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_CUR_FLOOR = 2; + } + + FrontEndlessActivityBattleEndRsp.Retcode retcode = 1; + uint32 cur_floor = 2; + RewardData reward_data = 3; +} + +enum CmdTypeGeneralactivity { + CMD_TYPE_GENERALACTIVITY_NONE = 0; + CMD_GENERAL_ACTIVITY_SCORE_REWARD_NOTIFY = 4000; + CMD_GENERAL_ACTIVITY_GET_SCORE_REWARD_INFO_REQ = 4001; + CMD_GENERAL_ACTIVITY_GET_SCORE_REWARD_INFO_RSP = 4002; + CMD_GENERAL_ACTIVITY_GET_SCHEDULE_REQ = 4003; + CMD_GENERAL_ACTIVITY_GET_SCHEDULE_RSP = 4004; + CMD_GENERAL_ACTIVITY_GET_MAIN_INFO_REQ = 4005; + CMD_GENERAL_ACTIVITY_GET_MAIN_INFO_RSP = 4006; + CMD_GENERAL_ACTIVITY_GET_RANK_REQ = 4007; + CMD_GENERAL_ACTIVITY_GET_RANK_RSP = 4008; + CMD_PUSH_TOWER_ACTIVTIY_TAKE_STAGE_REWARD_REQ = 4009; + CMD_PUSH_TOWER_ACTIVTIY_TAKE_STAGE_REWARD_RSP = 4010; + CMD_PUSH_TOWER_ACTIVTIY_TAKE_CLEAR_REWARD_REQ = 4011; + CMD_PUSH_TOWER_ACTIVTIY_TAKE_CLEAR_REWARD_RSP = 4012; + CMD_GENERAL_ACTIVITY_STAGE_EXCHANGE_ENTER_TIMES_REQ = 4030; + CMD_GENERAL_ACTIVITY_STAGE_EXCHANGE_ENTER_TIMES_RSP = 4031; + CMD_GENERAL_ACTIVITY_STAGE_TAKE_STAGE_REWARD_REQ = 4032; + CMD_GENERAL_ACTIVITY_STAGE_TAKE_STAGE_REWARD_RSP = 4033; + CMD_TAKE_GENERAL_ACTIVITY_SCORE_REWARD_REQ = 4034; + CMD_TAKE_GENERAL_ACTIVITY_SCORE_REWARD_RSP = 4035; + CMD_GENERAL_ACTIVITY_STAGE_TAKE_STAGE_GROUP_REWARD_REQ = 4036; + CMD_GENERAL_ACTIVITY_STAGE_TAKE_STAGE_GROUP_REWARD_RSP = 4037; + CMD_ENDLESS_SINGLE_MODE_ACTIVITY_FINISH_FLOOR_REQ = 4038; + CMD_ENDLESS_SINGLE_MODE_ACTIVITY_FINISH_FLOOR_RSP = 4039; + CMD_ENDLESS_SINGLE_MODE_ACTIVITY_RESET_REQ = 4040; + CMD_ENDLESS_SINGLE_MODE_ACTIVITY_RESET_RSP = 4041; + CMD_ENDLESS_SINGLE_MODE_ACTIVITY_BATTLE_BEGIN_REQ = 4042; + CMD_ENDLESS_SINGLE_MODE_ACTIVITY_BATTLE_BEGIN_RSP = 4043; + CMD_ENDLESS_SINGLE_MODE_ACTIVITY_BATTLE_END_REQ = 4044; + CMD_ENDLESS_SINGLE_MODE_ACTIVITY_BATTLE_END_RSP = 4045; + CMD_ENDLESS_SINGLE_MODE_ACTIVITY_TAKE_ITEM_REQ = 4046; + CMD_ENDLESS_SINGLE_MODE_ACTIVITY_TAKE_ITEM_RSP = 4047; + CMD_ENDLESS_SINGLE_MODE_ACTIVITY_USE_ITEM_REQ = 4048; + CMD_ENDLESS_SINGLE_MODE_ACTIVITY_USE_ITEM_RSP = 4049; + CMD_GENERAL_ACTIVITY_GET_STAGE_RANK_REQ = 4052; + CMD_GENERAL_ACTIVITY_GET_STAGE_RANK_RSP = 4053; + CMD_CRISIS_MODE_ACTIVITY_TAKE_STAGE_REWARD_REQ = 4056; + CMD_CRISIS_MODE_ACTIVITY_TAKE_STAGE_REWARD_RSP = 4057; + CMD_GENERAL_ACTIVITY_TAKE_TICKET_REQ = 4060; + CMD_GENERAL_ACTIVITY_TAKE_TICKET_RSP = 4061; + CMD_BOSS_CHALLENGE_ACTIVITY_GET_STAGE_RANK_REQ = 4062; + CMD_BOSS_CHALLENGE_ACTIVITY_GET_STAGE_RANK_RSP = 4063; + CMD_FRONT_ENDLESS_ACTIVITY_BATTLE_BEGIN_REQ = 4064; + CMD_FRONT_ENDLESS_ACTIVITY_BATTLE_BEGIN_RSP = 4065; + CMD_FRONT_ENDLESS_ACTIVITY_BATTLE_END_REQ = 4066; + CMD_FRONT_ENDLESS_ACTIVITY_BATTLE_END_RSP = 4067; + CMD_GENERAL_ACTIVITY_DUMMY = 4099; +} + +enum GeneralActivityRankType { + GENERAL_ACTIVITY_RANK_TYPE_NONE = 0; + GENERAL_ACTIVITY_RANK_TYPE_ABS = 1; + GENERAL_ACTIVITY_RANK_TYPE_PERCENT = 2; +} + +enum GeneralActivityRankSettleType { + GENERAL_ACTIVITY_RANK_SETTLE_TYPE_DEFAULT = 0; + GENERAL_ACTIVITY_RANK_SETTLE_TYPE_ACTIVITY = 1; +} + +enum GeneralActivityPreCondType { + GENERAL_ACTIVITY_PRE_COND_TYPE_NONE = 0; + GENERAL_ACTIVITY_PRE_COND_TYPE_SCORE = 1; +} + +enum GeneralActivityStageAvatarBonusType { + GENERAL_ACTIVITY_STAGE_AVATAR_BONUS_NONE = 0; + GENERAL_ACTIVITY_STAGE_AVATAR_BONUS_ONCE = 1; + GENERAL_ACTIVITY_STAGE_AVATAR_BONUS_ALL = 2; +} + +enum EndlessSingleModeActivityType { + ENDLESS_SINGLE_MODE_ACTIVITY_TYPE_NONE = 0; + ENDLESS_SINGLE_MODE_ACTIVITY_TYPE_NORMAL = 1; + ENDLESS_SINGLE_MODE_ACTIVITY_TYPE_OW = 2; +} + +enum GeneralActivityTicketRefreshType { + GENERAL_ACTIVITY_TICKET_REFRESH_NONE = 0; + GENERAL_ACTIVITY_TICKET_REFRESH_DAILY = 1; + GENERAL_ACTIVITY_TICKET_REFRESH_WEEKLY = 2; +} + +message GlobalExplorePos { + int32 pos_x = 1; + int32 pos_y = 2; +} + +message GlobalExploreGrid { + GlobalExplorePos pos = 1; + uint32 entity_id = 2; + uint32 entity_expire_time = 3; + bool is_explored = 4; +} + +message GlobalExploreEvent { + uint32 event_id = 1; + uint32 event_type = 2; + repeated uint32 event_param_list = 3; + GlobalExploreHintType hint_type = 4; +} + +message GlobalExploreEntity { + message KingdomData { + uint32 kingdom_id = 1; + uint32 progress = 2; + } + + uint32 entity_id = 1; + bool is_active = 2; + repeated GlobalExploreEntity.KingdomData kingdom_data_list = 3; + uint32 active_time = 4; + uint32 contribution = 5; +} + +message GlobalExploreQuest { + uint32 quest_id = 1; + uint32 progress = 2; + GlobalExploreQuestStatus status = 3; + uint32 finish_times = 4; +} + +message GlobalExploreStage { + uint32 stage_id = 1; + uint32 entity_id = 2; + uint32 grid_id = 3; + bool is_need_block = 4; +} + +message GlobalExploreInfo { + uint32 kingdom_id = 1; + GlobalExplorePos cur_pos = 2; + GlobalExploreStage cur_stage = 3; + uint32 explore_level = 4; + uint32 explore_exp = 5; + uint32 explore_stamina = 6; + repeated GlobalExploreEntity entity_list = 7; + repeated GlobalExploreGrid grid_list = 8; + repeated GlobalExploreQuest quest_list = 9; + uint32 explore_stamina_limit = 10; + bool is_take_kingdom_reward = 11; +} + +// CmdID: 6900 +message GlobalExploreGetActivityReq { +} + +// CmdID: 6901 +message GlobalExploreGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + AFTER_SETTLE_TIME = 3; + TOO_FREQUENT = 4; + } + + GlobalExploreGetActivityRsp.Retcode retcode = 1; + GlobalExploreInfo info = 2; +} + +// CmdID: 6902 +message GlobalExploreNotify { + repeated GlobalExploreEvent event_list = 1; + repeated GlobalExplorePos move_pos_list = 2; + GlobalExploreInfo update_info = 3; + repeated uint32 remove_quest_list = 4; +} + +// CmdID: 6903 +message GlobalExploreMoveReq { + repeated GlobalExplorePos move_pos_list = 1; + GlobalExploreMoveType move_type = 2; +} + +// CmdID: 6904 +message GlobalExploreMoveRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STAMINA_LACK = 3; + OUT_OF_RANGE = 4; + PATH_INVALID = 5; + UNEXPLOERD_LIMIT = 6; + ENTITY_OVERLAP = 7; + STAGE_UNFINISH = 8; + TOO_FREQUENT = 9; + } + + GlobalExploreMoveRsp.Retcode retcode = 1; + repeated GlobalExplorePos move_pos_list = 2; + GlobalExploreMoveType move_type = 3; +} + +// CmdID: 6905 +message GlobalExploreInteractReq { + GlobalExplorePos pos = 1; + uint32 entity_id = 2; +} + +// CmdID: 6906 +message GlobalExploreInteractRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + OUT_OF_RANGE = 3; + ENTITY_NOT_EXIST = 4; + ENTITY_MISMATCH = 5; + STAGE_UNFINISH = 6; + } + + GlobalExploreInteractRsp.Retcode retcode = 1; + GlobalExplorePos pos = 2; + uint32 entity_id = 3; + repeated uint32 action_id_list = 4; +} + +// CmdID: 6907 +message GlobalExploreActionReq { + GlobalExplorePos pos = 1; + uint32 entity_id = 2; + uint32 action_id = 3; + uint32 action_param = 4; +} + +// CmdID: 6908 +message GlobalExploreActionRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + OUT_OF_RANGE = 3; + ENTITY_NOT_EXIST = 4; + ENTITY_MISMATCH = 5; + ACTION_INVALID = 6; + STAMINA_LACK = 7; + MATERIAL_LACK = 8; + STAGE_UNFINISH = 9; + ENTITY_HAS_ACTIVATE = 10; + } + + GlobalExploreActionRsp.Retcode retcode = 1; + GlobalExplorePos pos = 2; + uint32 entity_id = 3; + uint32 action_id = 4; + uint32 action_param = 5; + uint32 contribution_add = 6; +} + +enum CmdTypeGlobalexplore { + CMD_TYPE_GLOBALEXPLORE_NONE = 0; + CMD_GLOBAL_EXPLORE_GET_ACTIVITY_REQ = 6900; + CMD_GLOBAL_EXPLORE_GET_ACTIVITY_RSP = 6901; + CMD_GLOBAL_EXPLORE_NOTIFY = 6902; + CMD_GLOBAL_EXPLORE_MOVE_REQ = 6903; + CMD_GLOBAL_EXPLORE_MOVE_RSP = 6904; + CMD_GLOBAL_EXPLORE_INTERACT_REQ = 6905; + CMD_GLOBAL_EXPLORE_INTERACT_RSP = 6906; + CMD_GLOBAL_EXPLORE_ACTION_REQ = 6907; + CMD_GLOBAL_EXPLORE_ACTION_RSP = 6908; +} + +enum GlobalExploreFlagType { + GLOBAL_EXPLORE_FLAG_TYPE_NONE = 0; + GLOBAL_EXPLORE_FLAG_MATERIAL_NUM = 1; + GLOBAL_EXPLORE_FLAG_CUR_GRID = 2; + GLOBAL_EXPLORE_FLAG_ENTITY_INACTIVE = 3; + GLOBAL_EXPLORE_FLAG_ENTITY_ACTIVE = 4; + GLOBAL_EXPLORE_FLAG_STAGE_COMPLETED = 5; + GLOBAL_EXPLORE_FLAG_MISSION_COMPLETED = 6; + GLOBAL_EXPLORE_FLAG_GRID_ADJACENT = 7; + GLOBAL_EXPLORE_FLAG_QUEST_STATUS = 8; + GLOBAL_EXPLORE_FLAG_WITHOUT_MATERIAL = 9; +} + +enum GlobalExploreEventType { + GLOBAL_EXPLORE_EVENT_TYPE_NONE = 0; + GLOBAL_EXPLORE_EVENT_DICE = 1; + GLOBAL_EXPLORE_EVENT_DROP_MATERIAL = 2; + GLOBAL_EXPLORE_EVENT_REPLACE_ENTITY = 3; + GLOBAL_EXPLORE_EVENT_DESTROY_ENTITY = 4; + GLOBAL_EXPLORE_EVENT_TELEPORT_RANDOM = 5; + GLOBAL_EXPLORE_EVENT_CHANGE_GRID = 6; + GLOBAL_EXPLORE_EVENT_ACCEPT_QUEST = 7; + GLOBAL_EXPLORE_EVENT_TELEPORT_SPECIFIC = 8; + GLOBAL_EXPLORE_EVENT_RECOVER_STAMINA = 9; + GLOBAL_EXPLORE_EVENT_ENTER_STAGE = 10; + GLOBAL_EXPLORE_EVENT_ADD_QUEST_PROGRESS = 11; + GLOBAL_EXPLORE_EVENT_CHANGE_GRID_RANDOM = 12; + GLOBAL_EXPLORE_EVENT_DROP_MATERIAL_RANDOM = 13; + GLOBAL_EXPLORE_EVENT_CREATE_ENTITY_RANDOM = 14; + GLOBAL_EXPLORE_EVENT_MOVE_CAMERA = 15; + GLOBAL_EXPLORE_EVENT_TEXT_MAP_HINT = 16; + GLOBAL_EXPLORE_EVENT_TRIGGER_PLOT = 17; + GLOBAL_EXPLORE_EVENT_START_TUTORIAL = 18; + GLOBAL_EXPLORE_EVENT_ZOOM_MAP = 19; +} + +enum GlobalExploreHintType { + GLOBAL_EXPLORE_HINT_NONE = 0; + GLOBAL_EXPLORE_HINT_COIN = 1; + GLOBAL_EXPLORE_HINT_INVISIBLE_REWARD = 2; + GLOBAL_EXPLORE_HINT_COMPLETE_QUEST = 3; +} + +enum GlobalExploreActionType { + GLOBAL_EXPLORE_ACTION_NONE = 0; + GLOBAL_EXPLORE_ACTION_DICE = 1; + GLOBAL_EXPLORE_ACTION_EXCHANGE = 2; + GLOBAL_EXPLORE_ACTION_BATTLE = 3; + GLOBAL_EXPLORE_ACTION_TELEPORT = 4; + GLOBAL_EXPLORE_ACTION_AREA_TELEPORT = 5; + GLOBAL_EXPLORE_ACTION_ACCEPT_QUEST = 6; + GLOBAL_EXPLORE_ACTION_USE_HAMMER = 7; + GLOBAL_EXPLORE_ACTION_USE_SPADE = 8; +} + +enum GlobalExploreEntityType { + GLOBAL_EXPLORE_ENTITY_TYPE_NONE = 0; + GLOBAL_EXPLORE_ENTITY_REWARD = 1; + GLOBAL_EXPLORE_ENTITY_DICE = 2; + GLOBAL_EXPLORE_ENTITY_STAGE = 3; + GLOBAL_EXPLORE_ENTITY_PLOT = 4; + GLOBAL_EXPLORE_ENTITY_TELEPORT = 5; + GLOBAL_EXPLORE_ENTITY_EVENT = 6; +} + +enum GlobalExploreEntityCriticalType { + GLOBAL_EXPLORE_ENTITY_CRITICAL_TYPE_NONE = 0; + GLOBAL_EXPLORE_ENTITY_CRITICAL_STAGE = 1001; + GLOBAL_EXPLORE_ENTITY_CRITICAL_QUEST = 1002; + GLOBAL_EXPLORE_ENTITY_CRITICAL_WATCHTOWER = 1003; + GLOBAL_EXPLORE_ENTITY_CRITICAL_BOSS = 1005; +} + +enum GlobalExploreQuestType { + GLOBAL_EXPLORE_QUEST_TYPE_NONE = 0; + GLOBAL_EXPLORE_QUEST_EXPLORE = 1; + GLOBAL_EXPLORE_QUEST_MOVE_PATH = 2; + GLOBAL_EXPLORE_QUEST_PASS_STAGE = 3; + GLOBAL_EXPLORE_QUEST_ADD_MATERIAL = 4; + GLOBAL_EXPLORE_QUEST_FINISH_QUEST = 100; +} + +enum GlobalExploreQuestStatus { + GLOBAL_EXPLORE_QUEST_STATUS_NONE = 0; + GLOBAL_EXPLORE_QUEST_DOING = 1; + GLOBAL_EXPLORE_QUEST_CLOSE = 2; +} + +enum GlobalExplorePoolType { + GLOBAL_EXPLORE_POOL_WITH_REPLACEMENT = 0; + GLOBAL_EXPLORE_POOL_WITHOUT_REPLACEMENT = 1; + GLOBAL_EXPLORE_POOL_CYCLE = 2; +} + +enum GlobalExplorePoolContentType { + GLOBAL_EXPLORE_POOL_CONTENT_TYPE_NONE = 0; + GLOBAL_EXPLORE_POOL_CONTENT_EVENT = 1; + GLOBAL_EXPLORE_POOL_CONTENT_QUEST = 2; + GLOBAL_EXPLORE_POOL_CONTENT_ENTITY = 3; +} + +enum GlobalExploreMoveType { + GLOBAL_EXPLORE_MOVE_TYPE_NONE = 0; + GLOBAL_EXPLORE_MOVE_WALK = 1; + GLOBAL_EXPLORE_MOVE_TELEPORT = 2; + GLOBAL_EXPLORE_EVENT_TELEPORT = 3; + GLOBAL_EXPLORE_GM_TELEPORT = 4; +} + +enum GlobalExploreBleedingType { + GLOBAL_EXPLORE_BLEEDING_TYPE_NONE = 0; + GLOBAL_EXPLORE_BLEEDING_POINT = 1; + GLOBAL_EXPLORE_BLEEDING_BOSS = 2; +} + +message GlobalWarActivity { + uint32 cur_schedule_id = 1; + uint32 display_begin_time = 2; + uint32 display_end_time = 3; + uint32 begin_time = 4; + uint32 end_time = 5; + uint32 total_get_currency = 6; + uint32 last_daily_get_currency = 7; + uint32 total_cost_ticket_num = 8; + repeated uint32 take_point_reward_list = 9; + repeated GlobalWarPoint global_war_point_list = 10; + repeated GlobalWarMember member_list = 11; + uint32 buff_level = 13; + repeated GlobalWarIsolatePoint global_war_isolate_point_list = 14; +} + +// CmdID: 3950 +message GetGlobalWarActivityReq { +} + +// CmdID: 3951 +message GetGlobalWarActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetGlobalWarActivityRsp.Retcode retcode = 1; + GlobalWarActivity global_war_activity = 2; +} + +message GlobalWarMember { + uint32 uid = 1; + string nickname = 2; + uint32 level = 3; + uint32 head_avatar_id = 4; + uint32 frame_id = 5; + uint32 dress_id = 6; + uint32 custom_head_id = 7; + uint32 global_war_point_id = 8; + uint32 global_war_add_currency = 9; + uint32 global_war_add_time = 10; +} + +message GlobalWarPoint { + uint32 point_id = 1; + uint32 cur_hp = 2; + uint32 point_status = 3; + uint32 last_refresh_member_num = 4; + uint32 point_finish_time = 5; + uint32 last_take_sweep_reward_time = 6; +} + +message GlobalWarIsolatePoint { + uint32 point_id = 1; + uint32 point_status = 2; +} + +// CmdID: 3952 +message GlobalWarTakePointRewardReq { + repeated uint32 point_id_list = 1; +} + +// CmdID: 3953 +message GlobalWarTakePointRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + POINT_NOT_FINISH = 2; + CURRENCY_LACK = 3; + } + + GlobalWarTakePointRewardRsp.Retcode retcode = 1; + repeated uint32 point_id_list = 2; + RewardData reward_data = 3; +} + +// CmdID: 3954 +message GlobalWarAddCurrencyNotify { + uint32 point_id = 1; + GlobalWarMember global_war_member = 2; +} + +// CmdID: 3955 +message GlobalWarExchangeCurrencyReq { + uint32 point_id = 1; +} + +// CmdID: 3956 +message GlobalWarExchangeCurrencyRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + POINT_NOT_ACTIVE = 2; + MATERIAL_LACK = 3; + CURRENCY_FULL = 4; + AREA_NOT_FINISH = 5; + STAMINA_LACK = 6; + } + + GlobalWarExchangeCurrencyRsp.Retcode retcode = 1; + uint32 add_currency_num = 2; +} + +// CmdID: 3957 +message GlobalWarGetRankReq { + uint32 point_id = 1; +} + +// CmdID: 3958 +message GlobalWarGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GlobalWarGetRankRsp.Retcode retcode = 1; + uint32 point_id = 2; + RankShowData rank_data = 3; +} + +// CmdID: 3959 +message GlobalWarTakeSweepRewardReq { + repeated uint32 point_id_list = 1; +} + +message SweepCurrency { + uint32 point_id = 1; + uint32 add_num = 2; +} + +// CmdID: 3960 +message GlobalWarTakeSweepRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + POINT_NOT_FINISH = 2; + SWEEP_MATERIAL_CD = 3; + } + + GlobalWarTakeSweepRewardRsp.Retcode retcode = 1; + repeated SweepCurrency sweep_currency_list = 2; +} + +enum CmdTypeGlobalwar { + CMD_TYPE_GLOBALWAR_NONE = 0; + CMD_GET_GLOBAL_WAR_ACTIVITY_REQ = 3950; + CMD_GET_GLOBAL_WAR_ACTIVITY_RSP = 3951; + CMD_GLOBAL_WAR_TAKE_POINT_REWARD_REQ = 3952; + CMD_GLOBAL_WAR_TAKE_POINT_REWARD_RSP = 3953; + CMD_GLOBAL_WAR_ADD_CURRENCY_NOTIFY = 3954; + CMD_GLOBAL_WAR_EXCHANGE_CURRENCY_REQ = 3955; + CMD_GLOBAL_WAR_EXCHANGE_CURRENCY_RSP = 3956; + CMD_GLOBAL_WAR_GET_RANK_REQ = 3957; + CMD_GLOBAL_WAR_GET_RANK_RSP = 3958; + CMD_GLOBAL_WAR_TAKE_SWEEP_REWARD_REQ = 3959; + CMD_GLOBAL_WAR_TAKE_SWEEP_REWARD_RSP = 3960; + CMD_GLOBAL_WAR_DUMMY = 3999; +} + +enum GlobalWarPointType { + GLOBAL_WAR_POINT_TYPE_NONE = 0; + GLOBAL_WAR_POINT_TYPE_NORMAL = 1; + GLOBAL_WAR_POINT_TYPE_CRITICAL = 2; + GLOBAL_WAR_POINT_TYPE_BOSS = 3; +} + +enum GlobalWarPointRankType { + GLOBAL_WAR_POINT_RANK_NONE = 0; + GLOBAL_WAR_POINT_RANK_CURRENCY = 1; + GLOBAL_WAR_POINT_RANK_SCORE = 2; +} + +enum GlobalWarPointStatus { + GLOBAL_WAR_POINT_STATUS_NONE = 0; + GLOBAL_WAR_POINT_STATUS_LOCKED = 1; + GLOBAL_WAR_POINT_STATUS_ACTIVE = 2; + GLOBAL_WAR_POINT_STATUS_CLOSE = 3; +} + +enum GlobalWarIsolatePointStatus { + GLOBAL_WAR_ISOLATE_POINT_STATUS_NONE = 0; + GLOBAL_WAR_ISOLATE_POINT_STATUS_LOCKED = 1; + GLOBAL_WAR_ISOLATE_POINT_STATUS_ACTIVE = 2; + GLOBAL_WAR_ISOLATE_POINT_STATUS_CLOSE = 3; +} + +enum GlobalWarStageType { + GLOBAL_WAR_STAGE_FOR_NONE = 0; + GLOBAL_WAR_STAGE_FOR_POINT = 1; + GLOBAL_WAR_STAGE_FOR_ISOLATE_POINT = 2; +} + +// CmdID: 6150 +message GetGodWarReq { + uint32 god_war_id = 1; +} + +message GodWarSite { + uint32 site_id = 1; + GodWarSiteStatus site_status = 2; +} + +message GodWarOverall { + uint32 overall_id = 1; + uint32 overall_val = 2; +} + +message GodWarChallengeStigmata { + uint32 id = 1; + uint32 level = 2; + repeated StigmataRune rune_list = 3; +} + +message GodWarChallengeAvatar { + uint32 avatar_id = 1; + uint32 hp_percent = 2; + bool is_virtual = 3; + uint32 weapon_id = 4; + uint32 weapon_level = 5; + GodWarChallengeStigmata stigmata_1 = 6; + GodWarChallengeStigmata stigmata_2 = 7; + GodWarChallengeStigmata stigmata_3 = 8; + uint32 weapon_homology_level = 9; +} + +message GodWarChallengeElf { + ElfBriefInfo elf_info = 1; +} + +message GodWarBonus { + uint32 bonus_id = 1; + uint32 count_down = 2; + GodWarBuff buff = 3; +} + +message GodWarChallenge { + bool is_challenge_fail = 1; + repeated GodWarChallengeAvatar avatar_list = 2; + repeated uint32 support_avatar_id_list = 3; + uint32 elf_id = 4; + uint32 extra_item_id = 5; + uint32 refresh_teleport_times = 6; + repeated GodWarPunishBuff punish_buff_list = 7; + uint32 challenge_score = 8; + uint32 random_seed = 9; + uint32 step_level = 10; + repeated uint32 punish_buff_id_list = 11; + bool is_use_virtual_avatar = 12; + repeated uint32 boon_buff_id_list = 13; + uint32 gain_coin_num = 14; + uint32 refresh_teleport_times_limit = 15; + uint32 assistant_extra_item_id = 16; + repeated GodWarBonus bonus_list = 17; + uint32 refresh_gacha_times = 18; + uint32 refresh_gacha_times_limit = 19; + uint32 star_ring_energy = 20; + repeated GodWarChallengeElf elf_list = 21; + bool is_alleviation = 22; +} + +message GodWarChallengeHistory { + uint32 avatar_id = 1; + bool is_challenge_succ = 2; + uint32 max_punish_level = 3; + repeated uint32 pass_step_level_list = 4; + uint32 max_challenge_score = 5; +} + +message GodWarBuff { + uint32 buff_id = 1; + uint32 buff_level = 2; +} + +message GodWarTalent { + uint32 talent_id = 1; + uint32 talent_level = 2; +} + +message GodWarTale { + uint32 tale_id = 1; + uint32 schedule_id = 2; + repeated GodWarSite site_list = 3; + uint32 cur_site_id = 4; + uint32 begin_time = 5; + uint32 end_time = 6; + GodWarChallenge challenge = 7; + repeated GodWarBuff buff_list = 8; + uint32 avatar_schedule_id = 9; + repeated GodWarChallengeHistory challenge_history_list = 10; + bool is_locked = 11; + repeated GodWarOverall overall_list = 12; + uint32 avatar_schedule_max_score = 13; + GodWarCurAvatarScheduleInfo cur_avatar_schedule_info = 14; +} + +message GodWarCurAvatarScheduleInfo { + uint32 max_challenge_score = 1; + uint32 max_punish_level = 2; + uint32 last_schedule_max_punish_level = 3; +} + +message GodWarRoleRelation { + uint32 role_id = 1; + uint32 level = 2; + uint32 exp = 3; + uint32 reward_has_take_level = 4; + repeated uint32 reward_has_take_story_list = 5; +} + +message GodWarAvatarExpUp { + uint32 begin_time = 1; + uint32 end_time = 2; + repeated uint32 avatar_id_list = 3; + uint32 up_ratio = 4; + uint32 schedule_id = 5; +} + +message GodWarChapter { + uint32 chapter_id = 1; + bool is_locked = 2; +} + +message GodWarRoleInfo { + repeated GodWarRoleRelation role_relation_list = 1; + GodWarAvatarExpUp avatar_exp_up = 2; + repeated uint32 main_avatar_id_list = 3; + repeated uint32 support_avatar_id_list = 4; +} + +message GodWar { + uint32 god_war_id = 1; + repeated GodWarTale tale_list = 2; + uint32 begin_time = 3; + uint32 end_time = 4; + repeated GodWarTalent talent_list = 5; + uint32 max_support_point = 6; + uint32 lobby_id = 9; + repeated GodWarChapter chapter_list = 14; + uint32 cur_chapter_id = 15; + GodWarRoleInfo role_info = 16; +} + +// CmdID: 6151 +message GetGodWarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetGodWarRsp.Retcode retcode = 1; + repeated GodWar god_war_list = 2; +} + +message GodWarPunishBuff { + uint32 buff_id = 1; + uint32 buff_level = 2; +} + +// CmdID: 6152 +message SelectGodWarChallengeAvatarReq { + uint32 god_war_id = 1; + uint32 tale_id = 2; + repeated uint32 avatar_id_list = 3; + repeated uint32 support_avatar_id_list = 4; + uint32 elf_id = 5; + uint32 extra_item_id = 6; + bool is_use_virtual_avatar = 7; + repeated uint32 boon_buff_id_list = 8; + uint32 step_level = 9; + uint32 assistant_extra_item_id = 10; + bool is_alleviation = 11; +} + +// CmdID: 6153 +message SelectGodWarChallengeAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ALREADY_SELECTED = 2; + AVATAR_ERROR = 3; + SUPPORT_AVATAR_ERROR = 4; + ELF_ERROR = 5; + AVATAR_SCHEDULE_ERROR = 6; + PUNISH_BUFF_ERROR = 7; + FEATURE_CLOSE = 8; + FORCE_SETTLE = 9; + NOT_OPEN = 10; + BOON_BUFF_ERROR = 11; + AVATAR_MISSION_NOT_FINISH = 12; + EXTRA_ITEM_ERROR = 13; + ALLEVIATION_ERROR = 14; + ALLEVIATION_NOT_OPEN = 15; + } + + SelectGodWarChallengeAvatarRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + uint32 tale_id = 3; +} + +// CmdID: 6154 +message ChangeGodWarChallengeSupportAvatarReq { + uint32 god_war_id = 1; + uint32 tale_id = 2; + repeated uint32 support_avatar_id_list = 3; + uint32 extra_item_id = 4; + uint32 assistant_extra_item_id = 5; +} + +// CmdID: 6155 +message ChangeGodWarChallengeSupportAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SUPPORT_AVATAR_ERROR = 2; + FEATURE_CLOSE = 3; + NOT_OPEN = 4; + EXTRA_ITEM_ERROR = 5; + } + + ChangeGodWarChallengeSupportAvatarRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + uint32 tale_id = 3; + repeated uint32 support_avatar_id_list = 4; + uint32 extra_item_id = 5; + uint32 assistant_extra_item_id = 6; +} + +// CmdID: 6156 +message SyncGodWarTaleNotify { + GodWarTale tale = 1; +} + +// CmdID: 6157 +message ResetGodWarChallengeReq { + enum ResetChannel { + RESET_CHANNEL_NONE = 0; + USER_OPERATION = 1; + FORCE_SETTLE = 2; + } + + uint32 god_war_id = 1; + uint32 tale_id = 2; + ResetGodWarChallengeReq.ResetChannel channel = 3; +} + +message GodWarScoreEventSettle { + uint32 score_event_id = 1; + uint32 settle_times = 2; + uint32 total_score = 3; +} + +// CmdID: 6158 +message ResetGodWarChallengeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSE = 2; + FORCE_SETTLE = 3; + NOT_OPEN = 4; + } + + ResetGodWarChallengeRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + uint32 tale_id = 3; + repeated GodWarChallengeAvatar avatar_list = 4; + repeated GodWarBuff buff_list = 5; + bool is_challenge_succ = 6; + uint32 challenge_score = 7; + repeated GodWarScoreEventSettle score_id_settle_times_list = 8; + uint32 punish_level = 9; + uint32 total_score = 11; + uint32 grade = 12; + repeated Material reward_material_list = 13; + uint32 site_idx = 14; + repeated RewardData first_win_reward_list = 15; + bool is_use_virtual_avatar = 16; + uint32 challenge_cost_time = 17; + bool is_alleviation = 18; +} + +message GodWarEventInfo { + message ParamMap { + uint32 key = 1; + uint32 value = 2; + } + + enum EventSettleStatus { + EFFECT = 0; + FLAG_NOT_VALID = 1; + SETTLE_FAIL = 2; + SETTLE_REPEATED = 3; + TALE_NOT_FOUND = 4; + TRIGGER_PARAM_NOT_VALID = 5; + CANDIDATE_EMPTY = 6; + FORCE_SETTLE = 7; + } + + uint32 event_id = 1; + uint32 event_type = 2; + GodWarEventInfo.EventSettleStatus event_settle_status = 3; + repeated uint32 event_param_list = 4; + uint32 source_event_id = 5; + repeated RewardData reward_data_list = 6; + uint32 fingerprint = 7; + repeated uint32 extra_param_list = 8; + uint32 source_type = 9; + repeated GodWarEventInfo.ParamMap event_param_map_list = 10; +} + +// CmdID: 6160 +message GodWarEventNotify { + uint32 god_war_id = 1; + uint32 tale_id = 2; + repeated GodWarEventInfo event_list = 3; + uint32 trigger_type = 4; + repeated uint32 trigger_param_list = 5; +} + +// CmdID: 6161 +message TriggerGodWarEventReq { + uint32 god_war_id = 1; + uint32 tale_id = 2; + repeated uint32 event_id_list = 3; + uint32 trigger_type = 4; + repeated uint32 trigger_param_list = 5; +} + +// CmdID: 6162 +message TriggerGodWarEventRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSE = 2; + FORCE_SETTLE = 3; + } + + TriggerGodWarEventRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + uint32 tale_id = 3; + repeated uint32 event_id_list = 4; +} + +// CmdID: 6163 +message RefreshGodWarTeleportEventReq { + uint32 god_war_id = 1; + uint32 tale_id = 2; + uint32 random = 3; +} + +// CmdID: 6164 +message RefreshGodWarTeleportEventRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSE = 2; + RANDOM_INVALID = 3; + } + + RefreshGodWarTeleportEventRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + uint32 tale_id = 3; + uint32 random = 4; +} + +// CmdID: 6170 +message SelectGodWarBuffReq { + uint32 god_war_id = 1; + uint32 tale_id = 2; + uint32 buff_id = 3; +} + +// CmdID: 6171 +message SelectGodWarBuffRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_CANDIDATE = 2; + FEATURE_CLOSE = 3; + NOT_OPEN = 4; + } + + SelectGodWarBuffRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + uint32 tale_id = 3; + GodWarBuff buff = 4; +} + +// CmdID: 6172 +message LevelUpGodWarTalentReq { + uint32 god_war_id = 1; + uint32 talent_id = 2; + bool is_level_up_all = 3; +} + +// CmdID: 6173 +message LevelUpGodWarTalentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TALENT_ERROR = 2; + TARGET_LEVEL_ERROR = 3; + MATERIAL_LACK = 4; + FLAG_INVALID = 5; + FEATURE_CLOSE = 6; + LEVEL_FULL = 7; + } + + LevelUpGodWarTalentRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + GodWarTalent talent = 3; + uint32 max_support_point = 4; +} + +// CmdID: 6176 +message TakeGodWarTalentSupportLevelRewardNotify { + uint32 god_war_id = 1; + repeated RewardData reward_list = 2; +} + +// CmdID: 6177 +message AddGodWarRoleRelationExpReq { + uint32 god_war_id = 1; + uint32 role_id = 2; + uint32 exp_material_num = 3; +} + +// CmdID: 6178 +message AddGodWarRoleRelationExpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ROLE_ERROR = 2; + MATERIAL_LACK = 3; + EXP_FULL = 4; + FEATURE_CLOSE = 5; + } + + AddGodWarRoleRelationExpRsp.Retcode retcode = 1; + uint32 god_war_id = 2; +} + +// CmdID: 6179 +message LevelUpGodWarRoleRelationReq { + uint32 god_war_id = 1; + uint32 role_id = 2; +} + +// CmdID: 6180 +message LevelUpGodWarRoleRelationRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ROLE_ERROR = 2; + MATERIAL_LACK = 3; + EXP_LACK = 4; + FEATURE_CLOSE = 5; + } + + LevelUpGodWarRoleRelationRsp.Retcode retcode = 1; + uint32 god_war_id = 2; +} + +// CmdID: 6181 +message TakeGodWarRoleRelationLevelRewardReq { + uint32 god_war_id = 1; + uint32 role_id = 2; +} + +// CmdID: 6182 +message TakeGodWarRoleRelationLevelRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ROLE_ERROR = 2; + NO_REWARD = 3; + FEATURE_CLOSE = 4; + } + + TakeGodWarRoleRelationLevelRewardRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + repeated RewardData reward_list = 3; +} + +message GodWarGoods { + message BuffGoods { + uint32 buff_id = 1; + uint32 buff_init_level = 2; + } + + message LevelUpBuffGoods { + uint32 buff_id = 1; + uint32 buff_cur_level = 2; + } + + enum GoodsType { + GOODS_TYPE_NONE = 0; + GOODS_TYPE_BUFF = 1; + GOODS_TYPE_LEVEL_UP_BUFF = 2; + } + + GodWarGoods.GoodsType goods_type = 1; + uint32 goods_num = 2; + uint32 goods_idx = 3; + uint32 coin_cost = 4; + GodWarGoods.BuffGoods buff_goods = 21; + GodWarGoods.LevelUpBuffGoods levelup_buff_goods = 22; +} + +message GodWarShop { + repeated GodWarGoods goods_list = 1; + bool is_can_change_state = 2; + bool is_can_recover = 3; + uint32 change_state_event_id = 4; + uint32 recover_event_id = 5; + uint32 special_discount = 6; + uint32 refresh_shop_cost = 7; + uint32 refresh_shop_random = 8; + uint32 shopping_cost = 9; +} + +// CmdID: 6183 +message GetGodWarTaleShopReq { + uint32 god_war_id = 1; + uint32 tale_id = 2; +} + +// CmdID: 6184 +message GetGodWarTaleShopRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_SHOP = 2; + FEATURE_CLOSE = 3; + NOT_OPEN = 4; + } + + GetGodWarTaleShopRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + uint32 tale_id = 3; + GodWarShop shop = 4; +} + +// CmdID: 6185 +message BuyGodWarShopGoodsReq { + uint32 god_war_id = 1; + uint32 tale_id = 2; + uint32 goods_idx = 3; +} + +// CmdID: 6186 +message BuyGodWarShopGoodsRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + GOODS_ERROR = 2; + MATERIAL_LACK = 3; + FEATURE_CLOSE = 4; + NOT_OPEN = 5; + } + + BuyGodWarShopGoodsRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + uint32 tale_id = 3; + uint32 goods_idx = 4; +} + +// CmdID: 6187 +message TakeGodWarRoleStoryRewardReq { + uint32 god_war_id = 1; + uint32 story_id = 2; +} + +// CmdID: 6188 +message TakeGodWarRoleStoryRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + RELATION_LEVEL_LACK = 2; + MISSION_UNFINISH = 3; + HAS_TAKE = 4; + FEATURE_CLOSE = 5; + } + + TakeGodWarRoleStoryRewardRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + uint32 story_id = 3; + RewardData reward = 4; +} + +// CmdID: 6189 +message RefreshGodWarTicketReq { + uint32 god_war_id = 1; +} + +message RefreshGodWarTicketInfo { + uint32 ticket_id = 1; + uint32 material_id = 2; + uint32 add_num = 3; +} + +// CmdID: 6190 +message RefreshGodWarTicketRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSE = 2; + } + + RefreshGodWarTicketRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + repeated RefreshGodWarTicketInfo ticket_refresh_list = 3; +} + +// CmdID: 6191 +message PredictGodWarEventReq { + uint32 god_war_id = 1; + uint32 tale_id = 2; + repeated uint32 event_id_list = 3; +} + +// CmdID: 6192 +message PredictGodWarEventRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSE = 2; + } + + PredictGodWarEventRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + uint32 tale_id = 3; + repeated uint32 event_id_list = 4; +} + +// CmdID: 6193 +message RefreshGodWarBuffEventReq { + uint32 god_war_id = 1; + uint32 tale_id = 2; +} + +// CmdID: 6194 +message RefreshGodWarBuffEventRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSE = 2; + } + + RefreshGodWarBuffEventRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + uint32 tale_id = 3; +} + +// CmdID: 6195 +message GetGodWarRoleReq { + uint32 god_war_id = 1; +} + +// CmdID: 6196 +message GetGodWarRoleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetGodWarRoleRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + GodWarRoleInfo role_info = 7; +} + +// CmdID: 6197 +message GetGodWarTeleportEventReq { + uint32 god_war_id = 1; + uint32 tale_id = 2; +} + +// CmdID: 6198 +message GetGodWarTeleportEventRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSE = 2; + NOT_OPEN = 3; + FORCE_SETTLE = 4; + } + + GetGodWarTeleportEventRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + uint32 tale_id = 3; + repeated uint32 teleport_id_list = 4; +} + +// CmdID: 6199 +message SwitchGodWarChapterReq { + uint32 god_war_id = 1; + uint32 chapter_id = 2; +} + +// CmdID: 6200 +message SwitchGodWarChapterRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + FEATURE_CLOSE = 3; + LOCKED = 4; + IN_KEY_MISSION = 5; + } + + SwitchGodWarChapterRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + uint32 chapter_id = 3; +} + +// CmdID: 6201 +message GetGodWarLobbyReq { + uint32 god_war_id = 1; + uint32 lobby_id = 2; +} + +message GodWarNpc { + uint32 npc_id = 1; + repeated uint32 action_list = 2; +} + +// CmdID: 6202 +message GetGodWarLobbyRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + FEATURE_CLOSE = 3; + } + + GetGodWarLobbyRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + uint32 lobby_id = 3; + repeated GodWarNpc npc_list = 4; +} + +// CmdID: 6203 +message FinishGodWarLobbyActionReq { + uint32 god_war_id = 1; + uint32 lobby_id = 2; + uint32 action_id = 3; +} + +// CmdID: 6204 +message FinishGodWarLobbyActionRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + FEATURE_CLOSE = 3; + } + + FinishGodWarLobbyActionRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + uint32 lobby_id = 3; + uint32 action_id = 4; +} + +// CmdID: 6205 +message RefreshGodWarShopGoodsReq { + uint32 god_war_id = 1; + uint32 tale_id = 2; + uint32 random = 3; +} + +// CmdID: 6206 +message RefreshGodWarShopGoodsRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + GOODS_ERROR = 2; + MATERIAL_LACK = 3; + FEATURE_CLOSE = 4; + NOT_OPEN = 5; + RANDOM_INVALID = 6; + } + + RefreshGodWarShopGoodsRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + uint32 tale_id = 3; + uint32 random = 4; +} + +// CmdID: 6207 +message SkipGodWarStoryNodeReq { + uint32 god_war_id = 1; + uint32 node_id = 2; +} + +// CmdID: 6208 +message SkipGodWarStoryNodeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSE = 2; + NODE_NOT_EXIST = 3; + CHAPTER_MISMATCH = 4; + MATERIAL_LACK = 5; + NODE_SKIP_INVALID = 6; + MISSION_STATUS_ERROR = 7; + } + + SkipGodWarStoryNodeRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + uint32 node_id = 3; +} + +// CmdID: 6209 +message RefreshGodWarGachaReq { + uint32 god_war_id = 1; + uint32 tale_id = 2; + uint32 random = 3; +} + +// CmdID: 6210 +message RefreshGodWarGachaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSE = 2; + GACHA_TIMES_LACK = 3; + NOT_OPEN = 4; + RANDOM_INVALID = 5; + } + + RefreshGodWarGachaRsp.Retcode retcode = 1; + uint32 god_war_id = 2; + uint32 tale_id = 3; + uint32 random = 4; +} + +enum CmdTypeGodwar { + CMD_TYPE_GODWAR_NONE = 0; + CMD_GET_GOD_WAR_REQ = 6150; + CMD_GET_GOD_WAR_RSP = 6151; + CMD_SELECT_GOD_WAR_CHALLENGE_AVATAR_REQ = 6152; + CMD_SELECT_GOD_WAR_CHALLENGE_AVATAR_RSP = 6153; + CMD_CHANGE_GOD_WAR_CHALLENGE_SUPPORT_AVATAR_REQ = 6154; + CMD_CHANGE_GOD_WAR_CHALLENGE_SUPPORT_AVATAR_RSP = 6155; + CMD_SYNC_GOD_WAR_TALE_NOTIFY = 6156; + CMD_RESET_GOD_WAR_CHALLENGE_REQ = 6157; + CMD_RESET_GOD_WAR_CHALLENGE_RSP = 6158; + CMD_GOD_WAR_EVENT_NOTIFY = 6160; + CMD_TRIGGER_GOD_WAR_EVENT_REQ = 6161; + CMD_TRIGGER_GOD_WAR_EVENT_RSP = 6162; + CMD_REFRESH_GOD_WAR_TELEPORT_EVENT_REQ = 6163; + CMD_REFRESH_GOD_WAR_TELEPORT_EVENT_RSP = 6164; + CMD_SELECT_GOD_WAR_BUFF_REQ = 6170; + CMD_SELECT_GOD_WAR_BUFF_RSP = 6171; + CMD_LEVELUP_GOD_WAR_TALENT_REQ = 6172; + CMD_LEVELUP_GOD_WAR_TALENT_RSP = 6173; + CMD_TAKE_GOD_WAR_TALENT_SUPPORT_LEVEL_REWARD_NOTIFY = 6176; + CMD_ADD_GOD_WAR_ROLE_RELATION_EXP_REQ = 6177; + CMD_ADD_GOD_WAR_ROLE_RELATION_EXP_RSP = 6178; + CMD_LEVELUP_GOD_WAR_ROLE_RELATION_REQ = 6179; + CMD_LEVELUP_GOD_WAR_ROLE_RELATION_RSP = 6180; + CMD_TAKE_GOD_WAR_ROLE_RELATION_LEVEL_REWARD_REQ = 6181; + CMD_TAKE_GOD_WAR_ROLE_RELATION_LEVEL_REWARD_RSP = 6182; + CMD_GET_GOD_WAR_TALE_SHOP_REQ = 6183; + CMD_GET_GOD_WAR_TALE_SHOP_RSP = 6184; + CMD_BUY_GOD_WAR_SHOP_GOODS_REQ = 6185; + CMD_BUY_GOD_WAR_SHOP_GOODS_RSP = 6186; + CMD_TAKE_GOD_WAR_ROLE_STORY_REWARD_REQ = 6187; + CMD_TAKE_GOD_WAR_ROLE_STORY_REWARD_RSP = 6188; + CMD_REFRESH_GOD_WAR_TICKET_REQ = 6189; + CMD_REFRESH_GOD_WAR_TICKET_RSP = 6190; + CMD_PREDICT_GOD_WAR_EVENT_REQ = 6191; + CMD_PREDICT_GOD_WAR_EVENT_RSP = 6192; + CMD_REFRESH_GOD_WAR_BUFF_EVENT_REQ = 6193; + CMD_REFRESH_GOD_WAR_BUFF_EVENT_RSP = 6194; + CMD_GET_GOD_WAR_ROLE_REQ = 6195; + CMD_GET_GOD_WAR_ROLE_RSP = 6196; + CMD_GET_GOD_WAR_TELEPORT_EVENT_REQ = 6197; + CMD_GET_GOD_WAR_TELEPORT_EVENT_RSP = 6198; + CMD_SWITCH_GOD_WAR_CHAPTER_REQ = 6199; + CMD_SWITCH_GOD_WAR_CHAPTER_RSP = 6200; + CMD_GET_GOD_WAR_LOBBY_REQ = 6201; + CMD_GET_GOD_WAR_LOBBY_RSP = 6202; + CMD_FINISH_GOD_WAR_LOBBY_ACTION_REQ = 6203; + CMD_FINISH_GOD_WAR_LOBBY_ACTION_RSP = 6204; + CMD_REFRESH_GOD_WAR_SHOP_GOODS_REQ = 6205; + CMD_REFRESH_GOD_WAR_SHOP_GOODS_RSP = 6206; + CMD_SKIP_GOD_WAR_STORY_NODE_REQ = 6207; + CMD_SKIP_GOD_WAR_STORY_NODE_RSP = 6208; + CMD_REFRESH_GOD_WAR_GACHA_REQ = 6209; + CMD_REFRESH_GOD_WAR_GACHA_RSP = 6210; + CMD_GOD_WAR_DUMMY = 6299; +} + +enum GodWarEffectConditionType { + GOD_WAR_EFFECT_CONDITION_TYPE_NONE = 0; + GOD_WAR_EFFECT_CONDITION_CURRENT = 1; + GOD_WAR_EFFECT_CONDITION_SNAPSHOT_SHOP = 2; +} + +enum GodWarInitBuffLevelType { + GOD_WAR_INIT_BUFF_LEVEL_NONE = 0; + GOD_WAR_INIT_BUFF_LEVEL_SETTLED = 1; + GOD_WAR_INIT_BUFF_LEVEL_ALL = 2; +} + +enum GodWarEffectType { + GOD_WAR_EFFECT_TYPE_NONE = 0; + GOD_WAR_EFFECT_ABILITY = 1; + GOD_WAR_EFFECT_ADD_TELEPORT_REFRESH_TIMES = 3; + GOD_WAR_EFFECT_MATERIAL_EVENT_ADD_RATIO = 4; + GOD_WAR_EFFECT_ADD_INIT_COIN_NUM = 5; + GOD_WAR_EFFECT_BUFF_GOODS_DISCOUNT = 6; + GOD_WAR_EFFECT_LEVELUP_BUFF_GOODS_DISCOUNT = 7; + GOD_WAR_EFFECT_ADD_BUFF_POOL_QUALITY = 10; + GOD_WAR_EFFECT_ADD_SHOP_BUFF_GOODS_NUM = 11; + GOD_WAR_EFFECT_ADD_SHOP_LEVELUP_BUFF_GOODS_NUM = 12; + GOD_WAR_EFFECT_ADD_REVIVE_TIMES = 13; + GOD_WAR_EFFECT_REVIVE_HP_SP_PERCENT = 14; + GOD_WAR_EFFECT_ADD_BUFF_SUIT_INIT_LEVEL = 15; + GOD_WAR_EFFECT_SHOP_SPECIAL_DISCOUNT = 16; + GOD_WAR_EFFECT_MATERIAL_EVENT_SUB_RATIO = 17; + GOD_WAR_EFFECT_ADD_SPECIFIED_NUM_BUFF_INIT_LEVEL = 18; + GOD_WAR_EFFECT_SPECIFIED_QUALITY_BUFF_GOODS_DISCOUNT = 19; + GOD_WAR_EFFECT_SPECIFIED_QUALITY_LEVEL_UP_BUFF_GOODS_DISCOUNT = 20; + GOD_WAR_EFFECT_ADD_TELEPORT_REFRESH_TIMES_BY_OVERALL = 21; + GOD_WAR_EFFECT_ADD_GACHA_REFRESH_TIMES_BY_OVERALL = 22; + GOD_WAR_EFFECT_ADD_BUFF_REFRESH_TIMES = 23; +} + +enum GodWarBuffQualityType { + GOD_WAR_BUFF_QUALITY_TYPE_NONE = 0; + GOD_WAR_BUFF_QUALITY_BASE = 1; + GOD_WAR_BUFF_QUALITY_CORE_ARTIFACT = 2; + GOD_WAR_BUFF_QUALITY_CORE = 3; + GOD_WAR_BUFF_QUALITY_AVATAR_SPECIAL = 4; +} + +enum GodWarSiteStatus { + GOD_WAR_SITE_STATUS_INVALID = 0; + GOD_WAR_SITE_STATUS_HIDE = 1; + GOD_WAR_SITE_STATUS_SHOW = 2; + GOD_WAR_SITE_STATUS_UNLOCKED = 3; + GOD_WAR_SITE_STATUS_CLOSED = 4; +} + +enum GodWarSiteType { + GOD_WAR_SITE_TYPE_NONE = 0; + GOD_WAR_SITE_TYPE_NORMAL = 1; + GOD_WAR_SITE_TYPE_REST = 2; + GOD_WAR_SITE_TYPE_BOSS = 3; + GOD_WAR_SITE_TYPE_FINAL_BOSS = 4; + GOD_WAR_SITE_TYPE_ALLEVIATION = 5; +} + +enum GodWarOverallRefreshType { + GOD_WAR_OVERALL_REFRESH_NONE = 0; + GOD_WAR_OVERALL_REFRESH_DAILY = 1; + GOD_WAR_OVERALL_REFRESH_WEEKLY = 2; +} + +enum GodWarBitmapType { + GOD_WAR_BITMAP_TYPE_NONE = 0; + GOD_WAR_BITMAP_EVENT = 1; + GOD_WAR_BITMAP_NO_REPEAT_SETTLE_EVENT = 2; +} + +enum GodWarBonusType { + GOD_WAR_BONUS_TYPE_NONE = 0; + GOD_WAR_BONUS_APPEND = 1; + GOD_WAR_BONUS_ADD = 2; + GOD_WAR_BONUS_REFRESH = 3; +} + +enum GodWarRoleType { + GOD_WAR_ROLE_NONE = 0; + GOD_WAR_ROLE_MEMORY_DEPRECATED = 1; + GOD_WAR_ROLE_AVATAR = 2; + GOD_WAR_ROLE_MEMORY = 3; +} + +enum GodWarFlagOperator { + GOD_WAR_FLAG_OPERATOR_INVALID = 0; + GOD_WAR_FLAG_OPERATOR_AND = 1; + GOD_WAR_FLAG_OPERATOR_OR = 2; + GOD_WAR_FLAG_OPERATOR_NOT = 3; + GOD_WAR_FLAG_OPERATOR_EQ = 4; + GOD_WAR_FLAG_OPERATOR_GT = 5; + GOD_WAR_FLAG_OPERATOR_LT = 6; + GOD_WAR_FLAG_OPERATOR_COUNT_GE = 7; + GOD_WAR_FLAG_OPERATOR_SUM_GE = 8; + GOD_WAR_FLAG_OPERATOR_COUNT_LT = 9; + GOD_WAR_FLAG_OPERATOR_SUM_LT = 10; + GOD_WAR_FLAG_OPERATOR_COUNT_EQ = 11; + GOD_WAR_FLAG_OPERATOR_SUM_EQ = 12; +} + +enum GodWarFlagType { + GOD_WAR_FLAG_TYPE_NONE = 0; + GOD_WAR_FLAG_GROUP = 1; + GOD_WAR_FLAG_OVERALL = 2; + GOD_WAR_FLAG_AVATAR = 3; + GOD_WAR_FLAG_BUFF = 4; + GOD_WAR_FLAG_CUR_SITE = 5; + GOD_WAR_FLAG_CUR_SITE_TYPE = 6; + GOD_WAR_FLAG_EXTRA_ITEM = 7; + GOD_WAR_FLAG_SETTLE_EVENT = 8; + GOD_WAR_FLAG_PUNISH_LEVEL = 9; + GOD_WAR_FLAG_PUNISH_BUFF = 10; + GOD_WAR_FLAG_MISSION_FINISH = 11; + GOD_WAR_FLAG_LOBBY_NPC = 12; + GOD_WAR_FLAG_BITMAP = 13; + GOD_WAR_FLAG_CUR_TALE = 14; + GOD_WAR_FLAG_STAGE_TAG = 15; + GOD_WAR_FLAG_MISSION_STATUS = 16; + GOD_WAR_FLAG_SHOPPING_COST = 17; + GOD_WAR_FLAG_BUFF_LEVEL = 18; + GOD_WAR_FLAG_ALLEVIATION = 19; + GOD_WAR_FLAG_MATERIAL_NUM = 1002; + GOD_WAR_FLAG_TALENT_LEVEL = 1003; + GOD_WAR_FLAG_TALENT_TOTAL_LEVEL = 1004; + GOD_WAR_FLAG_TALENT_UNLOCK_NUM = 1005; + GOD_WAR_FLAG_ROLE_RELATION_LEVEL = 1006; + GOD_WAR_FLAG_SUPPORT_LEVEL = 1007; +} + +enum GodWarEventSourceType { + GOD_WAR_EVENT_SOURCE_TYPE_NONE = 0; + GOD_WAR_EVENT_SOURCE_NORMAL = 1; + GOD_WAR_EVENT_SOURCE_SITE_ENTER = 2; + GOD_WAR_EVENT_SOURCE_SITE_BUFF = 3; + GOD_WAR_EVENT_SOURCE_SHOP_RECOVER = 4; + GOD_WAR_EVENT_SOURCE_SHOP_CHANGE_STATE = 5; +} + +enum GodWarWeightType { + GOD_WAR_WEIGHT_TYPE_NONE = 0; + GOD_WAR_WEIGHT_NUM = 1; + GOD_WAR_WEIGHT_OVERALL = 2; +} + +enum GodWarEventType { + GOD_WAR_EVENT_TYPE_NONE = 0; + GOD_WAR_EVENT_RANDOM_STAGE_ONCE = 1; + GOD_WAR_EVENT_RANDOM_PLOT_ONCE = 2; + GOD_WAR_EVENT_RANDOM_REWARD_ONCE = 3; + GOD_WAR_EVENT_BUFF = 4; + GOD_WAR_EVENT_ENTER_SITE = 5; + GOD_WAR_EVENT_TELEPORT = 6; + GOD_WAR_EVENT_FIXED_STAGE = 7; + GOD_WAR_EVENT_FIXED_PLOT = 8; + GOD_WAR_EVENT_FIXED_REWARD = 9; + GOD_WAR_EVENT_SAVE = 10; + GOD_WAR_EVENT_OVERALL_ADD = 11; + GOD_WAR_EVENT_OVERALL_SUB = 12; + GOD_WAR_EVENT_OVERALL_SET = 13; + GOD_WAR_EVENT_PREDICT = 14; + GOD_WAR_EVENT_SHOP = 15; + GOD_WAR_EVENT_DROP_MATERIAL = 16; + GOD_WAR_EVENT_UNLOCK_COLLECTION = 17; + GOD_WAR_EVENT_STAGE_EXIT = 18; + GOD_WAR_EVENT_DROP_EFFECT_MATERIAL = 19; + GOD_WAR_EVENT_SYNC_LOBBY = 20; + GOD_WAR_EVENT_REFRESH_LOBBY = 21; + GOD_WAR_EVENT_CHANGE_STATE = 22; + GOD_WAR_EVENT_SCORE = 23; + GOD_WAR_EVENT_PANEL = 24; + GOD_WAR_EVENT_DROP_SCORE_COIN = 25; + GOD_WAR_EVENT_RANDOM_PLOT_REPLACEMENT = 26; + GOD_WAR_EVENT_TELEPORT_OVERALL = 27; + GOD_WAR_EVENT_OVERALL_ADD_IMMEDIATE = 28; + GOD_WAR_EVENT_OVERALL_SUB_IMMEDIATE = 29; + GOD_WAR_EVENT_OVERALL_SET_IMMEDIATE = 30; + GOD_WAR_EVENT_OVERALL_ADD_LOBBY = 31; + GOD_WAR_EVENT_OVERALL_SUB_LOBBY = 32; + GOD_WAR_EVENT_OVERALL_SET_LOBBY = 33; + GOD_WAR_EVENT_AVATAR_HP_ADD = 34; + GOD_WAR_EVENT_AVATAR_HP_SUB = 35; + GOD_WAR_EVENT_AVATAR_HP_SET = 36; + GOD_WAR_EVENT_CREATE_LOBBY_NPC = 37; + GOD_WAR_EVENT_TELEPORT_GROUP = 38; + GOD_WAR_EVENT_FORCE_END = 39; + GOD_WAR_EVENT_FORK = 40; + GOD_WAR_EVENT_APPEND_NPC_ACTION = 41; + GOD_WAR_EVENT_REMOVE_NPC = 42; + GOD_WAR_EVENT_DROP_COIN = 43; + GOD_WAR_EVENT_DROP_EFFECT_COIN = 44; + GOD_WAR_EVENT_OVERALL_SET_CLIENT = 45; + GOD_WAR_EVENT_OVERALL_SET_CLIENT_IMMEDIATE = 46; + GOD_WAR_EVENT_COST_COIN = 47; + GOD_WAR_EVENT_COST_EFFECT_COIN = 48; + GOD_WAR_EVENT_TALE_OVERALL_ADD_IMMEDIATE = 49; + GOD_WAR_EVENT_TALE_OVERALL_SUB_IMMEDIATE = 50; + GOD_WAR_EVENT_TALE_OVERALL_SET_IMMEDIATE = 51; + GOD_WAR_EVENT_BONUS = 52; + GOD_WAR_EVENT_TELEPORT_RECOVER = 53; + GOD_WAR_EVENT_ALLEVIATION_BUFF = 54; + GOD_WAR_EVENT_ALLEVIATION_ENTER_FLOOR = 55; + GOD_WAR_EVENT_ALLEVIATION_TELEPORT = 56; + GOD_WAR_EVENT_TRIGGER_EVENT_GROUP = 99; + GOD_WAR_EVENT_TRIGGER_EVENT_GROUP_UNIQUE = 100; + GOD_WAR_EVENT_RANDOM_TRIGGER_EVENT_ONCE = 101; + GOD_WAR_EVENT_RANDOM_TRIGGER_EVENT_REPLACEMENT = 102; + GOD_WAR_EVENT_RANDOM_TRIGGER_EVENT_WITHOUT_REPLACEMENT = 103; + GOD_WAR_EVENT_GACHA_RANDOM_SEED_TRIGGER_EVENT_REPLACEMENT = 104; +} + +enum GodWarEventRandomType { + GOD_WAR_EVENT_RANDOM_TYPE_NONE = 0; + GOD_WAR_EVENT_RANDOM_STAGE = 1; + GOD_WAR_EVENT_RANDOM_PLOT = 2; + GOD_WAR_EVENT_RANDOM_REWARD = 3; + GOD_WAR_EVENT_RANDOM_BUFF = 4; + GOD_WAR_EVENT_RANDOM_TELEPORT = 5; + GOD_WAR_EVENT_RANDOM_LOBBY = 6; + GOD_WAR_EVENT_RANDOM_MATERIAL = 7; + GOD_WAR_EVENT_RANDOM_TRIGGER = 8; +} + +enum GodWarEventCacheType { + GOD_WAR_EVENT_CACHE_TYPE_NONE = 0; + GOD_WAR_EVENT_CACHE_REWARD = 1; + GOD_WAR_EVENT_CACHE_OVERALL = 2; + GOD_WAR_EVENT_CACHE_MATERIAL = 3; + GOD_WAR_EVENT_CACHE_SCORE = 4; + GOD_WAR_EVENT_CACHE_LOBBY_NPC = 5; + GOD_WAR_EVENT_CACHE_COIN = 6; +} + +enum GodWarTriggerType { + GOD_WAR_TRIGGER_NORMAL = 0; + GOD_WAR_TRIGGER_STAGE_REPORT = 1; + GOD_WAR_TRIGGER_NPC_ACTION = 2; + GOD_WAR_TRIGGER_OVERALL_REPORT = 3; + GOD_WAR_TRIGGER_ALLEVIATION_TELEPORT = 4; +} + +enum GodWarMaterialType { + GOD_WAR_MATERIAL_TYPE_NONE = 0; + GOD_WAR_MATERIAL_CHALLENGE_COIN = 1; + GOD_WAR_MATERIAL_AVATAR_EXP = 2; + GOD_WAR_MATERIAL_ROLE_GIFT = 3; + GOD_WAR_MATERIAL_TALENT_POINT = 4; + GOD_WAR_MATERIAL_AVATAR_UNLOCK = 5; + GOD_WAR_MATERIAL_SUPPORT_AVATAR_UNLOCK = 6; + GOD_WAR_MATERIAL_DECORATION_UNLOCK = 7; + GOD_WAR_MATERIAL_ROLE_UPGRADE = 8; + GOD_WAR_MATERIAL_AVATAR_UPGRADE = 9; +} + +enum GodWarRefreshTicketType { + GOD_WAR_REFRESH_TICKET_TYPE_NONE = 0; + GOD_WAR_REFRESH_TICKET_WEEK_DAY = 1; +} + +enum GodWarTaleType { + GOD_WAR_TALE_TYPE_NONE = 0; + GOD_WAR_TALE_STORY_CHALLENGE = 1; + GOD_WAR_TALE_AVATAR_CHALLENGE = 2; + GOD_WAR_TALE_WEEKLY_CHALLENGE = 3; + GOD_WAR_TALE_LOBBY = 4; +} + +enum GodWarNpcType { + GOD_WAR_NPC_NONE = 0; + GOD_WAR_NPC_MAIN_LINE = 1; + GOD_WAR_NPC_BRANCH_LINE = 2; +} + +enum GodWarSupportAvatarSlotLimitLevel { + GOD_WAR_SUPPORT_AVATAR_SLOT_LIMIT_LEVEL_NONE = 0; + GOD_WAR_SUPPORT_AVATAR_SLOT_SPECIFIC = 1; + GOD_WAR_SUPPORT_AVATAR_SLOT_NORMAL = 2; + GOD_WAR_SUPPORT_AVATAR_SLOT_LOCK = 3; +} + +enum GodWarDataSourceType { + GOD_WAR_DATA_SOURCE_TYPE_NONE = 0; + GOD_WAR_DATA_SOURCE_CUR_TALE = 1; + GOD_WAR_DATA_SOURCE_SPECIFIC_TALE = 2; +} + +// CmdID: 8150 +message GourmetHuntGetActivityReq { + uint32 activity_id = 1; +} + +message GourmetHuntWeapon { + uint32 weapon_id = 1; + repeated uint32 unlocked_module_list = 2; +} + +message GourmetHuntClearableArchive { + uint32 map_id = 1; + uint32 room_id = 2; + uint32 hp = 3; + uint32 sp = 4; + uint32 explore_buff_id = 5; + repeated GourmetHuntIngredient collect_ingredient_list = 6; + repeated uint32 killed_monster_list = 7; + repeated uint32 destroyed_entity_list = 8; + string transaction_str = 9; + repeated uint32 secondary_weapon_list = 10; + uint32 room_pos_x = 11; + uint32 room_pos_y = 12; +} + +message GourmetHuntUnlockedMapRoom { + uint32 map_id = 1; + repeated uint32 room_id_list = 2; +} + +message GourmetHuntExploreArchive { + GourmetHuntClearableArchive clearable_archive = 1; + repeated uint32 unlocked_map_list = 2; + repeated uint32 unlocked_teleport_list = 3; + repeated uint32 opened_treasure_list = 4; + repeated uint32 killed_boss_list = 5; + repeated GourmetHuntUnlockedMapRoom unlocked_map_room_list = 6; + repeated uint32 triggered_entity_list = 7; +} + +message GourmetHuntIngredient { + uint32 id = 1; + uint32 num = 2; +} + +message GourmetHuntActivity { + uint32 activity_id = 1; + uint32 level = 2; + uint32 total_revenue = 3; + uint32 total_praise = 4; + repeated uint32 recipe_list = 5; + repeated uint32 furniture_list = 6; + repeated GourmetHuntWeapon weapon_list = 7; + GourmetHuntExploreArchive explore_archive = 8; + repeated GourmetHuntIngredient ingredient_list = 9; + repeated uint32 unlocked_ingredient_list = 10; + uint32 cur_rating = 11; + repeated GourmetHuntManagementMenu menu_list = 12; + uint32 hot_ingredient_id = 13; + repeated GourmetHuntManagementMenu sold_menu_list = 14; + uint32 max_revenue_in_one_management = 15; + uint32 max_praise_in_one_management = 16; + uint32 total_management_times = 17; + uint32 cur_daily_mission_group_id = 18; + uint32 management_weather_id = 19; + repeated CommonUintKVStruct challenge_map_score_list = 20; + uint32 opened_branch_store_num = 21; +} + +// CmdID: 8151 +message GourmetHuntGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GourmetHuntGetActivityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + GourmetHuntActivity activity = 3; +} + +// CmdID: 8152 +message GourmetHuntLevelUpReq { + uint32 activity_id = 1; + uint32 target_level = 2; +} + +// CmdID: 8153 +message GourmetHuntLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + TARGET_LEVEL_ERROR = 3; + PRE_MISSION_UNFINISHED = 4; + GOLD_LACK = 5; + IN_EXPLORE = 6; + } + + GourmetHuntLevelUpRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 target_level = 3; +} + +// CmdID: 8154 +message GourmetHuntUnlockWeaponModuleReq { + uint32 activity_id = 1; + uint32 weapon_id = 2; + uint32 module_id = 3; +} + +// CmdID: 8155 +message GourmetHuntUnlockWeaponModuleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + WEAPON_LOCKED = 3; + PRE_MODULE_LIMIT = 4; + MODULE_ERROR = 5; + COST_LIMIT = 6; + LEVEL_LIMIT = 7; + } + + GourmetHuntUnlockWeaponModuleRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 weapon_id = 3; + uint32 module_id = 4; +} + +// CmdID: 8156 +message GourmetHuntUnlockFurnitureReq { + uint32 activity_id = 1; + uint32 furniture_id = 2; +} + +// CmdID: 8157 +message GourmetHuntUnlockFurnitureRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + RATING_LIMIT = 3; + COST_LIMIT = 4; + ALREADY_UNLOCKED = 5; + FURNITURE_ID_ERROR = 6; + } + + GourmetHuntUnlockFurnitureRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 furniture_id = 3; +} + +message GourmetHuntManagementMenu { + uint32 recipe_id = 1; + uint32 cook_num = 2; +} + +// CmdID: 8158 +message GourmetHuntStartManagementReq { + uint32 activity_id = 1; + repeated GourmetHuntManagementMenu menu_list = 2; + GourmetHuntIdentityType management_identity_type = 3; +} + +// CmdID: 8159 +message GourmetHuntStartManagementRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + RECIPE_ERROR = 3; + INGREDIENT_LACK = 4; + IN_OTHER_MANAGEMENT = 5; + IN_EXPLORE = 6; + INVALID_IDENTITY = 7; + } + + GourmetHuntStartManagementRsp.Retcode retcode = 1; + uint32 activity_id = 2; + string transaction_str = 3; +} + +// CmdID: 8160 +message GourmetHuntStopManagementReq { + uint32 activity_id = 1; + repeated GourmetHuntManagementMenu settled_menu_list = 2; + uint32 gold_earned = 3; + uint32 praise = 4; + uint32 rank_value = 5; + uint32 finished_special_mission_npc_id = 6; +} + +// CmdID: 8161 +message GourmetHuntStopManagementRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + MENU_MISMATCH = 3; + NOT_IN_MANAGEMENT = 4; + GOLD_ERROR = 5; + INGREDIENT_LACK = 6; + } + + GourmetHuntStopManagementRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 hot_ingredient_id = 3; + uint32 buff_id = 4; +} + +// CmdID: 8162 +message GourmetHuntStartExploreReq { + uint32 activity_id = 1; + string transaction_str = 2; + uint32 map_id = 3; + uint32 teleport_id = 4; + uint32 room_pos_x = 5; + uint32 room_pos_y = 6; + repeated uint32 secondary_weapon_list = 7; +} + +// CmdID: 8163 +message GourmetHuntStartExploreRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + TRANSACTION_MISMATCH = 3; + MAP_IS_LOCKED = 4; + TELEPORT_ERROR = 5; + IN_MANAGEMENT = 6; + SECONDARY_WEAPON_SIZE_ERROR = 7; + SECONDARY_WEAPON_ERROR = 8; + } + + GourmetHuntStartExploreRsp.Retcode retcode = 1; + uint32 activity_id = 2; + GourmetHuntExploreArchive archive = 3; +} + +// CmdID: 8164 +message GourmetHuntStopExploreReq { + enum EndStatus { + WIN = 0; + TIMEOUT = 1; + DEAD = 2; + EXIT = 3; + } + + uint32 activity_id = 1; + string transaction_str = 2; + repeated GourmetHuntIngredient take_out_ingredient_list = 3; + GourmetHuntClearableArchive report_archive = 4; + uint32 score = 5; + GourmetHuntStopExploreReq.EndStatus end_status = 6; +} + +// CmdID: 8165 +message GourmetHuntStopExploreRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + TRANSACTION_MISMATCH = 3; + STAMINA_LACK = 4; + NOT_IN_EXPLORE = 5; + INGREDIENT_ID_ERROR = 6; + INGREDIENT_NUM_ERROR = 7; + STAMINA_LIMIT = 8; + ARCHIVE_MISMATCH = 9; + } + + GourmetHuntStopExploreRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8166 +message GourmetHuntOpenTreasureReq { + uint32 activity_id = 1; + string transaction_str = 2; + uint32 treasure_id = 3; +} + +// CmdID: 8167 +message GourmetHuntOpenTreasureRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + TRANSACTION_MISMATCH = 3; + TREASURE_IS_OPENED = 4; + TREASURE_ID_ERROR = 5; + MAP_MISMATCH = 6; + NOT_IN_EXPLORE = 7; + ROOM_MISMATCH = 8; + MAP_TYPE_ERROR = 9; + } + + GourmetHuntOpenTreasureRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 treasure_id = 3; + RewardData reward = 4; +} + +// CmdID: 8168 +message GourmetHuntTriggerTeleportReq { + uint32 activity_id = 1; + string transaction_str = 2; + uint32 map_id = 3; + uint32 teleport_id = 4; + GourmetHuntClearableArchive report_archive = 5; +} + +// CmdID: 8169 +message GourmetHuntTriggerTeleportRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + TRANSACTION_MISMATCH = 3; + TELEPORT_ID_ERROR = 4; + NOT_IN_EXPLORE = 5; + ARCHIVE_MISMATCH = 6; + MAP_IS_LOCKED = 7; + ROOM_IS_LOCKED = 8; + SECONDARY_WEAPON_SIZE_ERROR = 9; + SECONDARY_WEAPON_ERROR = 10; + MAP_TYPE_ERROR = 11; + } + + GourmetHuntTriggerTeleportRsp.Retcode retcode = 1; + uint32 activity_id = 2; + GourmetHuntExploreArchive archive = 3; +} + +// CmdID: 8170 +message GourmetHuntKillBossReq { + uint32 activity_id = 1; + string transaction_str = 2; + uint32 boss_id = 3; +} + +// CmdID: 8171 +message GourmetHuntKillBossRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + TRANSACTION_MISMATCH = 3; + ALREADY_DEAD = 4; + NOT_IN_EXPLORE = 5; + BOSS_ID_ERROR = 6; + ROOM_MISMATCH = 7; + MAP_TYPE_ERROR = 8; + } + + GourmetHuntKillBossRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 boss_id = 3; +} + +// CmdID: 8172 +message GourmetHuntEnterRoomReq { + uint32 activity_id = 1; + string transaction_str = 2; + uint32 room_id = 3; + GourmetHuntClearableArchive report_archive = 4; +} + +// CmdID: 8173 +message GourmetHuntEnterRoomRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + TRANSACTION_MISMATCH = 3; + NOT_IN_EXPLORE = 4; + MAP_MISMATCH = 5; + COLLECTED_INGREDIENT_ERROR = 6; + ROOM_ID_ERROR = 7; + ARCHIVE_MISMATCH = 8; + SECONDARY_WEAPON_SIZE_ERROR = 9; + SECONDARY_WEAPON_ERROR = 10; + MAP_TYPE_ERROR = 11; + } + + GourmetHuntEnterRoomRsp.Retcode retcode = 1; + uint32 activity_id = 2; + GourmetHuntExploreArchive archive = 3; +} + +// CmdID: 8174 +message GourmetHuntGetRankReq { + uint32 activity_id = 1; + uint32 map_id = 2; +} + +// CmdID: 8175 +message GourmetHuntGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NO_RANK = 3; + } + + GourmetHuntGetRankRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 map_id = 3; + uint32 rank = 4; + uint32 rank_percent = 5; + RankShowData rank_data = 6; +} + +// CmdID: 8176 +message GourmetHuntTriggerEntityReq { + uint32 activity_id = 1; + string transaction_str = 2; + uint32 entity_id = 3; +} + +// CmdID: 8177 +message GourmetHuntTriggerEntityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + TRANSACTION_MISMATCH = 3; + NOT_IN_EXPLORE = 4; + MAP_TYPE_ERROR = 5; + } + + GourmetHuntTriggerEntityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 entity_id = 3; +} + +// CmdID: 8178 +message GourmetHuntDailyStaminaRecoveryNotify { + uint32 activity_id = 1; + uint32 recovery_num = 2; +} + +// CmdID: 8179 +message GourmetHuntBuildBranchStoreReq { + uint32 activity_id = 1; + uint32 branch_store_id = 2; +} + +// CmdID: 8180 +message GourmetHuntBuildBranchStoreRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + BRANCH_STORE_ID_ERROR = 3; + PRE_MISSION_LIMIT = 4; + GOLD_LIMIT = 5; + } + + GourmetHuntBuildBranchStoreRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 branch_store_id = 3; +} + +// CmdID: 8181 +message GourmetHuntOpenBranchStoreReq { + uint32 activity_id = 1; + uint32 branch_store_id = 2; +} + +// CmdID: 8182 +message GourmetHuntOpenBranchStoreRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + BRANCH_STORE_ID_ERROR = 3; + NEED_BUILD = 4; + } + + GourmetHuntOpenBranchStoreRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 opened_branch_store_num = 3; +} + +enum CmdTypeGourmethunt { + CMD_TYPE_GOURMETHUNT_NONE = 0; + CMD_GOURMET_HUNT_GET_ACTIVITY_REQ = 8150; + CMD_GOURMET_HUNT_GET_ACTIVITY_RSP = 8151; + CMD_GOURMET_HUNT_LEVEL_UP_REQ = 8152; + CMD_GOURMET_HUNT_LEVEL_UP_RSP = 8153; + CMD_GOURMET_HUNT_UNLOCK_WEAPON_MODULE_REQ = 8154; + CMD_GOURMET_HUNT_UNLOCK_WEAPON_MODULE_RSP = 8155; + CMD_GOURMET_HUNT_UNLOCK_FURNITURE_REQ = 8156; + CMD_GOURMET_HUNT_UNLOCK_FURNITURE_RSP = 8157; + CMD_GOURMET_HUNT_START_MANAGEMENT_REQ = 8158; + CMD_GOURMET_HUNT_START_MANAGEMENT_RSP = 8159; + CMD_GOURMET_HUNT_STOP_MANAGEMENT_REQ = 8160; + CMD_GOURMET_HUNT_STOP_MANAGEMENT_RSP = 8161; + CMD_GOURMET_HUNT_START_EXPLORE_REQ = 8162; + CMD_GOURMET_HUNT_START_EXPLORE_RSP = 8163; + CMD_GOURMET_HUNT_STOP_EXPLORE_REQ = 8164; + CMD_GOURMET_HUNT_STOP_EXPLORE_RSP = 8165; + CMD_GOURMET_HUNT_OPEN_TREASURE_REQ = 8166; + CMD_GOURMET_HUNT_OPEN_TREASURE_RSP = 8167; + CMD_GOURMET_HUNT_TRIGGER_TELEPORT_REQ = 8168; + CMD_GOURMET_HUNT_TRIGGER_TELEPORT_RSP = 8169; + CMD_GOURMET_HUNT_KILL_BOSS_REQ = 8170; + CMD_GOURMET_HUNT_KILL_BOSS_RSP = 8171; + CMD_GOURMET_HUNT_ENTER_ROOM_REQ = 8172; + CMD_GOURMET_HUNT_ENTER_ROOM_RSP = 8173; + CMD_GOURMET_HUNT_GET_RANK_REQ = 8174; + CMD_GOURMET_HUNT_GET_RANK_RSP = 8175; + CMD_GOURMET_HUNT_TRIGGER_ENTITY_REQ = 8176; + CMD_GOURMET_HUNT_TRIGGER_ENTITY_RSP = 8177; + CMD_GOURMET_HUNT_DAILY_STAMINA_RECOVERY_NOTIFY = 8178; + CMD_GOURMET_HUNT_BUILD_BRANCH_STORE_REQ = 8179; + CMD_GOURMET_HUNT_BUILD_BRANCH_STORE_RSP = 8180; + CMD_GOURMET_HUNT_OPEN_BRANCH_STORE_REQ = 8181; + CMD_GOURMET_HUNT_OPEN_BRANCH_STORE_RSP = 8182; +} + +enum GourmetHuntFurnitureType { + GOURMET_HUNT_FURNITURE_TYPE_NONE = 0; + GOURMET_HUNT_FURNITURE_TYPE_NORMAL = 1; + GOURMET_HUNT_FURNITURE_TYPE_TABLE = 2; + GOURMET_HUNT_FURNITURE_TYPE_INGREDIENT_BOX = 3; + GOURMET_HUNT_FURNITURE_TYPE_STAMINA_BOX = 4; +} + +enum GourmetHuntEntityType { + GOURMET_HUNT_ENTITY_TYPE_NONE = 0; + GOURMET_HUNT_ENTITY_TYPE_ENV_DESTRUCTIBLE = 1; + GOURMET_HUNT_ENTITY_TYPE_TREASURE_BOX = 2; + GOURMET_HUNT_ENTITY_TYPE_TELEPORT = 3; + GOURMET_HUNT_ENTITY_TYPE_MONSTER_ALTAR = 4; + GOURMET_HUNT_ENTITY_TYPE_HIDDEN_WALL = 5; + GOURMET_HUNT_ENTITY_TYPE_OPTICAL_CABLE = 6; + GOURMET_HUNT_ENTITY_TYPE_CONTROLLER = 7; +} + +enum GourmetHuntMonsterType { + GOURMET_HUNT_MONSTER_TYPE_NONE = 0; + GOURMET_HUNT_MONSTER_TYPE_NORMAL_MONSTER = 1; + GOURMET_HUNT_MONSTER_TYPE_BOSS = 2; + GOURMET_HUNT_MONSTER_TYPE_ALTAR_TOKEN = 3; + GOURMET_HUNT_MONSTER_TYPE_CHALLENGE_MONSTER = 4; +} + +enum GourmetHuntMapType { + GOURMET_HUNT_MAP_TYPE_NONE = 0; + GOURMET_HUNT_MAP_TYPE_STORE = 1; + GOURMET_HUNT_MAP_TYPE_EXPLORE = 2; + GOURMET_HUNT_MAP_TYPE_CHALLENGE = 3; +} + +enum GourmetHuntIdentityType { + GOURMET_HUNT_IDENTITY_TYPE_NONE = 0; + GOURMET_HUNT_IDENTITY_TYPE_WAITER = 1; + GOURMET_HUNT_IDENTITY_TYPE_CHEF = 2; + GOURMET_HUNT_IDENTITY_TYPE_MANAGER = 3; +} + +// CmdID: 8500 +message KianaAutoChessGetActivityReq { + uint32 activity_id = 1; +} + +message KianaAutoChessActivity { + uint32 activity_id = 1; + KianaAutoChessStage cur_story_stage = 2; + uint32 lobby_id = 3; + uint32 rank_score = 4; + uint32 highest_rank_score = 5; + uint32 daily_pvp_material_drop_num = 6; + uint32 max_daily_pvp_material_drop_num = 7; + KianaAutoChessStage cur_challenge_stage = 8; +} + +message KianaAutoChessStageTurn { + uint32 turn = 1; + bytes client_ext = 2; +} + +message KianaAutoChessStage { + uint32 stage_id = 1; + repeated KianaAutoChessStageTurn saved_turn_list = 2; + string transaction_str = 3; +} + +// CmdID: 8501 +message KianaAutoChessGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + KianaAutoChessGetActivityRsp.Retcode retcode = 1; + KianaAutoChessActivity activity = 2; + uint32 activity_id = 3; +} + +// CmdID: 8502 +message KianaAutoChessSaveTurnReq { + uint32 activity_id = 1; + uint32 stage_id = 2; + uint32 turn = 3; + bytes client_ext = 4; +} + +// CmdID: 8503 +message KianaAutoChessSaveTurnRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + SIZE_LIMIT = 3; + } + + KianaAutoChessSaveTurnRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8504 +message KianaAutoChessPvpBeginBattleNotify { + uint32 activity_id = 1; + uint32 lobby_id = 2; + uint32 battle_id = 3; + string fightserver_ip_v4 = 4; + string fightserver_ip_v6 = 5; + uint32 fightserver_port = 6; +} + +// CmdID: 8505 +message KianaAutoChessPvpPlayerSettleNotify { + uint32 rank = 1; + bool is_abandon = 2; + uint32 celebrate_material_num = 3; +} + +// CmdID: 8506 +message KianaAutoChessPvpEnterBattleReq { + uint32 battle_id = 1; +} + +message KianaAutoChessPvpCombo { + uint32 combo_id = 1; + uint32 card_num = 2; +} + +message KianaAutoChessPvpTurnRecord { + uint32 turn = 1; + uint32 opponent_uid = 2; + uint32 sub_hp = 3; + uint32 opponent_sub_hp = 4; + bool is_opponent_mirrored = 5; +} + +message KianaAutoChessPvpPlayer { + uint32 uid = 1; + string nickname = 2; + uint32 custom_head_id = 3; + uint32 frame_id = 4; + uint32 rank = 5; + int32 hp = 6; + uint32 need_robot_num = 7; + uint32 bag_level = 8; + repeated uint32 max_rarity_card_id_list = 9; + repeated KianaAutoChessPvpCombo combo_list = 10; + repeated KianaAutoChessPvpTurnRecord turn_record_list = 11; + bool is_online = 12; +} + +message KianaAutoChessPvpOpponent { + uint32 uid = 1; + repeated uint32 use_item_list = 2; + bool is_mirrored = 3; + repeated uint32 round_score_list = 4; + uint32 enemy_remain_hp = 5; + bool is_item_high_level = 6; + uint32 monster_conquered_ratio = 7; +} + +message KianaAutoChessPvpCard { + uint32 unique_id = 1; + uint32 card_id = 2; + uint32 progress = 3; + bool is_selected = 4; + bool is_overflow = 5; +} + +message KianaAutoChessPvpBag { + uint32 level = 1; + uint32 coin = 2; + repeated KianaAutoChessPvpCard card_list = 3; + repeated uint32 rune_list = 4; + repeated uint32 item_list = 5; + uint32 level_up_cost_reduce = 6; + uint32 max_card_num = 7; +} + +message KianaAutoChessPvpBattleShop { + uint32 refresh_times = 1; + repeated KianaAutoChessPvpCard card_list = 2; + bool is_locked = 3; + uint32 free_refresh_times = 4; + uint32 free_buy_card_times = 5; + uint32 refresh_cost = 6; +} + +message KianaAutoChessPvpBattleWaitSelectRune { + uint32 left_refresh_times = 1; + repeated uint32 rune_list = 2; +} + +message KianaAutoChessPvpCardBattleInfo { + uint32 damage = 3; + uint32 card_main_id = 4; +} + +message KianaAutoChessPvpBattleTurn { + uint32 turn = 1; + KianaAutoChessPvpBattleStatus status = 2; + KianaAutoChessPvpBattleShop shop = 3; + KianaAutoChessPvpBattleWaitSelectRune wait_select_rune = 4; + repeated KianaAutoChessPvpCardBattleInfo card_battle_info_list = 5; + KianaAutoChessPvpOpponent opponent = 6; + repeated uint32 use_item_list = 7; + uint32 turn_begin_time = 8; + uint32 turn_end_time = 9; +} + +message KianaAutoChessPvpBattle { + uint32 battle_id = 1; + KianaAutoChessPvpBattleTurn turn = 2; + repeated KianaAutoChessPvpPlayer player_list = 3; + KianaAutoChessPvpBag bag = 4; + uint32 total_got_item_num = 5; + uint32 total_use_item_num = 6; + uint32 shop_refresh_times = 7; + uint32 total_got_coin_num = 8; + uint32 total_win_times = 9; + bool is_prevent_death = 10; + repeated KianaAutoChessPvpOverall overall_list = 11; + string transaction_str = 12; +} + +// CmdID: 8507 +message KianaAutoChessPvpEnterBattleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_BATTLE = 2; + } + + KianaAutoChessPvpEnterBattleRsp.Retcode retcode = 1; + KianaAutoChessPvpBattle battle = 2; + uint32 battle_id = 3; +} + +// CmdID: 8508 +message KianaAutoChessPvpGetBattleReq { + uint32 battle_id = 1; +} + +// CmdID: 8509 +message KianaAutoChessPvpGetBattleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + KianaAutoChessPvpGetBattleRsp.Retcode retcode = 1; + KianaAutoChessPvpBattle battle = 2; + uint32 battle_id = 3; +} + +// CmdID: 8510 +message KianaAutoChessPvpAbandonBattleReq { + uint32 battle_id = 1; +} + +// CmdID: 8511 +message KianaAutoChessPvpAbandonBattleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + KianaAutoChessPvpAbandonBattleRsp.Retcode retcode = 1; + uint32 battle_id = 2; +} + +// CmdID: 8512 +message KianaAutoChessPvpEndBattleNotify { + uint32 battle_id = 1; +} + +// CmdID: 8513 +message KianaAutoChessPvpSyncOpponentNotify { + uint32 battle_id = 1; + uint32 turn = 2; + KianaAutoChessPvpOpponent opponent = 3; + uint32 sub_hp = 4; + uint32 opponent_sub_hp = 5; + uint32 turn_score = 6; + uint32 opponent_turn_score = 7; +} + +// CmdID: 8514 +message KianaAutoChessPvpSyncActionNotify { + uint32 battle_id = 1; + uint32 uid = 2; + KianaAutoChessPvpActionType action_type = 3; + repeated uint32 action_param_list = 4; +} + +// CmdID: 8515 +message KianaAutoChessPvpUseItemReq { + uint32 battle_id = 1; + uint32 item_idx = 2; + uint32 item_id = 3; + uint32 got_num = 4; +} + +// CmdID: 8516 +message KianaAutoChessPvpUseItemRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STATUS_ERROR = 2; + ITEM_ERROR = 3; + } + + KianaAutoChessPvpUseItemRsp.Retcode retcode = 1; + uint32 battle_id = 2; +} + +// CmdID: 8517 +message KianaAutoChessPvpSellCardReq { + uint32 battle_id = 1; + repeated uint32 card_unique_id_list = 2; +} + +// CmdID: 8518 +message KianaAutoChessPvpSellCardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STATUS_ERROR = 2; + CARD_ERROR = 3; + } + + KianaAutoChessPvpSellCardRsp.Retcode retcode = 1; + uint32 battle_id = 2; +} + +// CmdID: 8519 +message KianaAutoChessPvpBuyCardReq { + uint32 battle_id = 1; + uint32 card_idx = 2; +} + +// CmdID: 8520 +message KianaAutoChessPvpBuyCardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STATUS_ERROR = 2; + LACK_COIN = 3; + BAG_FULL = 4; + } + + KianaAutoChessPvpBuyCardRsp.Retcode retcode = 1; + uint32 battle_id = 2; +} + +// CmdID: 8521 +message KianaAutoChessPvpRefreshShopReq { + uint32 battle_id = 1; + uint32 refresh_times = 2; +} + +// CmdID: 8522 +message KianaAutoChessPvpRefreshShopRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STATUS_ERROR = 2; + LACK_COIN = 3; + } + + KianaAutoChessPvpRefreshShopRsp.Retcode retcode = 1; + uint32 battle_id = 2; +} + +// CmdID: 8523 +message KianaAutoChessPvpLockShopReq { + uint32 battle_id = 1; + bool is_locked = 2; +} + +// CmdID: 8524 +message KianaAutoChessPvpLockShopRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STATUS_ERROR = 2; + } + + KianaAutoChessPvpLockShopRsp.Retcode retcode = 1; + uint32 battle_id = 2; + bool is_locked = 3; +} + +// CmdID: 8525 +message KianaAutoChessPvpSendEmojiReq { + uint32 battle_id = 1; + uint32 emoji_id = 2; +} + +// CmdID: 8526 +message KianaAutoChessPvpSendEmojiRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + IN_CD = 2; + } + + KianaAutoChessPvpSendEmojiRsp.Retcode retcode = 1; + uint32 battle_id = 2; + uint32 emoji_id = 3; + uint32 next_can_send_time = 4; +} + +// CmdID: 8527 +message KianaAutoChessPvpSelectRuneReq { + uint32 battle_id = 1; + uint32 rune_idx = 2; +} + +// CmdID: 8528 +message KianaAutoChessPvpSelectRuneRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STATUS_ERROR = 2; + RUNE_ERROR = 3; + } + + KianaAutoChessPvpSelectRuneRsp.Retcode retcode = 1; + uint32 battle_id = 2; + uint32 rune_idx = 3; +} + +// CmdID: 8529 +message KianaAutoChessPvpRefreshRuneReq { + uint32 battle_id = 1; + uint32 left_refresh_times = 2; + uint32 idx = 3; +} + +// CmdID: 8530 +message KianaAutoChessPvpRefreshRuneRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STATUS_ERROR = 2; + RUNE_ERROR = 3; + } + + KianaAutoChessPvpRefreshRuneRsp.Retcode retcode = 1; + uint32 battle_id = 2; + uint32 left_refresh_times = 3; + uint32 idx = 4; +} + +// CmdID: 8531 +message KianaAutoChessPvpUpgradeBagReq { + uint32 battle_id = 1; + uint32 target_level = 2; +} + +// CmdID: 8532 +message KianaAutoChessPvpUpgradeBagRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STATUS_ERROR = 2; + LACK_COIN = 3; + TARGET_LEVEL_ERROR = 4; + } + + KianaAutoChessPvpUpgradeBagRsp.Retcode retcode = 1; + uint32 battle_id = 2; + uint32 target_level = 3; +} + +message KianaAutoChessPvpOverall { + uint32 id = 1; + uint32 value = 2; +} + +// CmdID: 8533 +message KianaAutoChessPvpReportTurnReq { + uint32 battle_id = 1; + uint32 turn = 2; + repeated uint32 round_score_list = 3; + repeated KianaAutoChessPvpCardBattleInfo card_battle_info_list = 4; + uint32 enemy_remain_hp = 5; + uint32 got_coin_num = 6; + uint32 get_item_num = 7; + uint32 monster_conquered_ratio = 8; + repeated KianaAutoChessPvpOverall overall_list = 9; + int32 add_hp = 10; + uint32 lineup_id = 11; + uint32 honkai_disaster_damage = 12; + uint32 coin_num_got_by_combo = 13; +} + +// CmdID: 8534 +message KianaAutoChessPvpReportTurnRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STATUS_ERROR = 2; + HP_ERROR = 3; + } + + KianaAutoChessPvpReportTurnRsp.Retcode retcode = 1; + uint32 battle_id = 2; + uint32 turn = 3; +} + +message KianaAutoChessBattleMember { + uint32 uid = 1; + string nickname = 2; + uint32 custom_head_id = 3; + uint32 frame_id = 4; + uint32 rank_score = 5; + uint32 need_robot_num = 6; +} + +// CmdID: 8535 +message KianaAutoChessGetLobbyStatusReq { + uint32 activity_id = 1; + uint32 lobby_id = 2; +} + +// CmdID: 8536 +message KianaAutoChessGetLobbyStatusRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NO_LOBBY = 3; + TOO_OFTEN = 4; + } + + KianaAutoChessGetLobbyStatusRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 battle_id = 3; + uint32 lobby_id = 4; + string fightserver_ip_v4 = 5; + string fightserver_ip_v6 = 6; + uint32 fightserver_port = 7; +} + +// CmdID: 8537 +message KianaAutoChessClearStageRecordReq { + uint32 activity_id = 1; + uint32 stage_id = 2; +} + +// CmdID: 8538 +message KianaAutoChessClearStageRecordRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STAGE_ERROR = 3; + } + + KianaAutoChessClearStageRecordRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 stage_id = 3; +} + +// CmdID: 8539 +message KianaAutoChessStoryStageBeginReq { + uint32 activity_id = 1; + uint32 stage_id = 2; + uint32 turn = 3; + bool is_new_stage = 4; +} + +// CmdID: 8540 +message KianaAutoChessStoryStageBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STAGE_ERROR = 3; + } + + KianaAutoChessStoryStageBeginRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 stage_id = 3; + uint32 turn = 4; +} + +message KianaAutoChessPvpPlayerSettleInfo { + uint32 uid = 1; + uint32 rank = 2; + repeated KianaAutoChessPvpCardBattleInfo card_battle_info_list = 3; + repeated KianaAutoChessPvpOverall overall_list = 4; + uint32 honkai_disaster_damage = 5; + uint32 coin_num_got_by_combo = 6; + repeated KianaAutoChessPvpCombo combo_list = 7; + uint32 turn = 8; + bool is_abandon = 9; +} + +// CmdID: 8541 +message KianaAutoChessStoryStageEndReq { + uint32 activity_id = 1; + uint32 stage_id = 2; + StageEndStatus end_status = 3; + KianaAutoChessPvpPlayerSettleInfo settle_info = 4; +} + +// CmdID: 8542 +message KianaAutoChessStoryStageEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STAGE_ERROR = 3; + } + + KianaAutoChessStoryStageEndRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 stage_id = 3; +} + +// CmdID: 8543 +message KianaAutoChessPvpFightEndNotify { + uint32 battle_id = 1; + uint32 turn = 2; +} + +enum CmdTypeKianaautochess { + CMD_TYPE_KIANAAUTOCHESS_NONE = 0; + CMD_KIANA_AUTO_CHESS_GET_ACTIVITY_REQ = 8500; + CMD_KIANA_AUTO_CHESS_GET_ACTIVITY_RSP = 8501; + CMD_KIANA_AUTO_CHESS_SAVE_TURN_REQ = 8502; + CMD_KIANA_AUTO_CHESS_SAVE_TURN_RSP = 8503; + CMD_KIANA_AUTO_CHESS_PVP_BEGIN_BATTLE_NOTIFY = 8504; + CMD_KIANA_AUTO_CHESS_PVP_PLAYER_SETTLE_NOTIFY = 8505; + CMD_KIANA_AUTO_CHESS_PVP_ENTER_BATTLE_REQ = 8506; + CMD_KIANA_AUTO_CHESS_PVP_ENTER_BATTLE_RSP = 8507; + CMD_KIANA_AUTO_CHESS_PVP_GET_BATTLE_REQ = 8508; + CMD_KIANA_AUTO_CHESS_PVP_GET_BATTLE_RSP = 8509; + CMD_KIANA_AUTO_CHESS_PVP_ABANDON_BATTLE_REQ = 8510; + CMD_KIANA_AUTO_CHESS_PVP_ABANDON_BATTLE_RSP = 8511; + CMD_KIANA_AUTO_CHESS_PVP_END_BATTLE_NOTIFY = 8512; + CMD_KIANA_AUTO_CHESS_PVP_SYNC_OPPONENT_NOTIFY = 8513; + CMD_KIANA_AUTO_CHESS_PVP_SYNC_ACTION_NOTIFY = 8514; + CMD_KIANA_AUTO_CHESS_PVP_USE_ITEM_REQ = 8515; + CMD_KIANA_AUTO_CHESS_PVP_USE_ITEM_RSP = 8516; + CMD_KIANA_AUTO_CHESS_PVP_SELL_CARD_REQ = 8517; + CMD_KIANA_AUTO_CHESS_PVP_SELL_CARD_RSP = 8518; + CMD_KIANA_AUTO_CHESS_PVP_BUY_CARD_REQ = 8519; + CMD_KIANA_AUTO_CHESS_PVP_BUY_CARD_RSP = 8520; + CMD_KIANA_AUTO_CHESS_PVP_REFRESH_SHOP_REQ = 8521; + CMD_KIANA_AUTO_CHESS_PVP_REFRESH_SHOP_RSP = 8522; + CMD_KIANA_AUTO_CHESS_PVP_LOCK_SHOP_REQ = 8523; + CMD_KIANA_AUTO_CHESS_PVP_LOCK_SHOP_RSP = 8524; + CMD_KIANA_AUTO_CHESS_PVP_SEND_EMOJI_REQ = 8525; + CMD_KIANA_AUTO_CHESS_PVP_SEND_EMOJI_RSP = 8526; + CMD_KIANA_AUTO_CHESS_PVP_SELECT_RUNE_REQ = 8527; + CMD_KIANA_AUTO_CHESS_PVP_SELECT_RUNE_RSP = 8528; + CMD_KIANA_AUTO_CHESS_PVP_REFRESH_RUNE_REQ = 8529; + CMD_KIANA_AUTO_CHESS_PVP_REFRESH_RUNE_RSP = 8530; + CMD_KIANA_AUTO_CHESS_PVP_UPGRADE_BAG_REQ = 8531; + CMD_KIANA_AUTO_CHESS_PVP_UPGRADE_BAG_RSP = 8532; + CMD_KIANA_AUTO_CHESS_PVP_REPORT_TURN_REQ = 8533; + CMD_KIANA_AUTO_CHESS_PVP_REPORT_TURN_RSP = 8534; + CMD_KIANA_AUTO_CHESS_GET_LOBBY_STATUS_REQ = 8535; + CMD_KIANA_AUTO_CHESS_GET_LOBBY_STATUS_RSP = 8536; + CMD_KIANA_AUTO_CHESS_CLEAR_STAGE_RECORD_REQ = 8537; + CMD_KIANA_AUTO_CHESS_CLEAR_STAGE_RECORD_RSP = 8538; + CMD_KIANA_AUTO_CHESS_STORY_STAGE_BEGIN_REQ = 8539; + CMD_KIANA_AUTO_CHESS_STORY_STAGE_BEGIN_RSP = 8540; + CMD_KIANA_AUTO_CHESS_STORY_STAGE_END_REQ = 8541; + CMD_KIANA_AUTO_CHESS_STORY_STAGE_END_RSP = 8542; + CMD_KIANA_AUTO_CHESS_PVP_FIGHT_END_NOTIFY = 8543; +} + +enum KianaAutoChessStageType { + KIANA_AUTO_CHESS_STAGE_TYPE_NONE = 0; + KIANA_AUTO_CHESS_STAGE_STORY = 1; + KIANA_AUTO_CHESS_STAGE_PVP = 2; + KIANA_AUTO_CHESS_STAGE_AVATAR = 3; + KIANA_AUTO_CHESS_STAGE_CHALLENGE = 4; +} + +enum KianaAutoChessPvpItemType { + KIANA_AUTO_CHESS_PVP_ITEM_TYPE_NONE = 0; + KIANA_AUTO_CHESS_PVP_ITEM_CLIENT = 1; + KIANA_AUTO_CHESS_PVP_ITEM_GET_COIN_AND_SHOP_REFRESH_TIMES = 2; + KIANA_AUTO_CHESS_PVP_ITEM_RANDOM_CARD_STAR_UP = 3; + KIANA_AUTO_CHESS_PVP_ITEM_BUY_CARD_FOR_FREE = 4; + KIANA_AUTO_CHESS_PVP_ITEM_REFRESH_SHOP_HIGHER_RARITY = 5; + KIANA_AUTO_CHESS_PVP_ITEM_REFRESH_SHOP_HIGHEST_COMBO = 6; + KIANA_AUTO_CHESS_PVP_ITEM_ADD_PLAYER_HP = 7; + KIANA_AUTO_CHESS_PVP_ITEM_RANDOM_USE_ITEM = 8; + KIANA_AUTO_CHESS_PVP_ITEM_RETURN_OPPONENT_ITEM = 9; + KIANA_AUTO_CHESS_PVP_ITEM_LOWER_OPPONENT_SCORE = 10; + KIANA_AUTO_CHESS_PVP_ITEM_SUB_PLAYER_HP = 11; +} + +enum KianaAutoChessPvpRuneEffectType { + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_TYPE_NONE = 0; + KIANA_AUTO_CHESS_EFFECT_CLIENT = 1; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_GOT_RUNE_ADD_COIN_WITH_ITEM_NUM = 2; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_GOT_RUNE_ADD_CARD = 3; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_GOT_RUNE_PREVENT_DEATH = 4; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_GOT_RUNE_BAG_UPGRADE = 5; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_GOT_RUNE_RANDOM_CARD_STAR_UP = 6; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_GOT_RUNE_CARD_TO_HIGHER_RARITY = 7; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_GOT_RUNE_SUB_HP = 8; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_GOT_RUNE_CONVERT_TO_OTHER = 9; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_GOT_RUNE_ADD_COIN = 10; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_GOT_RUNE_ADD_SHOP_REFRESH_TIMES = 11; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_GOT_RUNE_ADD_RANDOM_ITEM = 12; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_TURN_INIT_ADD_RANDOM_ITEM = 13; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_TURN_INIT_ADD_COIN_WITH_COMBO_STAR_NUM = 14; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_SETTLE_TURN_ADD_COIN = 15; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_SETTLE_TURN_ADD_COIN_WITH_DAMAGE = 16; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_SETTLE_TURN_ADD_COIN_IF_LOSE = 17; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_SETTLE_TURN_ADD_COIN_WITH_SELF_COIN = 22; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_CAL_ITEM_LEVEL_AS_HIGH = 18; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_CAL_CARD_COMBO_ADD = 19; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_CAL_BAG_CARD_NUM_ADD = 20; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_CAL_TOTAL_COIN_NUM_ADD_CARD = 21; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_ENTER_SHOP_REFRESH_WITH_MOST_COMBO_CARD_IF_NOT_BUY_CARD_IN_LAST_SHOP = 23; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_ENTER_SHOP_ADD_COIN_IF_HP_LOWER_THAN = 24; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_ENTER_SHOP_ADD_RANDOM_ITEM_IF_HP_LOWER_THAN = 25; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_ENTER_SHOP_ADD_CARD_FREE_BUY_TIMES = 26; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_ENTER_SHOP_ADD_BUY_ONE_GET_ONE_FREE_TIMES = 27; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_UPGRADE_BAG_ADD_MOST_RARITY_CARD = 28; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_UPGRADE_BAG_LOWER_COST = 29; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_UPGRADE_BAG_ADD_BAG_LEVEL_CARD = 35; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_CARD_LEVEL_UP_ADD_COIN = 30; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_CARD_LEVEL_UP_ADD_SHOP_REFRESH_TIMES = 31; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_REFRESH_SHOP_LOWER_COST = 32; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_REFRESH_SHOP_HIGHER_BAG_LEVEL = 33; + KIANA_AUTO_CHESS_PVP_RUNE_EFFECT_GOT_ITEM_ADD_COIN = 34; +} + +enum KianaAutoChessPvpRobotType { + KIANA_AUTO_CHESS_PVP_ROBOT_TYPE_NONE = 0; + KIANA_AUTO_CHESS_PVP_ROBOT_NPC = 1; + KIANA_AUTO_CHESS_PVP_ROBOT_SIMPLE = 2; + KIANA_AUTO_CHESS_PVP_ROBOT_ELITE = 3; +} + +enum KianaAutoChessPvpActionType { + KIANA_AUTO_CHESS_PVP_ACTION_TYPE_NONE = 0; + KIANA_AUTO_CHESS_PVP_ACTION_SEND_EMOJI = 1; + KIANA_AUTO_CHESS_PVP_ACTION_USE_ITEM = 2; + KIANA_AUTO_CHESS_PVP_ACTION_STAR_UP_CARD = 3; + KIANA_AUTO_CHESS_PVP_ACTION_UPGRADE_BAG = 4; +} + +enum KianaAutoChessPvpBattleStatus { + KIANA_AUTO_CHESS_PVP_BATTLE_STATUS_NONE = 0; + KIANA_AUTO_CHESS_PVP_BATTLE_STATUS_FIGHT = 1; + KIANA_AUTO_CHESS_PVP_BATTLE_STATUS_SHOP = 2; + KIANA_AUTO_CHESS_PVP_BATTLE_STATUS_SELECT_RUNE = 3; + KIANA_AUTO_CHESS_PVP_BATTLE_STATUS_SETTLED = 4; + KIANA_AUTO_CHESS_PVP_BATTLE_STATUS_ABANDON = 5; +} + +// CmdID: 7900 +message MahouCardGetActivityReq { + uint32 activity_id = 1; +} + +message MahouCardAreaDropRecord { + uint32 area_id = 1; + uint32 cur_drop_num = 2; + uint32 cur_site_id = 3; + bool is_unlocked_today = 4; + uint32 unlocked_times = 5; +} + +message MahouCardSite { + uint32 site_id = 1; + repeated uint32 passed_floor_list = 2; +} + +message MahouCardRole { + uint32 role_id = 1; + uint32 level = 2; +} + +message MahouCardBuff { + uint32 buff_id = 1; + uint32 remain_room_cnt = 2; + uint32 remain_battle_cnt = 3; +} + +message MahouCardSiteRecord { + uint32 site_type = 1; + uint32 site_id = 2; +} + +message MahouCardActivity { + uint32 activity_id = 1; + repeated MahouCardAreaDropRecord area_daily_drop_record_list = 2; + repeated MahouCardSite site_list = 3; + repeated MahouCardRole role_list = 4; + repeated uint32 has_got_card_id_list = 5; + uint32 cur_site_id = 6; + repeated MahouCardSiteRecord site_record_list = 7; +} + +// CmdID: 7901 +message MahouCardGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + MahouCardGetActivityRsp.Retcode retcode = 1; + MahouCardActivity activity = 2; +} + +// CmdID: 7902 +message MahouCardRoleLevelUpReq { + uint32 activity_id = 1; + uint32 role_id = 2; + uint32 target_level = 3; +} + +// CmdID: 7903 +message MahouCardRoleLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + ROLE_ERROR = 3; + MATERIAL_LACK = 4; + TARGET_LEVEL_ERROR = 5; + REQUIRED_PASS_SITE = 6; + } + + MahouCardRoleLevelUpRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 role_id = 3; + uint32 target_level = 4; +} + +// CmdID: 7904 +message MahouCardEnterSiteReq { + uint32 activity_id = 1; + uint32 site_id = 2; + uint32 role_id = 3; + bool is_force = 4; +} + +message MahouCardBattleCard { + uint32 slot = 1; + uint32 card_id = 2; + uint32 unique_id = 3; + repeated uint32 tag_list = 4; +} + +message MahouCardHandCard { + uint32 card_id = 1; + uint32 unique_id = 2; + repeated uint32 tag_list = 3; +} + +message MahouCardRoomInfo { + uint32 room_id = 1; + uint32 battle_random_seed = 2; + string transaction_str = 3; + uint32 retry_times = 4; + bool is_done = 5; + bool is_in_battle = 6; +} + +message MahouCardNumInfo { + uint32 card_id = 1; + uint32 card_num = 2; +} + +message MahouCardSiteInfo { + uint32 site_id = 1; + uint32 role_id = 2; + uint32 role_level = 3; + MahouCardRoomInfo room_info = 4; + repeated uint32 passed_room_id_list = 5; + string transaction_str = 6; + repeated MahouCardHandCard hand_card_list = 11; + repeated MahouCardBattleCard battle_card_list = 12; + uint32 battle_hp = 21; + uint32 remain_exchange_times = 22; + uint32 discard_times = 23; + uint32 discard_goal = 24; + uint32 discard_trigger_times = 25; + uint32 exchange_trigger_times = 26; + repeated uint32 wait_select_prophesy_list = 31; + repeated uint32 prophesy_list = 32; + repeated uint32 role_prophesy_list = 33; + repeated MahouCardBuff buff_list = 41; + uint32 cur_event_id = 51; + repeated uint32 option_list = 52; + repeated uint32 invalid_option_list = 53; + repeated MahouCardNumInfo candidate_card_num_list = 54; +} + +// CmdID: 7905 +message MahouCardEnterSiteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + IN_OTHER_SITE = 3; + ROLE_ERROR = 4; + } + + MahouCardEnterSiteRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 site_id = 3; + MahouCardSiteInfo cur_site = 4; +} + +// CmdID: 7906 +message MahouCardEnterRoomReq { + uint32 activity_id = 1; + uint32 site_id = 2; + uint32 room_id = 3; +} + +// CmdID: 7907 +message MahouCardEnterRoomRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 3; + NOT_IN_SITE = 4; + UNFINISHED_ROOM = 5; + ROOM_ERROR = 6; + ALREADY_DEAD = 7; + WAIT_SELECT_EVENT_OPTION = 8; + } + + MahouCardEnterRoomRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 site_id = 3; + MahouCardSiteInfo cur_site = 4; +} + +// CmdID: 7908 +message MahouCardExitRoomReq { + uint32 activity_id = 1; + uint32 site_id = 2; + uint32 room_id = 3; +} + +// CmdID: 7909 +message MahouCardExitRoomRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_SITE = 3; + ROOM_ERROR = 4; + NO_BATTLE_HP = 5; + WAIT_SELECT_PROPHESY = 6; + WAIT_CHOOSE_OPTION_EVENT = 7; + WAIT_FINISH_BATTLE = 8; + } + + MahouCardExitRoomRsp.Retcode retcode = 1; + uint32 activity_id = 2; + MahouCardSiteInfo cur_site = 3; +} + +// CmdID: 7925 +message MahouCardExitSiteReq { + uint32 activity_id = 1; + uint32 site_id = 2; +} + +// CmdID: 7926 +message MahouCardExitSiteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_SITE = 3; + } + + MahouCardExitSiteRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 site_id = 3; + RewardData reward = 4; + uint32 daily_site_drop_num = 5; +} + +// CmdID: 7910 +message MahouCardGetCurSiteInfoReq { + uint32 activity_id = 1; + uint32 site_type = 2; +} + +// CmdID: 7911 +message MahouCardGetCurSiteInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_SITE = 3; + } + + MahouCardGetCurSiteInfoRsp.Retcode retcode = 1; + uint32 activity_id = 2; + MahouCardSiteInfo cur_site = 3; + uint32 site_type = 4; +} + +// CmdID: 7912 +message MahouCardHandCardChangeNotify { + enum Reason { + NONE = 0; + DRAW = 1; + EXCHANGE = 2; + DISCARD = 3; + CARD_LEVEL_UP = 4; + SET_TO_BATTLE = 5; + RECALL_FROM_BATTLE = 6; + EVENT = 7; + GROWTH = 8; + } + + uint32 activity_id = 1; + uint32 site_id = 2; + uint32 room_id = 3; + MahouCardHandCardChangeNotify.Reason reason = 4; + repeated MahouCardHandCard lost_hand_card_list = 5; + repeated MahouCardHandCard add_hand_card_list = 6; + repeated MahouCardBattleCard lost_battle_card_list = 7; + repeated MahouCardBattleCard add_battle_card_list = 8; + uint32 event_id = 9; + bool is_need_sync = 99; +} + +// CmdID: 7913 +message MahouCardExchangeCardReq { + uint32 activity_id = 1; + uint32 site_id = 2; + uint32 room_id = 3; + uint32 unique_id = 4; +} + +// CmdID: 7914 +message MahouCardExchangeCardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_SITE = 3; + NOT_IN_ROOM = 4; + EXCHANGE_LIMIT = 5; + UNIQUE_ID_ERROR = 6; + } + + MahouCardExchangeCardRsp.Retcode retcode = 1; +} + +// CmdID: 7915 +message MahouCardDiscardCardReq { + uint32 activity_id = 1; + uint32 site_id = 2; + uint32 room_id = 3; + uint32 unique_id = 4; +} + +// CmdID: 7916 +message MahouCardDiscardCardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_SITE = 3; + NOT_IN_ROOM = 4; + UNIQUE_ID_ERROR = 5; + } + + MahouCardDiscardCardRsp.Retcode retcode = 1; +} + +// CmdID: 7917 +message MahouCardLevelUpCardReq { + uint32 activity_id = 1; + uint32 site_id = 2; + uint32 room_id = 3; + uint32 cost_unique_id = 4; + uint32 target_unique_id = 5; +} + +// CmdID: 7918 +message MahouCardLevelUpCardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_SITE = 3; + NOT_IN_ROOM = 4; + LEVEL_LIMIT = 5; + COST_ERROR = 6; + TARGET_ERROR = 7; + DAILY_SITE_FORBIDDEN = 8; + } + + MahouCardLevelUpCardRsp.Retcode retcode = 1; + uint32 cost_unique_id = 4; + uint32 target_unique_id = 5; +} + +// CmdID: 7919 +message MahouCardSetBattleCardReq { + enum Direction { + NONE = 0; + LEFT = 1; + RIGHT = 2; + } + + uint32 activity_id = 1; + uint32 site_id = 2; + uint32 room_id = 3; + uint32 unique_id = 4; + uint32 slot = 5; + MahouCardSetBattleCardReq.Direction direction = 6; +} + +// CmdID: 7920 +message MahouCardSetBattleCardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_SITE = 3; + NOT_IN_ROOM = 4; + UNIQUE_ID_ERROR = 5; + SLOT_LOCKED = 6; + SELF_SWAP = 7; + ONLY_IN_HAND = 8; + } + + MahouCardSetBattleCardRsp.Retcode retcode = 1; +} + +// CmdID: 7921 +message MahouCardRecallBattleCardReq { + uint32 activity_id = 1; + uint32 site_id = 2; + uint32 room_id = 3; + uint32 unique_id = 4; + uint32 slot = 5; +} + +// CmdID: 7922 +message MahouCardRecallBattleCardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_SITE = 3; + NOT_IN_ROOM = 4; + UNIQUE_ID_ERROR = 5; + FULL_HAND = 6; + } + + MahouCardRecallBattleCardRsp.Retcode retcode = 1; +} + +// CmdID: 7923 +message MahouCardSelectProphesyReq { + uint32 activity_id = 1; + uint32 site_id = 2; + uint32 room_id = 3; + uint32 prophesy_id = 4; +} + +// CmdID: 7924 +message MahouCardSelectProphesyRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_SITE = 3; + NOT_IN_ROOM = 4; + NO_PROPHESY_TO_SELECT = 5; + PROPHESY_ID_ERROR = 6; + } + + MahouCardSelectProphesyRsp.Retcode retcode = 1; +} + +// CmdID: 7927 +message MahouCardChooseEventOptionReq { + uint32 activity_id = 1; + uint32 site_id = 2; + uint32 room_id = 3; + uint32 event_id = 4; + repeated uint32 option_list = 5; +} + +// CmdID: 7928 +message MahouCardChooseEventOptionRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_SITE = 3; + NOT_IN_ROOM = 4; + EVENT_ERROR = 5; + OPTION_ERROR = 6; + } + + MahouCardChooseEventOptionRsp.Retcode retcode = 1; +} + +// CmdID: 7929 +message MahouCardEventNotify { + uint32 activity_id = 1; + uint32 site_id = 2; + uint32 room_id = 3; + uint32 event_id = 4; + repeated uint32 option_list = 5; + repeated uint32 invalid_option_list = 6; +} + +// CmdID: 7930 +message MahouCardBattleBeginReq { + uint32 activity_id = 1; + uint32 site_id = 2; + uint32 room_id = 3; +} + +// CmdID: 7931 +message MahouCardBattleBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_SITE = 3; + NOT_IN_ROOM = 4; + NO_NEED_TO_BATTLE = 5; + NO_BATTLE_HP = 6; + RETRY_TIMES_LIMIT = 7; + WAIT_CHOOSE_OPTION_EVENT = 8; + } + + MahouCardBattleBeginRsp.Retcode retcode = 1; +} + +// CmdID: 7932 +message MahouCardBattleEndReq { + enum Status { + BATTLE_LOSE = 0; + BATTLE_WIN = 1; + BATTLE_LOSE_AND_RETRY = 2; + } + + uint32 activity_id = 1; + uint32 site_id = 2; + uint32 room_id = 3; + uint32 score = 4; + MahouCardBattleEndReq.Status end_status = 5; +} + +// CmdID: 7933 +message MahouCardBattleEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_SITE = 3; + NOT_IN_ROOM = 4; + NOT_IN_BATTLE = 5; + } + + MahouCardBattleEndRsp.Retcode retcode = 1; +} + +// CmdID: 7934 +message MahouCardUnlockDailySiteReq { + uint32 activity_id = 1; + uint32 area_id = 2; +} + +// CmdID: 7935 +message MahouCardUnlockDailySiteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + AREA_LOCKED = 3; + ALREADY_UNLOCKED = 4; + MATERIAL_LACK = 5; + } + + MahouCardUnlockDailySiteRsp.Retcode retcode = 1; +} + +// CmdID: 7936 +message MahouCardGetDailySiteRankReq { + uint32 activity_id = 1; + uint32 area_id = 2; +} + +// CmdID: 7937 +message MahouCardGetDailySiteRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + MahouCardGetDailySiteRankRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 area_id = 3; + uint32 rank = 4; + uint32 rank_percent = 5; + RankShowData rank_data = 6; +} + +// CmdID: 7938 +message MahouCardOverdrawnNotify { + uint32 activity_id = 1; + uint32 site_id = 2; + repeated uint32 overdrawn_card_list = 3; +} + +enum CmdTypeMahoucard { + CMD_TYPE_MAHOUCARD_NONE = 0; + CMD_MAHOU_CARD_GET_ACTIVITY_REQ = 7900; + CMD_MAHOU_CARD_GET_ACTIVITY_RSP = 7901; + CMD_MAHOU_CARD_ROLE_LEVEL_UP_REQ = 7902; + CMD_MAHOU_CARD_ROLE_LEVEL_UP_RSP = 7903; + CMD_MAHOU_CARD_ENTER_SITE_REQ = 7904; + CMD_MAHOU_CARD_ENTER_SITE_RSP = 7905; + CMD_MAHOU_CARD_ENTER_ROOM_REQ = 7906; + CMD_MAHOU_CARD_ENTER_ROOM_RSP = 7907; + CMD_MAHOU_CARD_EXIT_ROOM_REQ = 7908; + CMD_MAHOU_CARD_EXIT_ROOM_RSP = 7909; + CMD_MAHOU_CARD_GET_CUR_SITE_INFO_REQ = 7910; + CMD_MAHOU_CARD_GET_CUR_SITE_INFO_RSP = 7911; + CMD_MAHOU_CARD_HAND_CARD_CHANGE_NOTIFY = 7912; + CMD_MAHOU_CARD_EXCHANGE_CARD_REQ = 7913; + CMD_MAHOU_CARD_EXCHANGE_CARD_RSP = 7914; + CMD_MAHOU_CARD_DISCARD_CARD_REQ = 7915; + CMD_MAHOU_CARD_DISCARD_CARD_RSP = 7916; + CMD_MAHOU_CARD_LEVEL_UP_CARD_REQ = 7917; + CMD_MAHOU_CARD_LEVEL_UP_CARD_RSP = 7918; + CMD_MAHOU_CARD_SET_BATTLE_CARD_REQ = 7919; + CMD_MAHOU_CARD_SET_BATTLE_CARD_RSP = 7920; + CMD_MAHOU_CARD_RECALL_BATTLE_CARD_REQ = 7921; + CMD_MAHOU_CARD_RECALL_BATTLE_CARD_RSP = 7922; + CMD_MAHOU_CARD_SELECT_PROPHESY_REQ = 7923; + CMD_MAHOU_CARD_SELECT_PROPHESY_RSP = 7924; + CMD_MAHOU_CARD_EXIT_SITE_REQ = 7925; + CMD_MAHOU_CARD_EXIT_SITE_RSP = 7926; + CMD_MAHOU_CARD_CHOOSE_EVENT_OPTION_REQ = 7927; + CMD_MAHOU_CARD_CHOOSE_EVENT_OPTION_RSP = 7928; + CMD_MAHOU_CARD_EVENT_NOTIFY = 7929; + CMD_MAHOU_CARD_BATTLE_BEGIN_REQ = 7930; + CMD_MAHOU_CARD_BATTLE_BEGIN_RSP = 7931; + CMD_MAHOU_CARD_BATTLE_END_REQ = 7932; + CMD_MAHOU_CARD_BATTLE_END_RSP = 7933; + CMD_MAHOU_CARD_UNLOCK_DAILY_SITE_REQ = 7934; + CMD_MAHOU_CARD_UNLOCK_DAILY_SITE_RSP = 7935; + CMD_MAHOU_CARD_GET_DAILY_SITE_RANK_REQ = 7936; + CMD_MAHOU_CARD_GET_DAILY_SITE_RANK_RSP = 7937; + CMD_MAHOU_CARD_OVERDRAWN_NOTIFY = 7938; +} + +enum MahouCardSiteType { + MAHOU_CARD_SITE_TYPE_NONE = 0; + MAHOU_CARD_SITE_TYPE_TUTORIAL = 1; + MAHOU_CARD_SITE_TYPE_NORMAL = 2; + MAHOU_CARD_SITE_TYPE_TOWER = 3; + MAHOU_CARD_SITE_TYPE_DAILY = 4; + MAHOU_CARD_SITE_TYPE_ENTRY = 5; +} + +enum MahouCardRoomType { + MAHOU_CARD_ROOM_TYPE_NONE = 0; + MAHOU_CARD_ROOM_TYPE_NORMAL = 1; + MAHOU_CARD_ROOM_TYPE_BOSS = 2; + MAHOU_CARD_ROOM_TYPE_EVENT = 3; + MAHOU_CARD_ROOM_TYPE_REWARD = 4; +} + +enum MahouCardEventType { + MAHOU_CARD_EVENT_TYPE_NONE = 0; + MAHOU_CARD_EVENT_TYPE_BATTLE = 1; + MAHOU_CARD_EVENT_TYPE_DRAW = 2; + MAHOU_CARD_EVENT_TYPE_LEVEL_UP_RANDOM_BATTLE_CARD = 6; + MAHOU_CARD_EVENT_TYPE_ADD_EXCHANGE_TIMES = 9; + MAHOU_CARD_EVENT_TYPE_DECREASE_EXCHANGE_TIMES = 10; + MAHOU_CARD_EVENT_TYPE_COPY_FIRST_BATTLE_CARD = 11; + MAHOU_CARD_EVENT_TYPE_COPY_LAST_BATTLE_CARD = 12; + MAHOU_CARD_EVENT_TYPE_LEVEL_UP_RANDOM_CARD = 13; + MAHOU_CARD_EVENT_TYPE_CHANGE_ALL_CARD_BY_LEVEL = 14; + MAHOU_CARD_EVENT_TYPE_CHANGE_ALL_CARD_RANDOM = 15; + MAHOU_CARD_EVENT_TYPE_SET_BATTLE_HP = 16; + MAHOU_CARD_EVENT_TYPE_ADD_BATTLE_HP = 17; + MAHOU_CARD_EVENT_TYPE_DECREASE_BATTLE_HP = 18; + MAHOU_CARD_EVENT_TYPE_ADD_SPECIFY_CARD = 19; + MAHOU_CARD_EVENT_TYPE_TRIGGER_GROWTH = 20; + MAHOU_CARD_EVENT_TYPE_ADD_TAG_TO_ALL_CARD = 21; + MAHOU_CARD_EVENT_TYPE_ADD_CARD_POOL = 23; + MAHOU_CARD_EVENT_TYPE_TRIGGER_PROPHESY_POOL = 25; + MAHOU_CARD_EVENT_TYPE_CLEAR_CUR_EVENT = 100; + MAHOU_CARD_EVENT_TYPE_ADD_BUFF = 3; + MAHOU_CARD_EVENT_TYPE_ADD_ROOM_SUCC_EVENT = 7; + MAHOU_CARD_EVENT_TYPE_ADD_ROOM_FAIL_EVENT = 8; + MAHOU_CARD_EVENT_TYPE_GET_ALL_ROLE_PROPHESY = 24; + MAHOU_CARD_EVENT_TYPE_ADD_DISCARD_TIMES = 26; + MAHOU_CARD_EVENT_TYPE_JUDGE_AND_TRIGGER_DISCARD_EVENT = 27; + MAHOU_CARD_EVENT_TYPE_JUDGE_AND_TRIGGER_EXCHANGE_EVENT = 28; + MAHOU_CARD_EVENT_TYPE_ADD_DISCARD_EVENT = 29; + MAHOU_CARD_EVENT_TYPE_ADD_EXCHANGE_EVENT = 30; + MAHOU_CARD_EVENT_TYPE_EVENT_GROUP = 101; + MAHOU_CARD_EVENT_TYPE_TRIGGER_RANDOM_EVENT = 22; + MAHOU_CARD_EVENT_TYPE_DRAW_AND_SELECT = 5; + MAHOU_CARD_EVENT_TYPE_OPTIONAL_EVENT = 102; + MAHOU_CARD_EVENT_TYPE_LOST_CARD_WITH_TAG = 201; + MAHOU_CARD_EVENT_TYPE_LOST_CARD_AND_TRIGGER_EVENT = 202; + MAHOU_CARD_EVENT_TYPE_DRAW_SPECIFY_QUALITY_AND_SELECT_FROM_CUR_POOL = 203; + MAHOU_CARD_EVENT_TYPE_DRAW_MAX_QUALITY_AND_SELECT_FROM_CUR_POOL = 204; + MAHOU_CARD_EVENT_TYPE_DAILY_SITE_DRAW = 205; + MAHOU_CARD_EVENT_TYPE_COPY_CHOSEN_CARD = 206; + MAHOU_CARD_EVENT_TYPE_TAKE_FROM_AREA_STORAGE = 207; + MAHOU_CARD_EVENT_TYPE_SAVE_TO_AREA_STORAGE = 208; +} + +enum MahouCardBuffType { + MAHOU_CARD_BUFF_TYPE_NONE = 0; + MAHOU_CARD_BUFF_TYPE_ADD_BATTLE_HP = 1; + MAHOU_CARD_BUFF_TYPE_ADD_DRAW_NUM = 2; + MAHOU_CARD_BUFF_TYPE_ADD_EXCHANGE_TIMES = 3; + MAHOU_CARD_BUFF_TYPE_ADD_HP = 4; + MAHOU_CARD_BUFF_TYPE_GOING_SECOND = 5; + MAHOU_CARD_BUFF_TYPE_ADD_PROPHESY_CHOICE_NUM = 6; + MAHOU_CARD_BUFF_TYPE_ADDITIONAL_CARD_POOL = 7; + MAHOU_CARD_BUFF_TYPE_EVENT_TRIGGER = 8; + MAHOU_CARD_BUFF_TYPE_DECREASE_HP = 9; + MAHOU_CARD_BUFF_TYPE_ADD_MP = 10; + MAHOU_CARD_BUFF_TYPE_DECREASE_DISCARD_GOAL = 11; + MAHOU_CARD_BUFF_TYPE_DECREASE_BATTLE_HP = 12; + MAHOU_CARD_BUFF_TYPE_CLIENT_BUFF_1001 = 1001; + MAHOU_CARD_BUFF_TYPE_CLIENT_BUFF_1002 = 1002; + MAHOU_CARD_BUFF_TYPE_CLIENT_BUFF_1003 = 1003; + MAHOU_CARD_BUFF_TYPE_CLIENT_BUFF_1004 = 1004; + MAHOU_CARD_BUFF_TYPE_CLIENT_BUFF_1005 = 1005; +} + +enum MahouCardConditionType { + MAHOU_CARD_CONDITION_TYPE_NONE = 0; + MAHOU_CARD_CONDITION_TYPE_EXCHANGE_TIMES_GT = 1; + MAHOU_CARD_CONDITION_TYPE_BATTLE_HP_GT = 2; + MAHOU_CARD_CONDITION_TYPE_HAS_CARD_ID = 3; + MAHOU_CARD_CONDITION_TYPE_HAS_CARD_TAG = 4; + MAHOU_CARD_CONDITION_TYPE_HAS_ANY_CARD = 5; +} + +enum MahouCardTiming { + MAHOU_CARD_TIMING_NONE = 0; + MAHOU_CARD_TIMING_ON_EXCHANGE = 2; + MAHOU_CARD_TIMING_ON_DISCARD = 3; +} + +enum MahouCardTag { + MAHOU_CARD_TAG_NONE = 0; + MAHOU_CARD_TAG_1 = 1; + MAHOU_CARD_TAG_2 = 2; + MAHOU_CARD_TAG_3 = 3; + MAHOU_CARD_TAG_4 = 4; + MAHOU_CARD_TAG_5 = 5; + MAHOU_CARD_TAG_6 = 6; + MAHOU_CARD_TAG_7 = 7; + MAHOU_CARD_TAG_8 = 8; + MAHOU_CARD_TAG_ODD = 9; + MAHOU_CARD_TAG_EVEN = 10; + MAHOU_CARD_TAG_11 = 11; + MAHOU_CARD_TAG_12 = 12; + MAHOU_CARD_TAG_13 = 13; + MAHOU_CARD_TAG_14 = 14; + MAHOU_CARD_TAG_15 = 15; + MAHOU_CARD_TAG_16 = 16; + MAHOU_CARD_TAG_17 = 17; + MAHOU_CARD_TAG_GROWTH = 21; + MAHOU_CARD_TAG_WILD = 22; + MAHOU_CARD_TAG_ONLY_IN_HAND = 23; +} + +message ClientMailKey { + ClientMailType type = 1; + uint32 id = 2; +} + +message ClientMailAttachmentItem { + ClientMailKey key = 1; + uint32 item_id = 2; +} + +message ClientMail { + ClientMailKey key = 1; + string title = 2; + string content = 3; + string sender = 4; + uint32 time = 5; + MailAttachment attachment = 6; + bool is_attachment_got = 7; + uint32 expire_time = 8; + repeated string content_param_list = 9; + uint32 template_id = 10; + bool is_read = 11; + uint32 mail_style = 12; + string img_path = 13; + bool is_favorite = 14; +} + +// CmdID: 3800 +message GetClientMailDataReq { + uint32 start = 1; + uint32 stop = 2; + ClientMailFilterType filter_type = 3; +} + +message ClientMailStyleInfo { + uint32 mail_style = 1; + uint32 untaken_num = 2; +} + +message ClientMailInfo { + uint32 total_num = 1; + uint32 can_fast_delete_num = 2; + repeated ClientMailStyleInfo mail_style_info_list = 3; +} + +// CmdID: 3801 +message GetClientMailDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + POS_INVALID = 2; + REPEATED_REQ = 3; + } + + GetClientMailDataRsp.Retcode retcode = 1; + repeated ClientMail mail_list = 2; + bool is_end = 3; + uint32 start = 5; + repeated ClientMail notice_mail_list = 6; + ClientMailFilterType filter_type = 7; + ClientMailInfo client_mail_info = 8; +} + +// CmdID: 3802 +message TakeClientMailAttachmentReq { + repeated ClientMailKey mail_key_list = 1; + bool is_show_attachment = 2; +} + +// CmdID: 3803 +message TakeClientMailAttachmentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + REPEATED_REQ = 2; + PART_FAIL = 3; + FEATURE_CLOSE = 4; + } + + TakeClientMailAttachmentRsp.Retcode retcode = 1; + repeated ClientMailKey succ_mail_key_list = 2; + bool is_show_attachment = 3; + MailAttachment mail_attachment = 4; + bool is_take_all = 5; + repeated ClientMailAttachmentItem fail_mail_list = 6; +} + +// CmdID: 3804 +message MarkReadClientMailReq { + ClientMailKey mail_key = 1; +} + +// CmdID: 3805 +message MarkReadClientMailRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + MarkReadClientMailRsp.Retcode retcode = 1; + ClientMailKey mail_key = 2; +} + +// CmdID: 3806 +message DelClientMailReq { + ClientMailKey mail_key = 1; + bool is_one_click_delete = 2; +} + +// CmdID: 3807 +message DelClientMailRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAIL_NOT_EXIST = 2; + MAIL_NOT_DELETE = 3; + } + + DelClientMailRsp.Retcode retcode = 1; + ClientMailKey mail_key = 2; + bool is_one_click_delete = 3; +} + +// CmdID: 3808 +message NewClientMailNotify { + ClientMailType type = 1; +} + +// CmdID: 3809 +message SetClientMailFavoriteReq { + ClientMailKey mail_key = 1; + bool is_favorite = 2; +} + +// CmdID: 3810 +message SetClientMailFavoriteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + DAILY_LIMIT = 2; + } + + SetClientMailFavoriteRsp.Retcode retcode = 1; + ClientMailKey mail_key = 2; + bool is_favorite = 3; +} + +enum CmdTypeMail { + CMD_TYPE_MAIL_NONE = 0; + CMD_GET_CLIENT_MAIL_DATA_REQ = 3800; + CMD_GET_CLIENT_MAIL_DATA_RSP = 3801; + CMD_TAKE_CLIENT_MAIL_ATTACHMENT_REQ = 3802; + CMD_TAKE_CLIENT_MAIL_ATTACHMENT_RSP = 3803; + CMD_MARK_CLIENT_MAIL_READ_REQ = 3804; + CMD_MARK_CLIENT_MAIL_READ_RSP = 3805; + CMD_DEL_CLIENT_MAIL_REQ = 3806; + CMD_DEL_CLIENT_MAIL_RSP = 3807; + CMD_NEW_CLIENT_MAIL_NOTIFY = 3808; + CMD_SET_CLIENT_MAIL_FAVORITE_REQ = 3809; + CMD_SET_CLIENT_MAIL_FAVORITE_RSP = 3810; +} + +enum ClientMailType { + CLIENT_MAIL_NONE = 0; + CLIENT_MAIL_MAIL = 1; + CLIENT_MAIL_NOTICE = 2; +} + +enum ClientMailFilterType { + CLIENT_MAIL_FILTER_TYPE_ALL = 0; + CLIENT_MAIL_FILTER_TYPE_IMPORTANT = 1; + CLIENT_MAIL_FILTER_TYPE_FAVORITE = 2; +} + +// CmdID: 8050 +message MarblesShootGetActivityReq { + uint32 activity_id = 1; +} + +message MarblesShootActivity { + uint32 activity_id = 1; + repeated MarblesShootAvatar avatar_list = 2; + MarblesShootGame story_game = 3; + MarblesShootGame daily_game = 4; + MarblesShootGame challenge_game = 5; + repeated MarblesShootGameSettleInfo game_settle_info_list = 6; + uint32 daily_game_config_id = 7; + repeated Material daily_game_has_drop_material_list = 8; + MarblesShootWiki wiki = 9; +} + +// CmdID: 8051 +message MarblesShootGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + MarblesShootGetActivityRsp.Retcode retcode = 1; + MarblesShootActivity activity = 2; + uint32 activity_id = 3; +} + +message MarblesShootGameSettleInfo { + uint32 game_id = 1; + uint32 last_fail_room_id = 2; + repeated Material has_drop_material_list = 3; +} + +message MarblesShootAvatar { + uint32 avatar_id = 1; + uint32 level = 2; +} + +message MarblesShootWiki { + repeated uint32 ball_list = 1; + repeated uint32 peg_list = 2; + repeated uint32 treasure_list = 3; +} + +message MarblesShootBall { + uint32 unique_id = 1; + uint32 ball_id = 2; + uint32 level = 3; +} + +message MarblesShootTreasure { + uint32 treasure_id = 1; + uint32 effect_times = 2; +} + +message MarblesShootGameRewardItem { + uint32 treasure_id = 1; + uint32 coin_num = 2; +} + +message MarblesShootGameCurRoomInfo { + uint32 cur_room_id = 1; + MarblesShootRoomType room_type = 2; + MarblesShootRoomStatus room_status = 3; + uint32 battle_id = 4; + uint32 shop_operate_times = 5; + repeated MarblesShootBall can_buy_ball_list = 6; + repeated uint32 bought_ball_idx_list = 7; + repeated uint32 can_select_treasure_list = 8; + repeated MarblesShootGameRewardItem can_select_reward_item_list = 9; + uint32 event_group_id = 10; + repeated uint32 can_trigger_event_id_list = 11; + repeated MarblesShootInitItem init_ball_list = 12; + repeated MarblesShootInitItem init_treasure_list = 13; + uint32 init_ball_select_num = 14; + uint32 init_treasure_select_num = 15; +} + +message MarblesShootInitItem { + MarblesShootBall ball = 1; + uint32 treasure_id = 2; + uint32 weight = 3; +} + +message MarblesShootGame { + uint32 game_id = 1; + MarblesShootAvatar avatar = 2; + uint32 avatar_hp = 3; + uint32 coin_num = 4; + repeated MarblesShootTreasure treasure_list = 5; + repeated MarblesShootBall ball_list = 6; + MarblesShootGameCurRoomInfo cur_room_info = 7; + repeated uint32 passed_room_id_list = 8; + uint32 shop_action_random = 9; + uint32 daily_game_config_id = 10; + string game_transaction_str = 11; + uint32 total_add_coin_num = 12; +} + +// CmdID: 8052 +message MarblesShootAvatarLevelUpReq { + uint32 activity_id = 1; + uint32 avatar_id = 2; + uint32 target_level = 3; +} + +// CmdID: 8053 +message MarblesShootAvatarLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + MATERIAL_LACK = 3; + TARGET_LEVEL_ERROR = 4; + PRE_SITE_ERROR = 5; + } + + MarblesShootAvatarLevelUpRsp.Retcode retcode = 1; + uint32 activity_id = 2; + MarblesShootAvatar avatar = 3; +} + +// CmdID: 8054 +message MarblesShootGetGameReq { + uint32 activity_id = 1; + uint32 game_id = 2; +} + +// CmdID: 8055 +message MarblesShootGetGameRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NOT_IN_GAME = 3; + } + + MarblesShootGetGameRsp.Retcode retcode = 1; + uint32 activity_id = 2; + MarblesShootGame game = 3; +} + +// CmdID: 8056 +message MarblesShootBeginGameReq { + uint32 activity_id = 1; + uint32 game_id = 2; + bool is_from_last_fail_room = 3; + uint32 avatar_id = 4; +} + +// CmdID: 8057 +message MarblesShootBeginGameRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + SITE_MISMATCH = 3; + IN_OTHER_GAME = 4; + AVATAR_ERROR = 5; + IN_CD = 6; + } + + MarblesShootBeginGameRsp.Retcode retcode = 1; + uint32 activity_id = 2; + MarblesShootGame game = 3; +} + +// CmdID: 8058 +message MarblesShootEndGameReq { + uint32 activity_id = 1; + uint32 game_id = 2; +} + +message MarblesShootGameStatistics { + uint32 total_round = 1; + uint32 max_round_damage = 2; + MarblesShootBall mvp_ball = 3; + uint32 max_hit_combo = 4; + uint32 total_score = 5; +} + +// CmdID: 8059 +message MarblesShootEndGameRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + MarblesShootEndGameRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated Material drop_material_list = 3; + MarblesShootGameStatistics statistics = 4; + StageEndStatus end_status = 5; + uint32 ball_num = 6; +} + +// CmdID: 8060 +message MarblesShootFinishRoomReq { + uint32 activity_id = 1; + uint32 game_id = 2; + uint32 next_room_id = 3; + uint32 avatar_hp = 4; + uint32 cur_coin_num = 5; +} + +// CmdID: 8061 +message MarblesShootFinishRoomRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + ROOM_ERROR = 3; + GAME_ERROR = 4; + ROOM_STATUS_ERROR = 5; + } + + MarblesShootFinishRoomRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8062 +message MarblesShootTriggerEventReq { + uint32 activity_id = 1; + uint32 game_id = 2; + uint32 event_id = 3; +} + +// CmdID: 8063 +message MarblesShootTriggerEventRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + ROOM_STATUS_ERROR = 3; + CONDITION_ERROR = 4; + } + + MarblesShootTriggerEventRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 event_id = 3; + repeated MarblesShootBall add_ball_list = 4; + repeated MarblesShootTreasure add_treasure_list = 5; + repeated MarblesShootBall del_ball_list = 6; + repeated MarblesShootTreasure del_treasure_list = 7; + repeated MarblesShootBall level_up_ball_list = 8; +} + +// CmdID: 8064 +message MarblesShootFinishBattleReq { + uint32 activity_id = 1; + uint32 game_id = 2; + uint32 avatar_hp = 3; + uint32 room_round = 4; + uint32 max_round_damage = 5; + uint32 mvp_ball_unique_id = 6; + uint32 max_hit_combo = 7; + uint32 battle_score = 8; + uint32 cur_coin_num = 9; +} + +// CmdID: 8065 +message MarblesShootFinishBattleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + ROOM_STATUS_ERROR = 3; + } + + MarblesShootFinishBattleRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8066 +message MarblesShootSelectRewardReq { + uint32 activity_id = 1; + uint32 game_id = 2; + uint32 reward_idx = 3; + uint32 cur_coin_num = 4; +} + +// CmdID: 8067 +message MarblesShootSelectRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + ROOM_STATUS_ERROR = 3; + } + + MarblesShootSelectRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8068 +message MarblesShootShopOperateReq { + enum OperateType { + OPERATE_NONE = 0; + OPERATE_BUY_BALL = 1; + OPERATE_LEVEL_UP_BALL = 2; + OPERATE_DEL_BALL = 3; + OPERATE_ADD_HP = 4; + OPERATE_CHOOSE_TREASURE = 5; + } + + uint32 activity_id = 1; + uint32 game_id = 2; + MarblesShootShopOperateReq.OperateType operate_type = 3; + uint32 operate_param = 4; + uint32 shop_action_random = 5; +} + +// CmdID: 8069 +message MarblesShootShopOperateRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + ITEM_NOT_FOUND = 3; + LACK_COIN = 4; + BALL_NUM_ERROR = 5; + ACTION_RANDOM_ERROR = 6; + ROOM_STATUS_ERROR = 7; + } + + MarblesShootShopOperateRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 shop_action_random = 3; +} + +// CmdID: 8070 +message MarblesShootGetRankReq { + uint32 activity_id = 1; +} + +// CmdID: 8071 +message MarblesShootGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 3; + NO_RANK = 4; + } + + MarblesShootGetRankRsp.Retcode retcode = 1; + uint32 activity_id = 2; + RankShowData rank_data = 3; + uint32 rank_percent = 4; + uint32 rank = 5; +} + +// CmdID: 8072 +message MarblesShootSelectInitItemReq { + uint32 activity_id = 1; + uint32 game_id = 2; + repeated MarblesShootBall ball_list = 3; + repeated uint32 treasure_list = 4; +} + +// CmdID: 8073 +message MarblesShootSelectInitItemRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 3; + ROOM_STATUS_ERROR = 4; + SELECT_ITEM_ERROR = 5; + } + + MarblesShootSelectInitItemRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8074 +message MarblesShootGetWikiReq { + uint32 activity_id = 1; +} + +// CmdID: 8075 +message MarblesShootGetWikiRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 3; + } + + MarblesShootGetWikiRsp.Retcode retcode = 1; + uint32 activity_id = 2; + MarblesShootWiki wiki = 3; +} + +enum CmdTypeMarblesshoot { + CMD_TYPE_MARBLESSHOOT_NONE = 0; + CMD_MARBLES_SHOOT_GET_ACTIVITY_REQ = 8050; + CMD_MARBLES_SHOOT_GET_ACTIVITY_RSP = 8051; + CMD_MARBLES_SHOOT_AVATAR_LEVEL_UP_REQ = 8052; + CMD_MARBLES_SHOOT_AVATAR_LEVEL_UP_RSP = 8053; + CMD_MARBLES_SHOOT_GET_GAME_REQ = 8054; + CMD_MARBLES_SHOOT_GET_GAME_RSP = 8055; + CMD_MARBLES_SHOOT_BEGIN_GAME_REQ = 8056; + CMD_MARBLES_SHOOT_BEGIN_GAME_RSP = 8057; + CMD_MARBLES_SHOOT_END_GAME_REQ = 8058; + CMD_MARBLES_SHOOT_END_GAME_RSP = 8059; + CMD_MARBLES_SHOOT_FINISH_ROOM_REQ = 8060; + CMD_MARBLES_SHOOT_FINISH_ROOM_RSP = 8061; + CMD_MARBLES_SHOOT_TRIGGER_EVENT_REQ = 8062; + CMD_MARBLES_SHOOT_TRIGGER_EVENT_RSP = 8063; + CMD_MARBLES_SHOOT_FINISH_BATTLE_REQ = 8064; + CMD_MARBLES_SHOOT_FINISH_BATTLE_RSP = 8065; + CMD_MARBLES_SHOOT_SELECT_REWARD_REQ = 8066; + CMD_MARBLES_SHOOT_SELECT_REWARD_RSP = 8067; + CMD_MARBLES_SHOOT_SHOP_OPERATE_REQ = 8068; + CMD_MARBLES_SHOOT_SHOP_OPERATE_RSP = 8069; + CMD_MARBLES_SHOOT_GET_RANK_REQ = 8070; + CMD_MARBLES_SHOOT_GET_RANK_RSP = 8071; + CMD_MARBLES_SHOOT_SELECT_INIT_ITEM_REQ = 8072; + CMD_MARBLES_SHOOT_SELECT_INIT_ITEM_RSP = 8073; + CMD_MARBLES_SHOOT_GET_WIKI_REQ = 8074; + CMD_MARBLES_SHOOT_GET_WIKI_RSP = 8075; +} + +enum MarblesShootGameType { + MARBLES_SHOOT_GAME_TYPE_NONE = 0; + MARBLES_SHOOT_GAME_TYPE_STORY = 1; + MARBLES_SHOOT_GAME_TYPE_CHALLENGE = 2; + MARBLES_SHOOT_GAME_TYPE_DAILY = 3; +} + +enum MarblesShootEventChangeType { + MARBLES_SHOOT_EVENT_CHANGE_DEL = 0; + MARBLES_SHOOT_EVENT_CHANGE_ADD = 1; +} + +enum MarblesShootEventType { + MARBLES_SHOOT_EVENT_TYPE_NONE = 0; + MARBLES_SHOOT_EVENT_EMPTY = 1; + MARBLES_SHOOT_EVENT_AND = 2; + MARBLES_SHOOT_EVENT_WEIGHT_OR = 3; + MARBLES_SHOOT_EVENT_CHANGE_HP_BY_VALUE = 4; + MARBLES_SHOOT_EVENT_CHANGE_HP_BY_PERCENT = 5; + MARBLES_SHOOT_EVENT_CHANGE_COIN_BY_VALUE = 6; + MARBLES_SHOOT_EVENT_ADD_BALL = 7; + MARBLES_SHOOT_EVENT_DEL_BALL = 8; + MARBLES_SHOOT_EVENT_ADD_TREASURE = 9; + MARBLES_SHOOT_EVENT_DEL_TREASURE = 10; + MARBLES_SHOOT_EVENT_ENTER_BATTLE = 11; + MARBLES_SHOOT_EVENT_RECOVER_TREASURE_EFFECT_TIMES = 12; + MARBLES_SHOOT_EVENT_RANDOM_ADD_BALL = 13; + MARBLES_SHOOT_EVENT_RANDOM_LEVEL_UP_BALL = 14; +} + +enum MarblesShootEventConditionType { + MARBLES_SHOOT_EVENT_CONDITION_TYPE_NONE = 0; + MARBLES_SHOOT_EVENT_CONDITION_USE_AVATAR = 1; + MARBLES_SHOOT_EVENT_CONDITION_HAS_BALL = 2; + MARBLES_SHOOT_EVENT_CONDITION_COIN_GREATER_EQUAL = 3; + MARBLES_SHOOT_EVENT_CONDITION_HAS_TREASURE = 4; + MARBLES_SHOOT_EVENT_CONDITION_NOT_HAS_TREASURE = 5; + MARBLES_SHOOT_EVENT_CONDITION_HAS_TRIGGER_EVENT = 6; + MARBLES_SHOOT_EVENT_CONDITION_HAS_FINISH_BATTLE = 7; + MARBLES_SHOOT_EVENT_CONDITION_BALL_NUM_LESS_THAN = 8; + MARBLES_SHOOT_EVENT_CONDITION_BALL_NUM_GREATER_THAN = 9; +} + +enum MarblesShootRoomStatus { + MARBLES_SHOOT_ROOM_STATUS_NONE = 0; + MARBLES_SHOOT_ROOM_STATUS_IN_BATTLE = 1; + MARBLES_SHOOT_ROOM_STATUS_END_BATTLE = 2; + MARBLES_SHOOT_ROOM_STATUS_WAIT_TRIGGER_EVENT = 3; + MARBLES_SHOOT_ROOM_STATUS_HAS_TRIGGER_EVENT = 4; + MARBLES_SHOOT_ROOM_STATUS_WAIT_SELECT_REWARD = 5; + MARBLES_SHOOT_ROOM_STATUS_HAS_SELECT_REWARD = 6; + MARBLES_SHOOT_ROOM_STATUS_WAIT_SELECT_INIT_ITEM = 7; +} + +enum MarblesShootRoomType { + MARBLES_SHOOT_ROOM_TYPE_NONE = 0; + MARBLES_SHOOT_ROOM_TYPE_BATTLE = 1; + MARBLES_SHOOT_ROOM_TYPE_EVENT = 2; + MARBLES_SHOOT_ROOM_TYPE_REWARD = 3; +} + +message MatchThreeRole { + uint32 role_id = 1; + uint32 level = 2; +} + +message MatchThreeGem { + uint32 gem_id = 1; + uint32 level = 2; +} + +message MatchThreeGemGachaPool { + uint32 gacha_pool_id = 1; + MatchThreeGemGachaPoolStatus status = 2; + repeated uint32 has_got_gem_list = 3; +} + +// CmdID: 7601 +message MatchThreeGetActivityReq { + uint32 activity_id = 1; +} + +message MatchThreeHasGotDailyMaterial { + uint32 material_id = 1; + uint32 num = 2; +} + +message MatchThreeActivity { + uint32 activity_id = 1; + repeated MatchThreeRole role_list = 2; + repeated MatchThreeGem gem_list = 3; + repeated MatchThreeHasGotDailyMaterial has_got_daily_material_list = 4; + repeated uint32 item_list = 5; + uint32 cur_schedule_id = 6; + repeated uint32 passed_room_id_list = 7; + uint32 max_tower_floor = 8; +} + +// CmdID: 7602 +message MatchThreeGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + MatchThreeGetActivityRsp.Retcode retcode = 1; + MatchThreeActivity activity = 2; +} + +// CmdID: 7603 +message MatchThreeRoleLevelUpReq { + uint32 activity_id = 1; + uint32 role_id = 2; + uint32 target_level = 3; +} + +// CmdID: 7604 +message MatchThreeRoleLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ROLE_NOT_FOUND = 2; + TARGET_LEVEL_ERROR = 3; + MATERIAL_LACK = 4; + } + + MatchThreeRoleLevelUpRsp.Retcode retcode = 1; + uint32 activity_id = 2; + MatchThreeRole role = 3; +} + +// CmdID: 7605 +message MatchThreeGemGachaDisplayReq { + uint32 activity_id = 1; +} + +// CmdID: 7606 +message MatchThreeGemGachaDisplayRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + MatchThreeGemGachaDisplayRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 gacha_random = 3; + repeated MatchThreeGemGachaPool pool_list = 4; +} + +// CmdID: 7607 +message MatchThreeGemGachaReq { + uint32 activity_id = 1; + uint32 gacha_random = 2; +} + +// CmdID: 7608 +message MatchThreeGemGachaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_POOL = 2; + MATERIAL_LACK = 3; + ACTION_RANDOM_ERROR = 4; + GEM_ERROR = 5; + } + + MatchThreeGemGachaRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 new_gacha_random = 3; + uint32 pool_id = 4; + MatchThreeGem gem = 5; + repeated MatchThreeGemGachaPool pool_list = 6; +} + +// CmdID: 7609 +message MatchThreeGetRankReq { + uint32 activity_id = 1; + uint32 room_id = 2; +} + +// CmdID: 7610 +message MatchThreeGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SCHEDULE_ERROR = 2; + } + + MatchThreeGetRankRsp.Retcode retcode = 1; + uint32 activity_id = 2; + RankShowData rank_data = 3; + uint32 rank_percent = 4; + uint32 room_id = 5; +} + +// CmdID: 7611 +message MatchThreeRoomBeginReq { + uint32 tale_id = 1; + uint32 activity_id = 2; + MatchThreeRoomType room_type = 3; + uint32 room_id = 4; + uint32 role_id = 5; + repeated uint32 item_list = 6; +} + +// CmdID: 7612 +message MatchThreeRoomBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_EXIST = 2; + ROLE_ERROR = 3; + ITEM_ERROR = 4; + ROOM_ERROR = 5; + } + + MatchThreeRoomBeginRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 room_id = 3; + string transaction_str = 4; + uint32 dynamic_level = 5; +} + +// CmdID: 7613 +message MatchThreeRoomEndReq { + enum Status { + WIN = 0; + LOSE = 1; + ABANDON = 2; + } + + uint32 tale_id = 1; + uint32 activity_id = 2; + MatchThreeRoomEndReq.Status status = 3; + uint32 room_id = 4; + MatchThreeRoomType room_type = 5; + uint32 score = 6; + uint32 battle_time = 7; + uint32 floor_id = 8; +} + +// CmdID: 7614 +message MatchThreeRoomEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_EXIST = 2; + ROOM_NOT_BEGIN = 3; + ROOM_ERROR = 4; + } + + MatchThreeRoomEndRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 room_id = 3; + repeated DropItem daily_drop_item_list = 4; + bool is_first_win = 5; + uint32 floor_id = 6; + RewardData reward_data = 7; +} + +enum CmdTypeMatchthree { + CMD_TYPE_MATCHTHREE_NONE = 0; + CMD_MATCH_THREE_GET_ACTIVITY_REQ = 7601; + CMD_MATCH_THREE_GET_ACTIVITY_RSP = 7602; + CMD_MATCH_THREE_ROLE_LEVEL_UP_REQ = 7603; + CMD_MATCH_THREE_ROLE_LEVEL_UP_RSP = 7604; + CMD_MATCH_THREE_GEM_GACHA_DISPLAY_REQ = 7605; + CMD_MATCH_THREE_GEM_GACHA_DISPLAY_RSP = 7606; + CMD_MATCH_THREE_GEM_GACHA_REQ = 7607; + CMD_MATCH_THREE_GEM_GACHA_RSP = 7608; + CMD_MATCH_THREE_GET_RANK_REQ = 7609; + CMD_MATCH_THREE_GET_RANK_RSP = 7610; + CMD_MATCH_THREE_ROOM_BEGIN_REQ = 7611; + CMD_MATCH_THREE_ROOM_BEGIN_RSP = 7612; + CMD_MATCH_THREE_ROOM_END_REQ = 7613; + CMD_MATCH_THREE_ROOM_END_RSP = 7614; +} + +enum MatchThreeGemGachaPoolStatus { + MATCH_THREE_GEM_GACHA_POOL_STATUS_NONE = 0; + MATCH_THREE_GEM_GACHA_POOL_LOCKED = 1; + MATCH_THREE_GEM_GACHA_POOL_DOING = 2; + MATCH_THREE_GEM_GACHA_POOL_FINISHED = 3; +} + +enum MatchThreeRoomType { + MATCH_THREE_ROOM_NONE = 0; + MATCH_THREE_ROOM_MAIN = 1; + MATCH_THREE_ROOM_SIDE = 2; + MATCH_THREE_ROOM_DAILY = 3; + MATCH_THREE_ROOM_TOWER = 4; +} + +// CmdID: 7000 +message MirageGetActivityReq { +} + +message MirageTalent { + uint32 talent_id = 1; + uint32 level = 2; +} + +message MirageChallengeStageRecord { + uint32 stage_id = 1; + uint32 max_score = 2; + repeated uint32 core_skill_list = 3; +} + +message MirageActivity { + uint32 schedule_id = 1; + uint32 daily_currency_drop_num = 2; + repeated MirageTalent talent_list = 3; + repeated MirageChallengeStageRecord challenge_record_list = 4; + uint32 cur_rotate_index = 5; + uint32 cur_rotate_close_time = 6; + uint32 cur_daily_drop_limit_reset_times = 7; +} + +// CmdID: 7001 +message MirageGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + MirageGetActivityRsp.Retcode retcode = 1; + MirageActivity activity = 2; +} + +// CmdID: 7002 +message MirageTalentLevelUpReq { + uint32 schedule_id = 1; + uint32 talent_id = 2; +} + +// CmdID: 7003 +message MirageTalentLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + TALENT_NOT_EXIST = 3; + TALENT_LOCKED = 4; + MATERIAL_LACK = 5; + LEVEL_LIMIT = 6; + } + + MirageTalentLevelUpRsp.Retcode retcode = 1; + uint32 talent_id = 2; + uint32 cur_level = 3; +} + +// CmdID: 7004 +message MirageReportStageBeginReq { + uint32 schedule_id = 1; + uint32 stage_id = 2; + uint32 battle_avatar_id = 3; + repeated uint32 support_avatar_list = 4; + repeated uint32 core_skill_list = 5; + uint32 difficulty_id = 6; +} + +// CmdID: 7005 +message MirageReportStageBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + STAGE_ERROR = 3; + BATTLE_AVATAR_ERROR = 4; + SUPPORT_AVATAR_ERROR = 5; + CORE_SKILL_ERROR = 6; + } + + MirageReportStageBeginRsp.Retcode retcode = 1; + uint32 stage_id = 2; + uint32 battle_avatar_id = 3; +} + +// CmdID: 7006 +message MirageResetDailyDropLimitReq { + uint32 schedule_id = 1; +} + +// CmdID: 7007 +message MirageResetDailyDropLimitRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + RESET_NOT_OPEN = 3; + HCOIN_LACK = 4; + RESET_TIMES_LIMIT = 5; + } + + MirageResetDailyDropLimitRsp.Retcode retcode = 1; + uint32 schedule_id = 2; +} + +enum CmdTypeMirage { + CMD_TYPE_MIRAGE_NONE = 0; + CMD_MIRAGE_GET_ACTIVITY_REQ = 7000; + CMD_MIRAGE_GET_ACTIVITY_RSP = 7001; + CMD_MIRAGE_TALENT_LEVEL_UP_REQ = 7002; + CMD_MIRAGE_TALENT_LEVEL_UP_RSP = 7003; + CMD_MIRAGE_REPORT_STAGE_BEGIN_REQ = 7004; + CMD_MIRAGE_REPORT_STAGE_BEGIN_RSP = 7005; + CMD_MIRAGE_RESET_DAILY_DROP_LIMIT_REQ = 7006; + CMD_MIRAGE_RESET_DAILY_DROP_LIMIT_RSP = 7007; +} + +enum MirageStageUnlockFlagType { + MIRAGE_STAGE_UNLOCK_FLAG_TYPE_NONE = 0; + MIRAGE_STAGE_UNLOCK_FLAG_TYPE_UNTIL_TIME = 1; +} + +enum MirageStageType { + MIRAGE_STAGE_TYPE_NONE = 0; + MIRAGE_STAGE_TYPE_CHALLENGE = 1; + MIRAGE_STAGE_TYPE_DAILY = 2; + MIRAGE_STAGE_TYPE_TUTORIAL = 3; +} + +// CmdID: 3850 +message GetMonopolyActivityReq { + uint32 monopoly_id = 1; +} + +message MonopolyMonster { + uint32 unique_id = 1; + uint32 monster_id = 2; +} + +message MonopolyFloor { + message Building { + uint32 location = 1; + uint32 type = 2; + uint32 level = 3; + uint32 product_num = 4; + } + + uint32 floor_id = 1; + repeated MonopolyFloor.Building building_list = 2; + repeated MonopolyMonster monster_list = 3; + MonopolyRoundStatus round_status = 4; +} + +message MonopolyArea { + uint32 area_id = 1; + MonopolyAreaStatus status = 2; + repeated MonopolyFloor floor_list = 3; +} + +message MonopolyShopGoods { + uint32 goods_id = 1; + uint32 buy_times = 2; +} + +// CmdID: 3851 +message GetMonopolyActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetMonopolyActivityRsp.Retcode retcode = 1; + uint32 monopoly_id = 2; + repeated MonopolyArea area_list = 3; + repeated MonopolyShopGoods goods_list = 4; +} + +// CmdID: 3852 +message MonopolyThrowDiceReq { + uint32 area_id = 1; +} + +// CmdID: 3853 +message MonopolyThrowDiceRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + WAIT_SELECT_PATH = 2; + STATUS_ERROR = 3; + } + + MonopolyThrowDiceRsp.Retcode retcode = 1; + uint32 area_id = 2; + uint32 dice_num = 3; +} + +// CmdID: 3854 +message MonopolyBuildingConstructReq { + uint32 area_id = 1; + uint32 building_type = 2; +} + +// CmdID: 3855 +message MonopolyBuildingConstructRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LACK_MATERIAL = 2; + ANOTHER_TYPE_EXIST = 3; + NUM_LIMIT = 4; + LEVEL_MAX = 5; + NO_LOCATION = 6; + WAIT_SELECT = 7; + STATUS_ERROR = 8; + } + + MonopolyBuildingConstructRsp.Retcode retcode = 1; + uint32 area_id = 2; + uint32 building_type = 3; +} + +// CmdID: 3856 +message MonopolyEndRoundReq { + uint32 area_id = 1; +} + +// CmdID: 3857 +message MonopolyEndRoundRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STATUS_ERROR = 2; + } + + MonopolyEndRoundRsp.Retcode retcode = 1; +} + +// CmdID: 3858 +message MonopolyUseItemReq { + uint32 area_id = 1; + uint32 item_id = 2; + uint32 para = 3; +} + +// CmdID: 3859 +message MonopolyUseItemRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LACK_MATERIAL = 2; + INVALID_AREA = 3; + } + + MonopolyUseItemRsp.Retcode retcode = 1; +} + +// CmdID: 3860 +message MonopolyRewardNotify { + uint32 behavior_id = 1; + RewardData reward = 2; +} + +// CmdID: 3861 +message MonopolyBuyGoodsReq { + uint32 area_id = 1; + uint32 goods_id = 2; +} + +// CmdID: 3862 +message MonopolyBuyGoodsRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LACK_MATERIAL = 2; + BUY_TIMES_LACK = 3; + INVALID_POSITION = 4; + STATUS_ERROR = 5; + } + + MonopolyBuyGoodsRsp.Retcode retcode = 1; +} + +// CmdID: 3863 +message MonopolySkipBattleReq { + uint32 stage_id = 1; +} + +// CmdID: 3864 +message MonopolySkipBattleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + MonopolySkipBattleRsp.Retcode retcode = 1; +} + +// CmdID: 3865 +message MonopolyResetFloorReq { + uint32 area_id = 1; + uint32 floor_id = 2; +} + +// CmdID: 3866 +message MonopolyResetFloorRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + MonopolyResetFloorRsp.Retcode retcode = 1; + uint32 area_id = 2; + uint32 floor_id = 3; + uint32 tile_tower_id = 4; +} + +// CmdID: 3867 +message MonopolyAddMonsterReq { + uint32 area_id = 1; + uint32 floor_id = 2; + uint32 monster_id = 3; + uint32 position = 4; + uint32 direction = 5; +} + +// CmdID: 3868 +message MonopolyAddMonsterRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ALREADY_ADD = 2; + } + + MonopolyAddMonsterRsp.Retcode retcode = 1; + uint32 monster_id = 2; + uint32 position = 3; + uint32 direction = 4; + uint32 unique_id = 5; + uint32 entity_type = 6; + uint32 tile_entity_id = 7; +} + +message RaffleTicket { + uint32 ticket_num = 1; + uint32 draw_idx = 2; + RaffleRewardGrade reward_grade = 3; + bool is_reward_taken = 4; +} + +message Raffle { + uint32 id = 1; + uint32 draw_begin_time = 3; + uint32 draw_end_time = 4; + uint32 reward_begin_time = 5; + uint32 mission_id = 6; + uint32 total_ticket_num = 7; + repeated RaffleTicket ticket_list = 8; +} + +// CmdID: 3890 +message ExchangeRaffleMaterialReq { +} + +// CmdID: 3891 +message ExchangeRaffleMaterialRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_NOT_ENOUGH = 2; + NOT_OPEN = 3; + } + + ExchangeRaffleMaterialRsp.Retcode retcode = 1; + repeated Material get_material_list = 2; +} + +// CmdID: 3894 +message TakeRaffleRewardReq { + repeated uint32 raffle_id_list = 1; +} + +// CmdID: 3895 +message TakeRaffleRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAVE_TAKEN = 2; + NOT_OPEN = 3; + NOT_DRAW = 4; + NOT_EXIST = 5; + } + + TakeRaffleRewardRsp.Retcode retcode = 1; + repeated uint32 raffle_id_list = 2; + RewardData reward_data = 3; +} + +// CmdID: 3896 +message DrawRaffleTicketReq { + uint32 raffle_id = 1; +} + +// CmdID: 3897 +message DrawRaffleTicketRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 3; + CANNOT_DRAW = 4; + TIMES_LIMIT = 5; + MATERIAL_NOT_ENOUGH = 6; + TOO_FREQUENT = 7; + } + + DrawRaffleTicketRsp.Retcode retcode = 1; + uint32 raffle_id = 2; + uint32 ticket = 3; + uint32 draw_idx = 4; +} + +message RaffleActivity { + uint32 cur_schedule_id = 1; + uint32 begin_time = 2; + uint32 end_time = 3; + repeated Raffle raffle_list = 4; +} + +// CmdID: 3898 +message GetRaffleActivityReq { + repeated uint32 raffle_id_list = 1; +} + +// CmdID: 3899 +message GetRaffleActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_RAFFLE = 2; + NOT_OPEN = 3; + } + + GetRaffleActivityRsp.Retcode retcode = 1; + RaffleActivity raffle_activity = 2; +} + +enum CmdTypeMonopoly { + CMD_TYPE_MONOPOLY_NONE = 0; + CMD_GET_MONOPOLY_ACTIVITY_REQ = 3850; + CMD_GET_MONOPOLY_ACTIVITY_RSP = 3851; + CMD_MONOPOLY_THROW_DICE_REQ = 3852; + CMD_MONOPOLY_THROW_DICE_RSP = 3853; + CMD_MONOPOLY_BUILDING_CONSTRUCT_REQ = 3854; + CMD_MONOPOLY_BUILDING_CONSTRUCT_RSP = 3855; + CMD_MONOPOLY_END_ROUND_REQ = 3856; + CMD_MONOPOLY_END_ROUND_RSP = 3857; + CMD_MONOPOLY_USE_ITEM_REQ = 3858; + CMD_MONOPOLY_USE_ITEM_RSP = 3859; + CMD_MONOPOLY_REWARD_NOTIFY = 3860; + CMD_MONOPOLY_BUY_GOODS_REQ = 3861; + CMD_MONOPOLY_BUY_GOODS_RSP = 3862; + CMD_MONOPOLY_SKIP_BATTLE_REQ = 3863; + CMD_MONOPOLY_SKIP_BATTLE_RSP = 3864; + CMD_MONOPOLY_RESET_FLOOR_REQ = 3865; + CMD_MONOPOLY_RESET_FLOOR_RSP = 3866; + CMD_MONOPOLY_ADD_MONSTER_REQ = 3867; + CMD_MONOPOLY_ADD_MONSTER_RSP = 3868; + CMD_EXCHANGE_RAFFLE_MATERIAL_REQ = 3890; + CMD_EXCHANGE_RAFFLE_MATERIAL_RSP = 3891; + CMD_TAKE_RAFFLE_REWARD_REQ = 3894; + CMD_TAKE_RAFFLE_REWARD_RSP = 3895; + CMD_DRAW_RAFFLE_TICKET_REQ = 3896; + CMD_DRAW_RAFFLE_TICKET_RSP = 3897; + CMD_GET_RAFFLE_ACTIVITY_REQ = 3898; + CMD_GET_RAFFLE_ACTIVITY_RSP = 3899; +} + +enum MonopolyRoundStatus { + MONOPOLY_ROUND_STATUS_NONE = 0; + MONOPOLY_ROUND_STATUS_START = 1; + MONOPOLY_ROUND_STATUS_AFTER_DICE = 2; + MONOPOLY_ROUND_STATUS_AFTER_CONSTRUCT = 3; +} + +enum MonopolyBehaviorType { + MONOPOLY_BEHAVIOR_TYPE_NONE = 0; + MONOPOLY_BEHAVIOR_WALK = 1; + MONOPOLY_BEHAVIOR_DEMOLISH_BUILDING = 2; + MONOPOLY_BEHAVIOR_FREEZE_BUILDING = 3; + MONOPOLY_BEHAVIOR_RANDOM_FREEZE = 4; + MONOPOLY_BEHAVIOR_SUMMON = 5; + MONOPOLY_BEHAVIOR_REPEL = 7; + MONOPOLY_BEHAVIOR_DELELTE_SELF = 8; + MONOPOLY_BEHAVIOR_TRIGGER_RPG_EVENT = 9; +} + +enum MonopolyItemType { + MONOPOLY_ITEM_TYPE_NONE = 0; + MONOPOLY_ITEM_CONTROLABLE_DICE = 1; + MONOPOLY_ITEM_ROADBLOCK = 2; + MONOPOLY_ITEM_EXCHANGE_POSITION = 4; + MONOPOLY_ITEM_LEVELUP_BUILDING = 7; + MONOPOLY_ITEM_CHANGE_DIRECTION = 8; +} + +enum MonopolyBuildingFuncType { + MONOPOLY_BUILDING_FUNC_TYPE_NONE = 0; + MONOPOLY_BUILDING_FUNC_PRODUCT = 1; + MONOPOLY_BUILDING_FUNC_BUFF = 2; +} + +enum MonopolyDiceType { + MONOPOLY_DICE_NONE = 0; + MONOPOLY_DICE_NORMAL = 1; + MONOPOLY_DICE_BUILDING_PRIORITY = 2; +} + +enum MonopolyAreaStatus { + MONOPOLY_AREA_STATUS_NONE = 0; + MONOPOLY_AREA_STATUS_LOCKED = 1; + MONOPOLY_AREA_STATUS_UNLOCKED = 2; +} + +enum RaffleRewardGrade { + RAFFLE_REWARD_NONE = 0; + RAFFLE_REWARD_FIRST = 1; + RAFFLE_REWARD_SECOND = 2; + RAFFLE_REWARD_THIRD = 3; +} + +enum RaffleActivityType { + RAFFLE_ACTIVITY_NONE = 0; + RAFFLE_ACTIVITY_MONOPOLY = 1; +} + +message NinjaSlot { + uint32 slot_id = 1; + uint32 level = 2; + uint32 exp = 3; + uint32 choosed_effect_id = 4; +} + +message NinjaActivityData { + uint32 ninja_id = 1; + uint32 begin_time = 2; + uint32 end_time = 3; + repeated NinjaSlot slot_list = 4; +} + +// CmdID: 4400 +message GetNinjaActivityReq { +} + +// CmdID: 4401 +message GetNinjaActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetNinjaActivityRsp.Retcode retcode = 1; + NinjaActivityData ninja_data = 2; +} + +// CmdID: 4402 +message NinjaSlotStrengthenReq { + uint32 slot_id = 1; + uint32 material_id = 2; + uint32 cost_num = 3; +} + +// CmdID: 4403 +message NinjaSlotStrengthenRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_NOT_ENOUGH = 2; + LOCKED = 3; + NOT_OPEN = 4; + LEVEL_MAX = 5; + } + + NinjaSlotStrengthenRsp.Retcode retcode = 1; + NinjaSlot slot = 2; +} + +// CmdID: 4404 +message NinjaActivityNotify { + repeated NinjaSlot slot_list = 1; +} + +// CmdID: 4405 +message NinjaSlotChooseEffectReq { + uint32 slot_id = 1; + uint32 effect_id = 2; +} + +// CmdID: 4406 +message NinjaSlotChooseEffectRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LOCKED = 2; + } + + NinjaSlotChooseEffectRsp.Retcode retcode = 1; + NinjaSlot slot = 2; +} + +enum CmdTypeNinja { + CMD_TYPE_NINJA_NONE = 0; + CMD_GET_NINJA_ACTIVITY_REQ = 4400; + CMD_GET_NINJA_ACTIVITY_RSP = 4401; + CMD_NINJA_SLOT_STRENGTHEN_REQ = 4402; + CMD_NINJA_SLOT_STRENGTHEN_RSP = 4403; + CMD_NINJA_ACTIVITY_NOTIFY = 4404; + CMD_NINJA_SLOT_CHOOSE_EFFECT_REQ = 4405; + CMD_NINJA_SLOT_CHOOSE_EFFECT_RSP = 4406; + CMD_NINJA_DUMMY = 4449; +} + +enum NinjaSiteType { + NINJA_SITE_TYPE_NONE = 0; + NINJA_SITE_NORMAL = 1; + NINJA_SITE_BOSS = 2; + NINJA_SITE_CHALLENGE = 3; +} + +// CmdID: 1 +message KeepAliveNotify { + repeated uint32 route_type_list = 1; +} + +// CmdID: 2 +message GetGameserverReq { +} + +// CmdID: 3 +message GetGameserverRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SERVER_STOP = 2; + VERSION_ERROR = 3; + FORCE_UPDATE = 4; + SEED_ERROR = 5; + } + +} + +// CmdID: 4 +message GetPlayerTokenReq { + uint32 account_type = 1; + string account_uid = 2; + string account_token = 3; + string account_ext = 4; + string token = 5; + string version = 6; + string device = 7; + int32 tag = 8; + uint32 uid = 9; + string system_info = 10; + string ipv4_str = 11; + string ipv6_str = 12; + string cps = 13; + string device_uuid = 14; + string transfer_code = 15; + string transfer_pwd = 16; + string ip_info_str = 17; + DeviceType device_type = 20; + bool is_allow_device_register = 21; + uint32 combo_channel_id = 22; + string combo_token = 23; + string ua_pc = 25; + string device_fingerprint = 26; +} + +// CmdID: 5 +message GetPlayerTokenRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + REGISTER_CLOSED = 2; + ACCOUNT_VERIFY_ERROR = 3; + TOKEN_REPEAT = 4; + ACCOUNT_TYPE_ERROR = 5; + SERVER_FULL = 6; + INVALID_APK = 7; + TRANSFER_CODE_ERROR = 8; + IN_BLACK_LIST = 9; + SERVER_STOP = 10; + ACCOUNT_LOCKED = 11; + SERVER_BUSY = 12; + DEVICE_TYPE_ERROR = 13; + FORBID_VISITOR = 14; + FORBID_TAG_SMURF_VISITOR = 15; + ANTI_ADDICT_LOGIN = 16; + GAME_NOT_AVAILABLE = 17; + FORCE_UPDATE = 18; + } + + GetPlayerTokenRsp.Retcode retcode = 1; + uint32 uid = 2; + string token = 3; + uint32 account_type = 4; + string account_uid = 5; + int32 tag = 6; + string transfer_code = 15; + uint32 transfer_pwd_expire_time = 16; + bool is_bind_access = 17; + uint32 fightserver_ip = 18; + uint32 fightserver_port = 19; + string msg = 20; + uint32 black_list_end_time = 21; + uint32 user_type = 22; + uint32 limit_level = 23; + bytes security_cmd_buffer = 24; + string hoyolab_account_uid = 26; + string ua_pc = 27; +} + +// CmdID: 6 +message PlayerLoginReq { + uint32 last_server_packet_id = 2; + string cps = 3; + string check_sum = 4; + string device_uuid = 5; + string android_signatures = 6; + string language = 7; + string advertiser_id = 8; + bytes security_cmd_reply = 9; + uint32 last_login_version = 10; + uint32 account_type = 11; + string account_uid = 12; + DeviceType device_type = 13; + uint32 user_type = 14; + string user_ip = 15; + uint32 tag = 16; + string client_version = 17; + string client_device = 18; + string system_info = 19; + string android_sign = 20; + uint32 limit_level = 21; + uint32 black_list_end_time = 22; + bool is_bind_access = 23; + uint32 login_session_token = 25; + string hoyolab_account_uid = 26; + uint32 user_port = 27; + string ua_pc = 28; + string device_fingerprint = 29; +} + +// CmdID: 7 +message PlayerLoginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + REPEAT_LOGIN = 2; + IN_BLACK_LIST = 3; + WAIT_STOP_ANOTHER_LOGIN = 4; + ANTI_ADDICT_LOGIN = 5; + SQUEEZE_CD = 6; + LOGIN_CONTROL = 7; + } + + PlayerLoginRsp.Retcode retcode = 1; + string msg = 2; + bool is_first_login = 4; + uint32 last_client_packet_id = 5; + string region_name = 6; + CGType cg_type = 9; + uint32 last_logout_time = 10; + uint32 region_id = 11; + bool is_valid_reconnect = 12; + uint32 account_type = 13; + string account_uid = 14; + uint32 login_session_token = 15; + uint32 psycho_key = 16; + bool is_packet_cache_empty = 17; +} + +// CmdID: 8 +message PlayerLogoutReq { + bool is_kick = 1; +} + +// CmdID: 10 +message GetMainDataReq { + enum DataType { + ALL = 0; + NICKNAME = 2; + LEVEL = 3; + EXP = 4; + HCOIN = 5; + SCOIN = 6; + STAMINA = 7; + STAMINA_RECOVER_LEFT_TIME = 8; + STAMINA_RECOVER_CONFIG_TIME = 9; + EQUIPMENT_SIZE_LIMIT = 14; + SELF_DESC = 16; + PAY_HCOIN = 17; + FREE_HCOIN = 18; + ASSISTANT_AVATAR_ID = 19; + IS_ALLOW_COST_SENIOR_EQUIP_ON_CUR_DEVICE = 20; + BIRTHDAY = 21; + RECHARGE_PRICE = 22; + WAIT_DEL_HCOIN = 23; + ON_MEDAL_ID = 24; + USE_FRAME_ID = 26; + MCOIN = 27; + PANEL_ACTIVITY = 28; + VIDEO_POPUP = 29; + ON_PHONE_PENDANT_ID = 30; + STORE_EVALUATE = 31; + CHATWORLD_ACTIVITY = 32; + LEVEL_LOCK = 33; + WARSHIP_AVATAR = 35; + USE_CUSTOM_HEAD = 36; + TOTAL_LOGIN_DAYS = 37; + WARSHIP_THEME = 38; + WAIT_DEL_MATERIAL = 39; + } + + repeated GetMainDataReq.DataType type_list = 1; +} + +message VideoPopupData { + uint32 id = 1; + uint32 begin_time = 2; + uint32 end_time = 3; + string middle_image_path = 4; + string video_icon = 5; + string video_link = 6; + uint32 video_link_open_type = 7; + uint32 max_times = 8; +} + +message ChatworldActivityInfo { + uint32 treasure_schedule_id = 1; + bool is_has_npc_red_envelope = 2; +} + +message WarshipAvatarData { + uint32 warship_first_avatar_id = 1; + uint32 warship_second_avatar_id = 2; +} + +message WaitDelMaterialData { + uint32 material_id = 1; + uint32 num = 2; +} + +// CmdID: 11 +message GetMainDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetMainDataRsp.Retcode retcode = 1; + string nickname = 2; + uint32 level = 3; + uint32 exp = 4; + uint32 hcoin = 5; + uint32 scoin = 6; + uint32 stamina = 7; + uint32 stamina_recover_left_time = 8; + uint32 stamina_recover_config_time = 9; + uint32 equipment_size_limit = 14; + string self_desc = 16; + uint32 pay_hcoin = 17; + uint32 free_hcoin = 18; + uint32 assistant_avatar_id = 19; + bool is_allow_cost_senior_equip_on_cur_device = 20; + uint32 birthday = 21; + uint32 month_recharge_price = 22; + uint32 wait_del_hcoin = 23; + uint32 on_medal_id = 24; + uint32 today_recharge_price = 26; + uint32 use_frame_id = 27; + bool is_all = 28; + uint32 mcoin = 29; + repeated uint32 open_panel_activity_list = 30; + repeated VideoPopupData video_popup_list = 31; + uint32 on_phone_pendant_id = 32; + uint32 next_evaluate_time = 33; + ChatworldActivityInfo chatworld_activity_info = 34; + uint32 level_lock_id = 35; + WarshipAvatarData warship_avatar = 37; + uint32 custom_head_id = 38; + uint32 total_login_days = 39; + uint32 register_time = 40; + WarshipThemeData warship_theme = 41; + repeated WaitDelMaterialData wait_del_material_list = 42; + Medal on_medal = 43; + repeated uint32 type_list = 44; +} + +// CmdID: 12 +message GetScoinExchangeInfoReq { +} + +// CmdID: 13 +message GetScoinExchangeInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetScoinExchangeInfoRsp.Retcode retcode = 1; + uint32 usable_times = 2; + uint32 total_times = 3; + uint32 hcoin_cost = 4; + uint32 scoin_get = 5; +} + +// CmdID: 14 +message ScoinExchangeReq { + uint32 purple_jade_num = 1; +} + +// CmdID: 15 +message ScoinExchangeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HCOIN_LACK = 2; + TIMES_LACK = 3; + LACK_PURPLE_JADE = 4; + } + + ScoinExchangeRsp.Retcode retcode = 1; + uint32 hcoin_cost = 2; + uint32 scoin_get = 3; + uint32 boost_rate = 4; + uint32 purple_jade_cost = 5; +} + +// CmdID: 16 +message GetStaminaExchangeInfoReq { +} + +// CmdID: 17 +message GetStaminaExchangeInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetStaminaExchangeInfoRsp.Retcode retcode = 1; + uint32 usable_times = 2; + uint32 total_times = 3; + uint32 hcoin_cost = 4; + uint32 stamina_get = 5; +} + +// CmdID: 18 +message StaminaExchangeReq { +} + +// CmdID: 19 +message StaminaExchangeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HCOIN_LACK = 2; + TIMES_LACK = 3; + STAMINA_FULL = 4; + } + + StaminaExchangeRsp.Retcode retcode = 1; + uint32 hcoin_cost = 2; + uint32 stamina_get = 3; +} + +// CmdID: 20 +message NicknameModifyReq { + string nickname = 1; +} + +// CmdID: 21 +message NicknameModifyRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FORMAT_ERROR = 2; + SENSITIVE_WORDS = 3; + IN_AUDIT = 4; + IN_CD = 5; + } + + NicknameModifyRsp.Retcode retcode = 1; + uint32 cd_end_time = 2; +} + +// CmdID: 22 +message GmTalkReq { + string msg = 1; + string cmd = 2; + string sub_cmd = 3; + repeated string param_list = 4; +} + +// CmdID: 23 +message GmTalkRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GmTalkRsp.Retcode retcode = 1; + string msg = 2; + string retmsg = 3; +} + +// CmdID: 24 +message GetAvatarDataReq { + repeated uint32 avatar_id_list = 1; +} + +// CmdID: 25 +message GetAvatarDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_NOT_EXIST = 2; + } + + GetAvatarDataRsp.Retcode retcode = 1; + repeated Avatar avatar_list = 2; + bool is_all = 3; +} + +// CmdID: 26 +message GetEquipmentDataReq { + repeated uint32 weapon_unique_id_list = 1; + repeated uint32 stigmata_unique_id_list = 2; + repeated uint32 material_id_list = 3; + repeated uint32 mecha_unique_id_list = 4; +} + +// CmdID: 27 +message GetEquipmentDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetEquipmentDataRsp.Retcode retcode = 1; + repeated Weapon weapon_list = 2; + repeated Stigmata stigmata_list = 3; + repeated Material material_list = 4; + bool is_all = 5; + repeated Mecha mecha_list = 6; + uint32 vitality_value = 7; +} + +// CmdID: 28 +message DelEquipmentNotify { + repeated uint32 weapon_unique_id_list = 1; + repeated uint32 stigmata_unique_id_list = 2; + repeated uint32 mecha_unique_id_list = 3; +} + +// CmdID: 29 +message AvatarStarUpReq { + uint32 avatar_id = 1; +} + +// CmdID: 30 +message AvatarStarUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_NOT_EXIST = 2; + FRAGMENT_LACK = 3; + STAR_FULL = 4; + FEATURE_CLOSED = 5; + } + + AvatarStarUpRsp.Retcode retcode = 1; +} + +// CmdID: 31 +message EquipmentPowerUpReq { + EquipmentItem main_item = 1; + EquipmentItemList consume_item_list = 2; +} + +// CmdID: 32 +message EquipmentPowerUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAIN_ITEM_NOT_EXIST = 2; + MAIN_ITEM_LEVEL_FULL = 3; + CONSUME_ITEM_NOT_EXIST = 4; + CONSUME_ITEM_IN_USE = 5; + CONSUME_ITEM_REPEAT = 6; + MAIN_ITEM_IN_CONSUME_ITEM_LIST = 7; + SCOIN_LACK = 8; + CONSUME_ITEM_PROTECTED = 9; + MAIN_ITEM_AFFIX_NOT_IDENTIFY = 10; + COST_GACHA_TICKET = 11; + COST_SENIOR_EQUIP_FROM_NEW_DEVICE = 12; + COST_SENIOR_EQUIP_CANCEL_PROTECT_TOO_SOON = 13; + CONSUME_ITEM_IN_FACILITY = 14; + CONSUME_ITEM_GRAND_KEY = 15; + CONSUME_ITEM_PROTECTED_BY_SECURITY_PASSWORD = 16; + } + + EquipmentPowerUpRsp.Retcode retcode = 1; + EquipmentItem main_item = 2; + uint32 boost_rate = 3; + repeated Material return_material_list = 4; +} + +// CmdID: 33 +message EquipmentSellReq { + EquipmentItemList sell_item_list = 1; +} + +// CmdID: 34 +message EquipmentSellRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CONSUME_ITEM_NOT_EXIST = 2; + CONSUME_ITEM_IN_USE = 3; + CONSUME_ITEM_REPEAT = 4; + CONSUME_ITEM_PROTECTED = 5; + COST_GACHA_TICKET = 6; + COST_SENIOR_EQUIP_FROM_NEW_DEVICE = 7; + COST_SENIOR_EQUIP_CANCEL_PROTECT_TOO_SOON = 8; + SELL_PRICE = 9; + CONSUME_ITEM_GRAND_KEY = 10; + CONSUME_ITEM_IN_FACILITY = 11; + LACK_VITALITY = 12; + CONTAINS_EQUIP_CAN_NOT_SELL = 13; + GREEN_STONE_QUANTITY_LIMIT = 14; + PURPLE_JADE_QUANTITY_LIMIT = 15; + CONSUME_ITEM_PROTECTED_BY_SECURITY_PASSWORD = 16; + } + + EquipmentSellRsp.Retcode retcode = 1; + uint32 scoin_add = 2; + uint32 purple_jade_add = 4; + uint32 cost_vitality = 5; +} + +// CmdID: 35 +message AddAvatarExpByMaterialReq { + uint32 avatar_id = 1; + uint32 material_id = 2; + uint32 material_num = 3; +} + +// CmdID: 36 +message AddAvatarExpByMaterialRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_NOT_EXIST = 2; + AVATAR_LEVEL_FULL = 3; + MATERAIL_NOT_ENOUGH = 4; + MATERAIL_CAN_NOT_ADD_EXP = 5; + } + + AddAvatarExpByMaterialRsp.Retcode retcode = 1; +} + +// CmdID: 37 +message EquipmentEvoReq { + EquipmentItem main_item = 1; + EquipmentItemList consume_item_list = 2; +} + +// CmdID: 38 +message EquipmentEvoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAIN_ITEM_NOT_EXIST = 2; + MAIN_ITEM_LEVEL_NOT_FULL = 3; + CONSUME_ITEM_NOT_EXIST = 4; + CONSUME_ITEM_IN_USE = 5; + CONSUME_ITEM_REPEAT = 6; + CONSUME_ITEM_UN_NECESSARY = 7; + CONSUME_ITEM_LACK = 8; + MAIN_ITEM_IN_CONSUME_ITEM_LIST = 9; + SCOIN_LACK = 10; + CONSUME_ITEM_PROTECTED = 11; + MAIN_ITEM_AFFIX_NOT_IDENTIFY = 12; + COST_GACHA_TICKET = 13; + COST_SENIOR_EQUIP_FROM_NEW_DEVICE = 14; + COST_SENIOR_EQUIP_CANCEL_PROTECT_TOO_SOON = 15; + CONSUME_ITEM_GRAND_KEY = 16; + CONSUME_ITEM_IN_FACILITY = 17; + MAIN_ITEM_IN_FACILITY = 18; + CONSUME_ITEM_PROTECTED_BY_SECURITY_PASSWORD = 19; + } + + EquipmentEvoRsp.Retcode retcode = 1; + EquipmentItem new_item = 2; +} + +// CmdID: 39 +message DressEquipmentReq { + uint32 avatar_id = 1; + EquipmentSlot slot = 2; + uint32 unique_id = 3; +} + +// CmdID: 40 +message DressEquipmentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_NOT_EXIST = 2; + EQUIPMENT_NOT_EXIST = 3; + EQUIPMENT_DRESSED = 4; + EQUIPMENT_SLOT_ERROR = 5; + COST_LACK = 6; + AFFIX_NOT_IDENTIFY = 7; + } + + DressEquipmentRsp.Retcode retcode = 1; + EquipmentSlot slot = 2; + uint32 unique_id = 3; +} + +// CmdID: 41 +message GetStageDataReq { + repeated uint32 stage_id_list = 1; +} + +// CmdID: 42 +message GetStageDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STAGE_NOT_EXIST = 2; + } + + GetStageDataRsp.Retcode retcode = 1; + repeated Stage stage_list = 2; + repeated uint32 finished_chapter_list = 3; + repeated StageEventData event_data_list = 4; + bool is_all = 5; +} + +// CmdID: 43 +message StageBeginReq { + uint32 stage_id = 1; + repeated uint32 avatar_id_list = 2; + AvatarTeamType avatar_team_type = 3; + uint32 assistant_uid = 4; + bool is_speed_up_stage = 5; + repeated uint32 avatar_trial_id_list = 6; + repeated uint32 elf_id_list = 7; + uint32 target_wave = 8; + string mtp_report_type = 11; + string mtp_report_value = 12; + bool is_re_begin = 13; + repeated uint32 avatar_restrict_list = 14; + bool is_theme_wanted_mp_assist_mode = 15; + uint32 sc_dlc_support_avatar_id = 16; + uint32 stage_begin_floor = 17; + repeated uint32 monster_card_unique_id_list = 18; + repeated uint32 fake_avatar_id_list = 19; + repeated uint32 extra_item_id_list = 20; + uint32 step_level = 21; + uint32 activity_id = 22; + uint32 theme_wanted_multi_num = 23; + bool is_theme_wanted_extra_drop = 24; +} + +// CmdID: 44 +message StageBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STAGE_NOT_EXIST = 2; + LEVEL_LACK = 3; + STAMINA_LACK = 4; + AVATAR_ERROR = 5; + EQUIPMENT_FULL = 6; + ENTER_TIMES_LACK = 7; + ASSISTANT_PLAYER_FROZEN = 8; + ACTIVITY_LEVEL_LACK = 9; + ACTIVITY_ENTER_TIMES_LACK = 10; + ACTIVITY_NOT_BEGIN = 11; + ACTIVITY_END = 12; + AVATAR_NUM_ERROR = 13; + CHALLENGE_NUM_LACK = 14; + FRIEND_NUM_MAX = 15; + EXTRA_STORY_LEVEL_LACK = 16; + EXTRA_STORY_NOT_BEGIN = 17; + EXTRA_STORY_END = 18; + NOT_MEET_RESTRICT = 19; + EQUIPMENT_MATERIAL_LIMIT = 20; + EQUIPMENT_FRAGMENT_LIMIT = 21; + NOT_MEET_FAST = 22; + PRE_MP_STAGE_NOT_FINISH = 23; + STAGE_TYPE_ERROR = 24; + MP_LEVEL_LACK = 25; + ACTIVITY_UNLOCK = 26; + NOT_MEET_EXTRA_STORY_CHALLENGE_MODE = 28; + EXTRA_STORY_EQUIPMENT_USED = 29; + EXTRA_STORY_AVATAR_USED = 30; + EXTRA_STORY_AVATAR_LIMIT = 31; + STAGE_FINISH_ONCE = 32; + SEASON_TICKET_LACK = 33; + PRE_STAGE_NOT_FINISH = 34; + CHALLENGE_MODE_NEED_RESET = 35; + ALREADY_OPEN_DUNGEONS = 36; + DUNGEONS_AREA_LOCKED = 37; + DUNGEONS_TEST_STAGE_FIRST = 38; + DUNGEONS_TEST_STAGE_DONE = 39; + COST_MATERIAL_LACK = 40; + WEEKLY_ENTER_TIMES_LACK = 41; + RECLAIM_BOOM_ENERGY_LACK = 42; + RECLAIM_LEVEL_LACK = 43; + OPENWORLD_BOSS_MP_INVALID = 44; + SCORE_LACK = 45; + COUPLE_TOWER_FLOOR_LACK = 46; + GENERAL_ACTIVITY_CONDITION_LIMIT = 47; + EQUIPMENT_DISMATCH_LOCKED = 48; + WEAPON_LOCKED = 49; + STIGMATA_LOCKED = 50; + ELF_ERROR = 51; + NOT_IN_SQUAD = 52; + ELF_CARRY_LEVEL_LIMIT = 53; + CAMPAIGN_PHASE_ERROR = 54; + MISSION_LOCKED = 55; + HAS_TAKE_CAMPAIGN_REWARD = 56; + FEATURE_CLOSED = 61; + NOT_IN_TEAM = 62; + EXTRA_MATERIAL_LACK = 63; + FEATURE_LIMIT = 64; + STAGE_MISMATCH = 65; + NOT_IN_SAME_ARMADA = 67; + ASSIST_STAMINA_LACK = 68; + ARMADA_ACTIVITY_NOT_OPEN = 69; + NOT_IN_ARMADA = 70; + LOGIN_DAYS_LACK = 71; + NOT_NEWBIE = 72; + IN_CD = 73; + DAILY_RAID_NOT_ACTIVE = 74; + CHAPTER_PRE_ZONE_NOT_FINISHED = 75; + BEAST_TIME_NOT_ENOUGH = 76; + SINGLE_WANTED_BOX_UNPICK = 77; + EXCLUSIVE_STAGE_CONFLICT = 78; + THEME_WANTED_LEADER_TICKET_LACK = 79; + THEME_WANTED_MEMBER_LOCKED = 80; + THEME_WANTED_LOCK = 81; + THEME_WANTED_TICKET_LACK = 82; + SLG_BATTLE_NOT_OPEN = 83; + SLG_BATTLE_POINT_ERROR = 84; + SLG_BATTLE_POINT_NOT_OPEN = 85; + UNLOCK_TIME_LIMIT = 86; + BEGIN_FLOOR_ERROR = 87; + OPENWORLD_STORY_NOT_FINISH = 88; + MONSTER_CARD_MONSTER_ERROR = 89; + MONSTER_CARD_COST_LIMIT = 90; + CHAPTER_OW_FAME_LEVEL_LACK = 91; + BUFF_ASSIST_STAGE_NOT_OPEN = 92; + WAVE_RUSH_STAGE_NOT_OPEN = 93; + WAVE_RUSH_PRE_SITE_NOT_FINISHED = 94; + WAVE_RUSH_DAILY_STAGE_NOT_OPEN = 95; + AI_CYBER_CONDITION_NOT_MEET = 96; + AI_CYBER_AREA_ERROR = 97; + AI_CYBER_DAILY_STAGE_NOT_MATCH = 98; + FAKE_AVATAR_NUM_ERROR = 99; + FAKE_AVATAR_ERROR = 100; + PLATFORM_SHOOTER_DAILY_CHALLENGE_MISMATCH = 101; + MIRAGE_STAGE_MISMATCH = 102; + MIRAGE_NOT_OPEN = 103; + EXTRA_ITEM_ERROR = 104; + CHAPTER_BW_WORLD_EXP_MATERIAL_FULL = 105; + CHAPTER_BW_WORLD_RUNE_FULL = 106; + REWARD_LINE_ERROR = 107; + CHAPTER_BW_WORLD_EQUIP_RUNE_ERROR = 108; + THEME_TOWER_SECTION_ERROR = 109; + THEME_TOWER_STAGE_NOT_MATCH = 110; + CHAPTER_ARK_AVATAR_ATTRIBUTE_ERROR = 111; + CHAPTER_ERROR = 112; + CONDITION_MISMATCH = 113; + MINION_CLASH_NOT_OPEN = 114; + MINION_CLASH_STAGE_MISMATCH = 115; + ARK_PLUS_IN_CHALLENGE = 116; + ELF_SYSTEM_ERROR = 117; + PJMS_AUXILIARY_UNIT_NUM_LIMIT = 118; + THEME_WANTED_MATERIAL_LACK = 119; + SIMPLIFIED_GOD_WAR_WEEKLY_CHALLENGE_LOCKED = 120; + SIMPLIFIED_GOD_WAR_NOT_IN_CHALLENGE = 121; + SIMPLIFIED_GOD_WAR_NOT_IN_SITE = 122; + MONSTER_MORPH_MONSTER_LIMIT = 123; + MONSTER_MORPH_MINION_LIMIT = 124; + MONSTER_CARD_SUPPORT_ERROR = 125; + MONSTER_CARD_SUPPORT_REPEAT = 126; + MONSTER_CARD_REPEAT = 127; + CONFIG_NOT_FOUND = 128; + } + + StageBeginRsp.Retcode retcode = 1; + uint32 stage_id = 2; + uint32 progress = 3; + repeated DropItem drop_item_list = 4; + bool is_collect_cheat_data = 5; + string sign_key = 6; + uint32 tag = 7; + repeated AvatarEquipBuff equip_buff_list = 8; + repeated string battle_buff_list = 9; + repeated string battle_attr_list = 10; + bool is_trigger_baodi = 11; + bytes security_cmd_buffer = 12; + string stage_transaction_str = 13; + uint32 god_war_skill_id = 14; + uint32 ark_plus_room_event_id = 15; + bytes game_data = 20; +} + +// CmdID: 45 +message StageEndReq { + bytes body = 1; + string sign = 2; +} + +// CmdID: 46 +message StageEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STAGE_ERROR = 2; + DROP_ERROR = 3; + CHALLENGE_ERROR = 4; + STAGE_TIME_ERROR = 5; + ALREADY_OPEN_DUNGEONS = 6; + NOT_MEET_FAST = 22; + COST_MATERIAL_LACK = 40; + NOT_IN_TEAM = 62; + SLG_BATTLE_NOT_OPEN = 63; + ACTIVITY_NOT_OPEN = 64; + END_FLOOR_ERROR = 66; + } + + StageEndRsp.Retcode retcode = 1; + uint32 stage_id = 2; + uint32 player_exp_reward = 3; + uint32 avatar_exp_reward = 4; + uint32 scoin_reward = 5; + repeated StageChallengeData challenge_list = 6; + uint32 friends_point_add = 7; + uint32 progress = 8; + repeated StageSpecialChallengeData special_challenge_list = 9; + MpStageMvpReward mvp_reward = 10; + repeated DropItem mp_drop_item_list = 11; + uint32 mp_exp_reward = 12; + uint32 exp_convert_scoin = 13; + uint32 bond_add_friends_point = 14; + AccountBuffReward buff_reward = 16; + uint32 world_boss_score = 17; + uint32 rank_scoin = 18; + RewardData line_enhance_reward_data = 19; + uint32 dungeons_evaluation = 20; + repeated DropItem dungeons_drop_item_list = 21; + StageEndStatus end_status = 22; + uint32 bonus_score = 24; + repeated DropItem bonus_drop_list = 25; + repeated RewardData extra_reward_data_list = 27; + repeated DropItem extra_drop_list = 28; + bool is_new_max_score = 29; + repeated DropItem theme_wanted_drop_item_list = 31; + repeated DropItem theme_wanted_show_extra_drop_item_list = 32; + bool is_theme_wanted_extra_drop_taken_by_first_pass = 33; + uint32 god_war_challenge_score = 34; + uint32 old_max_score = 35; + uint32 stage_score = 36; + bool is_first_win = 37; + repeated RewardData bonus_reward_data_list = 38; + repeated PjmsAuxiliaryUnit auxiliary_unit_list = 39; + repeated DropItem pjms_resident_settle_pre_stage_drop_item_list = 40; +} + +// CmdID: 47 +message GetAvatarTeamDataReq { +} + +// CmdID: 48 +message GetAvatarTeamDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetAvatarTeamDataRsp.Retcode retcode = 1; + repeated AvatarTeam avatar_team_list = 2; + repeated CustomAvatarTeam custom_avatar_team_list = 3; +} + +// CmdID: 49 +message UpdateAvatarTeamNotify { + AvatarTeam team = 1; +} + +// CmdID: 50 +message AvatarSubSkillLevelUpReq { + uint32 avatar_id = 1; + uint32 skill_id = 2; + uint32 sub_skill_id = 3; + bool is_level_up_all = 4; +} + +// CmdID: 51 +message AvatarSubSkillLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_NOT_EXIST = 2; + SKILL_NOT_EXIST = 3; + SUB_SKILL_NOT_EXIST = 4; + AVATAR_LEVEL_LACK = 5; + AVATAR_STAR_LACK = 6; + SCOIN_LACK = 7; + SKILL_POINT_LACK = 8; + MATERIAL_LACK = 9; + LEVEL_FULL = 10; + } + + AvatarSubSkillLevelUpRsp.Retcode retcode = 1; +} + +// CmdID: 56 +message MaterialEvoReq { +} + +// CmdID: 57 +message MaterialEvoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + MaterialEvoRsp.Retcode retcode = 1; +} + +// CmdID: 60 +message GetStageDropDisplayReq { + repeated uint32 stage_id_list = 1; +} + +// CmdID: 61 +message GetStageDropDisplayRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STAGE_NOT_EXIST = 2; + STAGE_TOO_MUCH = 3; + } + + GetStageDropDisplayRsp.Retcode retcode = 1; + repeated StageDropDisplayInfo stage_drop_list = 2; +} + +// CmdID: 64 +message GetFriendListReq { +} + +// CmdID: 65 +message GetFriendListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetFriendListRsp.Retcode retcode = 1; + repeated PlayerFriendBriefData friend_list = 2; + bool is_whole_data = 3; + uint32 assistant_num = 4; +} + +// CmdID: 66 +message AddFriendReq { + AddFriendAction action = 1; + repeated uint32 target_uid_list = 2; +} + +// CmdID: 67 +message AddFriendRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TARGET_NOT_EXIST = 2; + FRIEND_FULL = 3; + TARGET_FRIEND_FULL = 4; + IS_SELF = 5; + IS_FRIEND = 6; + ASK_TOO_OFTEN = 7; + TARGET_ASK_LIST_FULL = 8; + TARGET_IN_ASK_LIST = 9; + REDIS_MULTI_ERROR = 10; + NOT_ALLOW_CROSS_REGION_FRIEND = 11; + CROSS_REGION_FRIEND_FULL = 12; + FEATURE_LIMIT = 13; + FORBIDDEN = 14; + FEATURE_CLOSED = 15; + } + + AddFriendRsp.Retcode retcode = 1; + AddFriendAction action = 2; + repeated uint32 target_uid_list = 3; +} + +// CmdID: 68 +message DelFriendReq { + uint32 target_uid = 1; +} + +// CmdID: 69 +message DelFriendRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TARGET_NOT_FRIEND = 2; + REDIS_MULTI_ERROR = 3; + MASTER_PUPIL = 4; + } + + DelFriendRsp.Retcode retcode = 1; + uint32 target_uid = 2; +} + +// CmdID: 70 +message GetAskAddFriendListReq { +} + +message FriendAskAddData { + PlayerFriendBriefData brief = 1; + uint32 ask_time = 2; +} + +// CmdID: 71 +message GetAskAddFriendListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetAskAddFriendListRsp.Retcode retcode = 1; + repeated FriendAskAddData ask_list = 2; +} + +// CmdID: 72 +message GetPlayerDetailDataReq { + uint32 target_uid = 1; +} + +// CmdID: 73 +message GetPlayerDetailDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TARGET_NOT_EXIST = 2; + } + + GetPlayerDetailDataRsp.Retcode retcode = 1; + PlayerDetailData detail = 2; +} + +// CmdID: 74 +message UpdateEquipmentProtectedStatusReq { + bool is_protected = 1; + repeated uint32 weapon_unique_id_list = 2; + repeated uint32 stigmata_unique_id_list = 3; +} + +// CmdID: 75 +message UpdateEquipmentProtectedStatusRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + EQUIPMENT_NOT_EXIST = 2; + } + + UpdateEquipmentProtectedStatusRsp.Retcode retcode = 1; +} + +// CmdID: 76 +message GetRecommendFriendListReq { + uint32 level = 1; + repeated uint32 filter_uid_list = 2; + repeated uint32 recommend_uid_list = 3; + repeated uint32 mp_recommend_uid_list = 4; +} + +// CmdID: 77 +message GetRecommendFriendListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TOO_OFTEN = 2; + } + + GetRecommendFriendListRsp.Retcode retcode = 1; + repeated PlayerFriendBriefData recommend_list = 2; +} + +// CmdID: 78 +message SetSelfDescReq { + string self_desc = 1; +} + +// CmdID: 79 +message SetSelfDescRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FORMAT_ERROR = 2; + SENSITIVE_WORDS = 3; + IN_AUDIT = 4; + IN_CD = 5; + } + + SetSelfDescRsp.Retcode retcode = 1; + uint32 cd_end_time = 2; +} + +// CmdID: 80 +message DelFriendNotify { + uint32 target_uid = 1; +} + +// CmdID: 81 +message GetOfflineFriendsPointNotify { + uint32 friends_point = 1; +} + +// CmdID: 82 +message VerifyItunesOrderNotify { + string receipt_data = 1; + string device_uuid = 2; + bool is_auto_reissue = 3; + string currency_code = 4; + string price_amount = 5; +} + +// CmdID: 84 +message GetMailDataReq { +} + +// CmdID: 85 +message GetMailDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetMailDataRsp.Retcode retcode = 1; + repeated Mail mail_list = 2; + bool is_all = 3; +} + +// CmdID: 86 +message GetMailAttachmentReq { + repeated MailKey mail_key_list = 1; + bool is_show_attachment = 2; +} + +// CmdID: 87 +message GetMailAttachmentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetMailAttachmentRsp.Retcode retcode = 1; + repeated MailKey succ_mail_key_list = 2; + bool is_show_attachment = 3; + MailAttachment mail_attachment = 4; +} + +// CmdID: 88 +message UnlockAvatarSkillReq { + uint32 avatar_id = 1; + uint32 skill_id = 2; +} + +// CmdID: 89 +message UnlockAvatarSkillRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_NOT_EXIST = 2; + HAS_UNLOCK = 3; + AVATAR_LEVEL_LACK = 4; + AVATAR_STAR_LACK = 5; + MATERIAL_LACK = 6; + } + + UnlockAvatarSkillRsp.Retcode retcode = 1; +} + +// CmdID: 90 +message EquipmentQuickLevelUpReq { + EquipmentItem main_item = 1; + EquipmentItemList power_up_consume_item_list = 2; + EquipmentItemList evo_consume_item_list = 3; + uint32 target_item_id = 4; + uint32 target_level = 5; +} + +// CmdID: 91 +message EquipmentQuickLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAIN_ITEM_LEVEL_FULL = 2; + MAIN_ITEM_NOT_EXIST = 3; + CONSUME_ITEM_NOT_EXIST = 4; + CONSUME_ITEM_IN_USE = 5; + CONSUME_ITEM_REPEAT = 6; + MAIN_ITEM_IN_CONSUME_ITEM_LIST = 7; + SCOIN_LACK = 8; + CONSUME_ITEM_PROTECTED = 9; + MAIN_ITEM_AFFIX_NOT_IDENTIFY = 10; + COST_GACHA_TICKET = 11; + COST_SENIOR_EQUIP_FROM_NEW_DEVICE = 12; + COST_SENIOR_EQUIP_CANCEL_PROTECT_TOO_SOON = 13; + CONSUME_ITEM_GRAND_KEY = 14; + CONSUME_ITEM_IN_FACILITY = 15; + CONSUME_ITEM_PROTECTED_BY_SECURITY_PASSWORD = 16; + CONSUME_ITEM_UN_NECESSARY = 17; + CONSUME_ITEM_LACK = 18; + FEATURE_CLOSED = 19; + } + + EquipmentQuickLevelUpRsp.Retcode retcode = 1; + EquipmentItem new_item = 2; + repeated uint32 boost_rate_list = 3; + repeated Material return_material_list = 4; +} + +// CmdID: 92 +message RefreshAvatarSkillReq { + uint32 avatar_id = 1; +} + +// CmdID: 93 +message RefreshAvatarSkillRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_NOT_EXIST = 2; + } + + RefreshAvatarSkillRsp.Retcode retcode = 1; +} + +// CmdID: 100 +message GetAssistantFrozenListReq { +} + +// CmdID: 101 +message GetAssistantFrozenListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetAssistantFrozenListRsp.Retcode retcode = 1; + repeated AssistantFrozen frozen_list = 2; +} + +// CmdID: 102 +message SellAvatarFragmentReq { + repeated AvatarFragment fragment_list = 1; +} + +// CmdID: 103 +message SellAvatarFragmentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FRAGMENT_NOT_ENOUGH = 2; + } + + SellAvatarFragmentRsp.Retcode retcode = 1; + uint32 scoin_add = 2; +} + +// CmdID: 104 +message GetHasGotItemIdListReq { +} + +message WeaponInfo { + uint32 weapon_id = 1; + uint32 sub_weapon_id = 2; +} + +// CmdID: 105 +message GetHasGotItemIdListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetHasGotItemIdListRsp.Retcode retcode = 1; + repeated uint32 item_id_list = 2; +} + +// CmdID: 106 +message AvatarReviveReq { + bool is_retry = 1; + uint32 revive_use_id = 2; +} + +// CmdID: 107 +message AvatarReviveRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HCOIN_LACK = 2; + TIMES_LACK = 3; + NOT_IN_STAGE = 4; + MATERIAL_LACK = 5; + } + + AvatarReviveRsp.Retcode retcode = 1; + uint32 revive_times = 2; +} + +// CmdID: 108 +message ResetStageEnterTimesReq { + uint32 stage_id = 1; +} + +// CmdID: 109 +message ResetStageEnterTimesRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HCOIN_LACK = 2; + TIMES_LACK = 3; + NOT_NEED_RESET = 4; + STAGE_ID_ERROR = 5; + MATERIAL_LACK = 6; + } + + ResetStageEnterTimesRsp.Retcode retcode = 1; +} + +// CmdID: 110 +message GetConfigReq { +} + +// CmdID: 111 +message GetConfigRsp { + message GachaTicket { + uint32 material_id = 1; + uint32 hcoin_cost = 2; + } + + message DiscountScheduleConfig { + uint32 type = 1; + uint32 discount = 2; + uint32 begin_time = 3; + uint32 end_time = 4; + repeated uint32 para_int_list = 5; + } + + message FriendBondLevelConfig { + uint32 level = 1; + uint32 min_bond = 2; + uint32 assist_cd_reduce_rate = 3; + uint32 invite_add_friends_point = 4; + uint32 extra_add_mp_exp_rate = 5; + uint32 extra_mp_add_friends_point = 6; + } + + message AntiCheatStageCheckConfig { + repeated uint32 check_stage_id_list = 1; + repeated uint32 check_stage_type_list = 2; + } + + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetConfigRsp.Retcode retcode = 1; + uint32 stamina_recover_config_time = 2; + uint32 avatar_revive_hcoin_cost = 4; + uint32 same_type_power_up_rate = 5; + uint32 day_time_offset = 6; + uint32 server_cur_time = 7; + uint32 power_up_scoin_cost_rate = 8; + uint32 max_friend_num = 9; + uint32 avatar_max_add_goodfeel = 12; + repeated AvatarCostPlusConfig avatar_cost_plus_config_list = 13; + uint32 disjoin_equipment_back_exp_percent = 15; + repeated GetConfigRsp.GachaTicket gacha_ticket_list = 31; + string region_name = 32; + uint32 min_invite_level = 33; + repeated GetConfigRsp.DiscountScheduleConfig discount_schedule_config_list = 35; + uint32 island_event_refresh_interval = 36; + bool is_random_box_product_open = 40; + uint32 scoin_limit = 41; + uint32 friends_point_limit = 42; + uint32 product_random_box_begin_time = 43; + uint32 product_random_box_end_time = 44; + uint32 week_day_activity_coin_item_id = 45; + uint32 island_visit_max_help_num = 46; + uint32 cost_senior_equip_after_cancel_protect_min_time_diff = 47; + repeated BulletinActivityConfig bulletin_activity_list = 50; + uint32 rogue_stage_open_level = 52; + uint32 stigmata_rune_open_level = 56; + uint32 stigmata_promote_max_times = 59; + uint32 stigmata_rune_combat_ratio = 60; + uint32 stigmata_disjoin_back_exp_percent = 61; + uint32 stigmata_refine_value_back_percent = 62; + uint32 scoin_convert_per_exp = 64; + uint32 mp_reset_skill_hcoin_cost = 65; + uint32 mp_member_max_times_for_all_act = 66; + uint32 mp_member_exhausted_drop_ratio = 67; + repeated GetConfigRsp.FriendBondLevelConfig friend_bond_level_config_list = 68; + uint32 friend_assistant_add_bond = 70; + uint32 armada_manage_mail_length = 72; + uint32 armada_contact_length = 73; + uint32 armada_manage_mail_cd = 74; + uint32 armada_bulletin_length = 75; + uint32 openworld_judge_para_type1 = 76; + uint32 openworld_judge_para_type2 = 77; + uint32 openworld_judge_para_type3 = 78; + uint32 openworld_judge_para_type4 = 79; + uint32 trial_avatar_player_min_level = 80; + uint32 disjoin_equipment_max_batch_num = 81; + uint32 equip_disjoint_unlock_level = 82; + repeated uint32 stage_type_limit_avatar_fight_in_venture_list = 83; + GetConfigRsp.AntiCheatStageCheckConfig anti_cheat_stage_check_config = 85; + bool is_can_gal_touch = 87; + bool is_resistance_open = 88; + uint32 next_day_begin_time = 90; +} + +// CmdID: 112 +message GetMissionDataReq { +} + +// CmdID: 113 +message GetMissionDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetMissionDataRsp.Retcode retcode = 1; + repeated Mission mission_list = 2; + bool is_all = 7; + bool is_in_activity = 8; + ChallengeMissionData challenge_mission = 9; + repeated uint32 close_mission_list = 10; + MainlineStepMission mainline_step = 11; +} + +// CmdID: 114 +message GetMissionRewardReq { + repeated uint32 mission_id_list = 1; +} + +// CmdID: 115 +message GetMissionRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MISSION_ID_ERROR = 2; + MISSION_STATUS_ERROR = 3; + EQUIPMENT_FULL = 4; + EQUIPMENT_MATERIAL_LIMIT = 5; + EQUIPMENT_FRAGMENT_LIMIT = 6; + FEATURE_CLOSED = 7; + EQUIPMENT_ELF_FRAGMENT_LIMIT = 8; + TIME_LIMIT = 9; + } + + GetMissionRewardRsp.Retcode retcode = 1; + RewardData reward_data = 2; + repeated uint32 mission_id_list = 3; + uint32 reward_unlock_time = 4; +} + +// CmdID: 116 +message DelMissionNotify { + uint32 mission_id = 1; +} + +// CmdID: 117 +message UpdateMissionProgressReq { + MissionFinishWay finish_way = 1; + uint32 finish_para = 2; + string finish_para_str = 3; + uint32 progress_add = 4; + uint32 stage_id = 5; +} + +// CmdID: 118 +message UpdateMissionProgressRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FINISH_WAY_ERROR = 2; + PLAYER_STATUS_ERROR = 3; + } + + UpdateMissionProgressRsp.Retcode retcode = 1; +} + +// CmdID: 119 +message BindAccountReq { + uint32 account_type = 1; + string account_uid = 2; + string account_token = 3; + string account_ext = 4; +} + +// CmdID: 120 +message BindAccountRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACCOUNT_TYPE_ERROR = 2; + ACCOUNT_VERIFY_FAILED = 3; + ACCOUNT_BIND_TO_OTHER_UID = 4; + REPEAT_BIND = 5; + } + + BindAccountRsp.Retcode retcode = 1; + uint32 account_type = 2; + string account_uid = 3; +} + +// CmdID: 121 +message GetSignInRewardStatusReq { +} + +// CmdID: 122 +message GetSignInRewardStatusRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetSignInRewardStatusRsp.Retcode retcode = 1; + bool is_need_sign_in = 2; + uint32 next_sign_in_day = 3; + uint32 next_sign_in_reward_id = 4; +} + +// CmdID: 123 +message GetSignInRewardReq { +} + +// CmdID: 124 +message GetSignInRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + REPEAT_SIGN_IN = 2; + } + + GetSignInRewardRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; +} + +// CmdID: 125 +message GetWeekDayActivityDataReq { +} + +// CmdID: 126 +message GetWeekDayActivityDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetWeekDayActivityDataRsp.Retcode retcode = 1; + repeated WeekDayActivity activity_list = 2; + bool is_whole_data = 3; + repeated ActivitySeries series_list = 5; +} + +// CmdID: 127 +message GetFinishGuideDataReq { +} + +// CmdID: 128 +message GetFinishGuideDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetFinishGuideDataRsp.Retcode retcode = 1; + repeated uint32 guide_id_list = 2; +} + +// CmdID: 129 +message FinishGuideReportReq { + repeated uint32 guide_id_list = 1; + bool is_force_finish = 2; +} + +// CmdID: 130 +message FinishGuideReportRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + FinishGuideReportRsp.Retcode retcode = 1; + repeated uint32 guide_id_list = 2; + bool is_finish = 3; +} + +// CmdID: 131 +message StageInnerDataReportReq { + repeated StageInnerAvatarData avatar_list = 1; + repeated StageInnerMonsterData monster_list = 2; + uint32 rotate_camera_times = 3; + repeated StageInnerElfData elf_list = 4; + uint32 stage_id = 5; +} + +// CmdID: 132 +message StageInnerDataReportRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + StageInnerDataReportRsp.Retcode retcode = 1; +} + +// CmdID: 133 +message GetDispatchReq { +} + +// CmdID: 134 +message GetDispatchRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CLIENT_VERSION_ERROR = 2; + } + +} + +// CmdID: 135 +message ExchangeAvatarWeaponReq { + uint32 avatar_id_1 = 1; + uint32 avatar_id_2 = 2; +} + +// CmdID: 136 +message ExchangeAvatarWeaponRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_ERROR = 2; + WEAPON_TYPE_ERROR = 3; + COST_LACK = 4; + } + + ExchangeAvatarWeaponRsp.Retcode retcode = 1; +} + +// CmdID: 137 +message GetBulletinReq { + enum ReqBulletinType { + BULLETIN_ALL = 0; + BULLETIN_UPDATE_TIME = 1; + BULLETIN_TITLE = 2; + BULLETIN_CONTENT = 3; + } + + GetBulletinReq.ReqBulletinType type = 1; + repeated uint32 bulletin_id_list = 2; +} + +// CmdID: 138 +message GetBulletinRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetBulletinRsp.Retcode retcode = 1; + repeated Bulletin bulletin_list = 2; + bool is_all = 3; +} + +// CmdID: 154 +message AddGoodfeelReq { + enum AddGoodfeelType { + ADD_GOODFEEL_TYPE_NONE = 0; + TOUCH = 1; + STAGE = 2; + DORM = 3; + } + + uint32 avatar_id = 1; + int32 add_goodfeel = 2; + uint32 add_goodfeel_type = 3; +} + +// CmdID: 155 +message AddGoodfeelRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_NOT_EXIST = 2; + } + + AddGoodfeelRsp.Retcode retcode = 1; +} + +// CmdID: 179 +message IslandDisjoinEquipmentReq { + EquipmentType type = 1; + repeated uint32 unique_id_list = 2; + DisjoinType disjoin_type = 3; +} + +// CmdID: 180 +message IslandDisjoinEquipmentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CABIN_TECH_NOT_ADD = 2; + CONSUME_ITEM_NOT_EXIST = 3; + CONSUME_ITEM_IN_USE = 4; + CONSUME_ITEM_PROTECTED = 5; + SCOIN_LACK = 6; + EQUIPMENT_FULL = 7; + COST_SENIOR_EQUIP_FROM_NEW_DEVICE = 8; + COST_SENIOR_EQUIP_CANCEL_PROTECT_TOO_SOON = 9; + TITLE_LEVEL_ERROR = 10; + BATCH_NUM = 11; + LEVEL_LACK = 12; + CONSUME_ITEM_REPEAT = 13; + COST_GACHA_TICKET = 14; + CONSUME_ITEM_GRAND_KEY = 15; + CONSUME_ITEM_IN_FACILITY = 16; + EX_DISJOIN_CURRENCY_LACK = 17; + CONSUME_ITEM_PROTECTED_BY_SECURITY_PASSWORD = 18; + WEAPON_HOMOLOGIED = 19; + } + + IslandDisjoinEquipmentRsp.Retcode retcode = 1; + repeated uint32 disjoin_unique_id_list = 2; +} + +// CmdID: 185 +message GetGuideRewardReq { + uint32 guide_id = 1; +} + +// CmdID: 186 +message GetGuideRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + GUIDE_ERROR = 2; + REWARD_EMPTY = 3; + } + + GetGuideRewardRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; +} + +// CmdID: 187 +message UrgencyMsgNotify { + string msg = 1; + SettingDict client_setting = 2; +} + +// CmdID: 193 +message RefineStigmataRuneReq { + StigmataRefineType type = 1; + uint32 unique_id = 2; + EquipmentItemList consume_item_list = 3; + uint32 special_id = 4; + uint32 lock_rune_index = 5; + bool is_retry = 6; + StigmataRefineTimesType times_type = 7; +} + +// CmdID: 194 +message RefineStigmataRuneRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STIGMATA_NOT_EXIST = 2; + STIGMATA_NOT_IDENTIFY = 3; + STIGMATA_CAN_NOT_REFINE = 4; + STIGMATA_WAIT_RUNE_EXIST = 5; + CONSUME_ITEM_NOT_EXIST = 6; + CONSUME_ITEM_IN_USE = 7; + CONSUME_ITEM_REPEAT = 8; + CONSUME_ITEM_UN_NECESSARY = 9; + CONSUME_ITEM_LACK = 10; + ITEM_IN_CONSUME_ITEM_LIST = 11; + CONSUME_ITEM_PROTECTED = 12; + COST_GACHA_TICKET = 13; + COST_SENIOR_EQUIP_FROM_NEW_DEVICE = 14; + COST_SENIOR_EQUIP_CANCEL_PROTECT_TOO_SOON = 15; + LEVEL_LACK = 16; + CONSUME_ITEM_IN_FACILITY = 17; + CONSUME_ITEM_GRAND_KEY = 18; + SLOT_LACK = 19; + TRIGGER_MATERIAL_LACK = 20; + LOCK_INDEX_ERROR = 21; + CONSUME_ITEM_PROTECTED_BY_SECURITY_PASSWORD = 22; + NOT_OPEN = 23; + TOO_MANY_WAIT_RUNE = 24; + } + + RefineStigmataRuneRsp.Retcode retcode = 1; + repeated StigmataRune rune_list = 2; + StigmataRefineTimesType times_type = 3; + repeated StigmataRuneGroup rune_group_list = 4; + repeated uint32 wait_select_stgimata_list = 5; +} + +// CmdID: 195 +message SelectNewStigmataRuneReq { + uint32 unique_id = 1; + bool is_select = 2; + StigmataRefineTimesType times_type = 3; + uint32 select_unique_id = 4; +} + +// CmdID: 196 +message SelectNewStigmataRuneRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STIGMATA_NOT_EXIST = 2; + NO_NEW_RUNE = 3; + SELECT_EMPTY = 4; + NOT_OPEN = 5; + TOO_FAST = 6; + } + + SelectNewStigmataRuneRsp.Retcode retcode = 1; + uint32 select_unique_id = 2; + bool is_select = 3; +} + +// CmdID: 207 +message CreateWeiXinOrderReq { + enum TradeType { + NONE = 0; + APP = 1; + NATIVE = 2; + } + + string body = 1; + string attach = 2; + string total_fee = 3; + string notify_url = 4; + CreateWeiXinOrderReq.TradeType trade_type = 5; +} + +// CmdID: 208 +message CreateWeiXinOrderRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + CreateWeiXinOrderRsp.Retcode retcode = 1; + string prepay_id = 2; + string partner_id = 3; + string nonce_str = 4; + string timestamp = 5; + string sign = 6; + string qr_code_url = 7; +} + +// CmdID: 229 +message CommentReportReq { + CommentType comment = 1; + uint32 times = 2; +} + +// CmdID: 230 +message CommentReportRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + CommentReportRsp.Retcode retcode = 1; + uint32 next_evaluate_time = 2; +} + +// CmdID: 231 +message GetExtraStoryDataReq { +} + +// CmdID: 232 +message GetExtraStoryDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetExtraStoryDataRsp.Retcode retcode = 1; + repeated ExtraStoryChapter chapter_list = 2; + bool is_dynamic_hard_lv = 3; + repeated uint32 chapter_key_list = 4; + repeated uint32 taken_reward_line_id_list = 5; + bool is_open_enhance = 6; + repeated uint32 taken_enhance_reward_act_id_list = 7; +} + +// CmdID: 233 +message GetExtraStoryActivityActReq { + uint32 chapter_id = 1; +} + +// CmdID: 234 +message GetExtraStoryActivityActRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHAPTER_NOT_EXIST = 2; + } + + GetExtraStoryActivityActRsp.Retcode retcode = 1; + repeated ExtraStoryAct act_list = 2; +} + +// CmdID: 235 +message GetExtraStoryAchieveDataReq { + uint32 chapter_id = 1; +} + +// CmdID: 236 +message GetExtraStoryAchieveDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHAPTER_NOT_EXIST = 2; + } + + GetExtraStoryAchieveDataRsp.Retcode retcode = 1; + repeated ExtraStoryAchieve achieve_list = 2; +} + +// CmdID: 237 +message GetExtraStoryAchieveRewardReq { + uint32 achieve_id = 1; +} + +// CmdID: 238 +message GetExtraStoryAchieveRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACHIEVE_NOT_EXIST = 2; + ACHIEVE_NOT_FINISH = 3; + ACHIEVE_HAS_TAKEN = 4; + } + + GetExtraStoryAchieveRewardRsp.Retcode retcode = 1; + uint32 achieve_id = 2; + repeated RewardData reward_list = 3; +} + +// CmdID: 239 +message SwitchDynamicHardLvReq { +} + +// CmdID: 240 +message SwitchDynamicHardLvRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + SwitchDynamicHardLvRsp.Retcode retcode = 1; + bool is_dynamic_hard_lv = 2; +} + +// CmdID: 241 +message GetIslandEventReq { +} + +// CmdID: 242 +message GetIslandEventRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetIslandEventRsp.Retcode retcode = 1; + repeated IslandAvatarPos avatar_pos_list = 2; +} + +// CmdID: 243 +message FinishIslandEventReq { + uint32 event_id = 1; + uint32 node_num = 2; + bool is_get_reward = 3; +} + +// CmdID: 244 +message FinishIslandEventRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + FinishIslandEventRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; +} + +// CmdID: 245 +message SetTransferPwdReq { + string transfer_pwd = 1; +} + +// CmdID: 246 +message SetTransferPwdRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + PWD_FORMAT_ERROR = 2; + } + + SetTransferPwdRsp.Retcode retcode = 1; + string transfer_code = 2; + uint32 transfer_pwd_expire_time = 3; +} + +// CmdID: 247 +message VerifyGoogleOrderNotify { + enum GoogleType { + GOOGLE_TYPE_NONE = 0; + GOOGLE_JAPAN = 1; + GOOGLE_TW = 2; + GOOGLE_KR = 3; + GOOGLE_OVERSEAS = 4; + GOOGLE_GLOBAL = 5; + } + + VerifyGoogleOrderNotify.GoogleType channel = 1; + string param = 2; +} + +// CmdID: 248 +message SetDressReq { + uint32 avatar_id = 1; + uint32 dress_id = 2; +} + +// CmdID: 249 +message SetDressRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_NOT_EXIST = 2; + DRESS_NOT_EXIST = 3; + DRESS_CAN_NOT_USE = 4; + DRESS_IN_USE = 5; + } + + SetDressRsp.Retcode retcode = 1; +} + +// CmdID: 250 +message DressToReturnMaterialNotify { + uint32 dress_id = 1; + uint32 num = 2; + uint32 scoin = 3; + uint32 return_material_id = 4; + uint32 return_material_num = 5; +} + +// CmdID: 251 +message UseMaterialReq { + uint32 material_id = 1; + uint32 num = 2; + uint32 parameter = 3; + uint32 simulate_magic = 4; + EquipmentItemList consume_item_list = 5; +} + +// CmdID: 252 +message UseMaterialRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_LACK = 2; + EQUIPMENT_FULL = 3; + EQUIPMENT_MATERIAL_LIMIT = 4; + EQUIPMENT_FRAGMENT_LIMIT = 5; + STAMINA_FULL = 6; + LEVEL_LACK = 7; + EXTRA_STORY_CLOSED = 8; + EQUIPMENT_EXPIRE = 9; + BUFF_MATERIAL_FAIL = 10; + ACTIVATE_AVATAR_REPEATE_FAIL = 11; + ACTIVATE_AVATAR_LEVEL_LIMIT = 12; + NO_ARMADA = 13; + MATRIX_CLOSE = 14; + EXPLORE_POWER_LIMIT = 15; + INVALID_NUM = 16; + TEAM_NOT_EXIST = 17; + TEAM_FULL_ENERGE = 18; + VITALITY_FULL = 19; + FEATURE_CLOSED = 20; + ACTIVITY_NOT_OPEN = 21; + AVATAR_NEED = 22; + CONSUME_ITEM_NOT_EXIST = 23; + CONSUME_ITEM_IN_USE = 24; + CONSUME_ITEM_REPEAT = 25; + CONSUME_ITEM_PROTECTED = 26; + COST_GACHA_TICKET = 27; + COST_SENIOR_EQUIP_FROM_NEW_DEVICE = 28; + COST_SENIOR_EQUIP_CANCEL_PROTECT_TOO_SOON = 29; + CONSUME_ITEM_IN_FACILITY = 30; + CONSUME_ITEM_GRAND_KEY = 31; + CONSUME_ITEM_PROTECTED_BY_SECURITY_PASSWORD = 32; + CONDITION_NOT_MEET = 33; + NOT_MATCH = 34; + } + + UseMaterialRsp.Retcode retcode = 1; + repeated RewardData gift_reward_list = 2; + repeated DropItem drop_item_list = 3; + uint32 material_id = 4; + uint32 num = 5; + uint32 overflow_item_id = 6; +} + +// CmdID: 253 +message SwitchAvatarSubSkillReq { + uint32 avatar_id = 1; + uint32 skill_id = 2; + uint32 sub_skill_id = 3; +} + +// CmdID: 254 +message SwitchAvatarSubSkillRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_NOT_EXIST = 2; + SKILL_NOT_EXIST = 3; + SUB_SKILL_NOT_EXIST = 4; + SUB_SKILL_CAN_NOT_SWITCH = 5; + } + + SwitchAvatarSubSkillRsp.Retcode retcode = 1; +} + +// CmdID: 259 +message ExchangeWeekDayActivityTimesReq { + uint32 activity_id = 1; + uint32 activity_times = 2; +} + +// CmdID: 260 +message ExchangeWeekDayActivityTimesRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + COIN_LACK = 3; + TIMES_NOT_ZERO = 4; + } + + ExchangeWeekDayActivityTimesRsp.Retcode retcode = 1; + uint32 coin_cost = 2; +} + +// CmdID: 269 +message UpdateCustomAvatarTeamReq { + CustomAvatarTeam team = 1; +} + +// CmdID: 270 +message UpdateCustomAvatarTeamRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TEAM_ID_ERROR = 2; + AVATAR_ID_ERROR = 3; + AVATAR_NUM_ERROR = 4; + SENSITIVE_WORDS = 5; + NAME_LEN_ERROR = 6; + ELF_ID_ERROR = 7; + ASTRA_MATE_ID_ERROR = 8; + ELF_SYSTEM_ERROR = 9; + } + + UpdateCustomAvatarTeamRsp.Retcode retcode = 1; +} + +// CmdID: 271 +message UpdateAssistantAvatarIdReq { + uint32 avatar_id = 1; +} + +// CmdID: 272 +message UpdateAssistantAvatarIdRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_NOT_EXIST = 2; + } + + UpdateAssistantAvatarIdRsp.Retcode retcode = 1; +} + +// CmdID: 288 +message TakeDutyRewardReq { + DutyType duty_type = 1; + repeated uint32 duty_id_list = 2; +} + +// CmdID: 289 +message TakeDutyRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKE = 2; + LEVEL_LACK = 3; + DUTY_POINT_LACK = 4; + } + + TakeDutyRewardRsp.Retcode retcode = 1; + DutyType duty_type = 2; + repeated RewardData reward_list = 3; + repeated uint32 duty_id_list = 4; +} + +// CmdID: 299 +message ReportBirthdayReq { + uint32 birthday = 1; +} + +// CmdID: 300 +message ReportBirthdayRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACCOUNT_ERROR = 2; + INVALID_BIRTHDAY = 3; + } + + ReportBirthdayRsp.Retcode retcode = 1; +} + +// CmdID: 301 +message CreateLobbyReq { + uint32 stage_id = 1; + uint32 min_level = 2; + LobbyEnterType lobby_enter_type = 3; + uint32 max_player_num = 4; + repeated CabinTechAddAttr cabin_attr = 5; + uint32 client_rtt = 6; + MpTeamMember member = 7; + repeated uint32 avatar_trial_list = 8; + bool is_allow_cross_region = 10; + string team_name = 11; + bool is_team_name_default = 13; + uint32 max_level = 14; +} + +// CmdID: 302 +message CreateLobbyRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STAGE_ERROR = 2; + SERVER_BUSY = 3; + BAD_NETWORK = 4; + CLIENT_VERSION_ERROR = 5; + NOT_ALLOWED = 6; + NO_AVAILABLE_AVATAR = 7; + TEAM_NAME_ERROR = 8; + IN_SQUAD = 9; + IN_SQUAD_MATCH = 10; + IN_ROOM = 12; + FEATURE_LIMIT = 13; + MEMBER_LIMIT = 14; + DEFAULT_TEAM_NAME_ERROR = 15; + } + + CreateLobbyRsp.Retcode retcode = 1; + int32 sub_retcode = 2; + uint32 lobby_id = 3; + uint32 stage_id = 4; + uint32 min_level = 5; + LobbyEnterType lobby_enter_type = 6; + uint32 max_level = 7; + string team_name = 8; +} + +// CmdID: 303 +message EnterLobbyReq { + uint32 stage_id = 1; + uint32 lobby_id = 2; + bool is_friend_invitation = 3; + uint32 level = 4; + uint32 client_rtt = 6; + bool has_leader_stamina = 7; + MpTeamMember member = 8; + bool has_leader_enter_times = 9; + uint32 device_score = 10; + uint32 report_num = 11; + bool has_leader_theme_wanted_ticket = 12; +} + +// CmdID: 304 +message EnterLobbyRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LOBBY_FULL = 2; + LEVEL_NOT_SATISFY = 3; + ALREADY_IN_LOBBY = 4; + LOBBY_FIGHTING = 5; + LOBBY_NOT_EXIST = 6; + NO_LOBBY = 7; + STAGE_ERROR = 8; + SERVER_BUSY = 9; + BAD_NETWORK = 10; + CLIENT_VERSION_ERROR = 11; + IN_MATCH_QUEUE = 12; + MATCH_STAGE_EXCEED_MAX = 13; + ALREADY_IN_MATCH = 14; + NO_AVAILABLE_AVATAR = 15; + NOT_ALLOW_CROSS_REGION = 16; + IN_SQUAD = 17; + IN_SQUAD_MATCH = 18; + IN_ROOM = 19; + FEATURE_LIMIT = 20; + NOT_IN_SAME_ARMADA = 21; + DATA_VERSION_CONFLICT = 22; + FEATURE_CLOSED = 23; + } + + EnterLobbyRsp.Retcode retcode = 1; + int32 sub_retcode = 2; + uint32 lobby_id = 3; + uint32 stage_id = 4; + uint32 avatar_id = 5; +} + +// CmdID: 305 +message LeaveTeamReq { + uint32 team_id = 1; + bool is_logout = 2; + bool is_squeeze = 3; +} + +// CmdID: 306 +message LeaveTeamRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_TEAM = 2; + } + + LeaveTeamRsp.Retcode retcode = 1; +} + +// CmdID: 307 +message UpdateLobbyLineupReq { + uint32 avatar_id = 1; + MpTeamMemberInfo member_info = 2; + uint32 avatar_trial_id = 4; + uint32 reclaim_avatar_id = 5; + uint32 elf_id = 7; + repeated uint32 backup_avatar_id_list = 8; +} + +// CmdID: 308 +message UpdateLobbyLineupRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_LOBBY = 2; + AVATAR_NOT_EXIST = 3; + STATUS_ERROR = 4; + SERVER_BUSY = 5; + ELF_NOT_EXIST = 6; + } + + UpdateLobbyLineupRsp.Retcode retcode = 1; + uint32 avatar_id = 2; + uint32 avatar_trial_id = 3; + uint32 reclaim_avatar_id = 4; + uint32 elf_id = 5; + repeated uint32 backup_avatar_id_list = 6; +} + +// CmdID: 309 +message SwitchMemberStatusReq { + LobbyMemberStatus status = 1; +} + +// CmdID: 310 +message SwitchMemberStatusRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_LOBBY = 2; + STATUS_ERROR = 3; + IS_LEADER = 4; + } + + SwitchMemberStatusRsp.Retcode retcode = 1; +} + +// CmdID: 311 +message LobbyStageBeginReq { +} + +// CmdID: 312 +message LobbyStageBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_LOBBY = 2; + LOBBY_FIGHTING = 3; + NOT_LEADER = 4; + MEMBER_STATUS_ERROR = 5; + SYSTEM_ERROR = 6; + MEMBER_NOT_ENTER_LOBBY = 7; + MEMBER_NOT_ONLINE = 8; + MEMBER_DUPLICATE = 9; + MEMBER_NOT_ENOUGH = 10; + } + + LobbyStageBeginRsp.Retcode retcode = 1; + string fight_server_ip = 2; + uint32 fight_server_port = 3; + uint32 lobby_id = 4; + repeated uint32 uid_list = 5; + uint32 leader_uid = 6; +} + +// CmdID: 313 +message LobbyStageEndReq { + uint32 lobby_id = 1; + uint32 client_data = 2; +} + +// CmdID: 314 +message LobbyStageEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_LOBBY = 2; + LOBBY_NOT_FIGHTING = 3; + NOT_LEADER = 4; + SYSTEM_ERROR = 5; + } + + LobbyStageEndRsp.Retcode retcode = 1; + uint32 lobby_id = 2; +} + +// CmdID: 317 +message KickLobbyMemberReq { + uint32 target_uid = 1; +} + +// CmdID: 318 +message KickLobbyMemberRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_LOBBY = 2; + NOT_LEADER = 3; + TARGET_NOT_EXIST = 4; + } + + KickLobbyMemberRsp.Retcode retcode = 1; +} + +// CmdID: 319 +message SetLobbyFastEntranceReq { + uint32 lobby_id = 1; + bool is_open = 2; +} + +// CmdID: 320 +message SetLobbyFastEntranceRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + uint32 lobby_id = 1; + SetLobbyFastEntranceRsp.Retcode retcode = 2; + bool is_open = 3; +} + +// CmdID: 321 +message LobbyEnterFightErrorNotify { + enum Retcode { + SUCC = 0; + CONNECT_TIMEOUT = 1; + BEGIN_STAGE_FAIL = 2; + } + + uint32 lobby_id = 1; + LobbyEnterFightErrorNotify.Retcode retcode = 2; + repeated uint32 uid_list = 3; + uint32 sub_retcode = 4; +} + +// CmdID: 332 +message PromoteStigmataRuneReq { + uint32 unique_id = 1; +} + +// CmdID: 333 +message PromoteStigmataRuneRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STIGMATA_NOT_EXIST = 2; + MATERIAL_LACK = 3; + STIGMATA_NOT_IDENTIFY = 4; + CAN_NOT_PROMOTE = 5; + TIMES_LIMIT = 6; + LEVEL_LACK = 7; + TOO_MANY_WAIT_RUNE = 8; + } + + PromoteStigmataRuneRsp.Retcode retcode = 1; + repeated uint32 wait_select_stgimata_list = 5; +} + +// CmdID: 340 +message GetMpDataReq { + MpDataType data_type = 1; +} + +// CmdID: 341 +message GetMpDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + enum OpType { + INIT_DATA = 0; + ADD_DATA = 1; + UPDATE_DATA = 2; + } + + GetMpDataRsp.Retcode retcode = 1; + MpDataType data_type = 2; + GetMpDataRsp.OpType op_type = 3; + uint32 mp_level = 4; + uint32 mp_exp = 5; + repeated MpSkillPoint skill_point_list = 6; + repeated MpSkill skill_list = 7; + uint32 team_avatar_id = 8; + uint32 punish_end_time = 9; +} + +// CmdID: 342 +message MpUpgradeSkillReq { + uint32 skill_id = 1; +} + +// CmdID: 343 +message MpUpgradeSkillRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + POINT_NOT_ENOUGH = 2; + IS_MAX_LEVEL = 3; + } + + MpUpgradeSkillRsp.Retcode retcode = 1; + uint32 skill_id = 2; +} + +// CmdID: 344 +message MpResetSkillPointReq { + MpSkillType type = 1; +} + +// CmdID: 345 +message MpResetSkillPointRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + COIN_NOT_ENOUGH = 2; + } + + MpResetSkillPointRsp.Retcode retcode = 1; + MpSkillType type = 2; +} + +// CmdID: 346 +message MpGetTeamReq { +} + +// CmdID: 347 +message MpGetTeamRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_TEAM = 2; + DISCONNECT = 3; + KICK = 4; + } + + MpGetTeamRsp.Retcode retcode = 1; + MpTeamData team_data = 2; +} + +// CmdID: 395 +message MpTeamSyncNotify { + MpTeamData team_data = 1; +} + +// CmdID: 348 +message MpCreateTeamReq { + MpTeamMember member = 1; +} + +// CmdID: 349 +message MpCreateTeamRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ALREADY_IN_TEAM = 2; + CLIENT_VERSION_ERROR = 3; + SERVER_BUSY = 4; + IN_SQUAD = 5; + IN_SQUAD_MATCH = 6; + IN_ROOM = 7; + FEATURE_LIMIT = 8; + } + + MpCreateTeamRsp.Retcode retcode = 1; + uint32 team_id = 2; +} + +// CmdID: 350 +message MpEnterTeamReq { + uint32 team_id = 1; + MpTeamMember member = 2; + uint32 uid = 3; +} + +// CmdID: 351 +message MpEnterTeamRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TEAM_NOT_EXIST = 2; + TEAM_FULL = 3; + TEAM_ENTER_LOBBY = 4; + TEAM_IN_LOBBY = 5; + TEAM_IN_FIGHT = 6; + ALREADY_IN_TEAM = 7; + CLIENT_VERSION_ERROR = 8; + SERVER_BUSY = 9; + IN_SQUAD = 10; + IN_SQUAD_MATCH = 11; + IN_ROOM = 12; + CONDITION_NOT_MEET = 13; + FEATURE_LIMIT = 14; + DATA_VERSION_CONFLICT = 15; + } + + MpEnterTeamRsp.Retcode retcode = 1; + uint32 team_id = 2; + uint32 stage_id = 3; +} + +// CmdID: 352 +message GetTeamBriefInfoReq { + uint32 team_id = 1; + bool is_friend_invitation = 2; +} + +// CmdID: 353 +message GetTeamBriefInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TEAM_NOT_EXIST = 2; + } + + GetTeamBriefInfoRsp.Retcode retcode = 1; + uint32 team_id = 2; + MpTeamStatus status = 3; + uint32 stage_id = 4; + bool is_friend_invitation = 5; +} + +// CmdID: 354 +message MpKickFromTeamReq { + uint32 member_uid = 1; +} + +// CmdID: 355 +message MpKickFromTeamRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_TEAM = 2; + } + + MpKickFromTeamRsp.Retcode retcode = 1; + uint32 member_uid = 2; +} + +// CmdID: 356 +message MpTeamEnterLobbyReq { + uint32 stage_id = 1; + LobbyEnterType lobby_enter_type = 2; + uint32 min_level = 3; + string team_name = 4; + bool is_team_name_default = 6; + uint32 max_level = 7; +} + +// CmdID: 357 +message MpTeamEnterLobbyRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_TEAM = 2; + MEMBER_EXCEED_MAX = 3; + MEMBER_OFFLINE = 4; + IN_ENTER_LOBBY = 5; + ENTER_TIME_OUT = 6; + STAGE_ERROR = 7; + NOT_LEADER = 8; + MEMBER_NOT_ENTER_TEAM_UI = 9; + NO_AVAILABLE_AVATAR = 10; + TEAM_NOT_SATIFY_RAID = 11; + NOT_ALLOW_CROSS_REGION = 12; + TEAM_NAME_ERROR = 13; + DEFAULT_TEAM_NAME_ERROR = 14; + } + + MpTeamEnterLobbyRsp.Retcode retcode = 1; + int32 sub_retcode = 2; + uint32 error_uid = 3; + uint32 stage_id = 4; + uint32 team_id = 5; + string team_name = 6; +} + +// CmdID: 362 +message MpTeamChangeLeaderReq { + uint32 new_leader_uid = 1; +} + +// CmdID: 363 +message MpTeamChangeLeaderRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_TEAM = 2; + NOT_LEADER = 3; + NOT_ENOUGH_STAMINA = 4; + NOT_ENOUGH_ENTER_TIMES = 5; + NOT_ALLOW_CHANGE_LEADER = 6; + } + + MpTeamChangeLeaderRsp.Retcode retcode = 1; +} + +// CmdID: 364 +message GetGobackReq { +} + +message GobackActivity { + uint32 id = 1; + uint32 end_time = 2; +} + +message GobackActivityLoginReward { + uint32 take_days = 1; + repeated uint32 take_reward_list = 2; + repeated uint32 take_bonus_reward_list = 3; +} + +message GobackFund { + uint32 id = 1; + bool is_unlocked = 2; + repeated uint32 has_take_reward_progress_list = 3; +} + +message GobackGrowUpActivity { + repeated uint32 joined_rank_id_list = 1; +} + +message GobackSpecialBp { + uint32 bp_id = 1; + uint32 level = 2; + uint32 exp = 3; + bool is_purchased = 4; + uint32 free_reward_max_take_level = 5; + uint32 purchase_reward_max_take_level = 6; +} + +message GobackSpecial { + uint32 special_id = 1; + GobackSpecialBp special_bp = 2; +} + +// CmdID: 365 +message GetGobackRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetGobackRsp.Retcode retcode = 1; + uint32 goback_end_time = 2; + uint32 login_days = 3; + repeated uint32 has_take_days_reward_list = 4; + repeated uint32 has_take_days_bonus_reward_list = 5; + repeated GobackActivity goback_activity_list = 6; + uint32 score = 7; + repeated uint32 has_take_score_reward_list = 8; + uint32 schedule_id = 9; + repeated GobackActivityLoginReward login_reward_list = 10; + GobackFund fund = 11; + GobackGrowUpActivity goback_grow_up_activity = 12; + GobackSpecial goback_special = 13; + uint32 goback_level = 14; + uint32 goback_newbie_level = 15; +} + +// CmdID: 366 +message TakeGobackLoginRewardReq { + uint32 take_days = 1; + uint32 reward_type = 2; + repeated uint32 reward_list = 3; +} + +// CmdID: 367 +message TakeGobackLoginRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKE = 2; + LOGIN_DAYS_LACK = 3; + NOT_GOBACK = 4; + REWARD_TYPE_ERROR = 5; + SELECT_REWARD_ERROR = 6; + } + + TakeGobackLoginRewardRsp.Retcode retcode = 1; + uint32 take_days = 2; + repeated RewardData reward_list = 3; + uint32 reward_type = 4; + repeated uint32 reward_id_list = 5; +} + +// CmdID: 371 +message TeamLeaderChangeNotify { + uint32 team_id = 1; + uint32 old_leader = 2; + uint32 new_leader = 3; + bool is_timeout = 4; +} + +// CmdID: 373 +message MpTeamLeaveLobbyReq { +} + +// CmdID: 374 +message MpTeamLeaveLobbyRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_LEADER = 2; + NOT_IN_TEAM = 3; + NOT_IN_LOBBY = 4; + LEADER_IS_WILD = 5; + } + + MpTeamLeaveLobbyRsp.Retcode retcode = 1; +} + +// CmdID: 375 +message MpMemberSetClientStatusReq { + MpMemberClientStatus status = 1; +} + +// CmdID: 376 +message MpMemberSetClientStatusRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_TEAM = 2; + } + + MpMemberSetClientStatusRsp.Retcode retcode = 1; +} + +// CmdID: 381 +message MpReportPlayerReq { + uint32 target_uid = 1; +} + +// CmdID: 382 +message MpReportPlayerRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_TEAM = 2; + ALREADY_REPORT = 3; + } + + MpReportPlayerRsp.Retcode retcode = 1; + uint32 target_uid = 2; + bool report_success = 3; + uint32 judge_term = 4; +} + +// CmdID: 391 +message MpStageSettleNotify { + uint32 team_id = 1; + repeated MpStageSettle settle_list = 2; +} + +// CmdID: 392 +message MpLikePlayerReq { + uint32 target_uid = 1; +} + +// CmdID: 393 +message MpLikePlayerRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_TEAM = 2; + HAS_LIKE = 3; + } + + MpLikePlayerRsp.Retcode retcode = 1; + uint32 target_uid = 2; + uint32 from_uid = 3; + uint32 target_like_num = 4; + uint32 add_friends_point = 5; +} + +// CmdID: 394 +message FriendBondNotify { + uint32 friend_uid = 1; + uint32 bond = 2; +} + +// CmdID: 396 +message MpTeamMemberSetVoiceIdReq { + uint32 voice_id = 1; +} + +// CmdID: 397 +message MpTeamMemberSetVoiceIdRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_TEAM = 2; + } + + MpTeamMemberSetVoiceIdRsp.Retcode retcode = 1; + uint32 uid = 2; + uint32 voice_id = 3; +} + +// CmdID: 398 +message ReportClientDataVersionReq { + uint32 version = 1; +} + +// CmdID: 399 +message ReportClientDataVersionRsp { + uint32 server_version = 1; +} + +enum CmdTypeOne { + CMD_TYPE_ONE_NONE = 0; + CMD_KEEP_ALIVE_NOTIFY = 1; + CMD_GET_GAMESERVER_REQ = 2; + CMD_GET_GAMESERVER_RSP = 3; + CMD_GET_PLAYER_TOKEN_REQ = 4; + CMD_GET_PLAYER_TOKEN_RSP = 5; + CMD_PLAYER_LOGIN_REQ = 6; + CMD_PLAYER_LOGIN_RSP = 7; + CMD_PLAYER_LOGOUT_REQ = 8; + CMD_PLAYER_LOGOUT_RSP = 9; + CMD_GET_MAIN_DATA_REQ = 10; + CMD_GET_MAIN_DATA_RSP = 11; + CMD_GET_SCOIN_EXCHANGE_INFO_REQ = 12; + CMD_GET_SCOIN_EXCHANGE_INFO_RSP = 13; + CMD_SCOIN_EXCHANGE_REQ = 14; + CMD_SCOIN_EXCHANGE_RSP = 15; + CMD_GET_STAMINA_EXCHANGE_INFO_REQ = 16; + CMD_GET_STAMINA_EXCHANGE_INFO_RSP = 17; + CMD_STAMINA_EXCHANGE_REQ = 18; + CMD_STAMINA_EXCHANGE_RSP = 19; + CMD_NICKNAME_MODIFY_REQ = 20; + CMD_NICKNAME_MODIFY_RSP = 21; + CMD_GM_TALK_REQ = 22; + CMD_GM_TALK_RSP = 23; + CMD_GET_AVATAR_DATA_REQ = 24; + CMD_GET_AVATAR_DATA_RSP = 25; + CMD_GET_EQUIPMENT_DATA_REQ = 26; + CMD_GET_EQUIPMENT_DATA_RSP = 27; + CMD_DEL_EQUIPMENT_NOTIFY = 28; + CMD_AVATAR_STAR_UP_REQ = 29; + CMD_AVATAR_STAR_UP_RSP = 30; + CMD_EQUIPMENT_POWER_UP_REQ = 31; + CMD_EQUIPMENT_POWER_UP_RSP = 32; + CMD_EQUIPMENT_SELL_REQ = 33; + CMD_EQUIPMENT_SELL_RSP = 34; + CMD_ADD_AVATAR_EXP_BY_MATERIAL_REQ = 35; + CMD_ADD_AVATAR_EXP_BY_MATERIAL_RSP = 36; + CMD_EQUIPMENT_EVO_REQ = 37; + CMD_EQUIPMENT_EVO_RSP = 38; + CMD_DRESS_EQUIPMENT_REQ = 39; + CMD_DRESS_EQUIPMENT_RSP = 40; + CMD_GET_STAGE_DATA_REQ = 41; + CMD_GET_STAGE_DATA_RSP = 42; + CMD_STAGE_BEGIN_REQ = 43; + CMD_STAGE_BEGIN_RSP = 44; + CMD_STAGE_END_REQ = 45; + CMD_STAGE_END_RSP = 46; + CMD_GET_AVATAR_TEAM_DATA_REQ = 47; + CMD_GET_AVATAR_TEAM_DATA_RSP = 48; + CMD_UPDATE_AVATAR_TEAM_NOTIFY = 49; + CMD_AVATAR_SUB_SKILL_LEVEL_UP_REQ = 50; + CMD_AVATAR_SUB_SKILL_LEVEL_UP_RSP = 51; + CMD_MATERIAL_EVO_REQ = 56; + CMD_MATERIAL_EVO_RSP = 57; + CMD_GET_STAGE_DROP_DISPLAY_REQ = 60; + CMD_GET_STAGE_DROP_DISPLAY_RSP = 61; + CMD_GET_FRIEND_LIST_REQ = 64; + CMD_GET_FRIEND_LIST_RSP = 65; + CMD_ADD_FRIEND_REQ = 66; + CMD_ADD_FRIEND_RSP = 67; + CMD_DEL_FRIEND_REQ = 68; + CMD_DEL_FRIEND_RSP = 69; + CMD_GET_ASK_ADD_FRIEND_LIST_REQ = 70; + CMD_GET_ASK_ADD_FRIEND_LIST_RSP = 71; + CMD_GET_PLAYER_DETAIL_DATA_REQ = 72; + CMD_GET_PLAYER_DETAIL_DATA_RSP = 73; + CMD_UPDATE_EQUIPMENT_PROTECTED_STATUS_REQ = 74; + CMD_UPDATE_EQUIPMENT_PROTECTED_STATUS_RSP = 75; + CMD_GET_RECOMMEND_FRIEND_LIST_REQ = 76; + CMD_GET_RECOMMEND_FRIEND_LIST_RSP = 77; + CMD_SET_SELF_DESC_REQ = 78; + CMD_SET_SELF_DESC_RSP = 79; + CMD_DEL_FRIEND_NOTIFY = 80; + CMD_GET_OFFLINE_FRIENDS_POINT_NOTIFY = 81; + CMD_VERIFY_ITUNES_ORDER_NOTIFY = 82; + CMD_GET_MAIL_DATA_REQ = 84; + CMD_GET_MAIL_DATA_RSP = 85; + CMD_GET_MAIL_ATTACHMENT_REQ = 86; + CMD_GET_MAIL_ATTACHMENT_RSP = 87; + CMD_UNLOCK_AVATAR_SKILL_REQ = 88; + CMD_UNLOCK_AVATAR_SKILL_RSP = 89; + CMD_EQUIPMENT_QUICK_LEVEL_UP_REQ = 90; + CMD_EQUIPMENT_QUICK_LEVEL_UP_RSP = 91; + CMD_REFRESH_AVATAR_SKILL_REQ = 92; + CMD_REFRESH_AVATAR_SKILL_RSP = 93; + CMD_GET_ASSISTANT_FROZEN_LIST_REQ = 100; + CMD_GET_ASSISTANT_FROZEN_LIST_RSP = 101; + CMD_SELL_AVATAR_FRAGMENT_REQ = 102; + CMD_SELL_AVATAR_FRAGMENT_RSP = 103; + CMD_GET_HAS_GOT_ITEM_ID_LIST_REQ = 104; + CMD_GET_HAS_GOT_ITEM_ID_LIST_RSP = 105; + CMD_AVATAR_REVIVE_REQ = 106; + CMD_AVATAR_REVIVE_RSP = 107; + CMD_RESET_STAGE_ENTER_TIMES_REQ = 108; + CMD_RESET_STAGE_ENTER_TIMES_RSP = 109; + CMD_GET_CONFIG_REQ = 110; + CMD_GET_CONFIG_RSP = 111; + CMD_GET_MISSION_DATA_REQ = 112; + CMD_GET_MISSION_DATA_RSP = 113; + CMD_GET_MISSION_REWARD_REQ = 114; + CMD_GET_MISSION_REWARD_RSP = 115; + CMD_DEL_MISSION_NOTIFY = 116; + CMD_UPDATE_MISSION_PROGRESS_REQ = 117; + CMD_UPDATE_MISSION_PROGRESS_RSP = 118; + CMD_BIND_ACCOUNT_REQ = 119; + CMD_BIND_ACCOUNT_RSP = 120; + CMD_GET_SIGN_IN_REWARD_STATUS_REQ = 121; + CMD_GET_SIGN_IN_REWARD_STATUS_RSP = 122; + CMD_GET_SIGN_IN_REWARD_REQ = 123; + CMD_GET_SIGN_IN_REWARD_RSP = 124; + CMD_GET_WEEK_DAY_ACTIVITY_DATA_REQ = 125; + CMD_GET_WEEK_DAY_ACTIVITY_DATA_RSP = 126; + CMD_GET_FINISH_GUIDE_DATA_REQ = 127; + CMD_GET_FINISH_GUIDE_DATA_RSP = 128; + CMD_FINISH_GUIDE_REPORT_REQ = 129; + CMD_FINISH_GUIDE_REPORT_RSP = 130; + CMD_STAGE_INNER_DATA_REPORT_REQ = 131; + CMD_STAGE_INNER_DATA_REPORT_RSP = 132; + CMD_GET_DISPATCH_REQ = 133; + CMD_GET_DISPATCH_RSP = 134; + CMD_EXCHANGE_AVATAR_WEAPON_REQ = 135; + CMD_EXCHANGE_AVATAR_WEAPON_RSP = 136; + CMD_GET_BULLETIN_REQ = 137; + CMD_GET_BULLETIN_RSP = 138; + CMD_ADD_GOODFEEL_REQ = 154; + CMD_ADD_GOODFEEL_RSP = 155; + CMD_ISLAND_DISJOIN_EQUIPMENT_REQ = 179; + CMD_ISLAND_DISJOIN_EQUIPMENT_RSP = 180; + CMD_GET_GUIDE_REWARD_REQ = 185; + CMD_GET_GUIDE_REWARD_RSP = 186; + CMD_URGENCY_MSG_NOTIFY = 187; + CMD_REFINE_STIGMATA_RUNE_REQ = 193; + CMD_REFINE_STIGMATA_RUNE_RSP = 194; + CMD_SELECT_NEW_STIGMATA_RUNE_REQ = 195; + CMD_SELECT_NEW_STIGMATA_RUNE_RSP = 196; + CMD_CREATE_WEIXIN_ORDER_REQ = 207; + CMD_CREATE_WEIXIN_ORDER_RSP = 208; + CMD_COMMENT_REPORT_REQ = 229; + CMD_COMMENT_REPORT_RSP = 230; + CMD_GET_EXTRA_STORY_DATA_REQ = 231; + CMD_GET_EXTRA_STORY_DATA_RSP = 232; + CMD_GET_EXTRA_STORY_ACTIVITY_ACT_REQ = 233; + CMD_GET_EXTRA_STORY_ACTIVITY_ACT_RSP = 234; + CMD_GET_EXTRA_STORY_ACHIEVE_DATA_REQ = 235; + CMD_GET_EXTRA_STORY_ACHIEVE_DATA_RSP = 236; + CMD_GET_EXTRA_STORY_ACHIEVE_REWARD_REQ = 237; + CMD_GET_EXTRA_STORY_ACHIEVE_REWARD_RSP = 238; + CMD_SWITCH_DYNAMIC_HARD_LV_REQ = 239; + CMD_SWITCH_DYNAMIC_HARD_LV_RSP = 240; + CMD_GET_ISLAND_EVENT_REQ = 241; + CMD_GET_ISLAND_EVENT_RSP = 242; + CMD_FINISH_ISLAND_EVENT_REQ = 243; + CMD_FINISH_ISLAND_EVENT_RSP = 244; + CMD_SET_TRANSFER_PWD_REQ = 245; + CMD_SET_TRANSFER_PWD_RSP = 246; + CMD_VERIFY_GOOGLE_ORDER_NOTIFY = 247; + CMD_SET_DRESS_REQ = 248; + CMD_SET_DRESS_RSP = 249; + CMD_DRESS_TO_RETURN_MATERIAL_NOTIFY = 250; + CMD_USE_MATERIAL_REQ = 251; + CMD_USE_MATERIAL_RSP = 252; + CMD_SWITCH_AVATAR_SUB_SKILL_REQ = 253; + CMD_SWITCH_AVATAR_SUB_SKILL_RSP = 254; + CMD_EXCHANGE_WEEK_DAY_ACTIVITY_TIMES_REQ = 259; + CMD_EXCHANGE_WEEK_DAY_ACTIVITY_TIMES_RSP = 260; + CMD_UPDATE_CUSTOM_AVATAR_TEAM_REQ = 269; + CMD_UPDATE_CUSTOM_AVATAR_TEAM_RSP = 270; + CMD_UPDATE_ASSISTANT_AVATAR_ID_REQ = 271; + CMD_UPDATE_ASSISTANT_AVATAR_ID_RSP = 272; + CMD_TAKE_DUTY_REWARD_REQ = 288; + CMD_TAKE_DUTY_REWARD_RSP = 289; + CMD_REPORT_BIRTHDAY_REQ = 299; + CMD_REPORT_BIRTHDAY_RSP = 300; + CMD_CREATE_LOBBY_REQ = 301; + CMD_CREATE_LOBBY_RSP = 302; + CMD_ENTER_LOBBY_REQ = 303; + CMD_ENTER_LOBBY_RSP = 304; + CMD_LEAVE_TEAM_REQ = 305; + CMD_LEAVE_TEAM_RSP = 306; + CMD_UPDATE_LOBBY_LINEUP_REQ = 307; + CMD_UPDATE_LOBBY_LINEUP_RSP = 308; + CMD_SWITCH_MEMBER_STATUS_REQ = 309; + CMD_SWITCH_MEMBER_STATUS_RSP = 310; + CMD_LOBBY_STAGE_BEGIN_REQ = 311; + CMD_LOBBY_STAGE_BEGIN_RSP = 312; + CMD_LOBBY_STAGE_END_REQ = 313; + CMD_LOBBY_STAGE_END_RSP = 314; + CMD_KICK_LOBBY_MEMBER_REQ = 317; + CMD_KICK_LOBBY_MEMBER_RSP = 318; + CMD_SET_LOBBY_FAST_ENTRANCE_REQ = 319; + CMD_SET_LOBBY_FAST_ENTRANCE_RSP = 320; + CMD_LOBBY_ENTER_FIGHT_ERROR_NOTIFY = 321; + CMD_PROMOTE_STIGMATA_RUNE_REQ = 332; + CMD_PROMOTE_STIGMATA_RUNE_RSP = 333; + CMD_GET_MP_DATA_REQ = 340; + CMD_GET_MP_DATA_RSP = 341; + CMD_MP_UPGRADE_SKILL_REQ = 342; + CMD_MP_UPGRADE_SKILL_RSP = 343; + CMD_MP_RESET_SKILL_POINT_REQ = 344; + CMD_MP_RESET_SKILL_POINT_RSP = 345; + CMD_MP_GET_TEAM_REQ = 346; + CMD_MP_GET_TEAM_RSP = 347; + CMD_MP_CREATE_TEAM_REQ = 348; + CMD_MP_CREATE_TEAM_RSP = 349; + CMD_MP_ENTER_TEAM_REQ = 350; + CMD_MP_ENTER_TEAM_RSP = 351; + CMD_GET_TEAM_BRIEF_INFO_REQ = 352; + CMD_GET_TEAM_BRIEF_INFO_RSP = 353; + CMD_MP_KICK_FROM_TEAM_REQ = 354; + CMD_MP_KICK_FROM_TEAM_RSP = 355; + CMD_MP_TEAM_ENTER_LOBBY_REQ = 356; + CMD_MP_TEAM_ENTER_LOBBY_RSP = 357; + CMD_MP_TEAM_CHANGE_LEADER_REQ = 362; + CMD_MP_TEAM_CHANGE_LEADER_RSP = 363; + CMD_GET_GOBACK_REQ = 364; + CMD_GET_GOBACK_RSP = 365; + CMD_TAKE_GOBACK_LOGIN_REWARD_REQ = 366; + CMD_TAKE_GOBACK_LOGIN_REWARD_RSP = 367; + CMD_TEAM_LEADER_CHANGE_NOTIFY = 371; + CMD_MP_TEAM_LEAVE_LOBBY_REQ = 373; + CMD_MP_TEAM_LEAVE_LOBBY_RSP = 374; + CMD_MP_MEMBER_SET_CLIENT_STATUS_REQ = 375; + CMD_MP_MEMBER_SET_CLIENT_STATUS_RSP = 376; + CMD_MP_STAGE_END_REQ = 379; + CMD_MP_STAGE_END_RSP = 380; + CMD_MP_REPORT_PLAYER_REQ = 381; + CMD_MP_REPORT_PLAYER_RSP = 382; + CMD_MP_STAGE_SETTLE_NOTIFY = 391; + CMD_MP_LIKE_PLAYER_REQ = 392; + CMD_MP_LIKE_PLAYER_RSP = 393; + CMD_FRIEND_BOND_NOTIFY = 394; + CMD_MP_TEAM_SYNC_NOTIFY = 395; + CMD_MP_TEAM_MEMBER_SET_VOICE_ID_REQ = 396; + CMD_MP_TEAM_MEMBER_SET_VOICE_ID_RSP = 397; + CMD_REPORT_CLIENT_DATA_VERSION_REQ = 398; + CMD_REPORT_CLIENT_DATA_VERSION_RSP = 399; +} + +enum PanelActivityType { + PANEL_ACTIVITY_TYPE_NONE = 0; + PANEL_ACTIVITY_THEME = 2; + PANEL_ACTIVITY_BATTLE_PASS = 6; + PANEL_ACTIVITY_GLOBAL_WAR = 7; + PANEL_ACTIVITY_SLG = 8; + PANEL_ACTIVITY_GLOBAL_POLLING = 9; + PANEL_ACTIVITY_COLLABORATION = 10; +} + +enum EnterTimesType { + ENTER_TIMES_TYPE_NONE = 0; + ACITIVYT_TIMES_REF = 1; + STAGE_TIMES_REF = 2; +} + +enum GobackHcoinSourceType { + GOBACK_HCOIN_SOURCE_TYPE_NONE = 0; + GOBACK_HCOIN_SOURCE_LOGIN_REWARD = 1; + GOBACK_HCOIN_SOURCE_REWARD_LINE = 2; +} + +message OpenworldStat { + uint32 id = 1; + uint32 max_num = 2; + uint32 finish_num = 3; +} + +message OpenworldStageAvatarInfo { + uint32 avatar_id = 1; + uint32 hp_percent = 2; + uint32 sp_percent = 3; + uint32 revive_time = 4; + uint32 last_hp_recover_time = 5; +} + +message OpenworldStageArea { + uint32 area_id = 1; + repeated uint32 avatar_list = 2; + repeated uint32 weapon_uid_list = 3; + repeated uint32 stigmata_uid_list = 4; +} + +message OpenworldStageInner { + uint32 condition_type = 1; + uint32 condition_value = 2; +} + +message OpenworldQuestData { + uint32 level = 1; + uint32 star = 2; + bool is_open = 3; + uint32 day_open_times = 4; + repeated OpenworldQuest quest_list = 5; + uint32 refresh_left_times = 6; + uint32 next_refresh_cost = 7; + OpenworldQuest key_quest = 8; + uint32 max_quest_level = 9; + bool is_can_abandon = 10; + uint32 challenge_score = 11; + repeated uint32 finish_key_quest_list = 12; + bool is_quest_finish = 13; + uint32 open_quest_time = 14; +} + +message OpenworldOverView { + uint32 mission_id = 1; + uint32 progress = 2; +} + +message OpenworldCook { + uint32 cook_id = 1; + uint32 eat_num = 2; +} + +message OpenworldStory { + uint32 story_id = 1; + uint32 story_progress = 2; + uint32 accept_time = 3; +} + +message OpenworldTechData { + uint32 map_id = 1; + uint32 level = 2; + uint32 exp = 3; + uint32 next_collect_time = 4; + uint32 skill_point = 5; + repeated uint32 unlock_skill_list = 6; +} + +message OpenworldMapBriefData { + uint32 map_id = 1; + uint32 status = 2; + repeated OpenworldStat stat_list = 3; + uint32 cycle = 4; + uint32 quest_level = 5; + uint32 has_take_finish_reward_cycle = 6; + bool is_once_unlocked = 7; +} + +message OpenworldEvent { + uint32 event_id = 1; + repeated DropItem drop_item_list = 2; +} + +message OpenworldBossHunt { + uint32 map_id = 1; + uint32 cur_boss_id = 2; + repeated OpenworldBoss boss_list = 3; + uint32 last_choose_boss_time = 4; + repeated uint32 have_take_rating_reward_list = 5; + bool is_call_boss = 6; + repeated uint32 killed_boss_id_list = 7; +} + +message OpenworldActivity { + uint32 activity_id = 1; + uint32 phase_id = 2; + uint32 activity_level = 3; + uint32 activity_exp = 4; + repeated uint32 activity_reward_taken_level_list = 5; + repeated uint32 activity_treasure_taken_list = 6; +} + +message OpenworldBoss { + uint32 boss_id = 1; + uint32 left_hp = 2; + uint32 clue_progress = 3; + uint32 search_time = 4; + uint32 battle_time = 5; + bool is_take_kill_reward = 6; + uint32 location_idx = 7; + repeated uint32 boss_killed_avatar_list = 9; + uint32 mp_left_hp = 10; + uint32 min_kill_time = 11; +} + +message OpenworldAreaInfo { + uint32 area_id = 1; + repeated string info_list = 2; +} + +message OpenworldEntityState { + uint32 entity_id = 1; + uint32 entity_state = 2; +} + +message OpenworldAreaEntityState { + uint32 area_id = 1; + repeated OpenworldEntityState entity_state_list = 2; +} + +message OpenworldPeriodSettleData { + uint32 map_id = 1; + uint32 settle_level = 2; + uint32 old_level = 3; + uint32 old_star = 4; + uint32 cur_level = 5; + uint32 cur_star = 6; + uint32 sub_star = 7; + RewardData normal_reward = 8; + RewardData up_reward = 9; +} + +// CmdID: 4450 +message OpenworldPeriodSettleNotify { + repeated OpenworldPeriodSettleData settle_map_list = 1; +} + +// CmdID: 4451 +message OpenworldWeeklySettleNotify { + uint32 map_id = 1; + uint32 quest_level = 2; + RewardData reward = 3; +} + +message OpenworldMechaPort { + MechaSlot slot = 1; + uint32 mecha_id = 2; +} + +// CmdID: 4452 +message AcceptOpenworldStoryReq { + uint32 story_id = 1; + string report_ext = 2; +} + +// CmdID: 4453 +message AcceptOpenworldStoryRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CYCLE_NOT_MATCH = 2; + PRE_STORY_NOT_FINISH = 3; + STORY_NOT_BEGIN = 4; + QUEST_LEVEL_LIMIT = 5; + STORY_DOING = 6; + STORY_DONE = 7; + TECH_LEVEL_LIMIT = 8; + CONDITION_NOT_MEET = 9; + } + + AcceptOpenworldStoryRsp.Retcode retcode = 1; + uint32 story_id = 2; +} + +// CmdID: 4454 +message SetOpenworldStoryProgressReq { + uint32 story_id = 1; + uint32 story_progress = 2; +} + +// CmdID: 4455 +message SetOpenworldStoryProgressRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STORY_NOT_FOUND = 2; + } + + SetOpenworldStoryProgressRsp.Retcode retcode = 1; + uint32 story_id = 2; +} + +// CmdID: 4456 +message TakeOpenworldStoryRewardReq { + uint32 story_id = 1; + bool is_accept_follow_story = 2; + string report_ext = 3; +} + +// CmdID: 4457 +message TakeOpenworldStoryRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STORY_NOT_FOUND = 2; + } + + TakeOpenworldStoryRewardRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; + uint32 story_id = 3; + repeated uint32 accept_story_id_list = 4; + bool is_accept_follow_story = 5; +} + +// CmdID: 4458 +message TakeOpenworldEventRewardReq { + uint32 event_id = 1; + repeated DropItem drop_item_list = 2; + uint32 map_id = 3; + string report_ext = 4; +} + +// CmdID: 4459 +message TakeOpenworldEventRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + EVENT_NOT_FOUND = 2; + MAP_NOT_FOUND = 3; + } + + TakeOpenworldEventRewardRsp.Retcode retcode = 1; + uint32 map_id = 2; + OpenworldEvent openworld_event = 3; + repeated uint32 finish_once_event_list = 4; +} + +// CmdID: 4460 +message GetOpenworldStageReq { + uint32 map_id = 1; +} + +// CmdID: 4461 +message GetOpenworldStageRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CYCLE_NOT_OPEN = 2; + NOT_OPEN = 3; + } + + GetOpenworldStageRsp.Retcode retcode = 1; + repeated OpenworldStageAvatarInfo avatar_list = 2; + repeated uint32 cook_buffer_list = 3; + uint32 map_id = 4; + repeated uint32 mecha_buff_list = 5; + uint32 mecha_lost_hp_percent = 6; + uint32 mecha_lost_sp_percent = 7; + uint32 map_energy = 8; + uint32 sc_dlc_fever_score = 9; + uint32 sc_dlc_climax_score = 10; +} + +message OpenworldChapterStageBeginInfo { + uint32 location_id = 1; + uint32 story_mode = 2; + uint32 story_serial = 3; + bool is_quick_start = 4; +} + +// CmdID: 4462 +message OpenworldStageBeginReq { + repeated uint32 avatar_id_list = 1; + uint32 area_id = 2; + uint32 map_id = 3; + repeated uint32 elf_id_list = 4; + OpenworldStageType openworld_stage_type = 5; + uint32 stage_id = 6; + uint32 support_avatar_id = 7; + OpenworldChapterStageBeginInfo chapter_ow_info = 8; + string report_ext = 9; +} + +// CmdID: 4463 +message OpenworldStageBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CYCLE_NOT_OPEN = 2; + AVATAR_ERROR = 3; + NOT_OPEN = 4; + AREA_NOT_EXIST = 5; + AREA_NOT_OPEN = 6; + EQUIPMENT_USED = 7; + AVATAR_USED = 8; + ELF_ERROR = 9; + ELF_CARRY_LEVEL_LIMIT = 10; + FEATURE_LIMIT = 11; + HONKAI_ENERGY_FULL = 12; + FEATURE_CLOSED = 13; + AI_CYBER_CONDITION_NOT_MEET = 14; + AVATAR_NUM_ERROR = 15; + ELF_SYSTEM_ERROR = 16; + } + + OpenworldStageBeginRsp.Retcode retcode = 1; + repeated uint32 can_sp_recover_avatar_list = 2; + uint32 map_id = 3; + repeated uint32 dlc_support_avatar_list = 4; +} + +// CmdID: 4464 +message OpenworldStageEndReq { + StageEndStatus end_status = 1; + repeated StageCheatData cheat_data_list = 3; + repeated OpenworldStageAvatarInfo avatar_list = 4; + repeated uint32 sp_recover_avatar_list = 5; + uint32 map_id = 6; + uint32 mecha_lost_hp_percent = 7; + uint32 mecha_lost_sp_percent = 8; + repeated DropItem drop_item_list = 10; + uint32 map_energy = 11; + uint32 sc_dlc_fever_score = 12; + uint32 sc_dlc_climax_score = 13; + uint32 area_id = 14; + string report_ext = 15; +} + +// CmdID: 4465 +message OpenworldStageEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CYCLE_NOT_OPEN = 2; + NOT_BEGIN = 3; + STAGE_ERROR = 4; + STAGE_FAIL = 5; + AVATAR_ERROR = 6; + NOT_OPEN = 7; + MECHA_ERROR = 8; + } + + OpenworldStageEndRsp.Retcode retcode = 1; + StageEndStatus end_status = 2; + uint32 map_id = 3; +} + +// CmdID: 4474 +message OpenOpenworldQuestReq { + uint32 map_id = 1; +} + +// CmdID: 4475 +message OpenOpenworldQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + IS_OPEN = 2; + TIMES_LACK = 3; + CYCLE_NOT_MATCH = 4; + MAP_NOT_FOUND = 5; + MAP_NOT_OPEN = 6; + } + + OpenOpenworldQuestRsp.Retcode retcode = 1; +} + +// CmdID: 4476 +message GetOpenworldSelectQuestReq { + uint32 map_id = 1; +} + +// CmdID: 4477 +message GetOpenworldSelectQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_CHOOSE = 2; + MAP_NOT_FOUND = 3; + } + + GetOpenworldSelectQuestRsp.Retcode retcode = 1; + repeated OpenworldQuest quest_list = 2; +} + +// CmdID: 4478 +message ChooseOpenworldQuestReq { + uint32 map_id = 1; + uint32 quest_id = 2; +} + +// CmdID: 4479 +message ChooseOpenworldQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_CHOOSE = 2; + STAMINA_LACK = 3; + MAP_NOT_FOUND = 4; + QUEST_NOT_FOUND = 5; + ACTIVITY_QUEST_TIMES_LIMIT = 6; + } + + ChooseOpenworldQuestRsp.Retcode retcode = 1; + OpenworldQuest quest = 2; +} + +// CmdID: 4480 +message RefreshOpenworldQuestReq { + uint32 map_id = 1; +} + +// CmdID: 4481 +message RefreshOpenworldQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_CHOOSE = 2; + HCOIN_LACK = 3; + MAP_NOT_FOUND = 4; + } + + RefreshOpenworldQuestRsp.Retcode retcode = 1; + repeated OpenworldQuest quest_list = 2; + uint32 refresh_left_times = 3; + uint32 next_refresh_cost = 4; + uint32 map_id = 5; +} + +// CmdID: 4482 +message TakeOpenworldQuestRewardReq { + uint32 map_id = 1; + uint32 quest_id = 2; +} + +// CmdID: 4483 +message TakeOpenworldQuestRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_FINISH = 2; + MAP_NOT_FOUND = 3; + QUEST_NOT_FOUND = 4; + } + + TakeOpenworldQuestRewardRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; + repeated RewardData day_reward_list = 3; + uint32 add_star = 4; + uint32 challenge_score = 5; + uint32 old_quest_level = 6; +} + +// CmdID: 4484 +message AbandonOpenworldQuestReq { + uint32 map_id = 1; + uint32 quest_id = 2; +} + +// CmdID: 4485 +message AbandonOpenworldQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + IS_CLOSE = 2; + REWARD_NOT_TAKE = 3; + NOT_FOUND = 4; + NOT_DOING = 5; + HAS_ABANDAN = 6; + MAP_NOT_FOUND = 7; + CANNOT_ABANDON = 8; + } + + AbandonOpenworldQuestRsp.Retcode retcode = 1; +} + +// CmdID: 4486 +message ReportOpenworldSpawnPointReq { + string point_info = 1; + repeated OpenworldStageAvatarInfo avatar_list = 2; + bool is_ld_sp_recover = 3; + repeated uint32 sp_recover_avatar_list = 4; + uint32 map_id = 5; +} + +// CmdID: 4487 +message ReportOpenworldSpawnPointRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_ERROR = 2; + } + + ReportOpenworldSpawnPointRsp.Retcode retcode = 1; + uint32 map_id = 2; + string point_info = 3; +} + +// CmdID: 4488 +message FinishOpenworldQuestReq { + uint32 map_id = 1; + uint32 quest_id = 2; + uint32 cost_time = 3; + repeated uint32 finish_challenge_list = 4; + uint32 mecha_id = 5; + string report_ext = 6; +} + +// CmdID: 4489 +message FinishOpenworldQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + QUEST_NOT_EXIST = 2; + QUEST_NOT_DOING = 3; + MAP_NOT_FOUND = 4; + } + + FinishOpenworldQuestRsp.Retcode retcode = 1; + uint32 quest_id = 2; + uint32 cost_time = 3; + repeated uint32 finish_challenge_list = 4; +} + +// CmdID: 4490 +message TakeOpenworldCycleFinishRewardReq { + uint32 cycle = 1; + uint32 map_id = 2; +} + +// CmdID: 4491 +message TakeOpenworldCycleFinishRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STORY_NOT_FINISH = 2; + CYCLE_NOT_MATCH = 3; + MAP_NOT_FOUND = 4; + } + + TakeOpenworldCycleFinishRewardRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; + uint32 map_id = 3; + uint32 cycle = 4; +} + +// CmdID: 4492 +message EatOpenworldCookReq { + uint32 cook_id = 1; + uint32 avatar_id = 2; + uint32 map_id = 3; +} + +// CmdID: 4493 +message EatOpenworldCookRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CYCLE_NOT_OPEN = 2; + MATERIAL_LACK = 3; + QUEST_LEVEL_LACK = 4; + EAT_LIMIT = 5; + AVATAR_NOT_EXIST = 6; + AVATAR_ERROR = 7; + AVATAR_HP_FULL = 8; + AVATAR_SP_FULL = 9; + AVATAR_DIE = 10; + MAP_NOT_FOUND = 11; + } + + EatOpenworldCookRsp.Retcode retcode = 1; +} + +// CmdID: 4494 +message TakeOpenworldKeyQuestRewardReq { + uint32 map_id = 1; +} + +// CmdID: 4495 +message TakeOpenworldKeyQuestRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_KEY_QUEST = 2; + NOT_FINISH = 3; + MAP_NOT_FOUND = 4; + } + + TakeOpenworldKeyQuestRewardRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; + uint32 level = 3; + uint32 star = 4; +} + +// CmdID: 4496 +message GetNewOpenworldReq { + OpenworldDataType data_type = 1; +} + +// CmdID: 4497 +message GetNewOpenworldRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CYCLE_NOT_OPEN = 2; + } + + GetNewOpenworldRsp.Retcode retcode = 1; + OpenworldDataType data_type = 2; + repeated OpenworldMapBriefData map_list = 3; + uint32 next_refresh_time = 4; + uint32 global_random_seed = 6; + uint32 close_time = 7; + repeated OpenworldCook cook_list = 8; + uint32 quest_theme_index = 9; + repeated OpenworldTechData tech = 10; + repeated OpenworldMechaPort mecha_port_list = 11; + uint32 quest_level = 12; + uint32 quest_star = 13; + uint32 max_quest_level = 14; +} + +// CmdID: 4498 +message GetOpenworldMapReq { + uint32 map_id = 1; +} + +// CmdID: 4499 +message GetOpenworldMapRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetOpenworldMapRsp.Retcode retcode = 1; + uint32 map_id = 2; + uint32 cycle = 3; + repeated OpenworldEvent event_list = 4; + uint32 event_random_seed = 5; + string spawn_point = 6; + repeated OpenworldOverView over_view_list = 7; + repeated OpenworldStat stat_list = 8; + uint32 status = 9; + OpenworldQuestData quest_data = 11; + OpenworldTechData tech_data = 12; + uint32 has_take_finish_reward_cycle = 13; + OpenworldActivity activity_data = 14; + OpenworldBossHunt boss_hunt = 15; + repeated OpenworldAreaInfo area_info_list = 16; + repeated OpenworldAreaEntityState area_entity_state_list = 17; + repeated uint32 finish_once_event_list = 19; +} + +// CmdID: 4500 +message GetOpenworldStoryReq { +} + +// CmdID: 4501 +message GetOpenworldStoryRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetOpenworldStoryRsp.Retcode retcode = 1; + repeated uint32 finish_story_id_list = 2; + repeated OpenworldStory cur_story_list = 3; + repeated uint32 finish_story_id_add_list = 4; + repeated uint32 finish_story_id_del_list = 5; + bool is_all = 6; +} + +// CmdID: 4502 +message UnlockOpenworldTechSkillReq { + uint32 map_id = 1; + uint32 skill_id = 2; +} + +// CmdID: 4503 +message UnlockOpenworldTechSkillRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TECH_LOCK = 2; + LEVEL_LACK = 3; + STORY_LOCK = 4; + PRE_SKILL_LOCK = 5; + SKILL_POINT_LACK = 6; + ALREADA_UNLOCK = 7; + } + + UnlockOpenworldTechSkillRsp.Retcode retcode = 1; + int32 param = 2; +} + +// CmdID: 4504 +message ActivateOpenworldMapReq { + uint32 map_id = 1; +} + +// CmdID: 4505 +message ActivateOpenworldMapRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_ACTIVATE = 2; + STATUS_ERROR = 3; + } + + ActivateOpenworldMapRsp.Retcode retcode = 1; + uint32 map_id = 2; +} + +message OpenworldMechaTeamMember { + uint32 pos = 1; + uint32 mecha_unique_id = 2; +} + +message OpenworldMechaTeam { + repeated OpenworldMechaTeamMember mecha_list = 1; +} + +// CmdID: 4506 +message OpenworldSetMechaTeamReq { + uint32 team_index = 1; + repeated OpenworldMechaTeamMember mecha_list = 2; + bool set_as_battle_team = 3; +} + +// CmdID: 4507 +message OpenworldSetMechaTeamRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + INDEX_ERROR = 2; + MECHA_NUM_ERROR = 3; + MECHA_REPEAT = 4; + MECHA_NOT_EXIST = 5; + MECHA_POS_ERROR = 6; + POS_REPEAT = 7; + CLASS_REPEAT = 8; + NOT_OPEN = 9; + } + + OpenworldSetMechaTeamRsp.Retcode retcode = 1; +} + +// CmdID: 4508 +message OpenworldGetMechaTeamReq { +} + +// CmdID: 4509 +message OpenworldGetMechaTeamRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + OpenworldGetMechaTeamRsp.Retcode retcode = 1; + repeated OpenworldMechaTeam mecha_team_list = 2; + uint32 cur_team_index = 3; +} + +// CmdID: 4510 +message OpenworldMechaDefenseBeginReq { +} + +// CmdID: 4511 +message OpenworldMechaDefenseBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + MAP_NOT_OPEN = 3; + TIMES_LIMIT = 4; + MECHA_NUM_ERROR = 5; + } + + OpenworldMechaDefenseBeginRsp.Retcode retcode = 1; + uint32 hard_level = 2; +} + +// CmdID: 4512 +message OpenworldMechaDefenseEndReq { + StageEndStatus end_status = 1; + uint32 hard_level = 2; + uint32 score = 3; + repeated StageCheatData cheat_data_list = 4; +} + +// CmdID: 4513 +message OpenworldMechaDefenseEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_BEGIN = 2; + NOT_OPEN = 3; + } + + OpenworldMechaDefenseEndRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; + uint32 rating = 3; +} + +// CmdID: 4514 +message GetOpenworldMechaDefenseReq { +} + +message OpenworldMechaDefense { + uint32 last_enter_time = 1; + uint32 left_enter_times = 2; + uint32 last_rating = 3; +} + +// CmdID: 4515 +message GetOpenworldMechaDefenseRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetOpenworldMechaDefenseRsp.Retcode retcode = 1; + OpenworldMechaDefense mecha_defense = 2; +} + +// CmdID: 4516 +message OpenworldMakeMechaReq { + uint32 paper_id = 1; +} + +// CmdID: 4517 +message OpenworldMakeMechaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_LACK = 2; + LEVEL_UNLOCK = 3; + NOT_OPEN = 4; + } + + OpenworldMakeMechaRsp.Retcode retcode = 1; + uint32 mecha_id = 2; +} + +// CmdID: 4518 +message SetMechaPortReq { + MechaSlot slot = 1; + uint32 mecha_id = 2; +} + +// CmdID: 4519 +message SetMechaPortRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + EQUIPPED = 2; + CAN_NOT_RIDE = 3; + NOT_EXIST = 4; + CLASS_REPEAT = 5; + NOT_OPEN = 6; + } + + SetMechaPortRsp.Retcode retcode = 1; +} + +// CmdID: 4520 +message ChooseOpenworldBossReq { + uint32 map_id = 1; + uint32 boss_id = 2; +} + +// CmdID: 4521 +message ChooseOpenworldBossRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STAMINA_LACK = 2; + BOSS_NOT_KILL = 3; + BOSS_NOT_EXIST = 4; + TIME_LIMIT = 5; + } + + ChooseOpenworldBossRsp.Retcode retcode = 1; + uint32 map_id = 2; + uint32 boss_id = 3; +} + +// CmdID: 4522 +message UpdateOpenworldBossStatusReq { + uint32 map_id = 1; + uint32 left_hp = 2; + uint32 battle_time = 3; + uint32 location_idx = 4; + string report_ext = 5; +} + +// CmdID: 4523 +message UpdateOpenworldBossStatusRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_CHOOSE = 2; + CLUE_NOT_FINISH = 3; + } + + UpdateOpenworldBossStatusRsp.Retcode retcode = 1; + uint32 map_id = 2; +} + +// CmdID: 4524 +message UpdateOpenworldBossSearchTimeReq { + uint32 map_id = 1; + uint32 search_time = 2; +} + +// CmdID: 4525 +message UpdateOpenworldBossSearchTimeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_CHOOSE = 2; + } + + UpdateOpenworldBossSearchTimeRsp.Retcode retcode = 1; + uint32 map_id = 2; +} + +// CmdID: 4526 +message TakeOpenworldBossRewardReq { + uint32 map_id = 1; + uint32 boss_id = 2; +} + +// CmdID: 4527 +message TakeOpenworldBossRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_KILL = 2; + NO_REWARD = 3; + HAVE_TAKE = 4; + } + + TakeOpenworldBossRewardRsp.Retcode retcode = 1; + uint32 map_id = 2; + uint32 boss_id = 3; + repeated RewardData reward_data_list = 4; +} + +// CmdID: 4528 +message TakeOpenworldBossHuntRatingRewardReq { + uint32 map_id = 1; + uint32 rating_id = 2; +} + +// CmdID: 4529 +message TakeOpenworldBossHuntRatingRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_KILL_ALL = 2; + NO_REWARD = 3; + NO_RATING = 4; + RATING_DISMATCH = 5; + HAVE_TAKE = 6; + } + + TakeOpenworldBossHuntRatingRewardRsp.Retcode retcode = 1; + uint32 map_id = 2; + uint32 rating_id = 3; + repeated RewardData reward_data_list = 4; +} + +// CmdID: 4530 +message SyncOpenworldBossHuntNotify { + OpenworldBossHunt boss_hunt = 1; +} + +// CmdID: 4531 +message TakeOpenworldActivityLevelRewardReq { + uint32 activity_id = 1; + uint32 activity_level = 2; +} + +// CmdID: 4532 +message TakeOpenworldActivityLevelRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LEVEL_LACK = 2; + HAVE_TAKEN = 3; + } + + TakeOpenworldActivityLevelRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 activity_level = 3; + repeated RewardData reward_data_list = 4; +} + +// CmdID: 4533 +message GetOpenworldBossHuntRankReq { + uint32 map_id = 1; +} + +// CmdID: 4534 +message GetOpenworldBossHuntRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetOpenworldBossHuntRankRsp.Retcode retcode = 1; + uint32 map_id = 2; + RankShowData rank_data = 3; +} + +message SyncOpenworldActivityDisplayInfo { + uint32 add_base_activity_exp = 1; + uint32 add_buff_activity_exp = 2; +} + +// CmdID: 4535 +message SyncOpenworldActivityNotify { + OpenworldActivity activity_data = 1; + SyncOpenworldActivityDisplayInfo display_info = 2; +} + +// CmdID: 4536 +message ResetOpenworldBossReq { + uint32 map_id = 1; + uint32 boss_id = 2; +} + +// CmdID: 4537 +message ResetOpenworldBossRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_KILL_ALL = 2; + BOSS_NOT_KILL = 3; + } + + ResetOpenworldBossRsp.Retcode retcode = 1; + uint32 map_id = 2; + uint32 boss_id = 3; +} + +// CmdID: 4538 +message ReportOpenworldAreaInfoReq { + uint32 map_id = 1; + uint32 area_id = 2; + string area_info = 3; +} + +// CmdID: 4539 +message ReportOpenworldAreaInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ReportOpenworldAreaInfoRsp.Retcode retcode = 1; + uint32 map_id = 2; + uint32 area_id = 3; + repeated OpenworldAreaInfo area_info_list = 4; +} + +// CmdID: 4540 +message OpenworldFightBeginNotify { + uint32 map_id = 1; + uint32 area_id = 2; + OpenworldStageType stage_type = 3; + string monster_name = 4; + string sub_area_name = 5; + string report_ext = 6; +} + +// CmdID: 4541 +message OpenworldFightEndNotify { + uint32 map_id = 1; + uint32 area_id = 2; + OpenworldStageType stage_type = 3; + string monster_kill_info = 4; + uint32 revive_times = 5; + OpenworldFightEndStatus fight_end_status = 6; + uint32 cost_time = 7; + string sub_area_name = 8; + string report_ext = 9; +} + +// CmdID: 4542 +message ReportOpenworldAreaEntityStateReq { + uint32 map_id = 1; + uint32 area_id = 2; + uint32 entity_id = 3; + uint32 entity_state = 4; +} + +// CmdID: 4543 +message ReportOpenworldAreaEntityStateRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + AREA_ERROR = 3; + ENTITY_ID_ERROR = 4; + ENTITY_STATE_ERROR = 5; + } + + ReportOpenworldAreaEntityStateRsp.Retcode retcode = 1; + uint32 map_id = 2; + uint32 area_id = 3; + uint32 entity_id = 4; + repeated OpenworldAreaEntityState area_entity_state_list = 5; +} + +// CmdID: 4544 +message UpdateOpenworldQuestProgressReq { + OpenworldQuestFinishWay finish_way = 1; + string finish_para_str = 2; + uint32 progress_add = 3; + string report_ext = 4; +} + +// CmdID: 4545 +message UpdateOpenworldQuestProgressRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FINISH_WAY_ERROR = 2; + } + + UpdateOpenworldQuestProgressRsp.Retcode retcode = 1; + OpenworldQuestFinishWay finish_way = 2; + string finish_para_str = 3; +} + +// CmdID: 4546 +message GetOpenworldQuestActivityReq { +} + +// CmdID: 4547 +message GetOpenworldQuestActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetOpenworldQuestActivityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 total_score = 3; + uint32 cycle_quest_taken_num = 4; +} + +message OpenworldAvatarActivity { + message Talent { + uint32 talent_id = 1; + uint32 level = 2; + } + + message Cultivate { + uint32 id = 1; + uint32 level = 2; + } + + uint32 map_id = 1; + uint32 activity_id = 2; + uint32 level = 3; + uint32 exp = 4; + repeated OpenworldQuest daily_quest_list = 5; + uint32 daily_accept_quest_times = 6; + uint32 daily_refresh_quest_times = 7; + repeated OpenworldQuest special_quest_list = 8; + repeated OpenworldAvatarActivity.Talent talent_list = 9; + repeated OpenworldAvatarActivity.Cultivate cultivate_list = 10; + repeated uint32 unlock_avatar_id_list = 11; + repeated uint32 finished_quest_id_list = 12; + uint32 total_daily_quest_currency_num = 13; + uint32 schedule_id = 14; +} + +// CmdID: 4548 +message GetOpenworldAvatarActivityReq { + uint32 map_id = 1; +} + +// CmdID: 4549 +message GetOpenworldAvatarActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetOpenworldAvatarActivityRsp.Retcode retcode = 1; + OpenworldAvatarActivity activity = 2; +} + +// CmdID: 4550 +message OpenworldAvatarActivityAcceptDailyQuestReq { + uint32 map_id = 1; +} + +// CmdID: 4551 +message OpenworldAvatarActivityAcceptDailyQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + DAILY_LIMIT = 2; + QUEST_LIMIT = 3; + STAMINA_LACK = 4; + FUNCTION_LOCK = 5; + CURRENCY_FULL = 6; + } + + OpenworldAvatarActivityAcceptDailyQuestRsp.Retcode retcode = 1; + OpenworldQuest quest = 2; +} + +// CmdID: 4552 +message OpenworldAvatarActivityRefreshDailyQuestReq { + uint32 map_id = 1; + uint32 quest_id = 2; +} + +// CmdID: 4553 +message OpenworldAvatarActivityRefreshDailyQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + DAILY_LIMIT = 2; + QUEST_NOT_EXIST = 3; + QUEST_STATUS_ERROR = 4; + } + + OpenworldAvatarActivityRefreshDailyQuestRsp.Retcode retcode = 1; + OpenworldQuest quest = 2; +} + +// CmdID: 4554 +message OpenworldAvatarActivityFinishQuestReq { + uint32 map_id = 1; + uint32 quest_id = 2; + uint32 cost_time = 3; + repeated uint32 finish_challenge_list = 4; +} + +// CmdID: 4555 +message OpenworldAvatarActivityFinishQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + QUEST_NOT_EXIST = 2; + QUEST_STATUS_ERROR = 3; + } + + OpenworldAvatarActivityFinishQuestRsp.Retcode retcode = 1; + uint32 quest_id = 2; + uint32 cost_time = 3; + repeated uint32 finish_challenge_list = 4; +} + +// CmdID: 4556 +message OpenworldAvatarActivityTakeQuestRewardReq { + uint32 map_id = 1; + uint32 quest_id = 2; +} + +// CmdID: 4557 +message OpenworldAvatarActivityTakeQuestRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + QUEST_NOT_EXIST = 2; + NOT_FINISH = 3; + } + + OpenworldAvatarActivityTakeQuestRewardRsp.Retcode retcode = 1; + RewardData reward_data = 2; + uint32 map_id = 3; + uint32 quest_id = 4; +} + +// CmdID: 4558 +message OpenworldAvatarActivityCultivateReq { + uint32 map_id = 1; + uint32 cultivate_id = 2; +} + +// CmdID: 4559 +message OpenworldAvatarActivityCultivateRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_LACK = 2; + CONDITION_NOT_MEET = 3; + MAX_LEVEL = 4; + } + + OpenworldAvatarActivityCultivateRsp.Retcode retcode = 1; +} + +// CmdID: 4560 +message OpenworldAvatarActivityTalentLevelupReq { + uint32 map_id = 1; + uint32 talent_id = 2; +} + +// CmdID: 4561 +message OpenworldAvatarActivityTalentLevelupRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_LACK = 2; + CONDITION_NOT_MEET = 3; + MAX_LEVEL = 4; + } + + OpenworldAvatarActivityTalentLevelupRsp.Retcode retcode = 1; +} + +// CmdID: 4562 +message OpenworldAvatarActivityGetFileReq { + uint32 map_id = 1; +} + +// CmdID: 4563 +message OpenworldAvatarActivityGetFileRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + OpenworldAvatarActivityGetFileRsp.Retcode retcode = 1; + repeated uint32 file_id_list = 2; +} + +// CmdID: 4564 +message OpenworldAvatarActivitySpecialQuestNotify { + uint32 activity_id = 1; + repeated OpenworldQuest quest_list = 2; +} + +// CmdID: 4565 +message OpenworldChapterGetDataReq { + uint32 map_id = 1; +} + +message OpenworldChapterSlot { + uint32 slot_id = 1; + uint32 buff_id = 2; +} + +message OpenworldChapterBuff { + enum Type { + TYPE_NONE = 0; + SKILL = 3; + } + + uint32 buff_id = 1; + uint32 level = 2; +} + +message OpenworldChapterShopGoods { + uint32 goods_id = 1; + uint32 cost_material_id = 2; + uint32 cost_num = 3; + bool is_sold = 4; + uint32 need_fame_level = 5; + uint32 reward_id = 6; +} + +message OpenworldChapterShop { + uint32 shop_id = 1; + repeated OpenworldChapterShopGoods goods_list = 2; +} + +message OpenworldChapterChallenge { + uint32 today_challenge_times = 1; + uint32 last_challenge_time = 2; +} + +message OpenworldChapterEndlessTowerSite { + uint32 site_id = 1; + uint32 has_take_reward_score = 2; +} + +message OpenworldChapterHero { + uint32 hero_id = 1; + uint32 hero_level = 2; +} + +message OpenworldChapterHeroCard { + uint32 card_id = 1; + uint32 card_level = 2; + uint32 card_exp = 3; +} + +message OpenworldChapterHeroCardSlot { + uint32 slot_idx = 1; + uint32 card_id = 2; +} + +message OpenworldChapterHeroCardGroup { + uint32 hero_id = 1; + string group_name = 2; + bool is_active = 3; + repeated OpenworldChapterHeroCardSlot slot_list = 4; +} + +message OpenworldChapterAchievementMission { + uint32 mission_id = 1; + uint32 finish_time = 2; +} + +message OpenworldChapterEndlessChallenge { + uint32 challenge_id = 1; + bool is_passed = 2; + uint32 max_score = 3; +} + +message OpenworldChapterFurnaceWork { + uint32 unique_id = 1; + uint32 formula_id = 2; + OpenworldChapterFurnaceWorkStatus status = 5; + uint32 finish_time = 6; +} + +message OpenworldChapterFurnaceFormulaUseHistory { + uint32 formula_id = 1; + uint32 use_times = 2; +} + +message OpenworldChapterFurnace { + repeated OpenworldChapterFurnaceFormulaUseHistory formula_use_history_list = 1; + repeated OpenworldChapterFurnaceWork furnace_work_list = 2; +} + +message OpenworldChapterBuilding { + uint32 main_id = 1; + uint32 level = 2; + uint32 level_up_finish_time = 3; +} + +message OpenworldChapterTerminal { + uint32 level = 1; + uint32 exp = 2; + bool is_period_upgraded = 3; +} + +message OpenworldChapterQuestData { + repeated OpenworldQuest quest_list = 1; + uint32 quest_accept_times = 2; + uint32 quest_refresh_times = 3; + uint32 special_quest_finished_num = 4; +} + +message OpenworldChapterTalent { + uint32 talent_id = 1; + uint32 talent_level = 2; +} + +message OpenworldChapterDigSiteProgramTimes { + uint32 program_id = 1; + uint32 times = 2; +} + +message OpenworldChapterDigSite { + uint32 main_id = 1; + uint32 program_id = 2; + uint32 program_finish_time = 3; + repeated OpenworldChapterDigSiteProgramTimes program_times_list = 4; +} + +message OpenworldChapter { + uint32 map_id = 1; + repeated OpenworldChapterSlot slot_list = 2; + uint32 max_equip_cost = 4; + repeated OpenworldChapterBuff buff_list = 5; + uint32 max_reward_take_num = 6; + uint32 fame = 7; + uint32 fame_level = 8; + OpenworldChapterChallenge challenge = 9; + repeated OpenworldChapterEndlessTowerSite endless_tower_site_list = 10; + repeated OpenworldChapterHero hero_list = 11; + repeated OpenworldChapterHeroCard hero_card_list = 14; + repeated OpenworldChapterHeroCardGroup hero_card_group_list = 15; + repeated OpenworldChapterAchievementMission achievement_mission_list = 16; + repeated OpenworldChapterEndlessChallenge endless_challenge_list = 17; + repeated OpenworldChapterBuilding building_list = 18; + OpenworldChapterTerminal terminal = 19; + OpenworldChapterQuestData quest_data = 20; + OpenworldChapterFurnace furnace = 21; + repeated OpenworldChapterTalent talent_list = 22; + repeated uint32 active_talent_id_list = 23; + repeated OpenworldChapterDigSite dig_site_list = 24; + repeated uint32 got_last_reward_special_qte_map_list = 25; +} + +// CmdID: 4566 +message OpenworldChapterGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + OpenworldChapterGetDataRsp.Retcode retcode = 1; + OpenworldChapter chapter_data = 2; +} + +// CmdID: 4567 +message OpenworldChapterSlotEquipBuffReq { + uint32 map_id = 1; + uint32 slot_id = 2; + uint32 buff_id = 3; +} + +// CmdID: 4568 +message OpenworldChapterSlotEquipBuffRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + BUFF_NOT_EXIST = 2; + BUFF_USED = 3; + SLOT_LOCKED = 4; + OVER_COST = 5; + SLOT_NOT_SUIT = 6; + } + + OpenworldChapterSlotEquipBuffRsp.Retcode retcode = 1; + uint32 map_id = 2; + uint32 slot_id = 3; + uint32 buff_id = 4; +} + +// CmdID: 4569 +message OpenworldAcceptNewStoryReq { + uint32 map_id = 1; + string report_ext = 2; +} + +// CmdID: 4570 +message OpenworldAcceptNewStoryRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + OpenworldAcceptNewStoryRsp.Retcode retcode = 1; + uint32 map_id = 2; + repeated uint32 story_id_list = 3; +} + +// CmdID: 4571 +message OpenworldChapterTakeRewardReq { + uint32 map_id = 1; +} + +// CmdID: 4572 +message OpenworldChapterTakeRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + OpenworldChapterTakeRewardRsp.Retcode retcode = 1; + uint32 map_id = 2; + RewardData reward_data = 3; + uint32 max_reward_take_num = 4; +} + +// CmdID: 4573 +message OpenworldCloseStoryReq { + repeated uint32 story_id_list = 1; + string report_ext = 2; +} + +// CmdID: 4574 +message OpenworldCloseStoryRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + OpenworldCloseStoryRsp.Retcode retcode = 1; + repeated uint32 story_id_list = 2; +} + +// CmdID: 4575 +message OpenworldChapterGetShopDataReq { + uint32 shop_id = 1; +} + +// CmdID: 4576 +message OpenworldChapterGetShopDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + OpenworldChapterGetShopDataRsp.Retcode retcode = 1; + OpenworldChapterShop shop = 2; +} + +// CmdID: 4577 +message OpenworldChapterShopBuyGoodsReq { + uint32 shop_id = 1; + uint32 goods_id = 2; +} + +// CmdID: 4578 +message OpenworldChapterShopBuyGoodsRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_MAP = 2; + SOLD = 3; + LACK_MATERIAL = 4; + } + + OpenworldChapterShopBuyGoodsRsp.Retcode retcode = 1; + uint32 shop_id = 2; + uint32 goods_id = 3; + RewardData reward_data = 4; +} + +// CmdID: 4579 +message OpenworldChapterEndlessTowerGetRankReq { + uint32 site_id = 1; +} + +// CmdID: 4580 +message OpenworldChapterEndlessTowerGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + OpenworldChapterEndlessTowerGetRankRsp.Retcode retcode = 1; + uint32 site_id = 2; + uint32 rank_percent = 3; +} + +// CmdID: 4581 +message OpenworldChapterEndlessTowerTakeRewardReq { + uint32 site_id = 2; +} + +// CmdID: 4582 +message OpenworldChapterEndlessTowerTakeRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_REWARD = 2; + } + + OpenworldChapterEndlessTowerTakeRewardRsp.Retcode retcode = 1; + uint32 site_id = 2; + repeated RewardData reward_list = 3; +} + +// CmdID: 4583 +message OpenworldChapterLevelUpHeroReq { + uint32 hero_id = 1; +} + +// CmdID: 4584 +message OpenworldChapterLevelUpHeroRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HERO_ERROR = 2; + HERO_LOCKED = 3; + MATERIAL_LACK = 4; + TARGET_LEVEL_ERROR = 5; + } + + OpenworldChapterLevelUpHeroRsp.Retcode retcode = 1; +} + +// CmdID: 4585 +message OpenworldChapterEquipCardGroupReq { + uint32 group_idx = 1; + uint32 hero_id = 2; + repeated OpenworldChapterHeroCardSlot slot_list = 3; +} + +// CmdID: 4586 +message OpenworldChapterEquipCardGroupRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + GROUP_ERROR = 2; + HERO_ERROR = 3; + CARD_REPEATED = 4; + CARD_NOT_EXIST = 5; + SPECIAL_CARD_SLOT_LIMIT = 6; + SLOT_LOCKED = 7; + SLOT_REPEATED = 8; + } + + OpenworldChapterEquipCardGroupRsp.Retcode retcode = 1; +} + +// CmdID: 4587 +message OpenworldChapterModifyCardGroupNameReq { + uint32 map_id = 1; + uint32 group_idx = 2; + string group_name = 3; +} + +// CmdID: 4588 +message OpenworldChapterModifyCardGroupNameRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FORMAT_ERROR = 2; + SENSITIVE_WORDS = 3; + MAP_ERROR = 4; + GROUP_ERROR = 5; + } + + OpenworldChapterModifyCardGroupNameRsp.Retcode retcode = 1; +} + +// CmdID: 4589 +message OpenworldChapterActiveCardGroupReq { + uint32 map_id = 1; + uint32 group_idx = 2; +} + +// CmdID: 4590 +message OpenworldChapterActiveCardGroupRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + GROUP_ERROR = 3; + } + + OpenworldChapterActiveCardGroupRsp.Retcode retcode = 1; +} + +// CmdID: 4591 +message OpenworldChapterDeleteCardGroupReq { + uint32 map_id = 1; + uint32 group_idx = 2; +} + +// CmdID: 4592 +message OpenworldChapterDeleteCardGroupRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + TOO_FREQUENT = 3; + } + + OpenworldChapterDeleteCardGroupRsp.Retcode retcode = 1; +} + +// CmdID: 4593 +message OpenworldChapterGetChallengeDataReq { + uint32 map_id = 1; +} + +message OpenworldChapterChallengeGroup { + uint32 group_id = 1; + uint32 max_challenge_index = 2; +} + +// CmdID: 4594 +message OpenworldChapterGetChallengeDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + } + + OpenworldChapterGetChallengeDataRsp.Retcode retcode = 1; + uint32 map_id = 2; + uint32 challenge_schedule_id = 3; + repeated uint32 open_group_list = 4; + repeated OpenworldChapterChallengeGroup group_list = 5; + uint32 schedule_end_time = 6; +} + +// CmdID: 4595 +message OpenworldChapterFinishChallengeReq { + uint32 map_id = 1; + uint32 group_id = 2; + uint32 challenge_index = 3; + string report_ext = 4; +} + +// CmdID: 4596 +message OpenworldChapterFinishChallengeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + SCHEDULE_NOT_OPEN = 3; + GROUP_NOT_OPEN = 4; + GROUP_NOT_MEET_CONDITION = 5; + CHALLENGE_INDEX_ERROR = 6; + } + + OpenworldChapterFinishChallengeRsp.Retcode retcode = 1; + uint32 map_id = 2; + uint32 group_id = 3; + uint32 challenge_index = 4; + RewardData reward_data = 5; +} + +// CmdID: 4597 +message OpenworldChapterHeroCardLevelUpNotify { + uint32 card_id = 1; + uint32 card_level = 2; +} + +// CmdID: 4598 +message OpenworldChapterOpenHeroTreasureReq { +} + +// CmdID: 4599 +message OpenworldChapterOpenHeroTreasureRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + PART_FAIL = 2; + } + + OpenworldChapterOpenHeroTreasureRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; + RewardData reward_data = 3; +} + +message HuntActivityHunter { + uint32 hunter_id = 1; + HuntActivityHunterState state = 2; + string spawn_point = 3; +} + +message HuntActivityMachine { + uint32 machine_id = 1; + uint32 state = 2; +} + +message HuntActivityMapData { + uint32 map_id = 1; + bool is_unlock = 2; + uint32 open_time = 3; + HuntActivityHunter hunter = 4; + repeated HuntActivityMachine machine_list = 5; + repeated uint32 show_stronghold_id_list = 7; + uint32 hard_level = 8; + uint32 remain_stronghold_take_times = 9; + repeated OpenworldQuest quest_list = 10; + uint32 hunting_score = 11; + uint32 finish_quest_num = 12; + repeated uint32 finish_stronghold_id_list = 13; +} + +// CmdID: 4600 +message OpenworldHuntActivityGetDataReq { + uint32 activity_id = 1; +} + +// CmdID: 4601 +message OpenworldHuntActivityGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + } + + OpenworldHuntActivityGetDataRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + repeated HuntActivityMapData map_data_list = 3; + repeated OpenworldTalent talent_list = 4; +} + +// CmdID: 4602 +message OpenworldHuntActivityGetMapDataReq { + uint32 map_id = 1; +} + +// CmdID: 4603 +message OpenworldHuntActivityGetMapDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_NOT_OPEN = 2; + PROCESS_NOT_ENOUGH = 3; + ACTIVITY_NOT_OPEN = 4; + MAP_NOT_EXIST = 5; + } + + OpenworldHuntActivityGetMapDataRsp.Retcode retcode = 1; + HuntActivityMapData map_data = 2; +} + +// CmdID: 4604 +message OpenworldHuntActivityCommonStateChangeReq { + HuntActivityEntityType type = 1; + uint32 wanted_state = 2; + uint32 map_id = 3; + uint32 entity_id = 4; + string report_ext = 5; +} + +// CmdID: 4605 +message OpenworldHuntActivityCommonStateChangeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STATE_ERROR = 2; + MAP_NOT_EXIST = 3; + ENTITY_NOT_EXIST = 4; + TIMES_LACK = 5; + STRONGHOLD_ERROR = 6; + } + + OpenworldHuntActivityCommonStateChangeRsp.Retcode retcode = 1; + HuntActivityEntityType type = 2; + uint32 map_id = 3; + uint32 entity_id = 4; +} + +// CmdID: 4606 +message OpenworldHuntActivityTalentUpgradeReq { + uint32 activity_id = 1; + uint32 talent_id = 2; + string report_ext = 3; +} + +// CmdID: 4607 +message OpenworldHuntActivityTalentUpgradeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + TALENT_LEVEL_ERROR = 3; + PRE_TALENT_LACK = 4; + MAP_NOT_OPEN = 5; + MAP_PROGRESS_LACK = 6; + MATERIAL_LACK = 7; + } + + OpenworldHuntActivityTalentUpgradeRsp.Retcode retcode = 1; +} + +// CmdID: 4608 +message OpenworldHuntActivityFinishQuestReq { + uint32 map_id = 1; + uint32 quest_id = 2; + uint32 cost_time = 3; + string report_ext = 4; +} + +// CmdID: 4609 +message OpenworldHuntActivityFinishQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + QUEST_NOT_EXIST = 2; + QUEST_NOT_DOING = 3; + MAP_NOT_EXIST = 4; + NOT_IN_MAP = 5; + } + + OpenworldHuntActivityFinishQuestRsp.Retcode retcode = 1; + uint32 map_id = 2; + uint32 quest_id = 3; + RewardData reward_data = 4; +} + +// CmdID: 4610 +message OpenworldHuntActivityTakeStrongholdRewardNotify { + uint32 map_id = 1; + uint32 stronghold_id = 2; + RewardData reward_data = 3; +} + +// CmdID: 4611 +message OpenworldHuntActivityChangeHunterAreaReq { + uint32 map_id = 1; + uint32 hunter_id = 2; + string spawn_point = 3; +} + +// CmdID: 4612 +message OpenworldHuntActivityChangeHunterAreaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_MAP = 3; + MAP_ERROR = 4; + TARGET_AREA_ERROR = 5; + HUNTER_ERROR = 6; + } + + OpenworldHuntActivityChangeHunterAreaRsp.Retcode retcode = 1; +} + +// CmdID: 4613 +message OpenworldHuntActivityReportHuntingScoreReq { + uint32 map_id = 1; + uint32 hunting_score = 2; +} + +// CmdID: 4614 +message OpenworldHuntActivityReportHuntingScoreRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_MAP = 2; + MAP_NOT_OPEN = 3; + } + + OpenworldHuntActivityReportHuntingScoreRsp.Retcode retcode = 1; +} + +// CmdID: 4630 +message OpenworldChapterChallengeBeginReq { + uint32 map_id = 1; + uint32 group_id = 2; + uint32 challenge_index = 3; + string report_ext = 4; +} + +// CmdID: 4631 +message OpenworldChapterChallengeBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + SCHEDULE_NOT_OPEN = 3; + GROUP_NOT_OPEN = 4; + GROUP_NOT_MEET_CONDITION = 5; + CHALLENGE_INDEX_ERROR = 6; + } + + OpenworldChapterChallengeBeginRsp.Retcode retcode = 1; +} + +// CmdID: 4632 +message OpenworldChapterEndlessChallengeBeginReq { + uint32 map_id = 1; + uint32 challenge_id = 2; + string report_ext = 3; +} + +// CmdID: 4633 +message OpenworldChapterEndlessChallengeBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHALLENGE_ERROR = 2; + MAP_ERROR = 3; + PRE_CHALLENGE_NOT_FINISH = 4; + MATERIAL_LACK = 5; + } + + OpenworldChapterEndlessChallengeBeginRsp.Retcode retcode = 1; +} + +// CmdID: 4634 +message OpenworldChapterEndlessChallengeEndReq { + uint32 map_id = 1; + uint32 challenge_id = 2; + uint32 score = 3; + string report_ext = 4; +} + +// CmdID: 4635 +message OpenworldChapterEndlessChallengeEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHALLENGE_ERROR = 2; + MAP_ERROR = 3; + MATERIAL_LACK = 4; + NOT_BEGIN = 5; + } + + OpenworldChapterEndlessChallengeEndRsp.Retcode retcode = 1; + RewardData reward_data = 2; +} + +// CmdID: 4636 +message OpenworldChapterLevelUpBuildingReq { + uint32 map_id = 1; + uint32 main_id = 2; +} + +// CmdID: 4637 +message OpenworldChapterLevelUpBuildingRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + BUILDING_ERROR = 3; + IN_PROGRESS = 4; + TARGET_LEVEL_ERROR = 5; + MATERIAL_LACK = 6; + TERMINAL_LEVEL_LACK = 7; + } + + OpenworldChapterLevelUpBuildingRsp.Retcode retcode = 1; +} + +// CmdID: 4638 +message OpenworldChapterLevelUpBuildingFinishNotify { + uint32 main_id = 1; + uint32 level = 2; + uint32 map_id = 3; +} + +// CmdID: 4639 +message OpenworldChapterAccelerateLevelUpBuildingReq { + uint32 map_id = 1; + uint32 main_id = 2; + uint32 material_id = 3; + uint32 material_num = 4; +} + +// CmdID: 4640 +message OpenworldChapterAccelerateLevelUpBuildingRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + BUILDING_ERROR = 3; + NOT_IN_PROGRESS = 4; + MATERIAL_ERROR = 5; + MATERIAL_LACK = 6; + } + + OpenworldChapterAccelerateLevelUpBuildingRsp.Retcode retcode = 1; +} + +// CmdID: 4641 +message OpenworldChapterTerminalPeriodUpgradeReq { + uint32 map_id = 1; + uint32 cur_level = 2; +} + +// CmdID: 4642 +message OpenworldChapterTerminalPeriodUpgradeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + TERMINAL_ERROR = 3; + MATERIAL_LACK = 4; + TALENT_LACK = 5; + TERMINAL_PERIOD_UPGRADED = 6; + TERMINAL_LEVEL_ERROR = 7; + PRE_STORY_ERROR = 8; + } + + OpenworldChapterTerminalPeriodUpgradeRsp.Retcode retcode = 1; + uint32 map_id = 2; +} + +// CmdID: 4643 +message OpenworldChapterGetSelectQuestReq { + uint32 map_id = 1; +} + +// CmdID: 4644 +message OpenworldChapterGetSelectQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + BUILDING_LOCKED = 3; + } + + OpenworldChapterGetSelectQuestRsp.Retcode retcode = 1; + repeated OpenworldQuest quest_list = 2; + uint32 map_id = 3; +} + +// CmdID: 4645 +message OpenworldChapterRefreshQuestReq { + uint32 map_id = 1; +} + +// CmdID: 4646 +message OpenworldChapterRefreshQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + BUILDING_LOCKED = 3; + REFRESH_TIMES_LACK = 4; + SLOT_LACK = 5; + } + + OpenworldChapterRefreshQuestRsp.Retcode retcode = 1; + repeated OpenworldQuest quest_list = 2; + uint32 map_id = 3; +} + +// CmdID: 4647 +message OpenworldChapterAcceptQuestReq { + uint32 map_id = 1; + uint32 quest_id = 2; +} + +// CmdID: 4648 +message OpenworldChapterAcceptQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + QUEST_ERROR = 2; + STAMINA_LACK = 3; + ACCEPT_TIMES_LACK = 4; + SLOT_LACK = 5; + MAP_ERROR = 6; + BUILDING_LOCKED = 7; + } + + OpenworldChapterAcceptQuestRsp.Retcode retcode = 1; + OpenworldQuest quest = 2; + uint32 map_id = 3; +} + +// CmdID: 4649 +message OpenworldChapterFinishQuestReq { + uint32 map_id = 1; + uint32 quest_id = 2; + uint32 cost_time = 3; + string report_ext = 4; +} + +// CmdID: 4650 +message OpenworldChapterFinishQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + QUEST_NOT_EXIST = 2; + QUEST_NOT_DOING = 3; + MAP_ERROR = 4; + } + + OpenworldChapterFinishQuestRsp.Retcode retcode = 1; + uint32 quest_id = 2; + uint32 cost_time = 3; +} + +// CmdID: 4651 +message OpenworldChapterTakeQuestRewardReq { + uint32 map_id = 1; + uint32 quest_id = 2; +} + +// CmdID: 4652 +message OpenworldChapterTakeQuestRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + QUEST_NOT_EXIST = 2; + NOT_FINISH = 3; + MAP_ERROR = 4; + } + + OpenworldChapterTakeQuestRewardRsp.Retcode retcode = 1; + uint32 quest_id = 2; + RewardData reward_data = 3; +} + +// CmdID: 4653 +message OpenworldChapterFurnaceStartWorkReq { + uint32 map_id = 1; + repeated uint32 formula_id_list = 2; +} + +// CmdID: 4654 +message OpenworldChapterFurnaceStartWorkRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + BUILDING_LOCKED = 3; + MATERIAL_LACK = 4; + FORMULA_ERROR = 5; + FORMULA_NUM_ERROR = 6; + FORMULA_TIMES_ERROR = 7; + } + + OpenworldChapterFurnaceStartWorkRsp.Retcode retcode = 1; + uint32 map_id = 2; +} + +// CmdID: 4655 +message OpenworldChapterFurnaceCancelWorkReq { + uint32 map_id = 1; + uint32 unique_id = 2; +} + +// CmdID: 4656 +message OpenworldChapterFurnaceCancelWorkRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + WORK_FINISHED = 3; + } + + OpenworldChapterFurnaceCancelWorkRsp.Retcode retcode = 1; + uint32 map_id = 2; + uint32 unique_id = 3; +} + +// CmdID: 4657 +message OpenworldChapterFurnaceAccelerateWorkReq { + uint32 map_id = 1; + uint32 unique_id = 2; + uint32 material_id = 3; + uint32 material_num = 4; +} + +// CmdID: 4658 +message OpenworldChapterFurnaceAccelerateWorkRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + MATERIAL_ERROR = 3; + UNIQUE_ID_ERROR = 4; + MATERIAL_LACK = 5; + MATERIAL_NUM_ERROR = 6; + NOT_IN_PROGRESS = 7; + } + + OpenworldChapterFurnaceAccelerateWorkRsp.Retcode retcode = 1; + uint32 map_id = 2; + uint32 unique_id = 3; +} + +// CmdID: 4659 +message TakeOpenworldChapterFurnaceWorkRewardReq { + uint32 map_id = 1; +} + +// CmdID: 4660 +message TakeOpenworldChapterFurnaceWorkRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + NO_REWARD = 3; + FORMULA_ERROR = 4; + } + + TakeOpenworldChapterFurnaceWorkRewardRsp.Retcode retcode = 1; + uint32 map_id = 2; + RewardData reward_data = 3; +} + +// CmdID: 4661 +message OpenworldChapterLevelUpTalentReq { + uint32 map_id = 1; + uint32 talent_id = 2; +} + +// CmdID: 4662 +message OpenworldChapterLevelUpTalentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TALENT_ERROR = 2; + TARGET_LEVEL_ERROR = 3; + WORK_SHOP_LEVEL_LACK = 4; + PRE_TALENT_LACK = 5; + MATERIAL_LACK = 6; + MAP_ERROR = 7; + BUILDING_LOCKED = 8; + NOT_MEET_CONDITION = 9; + } + + OpenworldChapterLevelUpTalentRsp.Retcode retcode = 1; +} + +// CmdID: 4663 +message OpenworldChapterActiveTalentReq { + uint32 map_id = 1; + repeated uint32 active_talent_id_list = 2; +} + +// CmdID: 4664 +message OpenworldChapterActiveTalentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + TALENT_ERROR = 3; + BUILDING_LOCKED = 4; + UNIQUE_TAG_REPEATED = 5; + } + + OpenworldChapterActiveTalentRsp.Retcode retcode = 1; +} + +// CmdID: 4665 +message OpenworldChapterDigSiteStartReq { + uint32 map_id = 1; + uint32 main_id = 2; + uint32 program_id = 3; +} + +// CmdID: 4666 +message OpenworldChapterDigSiteStartRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + PROGRAM_ERROR = 3; + IN_PROGRESS = 4; + BUILDING_LOCKED = 5; + DIG_TIMES_LACK = 6; + } + + OpenworldChapterDigSiteStartRsp.Retcode retcode = 1; +} + +// CmdID: 4667 +message OpenworldChapterDigSiteCancelReq { + uint32 map_id = 1; + uint32 main_id = 2; +} + +// CmdID: 4668 +message OpenworldChapterDigSiteCancelRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + NOT_IN_PROGRESS = 3; + BUILDING_ERROR = 4; + PROGRAM_FINISHED = 5; + } + + OpenworldChapterDigSiteCancelRsp.Retcode retcode = 1; +} + +// CmdID: 4669 +message OpenworldChapterDigSiteTakeRewardReq { + uint32 map_id = 1; + uint32 main_id = 2; +} + +// CmdID: 4670 +message OpenworldChapterDigSiteTakeRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + NOT_FINISH = 3; + BUILDING_ERROR = 4; + } + + OpenworldChapterDigSiteTakeRewardRsp.Retcode retcode = 1; + RewardData reward_data = 2; +} + +// CmdID: 4671 +message OpenworldChapterDigSiteAccelerateReq { + uint32 map_id = 1; + uint32 main_id = 2; + uint32 material_id = 3; + uint32 material_num = 4; +} + +// CmdID: 4672 +message OpenworldChapterDigSiteAccelerateRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + BUILDING_ERROR = 3; + NOT_IN_PROGRESS = 4; + PROGRAM_FINISHED = 5; + MATERIAL_ERROR = 6; + MATERIAL_LACK = 7; + } + + OpenworldChapterDigSiteAccelerateRsp.Retcode retcode = 1; +} + +// CmdID: 4673 +message OpenworldChapterMoonChallengeTowerGetDataReq { + uint32 map_id = 1; +} + +message OpenworldChapterMoonChallengeTower { + uint32 tower_id = 1; + uint32 max_score = 2; + uint32 save_point_floor = 3; + uint32 max_finish_floor = 4; +} + +// CmdID: 4674 +message OpenworldChapterMoonChallengeTowerGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + } + + OpenworldChapterMoonChallengeTowerGetDataRsp.Retcode retcode = 1; + uint32 map_id = 2; + uint32 daily_challenge_times = 3; + repeated OpenworldChapterMoonChallengeTower challenge_tower_list = 4; +} + +// CmdID: 4675 +message OpenworldChapterMoonChallengeTowerBattleBeginReq { + uint32 map_id = 1; + uint32 tower_id = 2; +} + +// CmdID: 4676 +message OpenworldChapterMoonChallengeTowerBattleBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + TOWER_ERROR = 3; + DAILY_TIMES_LACK = 4; + NOT_OPEN = 5; + FLOOR_ERROR = 6; + } + + OpenworldChapterMoonChallengeTowerBattleBeginRsp.Retcode retcode = 1; + uint32 map_id = 2; + uint32 tower_id = 3; + uint32 cur_floor = 4; + uint32 cur_score = 5; +} + +// CmdID: 4677 +message OpenworldChapterMoonChallengeTowerBattleEndReq { + uint32 map_id = 1; + uint32 tower_id = 2; + uint32 end_floor = 3; + uint32 score = 4; + MoonChallengeTowerBattleEndStatus battle_end_status = 5; + uint32 cost_time = 6; +} + +// CmdID: 4678 +message OpenworldChapterMoonChallengeTowerBattleEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + TOWER_ERROR = 3; + DAILY_TIMES_LACK = 4; + FLOOR_ERROR = 5; + SCORE_ERROR = 6; + } + + OpenworldChapterMoonChallengeTowerBattleEndRsp.Retcode retcode = 1; + uint32 map_id = 2; + uint32 tower_id = 3; + uint32 end_floor = 4; + uint32 score = 5; + uint32 old_max_score = 6; + uint32 save_point_floor = 7; + Material score_drop_material = 8; + Material save_point_drop_material = 9; + uint32 save_point_drop_terminal_exp = 10; + MoonChallengeTowerBattleEndStatus battle_end_status = 11; +} + +// CmdID: 4679 +message OpenworldChapterMoonChallengeTowerSweepReq { + uint32 map_id = 1; + uint32 tower_id = 2; +} + +// CmdID: 4680 +message OpenworldChapterMoonChallengeTowerSweepRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + TOWER_ERROR = 3; + DAILY_TIMES_LACK = 4; + SWEEP_LOCK = 5; + FLOOR_ERROR = 6; + } + + OpenworldChapterMoonChallengeTowerSweepRsp.Retcode retcode = 1; + uint32 map_id = 2; + uint32 tower_id = 3; + Material score_drop_material = 4; +} + +// CmdID: 4681 +message OpenworldChapterMoonChallengeTowerGetRankReq { + uint32 map_id = 1; + uint32 tower_id = 2; +} + +// CmdID: 4682 +message OpenworldChapterMoonChallengeTowerGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + TOWER_ERROR = 3; + } + + OpenworldChapterMoonChallengeTowerGetRankRsp.Retcode retcode = 1; + uint32 map_id = 2; + uint32 tower_id = 3; + RankShowData rank_data = 4; + uint32 rank_percent = 5; +} + +// CmdID: 4687 +message OpenworldChapterMoonRelicsChangeReq { + uint32 map_id = 1; + uint32 relics_id = 2; +} + +// CmdID: 4688 +message OpenworldChapterMoonRelicsChangeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FRAGMENT_LACK = 2; + MAP_ERROR = 3; + MAP_MISMATCH = 4; + RELICS_EXIST = 5; + } + + OpenworldChapterMoonRelicsChangeRsp.Retcode retcode = 1; + uint32 map_id = 2; + uint32 relics_id = 3; + RewardData reward = 4; +} + +// CmdID: 4683 +message OpenworldChapterQTEMapEndReq { + uint32 map_id = 1; + uint32 qte_map_id = 2; + uint32 normal_drop_num = 3; + bool is_got_last_reward = 4; + QTEMapEndStatus end_status = 5; + string report_ext = 6; +} + +// CmdID: 4684 +message OpenworldChapterQTEMapEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MAP_ERROR = 2; + QTE_MAP_ERROR = 3; + } + + OpenworldChapterQTEMapEndRsp.Retcode retcode = 1; + Material normal_drop_material = 2; + Material last_reward_material = 3; +} + +// CmdID: 4685 +message OpenworldChapterReportDropItemReq { + uint32 map_id = 1; + repeated DropItem drop_item_list = 2; +} + +// CmdID: 4686 +message OpenworldChapterReportDropItemRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + OpenworldChapterReportDropItemRsp.Retcode retcode = 1; +} + +message OpenworldChapterAntiGravityData { + uint32 stage_id = 1; + bool is_unlock = 2; + repeated uint32 finish_coin_index_list = 3; +} + +// CmdID: 4689 +message OpenworldChapterGetAntiGravityDataReq { + uint32 map_id = 1; +} + +// CmdID: 4690 +message OpenworldChapterGetAntiGravityDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + OpenworldChapterGetAntiGravityDataRsp.Retcode retcode = 1; + uint32 map_id = 2; + repeated OpenworldChapterAntiGravityData antigravity_stage_data_list = 3; +} + +enum CmdTypeOpenworld { + CMD_TYPE_OPENWORLD_NONE = 0; + CMD_OPENWORLD_PERIOD_SETTLE_NOTIFY = 4450; + CMD_OPENWORLD_WEEKLY_SETTLE_NOTIFY = 4451; + CMD_ACCEPT_OPENWORLD_STORY_REQ = 4452; + CMD_ACCEPT_OPENWORLD_STORY_RSP = 4453; + CMD_SET_OPENWORLD_STORY_PROGRESS_REQ = 4454; + CMD_SET_OPENWORLD_STORY_PROGRESS_RSP = 4455; + CMD_TAKE_OPENWORLD_STORY_REWARD_REQ = 4456; + CMD_TAKE_OPENWORLD_STORY_REWARD_RSP = 4457; + CMD_TAKE_OPENWORLD_EVENT_REWARD_REQ = 4458; + CMD_TAKE_OPENWORLD_EVENT_REWARD_RSP = 4459; + CMD_GET_OPENWORLD_STAGE_REQ = 4460; + CMD_GET_OPENWORLD_STAGE_RSP = 4461; + CMD_OPENWORLD_STAGE_BEGIN_REQ = 4462; + CMD_OPENWORLD_STAGE_BEGIN_RSP = 4463; + CMD_OPENWORLD_STAGE_END_REQ = 4464; + CMD_OPENWORLD_STAGE_END_RSP = 4465; + CMD_GET_OPENWORLD_STAGE_BOSS_REQ = 4466; + CMD_GET_OPENWORLD_STAGE_BOSS_RSP = 4467; + CMD_OPENWORLD_STAGE_BOSS_BEGIN_REQ = 4468; + CMD_OPENWORLD_STAGE_BOSS_BEGIN_RSP = 4469; + CMD_OPENWORLD_STAGE_BOSS_END_REQ = 4470; + CMD_OPENWORLD_STAGE_BOSS_END_RSP = 4471; + CMD_TAKE_OPENWORLD_STAGE_BOSS_REWARD_REQ = 4472; + CMD_TAKE_OPENWORLD_STAGE_BOSS_REWARD_RSP = 4473; + CMD_OPEN_OPENWORLD_QUEST_REQ = 4474; + CMD_OPEN_OPENWORLD_QUEST_RSP = 4475; + CMD_GET_OPENWORLD_SELECT_QUEST_REQ = 4476; + CMD_GET_OPENWORLD_SELECT_QUEST_RSP = 4477; + CMD_CHOOSE_OPENWORLD_QUEST_REQ = 4478; + CMD_CHOOSE_OPENWORLD_QUEST_RSP = 4479; + CMD_REFRESH_OPENWORLD_QUEST_REQ = 4480; + CMD_REFRESH_OPENWORLD_QUEST_RSP = 4481; + CMD_TAKE_OPENWORLD_QUEST_REWARD_REQ = 4482; + CMD_TAKE_OPENWORLD_QUEST_REWARD_RSP = 4483; + CMD_ABANDON_OPENWORLD_QUEST_REQ = 4484; + CMD_ABANDON_OPENWORLD_QUEST_RSP = 4485; + CMD_REPORT_OPENWORLD_SPAWN_POINT_REQ = 4486; + CMD_REPORT_OPENWORLD_SPAWN_POINT_RSP = 4487; + CMD_FINISH_OPENWORLD_QUEST_REQ = 4488; + CMD_FINISH_OPENWORLD_QUEST_RSP = 4489; + CMD_TAKE_OPENWORLD_CYCLE_FINISH_REWARD_REQ = 4490; + CMD_TAKE_OPENWORLD_CYCLE_FINISH_REWARD_RSP = 4491; + CMD_EAT_OPENWORLD_COOK_REQ = 4492; + CMD_EAT_OPENWORLD_COOK_RSP = 4493; + CMD_TAKE_OPENWORLD_KEY_QUEST_REWARD_REQ = 4494; + CMD_TAKE_OPENWORLD_KEY_QUEST_REWARD_RSP = 4495; + CMD_GET_NEW_OPENWORLD_REQ = 4496; + CMD_GET_NEW_OPENWORLD_RSP = 4497; + CMD_GET_OPENWORLD_MAP_REQ = 4498; + CMD_GET_OPENWORLD_MAP_RSP = 4499; + CMD_GET_OPENWORLD_STORY_REQ = 4500; + CMD_GET_OPENWORLD_STORY_RSP = 4501; + CMD_UNLOCK_OPENWORLD_TECH_SKILL_REQ = 4502; + CMD_UNLOCK_OPENWORLD_TECH_SKILL_RSP = 4503; + CMD_ACTIVATE_OPENWORLD_MAP_REQ = 4504; + CMD_ACTIVATE_OPENWORLD_MAP_RSP = 4505; + CMD_OPENWORLD_SET_MECHA_TEAM_REQ = 4506; + CMD_OPENWORLD_SET_MECHA_TEAM_RSP = 4507; + CMD_OPENWORLD_GET_MECHA_TEAM_REQ = 4508; + CMD_OPENWORLD_GET_MECHA_TEAM_RSP = 4509; + CMD_OPENWORLD_MECHA_DEFENSE_BEGIN_REQ = 4510; + CMD_OPENWORLD_MECHA_DEFENSE_BEGIN_RSP = 4511; + CMD_OPENWORLD_MECHA_DEFENSE_END_REQ = 4512; + CMD_OPENWORLD_MECHA_DEFENSE_END_RSP = 4513; + CMD_GET_OPENWORLD_MECHA_DEFENSE_REQ = 4514; + CMD_GET_OPENWORLD_MECHA_DEFENSE_RSP = 4515; + CMD_MAKE_OPENWORLD_MECHA_REQ = 4516; + CMD_MAKE_OPENWORLD_MECHA_RSP = 4517; + CMD_SET_MECHA_PORT_REQ = 4518; + CMD_SET_MECHA_PORT_RSP = 4519; + CMD_CHOOSE_OPENWORLD_BOSS_REQ = 4520; + CMD_CHOOSE_OPENWORLD_BOSS_RSP = 4521; + CMD_UPDATE_OPENWORLD_BOSS_STATUS_REQ = 4522; + CMD_UPDATE_OPENWORLD_BOSS_STATUS_RSP = 4523; + CMD_UPDATE_OPENWORLD_BOSS_SEARCH_TIME_REQ = 4524; + CMD_UPDATE_OPENWORLD_BOSS_SEARCH_TIME_RSP = 4525; + CMD_TAKE_OPENWORLD_BOSS_REWARD_REQ = 4526; + CMD_TAKE_OPENWORLD_BOSS_REWARD_RSP = 4527; + CMD_TAKE_OPENWORLD_BOSS_HUNT_RATING_REWARD_REQ = 4528; + CMD_TAKE_OPENWORLD_BOSS_HUNT_RATING_REWARD_RSP = 4529; + CMD_SYNC_OPENWORLD_BOSS_HUNT_NOTIFY = 4530; + CMD_TAKE_OPENWORLD_ACTIVITY_LEVEL_REWARD_REQ = 4531; + CMD_TAKE_OPENWORLD_ACTIVITY_LEVEL_REWARD_RSP = 4532; + CMD_GET_OPENWORLD_BOSS_HUNT_RANK_REQ = 4533; + CMD_GET_OPENWORLD_BOSS_HUNT_RANK_RSP = 4534; + CMD_SYNC_OPENWORLD_ACTIVITY_NOTIFY = 4535; + CMD_RESET_OPENWORLD_BOSS_REQ = 4536; + CMD_RESET_OPENWORLD_BOSS_RSP = 4537; + CMD_REPORT_OPENWORLD_AREA_INFO_REQ = 4538; + CMD_REPORT_OPENWORLD_AREA_INFO_RSP = 4539; + CMD_OPENWORLD_FIGHT_BEGIN_NOTIFY = 4540; + CMD_OPENWORLD_FIGHT_END_NOTIFY = 4541; + CMD_REPORT_OPENWORLD_AREA_ENTITY_STATE_REQ = 4542; + CMD_REPORT_OPENWORLD_AREA_ENTITY_STATE_RSP = 4543; + CMD_UPDATE_OPENWORLD_QUEST_PROGRESS_REQ = 4544; + CMD_UPDATE_OPENWORLD_QUEST_PROGRESS_RSP = 4545; + CMD_GET_OPENWORLD_QUEST_ACTIVITY_REQ = 4546; + CMD_GET_OPENWORLD_QUEST_ACTIVITY_RSP = 4547; + CMD_GET_OPENWORLD_AVATAR_ACTIVITY_REQ = 4548; + CMD_GET_OPENWORLD_AVATAR_ACTIVITY_RSP = 4549; + CMD_OPENWORLD_AVATAR_ACTIVITY_ACCEPT_DAILY_QUEST_REQ = 4550; + CMD_OPENWORLD_AVATAR_ACTIVITY_ACCEPT_DAILY_QUEST_RSP = 4551; + CMD_OPENWORLD_AVATAR_ACTIVITY_REFRESH_DAILY_QUEST_REQ = 4552; + CMD_OPENWORLD_AVATAR_ACTIVITY_REFRESH_DAILY_QUEST_RSP = 4553; + CMD_OPENWORLD_AVATAR_ACTIVITY_FINISH_QUEST_REQ = 4554; + CMD_OPENWORLD_AVATAR_ACTIVITY_FINISH_QUEST_RSP = 4555; + CMD_OPENWORLD_AVATAR_ACTIVITY_TAKE_QUEST_REWARD_REQ = 4556; + CMD_OPENWORLD_AVATAR_ACTIVITY_TAKE_QUEST_REWARD_RSP = 4557; + CMD_OPENWORLD_AVATAR_ACTIVITY_CULTIVATE_REQ = 4558; + CMD_OPENWORLD_AVATAR_ACTIVITY_CULTIVATE_RSP = 4559; + CMD_OPENWORLD_AVATAR_ACTIVITY_TALENT_LEVELUP_REQ = 4560; + CMD_OPENWORLD_AVATAR_ACTIVITY_TALENT_LEVELUP_RSP = 4561; + CMD_OPENWORLD_AVATAR_ACTIVITY_GET_FILE_REQ = 4562; + CMD_OPENWORLD_AVATAR_ACTIVITY_GET_FILE_RSP = 4563; + CMD_OPENWORLD_AVATAR_ACTIVITY_SPECIAL_QUEST_NOTIFY = 4564; + CMD_OPENWORLD_CHAPTER_GET_DATA_REQ = 4565; + CMD_OPENWORLD_CHAPTER_GET_DATA_RSP = 4566; + CMD_OPENWORLD_CHAPTER_SLOT_EQUIP_BUFF_REQ = 4567; + CMD_OPENWORLD_CHAPTER_SLOT_EQUIP_BUFF_RSP = 4568; + CMD_OPENWORLD_ACCEPT_NEW_STORY_REQ = 4569; + CMD_OPENWORLD_ACCEPT_NEW_STORY_RSP = 4570; + CMD_OPENWORLD_CHAPTER_TAKE_REWARD_REQ = 4571; + CMD_OPENWORLD_CHAPTER_TAKE_REWARD_RSP = 4572; + CMD_OPENWORLD_CLOSE_STORY_REQ = 4573; + CMD_OPENWORLD_CLOSE_STORY_RSP = 4574; + CMD_OPENWORLD_CHAPTER_GET_SHOP_DATA_REQ = 4575; + CMD_OPENWORLD_CHAPTER_GET_SHOP_DATA_RSP = 4576; + CMD_OPENWORLD_CHAPTER_SHOP_BUY_GOODS_REQ = 4577; + CMD_OPENWORLD_CHAPTER_SHOP_BUY_GOODS_RSP = 4578; + CMD_OPENWORLD_CHAPTER_ENDLESS_TOWER_GET_RANK_REQ = 4579; + CMD_OPENWORLD_CHAPTER_ENDLESS_TOWER_GET_RANK_RSP = 4580; + CMD_OPENWORLD_CHAPTER_ENDLESS_TOWER_TAKE_REWARD_REQ = 4581; + CMD_OPENWORLD_CHAPTER_ENDLESS_TOWER_TAKE_REWARD_RSP = 4582; + CMD_OPENWORLD_CHAPTER_LEVEL_UP_HERO_REQ = 4583; + CMD_OPENWORLD_CHAPTER_LEVEL_UP_HERO_RSP = 4584; + CMD_OPENWORLD_CHAPTER_EQUIP_CARD_GROUP_REQ = 4585; + CMD_OPENWORLD_CHAPTER_EQUIP_CARD_GROUP_RSP = 4586; + CMD_OPENWORLD_CHAPTER_MODIFY_CARD_GROUP_NAME_REQ = 4587; + CMD_OPENWORLD_CHAPTER_MODIFY_CARD_GROUP_NAME_RSP = 4588; + CMD_OPENWORLD_CHAPTER_ACTIVE_CARD_GROUP_REQ = 4589; + CMD_OPENWORLD_CHAPTER_ACTIVE_CARD_GROUP_RSP = 4590; + CMD_OPENWORLD_CHAPTER_DELETE_CARD_GROUP_REQ = 4591; + CMD_OPENWORLD_CHAPTER_DELETE_CARD_GROUP_RSP = 4592; + CMD_OPENWORLD_CHAPTER_GET_CHALLENGE_DATA_REQ = 4593; + CMD_OPENWORLD_CHAPTER_GET_CHALLENGE_DATA_RSP = 4594; + CMD_OPENWORLD_CHAPTER_FINISH_CHALLENGE_REQ = 4595; + CMD_OPENWORLD_CHAPTER_FINISH_CHALLENGE_RSP = 4596; + CMD_OPENWORLD_CHAPTER_HERO_CARD_LEVEL_UP_NOTIFY = 4597; + CMD_OPENWORLD_CHAPTER_OPEN_HERO_TREASURE_REQ = 4598; + CMD_OPENWORLD_CHAPTER_OPEN_HERO_TREASURE_RSP = 4599; + CMD_OPENWORLD_HUNT_ACTIVITY_GET_DATA_REQ = 4600; + CMD_OPENWORLD_HUNT_ACTIVITY_GET_DATA_RSP = 4601; + CMD_OPENWORLD_HUNT_ACTIVITY_GET_MAP_DATA_REQ = 4602; + CMD_OPENWORLD_HUNT_ACTIVITY_GET_MAP_DATA_RSP = 4603; + CMD_OPENWORLD_HUNT_ACTIVITY_COMMON_STATE_CHANGE_REQ = 4604; + CMD_OPENWORLD_HUNT_ACTIVITY_COMMON_STATE_CHANGE_RSP = 4605; + CMD_OPENWORLD_HUNT_ACTIVITY_TALENT_UPGRADE_REQ = 4606; + CMD_OPENWORLD_HUNT_ACTIVITY_TALENT_UPGRADE_RSP = 4607; + CMD_OPENWORLD_HUNT_ACTIVITY_FINISH_QUEST_REQ = 4608; + CMD_OPENWORLD_HUNT_ACTIVITY_FINISH_QUEST_RSP = 4609; + CMD_OPENWORLD_HUNT_ACTIVITY_TAKE_STRONGHOLD_REWARD_NOTIFY = 4610; + CMD_OPENWORLD_HUNT_ACTIVITY_CHANGE_HUNTER_AREA_REQ = 4611; + CMD_OPENWORLD_HUNT_ACTIVITY_CHANGE_HUNTER_AREA_RSP = 4612; + CMD_OPENWORLD_HUNT_ACTIVITY_REPORT_HUNTING_SCORE_REQ = 4613; + CMD_OPENWORLD_HUNT_ACTIVITY_REPORT_HUNTING_SCORE_RSP = 4614; + CMD_OPENWORLD_CHAPTER_CHALLENGE_BEGIN_REQ = 4630; + CMD_OPENWORLD_CHAPTER_CHALLENGE_BEGIN_RSP = 4631; + CMD_OPENWORLD_CHAPTER_ENDLESS_CHALLENGE_BEGIN_REQ = 4632; + CMD_OPENWORLD_CHAPTER_ENDLESS_CHALLENGE_BEGIN_RSP = 4633; + CMD_OPENWORLD_CHAPTER_ENDLESS_CHALLENGE_END_REQ = 4634; + CMD_OPENWORLD_CHAPTER_ENDLESS_CHALLENGE_END_RSP = 4635; + CMD_OPENWORLD_CHAPTER_LEVEL_UP_BUILDING_REQ = 4636; + CMD_OPENWORLD_CHAPTER_LEVEL_UP_BUILDING_RSP = 4637; + CMD_OPENWORLD_CHAPTER_LEVEL_UP_BUILDING_FINISH_NOTIFY = 4638; + CMD_OPENWORLD_CHAPTER_ACCELERATE_LEVEL_UP_BUILDING_REQ = 4639; + CMD_OPENWORLD_CHAPTER_ACCELERATE_LEVEL_UP_BUILDING_RSP = 4640; + CMD_OPENWORLD_CHATPER_TERMINAL_PERIOD_UPGRADE_REQ = 4641; + CMD_OPENWORLD_CHATPER_TERMINAL_PERIOD_UPGRADE_RSP = 4642; + CMD_OPENWORLD_CHAPTER_GET_SELECT_QUEST_REQ = 4643; + CMD_OPENWORLD_CHAPTER_GET_SELECT_QUEST_RSP = 4644; + CMD_OPENWORLD_CHAPTER_REFRESH_QUEST_REQ = 4645; + CMD_OPENWORLD_CHAPTER_REFRESH_QUEST_RSP = 4646; + CMD_OPENWORLD_CHAPTER_ACCEPT_QUEST_REQ = 4647; + CMD_OPENWORLD_CHAPTER_ACCEPT_QUEST_RSP = 4648; + CMD_OPENWORLD_CHAPTER_FINISH_QUEST_REQ = 4649; + CMD_OPENWORLD_CHAPTER_FINISH_QUEST_RSP = 4650; + CMD_OPENWORLD_CHAPTER_TAKE_QUEST_REWARD_REQ = 4651; + CMD_OPENWORLD_CHAPTER_TAKE_QUEST_REWARD_RSP = 4652; + CMD_OPENWORLD_CHAPTER_FURNACE_START_WORK_REQ = 4653; + CMD_OPENWORLD_CHAPTER_FURNACE_START_WORK_RSP = 4654; + CMD_OPENWORLD_CHAPTER_FURNACE_CANCEL_WORK_REQ = 4655; + CMD_OPENWORLD_CHAPTER_FURNACE_CANCEL_WORK_RSP = 4656; + CMD_OPENWORLD_CHAPTER_FURNACE_ACCELERATE_WORK_REQ = 4657; + CMD_OPENWORLD_CHAPTER_FURNACE_ACCLELRATE_WORK_RSP = 4658; + CMD_TAKE_OPENWORLD_CHAPTER_FURNACE_WORK_REWARD_REQ = 4659; + CMD_TAKE_OPENWORLD_CHAPTER_FURNACE_WORK_REWARD_RSP = 4660; + CMD_OPENWORLD_CHAPTER_LEVEL_UP_TALENT_REQ = 4661; + CMD_OPENWORLD_CHAPTER_LEVEL_UP_TALENT_RSP = 4662; + CMD_OPENWORLD_CHAPTER_ACTIVE_TALENT_REQ = 4663; + CMD_OPENWORLD_CHAPTER_ACTIVE_TALENT_RSP = 4664; + CMD_OPENWORLD_CHAPTER_DIGSITE_START_REQ = 4665; + CMD_OPENWORLD_CHAPTER_DIGSITE_START_RSP = 4666; + CMD_OPENWORLD_CHAPTER_DIGSITE_CANCEL_REQ = 4667; + CMD_OPENWORLD_CHAPTER_DIGSITE_CANCEL_RSP = 4668; + CMD_OPENWORLD_CHAPTER_DIGSITE_TAKE_REWARD_REQ = 4669; + CMD_OPENWORLD_CHAPTER_DIGSITE_TAKE_REWARD_RSP = 4670; + CMD_OPENWORLD_CHAPTER_DIGSITE_ACCELERATE_REQ = 4671; + CMD_OPENWORLD_CHAPTER_DIGSITE_ACCELERATE_RSP = 4672; + CMD_OPENWORLD_CHAPTER_MOON_CHALLENGE_TOWER_GET_DATA_REQ = 4673; + CMD_OPENWORLD_CHAPTER_MOON_CHALLENGE_TOWER_GET_DATA_RSP = 4674; + CMD_OPENWORLD_CHAPTER_MOON_CHALLENGE_TOWER_BATTLE_BEGIN_REQ = 4675; + CMD_OPENWORLD_CHAPTER_MOON_CHALLENGE_TOWER_BATTLE_BEGIN_RSP = 4676; + CMD_OPENWORLD_CHAPTER_MOON_CHALLENGE_TOWER_BATTLE_END_REQ = 4677; + CMD_OPENWORLD_CHAPTER_MOON_CHALLENGE_TOWER_BATTLE_END_RSP = 4678; + CMD_OPENWORLD_CHAPTER_MOON_CHALLENGE_TOWER_SWEEP_REQ = 4679; + CMD_OPENWORLD_CHAPTER_MOON_CHALLENGE_TOWER_SWEEP_RSP = 4680; + CMD_OPENWORLD_CHAPTER_MOON_CHALLENGE_TOWER_GET_RANK_REQ = 4681; + CMD_OPENWORLD_CHAPTER_MOON_CHALLENGE_TOWER_GET_RANK_RSP = 4682; + CMD_OPENWORLD_CHAPTER_QTE_MAP_END_REQ = 4683; + CMD_OPENWORLD_CHAPTER_QTE_MAP_END_RSP = 4684; + CMD_OPENWORLD_CHAPTER_REPORT_DROP_ITEM_REQ = 4685; + CMD_OPENWORLD_CHAPTER_REPORT_DROP_ITEM_RSP = 4686; + CMD_OPENWORLD_CHAPTER_MOON_RELICS_CHANGE_REQ = 4687; + CMD_OPENWORLD_CHAPTER_MOON_RELICS_CHANGE_RSP = 4688; + CMD_OPENWORLD_CHAPTER_GET_ANTIGRAVITY_DATA_REQ = 4689; + CMD_OPENWORLD_CHAPTER_GET_ANTIGRAVITY_DATA_RSP = 4690; + CMD_OPENWORLD_DUMMY = 4699; +} + +enum EventJudgeType { + EVENT_JUDGE_TYPE_NONT = 0; + EVENT_JUDGE_TYPE_COLLECT = 1; + EVENT_JUDGE_TYPE_MONSTER = 2; + EVENT_JUDGE_TYPE_EMERGENCY = 3; +} + +enum CookEffectType { + COOK_EFFECT_TYPE_NONE = 0; + COOK_ADD_BUFFER = 1; + COOK_REVIVE = 2; + COOK_RECOVER_ONE_HP = 3; + COOK_RECOVER_ALL_HP = 4; + COOK_RECOVER_ONE_SP = 5; + COOK_RECOVER_ALL_SP = 6; +} + +enum OpenworldStatId { + OPENWORLD_STAT_ID_NONE = 0; + OPENWORLD_STAT_QUEST = 1; + OPENWORLD_STAT_EVENT_MONSTER = 2; + OPENWORLD_STAT_EVENT_EMERGENCY = 3; + OPENWORLD_STAT_EVENT_COLLECT = 4; + OPENWORLD_STAT_MECHA = 5; +} + +enum OpenworldFunction { + OPENWORLD_FUNCTION_NONE = 0; + OPENWORLD_FUNCTION_QUEST = 1; + OPENWORLD_FUNCTION_COOK = 2; + OPENWORLD_FUNCTION_MECHA = 3; + OPENWORLD_FUNCTION_MECHA_DEFENSE = 4; + OPENWORLD_FUNCTION_SHOP = 5; + OPENWORLD_FUNCTION_WEEK_SETTLE = 6; + OPENWORLD_FUNCTION_TREASURE = 7; + OPENWORLD_FUNCTION_TECH = 8; + OPENWORLD_FUNCTION_WEATHER = 9; + OPENWORLD_FUNCTION_BOSS_HUNT = 10; + OPENWORLD_FUNCTION_STORY = 11; + OPENWORLD_FUNCTION_KEY_QUEST = 12; +} + +enum OpenworldFunctionUnlockType { + OPENWORLD_FUNCTION_UNLOCK_AUTO = 0; + OPENWORLD_FUNCTION_UNLOCK_QUEST_LEVEL = 1; + OPENWORLD_FUNCTION_UNLOCK_STORY = 2; + OPENWORLD_FUNCTION_UNLOCK_TECH_LEVEL = 3; +} + +enum OpenworldStageCondition { + OPENWORLD_STAGE_CONDITION_NONE = 0; + OPENWORLD_STAGE_COND_LD_SP = 1; +} + +enum OpenworldDataType { + OPENWORLD_DATA_ALL = 0; + OPENWORLD_DATA_COOK = 1; + OPENWORLD_DATA_TECH = 2; + OPENWORLD_DATA_MECHA = 3; +} + +enum OpenworldMapStatus { + OPENWORLD_MAP_STATUS_NONE = 0; + OPENWORLD_MAP_STATUS_ACTIVATE = 1; + OPENWORLD_MAP_STATUS_AUTO_ACTIVATE = 2; + OPENWORLD_MAP_STATUS_LOCK = 3; +} + +enum OpenworldEventSubType { + OPENWORLD_EVENT_SUB_TYPE_NONE = 0; + OPENWORLD_EVENT_SUB_TREASURE = 50; +} + +enum OpenworldEventRefreshType { + OPENWORLD_EVENT_REFRESH_TYPE_NONE = 0; + OPENWORLD_EVENT_REFRESH_CYCLE = 1; + OPENWORLD_EVENT_REFRESH_ONCE = 2; + OPENWORLD_EVENT_REFRESH_TIME = 3; +} + +enum OpenworldQuestSettleType { + OPENWORLD_QUEST_SETTLE_DEFAULT = 0; + OPENWORLD_QUEST_SETTLE_CHALLENGE = 1; +} + +enum OpenworldMapType { + OPENWORLD_MAP_TYPE_NONE = 0; + OPENWORLD_NORMAL_MAP = 1; + OPENWORLD_ACTIVITY_MAP = 2; + OPENWORLD_ENDLESS_MAP = 3; + OPENWORLD_DLC_MAP = 4; + OPENWORLD_ENDLESS_SINGLE_MAP = 5; + OPENWORLD_AVATAR_ACTIVITY_MAP = 6; + OPENWORLD_CHAPTER_MAP = 7; + OPENWORLD_SC_DLC_MAP = 8; + OPENWORLD_HUNT_ACTIVITY_MAP = 9; + OPENWORLD_AI_CYBER_ACTIVITY_MAP = 10; +} + +enum OpenworldActivityType { + OPENWORLD_ACTIVITY_TYPE_NONE = 0; + OPENWORLD_BOSS_HUNT_ACTIVITY = 1; +} + +enum OpenworldFightEndStatus { + OPENWORLD_FIGHT_STATUS_NONE = 0; + OPENWORLD_FIGHT_STATUS_WIN = 1; + OPENWORLD_FIGHT_STATUS_EXCAPE = 2; + OPENWORLD_FIGHT_STATUS_ALL_DEAD = 3; +} + +enum OpenworldSpecialMapID { + OPENWORLD_SPECIAL_MAP_ID_NONE = 0; + OPENWORLD_SAKURA_MAP_ID = 1; + OPENWORLD_TM_MAP_ID = 2; + OPENWORLD_DLC_MAP_ID = 401; + OPENWORLD_SC_DLC_MAP_ID = 601; + OPENWORLD_CHAPTER_29_OW = 801; + OPENWORLD_CHAPTER_31_OW = 1001; +} + +enum OpenworldQuestFinishWay { + OPENWORLD_QUEST_FINISH_WAY_NONE = 0; + OPENWORLD_QUEST_FINISH_WAY_DLC_COIN = 1; + OPENWORLD_QUEST_FINISH_WAY_FINISH_EVENT = 2; + OPENWORLD_QUEST_FINISH_WAY_ASSASSIN_KILL = 3; + OPENWORLD_QUEST_FINISH_WAY_QTE_KILL = 4; + OPENWORLD_QUEST_FINISH_WAY_KILL_MONSTER_TYPE = 5; + OPENWORLD_QUEST_FINISH_WAY_AIR_KILL = 6; + OPENWORLD_QUEST_FINISH_WAY_KILL_NATURE_MONSTER = 7; + OPENWORLD_QUEST_FINISH_WAY_AIRSTRIKE_KILL = 8; + OPENWORLD_QUEST_FINISH_WAY_THROWBLOW = 9; + OPENWORLD_QUEST_FINISH_WAT_CHAPTER_OW_FINAL_COIN = 10; + OPENWORLD_QUEST_FINISH_WAT_CHAPTER_OW_FINAL_ROBOT_ULTRA_KILL = 11; + OPENWORLD_QUEST_FINISH_WAT_CHAPTER_OW_FINAL_ROBOT_USE_CATCH = 12; +} + +enum OpenworldMechaTeamPosType { + OPENWORLD_MECHA_TEAM_POS_TYPE_NONE = 0; + MECHA_TEAM_POS_1 = 1; + MECHA_TEAM_POS_2 = 2; + MECHA_TEAM_POS_3 = 3; + MECHA_TEAM_POS_4 = 4; + MECHA_TEAM_POS_5 = 5; +} + +enum OpenworldQuestCreateWay { + OPENWORLD_QUEST_CREATE_WAY_NONE = 0; + OPENWORLD_QUEST_CREATE_WAY_RARITY = 1; + OPENWORLD_QUEST_CREATE_WAY_MAP_LEVEL = 2; +} + +enum OpenworldAvatarActivityConditionType { + OPENWORLD_AVATAR_ACTIVITY_CONDITION_NONE = 0; + OPENWORLD_AVATAR_ACTIVITY_CONDITION_LEVEL = 1; + OPENWORLD_AVATAR_ACTIVITY_CONDITION_TALENT = 2; + OPENWORLD_AVATAR_ACTIVITY_CONDITION_STORY = 3; + OPENWORLD_AVATAR_ACTIVITY_CONDITION_EVENT = 4; + OPENWORLD_AVATAR_ACTIVITY_CONDITION_QUEST = 5; + OPENWORLD_AVATAR_ACTIVITY_CONDITION_CULTIVATE = 6; +} + +enum OpenworldAvatarActivityCultivateType { + OPENWORLD_AVATAR_ACTIVITY_CULTIVATE_TYPE_NONE = 0; + OPENWORLD_AVATAR_ACTIVITY_CULTIVATE_AVATAR = 1; + OPENWORLD_AVATAR_ACTIVITY_CULTIVATE_STIGMATA = 2; + OPENWORLD_AVATAR_ACTIVITY_CULTIVATE_WEAPON = 3; +} + +enum OpenworldChapterUnlockConditionType { + OPENWORLD_CHAPTER_UNLOCK_NONE = 0; + OPENWORLD_CHAPTER_UNLOCK_PRE_EVENT = 1; + OPENWORLD_CHAPTER_UNLOCK_DATETIME = 2; + OPENWORLD_CHAPTER_UNLOCK_STAGE = 3; + OPENWORLD_CHAPTER_UNLOCK_MISSION = 4; + OPENWORLD_CHAPTER_UNLOCK_PRE_STORY = 5; + OPENWORLD_CHAPTER_UNLOCK_PRE_TOWER = 6; +} + +enum OpenworldUnlockConditionType { + OPENWORLD_UNLOCK_CONDITION_TYPE_NONE = 0; + OPENWORLD_UNLOCK_PRE_EVENT_LIST = 1; + OPENWORLD_UNLOCK_DATETIME = 2; + OPENWORLD_UNLOCK_STAGE_LIST = 3; + OPENWORLD_UNLOCK_MISSION_LIST = 4; + OPENWORLD_UNLOCK_PRE_STORY_LIST = 5; +} + +enum OpenworldChapterStoryType { + OPENWORLD_CHAPTER_STORY_TYPE_NONE = 0; + OPENWORLD_CHAPTER_STAGE = 1; + OPENWORLD_CHAPTER_STORY = 2; +} + +enum OpenworldQuestRewardType { + OPENWORLD_QUEST_REWARD_TYPE_NONE = 0; + OW_QUEST_REWARD_A_AVATAR_FRAGMENT = 1; + OW_QUEST_REWARD_SP_AVATAR_FRAGMENT = 2; + OW_QUEST_REWARD_PURPLEJADE = 3; + OW_QUEST_REWARD_NORMAL = 4; + OW_QUEST_REWARD_ARTIFACT = 5; +} + +enum OpenworldChapterTowerType { + OPENWORLD_CHAPTER_TOWER_TYPE_NONE = 0; + OPENWORLD_CHAPTER_TOWER_COMMON = 1; + OPENWORLD_CHAPTER_TOWER_ENDLESS = 2; +} + +enum OpenworldChapterTowerSiteType { + OPENWORLD_CHAPTER_TOWER_SITE_TYPE_NONE = 0; + OPENWORLD_CHAPTER_TOWER_SITE_STAGE = 1; + OPENWORLD_CHAPTER_TOWER_SITE_PLOT = 2; +} + +enum OpenworldChapterHeroType { + OPENWORLD_CHAPTER_HERO_TYPE_NONE = 0; + OPENWORLD_CHAPTER_CARD_HERO = 1; + OPENWORLD_CHAPTER_NORMAL_HERO = 2; +} + +enum HuntActivityEntityType { + HUNT_ACTIVITY_TYPE_NONE = 0; + HUNT_ACTIVITY_TYPE_HUNTER = 1; + HUNT_ACTIVITY_TYPE_STRONGHOLD = 2; + HUNT_ACTIVITY_TYPE_MACHINE = 3; +} + +enum HuntActivityHunterState { + HUNTER_STATE_NONE = 0; + HUNTER_STATE_PARTOL = 1; + HUNTER_STATE_CHASE = 2; + HUNTER_STATE_BATTLE = 3; + HUNTER_STATE_DEAD = 4; +} + +enum OpenworldChapterBuildingType { + OPENWORLD_CHAPTER_BUILDING_TYPE_NONE = 0; + OPENWORLD_CHAPTER_BUILDING_FURNACE = 1; + OPENWORLD_CHAPTER_BUILDING_QUEST = 2; + OPENWORLD_CHAPTER_BUILDING_WORKSHOP = 3; + OPENWORLD_CHAPTER_BUILDING_BAG = 4; + OPENWORLD_CHAPTER_BUILDING_DIGSITE = 5; + OPENWORLD_CHAPTER_BUILDING_TRANSPORT = 6; +} + +enum OpenworldChapterQuestType { + OPENWORLD_CHAPTER_QUEST_TYPE_NONE = 0; + OPENWORLD_CHAPTER_NORMAL_QUEST = 1; + OPENWORLD_CHAPTER_SPECIAL_QUEST = 2; +} + +enum OpenworldChapterFurnaceWorkStatus { + OPENWORLD_CHAPTER_FURNACE_WORK_INVALID = 0; + OPENWORLD_CHAPTER_FURNACE_WORK_NOT_BEGIN = 1; + OPENWORLD_CHAPTER_FURNACE_WORK_DOING = 2; + OPENWORLD_CHAPTER_FURNACE_WORK_FINISHED = 3; +} + +enum OpenworldChapterTalentType { + OPENWORLD_CHAPTER_TALENT_TYPE_NONE = 0; + OPENWORLD_CHAPTER_NORMAL_TALENT = 1; + OPENWORLD_CHAPTER_ACTIVE_TALENT = 2; + OPENWORLD_CHAPTER_DIG_TALENT = 3; +} + +enum MoonChallengeTowerBattleEndStatus { + MOON_CHALLENGE_TOWER_BATTLE_END_INVALID = 0; + MOON_CHALLENGE_TOWER_BATTLE_END_SUCC = 1; + MOON_CHALLENGE_TOWER_BATTLE_END_FAIL = 2; +} + +enum OpenworldChapterQTEMapType { + OPENWORLD_CHAPTER_QTE_MAP_TYPE_NONE = 0; + OPENWORLD_CHAPTER_QTE_NORMAL_MAP = 1; + OPENWORLD_CHAPTER_QTE_SPECIAL_MAP = 2; +} + +enum QTEMapEndStatus { + QTE_MAP_END_STATUS_SUCC = 0; + QTE_MAP_END_STATUS_EXIT = 1; + QTE_MAP_END_STATUS_EXHAUSTED = 2; +} + +message PjmsWorld { + uint32 world_id = 1; + repeated PjmsEntity entity_list = 2; + uint32 world_time = 3; + repeated uint32 kill_monster_guid_list = 5; + repeated PjmsGroup active_group_list = 6; +} + +message PjmsTeleport { + enum Status { + PJMS_TELEPORT_STATUS_LOCK = 0; + PJMS_TELEPORT_STATUS_INACTIVE = 1; + PJMS_TELEPORT_STATUS_ACTIVE = 2; + } + + uint32 teleport_id = 1; + PjmsTeleport.Status status = 2; +} + +message PjmsMap { + repeated uint32 unlock_fog_id_list = 1; + repeated PjmsTeleport teleport_list = 2; +} + +message PjmsGadget { + uint32 state = 1; +} + +message PjmsNpc { + uint32 state = 1; +} + +message PjmsEntity { + uint32 guid = 1; + uint32 type = 2; + PjmsGadget gadget = 3; + PjmsNpc npc = 4; +} + +message PjmsGroup { + uint32 group_id = 1; + uint32 state = 2; + uint32 create_time = 3; +} + +message PjmsEventChapterLevelUpParam { + uint32 chapter_id = 1; + uint32 cur_chapter_level = 2; +} + +message PjmsEventFinishStoryParam { + uint32 story_id = 1; +} + +message PjmsEventAddMaterialParam { + uint32 material_id = 1; + int32 add_num = 2; +} + +message PjmsEventEnterWorldParam { + uint32 world_id = 1; +} + +message PjmsEventLevelUpParam { + uint32 level = 1; +} + +message PjmsEventKillMonsterParam { + uint32 monster_guid = 1; + uint32 world_id = 2; + uint32 group_id = 3; +} + +message PjmsEventGadgetStateChangeParam { + uint32 gadget_guid = 1; + uint32 cur_state = 2; + uint32 world_id = 3; + uint32 group_id = 4; +} + +message PjmsEventGroupStateChangeParam { + uint32 group_id = 1; + uint32 cur_state = 2; +} + +message PjmsEventSetWorldTimeParam { + uint32 world_time = 1; +} + +message PjmsEventFinishStageIdParam { + uint32 stage_id = 1; +} + +message PjmsEventFinishMissionParam { + uint32 mission_id = 1; +} + +message PjmsEventGroupActiveChangeParam { + uint32 group_id = 1; + bool is_active = 2; +} + +message PjmsEventShopBuyGoodsParam { + uint32 shop_id = 1; + uint32 goods_id = 2; + uint32 goods_num = 3; +} + +message PjmsEventLeaveWorldParam { + uint32 world_id = 1; +} + +message PjmsEvent { + PjmsEventType type = 1; + PjmsEventFinishStoryParam finish_story_param = 21; + PjmsEventAddMaterialParam add_material_param = 23; + PjmsEventEnterWorldParam enter_world_param = 24; + PjmsEventLevelUpParam level_up_param = 25; + PjmsEventKillMonsterParam kill_monster_param = 26; + PjmsEventGadgetStateChangeParam gadget_state_change_param = 27; + PjmsEventGroupStateChangeParam group_state_change_param = 28; + PjmsEventSetWorldTimeParam set_world_time_param = 29; + PjmsEventFinishStageIdParam finish_stage_id_param = 30; + PjmsEventChapterLevelUpParam chapter_level_up_param = 31; + PjmsEventFinishMissionParam finish_mission_param = 32; + PjmsEventGroupActiveChangeParam group_active_change_param = 33; + PjmsEventShopBuyGoodsParam shop_buy_goods_param = 34; + PjmsEventLeaveWorldParam leave_world_param = 35; +} + +message PjmsStory { + uint32 story_id = 1; + uint32 status = 2; + uint32 progress = 3; +} + +// CmdID: 7700 +message PjmsEnterWorldReq { + uint32 world_id = 1; + uint32 teleport_id = 2; +} + +// CmdID: 7701 +message PjmsEnterWorldRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHAPTER_ERROR = 2; + TELEPORT_NOT_FOUND = 3; + TELEPORT_NOT_ACTIVE = 4; + TELEPORT_WORLD_ERROR = 5; + WORLD_ERROR = 6; + DIRECTED_ENTER_DENIED = 7; + } + + PjmsEnterWorldRsp.Retcode retcode = 1; + PjmsWorld world = 2; + uint32 teleport_id = 3; + PjmsFormation formation = 4; + string world_transaction_str = 5; +} + +// CmdID: 7702 +message PjmsGetCurWorldReq { +} + +// CmdID: 7703 +message PjmsGetCurWorldRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + PjmsGetCurWorldRsp.Retcode retcode = 1; + PjmsWorld world = 2; +} + +message PjmsChapterSection { + uint32 chapter_section_id = 1; + uint32 cur_track_series_id = 2; +} + +message PjmsChapter { + uint32 chapter_id = 1; + uint32 level = 2; + uint32 exp = 3; + uint32 cur_track_series_id = 4; + uint32 talent_level = 5; + PjmsFormation formation = 6; + PjmsUnitInfo unit_info = 7; + uint32 last_take_chapter_reward_material_num = 8; + uint32 last_take_chapter_reward_level = 9; + repeated uint32 finish_daily_quest_series_id_list = 10; + ChapterShadowLake chapter_shadowlake = 11; + uint32 playing_bgm_id = 12; + repeated PjmsChapterSection section_list = 13; + uint32 cur_section_id = 14; +} + +message PjmsUnitInfo { + repeated PjmsCoreUnit core_unit_list = 1; + repeated PjmsAuxiliaryUnit auxiliary_unit_list = 2; + uint32 cur_unit_set_id = 3; + repeated PjmsUnitSet unit_set_list = 4; +} + +// CmdID: 7706 +message PjmsGetMainDataReq { +} + +// CmdID: 7707 +message PjmsGetMainDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_CHAPTER = 2; + } + + PjmsGetMainDataRsp.Retcode retcode = 1; + PjmsWorld world = 2; + PjmsMap map = 3; + uint32 gender_type = 4; + uint32 world_time = 5; + string name = 7; + uint32 name_cd_end_time = 8; + uint32 gender_cd_end_time = 9; + string world_transaction_str = 10; + string first_set_name = 11; +} + +// CmdID: 7708 +message PjmsGetStoryDataReq { +} + +message PjmsStorySeriesData { + uint32 story_series_id = 1; + repeated PjmsStory story_list = 2; +} + +// CmdID: 7709 +message PjmsGetStoryDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + PjmsGetStoryDataRsp.Retcode retcode = 1; + repeated uint32 finished_story_series_id_list = 3; + repeated PjmsStory story_list = 4; + repeated uint32 accepted_series_id_list = 5; +} + +message PjmsStoryFinishData { + uint32 story_id = 1; + RewardData reward_data = 2; +} + +message PjmsStorySeriesFinishData { + uint32 story_series_id = 1; + RewardData reward_data = 2; +} + +message PjmsStoryProgressData { + uint32 story_id = 1; + uint32 progress = 2; +} + +// CmdID: 7714 +message PjmsUpdateStoryProgressNotify { + repeated PjmsStoryProgressData story_progress_data_list = 1; +} + +// CmdID: 7719 +message PjmsSyncMapInfoNotify { + PjmsMap map = 1; +} + +// CmdID: 7720 +message PjmsUpdateEntityNotify { + repeated uint32 inactive_entity_guid_list = 1; + repeated PjmsEntity update_active_entity_list = 2; + repeated uint32 inactive_group_id_list = 3; + repeated uint32 refresh_group_id_list = 4; + repeated PjmsGroup active_group_list = 5; + repeated uint32 revive_monster_guid_list = 6; +} + +// CmdID: 7725 +message PjmsUpdateStoryProgressReq { + uint32 finish_param_uint = 1; + string finish_param_str = 2; +} + +// CmdID: 7726 +message PjmsUpdateStoryProgressRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + PjmsUpdateStoryProgressRsp.Retcode retcode = 1; + uint32 finish_param_uint = 2; + string finish_param_str = 3; +} + +// CmdID: 7727 +message PjmsKillMonsterReq { + uint32 guid = 1; +} + +// CmdID: 7728 +message PjmsKillMonsterRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_WORLD = 2; + MONSTER_NOT_FOUND = 3; + MONSTER_KILLED = 4; + } + + PjmsKillMonsterRsp.Retcode retcode = 1; + uint32 guid = 2; +} + +// CmdID: 7729 +message PjmsChangeGadgetStateReq { + uint32 guid = 1; + uint32 current_state = 2; + uint32 target_state = 3; +} + +// CmdID: 7730 +message PjmsChangeGadgetStateRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_WORLD = 2; + STATE_NOT_MATCH = 3; + STATE_CANNOT_CHANGE = 4; + GADGET_NOT_EXIST = 5; + } + + PjmsChangeGadgetStateRsp.Retcode retcode = 1; + uint32 guid = 2; + uint32 current_state = 3; + uint32 target_state = 4; +} + +// CmdID: 7731 +message PjmsActiveGroupReq { + uint32 group_id = 1; + bool is_active = 2; + uint32 graph_id = 3; +} + +// CmdID: 7732 +message PjmsActiveGroupRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_WORLD = 2; + GROUP_NOT_EXIST = 3; + GROUP_NOT_VALID = 4; + CONDITION_NOT_SATISFY = 5; + } + + PjmsActiveGroupRsp.Retcode retcode = 1; + uint32 group_id = 2; + bool is_current_active = 3; + uint32 graph_id = 4; +} + +// CmdID: 7733 +message PjmsActiveEntityReq { + repeated uint32 entity_guid_list = 1; + bool is_active = 2; + uint32 graph_id = 3; +} + +// CmdID: 7734 +message PjmsActiveEntityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_WORLD = 2; + } + + PjmsActiveEntityRsp.Retcode retcode = 1; + repeated uint32 entity_guid_list = 2; + bool is_active = 3; + repeated uint32 fail_entity_guid_list = 4; + uint32 graph_id = 5; +} + +// CmdID: 7735 +message PjmsSetWorldTimeReq { + uint32 target_time = 1; +} + +// CmdID: 7736 +message PjmsSetWorldTimeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_WORLD = 2; + TIME_FORMAT_ERROR = 3; + } + + PjmsSetWorldTimeRsp.Retcode retcode = 1; + uint32 cur_time = 2; +} + +message DropFrom { + uint32 from_type = 1; + uint32 param_int = 2; +} + +// CmdID: 7737 +message PjmsCommonDropNotify { + repeated DropItem drop_item_list = 1; + DropFrom drop_from = 2; + uint32 hcoin = 3; +} + +// CmdID: 7738 +message PjmsChangeChapterReq { + uint32 select_chapter_id = 1; + uint32 section_id = 2; +} + +// CmdID: 7739 +message PjmsChangeChapterRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + INVALID_CHAPTER = 2; + NOT_IN_CHAPTER = 3; + CONDITION_NOT_MATCH = 4; + PJMS_CLOSE = 5; + } + + PjmsChangeChapterRsp.Retcode retcode = 1; + PjmsChapter cur_chapter = 2; + PjmsWorld cur_world = 3; + string world_transaction_str = 4; +} + +// CmdID: 7740 +message PjmsSetCurAvatarReq { + uint32 chapter_id = 1; + uint32 cur_avatar_id = 2; + bool is_elf_mode = 3; +} + +// CmdID: 7741 +message PjmsSetCurAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHAPTER_ERROR = 2; + AVATAR_ERROR = 3; + TARGET_DEAD = 4; + WORLD_TYPE_ERROR = 5; + } + + PjmsSetCurAvatarRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + uint32 cur_avatar_id = 3; + bool is_elf_mode = 4; +} + +message PjmsAvatarStatus { + uint32 avatar_id = 1; + uint32 sp_percent = 2; + uint32 hp_percent = 3; +} + +message PjmsFormation { + uint32 cur_avatar_id = 2; + uint32 elf_id = 3; + bool is_elf_mode = 4; + uint32 star_ring_energy = 5; + repeated uint32 avatar_id_list = 6; +} + +// CmdID: 7742 +message PjmsUpdateFormationReq { + uint32 chapter_id = 1; + repeated uint32 avatar_list = 2; + uint32 elf_id = 3; +} + +// CmdID: 7743 +message PjmsUpdateFormationRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FORMATION_LENGTH_ERROR = 2; + AVATAR_ERROR = 3; + CHAPTER_ERROR = 4; + ELF_ERROR = 5; + ASTRA_MATE_ERROR = 6; + ALL_DEAD = 7; + } + + PjmsUpdateFormationRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + PjmsFormation formation = 3; +} + +// CmdID: 7744 +message PjmsUpdateAvatarStatusReq { + uint32 chapter_id = 1; + repeated PjmsAvatarStatus avatar_status_list = 2; + uint32 star_ring_energy = 3; +} + +// CmdID: 7745 +message PjmsUpdateAvatarStatusRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_ERROR = 2; + CHAPTER_ERROR = 3; + } + + PjmsUpdateAvatarStatusRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + repeated PjmsAvatarStatus avatar_status_list = 4; + uint32 star_ring_energy = 5; +} + +// CmdID: 7746 +message PjmsGetAvatarStatusReq { + uint32 chapter_id = 1; + repeated uint32 avatar_id_list = 2; + bool is_all = 3; +} + +// CmdID: 7747 +message PjmsGetAvatarStatusRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHAPTER_ERROR = 2; + AVATAR_ERROR = 3; + } + + PjmsGetAvatarStatusRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + repeated PjmsAvatarStatus avatar_status_list = 3; + bool is_all = 4; + uint32 star_ring_energy = 5; +} + +// CmdID: 7756 +message PjmsUpdateChapterNotify { + PjmsChapter cur_chapter = 1; +} + +// CmdID: 7757 +message PjmsLevelUpTalentReq { + uint32 chapter_id = 1; + uint32 target_level = 2; +} + +// CmdID: 7758 +message PjmsLevelUpTalentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHAPTER_ERROR = 2; + TALENT_ERROR = 3; + TALENT_LEVEL_ERROR = 4; + MATERIAL_LACK = 5; + CHAPTER_LEVEL_ERROR = 6; + CONDITION_NOT_MATCH = 7; + } + + PjmsLevelUpTalentRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + uint32 cur_talent_level = 3; + uint32 cur_chapter_level = 4; +} + +message ChapterShadowLake { + uint32 max_energy_num = 1; + uint32 energy_num = 2; +} + +// CmdID: 7761 +message PjmsSetNameReq { + string name = 1; + bool is_first = 2; +} + +// CmdID: 7762 +message PjmsSetNameRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FORMAT_ERROR = 2; + SENSITIVE_WORDS = 3; + IN_CD = 4; + IN_AUDIT = 5; + FEATURE_CLOSED = 6; + } + + PjmsSetNameRsp.Retcode retcode = 1; + string name = 2; + uint32 cd_end_time = 3; + string first_set_name = 4; +} + +// CmdID: 7763 +message PjmsSetGenderReq { + PjmsGenderType gender_type = 1; +} + +// CmdID: 7764 +message PjmsSetGenderRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + GENDER_TYPE_ERROR = 2; + IN_CD = 3; + } + + PjmsSetGenderRsp.Retcode retcode = 1; + PjmsGenderType gender_type = 2; + uint32 cd_end_time = 3; +} + +// CmdID: 7765 +message PjmsGetUnitInfoReq { + uint32 chapter_id = 1; +} + +// CmdID: 7766 +message PjmsGetUnitInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHAPTER_ERROR = 2; + } + + PjmsGetUnitInfoRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + PjmsUnitInfo unit_info = 3; +} + +// CmdID: 7767 +message PjmsLevelUpCoreUnitReq { + uint32 chapter_id = 1; + uint32 unit_id = 2; + uint32 target_level = 3; +} + +// CmdID: 7768 +message PjmsLevelUpCoreUnitRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + COST_LACK = 2; + TARGET_LEVEL_ERROR = 3; + CONDITION_MISMATCH = 4; + UNIT_ID_ERROR = 5; + CHAPTER_ERROR = 6; + } + + PjmsLevelUpCoreUnitRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + uint32 unit_id = 3; + uint32 target_level = 4; + uint32 before_level = 5; +} + +// CmdID: 7769 +message PjmsLevelUpAuxiliaryUnitReq { + uint32 chapter_id = 1; + uint32 unique_id = 2; + uint32 cur_level = 3; + uint32 cur_exp = 4; + repeated Material cost_material_list = 5; + repeated uint32 cost_auxiliary_unique_id_list = 6; +} + +// CmdID: 7770 +message PjmsLevelUpAuxiliaryUnitRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + COST_MATERIAL_LACK = 2; + CONDITION_MISMATCH = 3; + COST_UNIT_ERROR = 4; + CHAPTER_ERROR = 5; + TARGET_UNIT_ERROR = 6; + LEVEL_LIMIT = 7; + COST_MATERIAL_ERROR = 8; + UNIT_LOCKED = 9; + GOLD_LACK = 10; + EMPTY_COST = 11; + } + + PjmsLevelUpAuxiliaryUnitRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + PjmsAuxiliaryUnit unit_before = 3; + PjmsAuxiliaryUnit unit_after = 4; + repeated Material return_material_list = 5; +} + +// CmdID: 7771 +message PjmsUnitSetChangeNotify { + uint32 chapter_id = 1; + uint32 cur_unit_set_id = 2; + repeated PjmsUnitSet updated_unit_set_list = 3; +} + +message PjmsUnitSetSlot { + uint32 slot_id = 1; + uint32 id = 2; +} + +message PjmsUnitSet { + uint32 set_id = 1; + repeated PjmsUnitSetSlot slot_list = 2; +} + +// CmdID: 7773 +message PjmsSetCurUnitSetReq { + uint32 chapter_id = 1; + uint32 set_id = 2; +} + +// CmdID: 7774 +message PjmsSetCurUnitSetRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SET_ID_ERROR = 2; + CHAPTER_ERROR = 3; + } + + PjmsSetCurUnitSetRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + uint32 cur_set_id = 3; +} + +// CmdID: 7775 +message PjmsChangeUnitSetSlotReq { + uint32 chapter_id = 1; + uint32 set_id = 2; + PjmsUnitSetSlot slot = 3; +} + +// CmdID: 7776 +message PjmsChangeUnitSetSlotRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SET_ID_ERROR = 2; + UNIT_NOT_EXIST = 3; + SLOT_ERROR = 4; + CHAPTER_ERROR = 5; + SLOT_CONDITION_NOT_MATCH = 6; + } + + PjmsChangeUnitSetSlotRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + PjmsUnitSet set_data = 3; +} + +// CmdID: 7777 +message PjmsUnitChangeNotify { + uint32 chapter_id = 1; + repeated PjmsCoreUnit updated_core_unit_list = 2; + repeated PjmsAuxiliaryUnit updated_auxiliary_unit_list = 3; + repeated uint32 deleted_auxiliary_unique_id_list = 4; +} + +// CmdID: 7778 +message PjmsChangeBgmReq { + uint32 bgm_id = 1; + uint32 chapter_id = 2; +} + +// CmdID: 7779 +message PjmsChangeBgmRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + BGM_LOCKED = 2; + CHAPTER_ERROR = 3; + } + + PjmsChangeBgmRsp.Retcode retcode = 1; + uint32 bgm_id = 2; + uint32 chapter_id = 3; +} + +// CmdID: 7780 +message PjmsTakeChapterRewardReq { + uint32 chapter_id = 1; +} + +// CmdID: 7781 +message PjmsTakeChapterRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHAPTER_ERROR = 2; + NO_REWARD = 3; + } + + PjmsTakeChapterRewardRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + RewardData reward_data = 3; + uint32 last_take_reward_material_num = 4; +} + +// CmdID: 7782 +message PjmsDisjoinAuxiliaryUnitReq { + uint32 chapter_id = 1; + repeated uint32 unique_id_list = 2; +} + +// CmdID: 7783 +message PjmsDisjoinAuxiliaryUnitRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHAPTER_ERROR = 2; + UNIQUE_ID_ERROR = 3; + UNIT_LOCKED = 4; + EMPTY_COST = 5; + } + + PjmsDisjoinAuxiliaryUnitRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + repeated Material return_material_list = 3; +} + +message PjmsResidentStageRestrict { + uint32 restrict_id = 1; + uint32 weekly_enter_times = 2; +} + +// CmdID: 7784 +message PjmsGetResidentStageDataReq { +} + +// CmdID: 7785 +message PjmsGetResidentStageDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + PjmsGetResidentStageDataRsp.Retcode retcode = 1; + repeated PjmsResidentStageRestrict restrict_list = 2; +} + +// CmdID: 7786 +message PjmsGetExploreScoreReq { + uint32 chapter_id = 1; +} + +message PjmsExploreScore { + uint32 explore_id = 1; + uint32 score = 2; +} + +// CmdID: 7787 +message PjmsGetExploreScoreRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHAPTER_ERROR = 2; + } + + PjmsGetExploreScoreRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + repeated PjmsExploreScore explore_score_list = 3; +} + +// CmdID: 7788 +message PjmsGetHomeDataReq { +} + +// CmdID: 7789 +message PjmsGetHomeDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + PjmsGetHomeDataRsp.Retcode retcode = 1; + repeated uint32 unlock_bgm_id_list = 2; + repeated uint32 unlock_furniture_id_list = 4; +} + +// CmdID: 7790 +message PjmsGetAchievementDataReq { +} + +message PjmsAchievement { + uint32 mission_id = 1; + uint32 finish_time = 2; +} + +message PjmsAchievementSection { + uint32 section_id = 1; + bool is_take_platinum_reward = 2; + repeated PjmsAchievement achievement_list = 3; +} + +// CmdID: 7791 +message PjmsGetAchievementDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + PjmsGetAchievementDataRsp.Retcode retcode = 1; + repeated PjmsAchievementSection section_list = 2; +} + +// CmdID: 7792 +message PjmsTakeAchievementPlatinumRewardReq { + uint32 section_id = 1; +} + +// CmdID: 7793 +message PjmsTakeAchievementPlatinumRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SECTION_ERROR = 2; + NO_REWARD = 3; + LOCKED = 4; + PROGRESS_LACK = 5; + HAS_TAKE = 6; + } + + PjmsTakeAchievementPlatinumRewardRsp.Retcode retcode = 1; + uint32 section_id = 2; + RewardData reward_data = 3; +} + +// CmdID: 7796 +message PjmsTakeChapterLevelRewardReq { + uint32 chapter_id = 1; +} + +// CmdID: 7797 +message PjmsTakeChapterLevelRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHAPTER_ERROR = 2; + NO_REWARD = 3; + } + + PjmsTakeChapterLevelRewardRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + RewardData reward_data = 3; + uint32 last_take_chapter_reward_level = 4; +} + +// CmdID: 7800 +message PjmsRefreshGroupReq { + uint32 group_id = 1; + uint32 create_time = 2; + uint32 graph_id = 3; +} + +// CmdID: 7801 +message PjmsRefreshGroupRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_WORLD = 2; + GROUP_NOT_EXIST = 3; + CREATE_TIME_NOT_EQUAL = 4; + } + + PjmsRefreshGroupRsp.Retcode retcode = 1; + uint32 group_id = 2; + uint32 cur_create_time = 3; + uint32 graph_id = 4; +} + +message PjmsStageBeginRspBody { + PjmsWorld world = 1; +} + +// CmdID: 7794 +message PjmsSetAuxiliaryUnitLockStatusReq { + uint32 chapter_id = 1; + uint32 unique_id = 2; + PjmsAuxiliaryUnitLockStatus lock_status = 3; +} + +// CmdID: 7795 +message PjmsSetAuxiliaryUnitLockStatusRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHAPTER_ERROR = 2; + UNIQUE_ID_ERROR = 3; + } + + PjmsSetAuxiliaryUnitLockStatusRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + uint32 unique_id = 3; +} + +// CmdID: 7798 +message PjmsReviveAvatarReq { + uint32 chapter_id = 1; + uint32 avatar_id = 2; + uint32 revive_use_id = 3; + uint32 revive_seed = 4; +} + +// CmdID: 7799 +message PjmsReviveAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHAPTER_ERROR = 2; + AVATAR_ERROR = 3; + MATERIAL_LACK = 4; + REVIVE_TIMES_LIMIT = 5; + STAGE_ERROR = 6; + REVIVE_USE_ID_ERROR = 7; + SEED_ERROR = 8; + } + + PjmsReviveAvatarRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + uint32 avatar_id = 3; + uint32 revive_times = 4; + uint32 revive_seed = 5; +} + +// CmdID: 7802 +message PjmsFinishConsumeMaterialStoryReq { + uint32 story_id = 1; +} + +// CmdID: 7803 +message PjmsFinishConsumeMaterialStoryRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STORY_NOT_ACCEPT = 2; + STORY_NOT_DOING = 3; + CONDITION_NOT_MATCH = 4; + MATERIAL_LACK = 5; + } + + PjmsFinishConsumeMaterialStoryRsp.Retcode retcode = 1; + uint32 story_id = 2; +} + +message PjmsStoryStatusData { + PjmsStoryFinishData finished_story_data = 1; + PjmsStorySeriesFinishData finished_story_series_data = 2; + uint32 accepted_story_id = 3; + uint32 accepted_series_id = 4; + uint32 closed_story_id = 5; +} + +// CmdID: 7804 +message PjmsStoryStatusNotify { + repeated PjmsStoryStatusData story_status_list = 1; +} + +// CmdID: 7805 +message PjmsChangeNpcStateReq { + uint32 npc_guid = 1; + uint32 target_state = 2; +} + +// CmdID: 7806 +message PjmsChangeNpcStateRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_WORLD = 2; + NPC_NOT_EXIST = 3; + } + + PjmsChangeNpcStateRsp.Retcode retcode = 1; + uint32 npc_guid = 2; + uint32 cur_state = 3; +} + +// CmdID: 7807 +message PjmsAddShadowLakeEnergyReq { + uint32 add_energy_num = 1; + uint32 cur_energy_num = 2; +} + +// CmdID: 7808 +message PjmsAddShadowLakeEnergyRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + PjmsAddShadowLakeEnergyRsp.Retcode retcode = 1; + uint32 add_energy_num = 2; + uint32 cur_energy_num = 3; +} + +// CmdID: 7809 +message PjmsSubShadowLakeEnergyReq { + uint32 sub_energy_num = 1; + uint32 cur_energy_num = 2; +} + +// CmdID: 7810 +message PjmsSubShadowLakeEnergyRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ENERGY_NOT_ENOUGH = 3; + } + + PjmsSubShadowLakeEnergyRsp.Retcode retcode = 1; + uint32 sub_energy_num = 2; + uint32 cur_energy_num = 3; +} + +// CmdID: 7811 +message PjmsShadowLakeNotify { + ChapterShadowLake chapter_shadowlake = 1; +} + +// CmdID: 7812 +message PjmsGetChapterDataReq { + bool is_all = 1; + uint32 chapter_id = 2; +} + +// CmdID: 7813 +message PjmsGetChapterDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHAPTER_ERROR = 2; + } + + PjmsGetChapterDataRsp.Retcode retcode = 1; + bool is_all = 2; + repeated PjmsChapter chapter_list = 3; + uint32 cur_chapter_id = 4; +} + +// CmdID: 7814 +message PjmsGetActivityPanelReq { +} + +message PjmsActivityPanel { + uint32 activity_id = 1; + uint32 begin_time = 2; + uint32 end_time = 3; + bool is_resident = 4; + uint32 advance_begin_time = 5; + uint32 advance_end_time = 6; + uint32 min_level = 7; +} + +// CmdID: 7815 +message PjmsGetActivityPanelRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + FEATURE_CLOSED = 3; + } + + PjmsGetActivityPanelRsp.Retcode retcode = 1; + repeated PjmsActivityPanel activity_panel_list = 2; +} + +// CmdID: 7816 +message PjmsResidentStageGetRankReq { + uint32 rank_group_id = 1; +} + +// CmdID: 7817 +message PjmsResidentStageGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + INVALID_RANK_GROUP = 2; + } + + PjmsResidentStageGetRankRsp.Retcode retcode = 1; + uint32 rank_group_id = 2; + RankShowData rank_data = 3; + uint32 rank_percent = 4; + uint32 rank = 5; +} + +// CmdID: 7818 +message PjmsGetRecoveryRecordReq { +} + +message PjmsRecoveryRecord { + uint32 target_id = 1; + uint32 skill_id = 2; + uint32 last_recover_time = 3; +} + +// CmdID: 7819 +message PjmsGetRecoveryRecordRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + PjmsGetRecoveryRecordRsp.Retcode retcode = 1; + repeated PjmsRecoveryRecord recovery_record_list = 5; +} + +// CmdID: 7820 +message PjmsRecordRecoveryActionReq { + repeated PjmsRecoveryRecord triggered_record_list = 3; +} + +// CmdID: 7821 +message PjmsRecordRecoveryActionRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + IN_CD = 4; + TARGET_ID_ERROR = 5; + } + + PjmsRecordRecoveryActionRsp.Retcode retcode = 1; + repeated PjmsRecoveryRecord recovery_record_list = 5; +} + +message PjmsCondition { + uint32 condition_id = 1; + bool is_match = 2; +} + +// CmdID: 7822 +message PjmsGetConditionDataReq { +} + +// CmdID: 7823 +message PjmsGetConditionDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + PjmsGetConditionDataRsp.Retcode retcode = 1; + repeated PjmsCondition condition_list = 2; +} + +// CmdID: 7826 +message PjmsChapterTrackStorySeriesReq { + uint32 chapter_id = 1; + uint32 track_series_id = 2; +} + +// CmdID: 7827 +message PjmsChapterTrackStorySeriesRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHAPTER_ERROR = 2; + } + + PjmsChapterTrackStorySeriesRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + uint32 cur_track_series_id = 3; +} + +// CmdID: 7828 +message PjmsLeaveCurWorldReq { +} + +// CmdID: 7829 +message PjmsLeaveCurWorldRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + PjmsLeaveCurWorldRsp.Retcode retcode = 1; +} + +// CmdID: 7830 +message PjmsChapterActiveEcologyTalkReq { + uint32 chapter_id = 1; + repeated uint32 talk_id_list = 2; +} + +// CmdID: 7831 +message PjmsChapterActiveEcologyTalkRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHAPTER_ERROR = 2; + } + + PjmsChapterActiveEcologyTalkRsp.Retcode retcode = 1; + uint32 chapter_id = 2; +} + +// CmdID: 7834 +message PjmsTrackStorySeriesReq { + uint32 track_series_id = 1; + uint32 category_id = 2; +} + +// CmdID: 7835 +message PjmsTrackStorySeriesRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHAPTER_ERROR = 2; + } + + PjmsTrackStorySeriesRsp.Retcode retcode = 1; +} + +// CmdID: 7836 +message PjmsSkipStoryReq { + uint32 skip_id = 1; +} + +// CmdID: 7837 +message PjmsSkipStoryRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + PjmsSkipStoryRsp.Retcode retcode = 1; + uint32 skip_id = 2; + repeated uint32 skipped_story_list = 3; +} + +// CmdID: 7839 +message PjmsUpdateChapterSectionNotify { + uint32 chapter_id = 1; + uint32 cur_section_id = 2; + repeated PjmsChapterSection section_list = 3; +} + +enum CmdTypePjms { + CMD_TYPE_PJMS_NONE = 0; + CMD_PJMS_ENTER_WORLD_REQ = 7700; + CMD_PJMS_ENTER_WORLD_RSP = 7701; + CMD_PJMS_GET_CUR_WORLD_REQ = 7702; + CMD_PJMS_GET_CUR_WORLD_RSP = 7703; + CMD_PJMS_GET_MAIN_DATA_REQ = 7706; + CMD_PJMS_GET_MAIN_DATA_RSP = 7707; + CMD_PJMS_GET_STORY_DATA_REQ = 7708; + CMD_PJMS_GET_STORY_DATA_RSP = 7709; + CMD_PJMS_UPDATE_STORY_PROGRESS_NOTIFY = 7714; + CMD_PJMS_SYNC_MAP_INFO_NOTIFY = 7719; + CMD_PJMS_UPDATE_ENTITY_NOTIFY = 7720; + CMD_PJMS_UPDATE_STORY_PROGRESS_REQ = 7725; + CMD_PJMS_UPDATE_STORY_PROGRESS_RSP = 7726; + CMD_PJMS_KILL_MONSTER_REQ = 7727; + CMD_PJMS_KILL_MONSTER_RSP = 7728; + CMD_PJMS_CHANGE_GADGET_STATE_REQ = 7729; + CMD_PJMS_CHANGE_GADGET_STATE_RSP = 7730; + CMD_PJMS_ACTIVE_GROUP_REQ = 7731; + CMD_PJMS_ACTIVE_GROUP_RSP = 7732; + CMD_PJMS_ACTIVE_ENTITY_REQ = 7733; + CMD_PJMS_ACTIVE_ENTITY_RSP = 7734; + CMD_PJMS_SET_WORLD_TIME_REQ = 7735; + CMD_PJMS_SET_WORLD_TIME_RSP = 7736; + CMD_PJMS_COMMON_DROP_NOTIFY = 7737; + CMD_PJMS_CHANGE_CHAPTER_REQ = 7738; + CMD_PJMS_CHANGE_CHAPTER_RSP = 7739; + CMD_PJMS_SET_CUR_AVATAR_REQ = 7740; + CMD_PJMS_SET_CUR_AVATAR_RSP = 7741; + CMD_PJMS_UPDATE_FORMATION_REQ = 7742; + CMD_PJMS_UPDATE_FORMATION_RSP = 7743; + CMD_PJMS_UPDATE_AVATAR_STATUS_REQ = 7744; + CMD_PJMS_UPDATE_AVATAR_STATUS_RSP = 7745; + CMD_PJMS_GET_AVATAR_STATUS_REQ = 7746; + CMD_PJMS_GET_AVATAR_STATUS_RSP = 7747; + CMD_PJMS_UPDATE_CHAPTER_NOTIFY = 7756; + CMD_PJMS_LEVEL_UP_TALENT_REQ = 7757; + CMD_PJMS_LEVEL_UP_TALENT_RSP = 7758; + CMD_PJMS_SET_NAME_REQ = 7761; + CMD_PJMS_SET_NAME_RSP = 7762; + CMD_PJMS_SET_GENDER_REQ = 7763; + CMD_PJMS_SET_GENDER_RSP = 7764; + CMD_PJMS_GET_UNIT_INFO_REQ = 7765; + CMD_PJMS_GET_UNIT_INFO_RSP = 7766; + CMD_PJMS_LEVEL_UP_CORE_UNIT_REQ = 7767; + CMD_PJMS_LEVEL_UP_CORE_UNIT_RSP = 7768; + CMD_PJMS_LEVEL_UP_AUXILIARY_UNIT_REQ = 7769; + CMD_PJMS_LEVEL_UP_AUXILIARY_UNIT_RSP = 7770; + CMD_PJMS_UNIT_SET_CHANGE_NOTIFY = 7771; + CMD_PJMS_SET_CUR_UNIT_SET_REQ = 7773; + CMD_PJMS_SET_CUR_UNIT_SET_RSP = 7774; + CMD_PJMS_CHANGE_UNIT_SET_SLOT_REQ = 7775; + CMD_PJMS_CHANGE_UNIT_SET_SLOT_RSP = 7776; + CMD_PJMS_UNIT_CHANGE_NOTIFY = 7777; + CMD_PJMS_CHANGE_BGM_REQ = 7778; + CMD_PJMS_CHANGE_BGM_RSP = 7779; + CMD_PJMS_TAKE_CHAPTER_REWARD_REQ = 7780; + CMD_PJMS_TAKE_CHAPTER_REWARD_RSP = 7781; + CMD_PJMS_DISJOIN_AUXILIARY_UNIT_REQ = 7782; + CMD_PJMS_DISJOIN_AUXILIARY_UNIT_RSP = 7783; + CMD_PJMS_GET_RESIDENT_STAGE_DATA_REQ = 7784; + CMD_PJMS_GET_RESIDENT_STAGE_DATA_RSP = 7785; + CMD_PJMS_GET_EXPLORE_SCORE_REQ = 7786; + CMD_PJMS_GET_EXPLORE_SCORE_RSP = 7787; + CMD_PJMS_GET_HOME_DATA_REQ = 7788; + CMD_PJMS_GET_HOME_DATA_RSP = 7789; + CMD_PJMS_GET_ACHIEVEMENT_DATA_REQ = 7790; + CMD_PJMS_GET_ACHIEVEMENT_DATA_RSP = 7791; + CMD_PJMS_TAKE_ACHIEVEMENT_PLATINUM_REWARD_REQ = 7792; + CMD_PJMS_TAKE_ACHIEVEMENT_PLATINUM_REWARD_RSP = 7793; + CMD_PJMS_SET_AUXILIARY_UNIT_LOCK_STATUS_REQ = 7794; + CMD_PJMS_SET_AUXILIARY_UNIT_LOCK_STATUS_RSP = 7795; + CMD_PJMS_TAKE_CHAPTER_LEVEL_REWARD_REQ = 7796; + CMD_PJMS_TAKE_CHAPTER_LEVEL_REWARD_RSP = 7797; + CMD_PJMS_REVIVE_AVATAR_REQ = 7798; + CMD_PJMS_REVIVE_AVATAR_RSP = 7799; + CMD_PJMS_REFRESH_GROUP_REQ = 7800; + CMD_PJMS_REFRESH_GROUP_RSP = 7801; + CMD_PJMS_FINISH_CONSUME_MATERIAL_STORY_REQ = 7802; + CMD_PJMS_FINISH_CONSUME_MATERIAL_STORY_RSP = 7803; + CMD_PJMS_STORY_STATUS_NOTIFY = 7804; + CMD_PJMS_CHANGE_NPC_STATE_REQ = 7805; + CMD_PJMS_CHANGE_NPC_STATE_RSP = 7806; + CMD_PJMS_ADD_SHADOW_LAKE_ENERGY_REQ = 7807; + CMD_PJMS_ADD_SHADOW_LAKE_ENERGY_RSP = 7808; + CMD_PJMS_SUB_SHADOW_LAKE_ENERGY_REQ = 7809; + CMD_PJMS_SUB_SHADOW_LAKE_ENERGY_RSP = 7810; + CMD_PJMS_SHADOWLAKE_NOTIFY = 7811; + CMD_PJMS_GET_CHAPTER_DATA_REQ = 7812; + CMD_PJMS_GET_CHAPTER_DATA_RSP = 7813; + CMD_PJMS_GET_ACTIVITY_PANEL_REQ = 7814; + CMD_PJMS_GET_ACTIVITY_PANEL_RSP = 7815; + CMD_PJMS_RESIDENT_STAGE_GET_RANK_REQ = 7816; + CMD_PJMS_RESIDENT_STAGE_GET_RANK_RSP = 7817; + CMD_PJMS_GET_RECOVERY_RECORD_REQ = 7818; + CMD_PJMS_GET_RECOVERY_RECORD_RSP = 7819; + CMD_PJMS_RECORD_RECOVERY_ACTION_REQ = 7820; + CMD_PJMS_RECORD_RECOVERY_ACTION_RSP = 7821; + CMD_PJMS_GET_CONDITION_DATA_REQ = 7822; + CMD_PJMS_GET_CONDITION_DATA_RSP = 7823; + CMD_PJMS_CHAPTER_TRACK_STORY_SERIES_REQ = 7826; + CMD_PJMS_CHAPTER_TRACK_STORY_SERIES_RSP = 7827; + CMD_PJMS_LEAVE_CUR_WORLD_REQ = 7828; + CMD_PJMS_LEAVE_CUR_WORLD_RSP = 7829; + CMD_PJMS_CHAPTER_ACTIVE_ECOLOGY_TALK_REQ = 7830; + CMD_PJMS_CHAPTER_ACTIVE_ECOLOGY_TALK_RSP = 7831; + CMD_PJMS_TRACK_STORY_SERIES_REQ = 7834; + CMD_PJMS_TRACK_STORY_SERIES_RSP = 7835; + CMD_PJMS_SKIP_STORY_REQ = 7836; + CMD_PJMS_SKIP_STORY_RSP = 7837; + CMD_PJMS_UPDATE_CHAPTER_SECTION_NOTIFY = 7839; + CMD_PJMS_DUMMY = 7899; +} + +enum PjmsChapterIdEnum { + PJMS_CHAPTER_ID_ENUM_NONE = 0; + PJMS_CHAPTER_ID_SHADOW_LAKE = 100; + PJMS_CHAPTER_ID_RE = 150; + PJMS_CHAPTER_ID_KNIGHT = 200; +} + +enum PjmsWorldType { + PJMS_WORLD_TYPE_NONE = 0; + PJMS_WORLD_TYPE_BASE = 1; + PJMS_WORLD_TYPE_OWSTAGE_WITH_BATTLE = 2; + PJMS_WORLD_TYPE_OWSTAGE_NO_BATTLE = 3; + PJMS_WORLD_TYPE_DUNGEON = 4; + PJMS_WORLD_TYPE_OWSTAGE_UAUTO = 200; +} + +enum PjmsEntityType { + PJMS_ENTITY_TYPE_NONE = 0; + PJMS_ENTITY_TYPE_NPC = 1; + PJMS_ENTITY_TYPE_GADGET = 2; + PJMS_ENTITY_TYPE_MONSTER = 3; + PJMS_ENTITY_TYPE_WALKER = 4; +} + +enum PjmsEventType { + PJMS_EVENT_TYPE_NONE = 0; + PJMS_EVENT_TYPE_FINISH_STORY = 2; + PJMS_EVENT_TYPE_ADD_MATERIAL = 4; + PJMS_EVENT_TYPE_ENTER_WORLD = 5; + PJMS_EVENT_TYPE_LEVEL_UP = 6; + PJMS_EVENT_TYPE_KILL_MONSTER = 7; + PJMS_EVENT_TYPE_GADGET_STATE_CHANGE = 8; + PJMS_EVENT_TYPE_GROUP_STATE_CHANGE = 9; + PJMS_EVENT_TYPE_SET_WORLD_TIME = 10; + PJMS_EVENT_TYPE_STAGE_END = 11; + PJMS_EVENT_TYPE_CHAPTER_LEVEL_UP = 12; + PJMS_EVENT_TYPE_FINISH_MISSION = 13; + PJMS_EVENT_TYPE_GROUP_ACTIVE_CHANGE = 14; + PJMS_EVENT_TYPE_SHOP_BUY_GOODS = 15; + PJMS_EVENT_TYPE_LEAVE_WORLD = 16; +} + +enum PjmsGroupStateEventType { + PJMS_GROUP_STATE_EVENT_TYPE_NONE = 0; + PJMS_GROUP_STATE_EVENT_TYPE_KILL_MONSTER = 1; + PJMS_GROUP_STATE_EVENT_TYPE_GADGET_STATE_CHANGE = 2; + PJMS_GROUP_STATE_EVENT_TYPE_STORY_STATUS_CHANGE = 3; +} + +enum PjmsStoryStatus { + PJMS_STORY_STATUS_NONE = 0; + PJMS_STORY_STATUS_DOING = 1; + PJMS_STORY_STATUS_FINISH = 2; + PJMS_STORY_STATUS_CLOSE = 3; + PJMS_STORY_STATUS_WAIT_DELETE = 4; +} + +enum PjmsPreStoryJudgeType { + PJMS_PRE_STORY_JUDGE_TPYE_AND = 0; + PJMS_PRE_STORY_JUDGE_TPYE_OR = 1; +} + +enum PjmsStoryFinishType { + PJMS_STORY_FINISH_TYPE_NONE = 0; + PJMS_STORY_FINISH_TYPE_FINISH_STORY = 1; + PJMS_STORY_FINISH_TYPE_FINISH_INTERACT = 2; + PJMS_STORY_FINISH_TYPE_ADD_MATERIAL = 3; + PJMS_STORY_FINISH_TYPE_ENTER_WORLD = 4; + PJMS_STORY_FINISH_TYPE_CLIENT_TRIGGER = 5; + PJMS_STORY_FINISH_TYPE_KILL_MONSTER = 6; + PJMS_STORY_FINISH_TYPE_GADGET_STATE_CHANGE = 7; + PJMS_STORY_FINISH_TYPE_GROUP_STATE_CHANGE = 8; + PJMS_STORY_FINISH_TYPE_CONSUME_MATERIAL = 9; + PJMS_STORY_FINISH_TYPE_STAGE_ID = 10; + PJMS_STORY_FINISH_TYPE_FINISH_MISSION = 11; + PJMS_STORY_FINISH_TYPE_SHOPPING_TIMES = 12; + PJMS_STORY_FINISH_TYPE_LEAVE_WORLD = 13; + PJMS_STORY_FINISH_TYPE_TAKE_MISSION_REWARD = 14; +} + +enum PjmsSeriesType { + PJMS_SERIES_TYPE_NONE = 0; + PJMS_SERIES_TYPE_MAIN = 1; + PJMS_SERIES_TYPE_BRANCH = 2; + PJMS_SERIES_TYPE_QUEST = 3; + PJMS_SERIES_TYPE_TIMED = 4; + PJMS_SERIES_TYPE_ACTIVITY = 5; +} + +enum PjmsConditionType { + PJMS_CONDITION_TYPE_NONE = 0; + PJMS_CONDITION_TYPE_EXPRESSION = 1; + PJMS_CONDITION_TYPE_ALWAYS_TRUE = 2; + PJMS_CONDITION_TYPE_ALWAYS_FALSE = 3; + PJMS_CONDITION_TYPE_ALL_OF = 4; + PJMS_CONDITION_TYPE_ANY_OF = 5; + PJMS_CONDITION_TYPE_NONE_OF = 6; + PJMS_CONDITION_TYPE_LEVEL_GE = 11; + PJMS_CONDITION_TYPE_PASS_STAGE_AND = 12; + PJMS_CONDITION_TYPE_PASS_STAGE_OR = 13; + PJMS_CONDITION_TYPE_GENDER = 14; + PJMS_CONDITION_TYPE_STORY_STATUS_MATCH = 15; + PJMS_CONDITION_TYPE_CUR_CHAPTER_MATCH = 16; + PJMS_CONDITION_TYPE_DATETIME_GE = 17; + PJMS_CONDITION_TYPE_CHPATER_LEVEL_GE = 18; + PJMS_CONDITION_TYPE_WORLD_TIME_LIMIT = 19; + PJMS_CONDITION_TYPE_SHADOW_LAKE_ENERGY_NUM_GE = 20; + PJMS_CONDITION_TYPE_GADGET_STATE_MATCH = 21; + PJMS_CONDITION_TYPE_GROUP_STATE_MATCH = 22; + PJMS_CONDITION_TYPE_GROUP_ACTIVE_MATCH = 23; + PJMS_CONDITION_TYPE_PJMS_ACTIVITY_SUB_MODULE_OPEN = 24; + PJMS_CONDITION_TYPE_MATERIAL_NUM_GE = 25; + PJMS_CONDITION_TYPE_IN_WORLD_LIST = 26; + PJMS_CONDITION_TYPE_MISSION_STATUS_MATCH = 27; + PJMS_CONDITION_TYPE_IS_IN_STORY_MODE = 1001; + PJMS_CONDITION_TYPE_CAN_TRIAL_AVATAR_EDIT = 1002; + PJMS_CONDITION_TYPE_THELEMA_ACTIVITY_NPC_FINISH = 10001; + PJMS_CONDITION_TYPE_NO_PJMS_ACTIVITY = 10002; +} + +enum PjmsActionType { + PJMS_ACTION_TYPE_NONE = 0; + PJMS_ACTION_TYPE_SUB_MATERIAL = 1; + PJMS_ACTION_TYPE_CLOSE_STORY = 2; + PJMS_ACTION_TYPE_UNLOCK_FOG = 3; + PJMS_ACTION_TYPE_SET_ENTITY_ACTIVE = 4; + PJMS_ACTION_TYPE_SET_GROUP_ACTIVE = 5; + PJMS_ACTION_TYPE_CHANGE_GADGET_STATE = 6; + PJMS_ACTION_TYPE_ACTIVATE_TELEPORT = 7; + PJMS_ACTION_TYPE_REFRESH_GROUP = 8; + PJMS_ACTION_TYPE_ADD_SHADOW_LAKE_ENERGY_MAX_NUM = 9; + PJMS_ACTION_TYPE_ADD_SHADOW_LAKE_ENERGY_NUM = 10; + PJMS_ACTION_TYPE_SUB_SHADOW_LAKE_ENERGY_NUM = 11; + PJMS_ACTION_TYPE_REFRESH_DAILY_QUEST = 12; + PJMS_ACTION_TYPE_SET_GENDER = 13; +} + +enum PjmsGenderType { + PJMS_GENDER_TYPE_NONE = 0; + PJMS_GENDER_TYPE_FEMALE = 1; + PJMS_GENDER_TYPE_MALE = 2; +} + +enum PjmsGroupRefreshType { + PJMS_GROUP_REFRESH_TYPE_NONE = 0; + PJMS_GROUP_REFRESH_TYPE_NEVER = 1; + PJMS_GROUP_REFRESH_TYPE_ON_LOAD = 2; + PJMS_GROUP_REFRESH_TYPE_INTERVAL_SECOND_AFTER_CREATE = 3; + PJMS_GROUP_REFRESH_TYPE_INTERVAL_DAY_AFTER_CREATE = 4; + PJMS_GROUP_REFRESH_TYPE_INTERVAL_SECOND_AFTER_MODIFY = 5; +} + +enum PjmsChapterItemType { + PJMS_CHAPTER_ITEM_TYPE_NONE = 0; + PJMS_CHAPTER_ITEM_TYPE_MATERIAL = 1; + PJMS_CHAPTER_ITEM_TYPE_AUX_UNIT_EXP = 2; +} + +enum PjmsResidentStageType { + PJMS_RESIDENT_STAGE_TYPE_NONE = 0; + PJMS_RESIDENT_STAGE_TYPE_MATERIAL = 1; + PJMS_RESIDENT_STAGE_TYPE_WEEKLY = 2; + PJMS_RESIDENT_STAGE_TYPE_TOWER = 3; +} + +enum DropFromType { + DROP_FROM_TYPE_NONE = 0; + DROP_FROM_TYPE_GADGET = 1; + DROP_FROM_TYPE_MONSTER = 2; + DROP_FROM_TYPE_STORY = 3; +} + +enum PjmsUnitSetIdRange { + PJMS_UNIT_SET_ID_RANGE_NONE = 0; + PJMS_MIN_UNIT_SET_ID = 1; + PJMS_MAX_UNIT_SET_ID = 5; +} + +enum PjmsUnitSetSlotType { + PJMS_UNIT_SET_SLOT_TYPE_NONE = 0; + PJMS_UNIT_SET_SLOT_TYPE_CORE = 1; + PJMS_UNIT_SET_SLOT_TYPE_AUXILIARY = 2; +} + +enum PjmsTrackStorySeriesType { + PJMS_TRACK_STORY_SERIES_TYPE_NONE = 0; + PJMS_TRACK_STORY_SERIES_TYPE_CHAPTER = 1; + PJMS_TRACK_STORY_SERIES_TYPE_CLIENT = 2; +} + +// CmdID: 6950 +message PlatformShooterGetActivityReq { + uint32 activity_id = 1; +} + +message PlatformShooterWeaponAffix { + uint32 cur_affix_id = 1; + uint32 wait_confirm_affix_id = 2; +} + +message PlatformShooterWeapon { + uint32 weapon_id = 1; + uint32 level = 2; + repeated PlatformShooterWeaponAffix affix_list = 3; +} + +message PlatformShooterQAvatar { + uint32 qavatar_id = 1; + uint32 level = 2; +} + +message PlatformShooterWeaponPool { + uint32 pool_id = 1; + PlatformShooterWeaponPoolStatus status = 2; + repeated uint32 has_got_weapon_list = 3; +} + +message PlatformShooterDailyStageInfo { + uint32 stage_id = 1; + repeated uint32 room_id_list = 2; +} + +message PlatformShooterActivity { + uint32 activity_id = 1; + repeated PlatformShooterQAvatar qavatar_list = 2; + repeated PlatformShooterWeapon weapon_list = 3; + uint32 daily_challenge_has_drop_num = 4; + repeated PlatformShooterDailyStageInfo daily_stage_info_list = 5; + uint32 cur_daily_challenge_schedule_id = 6; +} + +// CmdID: 6951 +message PlatformShooterGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + PlatformShooterGetActivityRsp.Retcode retcode = 1; + PlatformShooterActivity activity = 2; +} + +// CmdID: 6952 +message PlatformShooterQAvatarLevelUpReq { + uint32 activity_id = 1; + uint32 qavatar_id = 2; + uint32 target_level = 3; +} + +// CmdID: 6953 +message PlatformShooterQAvatarLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + QAVATAR_NOT_FOUND = 2; + TARGET_LEVEL_ERROR = 3; + MATERIAL_LACK = 4; + } + + PlatformShooterQAvatarLevelUpRsp.Retcode retcode = 1; + uint32 activity_id = 2; + PlatformShooterQAvatar qavatar = 3; +} + +// CmdID: 6954 +message PlatformShooterWeaponPoolGetDisplayReq { + uint32 activity_id = 1; +} + +// CmdID: 6955 +message PlatformShooterWeaponPoolGetDisplayRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + PlatformShooterWeaponPoolGetDisplayRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 gacha_random = 3; + repeated PlatformShooterWeaponPool pool_list = 4; +} + +// CmdID: 6956 +message PlatformShooterWeaponPoolGachaReq { + uint32 activity_id = 1; + uint32 gacha_random = 2; +} + +// CmdID: 6957 +message PlatformShooterWeaponPoolGachaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_POOL = 2; + MATERIAL_LACK = 3; + ACTION_RANDOM_ERROR = 4; + WEAPON_ERROR = 5; + } + + PlatformShooterWeaponPoolGachaRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 new_gacha_random = 3; + repeated PlatformShooterWeaponPool pool_list = 4; + uint32 pool_id = 5; + PlatformShooterWeapon weapon = 6; +} + +// CmdID: 6958 +message PlatformShooterWeaponAffixRefineReq { + uint32 activity_id = 1; + uint32 weapon_id = 2; + repeated uint32 affix_index_list = 3; + PlatformShooterWeaponAffixRefineType type = 4; + bool is_retry = 5; +} + +// CmdID: 6959 +message PlatformShooterWeaponAffixRefineRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + WEAPON_ERROR = 2; + AFFIX_ERROR = 3; + NEED_CONFIRM = 4; + MATERIAL_LACK = 5; + REFINE_TYPE_ERROR = 6; + } + + PlatformShooterWeaponAffixRefineRsp.Retcode retcode = 1; + uint32 activity_id = 2; + PlatformShooterWeapon weapon = 3; +} + +message PlatformShooterWeaponAffixConfirmInfo { + uint32 affix_index = 1; + PlatformShooterWeaponAffixConfirmType type = 2; +} + +// CmdID: 6960 +message PlatformShooterWeaponAffixConfirmReq { + uint32 activity_id = 1; + uint32 weapon_id = 2; + uint32 affix_index = 3; + PlatformShooterWeaponAffixConfirmType type = 4; + repeated PlatformShooterWeaponAffixConfirmInfo confirm_info_list = 5; +} + +// CmdID: 6961 +message PlatformShooterWeaponAffixConfirmRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + WEAPON_ERROR = 2; + NO_NEED_CONFIRM = 3; + DUPLICATE_CONFIRM_INFO = 4; + } + + PlatformShooterWeaponAffixConfirmRsp.Retcode retcode = 1; + uint32 activity_id = 2; + PlatformShooterWeapon weapon = 3; +} + +// CmdID: 6962 +message PlatformShooterGetRankReq { + uint32 activity_id = 1; + uint32 stage_id = 2; +} + +// CmdID: 6963 +message PlatformShooterGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_RANK = 2; + } + + PlatformShooterGetRankRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 stage_id = 3; + RankShowData rank_data = 4; + uint32 rank_percent = 5; + uint32 rank = 6; +} + +enum CmdTypePlatformshooter { + CMD_TYPE_PLATFORMSHOOTER_NONE = 0; + CMD_PLATFORM_SHOOTER_GET_ACTIVITY_REQ = 6950; + CMD_PLATFORM_SHOOTER_GET_ACTIVITY_RSP = 6951; + CMD_PLATFORM_SHOOTER_QAVATAR_LEVEL_UP_REQ = 6952; + CMD_PLATFORM_SHOOTER_QAVATAR_LEVEL_UP_RSP = 6953; + CMD_PLATFORM_SHOOTER_WEAPON_POOL_GET_DISPLAY_REQ = 6954; + CMD_PLATFORM_SHOOTER_WEAPON_POOL_GET_DISPLAY_RSP = 6955; + CMD_PLATFORM_SHOOTER_WEAPON_POOL_GACHA_REQ = 6956; + CMD_PLATFORM_SHOOTER_WEAPON_POOL_GACHA_RSP = 6957; + CMD_PLATFORM_SHOOTER_WEAPON_AFFIX_REFINE_REQ = 6958; + CMD_PLATFORM_SHOOTER_WEAPON_AFFIX_REFINE_RSP = 6959; + CMD_PLATFORM_SHOOTER_WEAPON_AFFIX_CONFIRM_REQ = 6960; + CMD_PLATFORM_SHOOTER_WEAPON_AFFIX_CONFIRM_RSP = 6961; + CMD_PLATFORM_SHOOTER_GET_RANK_REQ = 6962; + CMD_PLATFORM_SHOOTER_GET_RANK_RSP = 6963; +} + +enum PlatformShooterWeaponAffixConfirmType { + PLATFORM_SHOOTER_WEAPON_AFFIX_CONFIRM_NONE = 0; + PLATFORM_SHOOTER_WEAPON_AFFIX_CONFIRM_CONFIRM = 1; + PLATFORM_SHOOTER_WEAPON_AFFIX_CONFIRM_ABANDON = 2; +} + +enum PlatformShooterWeaponAffixRefineType { + PLATFORM_SHOOTER_WEAPON_AFFIX_REFINE_NONE = 0; + PLATFORM_SHOOTER_WEAPON_AFFIX_REFINE_JUNIOR = 1; + PLATFORM_SHOOTER_WEAPON_AFFIX_REFINE_SENIOR = 2; + PLATFORM_SHOOTER_WEAPON_AFFIX_REFINE_TOP = 3; +} + +enum PlatformShooterStageType { + PLATFORM_SHOOTER_STAGE_INVALID = 0; + PLATFORM_SHOOTER_STAGE_MAIN = 1; + PLATFORM_SHOOTER_STAGE_DAILY = 2; + PLATFORM_SHOOTER_STAGE_DAILY_CHALLENGE = 3; + PLATFORM_SHOOTER_STAGE_TOWER = 4; + PLATFORM_SHOOTER_STAGE_QAVATAR_CHALLENGE = 5; +} + +enum PlatformShooterWeaponPoolStatus { + PLATFORM_SHOOTER_WEAPON_POOL_NONE = 0; + PLATFORM_SHOOTER_WEAPON_POOL_LOCKED = 1; + PLATFORM_SHOOTER_WEAPON_POOL_DOING = 2; + PLATFORM_SHOOTER_WEAPON_POOL_FINISHED = 3; +} + +// CmdID: 6550 +message PvzGetActivityReq { + uint32 activity_id = 1; +} + +message PvzQAvatar { + uint32 qavatar_id = 1; + uint32 level = 2; + bool is_special_material_unlocked = 3; +} + +message PvzSiteDropMaterial { + uint32 material_id = 1; + uint32 has_drop_num = 2; +} + +message PvzSiteInfo { + uint32 site_id = 1; + uint32 tower_id = 2; + PvzSiteType site_type = 4; + repeated PvzSiteDropMaterial has_drop_material_list = 5; +} + +message PvzActivity { + uint32 activity_id = 1; + repeated PvzQAvatar unlocked_qavatar_list = 2; + repeated PvzSiteInfo site_info_list = 3; + uint32 challenge_max_finish_wave = 4; +} + +// CmdID: 6551 +message PvzGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + PvzGetActivityRsp.Retcode retcode = 1; + PvzActivity pvz_activity = 2; +} + +// CmdID: 6552 +message PvzBattleBeginReq { + uint32 activity_id = 1; + uint32 tower_id = 2; + uint32 floor_id = 3; + repeated uint32 qavatar_id_list = 4; +} + +// CmdID: 6553 +message PvzBattleBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + QAVATAR_ERROR = 2; + INVALID_TILE = 3; + RPG_SITE_CANNOT_ENTER = 4; + LACK_TICKET = 5; + TILE_SITE_MISMATCH = 6; + } + + PvzBattleBeginRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 tower_id = 3; + uint32 floor_id = 4; + repeated PvzQAvatar qavatar_list = 5; + uint32 game_type = 6; +} + +// CmdID: 6554 +message PvzBattleEndReq { + uint32 activity_id = 1; + PvzBattleEndStatus end_status = 2; + uint32 finish_wave = 3; + uint32 tower_id = 4; + uint32 floor_id = 5; + uint32 cost_time = 6; + uint32 left_hp = 7; + uint32 used_coin_num = 8; +} + +// CmdID: 6555 +message PvzBattleEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + BATTLE_MISMATCH = 2; + INVALID_TILE = 3; + RPG_SITE_CANNOT_ENTER = 4; + LACK_TICKET = 5; + TILE_SITE_MISMATCH = 6; + END_STATUS_INVALID = 7; + } + + PvzBattleEndRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 tower_id = 3; + uint32 floor_id = 4; + PvzBattleEndStatus end_status = 5; + uint32 finish_wave = 6; + uint32 max_finish_wave = 7; + RewardData reward_data = 8; + repeated PvzQAvatar qavatar_list = 9; + uint32 site_id = 10; + uint32 cost_time = 11; + uint32 left_hp = 12; + uint32 used_coin_num = 13; +} + +// CmdID: 6556 +message PvzQAvatarLevelUpReq { + uint32 activity_id = 1; + uint32 qavatar_id = 2; + uint32 target_level = 3; +} + +// CmdID: 6557 +message PvzQAvatarLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_LACK = 2; + TARGET_LEVEL_ERROR = 3; + QAVATAR_NOT_FOUND = 4; + } + + PvzQAvatarLevelUpRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 qavatar_id = 3; + uint32 target_level = 4; +} + +enum CmdTypePvz { + CMD_TYPE_PVZ_NONE = 0; + CMD_PVZ_GET_ACTIVITY_REQ = 6550; + CMD_PVZ_GET_ACTIVITY_RSP = 6551; + CMD_PVZ_BATTLE_BEGIN_REQ = 6552; + CMD_PVZ_BATTLE_BEGIN_RSP = 6553; + CMD_PVZ_BATTLE_END_REQ = 6554; + CMD_PVZ_BATTLE_END_RSP = 6555; + CMD_PVZ_QAVATAR_LEVEL_UP_REQ = 6556; + CMD_PVZ_QAVATAR_LEVEL_UP_RSP = 6557; +} + +enum PvzSiteType { + PVZ_SITE_TYPE_NONE = 0; + PVZ_SITE_NORMAL = 1; + PVZ_SITE_DAILY = 2; + PVZ_SITE_CHALLENGE = 3; +} + +enum PvzBattleEndStatus { + PVZ_BATTLE_END_NONE = 0; + PVZ_BATTLE_END_SUCC = 1; + PVZ_BATTLE_END_FAIL = 2; + PVZ_BATTLE_END_QUIT = 3; +} + +enum PvzQAvatarNextLevelConditionType { + PVZ_QAVATAR_NEXT_LEVEL_CONDITION_NONE = 0; + PVZ_QAVATAR_NEXT_LEVEL_CONDITION_PASS_SITE = 1; +} + +enum PvzQAvatarType { + PVZ_Q_AVATAR_TYPE_NONE = 0; + PVZ_QAVATAR_ATTACK = 1; + PVZ_QAVATAR_ASSIST = 2; +} + +message QAvatarBattleMember { + uint32 uid = 1; + string region_name = 2; + string nickname = 3; + uint32 level = 4; + uint32 frame_id = 5; + uint32 custom_head_id = 6; + uint32 division = 7; + uint32 elo_score = 8; + VirtualAvatar choose_virtual_avatar = 9; + uint32 camp_id = 10; +} + +// CmdID: 5550 +message QAvatarBattleBeginNotify { + uint32 tale_id = 1; + uint32 site_id = 2; + uint32 fightserver_ip = 3; + uint32 fightserver_port = 4; + uint32 chatworld_id = 5; + uint32 scene_id = 6; + string fightserver_ip_v4 = 7; + string fightserver_ip_v6 = 8; + uint32 lobby_id = 10; + uint32 battle_id = 11; + uint32 battle_start_time = 12; + repeated QAvatarBattleMember member_list = 13; +} + +message QAvatarBattleFightInfo { + uint32 uid = 1; + uint32 kill_num = 2; + uint32 dead_num = 3; + uint32 rank = 4; + bool is_mvp = 5; + bool is_win = 6; + uint32 max_hp = 11; + uint32 cur_hp = 12; + uint64 reborn_time_ms_u64 = 13; + uint32 max_sp = 14; + uint32 cur_sp = 15; + uint32 damage_caused = 16; +} + +// CmdID: 5551 +message QAvatarBattleSettleNotify { + QAvatarBattleEndReason end_reason = 1; + uint32 tale_id = 2; + uint32 site_id = 3; + uint32 lobby_id = 4; + uint32 battle_start_time = 5; + uint32 previous_score = 6; + uint32 cur_score = 8; + repeated QAvatarBattleFightInfo fight_info_list = 9; + repeated Material get_material_list = 10; + repeated QAvatarBattleMember member_list = 11; +} + +// CmdID: 5552 +message QAvatarBattleGetLobbyInfoReq { + uint32 tale_id = 1; + uint32 lobby_id = 3; +} + +// CmdID: 5553 +message QAvatarBattleGetLobbyInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_EXIST = 2; + } + + QAvatarBattleGetLobbyInfoRsp.Retcode retcode = 1; + uint32 tale_id = 2; + uint32 lobby_id = 3; + uint32 lobby_status = 4; + uint32 fightserver_ip = 5; + uint32 fightserver_port = 6; + uint32 battle_id = 7; + repeated QAvatarBattleMember member_list = 8; + string fightserver_ip_v4 = 9; + string fightserver_ip_v6 = 10; +} + +message QAvatarBattlePositionComponent { + float x = 1; + float y = 2; + float rotation_x = 3; + float rotation_y = 4; +} + +message QAvatarBattleSpeedComponent { + float speed_x = 1; + float speed_y = 2; +} + +message QAvatarBattleSkillInfo { + uint32 skill_id = 1; + uint32 skill_type = 2; + uint64 btn_holdup_time_ms_u64 = 4; + uint32 combo_num = 5; + uint32 max_bullet_num = 6; + uint32 cur_bullet_num = 7; + uint32 max_charge_num = 8; + uint32 cur_charge_num = 9; + uint64 skill_cd_ms_u64 = 10; +} + +message QAvatarBattleSkillComponent { + repeated QAvatarBattleSkillInfo skill_info_list = 1; +} + +message QAvatarBattleBuff { + uint32 buff_id = 1; + QAvatarBuffType buff_type = 2; + uint64 expire_time_ms_u64 = 4; + uint32 num = 5; +} + +message QAvatarBattleBuffComponent { + repeated QAvatarBattleBuff buff_list = 1; +} + +message QAvatarBattleEvadeComponent { + float speed_x = 1; + float speed_y = 2; + uint64 expire_time_ms_u64 = 3; +} + +message QAvatarBattleStigmata { + uint32 stigmata_id = 1; +} + +message QAvatarBattleStigmataComponent { + repeated QAvatarBattleStigmata stigmata_list = 1; +} + +message QAvatarBattleComponentSet { + QAvatarBattlePositionComponent position_component = 1; + QAvatarBattleSpeedComponent speed_component = 2; + QAvatarBattleSkillComponent skill_component = 3; + QAvatarBattleEvadeComponent evade_component = 4; + QAvatarBattleBuffComponent buff_component = 5; +} + +message QAvatarBattleEntity { + uint32 entity_id = 1; + QAvatarBattleEntityType type = 2; + uint32 entity_name_id = 3; + uint64 entity_expire_time_ms_u64 = 4; + QAvatarBattleComponentSet component_set = 5; + QAvatarBattleFightInfo fight_info = 7; + uint32 owner_id = 8; +} + +message QAvatarBattleDeleteEntity { + QAvatarBattleEntityDeleteReasonType delete_reason = 1; + uint32 entity_id = 2; +} + +// CmdID: 5600 +message QAvatarBattleDataNotify { + repeated QAvatarBattleEntity update_entity_list = 1; + uint64 cur_time_ms_u64 = 3; + repeated QAvatarBattleDeleteEntity delete_entity_list = 4; + bool is_all = 5; +} + +// CmdID: 5601 +message QAvatarBattleEnterBattleReq { +} + +// CmdID: 5602 +message QAvatarBattleEnterBattleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + BATTLE_NOT_EXIST = 2; + } + + QAvatarBattleEnterBattleRsp.Retcode retcode = 1; +} + +// CmdID: 5603 +message QAvatarBattleMoveNotify { + float speed_x = 1; + float speed_y = 2; + float rotation_x = 3; + float rotation_y = 4; +} + +// CmdID: 5630 +message QAvatarBattleEndBattleNotify { + QAvatarBattleEndReason end_reason = 1; + bool is_win = 2; + bool is_mvp = 3; + repeated QAvatarBattleFightInfo fight_info_list = 4; +} + +// CmdID: 5604 +message QAvatarBattleStartSkillReq { + uint32 skill_type = 1; + float rotation_x = 2; + float rotation_y = 3; +} + +// CmdID: 5605 +message QAvatarBattleStartSkillRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SKILL_CD = 2; + BULLET_LACK = 3; + RELOAD_TO_MAX = 4; + CHARGE_LACK = 5; + SP_LACK = 6; + } + + QAvatarBattleStartSkillRsp.Retcode retcode = 1; + uint32 skill_type = 2; + uint32 skill_id = 3; +} + +// CmdID: 5606 +message QAvatarBattleStartSkillNotify { + uint32 src_entity_id = 1; + uint32 skill_type = 2; + uint32 skill_id = 3; +} + +// CmdID: 5607 +message QAvatarBattleEndSkillReq { + uint32 skill_type = 1; + float rotation_x = 2; + float rotation_y = 3; + float dst_position_x = 4; + float dst_position_y = 5; +} + +// CmdID: 5608 +message QAvatarBattleEndSkillRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + QAvatarBattleEndSkillRsp.Retcode retcode = 1; + uint32 skill_type = 2; + uint32 skill_id = 3; +} + +// CmdID: 5609 +message QAvatarBattleEndSkillNotify { + uint32 src_entity_id = 1; + uint32 skill_type = 2; + uint32 skill_id = 3; +} + +// CmdID: 5610 +message QAvatarBattleSkillTriggerNotify { + uint32 trigger_entity_id = 1; + QAvatarBattleEntity trigger_entity = 2; + QAvatarBattleSkillInfo skill_info = 3; +} + +// CmdID: 5611 +message QAvatarBattleComponentOpNotify { + enum ComponentOpType { + COMPONENT_OP_NONE = 0; + COMPONENT_OP_ADD = 1; + COMPONENT_OP_DEL = 2; + } + + uint32 trigger_entity_id = 1; + uint32 component_type = 2; + QAvatarBattleComponentOpNotify.ComponentOpType op_type = 3; +} + +// CmdID: 5612 +message QAvatarBattleDiscardStigmataReq { + uint32 stigmata_id = 1; +} + +// CmdID: 5613 +message QAvatarBattleDiscardStigmataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + QAvatarBattleDiscardStigmataRsp.Retcode retcode = 1; + uint32 stigmata_id = 2; +} + +// CmdID: 5614 +message QAvatarBattleGetDataNotify { +} + +// CmdID: 5621 +message QAvatarBattleKillNotify { + uint32 killer_uid = 1; + uint32 killed_uid = 2; + uint32 killer_streak_num = 3; + uint32 battle_total_kill_num = 4; +} + +// CmdID: 5622 +message QAvatarBattleRefreshGadgetForecastNotify { + uint32 refresh_id = 1; + uint64 refresh_time_ms_u64 = 2; + repeated uint32 spawn_point_id_list = 3; +} + +message QAvatarBattleRefreshGadget { + uint32 gadget_id = 1; + uint32 spawn_point_id = 2; +} + +// CmdID: 5623 +message QAvatarBattleRefreshGadgetGenerateNotify { + uint32 refresh_id = 1; + repeated QAvatarBattleRefreshGadget refresh_gadget_list = 2; +} + +enum CmdTypeQavatarbattle { + CMD_TYPE_QAVATARBATTLE_NONE = 0; + CMD_QAVATAR_BATTLE_BEGIN_NOTIFY = 5550; + CMD_QAVATAR_BATTLE_SETTLE_NOTIFY = 5551; + CMD_QAVATAR_BATTLE_GET_LOBBY_INFO_REQ = 5552; + CMD_QAVATAR_BATTLE_GET_LOBBY_INFO_RSP = 5553; + CMD_QAVATAR_BATTLE_DATA_NOTIFY = 5600; + CMD_QAVATAR_BATTLE_ENTER_BATTLE_REQ = 5601; + CMD_QAVATAR_BATTLE_ENTER_BATTLE_RSP = 5602; + CMD_QAVATAR_BATTLE_MOVE_NOTIFY = 5603; + CMD_QAVATAR_BATTLE_START_SKILL_REQ = 5604; + CMD_QAVATAR_BATTLE_START_SKILL_RSP = 5605; + CMD_QAVATAR_BATTLE_START_SKILL_NOTIFY = 5606; + CMD_QAVATAR_BATTLE_END_SKILL_REQ = 5607; + CMD_QAVATAR_BATTLE_END_SKILL_RSP = 5608; + CMD_QAVATAR_BATTLE_END_SKILL_NOTIFY = 5609; + CMD_QAVATAR_BATTLE_SKILL_TRIGGER_NOTIFY = 5610; + CMD_QAVATAR_BATTLE_COMPONENT_OP_NOTIFY = 5611; + CMD_QAVATAR_BATTLE_DISCARD_STIGMATA_REQ = 5612; + CMD_QAVATAR_BATTLE_DISCARD_STIGMATA_RSP = 5613; + CMD_QAVATAR_BATTLE_GET_DATA_NOTIFY = 5614; + CMD_QAVATAR_BATTLE_KILL_NOTIFY = 5621; + CMD_QAVATAR_BATTLE_REFRESH_GADGET_FORECAST_NOTIFY = 5622; + CMD_QAVATAR_BATTLE_REFRESH_GADGET_GENERATE_NOTIFY = 5623; + CMD_QAVATAR_BATTLE_END_BATTLE_NOTIFY = 5630; + CMD_QAVATAR_BATTLE_DUMMY = 5649; +} + +enum QAvatarBattleComponentType { + QAVATAR_BATTLE_COMPONENT_TYPE_NONE = 0; + QAVATAR_BATTLE_COMPONENT_TYPE_POSITION = 1; + QAVATAR_BATTLE_COMPONENT_TYPE_SPEED = 2; + QAVATAR_BATTLE_COMPONENT_TYPE_RIGID_BODY = 3; + QAVATAR_BATTLE_COMPONENT_TYPE_SKILL = 4; + QAVATAR_BATTLE_COMPONENT_TYPE_BUFF = 5; + QAVATAR_BATTLE_COMPONENT_TYPE_EVADE = 6; + QAVATAR_BATTLE_COMPONENT_TYPE_STIGMATA = 7; + QAVATAR_BATTLE_COMPONENT_TYPE_CONTACT = 8; + QAVATAR_BATTLE_COMPONENT_TYPE_TICK = 9; +} + +enum QAvatarBattleEntityType { + QAVATAR_BATTLE_ENTITY_TYPE_NONE = 0; + QAVATAR_BATTLE_ENTITY_TYPE_PLAYER = 1; + QAVATAR_BATTLE_ENTITY_TYPE_BULLET = 2; + QAVATAR_BATTLE_ENTITY_TYPE_GADGET = 3; + QAVATAR_BATTLE_ENTITY_TYPE_SCHEDULED_TASK = 4; +} + +enum QAvatarBattleCollidePropertyType { + QAVATAR_BATTLE_COLLIDE_PROPERTY_TYPE_WALL = 0; + QAVATAR_BATTLE_COLLIDE_PROPERTY_TYPE_AVATAR_SENSOR = 1; + QAVATAR_BATTLE_COLLIDE_PROPERTY_TYPE_BULLET = 2; + QAVATAR_BATTLE_COLLIDE_PROPERTY_TYPE_AVATAR = 3; +} + +enum QAvatarBattleGadgetType { + Q_AVATAR_BATTLE_GADGET_TYPE_NONE = 0; + QAVATAR_BATTLE_GADGET_TYPE_BREAKABLE_BOX = 1; + QAVATAR_BATTLE_GADGET_TYPE_DROP_ITEM = 2; + QAVATAR_BATTLE_GADGET_TYPE_DAMAGE_AREA = 3; + QAVATAR_BATTLE_GADGET_TYPE_DELAYED_BOMB = 4; + QAVATAR_BATTLE_GADGET_TYPE_UNSTABLE_DELAYED_BOMB = 5; + QAVATAR_BATTLE_GADGET_TYPE_BREAKABLE_DELAYED_BOMB = 6; +} + +enum QAvatarBattleTickComponentEventType { + Q_AVATAR_BATTLE_TICK_COMPONENT_EVENT_TYPE_NONE = 0; + QAVATAR_BATTLE_TICK_EVENT_TYPE_ENABLE = 1; + QAVATAR_BATTLE_TICK_EVENT_TYPE_INTERVAL = 2; +} + +enum QAvatarBattleDropItemType { + Q_AVATAR_BATTLE_DROP_ITEM_TYPE_NONE = 0; + QAVATAR_BATTLE_DROP_ITEM_TYPE_BUFF = 1; + QAVATAR_BATTLE_DROP_ITEM_TYPE_STIGMATA = 2; + QAVATAR_BATTLE_DROP_ITEM_TYPE_INSTANT_HEAL_HP = 3; +} + +enum QAvatarBattleGadgetEffectCampType { + QAVATAR_BATTLE_GADGET_EFFECT_CAMP_TYPE_ALL = 0; + QAVATAR_BATTLE_GADGET_EFFECT_CAMP_TYPE_ALLIES = 1; + QAVATAR_BATTLE_GADGET_EFFECT_CAMP_TYPE_ENEMIES = 2; +} + +enum QAvatarLobbyStatus { + QAVATAR_LOBBY_STATUS_INVALID = 0; + QAVATAR_LOBBY_STATUS_INIT = 1; + QAVATAR_LOBBY_STATUS_PREPARE = 2; + QAVATAR_LOBBY_STATUS_FIGHT = 3; + QAVATAR_LOBBY_STATUS_SETTLE = 4; + QAVATAR_LOBBY_STATUS_DELETE = 5; +} + +enum QAvatarBattleEntityDeleteReasonType { + QAVATAR_BATTLE_ENTITY_DELETE_REASON_NONE = 0; + QAVATAR_BATTLE_ENTITY_DELETE_REASON_EXPIRE = 1; + QAVATAR_BATTLE_ENTITY_DELETE_REASON_HIT = 2; + QAVATAR_BATTLE_ENTITY_DELETE_REASON_PICK_UP = 3; +} + +enum QAvatarBattleEndReason { + QAVATAR_BATTLE_END_REASON_NONE = 0; + QAVATAR_BATTLE_END_REASON_FAIL = 1; + QAVATAR_BATTLE_END_REASON_TIMEOUT = 2; + QAVATAR_BATTLE_END_REASON_TIMEOUT_INVALID = 3; + QAVATAR_BATTLE_END_REASON_KILL_NUM = 4; + QAVATAR_BATTLE_END_REASON_GM = 5; +} + +enum QAvatarSkillType { + QAVATAR_SKILL_NONE = 0; + QAVATAR_SKILL_ATK = 1; + QAVATAR_SKILL_SKL01 = 2; + QAVATAR_SKILL_SKL02 = 3; +} + +enum QAvatarSkillTriggerType { + QAVATAR_SKILL_TRIGGER_NONE = 0; + QAVATAR_SKILL_TRIGGER_DOWN = 1; + QAVATAR_SKILL_TRIGGER_UP = 2; + QAVATAR_SKILL_TRIGGER_HOLDUP = 3; + QAVATAR_SKILL_TRIGGER_HOLDLOOP = 4; +} + +enum QAvatarChangePropType { + QAVATAR_CHANGE_PROP_NONE = 0; + QAVATAR_CHANGE_PROP_HP = 1; + QAVATAR_CHANGE_PROP_SP = 2; +} + +enum QAvatarActionType { + QAVATAR_ACTION_NONE = 0; + QAVATAR_ACTION_ADD_BUFF = 1; + QAVATAR_ACTION_REMOVE_BUFF = 2; + QAVATAR_ACTION_EVADE = 3; + QAVATAR_ACTION_SHOOT_BULLET = 4; + QAVATAR_ACTION_MELEE_ATK = 5; + QAVATAR_ACTION_COMBO_ATK = 6; + QAVATAR_ACTION_CREATE_GADGET = 7; + QAVATAR_ACTION_MUTE_SKILL = 8; + QAVATAR_ACTION_BREAK_SKILL = 9; + QAVATAR_ACTION_CHANGE_PROP = 11; + QAVATAR_ACTION_HOLDUP_ACTION = 13; + QAVATAR_ACTION_SET_ANIM_PARA = 21; + QAVATAR_ACTION_APPLY_EFFECT = 22; + QAVATAR_ACTION_SET_CAMERA_PARA = 23; + QAVATAR_ACTION_LOCK_AIM_ROTATION = 24; + QAVATAR_ACTION_SIM_SKILL_BUTTON_OP = 25; +} + +enum QAvatarBuffType { + QAVATAR_BUFF_NONE = 0; + QAVATAR_BUFF_MAXHP = 1; + QAVATAR_BUFF_ATTACK = 2; + QAVATAR_BUFF_MOVESPEED = 3; + QAVATAR_BUFF_HEALHP = 4; + QAVATAR_BUFF_CHANGESKILL = 5; + QAVATAR_BUFF_HEALSP = 6; + QAVATAR_BUFF_ADDEDDAMAGERATIO = 7; + QAVATAR_BUFF_DAMAGETAKENRATIO = 8; + QAVATAR_BUFF_CHANGESKILLCD = 9; + QAVATAR_BUFF_CRITICALRATE = 10; + QAVATAR_BUFF_CRITICALDAMAGERATIO = 11; + QAVATAR_BUFF_CLIENT_ONLY = 21; +} + +enum QAvatarBuffEffectType { + QAVATAR_BUFF_EFFECT_NONE = 0; + QAVATAR_BUFF_EFFECT_HP_GREATER = 1; + QAVATAR_BUFF_EFFECT_HP_LESS = 2; + QAVATAR_BUFF_EFFECT_OUT_OF_BATTLE = 3; +} + +enum QAvatarStigmataSrcType { + QAVATAR_STIGMATA_SRC_NONE = 0; + QAVATAR_STIGMATA_SRC_DEFAULT = 1; + QAVATAR_STIGMATA_SRC_DROP = 2; +} + +enum QAvatarStigmataEffectType { + QAVATAR_STIGMATA_EFFECT_NONE = 0; + QAVATAR_STIGMATA_EFFECT_DIRECT = 1; + QAVATAR_STIGMATA_EFFECT_SKILL_TRIGGER = 2; + QAVATAR_STIGMATA_EFFECT_ROLE = 3; + QAVATAR_STIGMATA_EFFECT_AVATAR_ID = 4; + QAVATAR_STIGMATA_EFFECT_ATTACK_ON = 5; + QAVATAR_STIGMATA_EFFECT_DEL_HP = 8; +} + +enum QAvatarShapeType { + QAVATAR_SHAPE_NONE = 0; + QAVATAR_SHAPE_AABB = 1; + QAVATAR_SHAPE_CIRCLE = 2; + QAVATAR_SHAPE_OAB = 3; +} + +message QCandyBattleVector3 { + int32 x = 1; + int32 y = 2; + int32 z = 3; +} + +message QCandyBattleComponentPosition { + QCandyBattleVector3 postion = 1; + QCandyBattleVector3 forward = 2; +} + +message QCandyBattleComponentSet { + QCandyBattleComponentPosition position_component = 1; +} + +message QCandyBattleMember { + uint32 uid = 1; + string nickname = 2; + uint32 rank_score = 3; + uint32 team_id = 4; + uint32 avatar_id = 5; + uint32 entity_id = 6; + int32 hidden_score = 7; + uint32 effect_id = 8; +} + +message QCandyBattleMemberBrief { + uint32 uid = 1; + uint32 entity_id = 2; +} + +message QCandyBattlePropData { + uint32 entity_id = 1; + uint32 uuid = 2; +} + +message QCandyBattleSettleInfo { + uint32 rank = 1; + uint32 progress = 2; + uint32 cost_time = 3; + uint32 life_times = 4; + uint32 score = 5; + uint32 map_id = 6; + bool is_first_pass = 7; + uint32 effect_times = 9; + uint32 survive_rounds = 10; + uint32 item_type = 11; +} + +message QCandyBattleMemberSettleInfo { + uint32 uid = 1; + string nickname = 2; + uint32 avatar_id = 3; + uint32 cur_rank_score = 4; + bool is_abandoned = 5; + QCandyBattleSettleInfo settle_info = 6; +} + +message QCandyBattleEntity { + uint32 entity_id = 1; + QCandyBattleEntityType type = 2; + QCandyBattleComponentSet component_set = 3; + uint32 prop_id = 4; + uint32 owner_entity_id = 5; + uint32 state = 6; +} + +message QCandyBattleInfo { + uint32 battle_id = 1; + uint32 remain_life_times = 2; + uint32 score = 3; + uint32 uid = 4; + uint32 total_score = 5; +} + +message PlayerSkill { + uint32 entity_id = 1; + uint32 skill_id = 2; +} + +// CmdID: 6601 +message QCandyBattleGetActivityReq { + uint32 activity_id = 1; +} + +// CmdID: 6602 +message QCandyBattleGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + QCandyBattleGetActivityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 today_currency_got_num = 3; + uint32 rank_score = 4; + uint32 max_rank_score = 5; + uint32 last_avatar_id = 6; + repeated uint32 unlocked_avatar_list = 7; + repeated QCandyBattleSettleInfo settle_record_list = 8; + uint32 cur_day_fight_num = 9; + uint32 currency_limit = 10; + uint32 last_enter_effect_id = 11; + repeated uint32 unlocked_enter_effect_list = 12; +} + +// CmdID: 6603 +message QCandyBattleBeginNotify { + uint32 lobby_id = 1; + uint32 battle_id = 2; + uint32 map_id = 3; + uint32 fightserver_ip = 4; + uint32 fightserver_port = 5; + uint32 activity_id = 6; + QCandyBattleSettleInfo best_record = 7; + string fightserver_ip_v4 = 8; + string fightserver_ip_v6 = 9; +} + +// CmdID: 6604 +message QCandyBattleChooseAvatarReq { + uint32 activity_id = 1; + uint32 old_avatar_id = 2; + uint32 new_avatar_id = 3; +} + +// CmdID: 6605 +message QCandyBattleChooseAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + OLD_AVATAR_MISMATCH = 2; + NEW_AVATAR_LOCKED = 3; + IN_MATCH_STATUS = 4; + IN_READY_STATUS = 5; + } + + QCandyBattleChooseAvatarRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 old_avatar_id = 3; + uint32 new_avatar_id = 4; +} + +// CmdID: 6606 +message QCandyBattleUnlockAvatarReq { + uint32 activity_id = 1; + uint32 avatar_id = 2; +} + +// CmdID: 6607 +message QCandyBattleUnlockAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_LACK = 2; + RANK_SCORE_LACK = 3; + } + + QCandyBattleUnlockAvatarRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 avatar_id = 3; +} + +// CmdID: 6608 +message QCandyBattleSettleBattleNotify { + uint32 activity_id = 1; + uint32 lobby_id = 2; + uint32 map_id = 3; + repeated QCandyBattleMemberSettleInfo settle_info_list = 4; + uint32 battle_id = 5; + uint32 fightserver_ip = 6; + uint32 settle_time = 7; + string fightserver_ip_v4 = 8; + string fightserver_ip_v6 = 9; +} + +// CmdID: 6570 +message QCandyBattleEnterBattleReq { +} + +// CmdID: 6571 +message QCandyBattleEnterBattleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + BATTLE_NOT_EXIST = 2; + } + + QCandyBattleEnterBattleRsp.Retcode retcode = 1; + QCandyBattleType battle_type = 2; + repeated QCandyBattleMember member_list = 3; + repeated QCandyBattlePropData prop_data_list = 5; + repeated QCandyBattleMemoryRoundData memory_round_data_list = 6; + repeated QCandyBattleCooperationScoreRoundData cs_round_data_list = 7; + uint32 random_seed = 8; + uint32 target_total_score = 9; + QCandyBattleExtendRuleData extend_rule_data = 10; +} + +// CmdID: 6572 +message QCandyBattleDataNotify { + uint64 cur_time_ms_u64 = 1; + repeated QCandyBattleEntity update_entity_list = 2; + repeated QCandyBattleEntity delete_entity_list = 3; + repeated QCandyBattleInfo battle_info_list = 4; +} + +// CmdID: 6573 +message QCandyBattleEndNotify { + uint32 battle_id = 1; +} + +// CmdID: 6574 +message QCandyBattleMoveNotify { + QCandyBattleVector3 pos = 1; + QCandyBattleVector3 forward = 2; +} + +// CmdID: 6580 +message QCandyBattleTriggerEntityReq { + uint32 entity_id = 1; + uint32 cur_state = 2; +} + +// CmdID: 6581 +message QCandyBattleTriggerEntityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ENTITY_NOT_EXIST = 2; + STATE_ERROR = 3; + } + + QCandyBattleTriggerEntityRsp.Retcode retcode = 1; + uint32 entity_id = 2; + uint32 cur_state = 3; +} + +// CmdID: 6582 +message QCandyBattleAvatarLifeTimesChangeNotify { + uint32 life_times = 1; +} + +// CmdID: 6583 +message QCandyBattleArriveReq { +} + +// CmdID: 6584 +message QCandyBattleArriveRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SETTLE_FAILED = 2; + } + + QCandyBattleArriveRsp.Retcode retcode = 1; +} + +// CmdID: 6585 +message QCandyBattleUseSkillReq { + uint32 skill_id = 1; +} + +// CmdID: 6586 +message QCandyBattleUseSkillRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SKILL_INVALID = 2; + SKILL_IN_CD = 3; + SKILL_ALL_USED = 4; + } + + QCandyBattleUseSkillRsp.Retcode retcode = 1; + uint32 skill_id = 2; + uint32 remain_times = 3; +} + +// CmdID: 6587 +message QCandyBattleUseSkillNotify { + PlayerSkill player_use_skill = 1; +} + +// CmdID: 6588 +message QCandyBattleAvatarStateClientNotify { + uint32 state = 1; + bool is_move = 2; + uint32 sub_state = 3; +} + +// CmdID: 6589 +message QCandyBattleAvatarStateServerNotify { + uint32 entity_id = 1; + uint32 state = 2; + bool is_move = 3; + uint32 sub_state = 4; +} + +// CmdID: 6590 +message QCandyBattleSkillEndNotify { + PlayerSkill player_skill_end = 1; +} + +// CmdID: 6591 +message QCandyBattleFinishBattleNotify { + uint32 uid = 1; + bool is_over = 3; + QCandyBattleSettleInfo settle_info = 4; +} + +// CmdID: 6592 +message QCandyBattleLeaveBattleReq { +} + +// CmdID: 6593 +message QCandyBattleLeaveBattleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + QCandyBattleLeaveBattleRsp.Retcode retcode = 1; +} + +// CmdID: 6594 +message QCandyBattleLeaveBattleNotify { + uint32 uid = 1; +} + +// CmdID: 6595 +message QCandyBattleStartTimeLineNotify { + uint32 battle_begin_time = 1; + uint32 battle_end_time = 2; +} + +// CmdID: 6596 +message QCandyBattleSkillUseTimesChangeNotify { + uint32 skill_id = 1; + uint32 remain_times = 2; +} + +// CmdID: 6597 +message QCandyBattleSendEmojiReq { + uint32 emoji_id = 1; +} + +// CmdID: 6598 +message QCandyBattleSendEmojiRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + EMOJI_INVALID = 2; + EMOJI_IN_CD = 3; + } + + QCandyBattleSendEmojiRsp.Retcode retcode = 1; + uint32 emoji_id = 2; +} + +// CmdID: 6599 +message QCandyBattleSendEmojiNotify { + uint32 emoji_id = 1; + uint32 uid = 2; + uint32 entity_id = 3; +} + +// CmdID: 6600 +message QCandyBattleSyncAbilityNotify { + uint32 ability_id = 1; + uint32 entity_id = 2; + uint32 owner_entity_id = 3; + uint32 param = 4; +} + +message QCandyBattleMemoryRoundData { + uint32 correct_picture_id = 1; + repeated uint32 picture_id_list = 2; + repeated QCandyBattleMemoryData memory_data_list = 3; +} + +message QCandyBattleMemoryData { + repeated uint32 picture_show_list = 1; +} + +message QCandyBattleCooperationScoreRoundData { + repeated uint32 random_list = 1; +} + +// CmdID: 6622 +message QCandyBattleMemoryRoundEndReq { + uint32 life_times = 1; + uint32 cur_round = 2; +} + +// CmdID: 6623 +message QCandyBattleMemoryRoundEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + INVALID = 2; + } + + QCandyBattleMemoryRoundEndRsp.Retcode retcode = 1; + uint32 life_times = 2; + uint32 cur_round = 3; +} + +message QCandyBattleRandomRefreshData { + repeated uint32 random_list = 1; +} + +message QCandyBattleExtendRuleData { + repeated QCandyBattleRandomRefreshData random_refresh_data_list = 1; +} + +message QCandyBattleActionInfo { + uint32 id = 1; + uint32 action_id = 2; + uint64 trigger_time_ms = 3; +} + +// CmdID: 6624 +message QCandyBattleSyncActionNotify { + repeated QCandyBattleActionInfo action_info_list = 1; +} + +// CmdID: 6625 +message QCandyBattleActionAckReq { + repeated uint32 id_list = 1; +} + +// CmdID: 6626 +message QCandyBattleActionAckRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTION_NOT_EXIST = 2; + } + + QCandyBattleActionAckRsp.Retcode retcode = 1; +} + +enum CmdTypeQcandybattle { + CMD_TYPE_QCANDYBATTLE_NONE = 0; + CMD_QCANDY_BATTLE_ENTER_BATTLE_REQ = 6570; + CMD_QCANDY_BATTLE_ENTER_BATTLE_RSP = 6571; + CMD_QCANDY_BATTLE_DATA_NOTIFY = 6572; + CMD_QCANDY_BATTLE_END_NOTIFY = 6573; + CMD_QCANDY_BATTLE_MOVE_NOTIFY = 6574; + CMD_QCANDY_BATTLE_TRIGGER_ENTITY_REQ = 6580; + CMD_QCANDY_BATTLE_TRIGGER_ENTITY_RSP = 6581; + CMD_QCANDY_BATTLE_LIFE_TIMES_CHANGE_NOTIFY = 6582; + CMD_QCANDY_BATTLE_ARRIVE_REQ = 6583; + CMD_QCANDY_BATTLE_ARRIVE_RSP = 6584; + CMD_QCANDY_BATTLE_USE_SKILL_REQ = 6585; + CMD_QCANDY_BATTLE_USE_SKILL_RSP = 6586; + CMD_QCANDY_BATTLE_PLAYER_USE_SKILL_NOTIFY = 6587; + CMD_QCANDY_BATTLE_AVATAR_STATE_CLIENT_NOTIFY = 6588; + CMD_QCANDY_BATTLE_AVATAR_STATE_SERVER_NOTIFY = 6589; + CMD_QCANDY_BATTLE_SKILL_EFFECT_NOTIFY = 6590; + CMD_QCANDY_BATTLE_FINISH_BATTLE_NOTIFY = 6591; + CMD_QCANDY_BATTLE_LEAVE_BATTLE_REQ = 6592; + CMD_QCANDY_BATTLE_LEAVE_BATTLE_RSP = 6593; + CMD_QCANDY_BATTLE_LEAVE_BATTLE_NOTIFY = 6594; + CMD_QCANDY_BATTLE_START_TIMELINE_NOTIFY = 6595; + CMD_QCANDY_BATTLE_SKILL_USE_TIMES_CHANGE_NOTIFY = 6596; + CMD_QCANDY_BATTLE_SEND_EMOJI_REQ = 6597; + CMD_QCANDY_BATTLE_SEND_EMOJI_RSP = 6598; + CMD_QCANDY_BATTLE_SEND_EMOJI_NOTIFY = 6599; + CMD_QCANDY_BATTLE_SYNC_ABILITY_NOTIFY = 6600; + CMD_QCANDY_BATTLE_GET_ACTIVITY_REQ = 6601; + CMD_QCANDY_BATTLE_GET_ACTIVITY_RSP = 6602; + CMD_QCANDY_BATTLE_BEGIN_NOTIFY = 6603; + CMD_QCANDY_BATTLE_CHOOSE_AVATAR_REQ = 6604; + CMD_QCANDY_BATTLE_CHOOSE_AVATAR_RSP = 6605; + CMD_QCANDY_BATTLE_UNLOCK_AVATAR_REQ = 6606; + CMD_QCANDY_BATTLE_UNLOCK_AVATAR_RSP = 6607; + CMD_QCANDY_BATTLE_SETTLE_BATTLE_NOTIFY = 6608; + CMD_QCANDY_BATTLE_MEMORY_ROUND_END_REQ = 6622; + CMD_QCANDY_BATTLE_MEMORY_ROUND_END_RSP = 6623; + CMD_QCANDY_BATTLE_SYNC_ACTION_NOTIFY = 6624; + CMD_QCANDY_BATTLE_ACTION_ACK_REQ = 6625; + CMD_QCANDY_BATTLE_ACTION_ACK_RSP = 6626; + CMD_QCANDY_BATTLE_DUMMY = 6649; +} + +enum QCandyActivityType { + QCANDY_ACTIVITY_NONE = 0; + QCANDY_ACTIVITY_NORMAL = 1; + QCANDY_ACTIVITY_CHATLOBBY = 2; +} + +enum QCandyBattleType { + QCANDY_BATTLE_TYPE_NONE = 0; + QCANDY_BATTLE_TYPE_RACING = 1; + QCANDY_BATTLE_TYPE_SURVIVE = 2; + QCANDY_BATTLE_TYPE_SCORE = 3; + QCANDY_BATTLE_TYPE_COOPERATION_SCORE = 4; + QCANDY_BATTLE_TYPE_MEMORY_SURVIVE = 5; +} + +enum QCandyBattleComponentType { + QCANDY_BATTLE_COMPONENT_TYPE_NONE = 0; + QCANDY_BATTLE_COMPONENT_TYPE_POSITION = 1; +} + +enum QCandyBattleTriggerEventType { + Q_CANDY_BATTLE_TRIGGER_EVENT_TYPE_NONE = 0; + QCANDY_BATTLE_TRIGGER_EVENT_TYPE_ADD_SCORE = 1; + QCANDY_BATTLE_TRIGGER_EVENT_TYPE_SUB_SKILL_USE_TIMES = 2; +} + +enum QCandyBattleDelayActionType { + QCANDY_BATTLE_DELAY_ACTION_TYPE_NONE = 0; + QCANDY_BATTLE_DELAY_ACTION_TYPE_STATE_RESET = 1; + QCANDY_BATTLE_DELAY_ACTION_TYPE_SKILL_END = 2; +} + +enum QCandyBattleEntityType { + QCANDY_BATTLE_ENTITY_TYPE_NONE = 0; + QCANDY_BATTLE_ENTITY_TYPE_PLAYER = 1; + QCANDY_BATTLE_ENTITY_TYPE_PROP = 2; +} + +enum QCandyBattlePropState { + QCANDY_BATTLE_PROP_CANNOT_TRIGGER = 0; + QCANDY_BATTLE_PROP_CAN_TRIGGER = 1; +} + +enum QCandyBattlePropType { + QCANDY_BATTLE_PROP_TYPE_NONE = 0; + QCANDY_BATTLE_PROP_TYPE_HAS_CD = 1; + QCANDY_BATTLE_PROP_TYPE_AUTO_RECOVER = 2; +} + +enum QCandyLobbyStatus { + QCANDY_LOBBY_STATUS_INVALID = 0; + QCANDY_LOBBY_STATUS_INIT = 1; + QCANDY_LOBBY_STATUS_FIGHT = 2; + QCANDY_LOBBY_STATUS_SETTLE = 3; + QCANDY_LOBBY_STATUS_DELETE = 4; +} + +enum QCandyBattleMemoryPictureType { + QCANDY_BATTLE_MEMORY_PICTURE_TYPE_NONE = 0; + QCANDY_BATTLE_MEMORY_PICTURE_TYPE_SPRING = 1; + QCANDY_BATTLE_MEMORY_PICTURE_TYPE_FRUIT = 2; + QCANDY_BATTLE_MEMORY_PICTURE_TYPE_HOMU = 3; +} + +enum QCandyBattleExtendRuleType { + Q_CANDY_BATTLE_EXTEND_RULE_TYPE_NONE = 0; + QCANDY_BATTLE_EXTEND_RULE_TYPE_RANDOM_REFRESH = 1; +} + +enum QCandyBattleConditionType { + Q_CANDY_BATTLE_CONDITION_TYPE_NONE = 0; + QCANDY_BATTLE_CONDITION_TYPE_PERCENT_TOTAL_SCORE = 1; + QCANDY_BATTLE_CONDITION_TYPE_ELAPSED_TIME_SECONDS = 2; +} + +message RaidReplaceScoreRecord { + uint32 stage_id = 1; + uint32 score = 2; +} + +message RaidReplaceActivity { + uint32 activity_id = 1; + repeated uint32 opened_stage_list = 2; + repeated uint32 passed_stage_list = 3; + uint32 cur_reward_line_score = 4; + uint32 last_take_reward_score = 5; + uint32 reward_line_id = 6; + bool is_special_reward_take_times_added = 7; +} + +// CmdID: 8100 +message RaidReplaceGetDataReq { +} + +// CmdID: 8101 +message RaidReplaceGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSED = 2; + } + + RaidReplaceGetDataRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + repeated RaidReplaceActivity activity_list = 3; + repeated RaidReplaceScoreRecord score_record_list = 4; + uint32 available_special_reward_take_times = 5; +} + +// CmdID: 8102 +message RaidReplaceTakeRewardLineRewardReq { + uint32 activity_id = 1; +} + +// CmdID: 8103 +message RaidReplaceTakeRewardLineRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSED = 2; + ACTIVITY_NOT_OPEN = 3; + } + + RaidReplaceTakeRewardLineRewardRsp.Retcode retcode = 1; + RewardData reward_data = 2; +} + +// CmdID: 8104 +message RaidReplaceTakeSpecialRewardReq { + uint32 reward_id = 1; +} + +// CmdID: 8105 +message RaidReplaceTakeSpecialRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSED = 2; + ALREADY_EXIST = 3; + TIMES_LACK = 4; + } + + RaidReplaceTakeSpecialRewardRsp.Retcode retcode = 1; +} + +enum CmdTypeRaidreplace { + CMD_TYPE_RAIDREPLACE_NONE = 0; + CMD_RAID_REPLACE_GET_DATA_REQ = 8100; + CMD_RAID_REPLACE_GET_DATA_RSP = 8101; + CMD_RAID_REPLACE_TAKE_REWARD_LINE_REWARD_REQ = 8102; + CMD_RAID_REPLACE_TAKE_REWARD_LINE_REWARD_RSP = 8103; + CMD_RAID_REPLACE_TAKE_SPECIAL_REWARD_REQ = 8104; + CMD_RAID_REPLACE_TAKE_SPECIAL_REWARD_RSP = 8105; +} + +enum RaidReplaceStageType { + RAID_REPLACE_STAGE_NONE = 0; + RAID_REPLACE_STAGE_MACHINERY = 1; + RAID_REPLACE_STAGE_NOSTALGIA = 2; + RAID_REPLACE_STAGE_AVATAR = 3; + RAID_REPLACE_STAGE_FUNNY = 4; + RAID_REPLACE_STAGE_BOSS = 5; +} + +message InLevelBaseActorSnapshot { + float base_max_hp = 1; + float base_max_sp = 2; + float max_hp = 3; + float max_sp = 4; + float hp = 5; + float sp = 6; + uint32 level = 7; + float attack = 8; + float defense = 9; + bool is_alive = 10; + float total_overkill_damage = 11; +} + +message InLevelAvatarSkillInfo { + string skill_name = 1; + float cd = 2; + float cost_sp = 3; + float need_sp = 4; + float cd_timer = 5; + uint32 max_charges_count = 6; + uint32 charges_counter = 7; + bool can_hold = 8; + string instant_trigger_anim_event_id = 9; +} + +message InLevelAvatarActorSnapshot { + uint32 avatar_id = 1; + repeated InLevelAvatarSkillInfo skill_list = 2; + uint32 weapon_id = 3; + uint32 weapon_level = 4; + uint32 stigmata_1_id = 5; + uint32 stigmata_1_level = 6; + uint32 stigmata_2_id = 7; + uint32 stigmata_2_level = 8; + uint32 stigmata_3_id = 9; + uint32 stigmata_3_level = 10; +} + +message InLevelMonsterActorSnapshot { + string monster_name = 1; +} + +message InLevelEntityProperty { + string name = 1; + float value = 2; +} + +message InLevelActorSnapshot { + InLevelAvatarActorSnapshot avatar_snapshot = 1; + InLevelMonsterActorSnapshot monster_snapshot = 2; + InLevelBaseActorSnapshot base_snapshot = 3; + repeated InLevelEntityProperty property_list = 4; +} + +message InLevelAttackDataSnapshot { + float attacker_ani_damage_Ratio = 1; + uint32 attacker_class = 2; + uint32 attacker_nature = 3; + uint32 attacker_category = 4; + float attacker_crit_chance = 5; + float attacker_crit_damage_ratio = 6; + uint32 attacker_level = 7; + float attacker_shield_damage_ratio = 8; + float attacker_shield_damage_delta = 9; + float attacker_attack_percentage = 10; + float attacker_attack_value = 11; + float added_attack_ratio = 12; + float added_damage_ratio = 13; + float added_damage_ratio2 = 14; + float attacker_added_attack_value = 15; + float attacker_all_damage_reduce_ratio = 16; + float attacker_fire_damage = 17; + float attacker_fire_damage_percentage = 18; + float added_attacker_fire_damage_ratio = 19; + float attacker_thunder_damage = 20; + float attacker_thunder_damage_percentage = 21; + float added_attacker_thunder_damage_ratio = 22; + float attacker_ice_damage = 23; + float attacker_ice_damage_percentage = 24; + float added_attacker_ice_damage_ratio = 25; + float attackee_ani_defence_ratio = 26; + uint32 attackee_nature = 27; + uint32 attackee_class = 28; + float attackee_added_damage_take_ratio = 29; + float attackee_normal_damage_taken_ratio = 30; + float attackee_fire_damage_taken_ratio = 31; + float attackee_ice_damage_taken_ratio = 32; + float attackee_thunder_damage_taken_ratio = 33; + float fire_damage = 34; + float thunder_damage = 35; + float ice_damage = 36; + float ani_damage_ratio = 37; + float retreat_velocity = 38; + uint32 frame_halt = 39; + bool is_anim_event_attack = 40; + bool is_in_combo_count = 41; + uint32 attack_category_tag = 42; + uint32 hit_type = 43; + uint32 hit_flag = 44; + uint32 hit_level = 45; + uint32 hit_effect = 46; + uint32 hit_effect_aux = 47; + float added_attack_ratio2 = 48; + float added_attacker_fire_damage_ratio2 = 49; + float added_attacker_thunder_damage_ratio2 = 50; + float added_attacker_ice_damage_ratio2 = 51; + float added_attacker_burn_damage_ratio = 52; + float added_attacker_burn_damage_ratio2 = 53; + float added_attacker_burn_damage_delta = 54; + float added_attacker_bleed_damage_ratio = 55; + float added_attacker_bleed_damage_ratio2 = 56; + float added_attacker_bleed_damage_delta = 57; + float added_damage_ratio3 = 58; +} + +message InLevelContext { + enum ContextType { + INVALID = 0; + NORMAL = 1; + ENDLESS = 2; + OPENWORLD_ENDLESS = 3; + EXBOSS = 4; + } + + InLevelContext.ContextType type = 1; + string context_string = 2; +} + +message InLevelAttackSnapshot { + uint32 time = 1; + InLevelAttackDataSnapshot attack_data_created = 2; + InLevelAttackDataSnapshot attack_data_resoved = 3; + repeated InLevelActorSnapshot actor_list = 4; +} + +message InLevelAttackSnapshotInfo { + InLevelContext context = 1; + repeated InLevelAttackSnapshot snapshot_list = 2; +} + +enum CmdTypeReport { + CMD_DUMMY = 0; +} + +message PlayerRoomStatus { + RoomMode room_mode = 1; + uint32 room_id = 2; +} + +message RoomMember { + enum MemberPosition { + MEMBER_POSITION_NONE = 0; + NORMAL = 1; + LEADER = 2; + } + + uint32 uid = 1; + string region_name = 2; + string nickname = 3; + uint32 level = 4; + uint32 head_avatar_id = 5; + uint32 frame_id = 6; + uint32 dress_id = 7; + RoomMemberStatus status = 8; + RoomMember.MemberPosition position = 9; + bytes mode_bytes = 10; + uint32 custom_head_id = 11; + RoomClientStatus client_status = 12; + uint32 voice_id = 13; +} + +message RoomInfo { + uint32 sub_type = 1; + uint32 stage_id = 2; +} + +// CmdID: 3150 +message GetRoomDataReq { +} + +// CmdID: 3151 +message GetRoomDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetRoomDataRsp.Retcode retcode = 1; +} + +// CmdID: 3152 +message SyncRoomDataNotify { + PlayerRoomStatus player_room_status = 1; + repeated RoomMember member_list = 2; + RoomInfo room_info = 3; +} + +// CmdID: 3153 +message CreateRoomReq { + RoomMode room_mode = 1; + RoomMember member_data = 2; + RoomInfo room_info = 3; +} + +// CmdID: 3154 +message CreateRoomRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SERVER_BUSY = 2; + IS_IN_ROOM = 3; + NO_SCHEDULE = 4; + IS_IN_BATTLE = 5; + TOO_FREQUENT = 6; + PLAYER_LEVEL_LACK = 7; + ALREADY_IN_MP = 8; + EQUIPMENT_FULL = 9; + EQUIPMENT_MATERIAL_LIMIT = 10; + EQUIPMENT_FRAGMENT_LIMIT = 11; + FEATURE_LIMIT = 12; + TIMES_LACK = 13; + STAGE_NOT_IN_SCHEDULE = 14; + PUNISHED = 15; + PRE_REQUIRE_LIMIT = 16; + MAP_NOT_OPEN = 17; + FEATURE_CLOSED = 18; + } + + CreateRoomRsp.Retcode retcode = 1; + RoomMode room_mode = 2; +} + +// CmdID: 3155 +message EnterRoomReq { + RoomMode room_mode = 1; + uint32 room_id = 2; + RoomMember member_data = 3; + RoomInfo room_info = 4; +} + +// CmdID: 3156 +message EnterRoomRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SERVER_BUSY = 2; + IS_IN_ROOM = 3; + ROOM_NOT_EXIST = 4; + ROOM_FULL = 5; + ROOM_IN_MATCHING = 6; + IS_IN_BATTLE = 7; + TOO_FREQUENT = 8; + NO_SCHEDULE = 9; + PLAYER_LEVEL_LACK = 10; + ALREADY_IN_MP = 11; + EQUIPMENT_FULL = 12; + EQUIPMENT_MATERIAL_LIMIT = 13; + EQUIPMENT_FRAGMENT_LIMIT = 14; + FEATURE_LIMIT = 15; + PUNISHED = 16; + PRE_REQUIRE_LIMIT = 17; + MAP_NOT_OPEN = 18; + } + + EnterRoomRsp.Retcode retcode = 1; + RoomMode room_mode = 2; +} + +// CmdID: 3157 +message ExitRoomReq { +} + +// CmdID: 3158 +message ExitRoomRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ROOM = 2; + TOO_FREQUENT = 3; + } + + ExitRoomRsp.Retcode retcode = 1; +} + +// CmdID: 3159 +message ExitRoomNotify { + RoomExitReason reason = 1; +} + +// CmdID: 3160 +message InviteRoomReq { + uint32 target_uid = 1; +} + +// CmdID: 3161 +message InviteRoomRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ROOM = 2; + ROOM_IN_MATCHING = 3; + IS_IN_BATTLE = 4; + TOO_FREQUENT = 5; + INVITE_SELF = 6; + NO_SCHEDULE = 7; + } + + InviteRoomRsp.Retcode retcode = 1; +} + +// CmdID: 3162 +message RoomInvitationNotify { + uint32 target_uid = 1; + RoomMode room_mode = 2; + uint32 room_id = 3; + RoomMember from_player = 4; + RoomInfo room_info = 5; + uint32 chatworld_scene_id = 6; + uint32 chatworld_id = 7; +} + +// CmdID: 3163 +message SendRoomChatMsgNotify { + ChatMsg chat_msg = 1; + bool is_broadcast_msg = 2; + RoomMode room_mode = 3; + repeated uint32 target_uid_list = 4; +} + +// CmdID: 3164 +message RecvRoomChatMsgNotify { + RoomMode room_mode = 1; + ChatMsg chat_msg = 2; +} + +// CmdID: 3165 +message StartRoomMatchReq { + RoomMode room_mode = 1; +} + +// CmdID: 3166 +message StartRoomMatchRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TOO_FREQUENT = 2; + ALREADY_IN_MATCH = 3; + IS_IN_BATTLE = 4; + IN_CD = 5; + TIMES_LACK = 6; + STAGE_NOT_IN_SCHEDULE = 7; + IS_NOT_READY = 8; + NO_SCHEDULE = 9; + FEATURE_LIMIT = 10; + PUNISHED = 11; + } + + StartRoomMatchRsp.Retcode retcode = 1; + RoomMode room_mode = 2; +} + +// CmdID: 3167 +message CancelRoomMatchReq { +} + +// CmdID: 3168 +message CancelRoomMatchRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_MATCH = 2; + TOO_FREQUENT = 3; + } + + CancelRoomMatchRsp.Retcode retcode = 1; +} + +// CmdID: 3169 +message SyncRoomMatchDataNotify { + enum Reason { + SUCC = 0; + CANCEL = 1; + TIMEOUT = 2; + MATCH_SUCC = 3; + } + + RoomMode room_mode = 1; + bool is_in_matching = 2; + uint32 match_start_time = 3; + uint32 estimate_match_cost_time = 4; + SyncRoomMatchDataNotify.Reason reason = 5; +} + +// CmdID: 3170 +message RoomMatchTimeoutNotify { +} + +// CmdID: 3171 +message UpdateRoomInfoReq { + RoomInfo room_info = 1; +} + +// CmdID: 3172 +message UpdateRoomInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ROOM = 2; + IN_MATCH = 3; + NOT_LEADER = 4; + STAGE_NOT_IN_SCHEDULE = 5; + TOO_FREQUENT = 6; + } + + UpdateRoomInfoRsp.Retcode retcode = 1; +} + +// CmdID: 3173 +message RoomSwitchMemberStatusReq { + RoomMemberStatus status = 1; + RoomClientStatus client_status = 2; +} + +// CmdID: 3174 +message RoomSwitchMemberStatusRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + RoomSwitchMemberStatusRsp.Retcode retcode = 1; +} + +// CmdID: 3175 +message RoomKickMemberReq { + uint32 target_uid = 1; +} + +// CmdID: 3176 +message RoomKickMemberRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ROOM = 2; + NOT_LEADER = 3; + NO_TARGET = 4; + SELF = 5; + } + + RoomKickMemberRsp.Retcode retcode = 1; +} + +// CmdID: 3177 +message RoomTransferLeaderReq { + uint32 target_uid = 1; +} + +// CmdID: 3178 +message RoomTransferLeaderRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ROOM = 2; + NOT_LEADER = 3; + NO_TARGET = 4; + SELF = 5; + } + + RoomTransferLeaderRsp.Retcode retcode = 1; +} + +// CmdID: 3179 +message RoomMemberSetVoiceIdReq { + uint32 voice_id = 1; +} + +// CmdID: 3180 +message RoomMemberSetVoiceIdRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ROOM = 2; + } + + RoomMemberSetVoiceIdRsp.Retcode retcode = 1; + uint32 uid = 2; + uint32 voice_id = 3; +} + +// CmdID: 3181 +message RoomGetStatusReq { + uint32 room_id = 1; + RoomMember member_data = 2; +} + +// CmdID: 3182 +message RoomGetStatusRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TOO_FREQUENT = 2; + ROOM_NOT_EXIST = 3; + } + + RoomGetStatusRsp.Retcode retcode = 1; + PlayerRoomStatus player_room_status = 2; + repeated RoomMember member_list = 3; + RoomInfo room_info = 4; +} + +// CmdID: 3183 +message DismissRoomReq { +} + +// CmdID: 3184 +message DismissRoomRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ROOM = 2; + NOT_LEADER = 3; + } + + DismissRoomRsp.Retcode retcode = 1; +} + +enum CmdTypeRoom { + CMD_TYPE_ROOM_NONE = 0; + CMD_GET_ROOM_DATA_REQ = 3150; + CMD_GET_ROOM_DATA_RSP = 3151; + CMD_SYNC_ROOM_DATA_NOTIFY = 3152; + CMD_CREATE_ROOM_REQ = 3153; + CMD_CREATE_ROOM_RSP = 3154; + CMD_ENTER_ROOM_REQ = 3155; + CMD_ENTER_ROOM_RSP = 3156; + CMD_EXIT_ROOM_REQ = 3157; + CMD_EXIT_ROOM_RSP = 3158; + CMD_EXIT_ROOM_NOTIFY = 3159; + CMD_INVITE_ROOM_REQ = 3160; + CMD_INVITE_ROOM_RSP = 3161; + CMD_ROOM_INVITATION_NOTIFY = 3162; + CMD_SEND_ROOM_CHAT_MSG_NOTIFY = 3163; + CMD_RECV_ROOM_CHAT_MSG_NOTIFY = 3164; + CMD_START_ROOM_MATCH_REQ = 3165; + CMD_START_ROOM_MATCH_RSP = 3166; + CMD_CANCEL_ROOM_MATCH_REQ = 3167; + CMD_CANCEL_ROOM_MATCH_RSP = 3168; + CMD_SYNC_ROOM_MATCH_DATA_NOTIFY = 3169; + CMD_ROOM_MATCH_TIMEOUT_NOTIFY = 3170; + CMD_UPDATE_ROOM_INFO_REQ = 3171; + CMD_UPDATE_ROOM_INFO_RSP = 3172; + CMD_ROOM_SWITCH_MEMBER_STATUS_REQ = 3173; + CMD_ROOM_SWITCH_MEMBER_STATUS_RSP = 3174; + CMD_ROOM_KICK_MEMBER_REQ = 3175; + CMD_ROOM_KICK_MEMBER_RSP = 3176; + CMD_ROOM_TRANSFER_LEADER_REQ = 3177; + CMD_ROOM_TRANSFER_LEADER_RSP = 3178; + CMD_ROOM_MEMBER_SET_VOICE_ID_REQ = 3179; + CMD_ROOM_MEMBER_SET_VOICE_ID_RSP = 3180; + CMD_ROOM_GET_STATUS_REQ = 3181; + CMD_ROOM_GET_STATUS_RSP = 3182; + CMD_DISMISS_ROOM_REQ = 3183; + CMD_DISMISS_ROOM_RSP = 3184; +} + +enum RoomMemberStatus { + ROOM_MEMBER_STATUS_NONE = 0; + ROOM_UNREADY = 1; + ROOM_READY = 2; + ROOM_IN_BATTLE = 3; +} + +enum RoomClientStatus { + ROOM_CLIENT_NONE = 0; + ROOM_CLIENT_SELECTING_MAP = 1; + ROOM_CLIENT_EQUIPING = 2; +} + +enum RoomExitReason { + ROOM_EXIT_NONE = 0; + ROOM_EXIT_KICK = 1; + ROOM_EXIT_DISMISSED = 2; +} + +message RpgDungeonQuest { + uint32 id = 1; + repeated uint32 avatar_id_list = 2; +} + +message RpgDungeonBuff { + uint32 buff_id = 1; + uint32 buff_level = 2; +} + +message RpgDungeonBuffPool { + uint32 pool_id = 1; + uint32 left_times = 2; +} + +message RpgDungeonActivity { + uint32 id = 1; + repeated RpgDungeonQuest quest_list = 2; + repeated uint32 candidate_buff_id_list = 3; + repeated RpgDungeonBuff buff_list = 4; + repeated RpgDungeonBuffPool pool_list = 5; +} + +// CmdID: 5500 +message RpgDungeonGetActivityReq { + uint32 dungeon_id = 1; +} + +// CmdID: 5501 +message RpgDungeonGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + RpgDungeonGetActivityRsp.Retcode retcode = 1; + RpgDungeonActivity activity = 2; + uint32 dungeon_id = 3; +} + +// CmdID: 5502 +message RpgDungeonSelectQuestReq { + uint32 dungeon_id = 1; + uint32 quest_id = 2; + repeated uint32 avatar_id_list = 3; +} + +// CmdID: 5503 +message RpgDungeonSelectQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_MEET_TAG = 2; + AVATAR_NOT_EXIST = 3; + LOCKED = 4; + SELECTED = 5; + } + + RpgDungeonSelectQuestRsp.Retcode retcode = 1; + uint32 dungeon_id = 2; +} + +// CmdID: 5504 +message RpgDungeonGetCandidateBuffReq { + uint32 dungeon_id = 1; + uint32 pool_id = 2; +} + +// CmdID: 5505 +message RpgDungeonGetCandidateBuffRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_SELECT = 2; + NO_LEFT_TIMES = 3; + } + + RpgDungeonGetCandidateBuffRsp.Retcode retcode = 1; + uint32 dungeon_id = 2; + uint32 pool_id = 3; + repeated uint32 buff_id_list = 4; +} + +// CmdID: 5506 +message RpgDungeonSelectBuffReq { + uint32 dungeon_id = 1; + uint32 buff_id = 2; +} + +// CmdID: 5507 +message RpgDungeonSelectBuffRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_CANDIDATE = 2; + } + + RpgDungeonSelectBuffRsp.Retcode retcode = 1; + uint32 dungeon_id = 2; +} + +enum CmdTypeRpgdungeon { + CMD_TYPE_RPGDUNGEON_NONE = 0; + CMD_RPG_DUNGEON_GET_ACTIVITY_REQ = 5500; + CMD_RPG_DUNGEON_GET_ACTIVITY_RSP = 5501; + CMD_RPG_DUNGEON_SELECT_QUEST_REQ = 5502; + CMD_RPG_DUNGEON_SELECT_QUEST_RSP = 5503; + CMD_RPG_DUNGEON_GET_CANDIDATE_BUFF_REQ = 5504; + CMD_RPG_DUNGEON_GET_CANDIDATE_BUFF_RSP = 5505; + CMD_RPG_DUNGEON_SELECT_BUFF_REQ = 5506; + CMD_RPG_DUNGEON_SELECT_BUFF_RSP = 5507; +} + +// CmdID: 2300 +message GetRpgTaleReq { + uint32 tale_id = 1; + bool is_all = 2; +} + +message RpgTaleProgress { + uint32 id = 1; + uint32 progress = 2; +} + +message RpgTaleSite { + uint32 site_id = 1; + uint32 area_id = 2; + RpgTaleSiteStatus status = 3; + RpgTaleSiteContentType content_type = 4; + string content_param = 5; + repeated uint32 finished_matrix_event_id_list = 6; + uint32 event_type = 7; + uint32 event_param = 8; + RpgTaleProgress cur_progress = 9; + uint32 pass_times = 10; + uint32 status_end_time = 11; + uint32 close_time = 12; + repeated RpgTaleFlag unlock_limit_flag_list = 13; +} + +message RpgTaleOverall { + uint32 overall_id = 1; + uint32 value = 2; +} + +message RpgTaleArea { + uint32 area_id = 1; +} + +message RpgTaleStageScoreDrop { + uint32 total_num = 1; + uint32 daily_num = 2; +} + +message RpgTaleTotalScoreDrop { + uint32 material_id = 1; + uint32 daily_num = 2; + uint32 total_num = 3; +} + +message RpgTaleStage { + uint32 stage_id = 1; + uint32 max_floor = 2; + uint32 max_score = 3; + RpgTaleStageScoreDrop score_drop = 5; +} + +message CurRpgTaleStage { + uint32 stage_id = 1; + uint32 cur_floor = 2; + repeated uint32 avatar_list = 3; + string client_data = 4; +} + +message RpgTaleAbility { + uint32 ability_id = 1; + uint32 ability_level = 2; +} + +message RpgTaleStageEnterTimesLimit { + uint32 limit_id = 1; + uint32 enter_times = 2; +} + +message RpgTaleQAvatarSettleGotMaterial { + uint32 material_id = 1; + uint32 material_num = 2; +} + +message RpgTaleQAvatarBattle { + uint32 cur_score = 1; + uint32 has_take_reward_score = 2; + uint32 choose_virtual_avatar_id = 3; + uint32 win_num = 4; + uint32 win_streak = 5; + uint32 virtual_avatar_drop_num = 6; + repeated RpgTaleQAvatarSettleGotMaterial got_material_list = 7; +} + +message RpgTaleData { + uint32 tale_id = 1; + repeated RpgTaleSite site_list = 2; + uint32 cur_site_id = 3; + repeated uint32 reward_taken_collection_count_list = 4; + uint32 end_time = 5; + repeated uint32 finished_event_id_list = 8; + repeated RpgTaleArea area_list = 9; + repeated RpgTaleOverall overall_list = 10; + uint32 schedule_id = 11; + repeated RpgTaleStage stage_list = 12; + repeated RpgTaleTotalScoreDrop total_score_drop_list = 13; + repeated RpgTaleAbility ability_list = 14; + uint32 site_refresh_num = 15; + uint32 last_reset_site_refresh_num_time = 16; + RpgTaleQAvatarBattle qavatar_battle = 17; + repeated RpgTaleStageEnterTimesLimit stage_enter_times_limit_list = 18; + repeated uint32 finished_mission_group_list = 19; + uint32 timed_end_time = 20; +} + +// CmdID: 2301 +message GetRpgTaleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetRpgTaleRsp.Retcode retcode = 1; + uint32 tale_id = 2; + bool is_all = 12; + repeated RpgTaleData rpg_tale_list = 13; +} + +// CmdID: 2302 +message SyncRpgTaleSiteNotify { + repeated RpgTaleSite site_list = 1; + uint32 tale_id = 3; +} + +// CmdID: 2303 +message EnterRpgTaleSiteReq { + uint32 site_id = 1; + uint32 tale_id = 2; +} + +// CmdID: 2304 +message EnterRpgTaleSiteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_PASS_CUR_SITE = 2; + SITE_LOCKED = 3; + } + + EnterRpgTaleSiteRsp.Retcode retcode = 1; + uint32 site_id = 2; + uint32 tale_id = 3; +} + +// CmdID: 2305 +message FinishRpgTalePlotReq { + uint32 plot_id = 1; + uint32 dialog_id = 2; + uint32 tale_id = 3; +} + +// CmdID: 2306 +message FinishRpgTalePlotRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + FinishRpgTalePlotRsp.Retcode retcode = 1; + uint32 plot_id = 2; + uint32 dialog_id = 3; + uint32 tale_id = 4; +} + +// CmdID: 2307 +message UnlockRpgTaleSiteReq { + uint32 site_id = 1; + uint32 tale_id = 2; + bool is_only_check = 3; +} + +message RpgTaleFlag { + RpgTaleFlagType type = 1; + repeated uint32 param_list = 2; +} + +// CmdID: 2308 +message UnlockRpgTaleSiteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + UNLOCKED = 2; + MATERIAL_NOT_ENOUGH = 3; + FLAG_LIMIT = 4; + } + + UnlockRpgTaleSiteRsp.Retcode retcode = 1; + uint32 site_id = 2; + uint32 tale_id = 5; + repeated RpgTaleFlag limit_flag_list = 6; + bool is_only_check = 7; +} + +// CmdID: 2309 +message TakeRpgTaleCollectionRewardReq { + uint32 tale_id = 1; +} + +// CmdID: 2310 +message TakeRpgTaleCollectionRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NUM_LACK = 2; + NO_REWARD = 3; + TIME_LIMIT = 4; + HAVE_TAKE = 5; + } + + TakeRpgTaleCollectionRewardRsp.Retcode retcode = 1; + repeated uint32 collection_count_list = 2; + repeated RewardData reward_data_list = 3; + repeated uint32 reward_taken_collection_count_list = 4; + uint32 tale_id = 5; +} + +message RpgTaleEvent { + uint32 event_id = 1; + uint32 event_type = 2; + repeated uint32 event_param_list = 3; + RewardData reward_data = 4; +} + +// CmdID: 2312 +message RpgTaleEventNotify { + RpgTaleEvent event_data = 1; + uint32 tale_id = 2; +} + +// CmdID: 2313 +message TriggerRpgTaleEventReq { + uint32 tale_id = 2; + repeated uint32 content_id_list = 3; +} + +// CmdID: 2314 +message TriggerRpgTaleEventRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_EVENT = 2; + } + + TriggerRpgTaleEventRsp.Retcode retcode = 1; + uint32 tale_id = 2; +} + +// CmdID: 2315 +message CheckRpgTaleStageTriggerReq { + repeated uint32 trigger_list = 1; + uint32 tale_id = 2; +} + +// CmdID: 2316 +message CheckRpgTaleStageTriggerRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + CheckRpgTaleStageTriggerRsp.Retcode retcode = 1; + repeated uint32 show_trigger_list = 2; + uint32 tale_id = 3; +} + +// CmdID: 2317 +message TriggerRpgTaleStageEventReq { + uint32 trigger_id = 1; + uint32 tale_id = 2; +} + +// CmdID: 2318 +message TriggerRpgTaleStageEventRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + TriggerRpgTaleStageEventRsp.Retcode retcode = 1; + RpgTaleEvent event_data = 2; + uint32 tale_id = 3; +} + +message MatrixGridPos { + uint32 x = 1; + uint32 y = 2; +} + +message MatrixFloorBriefInfo { + uint32 floor_id = 1; + MatrixFloorStatus floor_status = 2; +} + +// CmdID: 2320 +message GetMatrixReq { +} + +// CmdID: 2321 +message GetMatrixRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetMatrixRsp.Retcode retcode = 1; + repeated MatrixFloorBriefInfo floor_brief_info_list = 2; + uint32 cur_floor_id = 3; +} + +// CmdID: 2322 +message GetMatrixFloorReq { + uint32 floor_id = 1; +} + +message MatrixGrid { + MatrixGridPos pos = 1; + MatrixGridType type = 2; + uint32 grid_id = 3; + uint32 event_id = 4; +} + +message MatrixLottery { + uint32 lottery_id = 1; + uint32 lottery_num = 2; + uint32 left_step = 3; +} + +message MatrixBuff { + uint32 buff_id = 1; + uint32 buff_type = 2; + uint32 buff_para_int = 3; +} + +message MatrixFloorMapInfo { + uint32 floor_id = 1; + repeated MatrixGrid grid_list = 2; + uint32 width = 3; + uint32 height = 4; + uint32 map_id = 5; + MatrixGridPos current_pos = 6; + repeated MatrixGrid event_grid_list = 7; + uint32 step_num = 8; + uint32 dice_point = 9; + repeated MatrixLottery lottery_list = 10; + repeated MatrixBuff buff_list = 11; +} + +// CmdID: 2323 +message GetMatrixFloorRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetMatrixFloorRsp.Retcode retcode = 1; + MatrixFloorBriefInfo floor_brief_info = 2; + MatrixFloorMapInfo floor_map_info = 3; +} + +// CmdID: 2324 +message MatrixEnterReq { + uint32 floor_id = 1; +} + +// CmdID: 2325 +message MatrixEnterRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + MatrixEnterRsp.Retcode retcode = 1; +} + +message MatrixAdvancePath { + MatrixGridPos path_from = 1; + MatrixGridPos path_to = 2; +} + +// CmdID: 2326 +message MatrixAdvanceReq { + MatrixGridPos from_pos = 1; + MatrixGridPos to_pos = 2; + repeated MatrixAdvancePath path_list = 3; +} + +// CmdID: 2327 +message MatrixAdvanceRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + PATH_NOT_VALID = 2; + IN_FLOOR_EVENT = 3; + } + + MatrixAdvanceRsp.Retcode retcode = 1; + MatrixGridPos cur_pos = 2; + repeated MatrixGridPos pos_list = 3; +} + +// CmdID: 2328 +message SyncMatrixFloorNotify { + uint32 floor_id = 1; + MatrixFloorBriefInfo floor_brief_info = 2; + MatrixFloorMapInfo floor_map_info = 3; +} + +// CmdID: 2329 +message SyncMatrixNotify { + repeated MatrixFloorBriefInfo floor_brief_info_list = 1; + uint32 cur_floor_id = 2; +} + +// CmdID: 2330 +message MatrixTriggerEventReq { + MatrixGridPos pos = 1; + uint32 event_id = 2; +} + +// CmdID: 2331 +message MatrixTriggerEventRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + POS_INVALID = 2; + EVENT_NOT_EXIST = 3; + IN_FLOOR_EVENT = 4; + } + + MatrixTriggerEventRsp.Retcode retcode = 1; +} + +// CmdID: 2332 +message MatrixCancelEventReq { +} + +// CmdID: 2333 +message MatrixCancelEventRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + MatrixCancelEventRsp.Retcode retcode = 1; +} + +// CmdID: 2334 +message SyncMatrixCurEventNotify { + MatrixGridPos pos = 1; + uint32 event_id = 2; + uint32 real_event_param = 3; +} + +// CmdID: 2335 +message MatrixEventFinishNotify { + MatrixGridPos pos = 1; + uint32 event_id = 2; + RewardData reward_data = 3; + MatrixEventType display_type = 4; + uint32 display_id = 5; +} + +// CmdID: 2336 +message FinishMatrixEventPlotReq { + uint32 plot_id = 1; + uint32 dialog_id = 2; +} + +// CmdID: 2337 +message FinishMatrixEventPlotRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + FinishMatrixEventPlotRsp.Retcode retcode = 1; + uint32 plot_id = 2; + uint32 dialog_id = 3; +} + +// CmdID: 2338 +message MatrixTeleportNotify { + MatrixGridPos from_pos = 1; + MatrixGridPos to_pos = 2; +} + +// CmdID: 2339 +message MatrixMoveObjectReq { + MatrixGridPos pos = 1; + uint32 event_id = 2; +} + +// CmdID: 2340 +message MatrixMoveObjectRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + POS_INVALID = 2; + OBJECT_NOT_EXIST = 3; + BLOCK = 4; + IN_FLOOR_EVENT = 5; + } + + MatrixMoveObjectRsp.Retcode retcode = 1; + repeated MatrixGridPos pos_list = 2; + uint32 event_id = 3; +} + +// CmdID: 2341 +message MatrixResetFloorReq { +} + +// CmdID: 2342 +message MatrixResetFloorRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + MatrixResetFloorRsp.Retcode retcode = 1; +} + +// CmdID: 2343 +message MatrixSettleFloorEventReq { +} + +// CmdID: 2344 +message MatrixSettleFloorEventRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + MatrixSettleFloorEventRsp.Retcode retcode = 1; +} + +// CmdID: 2345 +message MatrixThrowDiceReq { + DiceType dice_type = 1; + uint32 dice_point = 2; +} + +// CmdID: 2346 +message MatrixThrowDiceRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_DICE = 2; + IN_FLOOR_EVENT = 3; + WAIT_CHOOSE = 4; + HAVE_EVENT = 5; + LACK_DICE = 6; + } + + MatrixThrowDiceRsp.Retcode retcode = 1; + DiceType dice_type = 2; + uint32 dice_point = 3; + uint32 bonus_dice_point = 4; +} + +// CmdID: 2347 +message MatrixSetDiceDestinationReq { + MatrixGridPos target_pos = 1; +} + +// CmdID: 2348 +message MatrixSetDiceDestinationRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_PATH = 2; + } + + MatrixSetDiceDestinationRsp.Retcode retcode = 1; + MatrixGridPos target_pos = 2; +} + +// CmdID: 2349 +message MatrixGuessFingerReq { + MatrixFingerType finger_type = 1; +} + +// CmdID: 2350 +message MatrixGuessFingerRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_WIN = 2; + } + + MatrixGuessFingerRsp.Retcode retcode = 1; + MatrixFingerType player_finger_type = 2; + MatrixFingerType robot_finger_type = 3; + RewardData reward_data = 4; +} + +// CmdID: 2351 +message MatrixSetLotteryNumReq { + uint32 lottery_num = 1; +} + +// CmdID: 2352 +message MatrixSetLotteryNumRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + MatrixSetLotteryNumRsp.Retcode retcode = 1; +} + +// CmdID: 2353 +message MatrixLotteryDrawNotify { + MatrixLottery lottery = 1; + uint32 win_num = 2; + RewardData reward_data = 3; +} + +// CmdID: 2370 +message FinishRpgTaleStagePlotReq { + uint32 plot_id = 1; + uint32 dialog_id = 2; + uint32 tale_id = 3; +} + +// CmdID: 2371 +message FinishRpgTaleStagePlotRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + FinishRpgTaleStagePlotRsp.Retcode retcode = 1; + uint32 plot_id = 2; + uint32 dialog_id = 3; + uint32 tale_id = 4; +} + +// CmdID: 2374 +message ReportRpgTaleStageReq { + uint32 stage_id = 1; + uint32 cur_floor = 2; + string client_data = 3; + uint32 tale_id = 4; + uint32 score = 5; + repeated uint32 monster_unique_id_list = 6; + repeated uint32 monster_card_unique_id_list = 7; +} + +// CmdID: 2375 +message ReportRpgTaleStageRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ReportRpgTaleStageRsp.Retcode retcode = 1; + uint32 stage_id = 2; + uint32 cur_floor = 3; + uint32 tale_id = 4; + uint32 score = 5; +} + +// CmdID: 2376 +message RpgTaleSweepReq { + uint32 stage_id = 1; + uint32 times = 2; + uint32 tale_id = 3; +} + +// CmdID: 2377 +message RpgTaleSweepRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LACK_MATERIAL = 2; + STAGE_ERROR = 3; + NO_REWARD = 4; + ENTER_TIMES_LACK = 5; + CHALLENGE_NUM_LACK = 6; + } + + RpgTaleSweepRsp.Retcode retcode = 1; + uint32 stage_id = 2; + uint32 times = 3; + RewardData reward_data = 4; + uint32 tale_id = 5; + uint32 max_floor = 6; +} + +// CmdID: 2378 +message GetRpgTaleFileReq { + uint32 tale_id = 1; +} + +// CmdID: 2379 +message GetRpgTaleFileRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetRpgTaleFileRsp.Retcode retcode = 1; + uint32 tale_id = 2; + repeated uint32 file_id_list = 3; +} + +// CmdID: 2380 +message RpgTaleRefreshTicketReq { + uint32 tale_id = 1; +} + +message RpgTaleTicketRefreshInfo { + uint32 ticket_id = 1; + uint32 material_id = 2; + uint32 add_num = 3; +} + +// CmdID: 2381 +message RpgTaleRefreshTicketRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + RpgTaleRefreshTicketRsp.Retcode retcode = 1; + uint32 tale_id = 2; + repeated RpgTaleTicketRefreshInfo ticket_refresh_list = 3; +} + +// CmdID: 2382 +message RpgTaleLevelUpAbilityReq { + uint32 tale_id = 1; + uint32 ability_id = 2; + uint32 target_level = 3; +} + +// CmdID: 2383 +message RpgTaleLevelUpAbilityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TARGET_LEVEL_ERROR = 2; + MATERIAL_LACK = 3; + FLAG_LIMIT = 4; + ABILITY_ERROR = 5; + } + + RpgTaleLevelUpAbilityRsp.Retcode retcode = 1; + uint32 tale_id = 2; + uint32 ability_id = 3; + repeated RpgTaleFlag limit_flag_list = 4; +} + +// CmdID: 2384 +message RpgTaleResetTowerReq { + uint32 tale_id = 1; +} + +// CmdID: 2385 +message RpgTaleResetTowerRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + RpgTaleResetTowerRsp.Retcode retcode = 1; + uint32 tale_id = 2; +} + +// CmdID: 2386 +message RpgTaleSetOverallReq { + uint32 tale_id = 1; + uint32 overall_id = 2; + uint32 value = 3; +} + +// CmdID: 2387 +message RpgTaleSetOverallRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + RpgTaleSetOverallRsp.Retcode retcode = 1; + uint32 tale_id = 2; + uint32 overall_id = 3; +} + +// CmdID: 2388 +message RpgTaleRefreshSiteReq { + uint32 tale_id = 1; +} + +// CmdID: 2389 +message RpgTaleRefreshSiteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HCOIN_LACK = 2; + MATERIAL_LACK = 3; + REFRESH_TIME_LACK = 4; + SITE_NOT_FINISH = 5; + } + + RpgTaleRefreshSiteRsp.Retcode retcode = 1; + uint32 tale_id = 2; +} + +// CmdID: 2390 +message RpgTaleSetPvpVirtualAvatarReq { + uint32 tale_id = 1; + uint32 virtual_avatar_id = 2; +} + +// CmdID: 2391 +message RpgTaleSetPvpVirtualAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_NOT_EXIST = 2; + } + + RpgTaleSetPvpVirtualAvatarRsp.Retcode retcode = 1; + uint32 tale_id = 2; + uint32 virtual_avatar_id = 3; +} + +// CmdID: 2392 +message RpgTaleGetPvpDivisionRewardReq { + uint32 tale_id = 1; +} + +// CmdID: 2393 +message RpgTaleGetPvpDivisionRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ALREADY_TAKEN = 2; + } + + RpgTaleGetPvpDivisionRewardRsp.Retcode retcode = 1; + uint32 tale_id = 2; + RewardData reward_data = 3; +} + +// CmdID: 2394 +message RpgTaleGetStageScoreRankReq { + uint32 tale_id = 1; + uint32 stage_id = 2; +} + +// CmdID: 2395 +message RpgTaleGetStageScoreRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TALE_ERROR = 2; + STAGE_ERROR = 3; + } + + RpgTaleGetStageScoreRankRsp.Retcode retcode = 1; + uint32 tale_id = 2; + uint32 stage_id = 3; + RankShowData rank_data = 4; + uint32 percent = 5; +} + +// CmdID: 2396 +message RpgTaleFinishMissionGroupNotify { + uint32 tale_id = 1; + uint32 mission_group_id = 2; + RewardData reward_data = 3; +} + +enum CmdTypeRpgtale { + CMD_TYPE_RPGTALE_NONE = 0; + CMD_GET_RPG_TALE_REQ = 2300; + CMD_GET_RPG_TALE_RSP = 2301; + CMD_SYNC_RPG_TALE_SITE_NOTIFY = 2302; + CMD_ENTER_RPG_TALE_SITE_REQ = 2303; + CMD_ENTER_RPG_TALE_SITE_RSP = 2304; + CMD_FINISH_RPG_TALE_PLOT_REQ = 2305; + CMD_FINISH_RPG_TALE_PLOT_RSP = 2306; + CMD_UNLOCK_RPG_TALE_SITE_REQ = 2307; + CMD_UNLOCK_RPG_TALE_SITE_RSP = 2308; + CMD_TAKE_RPG_TALE_COLLECTION_REWARD_REQ = 2309; + CMD_TAKE_RPG_TALE_COLLECTION_REWARD_RSP = 2310; + CMD_RPG_TALE_EVENT_NOTIFY = 2312; + CMD_TRIGGER_RPG_TALE_EVENT_REQ = 2313; + CMD_TRIGGER_RPG_TALE_EVENT_RSP = 2314; + CMD_CHECK_RPG_TALE_STAGE_TRIGGER_REQ = 2315; + CMD_CHECK_RPG_TALE_STAGE_TRIGGER_RSP = 2316; + CMD_TRIGGER_RPG_TALE_STAGE_EVENT_REQ = 2317; + CMD_TRIGGER_RPG_TALE_STAGE_EVENT_RSP = 2318; + CMD_GET_MATRIX_REQ = 2320; + CMD_GET_MATRIX_RSP = 2321; + CMD_GET_MATRIX_FLOOR_REQ = 2322; + CMD_GET_MATRIX_FLOOR_RSP = 2323; + CMD_MATRIX_ENTER_REQ = 2324; + CMD_MATRIX_ENTER_RSP = 2325; + CMD_MATRIX_ADVANCE_REQ = 2326; + CMD_MATRIX_ADVANCE_RSP = 2327; + CMD_SYNC_MATRIX_FLOOR_NOTIFY = 2328; + CMD_SYNC_MATRIX_NOTIFY = 2329; + CMD_MATRIX_TRIGGER_EVENT_REQ = 2330; + CMD_MATRIX_TRIGGER_EVENT_RSP = 2331; + CMD_MATRIX_CANCEL_EVENT_REQ = 2332; + CMD_MATRIX_CANCEL_EVENT_RSP = 2333; + CMD_SYNC_MATRIX_CUR_EVENT_NOTIFY = 2334; + CMD_MATRIX_EVENT_FINISH_NOTIFY = 2335; + CMD_FINISH_MATRIX_EVENT_PLOT_REQ = 2336; + CMD_FINISH_MATRIX_EVENT_PLOT_RSP = 2337; + CMD_MATRIX_TELEPORT_NOTIFY = 2338; + CMD_MATRIX_MOVE_OBJECT_REQ = 2339; + CMD_MATRIX_MOVE_OBJECT_RSP = 2340; + CMD_MATRIX_RESET_FLOOR_REQ = 2341; + CMD_MATRIX_RESET_FLOOR_RSP = 2342; + CMD_MATRIX_SETTLE_FLOOR_EVENT_REQ = 2343; + CMD_MATRIX_SETTLE_FLOOR_EVENT_RSP = 2344; + CMD_MATRIX_THROW_DICE_REQ = 2345; + CMD_MATRIX_THROW_DICE_RSP = 2346; + CMD_MATRIX_SET_DICE_DESTINATION_REQ = 2347; + CMD_MATRIX_SET_DICE_DESTINATION_RSP = 2348; + CMD_MATRIX_GUESS_FINGER_REQ = 2349; + CMD_MATRIX_GUESS_FINGER_RSP = 2350; + CMD_MATRIX_SET_LOTTERY_NUM_REQ = 2351; + CMD_MATRIX_SET_LOTTERY_NUM_RSP = 2352; + CMD_MATRIX_LOTTERY_DRAW_NOTIFY = 2353; + CMD_FINISH_RPG_TALE_STAGE_PLOT_REQ = 2370; + CMD_FINISH_RPG_TALE_STAGE_PLOT_RSP = 2371; + CMD_REPORT_RPG_TALE_STAGE_REQ = 2374; + CMD_REPORT_RPG_TALE_STAGE_RSP = 2375; + CMD_RPG_TALE_SWEEP_REQ = 2376; + CMD_RPG_TALE_SWEEP_RSP = 2377; + CMD_GET_RPG_TALE_FILE_REQ = 2378; + CMD_GET_RPG_TALE_FILE_RSP = 2379; + CMD_RPG_TALE_REFRESH_TICKET_REQ = 2380; + CMD_RPG_TALE_REFRESH_TICKET_RSP = 2381; + CMD_RPG_TALE_LEVEL_UP_ABILITY_REQ = 2382; + CMD_RPG_TALE_LEVEL_UP_ABILITY_RSP = 2383; + CMD_RPG_TALE_RESET_TOWER_REQ = 2384; + CMD_RPG_TALE_RESET_TOWER_RSP = 2385; + CMD_RPG_TALE_SET_OVERALL_REQ = 2386; + CMD_RPG_TALE_SET_OVERALL_RSP = 2387; + CMD_RPG_TALE_REFRESH_SITE_REQ = 2388; + CMD_RPG_TALE_REFRESH_SITE_RSP = 2389; + CMD_RPG_TALE_SET_PVP_VIRTUAL_AVATAR_REQ = 2390; + CMD_RPG_TALE_SET_PVP_VIRTUAL_AVATAR_RSP = 2391; + CMD_RPG_TALE_GET_PVP_DIVISION_REWARD_REQ = 2392; + CMD_RPG_TALE_GET_PVP_DIVISION_REWARD_RSP = 2393; + CMD_RPG_TALE_GET_STAGE_SCORE_RANK_REQ = 2394; + CMD_RPG_TALE_GET_STAGE_SCORE_RANK_RSP = 2395; + CMD_RPG_TALE_FINISH_MISSION_GROUP_NOTIFY = 2396; +} + +enum RpgTaleSiteContentType { + RPG_TALE_SITE_CONTENT_INVALID = 0; + RPG_TALE_SITE_CONTENT_NONE = 1; + RPG_TALE_SITE_CONTENT_MATRIX = 2; + RPG_TALE_SITE_CONTENT_PLOT = 3; + RPG_TALE_SITE_CONTENT_TIPS = 4; + RPG_TALE_SITE_CONTENT_LINK = 5; +} + +enum RpgTaleFlagType { + RPG_TALE_FLAG_INVALID = 0; + RPG_TALE_FLAG_MATERIAL = 1; + RPG_TALE_FLAG_MISSION = 2; + RPG_TALE_FLAG_DIALOG = 3; + RPG_TALE_FLAG_ROLE = 4; + RPG_TALE_FLAG_ROLE_STAR_NUM = 5; + RPG_TALE_FLAG_BEGIN_TIME = 6; + RPG_TALE_FLAG_END_TIME = 7; + RPG_TALE_FLAG_PRE_SITE = 8; + RPG_TALE_FLAG_MATERIAL_NUM = 9; + RPG_TALE_FLAG_AVATAR = 10; + RPG_TALE_FLAG_STAGE_CHALLENGE_NUM = 11; + RPG_TALE_FLAG_PLAYER_LEVEL = 12; + RPG_TALE_FLAG_OVERALL = 13; + RPG_TALE_FLAG_TOTAL_STAGE_SCORE = 15; + RPG_TALE_FLAG_STAGE_SCORE = 16; + RPG_TALE_FLAG_ABILITY_LEVEL = 17; + RPG_TALE_FLAG_ABILITY_TOTAL_LEVEL = 18; + RPG_TALE_FLAG_SITE_ALLOW_ENTER = 19; + RPG_TALE_FLAG_SITE_STATUS = 20; + RPG_TALE_FLAG_DROP_LIMIT = 21; + RPG_TALE_FLAG_IS_STAGE_PASSED = 22; + RPG_TALE_FLAG_REWARD_LINE_SCORE = 23; +} + +enum RpgTaleOverallCmpType { + RPG_TALE_CMP_INVALID = 0; + RPG_TALE_CMP_LESS = 1; + RPG_TALE_CMP_LESS_OR_EQUAL = 2; + RPG_TALE_CMP_EQUAL = 3; + RPG_TALE_CMP_GREATER = 4; + RPG_TALE_CMP_GREATER_OR_EQUAL = 5; +} + +enum RpgTaleSiteStatus { + RPG_TALE_SITE_STATUS_INVALID = 0; + RPG_TALE_SITE_STATUS_HIDE = 1; + RPG_TALE_SITE_STATUS_SHOW = 2; + RPG_TALE_SITE_STATUS_CONTENT_UNLOCKED = 3; + RPG_TALE_SITE_STATUS_PASSED = 4; + RPG_TALE_SITE_STATUS_CLOSED = 5; + RPG_TALE_SITE_STATUS_CD = 6; + RPG_TALE_SITE_STATUS_DISCARD = 7; +} + +enum RpgTaleRoleStatus { + RPG_TALE_ROLE_STATUS_INVALID = 0; + RPG_TALE_ROLE_STATUS_LOCKED = 1; + RPG_TALE_ROLE_STATUS_UNLOCKED = 2; + RPG_TALE_ROLE_STATUS_AWAY = 3; +} + +enum RpgTaleCollectionRewardType { + RPG_TALE_COLLECTION_REWARD_NONE = 0; + RPG_TALE_COLLECTION_REWARD_QAVATAR_STAR = 1; + RPG_TALE_COLLECTION_REWARD_EVENT = 2; + RPG_TALE_COLLECTION_REWARD_SHOP = 3; + RPG_TALE_COLLECTION_REWARD_TOTAL_STAGE_SCORE = 4; + RPG_TALE_COLLECTION_REWARD_STAGE_CHALLENGE_NUM = 5; + RPG_TALE_COLLECTION_REWARD_LINKED_ACTIVITY_SCORE = 6; + RPG_TALE_COLLECTION_REWARD_STAGE_SCORE = 7; + RPG_TALE_COLLECTION_REWARD_MATERIAL_NUM = 8; +} + +enum RpgTaleLinkedActivityType { + RPG_TALE_LINKED_NONE = 0; + RPG_TALE_LINKED_NEWBIE = 2; + RPG_TALE_LINKED_RPG_DUNGEON = 3; + RPG_TALE_LINKED_RANCH = 4; + RPG_TALE_LINKED_RESTAURANT = 5; + RPG_TALE_LINKED_TOWN = 6; + RPG_TALE_LINKED_MONSTER_CARD = 7; + RPG_TALE_LINKED_DICEY_DUNGEON = 8; + RPG_TALE_LINKED_PVZ = 9; + RPG_TALE_LINKED_QCANDY_BATTLE = 10; + RPG_TALE_LINKED_GLOBAL_EXPLORE = 11; + RPG_TALE_LINKED_PLATFORM_SHOOTER = 12; + RPG_TALE_LINKED_AVATAR_CULTIVATE = 13; + RPG_TALE_LINKED_SUSANNA_TRIAL = 14; + RPG_TALE_LINKED_MATCH_THREE = 15; + RPG_TALE_LINKED_SHIGURE_KIRA = 16; + RPG_TALE_LINKED_MAHOU_CARD = 17; + RPG_TALE_LINKED_TILED_GAME_LUNA = 18; + RPG_TALE_LINKED_TILED_GAME_FARM = 19; + RPG_TALE_LINKED_MINION_CLASH = 20; + RPG_TALE_LINKED_MARBLES_SHOOT = 21; + RPG_TALE_LINKED_GOURMET_HUNT = 22; + RPG_TALE_LINKED_MATCH_THREE_PLUS = 23; + RPG_TALE_LINKED_DEVIL_AUTO_CHESS = 24; + RPG_TALE_LINKED_TILED_GAME_SRPG = 25; + RPG_TALE_LINKED_QRTS = 26; + RPG_TALE_LINKED_MONSTER_CARD_PVP = 27; + RPG_TALE_LINKED_MONSTER_FARM = 28; + RPG_TALE_LINKED_TILED_GAME_PRPG = 29; + RPG_TALE_LINKED_MONSTER_MORPH = 30; + RPG_TALE_LINKED_KIANA_AUTO_CHESS = 31; + RPG_TALE_LINKED_TILED_GAME_INN = 32; + RPG_TALE_LINKED_TOWER_DEFENSE = 33; +} + +enum RpgScheduleRankType { + RPG_SCHEDULE_RANK_TYPE_NONE = 0; + RPG_SCHEDULE_RANK_COLLECTION = 1; + RPG_SCHEDULE_RANK_GENERAL = 2; +} + +enum RpgTaleStageRankType { + RPG_TALE_STAGE_RANK_TYPE_NONE = 0; + RPG_TALE_STAGE_RANK_TYPE_MINI = 1; + RPG_TALE_STAGE_RANK_TYPE_NORMAL = 2; +} + +enum RpgTaleStageRankKeyType { + RPG_TALE_STAGE_RANK_KEY_TYPE_NONE = 0; + RPG_TALE_STAGE_RANK_KEY_TYPE_SCHEDULE = 1; + RPG_TALE_STAGE_RANK_KEY_TYPE_TALE = 2; +} + +enum RpgTaleOverallRefreshType { + RPG_TALE_OVERALL_REFRESH_NONE = 0; + RPG_TALE_OVERALL_REFRESH_DAILY = 1; + RPG_TALE_OVERALL_REFRESH_WEEKLY = 2; +} + +enum RpgTaleProgressType { + RPG_TALE_PROGRESS_NONE = 0; + RPG_TALE_PROGRESS_EVENT = 1; + RPG_TALE_PROGRESS_TOWER = 2; + RPG_TALE_PROGRESS_GENERAL_ACTIVITY = 3; + RPG_TALE_PROGRESS_STAGE_SCORE = 4; +} + +enum MatrixFloorStatus { + MATRIX_FLOOR_STATUS_INVALID = 0; + MATRIX_FLOOR_STATUS_LOCKED = 1; + MATRIX_FLOOR_STATUS_UNLOCKED = 2; + MATRIX_FLOOR_STATUS_FREE = 3; + MATRIX_FLOOR_STATUS_IN_STAGE = 11; + MATRIX_FLOOR_STATUS_IN_PLOT = 12; +} + +enum MatrixFloorType { + MATRIX_FLOOR_INVALID = 0; + MATRIX_FLOOR_NORMAL = 1; + MATRIX_FLOOR_EXPLORE = 2; + MATRIX_FLOOR_MONOPOLY = 3; +} + +enum MatrixGridType { + MATRIX_GRID_NONE = 0; + MATRIX_GRID_EMPTY = 1; + MATRIX_GRID_BARRIER = 2; + MATRIX_GRID_START = 3; + MATRIX_GRID_ITEM = 4; + MATRIX_GRID_MONSTER = 5; + MATRIX_GRID_RANDOM = 6; + MATRIX_GRID_TRAP = 7; + MATRIX_GRID_SHOP = 8; + MATRIX_GRID_EXIT = 9; + MATRIX_GRID_DIALOG = 10; + MATRIX_GRID_TELEPORT = 11; + MATRIX_GRID_ICE = 12; + MATRIX_GRID_INVALID = -1; +} + +enum MatrixEventType { + MATRIX_EVENT_INVALID = 0; + MATRIX_EVENT_FINISH = 1; + MATRIX_EVENT_CANCEL = 2; + MATRIX_EVENT_LINK = 3; + MATRIX_EVENT_COMPLEX = 4; + MATRIX_EVENT_MOVE = 5; + MATRIX_EVENT_LOTTERY = 6; + MATRIX_EVENT_BUFF = 7; + MATRIX_EVENT_GUESS = 8; + MATRIX_EVENT_FORWARD = 9; + MATRIX_EVENT_RESET_FLOOR = 10; + MATRIX_EVENT_PLOT = 11; + MATRIX_EVENT_STAGE = 12; + MATRIX_EVENT_ITEM_DROP = 13; + MATRIX_EVENT_ITEM_REWARD = 14; + MATRIX_EVENT_TIPS = 15; + MATRIX_EVENT_SUB_RPG_MATERIAL = 16; + MATRIX_EVENT_RANDOM_PLOT_ONCE = 17; + MATRIX_EVENT_RANDOM_STAGE_ONCE = 18; + MATRIX_EVENT_RANDOM_AREA_ONCE = 19; + MATRIX_EVENT_TRIGGER_EVENT_GROUP = 21; + MATRIX_EVENT_PASS_RPG_TALE_SITE = 101; + MATRIX_EVENT_UNLOCK_RPG_TALE_ROLE = 102; + MATRIX_EVENT_AWAY_RPG_TALE_ROLE = 103; + MATRIX_EVENT_ADD_RPG_TALE_MISSION = 104; + MATRIX_EVENT_ADD_RPG_TALE_PHOTO = 105; + MATRIX_EVENT_ADD_RPG_OVERALL = 106; + MATRIX_EVENT_DEL_RPG_OVERALL = 107; + MATRIX_EVENT_SET_RPG_OVERALL = 108; + MATRIX_EVENT_DISCARD_RPG_TALE_SITE = 109; + MATRIX_EVENT_NOTIFY = 110; + MATRIX_EVENT_MATRIX_FLOOR = 111; + MATRIX_EVENT_MONOPOLY = 112; + MATRIX_EVENT_RPG_DUNGEON = 113; + MATRIX_EVENT_RPG_DUNGEON_BUFF = 114; + MATRIX_EVENT_ROGUE_TOWER_HP_HEAL = 115; + MATRIX_EVENT_ROGUE_TOWER_HP_HEAL_NO_EXTRA = 116; + MATRIX_EVENT_ROGUE_TOWER_ADD_COIN = 117; + MATRIX_EVENT_ROGUE_TOWER_SUB_COIN = 118; + MATRIX_EVENT_ROGUE_TOWER_GET_RANDOM_BUFF = 119; + MATRIX_EVENT_ROGUE_TOWER_LEVEL_UP_RANDOM_BUFF = 120; + MATRIX_EVENT_ROGUE_TOWER_HP_COST = 121; + MATRIX_EVENT_ROGUE_TOWER_SUPPORT_LEVELUP_TIMES = 122; + MATRIX_EVENT_RANCH_UNLOCK_AREA = 123; + MATRIX_EVENT_RANCH_STAGE = 124; + MATRIX_EVENT_TOWN = 125; + MATRIX_EVENT_DICEY_DUNGEON = 126; + MATRIX_EVENT_PVZ_ADD_QAVATAR = 127; + MATRIX_EVENT_QCANDY_ADD_AVATAR = 128; + MATRIX_EVENT_PLATFORM_SHOOTER_ADD_AVATAR = 129; + MATRIX_EVENT_SUSANNA_TRIAL_PASS_SITE = 130; + MATRIX_EVENT_MATCH_THREE_ENTER_ROOM = 131; + MATRIX_EVENT_MAHOU_CARD_ENTER_SITE = 132; + MATRIX_EVENT_MAHOU_CARD_ENTER_SITE_FROM_AVATAR = 133; + MATRIX_EVENT_TILED_GAME_FARM_FINISH_AVATAR_SCENE = 134; + MATRIX_EVENT_MARBLES_SHOOT_ADD_AVATAR = 135; + MATRIX_EVENT_GOURMET_HUNT_FORCE_REFRESH_DAILY_QUEST = 136; + MATRIX_EVENT_GOURMET_HUNT_GRANT_DAILY_QUEST_REWARD = 137; + MATRIX_EVENT_TILED_GAME_SRPG_ADD_AVATAR = 138; + MATRIX_EVENT_TILED_GAME_SRPG_TRY_REFRESH_DAILY_QUEST = 140; + MATRIX_EVENT_TILED_GAME_SRPG_REPLACE_AVATAR = 141; + MATRIX_EVENT_TILED_GAME_MONSTER_FARM_BUILDING_LEVEL_UP = 142; + MATRIX_EVENT_TILED_GAME_MONSTER_FARM_FINISH_PRIVILEGE = 144; + MATRIX_EVENT_TILED_GAME_INN_UNLOCK_STAFF = 145; + MATRIX_EVENT_TILED_GAME_INN_UNLOCK_SITE = 146; + MATRIX_EVENT_TILED_GAME_INN_UNLOCK_DISH = 147; + MATRIX_EVENT_TILED_GAME_INN_UNLOCK_FOOD = 148; + MATRIX_EVENT_TILED_GAME_INN_UNLOCK_INSPIRATION = 149; + MATRIX_EVENT_AWAY_VIRTUAL_AVATAR = 171; + MATRIX_EVENT_BACK_VIRTUAL_AVATAR = 172; + MATRIX_EVENT_CLIENT = 200; + MATRIX_EVENT_TILE_MARK = 201; + MATRIX_EVENT_SET_STAGE_SCORE = 302; +} + +enum MatrixEventPlotRequirementType { + MATRIX_EVENT_PLOT_REQUIREMENT_INVALID = 0; + MATRIX_EVENT_PLOT_REQUIREMENT_MATERIAL = 1; + MATRIX_EVENT_PLOT_REQUIREMENT_MISSION = 2; + MATRIX_EVENT_PLOT_REQUIREMENT_DIALOG = 3; + MATRIX_EVENT_PLOT_REQUIREMENT_FLOOR_EVENT = 4; +} + +enum MatrixTriggerType { + MATRIX_TRIGGER_NONE = 0; + MATRIX_TRIGGER_STEP_NUM_GE = 1; + MATRIX_TRIGGER_POSITION = 2; + MATRIX_TRIGGER_STEP_NUM_LE = 3; +} + +enum DiceType { + DICE_TYPE_NONE = 0; + DICE_TYPE_RANDOM = 1; + DICE_TYPE_FIXED = 2; + DICE_TYPE_FORWARD = 3; +} + +enum MatrixFingerType { + MATRIX_FINGER_NONE = 0; + MATRIX_FINGER_SCISSORS = 1; + MATRIX_FINGER_STONE = 2; + MATRIX_FINGER_CLOTH = 3; +} + +enum MatrixMonopolyBuffType { + MATRIX_MONOPOLY_BUFF_NONE = 0; + MATRIX_MONOPOLY_BUFF_DICE = 1; + MATRIX_MONOPOLY_BUFF_STAGE = 2; + MATRIX_MONOPOLY_BUFF_DROP = 3; +} + +enum RpgTaleTicketRefreshType { + RPG_TALE_TICKET_REFRESH_TYPE_NONE = 0; + RPG_TALE_TICKET_REFRESH_DAILY = 1; + RPG_TALE_TICKET_REFRESH_WEEKLY = 2; + RPG_TALE_TICKET_REFRESH_CUSTOM = 3; + RPG_TALE_TICKET_REFRESH_DAILY_WITH_STORAGE = 4; +} + +enum RpgTaleSiteType { + RPG_TALE_SITE_TYPE_NONE = 0; + RPG_TALE_SITE_TYPE_STORY = 1; + RPG_TALE_SITE_TYPE_CLUE = 2; + RPG_TALE_SITE_TYPE_CYCLE = 3; + RPG_TALE_SITE_TYPE_RANK = 4; + RPG_TALE_SITE_TYPE_ENDLESS = 5; +} + +// CmdID: 6300 +message GetScDLCReq { +} + +message FeverSkillSuite { + uint32 suite_id = 1; + string suite_name = 2; + repeated uint32 skill_chip_id_list = 3; +} + +message ScDLCFever { + uint32 level = 1; + uint32 exp = 2; + uint32 fever_slot_num = 3; + uint32 has_take_reward_level = 4; + repeated FeverSkillSuite skill_suite_list = 5; + uint32 active_suite_id = 6; +} + +message ScDLCTalent { + uint32 talent_id = 1; + uint32 talent_level = 2; +} + +message ScDLCAvatar { + uint32 avatar_id = 1; + uint32 level = 2; + repeated ScDLCTalent talent_list = 3; + repeated uint32 equip_talent_list = 4; +} + +message ScDLCSupportNPC { + uint32 npc_id = 1; + uint32 exp = 2; + uint32 level = 3; +} + +message ScDLCDailyQuestData { + repeated OpenworldQuest quest_list = 1; + uint32 left_accept_times = 2; + uint32 refresh_left_times = 3; + uint32 refresh_cost_material_id = 4; + uint32 refresh_cost_material_num = 5; +} + +message ScDLCAchievement { + uint32 mission_id = 1; + uint32 finish_time = 2; +} + +// CmdID: 6301 +message GetScDLCRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetScDLCRsp.Retcode retcode = 1; + ScDLCFever fever = 2; + repeated ScDLCAvatar avatar_list = 3; + repeated ScDLCSupportNPC npc_list = 4; + ScDLCDailyQuestData daily_quest_data = 5; + string name = 6; + repeated ScDLCAchievement achievement_list = 7; + uint32 max_challenge_reward_take_progress = 8; + repeated uint32 active_fever_ability_group_id_list = 9; + uint32 max_active_fever_ability_group_num = 10; +} + +// CmdID: 6304 +message UpdateScDLCFeverSuiteReq { + uint32 suite_id = 1; + string suite_name = 2; + repeated uint32 skill_chip_id_list = 3; +} + +// CmdID: 6305 +message UpdateScDLCFeverSuiteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SENSITIVE_WORDS = 2; + SLOT_LACK = 3; + INVALID_SKILL_CHIP = 4; + NAME_FORMAT_ERROR = 5; + } + + UpdateScDLCFeverSuiteRsp.Retcode retcode = 1; +} + +// CmdID: 6306 +message ActiveScDLCFeverSuiteReq { + uint32 suite_id = 1; +} + +// CmdID: 6307 +message ActiveScDLCFeverSuiteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ActiveScDLCFeverSuiteRsp.Retcode retcode = 1; +} + +// CmdID: 6308 +message AddScDLCSupportNPCExpReq { + uint32 npc_id = 1; + uint32 material_id = 2; +} + +// CmdID: 6309 +message AddScDLCSupportNPCExpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_LACK = 2; + NPC_ERROR = 3; + MATERIAL_ERROR = 4; + } + + AddScDLCSupportNPCExpRsp.Retcode retcode = 1; +} + +// CmdID: 6310 +message LevelUpScDLCAvatarReq { + uint32 avatar_id = 1; +} + +// CmdID: 6311 +message LevelUpScDLCAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_LACK = 2; + AVATAR_NOT_EXIST = 3; + FEVER_LEVEL_LACK = 4; + } + + LevelUpScDLCAvatarRsp.Retcode retcode = 1; +} + +// CmdID: 6312 +message LevelUpScDLCTalentReq { + uint32 avatar_id = 1; + uint32 talent_id = 2; +} + +// CmdID: 6313 +message LevelUpScDLCTalentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_ERROR = 2; + TALENT_ERROR = 3; + TARGET_LEVEL_ERROR = 4; + FEVER_LEVEL_LACK = 5; + PRE_TALENT_LACK = 6; + MATERIAL_LACK = 7; + } + + LevelUpScDLCTalentRsp.Retcode retcode = 1; +} + +// CmdID: 6314 +message EquipScDLCAvatarTalentReq { + uint32 avatar_id = 1; + repeated uint32 equip_talent_list = 2; +} + +// CmdID: 6315 +message EquipScDLCAvatarTalentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_ERROR = 2; + TALENT_ERROR = 3; + TALENT_TAG_REPEAT = 4; + } + + EquipScDLCAvatarTalentRsp.Retcode retcode = 1; +} + +// CmdID: 6316 +message GetScDLCSelectDailyQuestReq { +} + +// CmdID: 6317 +message GetScDLCSelectDailyQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetScDLCSelectDailyQuestRsp.Retcode retcode = 1; + repeated OpenworldQuest quest_list = 2; +} + +// CmdID: 6318 +message RefreshScDLCDailyQuestReq { +} + +// CmdID: 6319 +message RefreshScDLCDailyQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_LACK = 2; + } + + RefreshScDLCDailyQuestRsp.Retcode retcode = 1; + repeated OpenworldQuest quest_list = 2; +} + +// CmdID: 6320 +message AcceptScDLCDailyQuestReq { + uint32 quest_id = 1; +} + +// CmdID: 6321 +message AcceptScDLCDailyQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + QUEST_ERROR = 2; + STAMINA_LACK = 3; + ACCEPT_TIMES_LACK = 4; + SLOT_LACK = 5; + } + + AcceptScDLCDailyQuestRsp.Retcode retcode = 1; + OpenworldQuest quest = 2; +} + +// CmdID: 6322 +message FinishScDLCDailyQuestReq { + uint32 quest_id = 1; + uint32 cost_time = 2; + repeated uint32 finish_challenge_list = 3; +} + +// CmdID: 6323 +message FinishScDLCDailyQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + QUEST_NOT_EXIST = 2; + QUEST_NOT_DOING = 3; + } + + FinishScDLCDailyQuestRsp.Retcode retcode = 1; + uint32 quest_id = 2; + uint32 cost_time = 3; + repeated uint32 finish_challenge_list = 4; +} + +// CmdID: 6324 +message TakeScDLCDailyQuestRewardReq { + uint32 quest_id = 1; +} + +// CmdID: 6325 +message TakeScDLCDailyQuestRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + QUEST_NOT_EXIST = 2; + NOT_FINISH = 3; + } + + TakeScDLCDailyQuestRewardRsp.Retcode retcode = 1; + uint32 quest_id = 2; + RewardData reward_data = 3; +} + +// CmdID: 6326 +message ModifyScDLCNameReq { + string name = 1; +} + +// CmdID: 6327 +message ModifyScDLCNameRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FORMAT_ERROR = 2; + SENSITIVE_WORDS = 3; + } + + ModifyScDLCNameRsp.Retcode retcode = 1; +} + +// CmdID: 6328 +message TakeScDLCChallengeRewardReq { +} + +// CmdID: 6329 +message TakeScDLCChallengeRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_REWARD = 2; + } + + TakeScDLCChallengeRewardRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; +} + +// CmdID: 6330 +message FinishScDLCPlotReq { + uint32 id = 1; +} + +// CmdID: 6331 +message FinishScDLCPlotRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + FinishScDLCPlotRsp.Retcode retcode = 1; +} + +message ScDLCTowerAvatarInfo { + uint32 avatar_id = 1; + uint32 hp_percent = 2; + uint32 sp_percent = 3; +} + +// CmdID: 6332 +message GetScDLCTowerReq { +} + +// CmdID: 6333 +message GetScDLCTowerRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetScDLCTowerRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + uint32 cur_floor = 3; + uint32 max_floor = 4; + repeated ScDLCTowerAvatarInfo avatar_info_list = 5; + uint32 max_score = 6; + uint32 avatar_revive_times = 7; + uint32 sc_dlc_fever_score = 8; + uint32 sc_dlc_climax_score = 9; + uint32 max_can_sweep_floor = 10; +} + +// CmdID: 6334 +message ScDLCTowerStageBeginReq { + repeated uint32 avatar_id_list = 1; + uint32 support_avatar_id = 2; + string report_ext = 3; +} + +// CmdID: 6335 +message ScDLCTowerStageBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_BEGIN = 2; + PROGRESS_FULL = 3; + AVATAR_ERROR = 4; + AVATAR_DIE = 5; + NOT_OPEN = 6; + SUPPORT_AVATAR_ERROR = 7; + FLOOR_ERROR = 8; + STORY_NOT_FINISH = 9; + } + + ScDLCTowerStageBeginRsp.Retcode retcode = 1; + uint32 cur_floor = 2; +} + +// CmdID: 6336 +message ScDLCTowerStageEndReq { + StageEndStatus end_status = 1; + uint32 floor = 2; + uint32 score = 3; + repeated ScDLCTowerAvatarInfo avatar_info_list = 4; + repeated DropItem drop_item_list = 5; + uint32 sc_dlc_fever_score = 6; + uint32 sc_dlc_climax_score = 7; + string report_ext = 8; +} + +// CmdID: 6337 +message ScDLCTowerStageEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_BEGIN = 2; + FLOOR_ERROR = 3; + AVATAR_ERROR = 4; + } + + ScDLCTowerStageEndRsp.Retcode retcode = 1; + RewardData reward_data = 2; + uint32 score = 3; + uint32 floor = 4; + uint32 settle_floor = 5; +} + +// CmdID: 6338 +message GetScDLCTowerRankReq { +} + +// CmdID: 6339 +message GetScDLCTowerRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetScDLCTowerRankRsp.Retcode retcode = 1; + uint32 rank_percent = 2; + uint32 rank = 3; +} + +// CmdID: 6340 +message ScDLCTowerScheduleRewardNotify { + uint32 score = 1; + RewardData reward_data = 2; +} + +// CmdID: 6341 +message ScDLCReviveAvatarReq { + uint32 avatar_id = 1; + string report_ext = 2; +} + +// CmdID: 6342 +message ScDLCReviveAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_ERROR = 2; + MATERIAL_LACK = 3; + } + + ScDLCReviveAvatarRsp.Retcode retcode = 1; +} + +// CmdID: 6343 +message ScDLCTowerReviveAvatarReq { + string report_ext = 1; +} + +// CmdID: 6344 +message ScDLCTowerReviveAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + REVIVE_TIMES_LACK = 2; + NOT_IN_TOWER = 3; + MATERIAL_LACK = 4; + } + + ScDLCTowerReviveAvatarRsp.Retcode retcode = 1; + uint32 revive_times = 2; +} + +// CmdID: 6345 +message ScDLCActiveFeverAbilityReq { + repeated uint32 ability_group_id_list = 1; +} + +// CmdID: 6346 +message ScDLCActiveFeverAbilityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVE_NUM_LIMIT = 2; + ACTIVE_LIST_EMPTY = 3; + GROUP_INVALID = 4; + } + + ScDLCActiveFeverAbilityRsp.Retcode retcode = 1; +} + +// CmdID: 6347 +message ScDLCSweepTowerReq { +} + +// CmdID: 6348 +message ScDLCSweepTowerRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CANNOT_SWEEP = 2; + } + + ScDLCSweepTowerRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; +} + +enum CmdTypeScdlc { + CMD_TYPE_SCDLC_NONE = 0; + CMD_GET_SC_DLC_REQ = 6300; + CMD_GET_SC_DLC_RSP = 6301; + CMD_UPDATE_SC_DLC_FEVER_SUITE_REQ = 6304; + CMD_UPDATE_SC_DLC_FEVER_SUITE_RSP = 6305; + CMD_ACTIVE_SC_DLC_FEVER_SUITE_REQ = 6306; + CMD_ACTIVE_SC_DLC_FEVER_SUITE_RSP = 6307; + CMD_ADD_SC_DLC_SUUPORT_NPC_EXP_REQ = 6308; + CMD_ADD_SC_DLC_SUUPORT_NPC_EXP_RSP = 6309; + CMD_LEVEL_UP_SC_DLC_AVATAR_REQ = 6310; + CMD_LEVEL_UP_SC_DLC_AVATAR_RSP = 6311; + CMD_LEVEL_UP_SC_DLC_TALENT_REQ = 6312; + CMD_LEVEL_UP_SC_DLC_TALENT_RSP = 6313; + CMD_EQUIP_SC_DLC_AVATAR_TALENT_REQ = 6314; + CMD_EQUIP_SC_DLC_AVATAR_TALENT_RSP = 6315; + CMD_GET_SC_DLC_SELECT_DAILY_QUEST_REQ = 6316; + CMD_GET_SC_DLC_SELECT_DAILY_QUEST_RSP = 6317; + CMD_REFRESH_SC_DLC_DAILY_QUEST_REQ = 6318; + CMD_REFRESH_SC_DLC_DAILY_QUEST_RSP = 6319; + CMD_ACCEPT_SC_DLC_DAILY_QUEST_REQ = 6320; + CMD_ACCEPT_SC_DLC_DAILY_QUEST_RSP = 6321; + CMD_FINISH_SC_DLC_DAILY_QUEST_REQ = 6322; + CMD_FINISH_SC_DLC_DAILY_QUEST_RSP = 6323; + CMD_TAKE_SC_DLC_DAILY_QUEST_REWARD_REQ = 6324; + CMD_TAKE_SC_DLC_DAILY_QUEST_REWARD_RSP = 6325; + CMD_MODIFY_SC_DLC_NAME_REQ = 6326; + CMD_MODIFY_SC_DLC_NAME_RSP = 6327; + CMD_TAKE_SC_DLC_CHALLENGE_REWARD_REQ = 6328; + CMD_TAKE_SC_DLC_CHALLENGE_REWARD_RSP = 6329; + CMD_FINISH_SC_DLC_PLOT_REQ = 6330; + CMD_FINISH_SC_DLC_PLOT_RSP = 6331; + CMD_GET_SC_DLC_TOWER_REQ = 6332; + CMD_GET_SC_DLC_TOWER_RSP = 6333; + CMD_SC_DLC_TOWER_STAGE_BEGIN_REQ = 6334; + CMD_SC_DLC_TOWER_STAGE_BEGIN_RSP = 6335; + CMD_SC_DLC_TOWER_STAGE_END_REQ = 6336; + CMD_SC_DLC_TOWER_STAGE_END_RSP = 6337; + CMD_GET_SC_DLC_TOWER_RANK_REQ = 6338; + CMD_GET_SC_DLC_TOWER_RANK_RSP = 6339; + CMD_SC_DLC_TOWER_SCHEDULE_REWARD_NOTIFY = 6340; + CMD_SC_DLC_REVIVE_AVATAR_REQ = 6341; + CMD_SC_DLC_REVIVE_AVATAR_RSP = 6342; + CMD_SC_DLC_TOWER_REVIVE_AVATAR_REQ = 6343; + CMD_SC_DLC_TOWER_REVIVE_AVATAR_RSP = 6344; + CMD_SC_DLC_ACTIVE_FEVER_ABILITY_REQ = 6345; + CMD_SC_DLC_ACTIVE_FEVER_ABILITY_RSP = 6346; + CMD_SC_DLC_SWEEP_TOWER_REQ = 6347; + CMD_SC_DLC_SWEEP_TOWER_RSP = 6348; + CMD_SCDLC_DUMMY = 6449; +} + +// CmdID: 5002 +message UpdateClientSettingNotify { + uint32 id = 1; + bytes data = 3; +} + +// CmdID: 5003 +message CommonCdCheckNotify { + uint32 end_time = 1; +} + +// CmdID: 5004 +message AntiAddictNotify { + enum AntiAddictMsgType { + ANTI_ADDICT_MSG_ERROR = 0; + ANTI_ADDICT_MSG_ANTI_ADDICT = 1; + ANTI_ADDICT_MSG_SHOULD_BIND_ACCOUNT = 2; + } + + AntiAddictNotify.AntiAddictMsgType msg_type = 1; + string msg = 2; + string level = 3; +} + +// CmdID: 5005 +message SensitiveWordCheckReq { + string content = 1; +} + +// CmdID: 5006 +message SensitiveWordCheckRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SENSITIVE_WORDS = 2; + } + + SensitiveWordCheckRsp.Retcode retcode = 1; +} + +// CmdID: 5007 +message KickOutPlayerNotify { + enum KickOutReason { + REASON_NONE = 0; + REASON_MTP_ERROR = 1; + REASON_PLATFORM_ERROR = 2; + REASON_SQUEEZE = 3; + REASON_LOGIN_UNFINISH = 4; + } + + KickOutPlayerNotify.KickOutReason reason = 1; +} + +// CmdID: 5008 +message ClientReportReq { + string report_type = 1; + string report_value = 2; +} + +// CmdID: 5009 +message ClientReportRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ClientReportRsp.Retcode retcode = 1; +} + +// CmdID: 5010 +message GetAuthkeyReq { + string auth_appid = 1; + uint32 sign_type = 2; + uint32 authkey_ver = 3; +} + +// CmdID: 5011 +message GetAuthkeyRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SIGN_TYPE_ERROR = 2; + AUTHKEY_VER_ERROR = 3; + } + + GetAuthkeyRsp.Retcode retcode = 1; + string authkey = 2; + string auth_appid = 3; + uint32 sign_type = 4; + uint32 authkey_ver = 5; +} + +// CmdID: 5012 +message ClientReportBinReq { + ClientReportBinType report_type = 1; + repeated bytes report_bin_list = 2; +} + +// CmdID: 5013 +message ClientReportBinRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ClientReportBinRsp.Retcode retcode = 1; +} + +// CmdID: 5014 +message NetTestReq { + bool is_gate_test = 1; + uint64 req_time = 2; + repeated uint32 test_uint_list = 3; + repeated string test_str_list = 4; +} + +// CmdID: 5015 +message NetTestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + NetTestRsp.Retcode retcode = 1; + bool is_gate_test = 2; + uint64 req_time = 3; + repeated uint32 test_uint_list = 4; + repeated string test_str_list = 5; +} + +message SecurityPasswordInfo { + int32 remain_fail_times = 1; +} + +// CmdID: 5021 +message GetSecurityPasswordReq { +} + +// CmdID: 5022 +message GetSecurityPasswordRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetSecurityPasswordRsp.Retcode retcode = 1; + SecurityPasswordStatus status = 2; + SecurityPasswordDeviceStatus device_status = 3; + uint32 reset_end_time = 4; + string salt = 5; +} + +// CmdID: 5023 +message SetSecurityPasswordReq { + string password = 1; +} + +// CmdID: 5024 +message SetSecurityPasswordRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + IS_NOT_OFTEN_DEVICE = 2; + ALREADY_SET = 3; + } + + SetSecurityPasswordRsp.Retcode retcode = 1; +} + +// CmdID: 5025 +message ChangeSecurityPasswordReq { + string old_password = 1; + string new_password = 2; +} + +// CmdID: 5026 +message ChangeSecurityPasswordRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TOO_MANY_FAILS = 2; + IS_IN_RESETTING = 3; + WRONG_PASSWORD = 4; + } + + ChangeSecurityPasswordRsp.Retcode retcode = 1; + SecurityPasswordInfo security_password_info = 2; +} + +// CmdID: 5027 +message UnlockDeviceSecurityPasswordReq { + string password = 1; +} + +// CmdID: 5028 +message UnlockDeviceSecurityPasswordRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TOO_MANY_FAILS = 2; + WRONG_PASSWORD = 3; + } + + UnlockDeviceSecurityPasswordRsp.Retcode retcode = 1; + SecurityPasswordInfo security_password_info = 2; +} + +// CmdID: 5029 +message SecurityPasswordOpReq { + string password = 1; + SecurityPasswordOpType op_type = 2; + repeated uint32 para_list = 3; +} + +// CmdID: 5030 +message SecurityPasswordOpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TOO_MANY_FAILS = 2; + WRONG_PASSWORD = 3; + } + + SecurityPasswordOpRsp.Retcode retcode = 1; + SecurityPasswordOpType op_type = 2; + SecurityPasswordInfo security_password_info = 3; +} + +// CmdID: 5031 +message ResetSecurityPasswordReq { + bool is_withdraw = 1; +} + +// CmdID: 5032 +message ResetSecurityPasswordRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + IS_ALREADY_RESETTING = 2; + } + + ResetSecurityPasswordRsp.Retcode retcode = 1; +} + +// CmdID: 5033 +message SecurityPasswordRejectionNotify { +} + +enum CmdTypeSecurity { + CMD_TYPE_SECURITY_NONE = 0; + CMD_UPDATE_CLIENT_SETTING_NOTIFY = 5002; + CMD_COMMON_CD_CHECK_NOTIFY = 5003; + CMD_ANTI_ADDICT_NOTIFY = 5004; + CMD_SENSITIVE_WORD_CHECK_REQ = 5005; + CMD_SENSITIVE_WORD_CHECK_RSP = 5006; + CMD_KICK_OUT_PLAYER_NOTIFY = 5007; + CMD_CLIENT_REPORT_REQ = 5008; + CMD_CLIENT_REPORT_RSP = 5009; + CMD_GET_AUTHKEY_REQ = 5010; + CMD_GET_AUTHKEY_RSP = 5011; + CMD_CLIENT_REPORT_BIN_REQ = 5012; + CMD_CLIENT_REPORT_BIN_RSP = 5013; + CMD_NET_TEST_REQ = 5014; + CMD_NET_TEST_RSP = 5015; + CMD_GET_SECURITY_PASSWORD_REQ = 5021; + CMD_GET_SECURITY_PASSWORD_RSP = 5022; + CMD_SET_SECURITY_PASSWORD_REQ = 5023; + CMD_SET_SECURITY_PASSWORD_RSP = 5024; + CMD_CHANGE_SECURITY_PASSWORD_REQ = 5025; + CMD_CHANGE_SECURITY_PASSWORD_RSP = 5026; + CMD_UNLOCK_DEVICE_SECURITY_PASSWORD_REQ = 5027; + CMD_UNLOCK_DEVICE_SECURITY_PASSWORD_RSP = 5028; + CMD_SECURITY_PASSWORD_OP_REQ = 5029; + CMD_SECURITY_PASSWORD_OP_RSP = 5030; + CMD_RESET_SECURITY_PASSWORD_REQ = 5031; + CMD_RESET_SECURITY_PASSWORD_RSP = 5032; + CMD_SECURITY_PASSWORD_REJECTION_NOTIFY = 5033; +} + +enum AntiOfflineReportStatus { + ANTI_OFFLINE_REPORT_CORRECT = 0; + ANTI_OFFLINE_REPORT_ERROR = 1; + ANTI_OFFLINE_REPORT_TIMEOUT = 2; + ANTI_OFFLINE_REPORT_SOON_LOGOUT = 3; + ANTI_OFFLINE_REPORT_UNEXPECTED = 4; +} + +enum AuthkeySignType { + AUTHKEY_SIGN_TYPE_NONE = 0; + AUTHKEY_SIGN_TYPE_DEFAULT = 1; + AUTHKEY_SIGN_TYPE_RSA = 2; +} + +enum ClientReportBinType { + CLIENT_REPORT_BIN_INVALID = 0; + CLIENT_REPORT_BIN_AVATAR_DETAIL = 1; + CLIENT_REPORT_BIN_ATTACK_SNAPSHOT = 2; +} + +enum SecurityPasswordStatus { + SECURITY_PASSWORD_NOT_SET = 0; + SECURITY_PASSWORD_IS_SET = 1; + SECURITY_PASSWORD_TOO_MANY_FAILS = 2; +} + +enum SecurityPasswordDeviceStatus { + SECURITY_PASSWORD_DEVICE_UNLOCKED = 0; + SECURITY_PASSWORD_DEVICE_LOCKED = 1; +} + +enum SecurityPasswordOpType { + SECURITY_PASSWORD_NONE_OP = 0; + SECURITY_PASSWORD_FAST_UNPROTECT_WEAPON = 1; + SECURITY_PASSWORD_FAST_UNPROTECT_STIGMATA = 2; +} + +message BuyGoodsCost { + uint32 hcoin_cost = 1; + uint32 scoin_cost = 2; + uint32 mcoin_cost = 3; + repeated Material cost_item_list = 4; +} + +message GoodsDiscount { + uint32 begin_time = 1; + uint32 end_time = 2; + uint32 discount = 3; + BuyGoodsCost goods_cost = 4; +} + +message Goods { + enum RefreshTimeType { + SHOP_TYPE = 0; + DAY_TYPE = 1; + WEEK_TYPE = 2; + MONTH_TYPE = 3; + VERSION_TYPE = 4; + DOUBLE_WEEK_TYPE = 5; + } + + enum ShowType { + SHOW_TYPE_NONE = 0; + NORMAL_SHOW = 1; + LOCK_SHOW = 2; + } + + uint32 goods_id = 1; + uint32 buy_times = 2; + bool can_be_refresh = 3; + Goods.RefreshTimeType refresh_time_type = 4; + uint32 begin_time = 6; + uint32 end_time = 7; + Goods.ShowType show_type = 8; + string unlock_tips = 9; + uint32 prepare_time = 10; + uint32 sort_id = 11; + string product_name = 12; + uint32 product_id = 13; + uint32 product_price = 14; + string show_setting_str = 15; + uint32 show_new_tag = 16; + repeated uint32 mall_anchor_list = 17; + bool is_ignore = 18; + uint32 unlock_type = 19; + uint32 unlock_para_int = 20; + string unlock_para_str = 21; + uint32 prepare_level = 22; + uint32 min_level = 23; + uint32 max_level = 24; + GoodsDiscount discount = 25; + bool is_popup = 26; + bool is_hide_price = 27; + uint32 max_buy_type = 28; +} + +message Shop { + uint32 shop_id = 1; + bool is_open = 2; + string text_map_name = 3; + string shop_icon_path = 4; + repeated Goods goods_list = 5; + uint32 next_auto_refresh_time = 6; + uint32 manual_refresh_times = 7; + uint32 refresh_item = 8; + uint32 next_refresh_cost = 9; + uint32 max_manual_refresh_times = 10; + uint32 shop_type = 11; + repeated uint32 currency_list = 12; + uint32 schedule_change_time = 13; + string shop_name = 14; + uint32 unlock_level = 15; + repeated uint32 all_goods_id_list = 16; + uint32 begin_time = 17; + uint32 end_time = 18; + bool is_hot = 19; + uint32 multi_currency = 20; + bool is_double_confirm = 21; + bool is_show = 22; + uint32 sort_priority = 23; + repeated uint32 toolbar_currency_list = 24; + repeated uint32 new_currency_list = 25; + uint32 free_manual_refresh_times = 26; +} + +// CmdID: 6700 +message GetShopListReq { +} + +// CmdID: 6701 +message GetShopListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetShopListRsp.Retcode retcode = 1; + repeated Shop shop_list = 2; + bool is_all = 3; +} + +// CmdID: 6702 +message GetShoppingMallListReq { +} + +message EffectiveGiftGoodsData { + uint32 goods_id = 1; + uint32 expire_time = 2; +} + +// CmdID: 6703 +message GetShoppingMallListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetShoppingMallListRsp.Retcode retcode = 1; + repeated Shop shop_list = 2; + repeated EffectiveGiftGoodsData effective_gift_goods_list = 3; +} + +// CmdID: 6704 +message GetSingleShopWithoutRefreshReq { + uint32 shop_id = 1; +} + +// CmdID: 6705 +message GetSingleShopWithoutRefreshRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetSingleShopWithoutRefreshRsp.Retcode retcode = 1; + Shop shop = 2; +} + +message Product { + string name = 1; + string desc = 2; + ProductType type = 3; + uint32 pay_hcoin = 4; + uint32 free_hcoin = 5; + uint32 price = 6; + uint32 left_buy_times = 7; + uint32 card_daily_hcoin = 8; + uint32 card_left_days = 9; + bool is_forbid_by_itunes_small_order = 10; + repeated RewardData box_reward_list = 11; + bool is_itunes_box_subscription = 12; + uint32 card_activity_daily_hcoin = 13; + bool is_add_hcoin = 14; + uint32 end_time = 15; + uint32 sort_priority = 16; + bool is_show_pic = 17; + string pic_path = 18; + string detail = 19; + uint32 id = 20; + uint32 mcoin = 21; + uint32 product_goods_id = 22; + string price_tier = 23; +} + +// CmdID: 6706 +message GetProductListReq { +} + +message FoundationData { + string product_name = 1; + repeated uint32 has_take_reward_level_list = 2; +} + +// CmdID: 6707 +message GetProductListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + DEVICE_ERROR = 2; + } + + GetProductListRsp.Retcode retcode = 1; + repeated Product product_list = 2; + uint32 next_random_box_product_refresh_time = 3; + uint32 next_limit_product_refresh_time = 4; + repeated FoundationData foundation_list = 5; +} + +// CmdID: 6708 +message ManualRefreshShopReq { + uint32 shop_id = 1; +} + +// CmdID: 6709 +message ManualRefreshShopRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SHOP_NOT_EXIST = 2; + REFRESH_TIMES_LACK = 3; + HCOIN_LACK = 4; + SHOP_CLOSE = 5; + NO_NEED_REFRESH = 6; + MATERIAL_LACK = 7; + } + + ManualRefreshShopRsp.Retcode retcode = 1; +} + +// CmdID: 6710 +message GetRecommendGoodsReq { +} + +message RecommendGoods { + uint32 shop_id = 1; + Goods goods = 2; + string banner_bg = 3; + uint32 accurate_deliver_schedule_id = 4; +} + +// CmdID: 6711 +message GetRecommendGoodsRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetRecommendGoodsRsp.Retcode retcode = 1; + repeated RecommendGoods recommend_goods_list = 2; +} + +// CmdID: 6714 +message BuyGoodsReq { + uint32 shop_id = 1; + uint32 goods_id = 2; + uint32 coupon_material_id = 3; + uint32 coupon_num = 4; + uint32 mcoin_coupon_material_id = 5; + uint32 goods_num = 6; + uint32 gift_pack_select_reward_id = 7; + uint32 discount_save_num = 8; + uint32 auto_open_select_reward_id = 9; +} + +// CmdID: 6715 +message BuyGoodsRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + GOODS_NOT_EXIST = 2; + BUY_TIMES_LACK = 3; + MONEY_LACK = 4; + EQUIPMENT_FULL = 5; + SHOP_CLOSE = 6; + SHOP_OVERDUE = 7; + GIFT_GOODS_EFFECT = 8; + GOODS_LOCKED = 9; + COUPON_ERROR = 10; + COUPON_LACK = 11; + FEATURE_CLOSED = 12; + MCOIN_LIMIT = 13; + GLOBAL_GOODS_NUM_LIMIT = 14; + NOT_IN_DISCOUNT = 15; + IN_DISCOUNT = 16; + DISCOUNT_ERROR = 17; + } + + BuyGoodsRsp.Retcode retcode = 1; + uint32 shop_id = 2; + uint32 goods_id = 3; + uint32 goods_buy_times = 4; + uint32 item_id = 5; + uint32 level = 6; + uint32 num = 7; + uint32 gift_pack_select_reward_id = 8; + uint32 split_fragment_num = 9; +} + +message ShopGoodsInfo { + uint32 goods_id = 1; + uint32 sell_num = 2; +} + +// CmdID: 6716 +message GlobalShopGoodsInfoNotify { + repeated ShopGoodsInfo shop_goods_list = 1; +} + +message VipReward { + uint32 vip_level = 1; + uint32 pay_hcoin = 2; + repeated uint32 reward_id_list = 3; + uint32 reward_batch = 4; + repeated uint32 special_reward_id_list = 5; + repeated uint32 is_special_shine_list = 6; + repeated uint32 taken_reward_id_list = 7; +} + +// CmdID: 6717 +message GetVipRewardDataReq { +} + +// CmdID: 6718 +message GetVipRewardDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetVipRewardDataRsp.Retcode retcode = 1; + uint32 total_pay_hcoin = 2; + repeated VipReward vip_reward_list = 3; +} + +// CmdID: 6719 +message GetVipRewardReq { + repeated uint32 vip_level_list = 1; +} + +// CmdID: 6720 +message GetVipRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + PAY_HCOIN_LACK = 2; + REPEAT_GET = 3; + } + + GetVipRewardRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; +} + +// CmdID: 6721 +message GetCardProductInfoReq { +} + +message CardProductInfo { + string product_name = 1; + uint32 expire_time = 2; + uint32 reward_num = 3; + uint32 hcoin = 4; + uint32 take_reward_days = 5; + uint32 last_daily_reward_time = 6; + uint32 bonus_need_days = 7; + uint32 bonus_hcoin = 8; + uint32 bonus_max_save_days = 9; + uint32 card_left_days = 10; +} + +message CardProductReward { + string product_name = 1; + uint32 hcoin = 2; + uint32 take_reward_days = 3; +} + +// CmdID: 6722 +message GetCardProductInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetCardProductInfoRsp.Retcode retcode = 1; + repeated CardProductInfo card_product_info_list = 2; +} + +// CmdID: 6723 +message TakeCardProductDailyRewardReq { +} + +// CmdID: 6724 +message TakeCardProductDailyRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + TakeCardProductDailyRewardRsp.Retcode retcode = 1; + repeated CardProductReward card_product_reward_list = 2; +} + +// CmdID: 6725 +message TakeCardProductBonusRewardReq { +} + +// CmdID: 6726 +message TakeCardProductBonusRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + TakeCardProductBonusRewardRsp.Retcode retcode = 1; + repeated CardProductReward card_product_reward_list = 2; +} + +// CmdID: 6727 +message TakeFoundationRewardReq { + string product_name = 1; + uint32 level = 2; +} + +// CmdID: 6728 +message TakeFoundationRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_BUY = 2; + LEVEL_LACK = 3; + HAS_TAKE = 4; + PRODUCT_INVALID = 5; + } + + TakeFoundationRewardRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; + string product_name = 3; + repeated uint32 has_take_reward_level_list = 4; +} + +// CmdID: 6729 +message GetProductRecommendListReq { +} + +// CmdID: 6730 +message GetProductRecommendListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetProductRecommendListRsp.Retcode retcode = 1; + repeated uint32 recommend_list = 2; +} + +// CmdID: 6731 +message BuyProductReq { + string name = 1; + uint32 price = 2; + string currency_code = 3; + string format_price = 4; +} + +// CmdID: 6732 +message BuyProductRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + DEVICE_ERROR = 2; + PRODUCT_INVALID = 3; + TIMES_LIMIT = 4; + } + + BuyProductRsp.Retcode retcode = 1; +} + +// CmdID: 6733 +message ExchangeHcoinByMcoinReq { + string product_name = 1; + uint32 mcoin_price = 2; +} + +// CmdID: 6734 +message ExchangeHcoinByMcoinRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LACK_MCOIN = 2; + PRODUCT_INVALID = 3; + } + + ExchangeHcoinByMcoinRsp.Retcode retcode = 1; + string product_name = 2; + uint32 pay_hcoin = 3; + uint32 free_hcoin = 4; +} + +// CmdID: 6739 +message GetMyCardAuthCodeReq { + string fac_trade_seq = 1; + string product_name = 2; + string amount = 3; +} + +// CmdID: 6740 +message GetMyCardAuthCodeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetMyCardAuthCodeRsp.Retcode retcode = 1; + string auth_code = 2; + string trade_seq = 3; + string product_name = 4; + string transaction_url = 5; +} + +// CmdID: 6741 +message VerifyMyCardOrderNotify { + string auth_code = 1; + string product_name = 2; +} + +// CmdID: 6742 +message RechargeFinishNotify { + enum Retcode { + SUCC = 0; + FAIL = 1; + ORDER_REPEAT = 2; + ITUNES_RECEIPT_ERROR = 3; + DUPLICATE_FAIL = 4; + } + + RechargeFinishNotify.Retcode retcode = 1; + string product_name = 2; + uint32 pay_hcoin = 3; + uint32 free_hcoin = 4; + string product_desc = 5; + repeated RewardData box_reward_list = 6; + uint32 product_price = 7; + string channel_name = 8; + string channel_order_no = 9; + bool is_add_hcoin = 10; + uint32 mcoin = 11; + uint32 goods_id = 12; + string pay_currency = 13; + string pay_price = 14; + ProductType product_type = 15; +} + +// CmdID: 6743 +message ReportClickRechargeButtonNotify { + string product_name = 1; + string currency_code = 2; + string price = 3; +} + +// CmdID: 6744 +message GlobalShopGoodsGetBuyOrderReq { + uint32 shop_id = 1; + uint32 goods_id = 2; +} + +// CmdID: 6745 +message GlobalShopGoodsGetBuyOrderRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GlobalShopGoodsGetBuyOrderRsp.Retcode retcode = 1; + uint32 shop_id = 2; + uint32 goods_id = 3; + uint32 buy_order = 4; +} + +enum CmdTypeShop { + CMD_TYPE_SHOP_NONE = 0; + CMD_GET_SHOP_LIST_REQ = 6700; + CMD_GET_SHOP_LIST_RSP = 6701; + CMD_GET_SHOPPING_MALL_LIST_REQ = 6702; + CMD_GET_SHOPPING_MALL_LIST_RSP = 6703; + CMD_GET_SINGLE_SHOP_WITHOUT_REFRESH_REQ = 6704; + CMD_GET_SINGLE_SHOP_WITHOUT_REFRESH_RSP = 6705; + CMD_GET_PRODUCT_LIST_REQ = 6706; + CMD_GET_PRODUCT_LIST_RSP = 6707; + CMD_MANUAL_REFRESH_SHOP_REQ = 6708; + CMD_MANUAL_REFRESH_SHOP_RSP = 6709; + CMD_GET_RECOMMEND_GOODS_REQ = 6710; + CMD_GET_RECOMMEND_GOODS_RSP = 6711; + CMD_BUY_GOODS_REQ = 6714; + CMD_BUY_GOODS_RSP = 6715; + CMD_GLOBAL_SHOP_GOODS_INFO_NOTIFY = 6716; + CMD_GET_VIP_REWARD_DATA_REQ = 6717; + CMD_GET_VIP_REWARD_DATA_RSP = 6718; + CMD_GET_VIP_REWARD_REQ = 6719; + CMD_GET_VIP_REWARD_RSP = 6720; + CMD_GET_CARD_PRODUCT_INFO_REQ = 6721; + CMD_GET_CARD_PRODUCT_INFO_RSP = 6722; + CMD_TAKE_CARD_PRODUCT_DAILY_REWARD_REQ = 6723; + CMD_TAKE_CARD_PRODUCT_DAILY_REWARD_RSP = 6724; + CMD_TAKE_CARD_PRODUCT_BONUS_REWARD_REQ = 6725; + CMD_TAKE_CARD_PRODUCT_BONUS_REWARD_RSP = 6726; + CMD_TAKE_FOUNDATION_REWARD_REQ = 6727; + CMD_TAKE_FOUNDATION_REWARD_RSP = 6728; + CMD_GET_PRODUCT_RECOMMEND_LIST_REQ = 6729; + CMD_GET_PRODUCT_RECOMMEND_LIST_RSP = 6730; + CMD_BUY_PRODUCT_REQ = 6731; + CMD_BUY_PRODUCT_RSP = 6732; + CMD_EXCHANGE_HCOIN_BY_MCOIN_REQ = 6733; + CMD_EXCHANGE_HCOIN_BY_MCOIN_RSP = 6734; + CMD_GET_MYCARD_AUTH_CODE_REQ = 6739; + CMD_GET_MYCARD_AUTH_CODE_RSP = 6740; + CMD_VERIFY_MYCARD_ORDER_NOTIFY = 6741; + CMD_RECHARGE_FINISH_NOTIFY = 6742; + CMD_REPORT_CLICK_RECHARGE_BUTTON_NOTIFY = 6743; + CMD_GLOBAL_SHOP_GOODS_GET_BUY_ORDER_REQ = 6744; + CMD_GLOBAL_SHOP_GOODS_GET_BUY_ORDER_RSP = 6745; +} + +enum ShopType { + SHOP_TYPE_NONE = 0; + SHOP_NORMAL = 1; + SHOP_ENDLESS = 2; + SHOP_ACTIVITY = 3; + SHOP_EXTRASTORY = 4; + SHOP_ARMADA = 5; + SHOP_GACHATICKET = 6; + SHOP_EXCHANGE_HOUSE = 7; + SHOP_EXTRASTORY_ACTIVITY = 8; + SHOP_MP = 9; + SHOP_EXBOSS = 10; + SHOP_SKIN = 11; + SHOP_MASTER = 12; + SHOP_DORM = 13; + SHOP_FRAGMENT = 14; + SHOP_ACTIVITY_EXCLUDE = 15; + SHOP_MINUTE = 16; + SHOP_DUNGEONS = 17; + SHOP_GOBACK = 18; + SHOP_MASTER_PUPIL = 19; + SHOP_TYPE_ENCORE = 20; + SHOP_TYPE_WANTED = 21; + SHOP_TYPE_ADVENTURE = 22; + SHOP_TYPE_NEWBIE_ACTIVITY = 23; + SHOP_TYPE_VIP_EQUIPMENT = 24; + SHOP_TYPE_GACHA_COIN = 25; + SHOP_TYPE_MAIN_STORY = 26; + SHOP_GOBACK_2 = 27; + SHOP_GOBACK_3 = 28; + SHOP_TYPE_NEWBIE_ACTIVITY_2 = 29; + SHOP_TYPE_NEWBIE_ACTIVITY_3 = 30; + SHOP_TYPE_GOD_WAR = 31; + SHOP_TYPE_CHAPTER = 32; + SHOP_TYPE_SC_DLC = 33; + SHOP_TYPE_BP_ELITE_WORKS = 34; + SHOP_TYPE_BP_STORE = 35; + SHOP_TYPE_BP_ELITE_WORKS_VINTAGE = 36; + SHOP_TYPE_NEWBIE_ACTIVITY_4 = 37; + SHOP_TYPE_NEWBIE_ACTIVITY_5 = 38; + SHOP_TYPE_CHAPTER_OW = 39; + SHOP_GOBACK_SPECIAL = 40; + SHOP_TYPE_BP_NEW_ELITE_WORKS = 41; + SHOP_TYPE_BP_RESIDENT_WORKS = 42; + SHOP_OPENWORLD = 100; + SHOP_OPENWORLD_SENIOR = 101; + SHOP_OPENWORLD_NEW = 102; + SHOP_OPENWORLD_ACTIVITY = 103; + SHOP_PJMS_MATERIAL = 104; + SHOP_PJMS_BGM = 105; + SHOP_PJMS_FURNITURE = 106; + SHOP_TYPE_GIFT_PACK = 201; + SHOP_ACTIVITY_2 = 302; + SHOP_ACTIVITY_3 = 303; + SHOP_ACTIVITY_4 = 304; + SHOP_ACTIVITY_5 = 305; + SHOP_ACTIVITY_6 = 306; + SHOP_ACTIVITY_7 = 307; + SHOP_ACTIVITY_8 = 308; + SHOP_ACTIVITY_9 = 309; + SHOP_ACTIVITY_10 = 310; + SHOP_ACTIVITY_11 = 311; + SHOP_ACTIVITY_12 = 312; + SHOP_WEST = 1001; +} + +enum ShopGoodsPoolUnlockType { + SHOP_GOODS_POOL_UNLOCK_TYPE_NONE = 0; + SHOP_GOODS_POOL_UNLOCK_PLAYER_LEVEL = 1; + SHOP_GOODS_POOL_UNLOCK_MAX_QUEST_LEVEL = 3; + SHOP_GOODS_POOL_UNLOCK_OPENWORLD_ACTIVITY_LEVEL = 4; + SHOP_GOODS_POOL_UNLOCK_EX_BOSS_MONSTER_LEVEL = 5; + SHOP_GOODS_POOL_UNLOCK_EX_BOSS_SCORE = 6; + SHOP_GOODS_POOL_UNLOCK_ELF = 7; + SHOP_GOODS_POOL_UNLOCK_GLOBALWAR_POINT_NUM = 8; + SHOP_GOODS_POOL_UNLOCK_GLOBALWAR_POINT_ID = 9; + SHOP_GOODS_POOL_UNLOCK_ADVENTURE_LEVEL = 10; + SHOP_GOODS_POOL_UNLOCK_DAILY_DUTY_POINT = 11; + SHOP_GOODS_POOL_UNLOCK_AVATAR = 12; + SHOP_GOODS_POOL_UNLOCK_STAGE = 13; + SHOP_GOODS_POOL_UNLOCK_MISSION = 15; + SHOP_GOODS_POOL_UNLOCK_SANCTUARY_LEVEL = 16; + SHOP_GOODS_POOL_UNLOCK_GOBACK_LEVEL = 17; + SHOP_GOODS_POOL_UNLOCK_AVATAR_LOCKED = 18; + SHOP_GOODS_POOL_UNLOCK_HAS_GOT_ITEM = 19; + SHOP_GOODS_POOL_UNLOCK_AVATAR_DETAIL = 20; + SHOP_GOODS_POOL_UNLOCK_ELF_DETAIL = 21; + SHOP_GOODS_POOL_UNLOCK_BATTLE_PASS_TICKET = 22; + SHOP_GOODS_POOL_UNLOCK_PRIVILEGE_DETAIL = 23; + SHOP_GOODS_POOL_UNLOCK_HAS_NOT_GOT_ITEM = 24; + SHOP_GOODS_POOL_UNLOCK_BP_LEVEL = 25; + SHOP_GOODS_POOL_UNLOCK_PLAYER_LEVEL_LOCK_ID = 26; + SHOP_GOODS_POOL_UNLOCK_GOBACK_NEWBIE_LEVEL = 27; + SHOP_GOODS_POOL_UNLOCK_BGM_LOCKED = 28; +} + +enum ShopGoodsMaxBuyType { + SHOP_GOODS_MAX_BUY_TYPE_SCHEDULE_MAX_LIMIT = 0; + SHOP_GOODS_MAX_BUY_TYPE_BACKPACK_MAX_LIMIT = 1; + SHOP_GOODS_MAX_BUY_TYPE_NO_LIMIT = 2; +} + +enum ShopGoodsAutoOpenType { + SHOP_GOODS_NOT_AUTO_OPEN = 0; + SHOP_GOODS_CLIENT_AUTO_OPEN_WITH_NOTIFY = 1; + SHOP_GOODS_CLIENT_AUTO_OPEN_WITHOUT_NOTIFY = 2; + SHOP_GOODS_SERVER_AUTO_OPEN = 3; +} + +enum ProductType { + PRODUCT_TYPE_NONE = 0; + PRODUCT_NORMAL = 1; + PRODUCT_LIMIT = 2; + PRODUCT_CARD = 3; + PRODUCT_SUBSCRIPTION = 4; + PRODUCT_RANDOM_BOX = 5; + PRODUCT_FIXED_BOX = 6; + PRODUCT_MCOIN = 7; + PRODUCT_FOUNDATION = 8; + PRODUCT_SUBSCRIPTION_NON_RENEWING = 9; + PRODUCT_MAIL_REWARD = 10; + PRODUCT_PROMO_CODE = 11; +} + +enum AccurateGoodsTriggerType { + ACCURATE_GOODS_TRIGGER_TYPE_NONE = 0; + ACCURATE_GOODS_TRIGGER_TYPE_UNLOCK_AVATAR = 1; + ACCURATE_GOODS_TRIGGER_TYPE_FIRST_GOT = 2; + ACCURATE_GOODS_TRIGGER_TYPE_REPEAT_GOT = 3; + ACCURATE_GOODS_TRIGGER_TYPE_UNLOCK_ELF = 4; + ACCURATE_GOODS_TRIGGER_TYPE_FINISH_MISSION = 5; + ACCURATE_GOODS_TRIGGER_TYPE_EXCHANGE_SCOIN = 6; + ACCURATE_GOODS_TRIGGER_TYPE_EXCHANGE_STAMINA = 7; + ACCURATE_GOODS_TRIGGER_TYPE_LOSE_STAGE = 8; + ACCURATE_GOODS_TRIGGER_TYPE_WIN_STAGE_FIRST = 9; + ACCURATE_GOODS_TRIGGER_TYPE_AVATAR_LEVEL = 10; + ACCURATE_GOODS_TRIGGER_TYPE_PLAYER_LEVEL = 11; + ACCURATE_GOODS_TRIGGER_TYPE_GOBACK_DAYS = 12; + ACCURATE_GOODS_TRIGGER_TYPE_AVATAR_STAR = 13; +} + +enum VipRewardStatus { + VIP_REWARD_STATUS_NONE = 0; + VIP_REWARD_LOCKED = 1; + VIP_REWARD_NOT_GET = 2; + VIP_REWARD_HAS_GOT = 3; + VIP_REWARD_HAS_GOT_BUT_SPECIAL = 4; +} + +message SimplifiedGodWarChallengeAvatar { + uint32 avatar_id = 1; + uint32 hp_percent = 2; + bool is_virtual = 3; + uint32 weapon_id = 4; + uint32 weapon_level = 5; + SimplifiedGodWarChallengeStigmata stigmata_1 = 6; + SimplifiedGodWarChallengeStigmata stigmata_2 = 7; + SimplifiedGodWarChallengeStigmata stigmata_3 = 8; + uint32 weapon_homology_level = 9; + uint32 sp_percent = 10; +} + +message SimplifiedGodWarChallengeElf { + ElfBriefInfo elf_info = 1; +} + +message SimplifiedGodWarChallengeStigmata { + uint32 id = 1; + uint32 level = 2; + repeated StigmataRune rune_list = 3; +} + +message SimplifiedGodWarBuff { + uint32 buff_id = 1; + uint32 buff_level = 2; +} + +message SimplifiedGodWarOverall { + uint32 overall_id = 1; + uint32 overall_value = 2; +} + +message SimplifiedGodWarActivity { + uint32 activity_id = 1; + uint32 challenge_schedule_id = 2; + SimplifiedGodWarChallenge challenge = 3; + repeated SimplifiedGodWarChallengeHistory challenge_history_list = 4; +} + +message SimplifiedGodWarChallenge { + repeated SimplifiedGodWarChallengeAvatar avatar_list = 1; + repeated SimplifiedGodWarChallengeElf elf_list = 2; + repeated uint32 support_avatar_id_list = 3; + uint32 challenge_score = 4; + uint32 random_seed = 5; + bool is_use_virtual_avatar = 6; + uint32 star_ring_energy = 7; + uint32 cur_site_id = 8; + uint32 cur_theme_id = 9; + repeated SimplifiedGodWarBuff buff_list = 11; + repeated uint32 assist_role_id_list = 12; + repeated uint32 selected_buff_id_list = 13; + repeated uint32 selected_assist_rold_id_list = 14; + repeated SimplifiedGodWarOverall overall_list = 15; + string challenge_transaction_str = 16; +} + +message SimplifiedGodWarChallengeHistory { + uint32 theme_id = 1; + uint32 avatar_id = 2; + bool is_challenge_succ = 3; + uint32 max_challenge_score = 4; + uint32 accumulate_challenge_score = 5; +} + +// CmdID: 8250 +message SimplifiedGodWarGetActivityReq { +} + +// CmdID: 8251 +message SimplifiedGodWarGetActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + GOD_WAR_LOCKED = 3; + FEATURE_CLOSED = 4; + } + + SimplifiedGodWarGetActivityRsp.Retcode retcode = 1; + SimplifiedGodWarActivity activity = 2; +} + +// CmdID: 8252 +message SimplifiedGodWarSelectChallengeAvatarReq { + repeated uint32 avatar_id_list = 1; + repeated uint32 support_avatar_id_list = 2; + uint32 elf_id = 3; + bool is_use_virtual_avatar = 4; + uint32 theme_id = 5; +} + +// CmdID: 8253 +message SimplifiedGodWarSelectChallengeAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ALREADY_SELECTED = 2; + AVATAR_ERROR = 3; + SUPPORT_AVATAR_ERROR = 4; + ELF_ERROR = 5; + CHALLENGE_SCHEDULE_ERROR = 6; + FEATURE_CLOSED = 7; + FORCE_SETTLE = 8; + NOT_OPEN = 9; + GOD_WAR_LOCKED = 10; + THEME_LOCKED = 11; + } + + SimplifiedGodWarSelectChallengeAvatarRsp.Retcode retcode = 1; +} + +// CmdID: 8254 +message SimplifiedGodWarResetChallengeReq { +} + +// CmdID: 8255 +message SimplifiedGodWarResetChallengeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSED = 2; + FORCE_SETTLE = 3; + NOT_OPEN = 4; + GOD_WAR_LOCKED = 5; + } + + SimplifiedGodWarResetChallengeRsp.Retcode retcode = 1; + repeated SimplifiedGodWarChallengeAvatar avatar_list = 2; + repeated SimplifiedGodWarBuff buff_list = 3; + bool is_challenge_succ = 4; + uint32 challenge_score = 5; + repeated Material reward_material_list = 6; + uint32 site_idx = 7; + RewardData first_win_reward = 8; + bool is_use_virtual_avatar = 9; + uint32 challenge_cost_time = 10; + uint32 grade = 11; + uint32 activity_id = 12; + uint32 theme_id = 13; + uint32 total_score = 14; +} + +// CmdID: 8256 +message SimplifiedGodWarGetBuffReq { +} + +// CmdID: 8257 +message SimplifiedGodWarGetBuffRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSED = 2; + NOT_OPEN = 3; + GOD_WAR_LOCKED = 4; + SITE_ERROR = 5; + } + + SimplifiedGodWarGetBuffRsp.Retcode retcode = 1; + repeated uint32 candidate_buff_suit_id_list = 2; +} + +// CmdID: 8258 +message SimplifiedGodWarSelectBuffReq { + uint32 buff_suit_id = 1; + uint32 core_buff_id = 2; +} + +// CmdID: 8259 +message SimplifiedGodWarSelectBuffRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSED = 2; + NOT_OPEN = 3; + NOT_CANDIDATE = 4; + GOD_WAR_LOCKED = 5; + SITE_ERROR = 6; + HAS_SELECTED = 7; + } + + SimplifiedGodWarSelectBuffRsp.Retcode retcode = 1; + uint32 buff_suit_id = 2; + uint32 core_buff_id = 3; +} + +// CmdID: 8260 +message SimplifiedGodWarGetAssistRoleReq { +} + +// CmdID: 8261 +message SimplifiedGodWarGetAssistRoleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSED = 2; + NOT_OPEN = 3; + GOD_WAR_LOCKED = 4; + SITE_ERROR = 5; + } + + SimplifiedGodWarGetAssistRoleRsp.Retcode retcode = 1; + repeated uint32 candidate_assist_rold_id_list = 2; +} + +// CmdID: 8262 +message SimplifiedGodWarSelectAssistRoleReq { + uint32 assist_role_id = 1; +} + +// CmdID: 8263 +message SimplifiedGodWarSelectAssistRoleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSED = 2; + NOT_OPEN = 3; + NOT_CANDIDATE = 4; + GOD_WAR_LOCKED = 5; + SITE_ERROR = 6; + HAS_SELECTED = 7; + } + + SimplifiedGodWarSelectAssistRoleRsp.Retcode retcode = 1; + uint32 assist_role_id = 2; +} + +// CmdID: 8264 +message SimplifiedGodWarEnterSiteReq { +} + +// CmdID: 8265 +message SimplifiedGodWarEnterSiteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSED = 2; + NOT_OPEN = 3; + GOD_WAR_LOCKED = 4; + THEME_LOCKED = 5; + } + + SimplifiedGodWarEnterSiteRsp.Retcode retcode = 1; + uint32 site_id = 2; +} + +enum CmdTypeSimplifiedgodwar { + CMD_TYPE_SIMPLIFIEDGODWAR_NONE = 0; + CMD_SIMPLIFIED_GOD_WAR_GET_ACTIVITY_REQ = 8250; + CMD_SIMPLIFIED_GOD_WAR_GET_ACTIVITY_RSP = 8251; + CMD_SIMPLIFIED_GOD_WAR_SELECT_CHALLENGE_AVATAR_REQ = 8252; + CMD_SIMPLIFIED_GOD_WAR_SELECT_CHALLENGE_AVATAR_RSP = 8253; + CMD_SIMPLIFIED_GOD_WAR_RESET_CHALLENGE_REQ = 8254; + CMD_SIMPLIFIED_GOD_WAR_RESET_CHALLENGE_RSP = 8255; + CMD_SIMPLIFIED_GOD_WAR_GET_BUFF_REQ = 8256; + CMD_SIMPLIFIED_GOD_WAR_GET_BUFF_RSP = 8257; + CMD_SIMPLIFIED_GOD_WAR_SELECT_BUFF_REQ = 8258; + CMD_SIMPLIFIED_GOD_WAR_SELECT_BUFF_RSP = 8259; + CMD_SIMPLIFIED_GOD_WAR_GET_ASSIST_ROLE_REQ = 8260; + CMD_SIMPLIFIED_GOD_WAR_GET_ASSIST_ROLE_RSP = 8261; + CMD_SIMPLIFIED_GOD_WAR_SELECT_ASSIST_ROLE_REQ = 8262; + CMD_SIMPLIFIED_GOD_WAR_SELECT_ASSIST_ROLE_RSP = 8263; + CMD_SIMPLIFIED_GOD_WAR_ENTER_SITE_REQ = 8264; + CMD_SIMPLIFIED_GOD_WAR_ENTER_SITE_RSP = 8265; +} + +enum SimplifiedGodWarSiteType { + SIMPLIFIED_GOD_WAR_SITE_TYPE_NONE = 0; + SIMPLIFIED_GOD_WAR_SITE_TYPE_START = 1; + SIMPLIFIED_GOD_WAR_SITE_TYPE_NORMAL = 2; + SIMPLIFIED_GOD_WAR_SITE_TYPE_ASSIST_ROLE = 3; + SIMPLIFIED_GOD_WAR_SITE_TYPE_FINAL_BOSS = 4; +} + +message SlgBattleBuffData { + uint32 buff_id = 1; + SlgBuffType type = 2; + uint32 num = 3; +} + +message SlgBattleCountryData { + uint32 country_id = 1; + uint32 take_down_boss_num = 2; + repeated SlgBattleBuffData buff_list = 3; + uint32 country_score = 4; +} + +message SlgBattlePointCountryData { + uint32 country_id = 1; + uint64 point_score_u64 = 2; +} + +message SlgBattlePointBossData { + uint32 boss_id = 1; + SlgBossType type = 2; + bool is_alive = 3; + uint32 boss_schedule_id = 4; +} + +message SlgBattlePointData { + uint32 point_id = 1; + uint32 occupy_country_id = 2; + repeated SlgBattlePointCountryData point_country_data_list = 3; + SlgBattlePointBossData boss_data = 4; + repeated uint32 occupied_country_list = 5; +} + +message SlgBattlePlayerData { + uint32 country_id = 1; + repeated uint32 buff_list = 2; + uint32 score = 3; +} + +message SlgBattleData { + uint32 battle_id = 1; + uint32 battle_schedule_id = 2; + repeated SlgBattleCountryData country_data_list = 3; + repeated SlgBattlePointData point_data_list = 4; + uint32 begin_time = 5; + uint32 end_time = 6; + uint32 today_begin_time = 7; + uint32 today_end_time = 8; + SlgBattlePlayerData player_data = 9; + repeated uint32 adjoining_point_list = 10; + uint32 last_settle_time = 11; + bool is_settled = 12; + uint32 level_group_id = 13; +} + +message SlgBattleBriefCountryData { + uint32 country_id = 1; + uint32 country_score = 2; +} + +message SlgBriefBattleData { + uint32 battle_id = 1; + uint32 battle_schedule_id = 2; + uint32 country_id = 3; + repeated SlgBattleBriefCountryData country_data_list = 4; + bool is_settled = 5; +} + +// CmdID: 6050 +message SlgGetDataReq { + uint32 country_id = 1; + string region = 2; +} + +// CmdID: 6051 +message SlgGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + BATTLE_NOT_FOUND = 3; + NOT_IN_BATTLE = 4; + FEATURE_CLOSED = 5; + } + + SlgGetDataRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + uint32 next_battle_begin_time = 3; + SlgBattleData battle_data = 4; + uint32 activity_stamina_num = 5; + uint32 last_recover_activity_stamina_time = 6; + uint32 begin_time = 7; + uint32 end_time = 8; + repeated uint32 unlock_story_id_list = 9; + repeated SlgBriefBattleData history_battle_data_list = 10; + uint32 battle_schedule_id = 11; + SlgEnrollData current_enroll_data = 12; + repeated uint32 taken_score_reward_id_list = 13; + uint32 total_score = 14; +} + +// CmdID: 6052 +message SlgPointSweepReq { + uint32 point_id = 1; +} + +// CmdID: 6053 +message SlgPointSweepRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 3; + POINT_INVALID = 4; + COST_MATERIAL_LACK = 5; + EQUIPMENT_FULL = 6; + } + + SlgPointSweepRsp.Retcode retcode = 1; + uint32 point_id = 2; + RewardData reward_data = 3; +} + +message SlgEnrollData { + uint32 enroll_battle_schedule_id = 1; + uint32 enroll_begin_time = 2; + uint32 enroll_end_time = 3; + bool is_enrolled = 4; +} + +// CmdID: 6054 +message SlgBattleMatchRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_BATTLE_AVAILABLE = 2; + } + + SlgBattleMatchRsp.Retcode retcode = 1; + uint32 battle_id = 2; + uint32 battle_schedule_id = 3; +} + +// CmdID: 6055 +message SlgEnrollReq { + uint32 battle_schedule_id = 1; + uint32 group_id = 2; + uint32 match_score = 3; + string region_name = 4; +} + +// CmdID: 6056 +message SlgEnrollRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + BATTLE_SCHEDULE_ID_ERROR = 2; + HAS_ENROLL = 3; + TOO_FREQUENT = 4; + FEATURE_CLOSED = 5; + } + + SlgEnrollRsp.Retcode retcode = 1; + uint32 battle_schedule_id = 2; +} + +// CmdID: 6057 +message SlgGetActivityStaminaReq { +} + +// CmdID: 6058 +message SlgGetActivityStaminaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_SCHEDULE = 2; + } + + SlgGetActivityStaminaRsp.Retcode retcode = 1; + uint32 activity_stamina_num = 2; + uint32 last_recover_activity_stamina_time = 3; +} + +// CmdID: 6059 +message SlgTakeScoreRewardReq { + SlgScoreRewardType score_reward_type = 1; +} + +// CmdID: 6060 +message SlgTakeScoreRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_SCHEDULE = 2; + } + + SlgTakeScoreRewardRsp.Retcode retcode = 1; + repeated uint32 has_taken_score_reward_id_list = 2; + RewardData reward_data = 3; +} + +// CmdID: 6061 +message SlgBattleAddScoreFailNotify { + uint32 point_id = 1; +} + +// CmdID: 6062 +message SlgGetBattleRankReq { + uint32 country_id = 1; +} + +message SlgBattleRank { + bool is_all = 1; + uint32 country_id = 2; + uint32 total_num = 3; + RankShowData rank_data = 4; +} + +// CmdID: 6063 +message SlgGetBattleRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_SCHEDULE = 2; + NOT_IN_BATTLE = 3; + } + + SlgGetBattleRankRsp.Retcode retcode = 1; + SlgBattleRank rank = 2; + uint32 battle_schedule_id = 3; +} + +// CmdID: 6064 +message SlgGetPointRankReq { + uint32 point_id = 1; +} + +// CmdID: 6065 +message SlgGetPointRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_SCHEDULE = 2; + NOT_IN_BATTLE = 3; + POINT_ERROR = 4; + } + + SlgGetPointRankRsp.Retcode retcode = 1; + uint32 battle_schedule_id = 2; + uint32 point_id = 3; + uint32 player_score = 4; + repeated UserRankData rank_list = 5; +} + +// CmdID: 6066 +message SlgBattleSettleNotify { + uint32 schedule_id = 1; + uint32 battle_schedule_id = 2; + RewardData reward_data = 3; + uint32 rank = 5; +} + +message SlgBroadcastPlayer { + uint32 uid = 1; + uint32 country_id = 2; + string nickname = 3; +} + +message SlgBattleBroadcast { + uint32 broadcast_id = 1; + uint32 trigger_time = 2; + uint32 point_id = 3; + uint32 para = 4; + SlgBroadcastPlayer trigger_player = 5; +} + +// CmdID: 6068 +message SlgBroadcastNotify { + repeated SlgBattleBroadcast broadcast_list = 1; +} + +// CmdID: 6069 +message SlgMainPageReq { + bool is_in_main_page = 1; +} + +// CmdID: 6070 +message SlgBattleInSettleNotify { +} + +// CmdID: 6071 +message SlgGetBriefRankReq { +} + +// CmdID: 6072 +message SlgGetBriefRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_BATTLE = 2; + } + + SlgGetBriefRankRsp.Retcode retcode = 1; + uint32 all_country_rank = 2; + uint32 self_country_rank = 3; +} + +enum CmdTypeSlg { + CMD_TYPE_SLG_NONE = 0; + CMD_SLG_GET_DATA_REQ = 6050; + CMD_SLG_GET_DATA_RSP = 6051; + CMD_SLG_POINT_SWEEP_REQ = 6052; + CMD_SLG_POINT_SWEEP_RSP = 6053; + CMD_SLG_BATTLE_MATCH_RSP = 6054; + CMD_SLG_ENROLL_REQ = 6055; + CMD_SLG_ENROLL_RSP = 6056; + CMD_SLG_GET_ACTIVITY_STAMINA_REQ = 6057; + CMD_SLG_GET_ACTIVITY_STAMINA_RSP = 6058; + CMD_SLG_TAKE_SCORE_REWARD_REQ = 6059; + CMD_SLG_TAKE_SCORE_REWARD_RSP = 6060; + CMD_SLG_BATTLE_ADD_SCORE_FAIL_NOTIFY = 6061; + CMD_SLG_GET_BATTLE_RANK_REQ = 6062; + CMD_SLG_GET_BATTLE_RANK_RSP = 6063; + CMD_SLG_GET_POINT_RANK_REQ = 6064; + CMD_SLG_GET_POINT_RANK_RSP = 6065; + CMD_SLG_BATTLE_SETTLE_NOTIFY = 6066; + CMD_SLG_BROADCAST_NOTIFY = 6068; + CMD_SLG_MAIN_PAGE_REQ = 6069; + CMD_SLG_BATTLE_IN_SETTLE_NOTIFY = 6070; + CMD_SLG_GET_BRIEF_RANK_REQ = 6071; + CMD_SLG_GET_BRIEF_RANK_RSP = 6072; + CMD_SLG_DUMMY = 6149; +} + +enum SlgMatchFactorType { + SLG_MATCH_FACTOR_TYPE_NONE = 0; + SLG_MATCH_FACTOR_TYPE_CRYSTAL_COST = 1; + SLG_MATCH_FACTOR_TYPE_PLAYER_LEVEL = 2; + SLG_MATCH_FACTOR_TYPE_TOP_AVATAR_COMBAT_SUM = 3; + SLG_MATCH_FACTOR_TYPE_CUR_BATTLE_SCORE = 4; +} + +enum SlgBuffType { + SLG_BUFF_TYPE_NONE = 0; + SLG_BUFF_TYPE_ACTIVITY_STAMINA_COST = 1; + SLG_BUFF_TYPE_STAGE_SCORE = 2; + SLG_BUFF_TYPE_SETTLE_SCORE = 3; + SLG_BUFF_TYPE_STAGE = 4; +} + +enum SlgBuildingType { + SLG_BUILDING_TYPE_NONE = 0; + SLG_BUILDING_TYPE_OCCUPY_OWNER_BUFF = 1; + SLG_BUILDING_TYPE_OCCUPY_OTHERS_BUFF = 2; + SLG_BUILDING_TYPE_SMALL_BOSS = 3; + SLG_BUILDING_TYPE_BIG_BOSS = 4; +} + +enum SlgBossType { + SLG_BOSS_TYPE_NONE = 0; + SLG_BOSS_TYPE_SMALL_BOSS = 1; + SLG_BOSS_TYPE_BIG_BOSS = 2; +} + +enum SlgScoreRewardType { + SLG_SCORE_REWARD_TYPE_NONE = 0; + SLG_SCORE_REWARD_TYPE_PERSONAL_TOTAL = 1; + SLG_SCORE_REWARD_TYPE_COUNTRY = 2; +} + +enum SlgBroadcastType { + SLG_BROADCAST_TYPE_NONE = 0; + SLG_BROADCAST_TYPE_OCCUPY = 1; + SLG_BROADCAST_TYPE_SCORE_STREAK = 2; + SLG_BROADCAST_TYPE_OCCUPY_STREAK = 3; +} + +enum SlgBattleRankType { + SLG_BATTLE_RANK_TYPE_NONE = 0; + SLG_BATTLE_RANK_NORMAL_POINT = 1; + SLG_BATTLE_RANK_BIG_BOSS = 2; + SLG_BATTLE_RANK_COUNTRY = 3; +} + +message SwitchData { + FeatureSwitchType type = 1; + bytes data = 2; + uint32 min_level = 3; + uint32 max_level = 4; + uint32 begin_time = 5; + uint32 end_time = 6; +} + +// CmdID: 3700 +message SwitchDataNotify { + repeated SwitchData data_list = 1; +} + +// CmdID: 3701 +message SwitchChangeDataNotify { + FeatureSwitchOpType op_type = 1; + repeated SwitchData data_list = 2; +} + +message StageSwitchData { + uint32 stage_id = 1; +} + +message ShopSwitchData { + uint32 shop_id = 1; +} + +message ShopGoodsPoolSwitchData { + uint32 pool_id = 1; +} + +message ActivityPanelSwitchData { + uint32 panel_id = 1; +} + +message MissionHideSwitchData { + uint32 mission_id = 1; +} + +message ItemUseSwitchData { + uint32 use_id = 1; +} + +message MaterialHideSwitchData { + uint32 material_id = 1; +} + +message MissionRewardSwitchData { + uint32 mission_id = 1; +} + +message MailAttachmentTakeSwitchData { +} + +message DanmakuSwitchData { +} + +message ExBossSwitchData { + uint32 boss_group_id = 1; +} + +message ShopGoodsPoolHideSwitchData { + uint32 shop_id = 1; + uint32 pool_id = 2; +} + +message ChatSwitchData { + uint32 chat_switch_channel_type = 1; +} + +message HexieSwitchData { +} + +message McoinBuySwitchData { + uint32 account_type = 1; +} + +message ShopGoodsSwitchData { + uint32 goods_id = 1; +} + +message CommandCDSwitchData { + uint32 cmd_id = 1; + uint32 cd = 2; +} + +message EndlessSwitchData { + uint32 endless_type = 1; + uint32 player_group = 2; +} + +message ExBossEnterSwitchData { + uint32 ex_boss_id = 1; +} + +message GachaSwitchData { + uint32 gacha_id = 1; + uint32 gacha_type = 2; +} + +message AvatarFragmentSwitchData { + uint32 avatar_id = 1; +} + +message ElfFragmentSwitchData { + uint32 elf_id = 1; +} + +message EquipForgeSwitchData { + uint32 equip_forge_id = 1; +} + +message BattlePassSwitchData { +} + +message GachaCoinTransferData { + uint32 gacha_type = 1; +} + +message RpgTaleSwitchData { + uint32 tale_id = 1; + uint32 site_id = 2; +} + +message ActivitySwitchData { + uint32 activity_type = 1; +} + +message ThemeWantedSwitchData { +} + +message SnsRequestSwitchData { +} + +message GodWarSwitchData { + uint32 god_war_id = 1; +} + +message ServerStopGachaMsgData { +} + +message RefineRuneSwitchData { +} + +message ChangeFriendRemarkSwitchData { +} + +message GachaDailyTimesLimitSwitchData { +} + +message InviteActivitySwitchData { +} + +message QCandyBattleActivitySwitchData { + uint32 switch_type = 1; +} + +message GlobalExploreSwitchData { +} + +message RpgTaleActivitySwitchData { + uint32 tale_id = 1; + uint32 schedule_id = 2; +} + +message RankSwitchData { + string rank_key = 1; +} + +message ChapterBwWorldSwitchData { + uint32 chapter_id = 1; +} + +message UltraEndlessForceSyncLocalScoreSwitchData { +} + +message ExBossLockAvatarSwitchData { +} + +message ChapterArkSwitchData { + uint32 chapter_id = 1; +} + +message RaidReplaceSwitchData { + uint32 schedule_id = 1; +} + +message PjmsEnterWorldSwitchData { + uint32 world_id = 1; +} + +message PjmsQuestSwitchData { + uint32 chapter_id = 1; + uint32 series_id = 2; +} + +message PjmsActivitySwitchData { + uint32 activity_id = 1; +} + +message PjmsFirstEnterSwitchData { +} + +message EquipmentQuickLevelUpSwitchData { +} + +message SimplifiedGodWarSwitchData { +} + +message DevilAutoChessSwitchData { +} + +message TileSwitchData { + uint32 tower_id = 1; +} + +message FutariBattleSwitchData { +} + +message RpgTaleAreaSwitchData { + uint32 tale_id = 1; + uint32 area_id = 2; +} + +message PjmsChapterKnightRichManSwitchData { + uint32 rich_man_id = 1; +} + +message BattlePassUpgradeSwitchData { +} + +message CrossRoomSwitchData { + uint32 room_mode = 1; +} + +message PjmsChapterKnightSpaceAdventureSwitchData { + uint32 activity_id = 1; + uint32 area_id = 2; +} + +enum CmdTypeSwitch { + CMD_TYPE_SWITCH_NONE = 0; + CMD_SWITCH_DATA_NOTIFY = 3700; + CMD_SWITCH_CHANGE_DATA_NOTIFY = 3701; +} + +enum ChatSwitchChannelType { + CHAT_SWITCH_CHANNEL_TYPE_NONE = 0; + CHAT_SWITCH_CHANNEL_TYPE_WORLD = 1; + CHAT_SWITCH_CHANNEL_TYPE_PRIVATE = 2; + CHAT_SWITCH_CHANNEL_TYPE_ARMADA = 3; + CHAT_SWITCH_CHANNEL_TYPE_TEAM = 4; + CHAT_SWITCH_CHANNEL_TYPE_GROUP = 5; + CHAT_SWITCH_CHANNEL_TYPE_COMMON_CHATWORLD = 6; + CHAT_SWITCH_CHANNEL_TYPE_OTHERS = 7; +} + +enum FeatureSwitchActivityType { + FEATURE_SWITCH_ACTIVITY_TYPE_NONE = 0; + FEATURE_SWITCH_ACTIVITY_TYPE_SLG_GAME = 1; + FEATURE_SWITCH_ACTIVITY_TYPE_SLG_BATTLE = 2; + FEATURE_SWITCH_ACTIVITY_TYPE_SLG_MATCH = 3; + FEATURE_SWITCH_ACTIVITY_TYPE_GLOBAL_POLLING = 4; + FEATURE_SWITCH_ACTIVITY_TYPE_SLG_CHAT = 5; + FEATURE_SWITCH_ACTIVITY_TYPE_SLG_BROADCAST = 6; + FEATURE_SWITCH_ACTIVITY_TYPE_GLOBAL_EXPLORE_BROADCAST = 7; +} + +enum QCandyBattleActivitySwitchType { + QCANDY_BATTLE_ACTIVITY_SWITCH_TYPE_NONE = 0; + QCANDY_BATTLE_ACTIVITY_SWITCH_TYPE_PVP = 1; + QCANDY_BATTLE_ACTIVITY_SWITCH_TYPE_RANK = 2; +} + +// CmdID: 1000 +message CheckExtraStoryLockedAvatarBindEquipReq { +} + +// CmdID: 1001 +message CheckExtraStoryLockedAvatarBindEquipRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + CheckExtraStoryLockedAvatarBindEquipRsp.Retcode retcode = 1; + bool need_switch = 2; +} + +// CmdID: 1002 +message SwitchExtraStoryLockedAvatarBindEquipReq { + AvatarBindEquipMode mode = 1; +} + +// CmdID: 1003 +message SwitchExtraStoryLockedAvatarBindEquipRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + SwitchExtraStoryLockedAvatarBindEquipRsp.Retcode retcode = 1; + uint32 succ_cnt = 2; + AvatarBindEquipMode mode = 3; +} + +// CmdID: 1008 +message TakeDormLikesDropReq { +} + +// CmdID: 1009 +message TakeDormLikesDropRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LEVEL_LIMIT = 2; + NO_DROP = 3; + HAVE_TAKEN = 4; + } + + TakeDormLikesDropRsp.Retcode retcode = 1; + repeated DropItem drop_item_list = 2; + uint32 yesterday_be_liked_num = 3; +} + +// CmdID: 1010 +message CheckDormLikesDropReq { +} + +// CmdID: 1011 +message CheckDormLikesDropRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LEVEL_LIMIT = 2; + } + + CheckDormLikesDropRsp.Retcode retcode = 1; + bool has_likes_drop = 2; + uint32 yesterday_be_liked_num = 3; +} + +// CmdID: 1012 +message GetWorldMapDataReq { +} + +message WorldMapData { + uint32 world_map_id = 1; + uint32 begin_time = 2; + uint32 end_time = 3; + uint32 high_light_min_level = 4; + uint32 high_light_max_level = 5; + uint32 weight = 6; + uint32 advance_time = 7; + uint32 id = 8; +} + +// CmdID: 1013 +message GetWorldMapDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetWorldMapDataRsp.Retcode retcode = 1; + repeated WorldMapData world_map_list = 2; +} + +// CmdID: 1018 +message GetMpStageRecordReq { +} + +// CmdID: 1019 +message GetMpStageRecordRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetMpStageRecordRsp.Retcode retcode = 1; + repeated MpStageRecord record_list = 2; +} + +// CmdID: 1026 +message LobbySetClientStatusReq { + LobbyClientStatus status = 1; +} + +// CmdID: 1027 +message LobbySetClientStatusRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_TEAM = 2; + } + + LobbySetClientStatusRsp.Retcode retcode = 1; +} + +// CmdID: 1028 +message LobbyPrepareCountDownNotify { + uint32 count_down_time = 1; +} + +// CmdID: 1029 +message MpStageVoteCountDownNotify { + uint32 count_down_time = 1; +} + +// CmdID: 1030 +message MpStageVoteReq { + MpStageVoteOption option = 1; +} + +// CmdID: 1031 +message MpStageVoteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_TEAM = 2; + NOT_VOTING = 3; + } + + MpStageVoteRsp.Retcode retcode = 1; + MpStageVoteOption option = 2; +} + +// CmdID: 1032 +message MpStageVoteResultNotify { + uint32 option = 1; +} + +// CmdID: 1033 +message LobbyTimeoutNoLeaderNotify { +} + +// CmdID: 1034 +message TakeWeekDayActivityReturnCoinReq { +} + +// CmdID: 1035 +message TakeWeekDayActivityReturnCoinRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_RETURN = 2; + COIN_LIMIT = 3; + } + + TakeWeekDayActivityReturnCoinRsp.Retcode retcode = 1; + uint32 num = 2; + bool is_coin_full_after_taken = 3; +} + +// CmdID: 1036 +message MpStageGetVoteInfoReq { +} + +message MpStageVoteInfo { + uint32 uid = 1; + uint32 option = 2; +} + +// CmdID: 1037 +message MpStageGetVoteInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_TEAM = 2; + NOT_IN_VOTING = 3; + } + + MpStageGetVoteInfoRsp.Retcode retcode = 1; + repeated MpStageVoteInfo vote_info_list = 2; + uint32 vote_end_time = 3; +} + +// CmdID: 1038 +message MpStageMemberVoteNotify { + repeated MpStageVoteInfo vote_info_list = 1; +} + +// CmdID: 1039 +message SwitchExtraStoryLineEnhanceReq { +} + +// CmdID: 1040 +message SwitchExtraStoryLineEnhanceRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + SwitchExtraStoryLineEnhanceRsp.Retcode retcode = 1; + bool is_open_enhance = 2; +} + +// CmdID: 1043 +message GetChallengeStepBonusReq { + uint32 step_id = 1; +} + +// CmdID: 1044 +message GetChallengeStepBonusRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STEP_ID_ERROR = 2; + BONUS_HAS_TAKEN = 3; + STEP_NOT_FINISH = 4; + EQUIPMENT_FULL = 5; + EQUIPMENT_MATERIAL_LIMIT = 6; + EQUIPMENT_FRAGMENT_LIMIT = 7; + EQUIPMENT_ELF_FRAGMENT_LIMIT = 8; + } + + GetChallengeStepBonusRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; +} + +message CityActivitySite { + uint32 site_id = 1; + uint32 site_begin_time = 2; + uint32 site_end_time = 3; + uint32 activity_schedule_id = 4; + uint32 activity_begin_time = 5; + uint32 activity_end_time = 6; +} + +message CityActivityRole { + uint32 role_id = 1; + uint32 affinity = 2; + uint32 affinity_level = 3; + bool is_like_type_gift_received = 4; + bool is_favourite_gift_received = 5; +} + +message CityActivityEvent { + uint32 site_id = 1; + repeated uint32 event_id_list = 2; +} + +message CityActivityPhoneEvent { + uint32 role_id = 1; + uint32 phone_event_id = 2; + PhoneEventStatus status = 3; +} + +message CityActivityAffinityDropInfo { + uint32 max_daily_affinity_drop_in_stage = 1; + uint32 today_affinity_drop_in_stage = 2; +} + +// CmdID: 1101 +message MpLeaveTeamNotify { + int32 reason = 1; +} + +// CmdID: 1102 +message GetLobbyStatReq { + repeated uint32 stage_id_list = 1; +} + +message LobbyTeamPlayerNum { + LobbyStatus status = 1; + uint32 player_num = 2; +} + +message LobbyStat { + uint32 stage_id = 1; + repeated LobbyTeamPlayerNum in_team_player_num_list = 2; + uint32 wait_player_num = 3; +} + +// CmdID: 1103 +message GetLobbyStatRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetLobbyStatRsp.Retcode retcode = 1; + repeated LobbyStat lobby_stat_list = 2; + LobbyStat lobby_total_stat = 3; +} + +// CmdID: 1134 +message DisjoinFurnitureReq { + repeated DepotFurniture furniture_list = 1; +} + +// CmdID: 1135 +message DisjoinFurnitureRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FURNITURE_LACK = 2; + } + + DisjoinFurnitureRsp.Retcode retcode = 1; + repeated Material material_list = 2; +} + +message ChatReport { + uint32 target_uid = 1; + uint32 report_type = 2; + string report_detail = 3; + uint32 reporter_uid = 4; +} + +// CmdID: 1150 +message ChatReportReq { + ChatReport chat_report = 1; +} + +// CmdID: 1151 +message ChatReportRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHAT_BLOCKED = 2; + IN_REPORT_CD = 3; + SENSITIVE_WORDS = 4; + } + + ChatReportRsp.Retcode retcode = 1; + uint32 cd_left_time = 2; +} + +// CmdID: 1152 +message ChatReportNotify { + uint32 report_uid = 1; + uint32 target_uid = 2; + uint32 report_type = 3; + uint32 lost_chat_credit = 4; + uint32 chat_forbid_times = 5; +} + +// CmdID: 1153 +message ChatUnforbidNotify { + repeated uint32 uid_list = 1; +} + +// CmdID: 1154 +message ChatForbidNotify { + enum ForbidType { + FORBID_COMMON = 0; + REPEAT_CHAT = 1; + } + + uint32 forbid_finish_time = 1; + ChatForbidNotify.ForbidType forbid_type = 2; +} + +// CmdID: 1159 +message GetChatReportInfoReq { +} + +// CmdID: 1160 +message GetChatReportInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetChatReportInfoRsp.Retcode retcode = 1; + uint32 chat_forbid_finish_time = 2; + uint32 chat_forbid_times = 3; + uint32 lost_chat_credit = 4; +} + +// CmdID: 1161 +message ChatForbidSnsNotify { + uint32 credit_bound = 1; + uint32 chat_forbid_finish_time = 2; + uint32 chat_forbid_times = 3; +} + +// CmdID: 1162 +message RecoverChatCreditNotify { + uint32 lost_chat_credit = 1; +} + +// CmdID: 1163 +message SendChatRedEnvelopeReq { + uint32 item_id = 1; + uint32 channel = 2; + string msg = 3; + string nickname = 4; + uint32 armada_id = 5; + uint32 red_envelope_id = 6; +} + +// CmdID: 1164 +message SendChatRedEnvelopeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LACK_ITEM = 2; + LACK_TIMES = 3; + CHAT_FORBIDEN = 4; + LACK_CD = 5; + LACK_LEVEL = 6; + NOT_IN_CHATWORLD = 7; + NOT_IN_ARMADA = 8; + NOT_IN_WORLD_CHATROOM = 9; + SENSITIVE_WORDS = 10; + } + + SendChatRedEnvelopeRsp.Retcode retcode = 1; + uint32 item_id = 2; + uint32 channel = 3; + string msg = 4; + uint32 red_envelope_id = 5; + uint32 expire_time = 6; +} + +// CmdID: 1165 +message TakeChatRedEnvelopeReq { + uint32 channel = 1; + uint32 sender_uid = 2; + uint32 red_envelope_id = 3; + uint32 item_id = 4; + uint32 armada_id = 5; + bool is_sender_npc = 6; + string nickname = 7; +} + +// CmdID: 1166 +message TakeChatRedEnvelopeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKEN = 2; + OVER = 3; + LACK_TIMES = 4; + LACK_LEVEL = 5; + EXPIRE_TIME = 6; + TAKE_BY_OTHERS = 7; + NO_CHATROOM = 8; + NOT_IN_ARMADA = 9; + NOT_IN_WORLD_CHATROOM = 10; + } + + TakeChatRedEnvelopeRsp.Retcode retcode = 1; + uint32 channel = 2; + uint32 sender_uid = 3; + string sender_nickname = 4; + uint32 item_id = 5; + uint32 take_scoin = 6; + repeated DropItem drop_item_list = 7; + string msg = 8; + uint32 red_envelope_id = 9; + uint32 drop_id = 10; + uint32 take_hcoin = 11; + bool is_sender_npc = 12; + Material take_material = 13; + bool is_take_over = 14; + uint32 red_envelope_take_num_today = 15; + uint32 red_envelope_take_num_per_day = 16; +} + +// CmdID: 1191 +message GetPhotoDataReq { + uint32 type = 1; +} + +// CmdID: 1192 +message GetPhotoDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetPhotoDataRsp.Retcode retcode = 1; + uint32 type = 2; + repeated uint32 photo_id_list = 3; +} + +// CmdID: 1193 +message GetWikiDataReq { +} + +// CmdID: 1194 +message GetWikiDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetWikiDataRsp.Retcode retcode = 1; + repeated uint32 has_take_rating_reward_list = 2; + repeated uint32 has_take_activity_suit_reward_list = 3; +} + +// CmdID: 1195 +message TakeWikiRatingRewardReq { + uint32 rating_id = 1; + uint32 rating_score = 2; + repeated uint32 cg_list = 3; +} + +// CmdID: 1196 +message TakeWikiRatingRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TKAE = 3; + SCORE_LACK = 4; + } + + TakeWikiRatingRewardRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; + uint32 rating_id = 3; +} + +// CmdID: 1197 +message GetPhonePendantDataReq { + repeated uint32 phone_pendant_id_list = 1; +} + +// CmdID: 1198 +message GetPhonePendantDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetPhonePendantDataRsp.Retcode retcode = 1; + bool is_all = 2; + repeated PhonePendant phone_pendant_list = 3; +} + +// CmdID: 1199 +message PhonePendantOpReq { + PhonePendantOpType op = 1; + uint32 on_id = 2; + uint32 off_id = 3; +} + +// CmdID: 1200 +message PhonePendantOpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_OWN = 2; + EXPIRED = 3; + OFF_ID_ERROR = 4; + } + + PhonePendantOpRsp.Retcode retcode = 1; + PhonePendantOpType op = 2; + uint32 on_id = 3; + uint32 off_id = 4; +} + +// CmdID: 1215 +message GetTeamListReq { + repeated uint32 stage_id_list = 1; + repeated uint32 team_id_list = 2; + bool is_select_in_order = 3; + uint32 level = 4; +} + +// CmdID: 1216 +message GetTeamListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_STAGE = 2; + SERVER_BUSY = 3; + } + + GetTeamListRsp.Retcode retcode = 1; + repeated MpTeamData team_data_list = 2; +} + +// CmdID: 1245 +message GetEmojiDataReq { +} + +// CmdID: 1246 +message GetEmojiDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetEmojiDataRsp.Retcode retcode = 1; + repeated uint32 emoji_id_list = 2; + bool is_all = 3; +} + +message MpMatchStage { + uint32 stage_id = 1; + bool has_leader_stamina = 2; + bool has_leader_enter_times = 3; + AvatarDetailData avatar_detail = 4; + repeated AvatarDetailData backup_avatar_list = 5; + bool has_leader_theme_wanted_ticket = 6; +} + +// CmdID: 1247 +message MpFastMatchReq { + repeated uint32 stage_id_list = 1; + uint32 device_score = 2; + repeated MpMatchStage match_stage_list = 3; + uint32 level = 4; + uint32 client_rtt = 5; + MpTeamMember member = 6; + uint32 report_num = 7; +} + +// CmdID: 1248 +message MpFastMatchRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STAGE_ERROR = 2; + CLIENT_VERSION_ERROR = 3; + BAD_NETWORK = 4; + SERVER_BUSY = 5; + ALREADY_IN_TEAM = 6; + MATCH_STAGE_EXCEED_MAX = 7; + IN_SQUAD = 8; + IN_SQUAD_MATCH = 9; + IN_ROOM = 10; + } + + MpFastMatchRsp.Retcode retcode = 1; + repeated uint32 stage_id_list = 2; + uint32 lobby_id = 3; +} + +message SnsShowExBossData { + uint32 cur_rank = 1; + uint32 total_score = 2; + repeated FinishedExBossInfo finished_boss_info_list = 3; + uint32 rank_id = 4; + uint32 cur_rank_percent = 5; +} + +message SnsShowEndlessData { + EndlessType cur_type = 1; + OpenworldEndlessPlayer openworld_endless_player_data = 3; +} + +message SnsShowTowerRaidData { + uint32 hard_level = 1; + uint32 max_hard_level = 2; + uint32 total_enter_times = 3; + uint32 total_battle_during_time = 4; +} + +// CmdID: 1266 +message GetSnsShowDataReq { + uint32 sns_show_type = 1; + uint32 target_uid = 2; + bool is_friend = 3; + uint32 ex_boss_schedule_id = 4; +} + +// CmdID: 1267 +message GetSnsShowDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_PRIVILEDGE = 2; + } + + GetSnsShowDataRsp.Retcode retcode = 1; + uint32 sns_show_type = 2; + uint32 target_uid = 3; + SnsShowEndlessData sns_show_endless_data = 4; + SnsShowExBossData sns_show_ex_boss_data = 5; + repeated WikiDetailData wiki_detail_data_list = 6; + PlayerCardData card_data = 7; + PlayerDetailData player_data = 8; + uint32 target_uid_level = 9; + SnsShowTowerRaidData sns_show_tower_raid_data = 10; +} + +message MasterPupilTagSwitch { + MasterPupilType type = 1; + bool is_open = 2; +} + +// CmdID: 1270 +message GetClientSettingReq { + uint32 client_setting_type = 1; +} + +message AvatarArtifactSwitch { + uint32 avatar_id = 1; + bool is_artifact_switch_on = 2; +} + +// CmdID: 1271 +message UpdateClientSettingReq { + uint32 client_setting_type = 1; + bool is_weekly_guide_switch_on = 2; + repeated SnsShowPriviledge sns_show_priviledge_list = 3; + AvatarArtifactSwitch avatar_artifact_switch = 4; + MasterPupilTagSwitch master_pupil_tag_switch = 5; +} + +// CmdID: 1272 +message GetClientSettingRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetClientSettingRsp.Retcode retcode = 1; + uint32 client_setting_type = 2; + bool is_weekly_guide_switch_on = 3; + repeated SnsShowPriviledge sns_show_priviledge_list = 4; + repeated AvatarArtifactSwitch avatar_artifact_switch_list = 5; + repeated MasterPupilTagSwitch master_pupil_tag_switch_list = 6; +} + +// CmdID: 1273 +message GetOtherPlayerClientSettingReq { + uint32 target_uid = 1; + uint32 client_setting_type = 2; +} + +// CmdID: 1274 +message GetOtherPlayerClientSettingRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetOtherPlayerClientSettingRsp.Retcode retcode = 1; + uint32 target_uid = 2; + uint32 client_setting_type = 3; + bool is_weekly_guide_switch_on = 4; + repeated SnsShowPriviledge sns_show_priviledge_list = 5; +} + +// CmdID: 1365 +message UpdateLobbySettingReq { + string team_name = 1; + uint32 min_level = 3; + LobbyEnterType lobby_enter_type = 4; + uint32 max_level = 5; +} + +// CmdID: 1366 +message UpdateLobbySettingRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_LOBBY = 2; + NOT_LEADER = 3; + TEAM_NAME_ERROR = 4; + } + + UpdateLobbySettingRsp.Retcode retcode = 1; +} + +// CmdID: 1367 +message ExchangePurpleJadeReq { + uint32 hcoin_num = 1; + uint32 mcoin_num = 2; +} + +// CmdID: 1368 +message ExchangePurpleJadeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LACK_HCOIN = 2; + CAN_NOT_EXCHANGE = 3; + LIMIT_FOR_EXCHANGE = 4; + LACK_EXCHANGE_NUM = 5; + LACK_MCOIN = 6; + } + + ExchangePurpleJadeRsp.Retcode retcode = 1; + uint32 hcoin_cost = 2; + uint32 purple_jade_added = 3; + uint32 mcoin_cost = 4; +} + +// CmdID: 1374 +message GetBriefDataListReq { + repeated uint32 uid_list = 1; +} + +// CmdID: 1375 +message GetBriefDataListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + UID_NUM_LIMIT = 2; + TOO_FREQUENT = 3; + } + + GetBriefDataListRsp.Retcode retcode = 1; + repeated PlayerFriendBriefData uid_brief_data_list = 2; +} + +// CmdID: 1378 +message FinishPlotReq { + uint32 plot_type = 1; + uint32 plot_id = 3; + uint32 dialog_id = 4; + repeated uint32 avatar_id_list = 5; + uint32 visual_novel_id = 6; +} + +// CmdID: 1379 +message FinishPlotRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + PLOT_ERROR = 2; + PLOT_FINISHED = 3; + } + + FinishPlotRsp.Retcode retcode = 1; + uint32 plot_type = 2; + uint32 plot_id = 4; + uint32 dialog_id = 5; + repeated RewardData reward_list = 6; + repeated DropItem drop_item_list = 7; +} + +// CmdID: 1380 +message GetRegionUidRangeReq { +} + +message RegionUidRange { + string region_name = 1; + uint32 start_uid = 2; + uint32 end_uid = 3; +} + +// CmdID: 1381 +message GetRegionUidRangeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetRegionUidRangeRsp.Retcode retcode = 1; + string local_region_name = 2; + repeated RegionUidRange region_uid_range_list = 3; +} + +// CmdID: 1382 +message GetPlotListReq { +} + +// CmdID: 1383 +message GetPlotListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetPlotListRsp.Retcode retcode = 1; + repeated uint32 plot_list = 2; +} + +message FarmProduceMaterialDetail { + uint32 material_id = 1; + uint32 has_produce_times_total = 2; +} + +message FarmSlotDetail { + uint32 slot_id = 1; + uint32 slot_status = 2; + uint32 produce_begin_time = 3; + uint32 produce_end_time = 4; + uint32 produce_material_id = 5; + uint32 has_produce_times_daily = 6; +} + +// CmdID: 1385 +message GetFarmActivityDataReq { +} + +// CmdID: 1386 +message GetFarmActivityDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_SCHEDULE = 2; + } + + GetFarmActivityDataRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + uint32 farm_level = 3; + uint32 farm_exp = 4; + repeated FarmSlotDetail slot_detail_list = 5; + repeated FarmProduceMaterialDetail produce_material_list = 6; +} + +// CmdID: 1387 +message UnlockFarmSlotReq { + uint32 slot_id = 1; +} + +// CmdID: 1388 +message UnlockFarmSlotRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FARM_LEVEL_LACK = 2; + MATERIAL_LACK = 3; + } + + UnlockFarmSlotRsp.Retcode retcode = 1; + uint32 slot_id = 2; +} + +// CmdID: 1389 +message StartFarmProduceReq { + uint32 slot_id = 1; + uint32 produce_material_id = 2; +} + +// CmdID: 1390 +message StartFarmProduceRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SLOT_LOCKED = 2; + SLOT_IN_PRODUCE = 3; + EQUIPMENT_MATERIAL_LIMIT = 4; + PRODUCE_MATERIAL_LIMIT = 5; + PRODUCE_TIMES_LIMIT = 6; + } + + StartFarmProduceRsp.Retcode retcode = 1; + uint32 slot_id = 2; + uint32 produce_material_id = 3; + FarmSlotDetail slot_detail = 4; +} + +// CmdID: 1391 +message FinishFarmProduceReq { + uint32 slot_id = 1; + bool is_finish_all = 2; +} + +// CmdID: 1392 +message FinishFarmProduceRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SLOT_LOCKED = 2; + NOT_IN_PRODUCE = 3; + NOT_FINISH = 4; + } + + FinishFarmProduceRsp.Retcode retcode = 1; + uint32 slot_id = 2; + bool is_finish_all = 3; + uint32 reward_farm_exp = 4; + repeated Material produce_material_list = 5; + RewardData reward_data = 6; +} + +// CmdID: 1393 +message SpeedUpFarmProduceReq { + uint32 slot_id = 1; + uint32 speed_up_material_id = 2; + uint32 speed_up_material_num = 3; +} + +// CmdID: 1394 +message SpeedUpFarmProduceRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_PRODUCE = 2; + MATERIAL_LACK = 3; + } + + SpeedUpFarmProduceRsp.Retcode retcode = 1; + uint32 slot_id = 2; + uint32 speed_up_material_id = 3; + uint32 speed_up_material_num = 4; +} + +// CmdID: 1395 +message FarmActivityNotify { + uint32 farm_level = 1; + uint32 farm_exp = 2; + repeated FarmSlotDetail slot_detail_list = 3; + repeated FarmProduceMaterialDetail produce_material_list = 4; +} + +// CmdID: 1444 +message AvatarArtifactUnlockReq { + uint32 avatar_id = 1; + uint32 artifact_id = 2; +} + +// CmdID: 1445 +message AvatarArtifactUnlockRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_LEVEL_LACK = 2; + AVATAR_STAR_LACK = 3; + MATERIAL_LACK = 4; + FEATURE_CLOSED = 5; + } + + AvatarArtifactUnlockRsp.Retcode retcode = 1; + uint32 avatar_id = 2; + uint32 artifact_id = 3; + RewardData reward_data = 4; +} + +// CmdID: 1446 +message AvatarArtifactLevelUpReq { + uint32 avatar_id = 1; + uint32 artifact_id = 2; +} + +// CmdID: 1447 +message AvatarArtifactLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_LEVEL_LACK = 2; + AVATAR_STAR_LACK = 3; + MATERIAL_LACK = 4; + FEATURE_CLOSED = 5; + } + + AvatarArtifactLevelUpRsp.Retcode retcode = 1; + uint32 avatar_id = 2; + uint32 artifact_id = 3; + AvatarDetailData avatar_detail = 4; + RewardData reward_data = 5; +} + +// CmdID: 1448 +message TakeGobackScoreRewardReq { + uint32 score_id = 1; +} + +// CmdID: 1449 +message TakeGobackScoreRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SCORE_LACK = 2; + NOT_GOBACK = 3; + HAS_TAKE = 4; + } + + TakeGobackScoreRewardRsp.Retcode retcode = 1; + uint32 score_id = 2; + repeated RewardData reward_list = 3; + uint32 score = 4; +} + +message AvatarEquipSuite { + uint32 suite_id = 1; + uint32 weapon_unique_id = 2; + uint32 stigmata_unique_id_1 = 3; + uint32 stigmata_unique_id_2 = 4; + uint32 stigmata_unique_id_3 = 5; + string suite_name = 6; +} + +// CmdID: 1454 +message GetAvatarEquipSuiteReq { + uint32 avatar_id = 1; +} + +// CmdID: 1455 +message GetAvatarEquipSuiteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetAvatarEquipSuiteRsp.Retcode retcode = 1; + uint32 avatar_id = 2; + repeated AvatarEquipSuite equip_suite_list = 3; +} + +// CmdID: 1456 +message SetAvatarEquipSuiteReq { + uint32 avatar_id = 1; + uint32 suite_id = 2; + AvatarEquipSuite suite = 3; +} + +// CmdID: 1457 +message SetAvatarEquipSuiteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_LOCK = 2; + SLOT_WEAPON = 3; + SLOT_STIGMATA_1 = 4; + SLOT_STIGMATA_2 = 5; + SLOT_STIGMATA_3 = 6; + SUITE_ID = 7; + SENSITIVE_WORDS = 8; + NAME_LEN_ERROR = 9; + TOO_FREQUENT = 10; + FORMAT_ERROR = 11; + } + + SetAvatarEquipSuiteRsp.Retcode retcode = 1; + uint32 suite_id = 2; +} + +// CmdID: 1458 +message SelectAvatarEquipSuiteReq { + uint32 avatar_id = 1; + uint32 suite_id = 2; +} + +// CmdID: 1459 +message SelectAvatarEquipSuiteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_LOCK = 2; + SLOT_WEAPON = 3; + SLOT_STIGMATA_1 = 4; + SLOT_STIGMATA_2 = 5; + SLOT_STIGMATA_3 = 6; + } + + SelectAvatarEquipSuiteRsp.Retcode retcode = 1; + uint32 succ_num = 2; + uint32 suite_id = 3; +} + +// CmdID: 1473 +message RefreshAndSyncMissionNotify { +} + +// CmdID: 1480 +message GetCurrencyExchangeInfoReq { +} + +// CmdID: 1481 +message GetCurrencyExchangeInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetCurrencyExchangeInfoRsp.Retcode retcode = 1; + uint32 purple_jade_exchanged_num = 3; +} + +// CmdID: 1488 +message SetLevelLockReq { + uint32 level_lock_id = 1; +} + +// CmdID: 1489 +message SetLevelLockRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_MEET_MAX_LEVEL = 2; + NOT_NEXT_ID = 3; + } + + SetLevelLockRsp.Retcode retcode = 1; + uint32 level_lock_id = 2; +} + +message FastPassParaOw { + uint32 map_id = 1; + uint32 quest_id = 2; + repeated uint32 finish_challenge_list = 3; +} + +message FastPassParaWeekday { + uint32 stage_id = 1; +} + +// CmdID: 1490 +message FinishFastPassReq { + uint32 fast_pass_type = 1; + FastPassParaOw fast_pass_para_ow = 2; + FastPassParaWeekday fast_pass_para_weekday = 3; +} + +// CmdID: 1491 +message FinishFastPassRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_SCHEDULE = 2; + MATERIAL_LACK = 3; + QUEST_NOT_EXIST = 4; + QUEST_NOT_DOING = 5; + MAP_NOT_FOUND = 6; + NO_USE_TIMES = 7; + STAGE_NOT_EXIST = 8; + STAGE_CANT_FAST_PASS = 9; + NO_ENTER_TIMES = 10; + STAMINA_LACK = 11; + EQUIPMENT_FULL = 12; + GENERATE_DROP_FAILED = 13; + } + + FinishFastPassRsp.Retcode retcode = 1; + uint32 fast_pass_type = 2; + repeated DropItem drop_item_list = 4; + FastPassParaOw fast_pass_para_ow = 5; + FastPassParaWeekday fast_pass_para_weekday = 6; + uint32 player_exp_reward = 7; + uint32 scoin_reward = 8; + uint32 exp_convert_scoin = 9; +} + +// CmdID: 1492 +message SetWarshipAvatarReq { + uint32 first_avatar_id = 1; + uint32 second_avatar_id = 2; +} + +// CmdID: 1493 +message SetWarshipAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_NOT_EXIST = 2; + AVATAR_NOT_TWINS = 3; + } + + SetWarshipAvatarRsp.Retcode retcode = 1; +} + +// CmdID: 1494 +message CreateAlipayOrderReq { + enum TradeType { + NONE = 0; + APP = 1; + QR_CODE = 2; + HUA_BEI = 3; + } + + string product_name = 1; + string total_fee = 2; + string notify_url = 3; + string body = 4; + CreateAlipayOrderReq.TradeType trade_type = 5; +} + +// CmdID: 1495 +message CreateAlipayOrderRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + CreateAlipayOrderRsp.Retcode retcode = 1; + string qr_code_url = 2; + string product_name = 3; + string order_string = 4; +} + +message Subscription { + uint32 subs_id = 1; + uint32 expires_time = 2; +} + +// CmdID: 1496 +message SubscriptionStatusNotify { + repeated Subscription subs_list = 1; +} + +// CmdID: 1502 +message GetChatRedEnvelopeInfoReq { + uint32 sender_uid = 1; + uint32 red_envelope_id = 2; +} + +// CmdID: 1503 +message GetChatRedEnvelopeInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetChatRedEnvelopeInfoRsp.Retcode retcode = 1; + uint32 sender_uid = 2; + uint32 red_envelope_id = 3; + uint32 taken_num = 4; + uint32 expire_time = 5; + repeated TakeChatRedEnvelopePlayer take_red_envelope_list = 6; +} + +// CmdID: 1517 +message WantedMirrorRecoveryReq { + EquipmentItemList consume_item_list = 1; +} + +// CmdID: 1518 +message WantedMirrorRecoveryRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + LOCK = 3; + CONSUME_ITEM_NOT_EXIST = 4; + CONSUME_ITEM_IN_USE = 5; + CONSUME_ITEM_REPEAT = 6; + CONSUME_ITEM_PROTECTED = 7; + COST_GACHA_TICKET = 8; + COST_SENIOR_EQUIP_FROM_NEW_DEVICE = 9; + COST_SENIOR_EQUIP_CANCEL_PROTECT_TOO_SOON = 10; + CONSUME_ITEM_GRAND_KEY = 11; + CONSUME_ITEM_IN_FACILITY = 12; + LACK_TICKET = 13; + CONSUME_ITEM_PROTECTED_BY_SECURITY_PASSWORD = 14; + } + + WantedMirrorRecoveryRsp.Retcode retcode = 1; + RewardData reward_data = 2; +} + +message RecommendMissionPanel { + uint32 panel_id = 1; + bool is_panel_show = 2; + uint32 mission_begin_time = 3; +} + +// CmdID: 1519 +message GetRecommendMissionPanelListReq { +} + +// CmdID: 1520 +message GetRecommendMissionPanelListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + } + + GetRecommendMissionPanelListRsp.Retcode retcode = 1; + repeated RecommendMissionPanel recommend_mission_panel_list = 2; +} + +// CmdID: 1523 +message GetCustomHeadDataReq { +} + +// CmdID: 1524 +message GetCustomHeadDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetCustomHeadDataRsp.Retcode retcode = 1; + bool is_all = 2; + repeated CustomHead custom_head_list = 3; +} + +// CmdID: 1525 +message SetCustomHeadReq { + uint32 id = 1; +} + +// CmdID: 1526 +message SetCustomHeadRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LOCKED = 2; + } + + SetCustomHeadRsp.Retcode retcode = 1; +} + +// CmdID: 1528 +message GetStageBuffReq { + repeated uint32 stage_id_list = 1; + repeated uint32 activity_buff_id_list = 2; +} + +message StageBuff { + uint32 stage_id = 1; + repeated uint32 gen_buff_id_list = 2; + repeated uint32 hold_buff_id_list = 3; + bool is_new = 4; + repeated uint32 carry_buff_id_list = 5; +} + +message ActivityBuff { + message Buff { + uint32 buff_id = 1; + uint32 buff_num = 2; + } + + uint32 id = 1; + repeated uint32 candidate_buff_id_list = 2; + repeated ActivityBuff.Buff buff_list = 3; + uint32 charge_value = 4; + uint32 buff_charged_times = 5; +} + +// CmdID: 1529 +message GetStageBuffRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetStageBuffRsp.Retcode retcode = 1; + repeated StageBuff stage_buff_list = 2; + repeated ActivityBuff activity_buff_list = 3; +} + +// CmdID: 1530 +message ChooseStageBuffReq { + uint32 activity_buff_id = 1; + repeated uint32 buff_id_list = 2; +} + +// CmdID: 1531 +message ChooseStageBuffRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ChooseStageBuffRsp.Retcode retcode = 1; + uint32 activity_buff_id = 2; +} + +// CmdID: 1538 +message TriggerRecommendGoodsNotify { + uint32 recommend_id = 1; + repeated uint32 shop_goods_schedule_id_list = 2; + uint32 trigger_recommend_goods_time = 3; +} + +// CmdID: 1539 +message ConfirmRecommendGoodsReq { + uint32 recommend_id = 1; +} + +// CmdID: 1540 +message ConfirmRecommendGoodsRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ConfirmRecommendGoodsRsp.Retcode retcode = 1; + uint32 recommend_id = 2; +} + +// CmdID: 1541 +message GetStageRecommendAvatarReq { + repeated string id_list = 1; + AvatarRecommendType type = 2; +} + +message RecommendAvatar { + LineupBriefInfo lineup_info = 1; + uint32 battle_times = 2; + float battle_rate = 3; + AvatarRecommendSource source = 5; + string ext_info = 8; + uint32 recommend_style = 9; + uint32 rank = 10; + bool is_has_course_info = 11; +} + +message StageRecommendAvatar { + string id = 1; + repeated RecommendAvatar recommend_avatar_list = 2; + AvatarRecommendType type = 3; +} + +// CmdID: 1542 +message GetStageRecommendAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ID_TOO_MUCH = 2; + } + + GetStageRecommendAvatarRsp.Retcode retcode = 1; + repeated StageRecommendAvatar stage_recommend_avatar_list = 2; +} + +// CmdID: 1543 +message SendDanmakuReq { + uint32 danmaku_slot = 1; + string content = 2; +} + +// CmdID: 1544 +message SendDanmakuRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SENSITIVE_WORDS = 2; + CHAT_FORBIDEN = 3; + TOO_FREQUENT = 4; + DANMAKU_CLOSED = 5; + IN_BLACKLIST = 6; + NUM_LIMIT = 7; + LENGTH_LIMIT = 8; + } + + SendDanmakuRsp.Retcode retcode = 1; + uint32 danmaku_slot = 2; + DanmakuContent content = 3; + uint32 blacklist_expire_time = 4; +} + +// CmdID: 1545 +message GetDanmakuListReq { + uint32 danmaku_slot = 1; + uint32 start_idx = 2; + uint32 end_idx = 3; +} + +message DanmakuContent { + string danmaku_id = 1; + uint32 sender_uid = 2; + string nickname = 3; + uint32 send_time = 4; + string content = 5; +} + +// CmdID: 1546 +message GetDanmakuListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + DANMAKU_CLOSED = 2; + } + + GetDanmakuListRsp.Retcode retcode = 1; + uint32 danmaku_slot = 2; + uint32 danmaku_slot_status = 3; + uint32 start_idx = 4; + uint32 end_idx = 5; + repeated DanmakuContent danmaku_list = 6; +} + +// CmdID: 1547 +message GetDanmakuBriefInfoReq { + uint32 danmaku_slot = 1; +} + +message DanmakuSlotBriefInfo { + uint32 danmaku_slot = 1; + uint32 danmaku_slot_status = 2; + uint32 danmaku_num = 3; +} + +// CmdID: 1548 +message GetDanmakuBriefInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + DANMAKU_CLOSED = 2; + } + + GetDanmakuBriefInfoRsp.Retcode retcode = 1; + uint32 danmaku_slot = 2; + DanmakuSlotBriefInfo brief_info = 3; +} + +// CmdID: 1549 +message ImpeachDanmakuReq { + uint32 danmaku_slot = 1; + uint32 sender_uid = 2; + string danmaku_id = 3; +} + +// CmdID: 1550 +message ImpeachDanmakuRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TOO_FREQUENT = 2; + IMPEACH_SELF = 3; + } + + ImpeachDanmakuRsp.Retcode retcode = 1; +} + +// CmdID: 1551 +message DanmakuBlacklistNotify { + uint32 blacklist_expire_time = 1; +} + +// CmdID: 1553 +message GetTeamStatusReq { + repeated uint32 team_id_list = 1; +} + +// CmdID: 1554 +message GetTeamStatusRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SERVER_BUSY = 2; + } + + GetTeamStatusRsp.Retcode retcode = 1; + repeated MpTeamData team_data_list = 2; +} + +// CmdID: 1555 +message GetFastPassDataReq { + uint32 fast_pass_type = 1; +} + +// CmdID: 1556 +message GetFastPassDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_EXIST = 2; + } + + GetFastPassDataRsp.Retcode retcode = 1; + uint32 fast_pass_type = 2; + uint32 use_times = 3; +} + +// CmdID: 1576 +message GetPlayerOnlineStatusReq { + repeated uint32 uid_list = 1; +} + +message PlayerOnlineStatusInfo { + uint32 uid = 1; + uint32 online_status = 2; + uint32 last_login_time = 3; + uint32 last_logout_time = 4; +} + +// CmdID: 1577 +message GetPlayerOnlineStatusRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetPlayerOnlineStatusRsp.Retcode retcode = 1; + repeated PlayerOnlineStatusInfo online_status_list = 2; +} + +// CmdID: 1579 +message MpSyncActionFromPlayerNotify { + MpAction action = 1; +} + +// CmdID: 1580 +message MpSyncActionFromServerNotify { + uint32 uid = 1; + MpAction action = 2; +} + +// CmdID: 1581 +message VerifySamSungOrderNotify { + string purchase_id = 1; +} + +message ClientData { + ClientDataType type = 1; + uint32 id = 2; + bytes data = 3; +} + +// CmdID: 1586 +message GetClientDataReq { + ClientDataType type = 1; + uint32 id = 2; +} + +// CmdID: 1587 +message GetClientDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_FOUND = 2; + } + + GetClientDataRsp.Retcode retcode = 1; + ClientDataType type = 2; + uint32 id = 3; + repeated ClientData client_data_list = 4; +} + +// CmdID: 1588 +message SetClientDataReq { + ClientData client_data = 1; +} + +// CmdID: 1589 +message SetClientDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SIZE_LIMIT = 2; + UNKNOWN_ID = 3; + } + + SetClientDataRsp.Retcode retcode = 1; + ClientDataType type = 2; + uint32 id = 3; +} + +// CmdID: 1592 +message WikiTakeActivitySuitRewardReq { + uint32 suit_id = 1; +} + +// CmdID: 1593 +message WikiTakeActivitySuitRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKE = 2; + NOT_GET = 3; + } + + WikiTakeActivitySuitRewardRsp.Retcode retcode = 1; + uint32 suit_id = 2; + RewardData reward = 3; +} + +// CmdID: 1594 +message GetBlackListReq { + bool is_only_uid = 1; +} + +// CmdID: 1595 +message GetBlackListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetBlackListRsp.Retcode retcode = 1; + repeated PlayerFriendBriefData black_list = 2; + bool is_whole_data = 3; + bool is_only_uid = 4; +} + +// CmdID: 1596 +message AddToBlackListReq { + uint32 target_uid = 1; +} + +// CmdID: 1597 +message AddToBlackListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ALREADY_IN_LIST = 2; + LIST_FULL = 3; + TARGET_NOT_EXIST = 4; + } + + AddToBlackListRsp.Retcode retcode = 1; + uint32 target_uid = 2; +} + +// CmdID: 1598 +message DelFromBlackListReq { + uint32 target_uid = 1; +} + +// CmdID: 1599 +message DelFromBlackListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_LIST = 2; + } + + DelFromBlackListRsp.Retcode retcode = 1; + uint32 target_uid = 2; +} + +// CmdID: 1600 +message DebugHotPatchFileNotify { + string file_url = 1; +} + +message WebActivity { + uint32 activity_id = 1; + uint32 show_type = 2; +} + +// CmdID: 1601 +message GetWebActivityInfoReq { +} + +// CmdID: 1602 +message GetWebActivityInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetWebActivityInfoRsp.Retcode retcode = 1; + repeated WebActivity web_activity_list = 2; +} + +// CmdID: 1603 +message GetMiniRankReq { + uint32 type = 1; + uint32 stage_id = 2; + uint32 activity_id = 3; + uint32 avatar_id = 4; + uint32 rank_id = 5; + uint32 challenge_id = 6; + uint32 entity_id = 7; +} + +// CmdID: 1604 +message GetMiniRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetMiniRankRsp.Retcode retcode = 1; + uint32 type = 2; + uint32 stage_id = 3; + RankShowData rank_data = 4; + uint32 activity_id = 5; + uint32 avatar_id = 6; + uint32 challenge_id = 7; + uint32 entity_id = 8; +} + +// CmdID: 1605 +message ChargeActivityBuffReq { + uint32 activity_buff_id = 1; +} + +// CmdID: 1606 +message ChargeActivityBuffRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_FOUND = 2; + NOT_ALLOWED = 3; + FULL_CHARGED = 4; + MATERIAL_LACK = 5; + } + + ChargeActivityBuffRsp.Retcode retcode = 1; + uint32 activity_buff_id = 2; +} + +// CmdID: 1607 +message LoginWishGetMainDataReq { +} + +message LoginWish { + uint32 login_day = 1; + uint32 wish_id = 2; + uint32 choose_reward_id = 3; + bool is_reward_taken = 4; +} + +message LoginWishActivity { + uint32 activity_id = 1; + uint32 show_begin_time = 2; + uint32 show_end_time = 3; + uint32 begin_time = 4; + uint32 end_time = 5; + uint32 login_days = 6; + repeated uint32 has_take_reward_login_day_list = 7; + repeated uint32 has_take_reward_special_day_list = 8; + repeated LoginWish has_made_wish_list = 9; +} + +// CmdID: 1608 +message LoginWishGetMainDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + LoginWishGetMainDataRsp.Retcode retcode = 1; + repeated LoginWishActivity activity_list = 2; +} + +// CmdID: 1609 +message LoginWishTakeLoginRewardReq { + uint32 activity_id = 1; + uint32 login_day = 2; +} + +// CmdID: 1610 +message LoginWishTakeLoginRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + DAY_LACK = 2; + ALREADY_TAKEN = 3; + } + + LoginWishTakeLoginRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 login_day = 3; + RewardData reward_data = 4; +} + +// CmdID: 1611 +message LoginWishTakeSpecialRewardReq { + uint32 activity_id = 1; + uint32 login_day = 2; +} + +// CmdID: 1612 +message LoginWishTakeSpecialRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + DAY_LACK = 2; + ALREADY_TAKEN = 3; + } + + LoginWishTakeSpecialRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 login_day = 3; + RewardData reward_data = 4; +} + +// CmdID: 1613 +message LoginWishMakeWishReq { + uint32 activity_id = 1; + uint32 login_day = 2; + uint32 choose_reward_id = 3; +} + +// CmdID: 1614 +message LoginWishMakeWishRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + DAY_LACK = 3; + REWARD_TAKEN = 4; + } + + LoginWishMakeWishRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 login_day = 3; + uint32 choose_reward_id = 4; +} + +// CmdID: 1615 +message LoginWishTakeWishRewardReq { + uint32 activity_id = 1; +} + +// CmdID: 1616 +message LoginWishTakeWishRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + LoginWishTakeWishRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + RewardData reward_data = 3; +} + +// CmdID: 1619 +message DevLevelChangeNotify { + string dev_level_msg = 1; +} + +// CmdID: 1620 +message DelAvatarEquipSuiteReq { + uint32 avatar_id = 1; + uint32 suite_id = 2; +} + +// CmdID: 1621 +message DelAvatarEquipSuiteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_LOCK = 2; + SUITE_NOT_EXIST = 3; + SUITE_ID_LIMIT = 4; + } + + DelAvatarEquipSuiteRsp.Retcode retcode = 1; + uint32 avatar_id = 2; + uint32 suite_id = 3; +} + +// CmdID: 1626 +message ClientCheckNetworkEnvReq { + string token_str = 1; +} + +// CmdID: 1627 +message ClientCheckNetworkEnvRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ClientCheckNetworkEnvRsp.Retcode retcode = 1; + string token_str = 2; +} + +// CmdID: 1630 +message GetStageRecommendAvatarCourseInfoReq { + string id = 1; + AvatarRecommendType type = 2; + uint32 recommend_style = 3; + uint32 rank = 4; +} + +// CmdID: 1631 +message GetStageRecommendAvatarCourseInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetStageRecommendAvatarCourseInfoRsp.Retcode retcode = 1; + string course_info = 2; +} + +// CmdID: 1632 +message GetMissionStepCompensationInfoReq { +} + +message MissionCompensationReward { + uint32 mission_id = 1; + uint32 mission_compensation_reward_id = 2; +} + +message MissionStepCompensation { + uint32 type_id = 1; + uint32 old_step_id = 2; + uint32 new_step_id = 3; + uint32 old_step_compensation_reward_id = 4; + uint32 old_step_reward_id = 5; + repeated MissionCompensationReward mission_compensation_list = 6; + repeated uint32 old_step_compensation_reward_id_list = 7; +} + +// CmdID: 1633 +message GetMissionStepCompensationInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_REWARD = 2; + } + + GetMissionStepCompensationInfoRsp.Retcode retcode = 1; + repeated MissionStepCompensation challenge_mission_compensation_list = 2; + MissionStepCompensation mainline_misssion_compensation = 3; + bool has_take_reward = 4; +} + +// CmdID: 1634 +message TakeMissionStepCompensationReq { +} + +// CmdID: 1635 +message TakeMissionStepCompensationRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKEN = 2; + NO_REWARD = 3; + } + + TakeMissionStepCompensationRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; +} + +// CmdID: 1636 +message GetEliteChapterCompensationInfoReq { + uint32 chapter_id = 1; +} + +message EliteChapterStageCompensation { + uint32 stage_id = 1; + bool is_first_win = 2; + repeated uint32 challenge_reward_id_list = 3; +} + +message EliteChapterActCompensation { + uint32 act_id = 1; + uint32 difficulty = 2; + repeated uint32 challenge_reward_id_list = 3; +} + +message EliteChapterCompensationInfo { + uint32 chapter_id = 1; + repeated EliteChapterStageCompensation stage_compensation_list = 2; + repeated EliteChapterActCompensation act_compensation_list = 3; + bool has_taken_compensation = 4; +} + +// CmdID: 1637 +message GetEliteChapterCompensationInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetEliteChapterCompensationInfoRsp.Retcode retcode = 1; + repeated EliteChapterCompensationInfo chapter_list = 2; +} + +// CmdID: 1638 +message TakeEliteChapterCompensationReq { + uint32 chapter_id = 1; +} + +// CmdID: 1639 +message TakeEliteChapterCompensationRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKEN = 2; + NO_REWARD = 3; + CHAPTER_NOT_FINISH = 4; + } + + TakeEliteChapterCompensationRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; +} + +// CmdID: 1642 +message UnlockPrivilegeReq { + uint32 privilege_id = 1; +} + +// CmdID: 1643 +message UnlockPrivilegeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LEVEL_LACK = 2; + NEWBIE_SCHEDULE_ERROR = 3; + NEWBIE_DAY_LACK = 4; + BUY_TIMES_LACK = 5; + MCOIN_LACK = 6; + } + + UnlockPrivilegeRsp.Retcode retcode = 1; +} + +// CmdID: 1644 +message MpSetExtraSkillReq { + uint32 extra_skill_id = 1; +} + +// CmdID: 1645 +message MpSetExtraSkillRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_TEAM = 2; + } + + MpSetExtraSkillRsp.Retcode retcode = 1; +} + +// CmdID: 1646 +message GetPrivilegeInfoReq { +} + +message PrivilegeRightInfo { + uint32 right_id = 1; + uint32 type = 2; + uint32 total_used_times = 3; + uint32 max_use_times = 4; + uint32 use_times = 5; + uint32 next_auto_refresh_time = 6; +} + +message PrivilegeInfo { + uint32 privilege_id = 1; + uint32 expire_time = 2; + repeated PrivilegeRightInfo right_info_list = 3; +} + +// CmdID: 1647 +message GetPrivilegeInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetPrivilegeInfoRsp.Retcode retcode = 1; + repeated PrivilegeInfo privilege_list = 2; +} + +// CmdID: 1648 +message CreateSteamOrderReq { + string product_name = 1; + string product_desc = 2; + string account_id = 3; + uint64 order_id = 4; +} + +// CmdID: 1649 +message CreateSteamOrderRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + CreateSteamOrderRsp.Retcode retcode = 1; +} + +// CmdID: 1650 +message VerifySteamOrderNotify { + string order_id = 1; +} + +// CmdID: 1651 +message UnlockGobackFundReq { +} + +// CmdID: 1652 +message UnlockGobackFundRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ALREADY_UNLOCKED = 2; + MCOIN_LACK = 3; + } + + UnlockGobackFundRsp.Retcode retcode = 1; +} + +// CmdID: 1653 +message TakeGobackFundRewardReq { + uint32 progress_id = 1; +} + +// CmdID: 1654 +message TakeGobackFundRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ALREADY_TAKEN = 2; + NO_REWARD = 3; + FUND_LOCKED = 4; + } + + TakeGobackFundRewardRsp.Retcode retcode = 1; + RewardData reward_data = 2; +} + +// CmdID: 1655 +message ExBossSweepReq { + uint32 boss_id = 1; +} + +// CmdID: 1656 +message ExBossSweepRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LEVEL_LIMIT = 2; + ENTER_TIMES_LACK = 3; + FEATURE_LIMIT = 4; + FEATURE_CLOSED = 5; + FINISHED = 6; + NOT_OPEN = 7; + } + + ExBossSweepRsp.Retcode retcode = 1; + uint32 boss_id = 2; +} + +// CmdID: 1657 +message ExBossTakeBossScoreRewardNotify { + repeated RewardData reward_list = 1; +} + +// CmdID: 1658 +message BindHoyolabAccountReq { + uint32 hoyolab_channel_id = 1; + string hoyolab_account_uid = 2; + string hoyolab_token = 3; +} + +// CmdID: 1659 +message BindHoyolabAccountRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ALREADY_BIND = 2; + BIND_BY_OTHER = 3; + } + + BindHoyolabAccountRsp.Retcode retcode = 1; + string hoyolab_account_uid = 2; +} + +// CmdID: 1660 +message ChapterGroupGetDataReq { + uint32 chapter_group_id = 1; +} + +message ChapterGroupSite { + uint32 site_id = 1; + uint32 chapter_id = 2; + ChapterGroupSiteStatus status = 3; +} + +message ChapterGroup { + uint32 id = 1; + repeated ChapterGroupSite site_list = 2; +} + +// CmdID: 1661 +message ChapterGroupGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_EXIST = 2; + } + + ChapterGroupGetDataRsp.Retcode retcode = 1; + repeated ChapterGroup chapter_group_list = 2; + bool is_all = 3; + uint32 chapter_group_id = 4; +} + +// CmdID: 1664 +message WeekDayActivitySweepReq { + repeated uint32 stage_id_list = 1; +} + +// CmdID: 1665 +message WeekDayActivitySweepRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + WeekDayActivitySweepRsp.Retcode retcode = 1; + RewardData reward_data = 2; + repeated DropItem drop_item_list = 3; +} + +// CmdID: 1666 +message GetWeekDayActivityCompensationInfoReq { +} + +message WeekDayActivityStageCompensation { + uint32 stage_id = 1; + bool is_first_win = 2; + repeated uint32 challenge_reward_list = 3; +} + +// CmdID: 1667 +message GetWeekDayActivityCompensationInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetWeekDayActivityCompensationInfoRsp.Retcode retcode = 1; + repeated WeekDayActivityStageCompensation stage_compensation_list = 2; + bool has_taken_compensation = 3; +} + +// CmdID: 1668 +message TakeWeekDayActivityCompensationReq { +} + +// CmdID: 1669 +message TakeWeekDayActivityCompensationRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKEN = 2; + LEVEL_LACK = 3; + } + + TakeWeekDayActivityCompensationRsp.Retcode retcode = 1; + repeated RewardData reward_data_list = 2; +} + +// CmdID: 1670 +message RequestLogoffReq { +} + +// CmdID: 1671 +message RequestLogoffRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + RequestLogoffRsp.Retcode retcode = 1; +} + +// CmdID: 1672 +message GetChapterCompensationInfoReq { + uint32 chapter_id = 1; +} + +message ChapterStageCompensation { + uint32 stage_id = 1; + bool is_first_win = 2; + repeated uint32 challenge_reward_id_list = 3; +} + +message ChapterActCompensation { + uint32 act_id = 1; + uint32 difficulty = 2; + repeated uint32 challenge_reward_id_list = 3; +} + +message ChapterCompensationInfo { + uint32 compensation_id = 1; + repeated ChapterStageCompensation stage_compensation_list = 2; + repeated ChapterActCompensation act_compensation_list = 3; + bool is_taken_compensation = 4; + uint32 chapter_id = 5; +} + +// CmdID: 1673 +message GetChapterCompensationInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetChapterCompensationInfoRsp.Retcode retcode = 1; + bool is_all = 2; + repeated ChapterCompensationInfo compensate_list = 3; +} + +// CmdID: 1674 +message TakeChapterCompensationReq { + uint32 chapter_id = 1; +} + +// CmdID: 1675 +message TakeChapterCompensationRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKEN = 2; + NO_REWARD = 3; + CHAPTER_NOT_FINISH = 4; + } + + TakeChapterCompensationRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; +} + +// CmdID: 1676 +message GetChallengeStepCompensationInfoReq { +} + +message StepMissionCompensation { + uint32 mission_id = 1; + uint32 reward_id = 2; +} + +message StepCompensation { + uint32 step_id = 1; + uint32 step_reward_id = 2; + repeated StepMissionCompensation mission_list = 3; +} + +message ChallengeStepCompensation { + uint32 compensation_id = 1; + bool is_take_compensation = 2; + repeated StepCompensation new_challenge_step_compensation_list = 3; + repeated StepCompensation old_challenge_step_compensation_list = 4; + repeated StepCompensation mainline_step_compensation_list = 5; +} + +// CmdID: 1677 +message GetChallengeStepCompensationInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetChallengeStepCompensationInfoRsp.Retcode retcode = 1; + repeated ChallengeStepCompensation compensation_list = 2; +} + +// CmdID: 1678 +message TakeChallengeStepCompensationReq { + uint32 compensation_id = 1; +} + +// CmdID: 1679 +message TakeChallengeStepCompensationRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKEN = 2; + LEVEL_LACK = 3; + NO_REWARD = 4; + } + + TakeChallengeStepCompensationRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; +} + +// CmdID: 1684 +message GetSpecificRankReq { + SpecificRankType type = 1; + uint32 param = 2; +} + +// CmdID: 1685 +message GetSpecificRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetSpecificRankRsp.Retcode retcode = 1; + SpecificRankType type = 2; + uint32 param = 3; + RankShowData rank_data = 4; +} + +// CmdID: 1690 +message GetInviteActivityInviterDataReq { +} + +message InviterActivity { + uint32 schedule_id = 1; + uint32 invite_num = 2; + uint32 taken_reward_progress = 3; + uint32 accept_invite_num = 4; +} + +// CmdID: 1691 +message GetInviteActivityInviterDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LEVEL_LACK = 2; + FEATURE_CLOSED = 3; + } + + GetInviteActivityInviterDataRsp.Retcode retcode = 1; + string my_invite_code = 2; + repeated InviterActivity inviter_activity_info_list = 3; +} + +// CmdID: 1692 +message TakeInviteActivityInviterProgressRewardReq { + InviterActivityType activity_type = 1; +} + +// CmdID: 1693 +message TakeInviteActivityInviterProgressRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_REWARD = 2; + FEATURE_CLOSED = 3; + } + + TakeInviteActivityInviterProgressRewardRsp.Retcode retcode = 1; + InviterActivityType activity_type = 2; + uint32 taken_reward_progress = 3; + RewardData reward_data = 4; +} + +message InviteeActivity { + uint32 schedule_id = 1; + InviteeActivityType activity_type = 2; + uint32 taken_invitee_reward_id = 3; + uint32 end_time = 4; +} + +// CmdID: 1694 +message GetInviteActivityInviteeDataReq { +} + +// CmdID: 1695 +message GetInviteActivityInviteeDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSED = 2; + } + + GetInviteActivityInviteeDataRsp.Retcode retcode = 1; + repeated InviteeActivity invitee_activity_info_list = 2; +} + +// CmdID: 1696 +message InviteActivityAcceptInviteReq { + string invite_code = 1; +} + +// CmdID: 1697 +message InviteActivityAcceptInviteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + INVITE_CODE_ERROR = 2; + LEVEL_LACK = 3; + INVITE_FULL = 4; + INVITE_INVALID_REGION = 5; + INVITE_CONDITION_ERROR = 6; + NO_ACTIVITY = 7; + ALREADY_INVITED = 8; + INVITE_DAILY_LIMIT = 9; + FEATURE_CLOSED = 10; + } + + InviteActivityAcceptInviteRsp.Retcode retcode = 1; + uint32 invite_uid = 2; + InviteeActivityType invite_type = 3; + RewardData reward_data = 4; +} + +// CmdID: 1703 +message GetMainStoryBlessReq { +} + +// CmdID: 1704 +message GetMainStoryBlessRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetMainStoryBlessRsp.Retcode retcode = 1; + repeated string bless_list = 2; + string self_bless = 3; +} + +// CmdID: 1701 +message GetMainStoryMemoirsDataReq { +} + +message MemoirsSpecialData { + uint32 id = 1; + uint32 value = 2; + string str_value = 3; + MemoirsDataType type = 4; +} + +// CmdID: 1702 +message GetMainStoryMemoirsDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TOO_FREQUENT = 2; + } + + GetMainStoryMemoirsDataRsp.Retcode retcode = 1; + repeated MemoirsSpecialData data_list = 2; + uint32 register_time = 3; +} + +// CmdID: 1705 +message GetActivityMainDataReq { +} + +// CmdID: 1706 +message GetActivityMainDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetActivityMainDataRsp.Retcode retcode = 1; + repeated uint32 activity_module_type_list = 2; +} + +// CmdID: 1707 +message SetRedPointStatusNotify { + uint32 content_id = 1; + uint32 red_point_type = 2; + bool is_show = 3; +} + +message ManifestInfo { + PlatFormType platform_type = 1; + string name = 2; +} + +message ManifestData { + ManifestType type = 1; + uint32 revision = 2; + repeated ManifestInfo info_list = 3; +} + +// CmdID: 1708 +message ClientResetNotify { + repeated ManifestData manifest_list = 1; + uint32 data_version_num = 2; +} + +// CmdID: 1709 +message AddCustomAvatarTeamReq { +} + +// CmdID: 1710 +message AddCustomAvatarTeamRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CUSTOM_AVATAR_TEAM_NUM_LIMIT = 2; + } + + AddCustomAvatarTeamRsp.Retcode retcode = 1; +} + +// CmdID: 1711 +message DelCustomAvatarTeamReq { + uint32 team_id = 1; +} + +// CmdID: 1712 +message DelCustomAvatarTeamRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TEAM_ID_ERROR = 2; + } + + DelCustomAvatarTeamRsp.Retcode retcode = 1; +} + +// CmdID: 1713 +message GetWorldMapRecommendReq { +} + +message WorldMapRecommend { + uint32 world_map_id = 1; + int32 weight = 2; + repeated uint32 active_condition_list = 3; +} + +// CmdID: 1714 +message GetWorldMapRecommendRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetWorldMapRecommendRsp.Retcode retcode = 1; + repeated WorldMapRecommend activity_recommend_list = 2; + repeated WorldMapRecommend permanent_recommend_list = 3; +} + +// CmdID: 1715 +message UnlockCollectionReq { + repeated uint32 collection_id_list = 1; +} + +// CmdID: 1716 +message UnlockCollectionRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + UnlockCollectionRsp.Retcode retcode = 1; + repeated uint32 collection_id_list = 2; +} + +// CmdID: 1717 +message GetCollectionListReq { + repeated uint32 collection_id_list = 1; +} + +// CmdID: 1718 +message GetCollectionListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetCollectionListRsp.Retcode retcode = 1; + repeated uint32 collection_id_list = 2; + repeated uint32 active_collection_id_list = 3; +} + +// CmdID: 1719 +message ActivateCollectionReq { + uint32 collection_id = 1; +} + +// CmdID: 1720 +message ActivateCollectionRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LOCKED = 2; + CANNOT_ACTIVATE = 3; + } + + ActivateCollectionRsp.Retcode retcode = 1; + uint32 collection_id = 2; +} + +// CmdID: 1721 +message ExchangeAvatarStigmataReq { + uint32 avatar_id_1 = 1; + uint32 avatar_id_2 = 2; + EquipmentSlot slot = 3; +} + +// CmdID: 1722 +message ExchangeAvatarStigmataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SLOT_ERROR = 2; + AVATAR_ERROR = 3; + } + + ExchangeAvatarStigmataRsp.Retcode retcode = 1; + uint32 avatar_id_1 = 2; + uint32 avatar_id_2 = 3; + EquipmentSlot slot = 4; +} + +// CmdID: 1723 +message ChooseSpecialGobackReq { + uint32 special_id = 1; +} + +// CmdID: 1724 +message ChooseSpecialGobackRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_SPECIAL = 2; + SPECIAL_ERROR = 3; + ALREADY_CHOOSEN = 4; + } + + ChooseSpecialGobackRsp.Retcode retcode = 1; +} + +// CmdID: 1725 +message GobackSpecialBpPurchaseReq { +} + +// CmdID: 1726 +message GobackSpecialBpPurchaseRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_SPECIAL = 2; + NOT_CHOOSEN = 3; + ALREADY_PURCHASED = 4; + MCOIN_LACK = 5; + } + + GobackSpecialBpPurchaseRsp.Retcode retcode = 1; +} + +// CmdID: 1727 +message GobackSpecialBpTakeRewardReq { +} + +// CmdID: 1728 +message GobackSpecialBpTakeRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_SPECIAL = 2; + NOT_CHOOSEN = 3; + } + + GobackSpecialBpTakeRewardRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; +} + +// CmdID: 1734 +message WeaponHomologyReq { + uint32 target_unique_id = 1; + EquipmentItemList consume_item_list = 2; + uint32 cur_homology_level = 3; +} + +// CmdID: 1735 +message WeaponHomologyRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CAN_NOT_HOMOLOGY = 2; + CONSUME_ITEM_NOT_EXIST = 3; + CONSUME_ITEM_IN_USE = 4; + CONSUME_ITEM_REPEAT = 5; + CONSUME_ITEM_PROTECTED = 6; + CONSUME_WEAPON_MAX_HOMOLOGY = 7; + NOT_SAME_HOMOLOGY = 8; + TARGET_WEAPON_MAX_HOMOLOGY = 9; + TARGET_WEAPON_NOT_EXIST = 10; + CONSUME_ITEM_OVERFLOW = 11; + TARGET_WEAPON_IN_CONSUME_LIST = 12; + CONSUME_ITEM_GRAND_KEY = 13; + CONSUME_ITEM_PROTECTED_BY_SECURITY_PASSWORD = 14; + NOT_HOMOLOGY_MATERIAL = 15; + CONSUME_ITEM_TYPE_INVALID = 16; + } + + WeaponHomologyRsp.Retcode retcode = 1; + uint32 target_unique_id = 2; +} + +message UpdateMission { + MissionFinishWay finish_way = 1; + uint32 finish_para = 2; + string finish_para_str = 3; + uint32 progress_add = 4; + uint32 stage_id = 5; +} + +// CmdID: 1736 +message UpdateMultiMissionProgressReq { + repeated UpdateMission update_mission_list = 1; +} + +// CmdID: 1737 +message UpdateMultiMissionProgressRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + UpdateMultiMissionProgressRsp.Retcode retcode = 1; +} + +// CmdID: 1738 +message WeaponLevelUpUseTicketReq { + uint32 weapon_unique_id = 1; +} + +// CmdID: 1739 +message WeaponLevelUpUseTicketRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + WEAPON_NOT_EXIST = 2; + WEAPON_QUALITY_ERROR = 3; + LEVEL_LACK = 4; + TICKET_LACK = 5; + } + + WeaponLevelUpUseTicketRsp.Retcode retcode = 1; + uint32 new_weapon_id = 2; +} + +// CmdID: 1740 +message StigmataLevelUpUseTicketReq { + uint32 stigmata_unique_id = 1; +} + +// CmdID: 1741 +message StigmataLevelUpUseTicketRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STIGMATA_NOT_EXIST = 2; + STIGMATA_QUALITY_ERROR = 3; + LEVEL_LACK = 4; + TICKET_LACK = 5; + } + + StigmataLevelUpUseTicketRsp.Retcode retcode = 1; + uint32 new_stigmata_id = 2; +} + +enum CmdTypeThree { + CMD_TYPE_THREE_NONE = 0; + CMD_CHECK_EXTRA_STORY_LOCKED_AVATAR_BIND_EQUIP_REQ = 1000; + CMD_CHECK_EXTRA_STORY_LOCKED_AVATAR_BIND_EQUIP_RSP = 1001; + CMD_SWITCH_EXTRA_STORY_LOCKED_AVATAR_BIND_EQUIP_REQ = 1002; + CMD_SWITCH_EXTRA_STORY_LOCKED_AVATAR_BIND_EQUIP_RSP = 1003; + CMD_TAKE_DORM_LIKES_DROP_REQ = 1008; + CMD_TAKE_DORM_LIKES_DROP_RSP = 1009; + CMD_CHECK_DORM_LIKES_DROP_REQ = 1010; + CMD_CHECK_DORM_LIKES_DROP_RSP = 1011; + CMD_GET_WORLD_MAP_DATA_REQ = 1012; + CMD_GET_WORLD_MAP_DATA_RSP = 1013; + CMD_GET_MP_STAGE_RECORD_REQ = 1018; + CMD_GET_MP_STAGE_RECORD_RSP = 1019; + CMD_LOBBY_SET_CLIENT_STATUS_REQ = 1026; + CMD_LOBBY_SET_CLIENT_STATUS_RSP = 1027; + CMD_LOBBY_PREPARE_COUNT_DOWN_NOTIFY = 1028; + CMD_MP_STAGE_VOTE_COUNT_DOWN_NOTIFY = 1029; + CMD_MP_STAGE_VOTE_REQ = 1030; + CMD_MP_STAGE_VOTE_RSP = 1031; + CMD_MP_STAGE_VOTE_RESULT_NOTIFY = 1032; + CMD_LOBBY_TIMEOUT_NO_LEADER_NOTIFY = 1033; + CMD_TAKE_WEEK_DAY_ACTIVITY_RETURN_COIN_REQ = 1034; + CMD_TAKE_WEEK_DAY_ACTIVITY_RETURN_COIN_RSP = 1035; + CMD_MP_STAGE_GET_VOTE_INFO_REQ = 1036; + CMD_MP_STAGE_GET_VOTE_INFO_RSP = 1037; + CMD_MP_STAGE_MEMBER_VOTE_NOTIFY = 1038; + CMD_SWITCH_EXTRA_STORY_LINE_ENHANCE_REQ = 1039; + CMD_SWITCH_EXTRA_STORY_LINE_ENHANCE_RSP = 1040; + CMD_GET_CHALLENGE_STEP_BONUS_REQ = 1043; + CMD_GET_CHALLENGE_STEP_BONUS_RSP = 1044; + CMD_LEAVE_TEAM_NOTIFY = 1101; + CMD_GET_LOBBY_STAT_REQ = 1102; + CMD_GET_LOBBY_STAT_RSP = 1103; + CMD_DISJOIN_FURNITURE_REQ = 1134; + CMD_DISJOIN_FURNITURE_RSP = 1135; + CMD_CHAT_REPORT_REQ = 1150; + CMD_CHAT_REPORT_RSP = 1151; + CMD_CHAT_REPORT_NOTIFY = 1152; + CMD_CHAT_UNFORBID_NOTIFY = 1153; + CMD_CHAT_FORBID_NOTIFY = 1154; + CMD_GET_CHAT_REPORT_INFO_REQ = 1159; + CMD_GET_CHAT_REPORT_INFO_RSP = 1160; + CMD_CHAT_FORBID_SNS_NOTIFY = 1161; + CMD_RECOVER_CHAT_CREDIT_NOTIFY = 1162; + CMD_SEND_CHAT_RED_ENVELOPE_REQ = 1163; + CMD_SEND_CHAT_RED_ENVELOPE_RSP = 1164; + CMD_TAKE_CHAT_RED_ENVELOPE_REQ = 1165; + CMD_TAKE_CHAT_RED_ENVELOPE_RSP = 1166; + CMD_GET_PHOTO_DATA_REQ = 1191; + CMD_GET_PHOTO_DATA_RSP = 1192; + CMD_GET_WIKI_DATA_REQ = 1193; + CMD_GET_WIKI_DATA_RSP = 1194; + CMD_TAKE_WIKI_RATING_REWARD_REQ = 1195; + CMD_TAKE_WIKI_RATING_REWARD_RSP = 1196; + CMD_GET_PHONE_PENDANT_DATA_REQ = 1197; + CMD_GET_PHONE_PENDANT_DATA_RSP = 1198; + CMD_PHONE_PENDANT_OP_REQ = 1199; + CMD_PHONE_PENDANT_OP_RSP = 1200; + CMD_GET_TEAM_LIST_REQ = 1215; + CMD_GET_TEAM_LIST_RSP = 1216; + CMD_GET_EMOJI_DATA_REQ = 1245; + CMD_GET_EMOJI_DATA_RSP = 1246; + CMD_MP_FAST_MATCH_REQ = 1247; + CMD_MP_FAST_MATCH_RSP = 1248; + CMD_GET_SNS_SHOW_DATA_REQ = 1266; + CMD_GET_SNS_SHOW_DATA_RSP = 1267; + CMD_GET_CLIENT_SETTING_REQ = 1270; + CMD_UPDATE_CLIENT_SETTING_REQ = 1271; + CMD_GET_CLIENT_SETTING_RSP = 1272; + CMD_GET_OTHER_PLAYER_CLIENT_SETTING_REQ = 1273; + CMD_GET_OTHER_PLAYER_CLIENT_SETTING_RSP = 1274; + CMD_UPDATE_LOBBY_SETTING_REQ = 1365; + CMD_UPDATE_LOBBY_SETTING_RSP = 1366; + CMD_EXCHANGE_PURPLE_JADE_REQ = 1367; + CMD_EXCHANGE_PURPLE_JADE_RSP = 1368; + CMD_GET_BRIEF_DATA_LIST_REQ = 1374; + CMD_GET_BRIEF_DATA_LIST_RSP = 1375; + CMD_FINISH_PLOT_REQ = 1378; + CMD_FINISH_PLOT_RSP = 1379; + CMD_GET_REGION_UID_RANGE_REQ = 1380; + CMD_GET_REGION_UID_RANGE_RSP = 1381; + CMD_GET_PLOT_LIST_REQ = 1382; + CMD_GET_PLOT_LIST_RSP = 1383; + CMD_GET_FARM_ACTIVITY_DATA_REQ = 1385; + CMD_GET_FARM_ACTIVITY_DATA_RSP = 1386; + CMD_UNLOCK_FARM_SLOT_REQ = 1387; + CMD_UNLOCK_FARM_SLOT_RSP = 1388; + CMD_START_FARM_PRODUCE_REQ = 1389; + CMD_START_FARM_PRODUCE_RSP = 1390; + CMD_FINISH_FARM_PRODUCE_REQ = 1391; + CMD_FINISH_FARM_PRODUCE_RSP = 1392; + CMD_SPEED_UP_FARM_PRODUCE_REQ = 1393; + CMD_SPEED_UP_FARM_PRODUCE_RSP = 1394; + CMD_SYNC_FARM_ACTIVITY_DATA_NOTIFY = 1395; + CMD_AVATAR_ARTIFACT_UNLOCK_REQ = 1444; + CMD_AVATAR_ARTIFACT_UNLOCK_RSP = 1445; + CMD_AVATAR_ARTIFACT_LEVEL_UP_REQ = 1446; + CMD_AVATAR_ARTIFACT_LEVEL_UP_RSP = 1447; + CMD_TAKE_GOBACK_SCORE_REWARD_REQ = 1448; + CMD_TAKE_GOBACK_SCORE_REWARD_RSP = 1449; + CMD_GET_AVATAR_EQUIP_SUITE_REQ = 1454; + CMD_GET_AVATAR_EQUIP_SUITE_RSP = 1455; + CMD_SET_AVATAR_EQUIP_SUITE_REQ = 1456; + CMD_SET_AVATAR_EQUIP_SUITE_RSP = 1457; + CMD_SELECT_AVATAR_EQUIP_SUITE_REQ = 1458; + CMD_SELECT_AVATAR_EQUIP_SUITE_RSP = 1459; + CMD_REFRESH_AND_SYNC_MISSION_NOTIFY = 1473; + CMD_GET_CURRENCY_EXCHANGE_INFO_REQ = 1480; + CMD_GET_CURRENCY_EXCHANGE_INFO_RSP = 1481; + CMD_SET_LEVEL_LOCK_REQ = 1488; + CMD_SET_LEVEL_LOCK_RSP = 1489; + CMD_FINISH_FAST_PASS_REQ = 1490; + CMD_FINISH_FAST_PASS_RSP = 1491; + CMD_SET_WARSHIP_AVATAR_REQ = 1492; + CMD_SET_WARSHIP_AVATAR_RSP = 1493; + CMD_CREATE_ALIPAY_ORDER_REQ = 1494; + CMD_CREATE_ALIPAY_ORDER_RSP = 1495; + CMD_SUBSCRIPTION_STATUS_NOTIFY = 1496; + CMD_GET_CHAT_RED_ENVELOPE_INFO_REQ = 1502; + CMD_GET_CHAT_RED_ENVELOPE_INFO_RSP = 1503; + CMD_WANTED_MIRROR_RECOVERY_REQ = 1517; + CMD_WANTED_MIRROR_RECOVERY_RSP = 1518; + CMD_GET_RECOMMEND_MISSION_PANEL_LIST_REQ = 1519; + CMD_GET_RECOMMEND_MISSION_PANEL_LIST_RSP = 1520; + CMD_GET_CUSTOM_HEAD_DATA_REQ = 1523; + CMD_GET_CUSTOM_HEAD_DATA_RSP = 1524; + CMD_SET_CUSTOM_HEAD_REQ = 1525; + CMD_SET_CUSTOM_HEAD_RSP = 1526; + CMD_GET_STAGE_BUFF_REQ = 1528; + CMD_GET_STAGE_BUFF_RSP = 1529; + CMD_CHOOSE_STAGE_BUFF_REQ = 1530; + CMD_CHOOSE_STAGE_BUFF_RSP = 1531; + CMD_TRIGGER_RECOMMEND_GOODS_NOTIFY = 1538; + CMD_CONFIRM_RECOMMEND_GOODS_REQ = 1539; + CMD_CONFIRM_RECOMMEND_GOODS_RSP = 1540; + CMD_GET_STAGE_RECOMMEND_AVATAR_REQ = 1541; + CMD_GET_STAGE_RECOMMEND_AVATAR_RSP = 1542; + CMD_SEND_DANMAKU_REQ = 1543; + CMD_SEND_DANMAKU_RSP = 1544; + CMD_GET_DANMAKU_LIST_REQ = 1545; + CMD_GET_DANMAKU_LIST_RSP = 1546; + CMD_GET_DANMAKU_BRIEF_INFO_REQ = 1547; + CMD_GET_DANMAKU_BRIEF_INFO_RSP = 1548; + CMD_IMPEACH_DANMAKU_REQ = 1549; + CMD_IMPEACH_DANMAKU_RSP = 1550; + CMD_DANMAKU_BLACKLIST_NOTIFY = 1551; + CMD_GET_TEAM_STATUS_REQ = 1553; + CMD_GET_TEAM_STATUS_RSP = 1554; + CMD_GET_FAST_PASS_DATA_REQ = 1555; + CMD_GET_FAST_PASS_DATA_RSP = 1556; + CMD_GET_PLAYER_ONLINE_STATUS_REQ = 1576; + CMD_GET_PLAYER_ONLINE_STATUS_RSP = 1577; + CMD_MP_SYNC_ACTION_FROM_PLAYER_NOTIFY = 1579; + CMD_MP_SYNC_ACTION_FROM_SERVER_NOTIFY = 1580; + CMD_VERIFY_SAMSUNG_ORDER_NOTIFY = 1581; + CMD_GET_CLIENT_DATA_REQ = 1586; + CMD_GET_CLIENT_DATA_RSP = 1587; + CMD_SET_CLIENT_DATA_REQ = 1588; + CMD_SET_CLIENT_DATA_RSP = 1589; + CMD_WIKI_TAKE_ACTIVITY_SUIT_REWARD_REQ = 1592; + CMD_WIKI_TAKE_ACTIVITY_SUIT_REWARD_RSP = 1593; + CMD_GET_BLACK_LIST_REQ = 1594; + CMD_GET_BLACK_LIST_RSP = 1595; + CMD_ADD_TO_BLACK_LIST_REQ = 1596; + CMD_ADD_TO_BLACK_LIST_RSP = 1597; + CMD_DEL_FROM_BLACK_LIST_REQ = 1598; + CMD_DEL_FROM_BLACK_LIST_RSP = 1599; + CMD_DEBUG_HOT_PATCH_FILE_NOTIFY = 1600; + CMD_GET_WEB_ACTIVITY_INFO_REQ = 1601; + CMD_GET_WEB_ACTIVITY_INFO_RSP = 1602; + CMD_GET_MINI_RANK_REQ = 1603; + CMD_GET_MINI_RANK_RSP = 1604; + CMD_CHARGE_ACTIVITY_BUFF_REQ = 1605; + CMD_CHARGE_ACTIVITY_BUFF_RSP = 1606; + CMD_LOGIN_WISH_GET_MAIN_DATA_REQ = 1607; + CMD_LOGIN_WISH_GET_MAIN_DATA_RSP = 1608; + CMD_LOGIN_WISH_TAKE_LOGIN_REWARD_REQ = 1609; + CMD_LOGIN_WISH_TAKE_LOGIN_REWARD_RSP = 1610; + CMD_LOGIN_WISH_TAKE_SPECIAL_REWARD_REQ = 1611; + CMD_LOGIN_WISH_TAKE_SPECIAL_REWARD_RSP = 1612; + CMD_LOGIN_WISH_MAKE_WISH_REQ = 1613; + CMD_LOGIN_WISH_MAKE_WISH_RSP = 1614; + CMD_LOGIN_WISH_TAKE_WISH_REWARD_REQ = 1615; + CMD_LOGIN_WISH_TAKE_WISH_REWARD_RSP = 1616; + CMD_DEV_LEVEL_CHANGE_NOTIFY = 1619; + CMD_DEL_AVATAR_EQUIP_SUITE_REQ = 1620; + CMD_DEL_AVATAR_EQUIP_SUITE_RSP = 1621; + CMD_CLIENT_CHECK_NETWORK_ENV_REQ = 1626; + CMD_CLIENT_CHECK_NETWORK_ENV_RSP = 1627; + CMD_GET_STAGE_RECOMMEND_AVATAR_COURSE_INFO_REQ = 1630; + CMD_GET_STAGE_RECOMMEND_AVATAR_COURSE_INFO_RSP = 1631; + CMD_GET_MISSION_STEP_COMPENSATION_INFO_REQ = 1632; + CMD_GET_MISSION_STEP_COMPENSATION_INFO_RSP = 1633; + CMD_TAKE_MISSION_STEP_COMPENSATION_REQ = 1634; + CMD_TAKE_MISSION_STEP_COMPENSATION_RSP = 1635; + CMD_GET_ELITE_CHAPTER_COMPENSATION_INFO_REQ = 1636; + CMD_GET_ELITE_CHAPTER_COMPENSATION_INFO_RSP = 1637; + CMD_TAKE_ELITE_CHAPTER_COMPENSATION_REQ = 1638; + CMD_TAKE_ELITE_CHAPTER_COMPENSATION_RSP = 1639; + CMD_UNLOCK_PRIVILEGE_REQ = 1642; + CMD_UNLOCK_PRIVILEGE_RSP = 1643; + CMD_MP_SET_EXTRA_SKILL_REQ = 1644; + CMD_MP_SET_EXTRA_SKILL_RSP = 1645; + CMD_GET_PRIVILEGE_INFO_REQ = 1646; + CMD_GET_PRIVILEGE_INFO_RSP = 1647; + CMD_CREATE_STEAM_ORDER_REQ = 1648; + CMD_CREATE_STEAM_ORDER_RSP = 1649; + CMD_VERIFY_STEAM_ORDER_NOTIFY = 1650; + CMD_UNLOCK_GOBACK_FUND_REQ = 1651; + CMD_UNLOCK_GOBACK_FUND_RSP = 1652; + CMD_TAKE_GOBACK_FUND_REWARD_REQ = 1653; + CMD_TAKE_GOBACK_FUND_REWARD_RSP = 1654; + CMD_EX_BOSS_SWEEP_REQ = 1655; + CMD_EX_BOSS_SWEEP_RSP = 1656; + CMD_EX_BOSS_TAKE_BOSS_SCORE_REWARD_NOTIFY = 1657; + CMD_BIND_HOYOLAB_ACCOUNT_REQ = 1658; + CMD_BIND_HOYOLAB_ACCOUNT_RSP = 1659; + CMD_CHAPTER_GROUP_GET_DATA_REQ = 1660; + CMD_CHAPTER_GROUP_GET_DATA_RSP = 1661; + CMD_WEEK_DAY_ACTIVITY_SWEEP_REQ = 1664; + CMD_WEEK_DAY_ACTIVITY_SWEEP_RSP = 1665; + CMD_GET_WEEK_DAY_ACTIVITY_COMPENSATION_INFO_REQ = 1666; + CMD_GET_WEEK_DAY_ACTIVITY_COMPENSATION_INFO_RSP = 1667; + CMD_TAKE_WEEK_DAY_ACTIVITY_COMPENSATION_REQ = 1668; + CMD_TAKE_WEEK_DAY_ACTIVITY_COMPENSATION_RSP = 1669; + CMD_REQUEST_LOGOFF_REQ = 1670; + CMD_REQUEST_LOGOFF_RSP = 1671; + CMD_GET_CHAPTER_COMPENSATION_INFO_REQ = 1672; + CMD_GET_CHAPTER_COMPENSATION_INFO_RSP = 1673; + CMD_TAKE_CHAPTER_COMPENSATION_REQ = 1674; + CMD_TAKE_CHAPTER_COMPENSATION_RSP = 1675; + CMD_GET_CHALLENGE_STEP_COMPENSATION_INFO_REQ = 1676; + CMD_GET_CHALLENGE_STEP_COMPENSATION_INFO_RSP = 1677; + CMD_TAKE_CHALLENGE_STEP_COMPENSATION_REQ = 1678; + CMD_TAKE_CHALLENGE_STEP_COMPENSATION_RSP = 1679; + CMD_GET_SPECIFIC_RANK_REQ = 1684; + CMD_GET_SPECIFIC_RANK_RSP = 1685; + CMD_GET_INVITE_ACTIVITY_INVITER_DATA_REQ = 1690; + CMD_GET_INVITE_ACTIVITY_INVITER_DATA_RSP = 1691; + CMD_TAKE_INVITE_ACTIVITY_INVITER_PROGRESS_REWARD_REQ = 1692; + CMD_TAKE_INVITE_ACTIVITY_INVITER_PROGRESS_REWARD_RSP = 1693; + CMD_GET_INVITE_ACTIVITY_INVITEE_DATA_REQ = 1694; + CMD_GET_INVITE_ACTIVITY_INVITEE_DATA_RSP = 1695; + CMD_INVITE_ACTIVITY_ACCEPT_INVITE_REQ = 1696; + CMD_INVITE_ACTIVITY_ACCEPT_INVITE_RSP = 1697; + CMD_GET_MAIN_STORY_MEMOIRS_DATA_REQ = 1701; + CMD_GET_MAIN_STORY_MEMOIRS_DATA_RSP = 1702; + CMD_GET_MAIN_STORY_BLESS_REQ = 1703; + CMD_GET_MAIN_STORY_BLESS_RSP = 1704; + CMD_GET_ACTIVITY_MAIN_DATA_REQ = 1705; + CMD_GET_ACTIVITY_MAIN_DATA_RSP = 1706; + CMD_SET_RED_POINT_STATUS_NOTIFY = 1707; + CMD_CLIENT_RESET_NOTIFY = 1708; + CMD_ADD_CUSTOM_AVATAR_TEAM_REQ = 1709; + CMD_ADD_CUSTOM_AVATAR_TEAM_RSP = 1710; + CMD_DEL_CUSTOM_AVATAR_TEAM_REQ = 1711; + CMD_DEL_CUSTOM_AVATAR_TEAM_RSP = 1712; + CMD_GET_WORLD_MAP_RECOMMEND_REQ = 1713; + CMD_GET_WORLD_MAP_RECOMMEND_RSP = 1714; + CMD_UNLOCK_COLLECTION_REQ = 1715; + CMD_UNLOCK_COLLECTION_RSP = 1716; + CMD_GET_COLLECTION_LIST_REQ = 1717; + CMD_GET_COLLECTION_LIST_RSP = 1718; + CMD_ACTIVATE_COLLECTION_REQ = 1719; + CMD_ACTIVATE_COLLECTION_RSP = 1720; + CMD_EXCHANGE_AVATAR_STIGMATA_REQ = 1721; + CMD_EXCHANGE_AVATAR_STIGMATA_RSP = 1722; + CMD_CHOOSE_SPECIAL_GOBACK_REQ = 1723; + CMD_CHOOSE_SPECIAL_GOBACK_RSP = 1724; + CMD_GOBACK_SPECIAL_BP_PURCHASE_REQ = 1725; + CMD_GOBACK_SPECIAL_BP_PURCHASE_RSP = 1726; + CMD_GOBACK_SPECIAL_BP_TAKE_REWARD_REQ = 1727; + CMD_GOBACK_SPECIAL_BP_TAKE_REWARD_RSP = 1728; + CMD_WEAPON_HOMOLOGY_REQ = 1734; + CMD_WEAPON_HOMOLOGY_RSP = 1735; + CMD_UPDATE_MULTI_MISSION_PROGRESS_REQ = 1736; + CMD_UPDATE_MULTI_MISSION_PROGRESS_RSP = 1737; + CMD_WEAPON_LEVEL_UP_USE_TICKET_REQ = 1738; + CMD_WEAPON_LEVEL_UP_USE_TICKET_RSP = 1739; + CMD_STIGMATA_LEVEL_UP_USE_TICKET_REQ = 1740; + CMD_STIGMATA_LEVEL_UP_USE_TICKET_RSP = 1741; + CMD_THREE_DEAD_LINE = 1999; +} + +enum MpStageVoteOption { + MP_STAGE_VOTE_OPTION_STAY_IN_TEAM = 0; + MP_STAGE_VOTE_OPTION_STAGE_AGAIN = 1; + MP_STAGE_VOTE_OPTION_NEXT_STAGE = 2; +} + +enum CityActivityDataType { + CITY_ACTIVITY_DATA_ALL = 0; + CITY_ACTIVITY_DATA_EVENT = 1; + CITY_ACTIVITY_DATA_PHONE_EVENT = 2; + CITY_ACTIVITY_DATA_PHOTO = 3; +} + +enum EmojiUnlockType { + EMOJI_UNLOCK_TYPE_NONE = 0; + EMOJI_UNLOCK_TYPE_DEFAULT = 1; + EMOJI_UNLOCK_TYPE_ITEM_DROP = 2; +} + +enum WikiDetailType { + WIKI_UNKNOWN = 0; + WIKI_ALL = 1; + WIKI_STIGMATA = 2; + WIKI_WEAPON = 3; + WIKI_DORM = 4; + WIKI_CG = 5; + WIKI_MEDAL = 6; + WIKI_ACHIEVEMENT = 7; + WIKI_SKIN = 8; + WIKI_EMOJI = 9; + WIKI_AVATAR = 10; +} + +enum ClientSettingType { + CLIENT_SETTING_NONE = 0; + CLIENT_SETTING_ALL = 1; + CLIENT_SETTING_WEEKLY_GUIDE_SWITCH = 2; + CLIENT_SETTING_SNS_SHOW = 3; + CLIENT_SETTING_AVATAR_ARTIFACT = 4; + CLIENT_SETTING_MASTER_PUPIL_TAG_SWITCH = 5; +} + +enum PlotType { + PLOT_TYPE_NORMAL = 0; + PLOT_TYPE_DORM = 1; + PLOT_TYPE_MATRIX = 2; + PLOT_TYPE_RPG = 3; + PLOT_TYPE_ISLAND = 4; + PLOT_TYPE_CITY_ACTIVITY = 5; +} + +enum FarmSlotStatus { + FARM_SLOT_NONE = 0; + FARM_SLOT_LOCKED = 1; + FARM_SLOT_FREE = 2; + FARM_SLOT_IN_PRODUCE = 3; + FARM_SLOT_FINISH_PRODUCE = 4; +} + +enum FastPassLimitType { + FAST_PASS_LIMIT_NONE = 0; + FAST_PASS_LIMIT_DAILY = 1; + FAST_PASS_LIMIT_WEEKLY = 2; +} + +enum FastPassType { + FAST_PASS_TYPE_NONE = 0; + FAST_PASS_TYPE_OW = 1; + FAST_PASS_TYPE_WEEKDAY = 2; +} + +enum PlatFormType { + PLATFORM_NONE = 0; + PLATFORM_ANDROID = 100001; + PLATFORM_IOS = 200002; + PLATFORM_PC = 300003; +} + +enum CustomHeadType { + CUSTOM_HEAD_TYPE_NONE = 0; + CUSTOM_HEAD_TYPE_AVATAR = 1; + CUSTOM_HEAD_TYPE_DRESS = 2; + CUSTOM_HEAD_TYPE_NORMAL = 3; +} + +enum AvatarRecommendType { + AVATAR_RECOMMEND_NONE = 0; + AVATAR_RECOMMEND_STAGE = 1; + AVATAR_RECOMMEND_EXBOSS = 2; + AVATAR_RECOMMEND_WEEKLY_REPORT_ENDLESS = 3; + AVATAR_RECOMMEND_WEEKLY_REPORT_EX_BOSS = 4; + AVATAR_RECOMMEND_WEEKLY_REPORT_ULTRA_ENDLESS = 5; + AVATAR_RECOMMEND_ULTRA_ENDLESS = 6; + AVATAR_RECOMMEND_GREEDY = 7; + AVATAR_RECOMMEND_WEEKLY_REPORT_GREEDY = 8; +} + +enum AvatarRecommendStyle { + AVATAR_RECOMMEND_STYLE_NONE = 0; + AVATAR_RECOMMEND_STYLE_HOT = 1; + AVATAR_RECOMMEND_STYLE_CHOICE = 2; + AVATAR_RECOMMEND_STYLE_SINGLE_AVATAR = 3; +} + +enum AvatarRecommendSource { + AVATAR_RECOMMEND_SOURCE_NONE = 0; + AVATAR_RECOMMEND_SOURCE_DB = 1; + AVATAR_RECOMMEND_SOURCE_DESIGN_DATA = 2; +} + +enum DanmakuSlotStatus { + DANMAKU_SLOT_STATUS_NONE = 0; + DANMAKU_SLOT_STATUS_CLOSE = 1; + DANMAKU_SLOT_STATUS_FAKE = 2; +} + +enum PlayerOnlineStatus { + PLAYER_ONLINE_STATUS_NONE = 0; + PLAYER_ONLINE_STATUS_ONLINE = 1; + PLAYER_ONLINE_STATUS_WAIT_SAVE = 2; + PLAYER_ONLINE_STATUS_OFFLINE = 3; +} + +enum MpAction { + MP_ACTION_ERROR = 0; + MP_ACTION_CLOSE_MVP_PAGE = 1; + MP_ACTION_CLOSE_LIKE_PAGE = 2; +} + +enum ClientDataType { + CLIENT_DATA_NONE = 0; + CLIENT_DATA_ALL = 1; + CLIENT_DATA_RPG_TALE = 2; + CLIENT_DATA_WORLDMAP = 3; + CLIENT_DATA_KINGDOM_WAR = 4; + CLIENT_DATA_AUGMENT_PERFORMANCE = 5; + CLIENT_DATA_AVATAR = 6; + CLIENT_DATA_OPENWORLD_CHAPTER = 7; + CLIENT_DATA_OPENWORLD = 8; + CLIENT_DATA_NINJA = 9; + CLIENT_DATA_AVATAR_TUTORIAL = 10; + CLIENT_DATA_PHONE_NOTICE = 11; + CLIENT_DATA_NEWBIE_ACTIVITY = 12; + CLIENT_DATA_CHATWORLD = 13; + CLIENT_DATA_MAINSTORY_LEVEL_SPECIAL_JOB = 14; + CLIENT_DATA_MEMOIRS = 15; + CLIENT_DATA_GODWAR = 16; + CLIENT_DATA_THEME_TOWER = 17; + CLIENT_DATA_MAINLINE_BAG = 18; + CLIENT_DATA_GOBACK = 19; + CLIENT_DATA_ADVENTURE_GROUP = 20; + CLIENT_DATA_NEW_RED_DOT_DRESS_ID = 21; + CLIENT_DATA_NEW_ELF = 22; + CLIENT_DATA_PJMS_ACTIVITY = 23; + CLIENT_DATA_PJMS_AVATAR_TRIAL = 24; + CLIENT_DATA_RESIDENT_ACTIVITY = 25; + CLIENT_DATA_DURANDAL_CUBE = 26; + CLIENT_DATA_MCK_CHAPTER_REWARD = 27; + CLIENT_DATA_TILED_GAME_INN = 28; +} + +enum WebActivityShowType { + WEB_ACTIVITY_SHOW_TYPE_NONE = 0; + WEB_ACTIVITY_SHOW_TYPE_TRACK_POINT = 1; + WEB_ACTIVITY_SHOW_TYPE_FINISH = 2; + WEB_ACTIVITY_SHOW_TYPE_HIDE = 3; +} + +enum MiniRankType { + MINI_RANK_TYPE_NONE = 0; + MINI_RANK_RPG_STAGE = 1; + MINI_RANK_GENERAL_ACTIVITY_STAGE = 2; + MINI_RANK_CHAPTER_ACTIVITY_STAGE = 3; + MINI_RANK_RPG_SCHEDULE = 4; + MINI_RANK_RANCH_ACTIVITY_STAGE = 5; + MINI_RANK_OPENWORLD_CHAPTER_CHALLENGE = 6; + MINI_RANK_GLOBAL_EXPLORE_ENTITY_CONTRIBUTION = 7; + MINI_RANK_GLOBAL_EXPLORE_TOTAL_CONTRIBUTION = 8; + MINI_RANK_GLOBAL_EXPLORE_STAGE = 9; + MINI_RANK_THEME_TOWER_STAGE = 10; + MINI_RANK_FUTARI_BATTLE = 11; + MINI_RANK_MONSTER_CARD_PVP = 12; +} + +enum ChapterGroupSiteStatus { + CHAPTER_GROUP_SITE_STATUS_INVALID = 0; + CHAPTER_GROUP_SITE_STATUS_LOCKED = 1; + CHAPTER_GROUP_SITE_STATUS_UNLOCKED = 2; + CHAPTER_GROUP_SITE_STATUS_FINISHED = 3; +} + +enum ChapterGroupSiteType { + CHAPTER_GROUP_SITE_TYPE_INVALID = 0; + CHAPTER_GROUP_SITE_TYPE_CHAPTER = 1; + CHAPTER_GROUP_SITE_TYPE_VIDEO = 2; + CHAPTER_GROUP_SITE_TYPE_OPENWORLD = 3; + CHAPTER_GROUP_SITE_TYPE_OW_STAGE = 4; + CHAPTER_GROUP_SITE_TYPE_PJMS = 5; + CHAPTER_GROUP_SITE_TYPE_PJMS_NO_ENTER_WORLD = 6; +} + +enum SpecificRankType { + SPECIFIC_RANK_NONE = 0; + SPECIFIC_RANK_GLOBAL_GOODS = 1; +} + +enum MemoirsDataType { + MEMOIRS_DATA_TYPE_NONE = 0; + MEMOIRS_DATA_TYPE_UINT = 1; + MEMOIRS_DATA_TYPE_TIMESTAMP = 2; + MEMOIRS_DATA_TYPE_AVATAR_TEAM = 3; + MEMOIRS_DATA_TYPE_BOOL = 4; +} + +enum MemoirsSourceType { + MEMOIRS_SOURCE_TYPE_NONE = 0; + MEMOIRS_SOURCE_TYPE_DB = 1; + MEMOIRS_SOURCE_TYPE_BIN = 2; +} + +enum MemoirsId { + MEMOIRS_NONE = 0; + MEMOIRS_ENDLESS_GROUP_LEVEL = 101; + MEMOIRS_ENDLESS_PROGRESS = 102; + MEMOIRS_BRONYA_STAGE_WIN_STATUS = 103; + MEMOIRS_BRONYA_STAGE_MIN_TIME = 104; + MEMOIRS_BRONYA_STAGE_ENTER_TIMES = 105; + MEMOIRS_CHAPTER4_PASS_STATUS = 106; + MEMOIRS_OPENWORLD_SAKURA_MAX_STORY_ID = 201; + MEMOIRS_EXBOSS_MAX_SCORE = 301; + MEMOIRS_EXBOSS_MAX_RANK = 302; + MEMOIRS_CAMP_WAR_1005_CAMP_ID = 303; + MEMOIRS_CAMP_WAR_1005_SCORE = 304; + MEMOIRS_CAMP_WAR_1006_CAMP_ID = 305; + MEMOIRS_CAMP_WAR_1006_SCORE = 306; + MEMOIRS_CAMP_WAR_1007_CAMP_ID = 307; + MEMOIRS_CAMP_WAR_1007_SCORE = 308; + MEMOIRS_DORM_UNLOCK_AVATAR_NUM = 401; + MEMOIRS_GRADUATED_PUPIL_NUM = 402; + MEMOIRS_CITY_ACTIVITY_AFFINITY_SUM = 501; + MEMOIRS_AVATAR_KIANA_C5_YL_UNLOCK_TIME = 601; + MEMOIRS_ACT_CHALLENGE_STAGE_WIN_STATUS = 701; + MEMOIRS_ACT_CHALLENGE_STAGE_ENTER_TIMES = 702; + MEMOIRS_DIRAC_ENDLESS_GROUP_ID = 801; + MEMOIRS_DIRAC_ENDLESS_HARD_LEVEL = 802; + MEMOIRS_WINTER_ACTIVITY_MAX_SITE_ID = 804; + MEMOIRS_CAMPAIGN_ACTIVITY_PASS_TIMES = 901; + MEMOIRS_KINGDOM_WAR_1_KINGDOM_ID = 1001; + MEMOIRS_KINGDOM_WAR_1_SCORE = 1002; + MEMOIRS_KINGDOM_WAR_2_KINGDOM_ID = 1003; + MEMOIRS_KINGDOM_WAR_2_SCORE = 1004; + MEMOIRS_QUANTUM_ENDLESS_GROUP_ID = 1006; + MEMOIRS_QUANTUM_ENDLESS_MAX_LAYER = 1007; + MEMOIRS_QUANTUM_ENDLESS_AVATAR_TEAM = 1008; + MEMOIRS_QUANTUM_ENDLESS_HARD_LEVEL = 1009; + MEMOIRS_AVATAR_BRONYA_C7_GZ_UNLOCK_TIME = 1101; + MEMOIRS_AVATAR_SEELE_C2_HY_UNLOCK_TIME = 1201; + MEMOIRS_FIRST_LEVEL55_WEAPON_ID = 1202; + MEMOIRS_NINJA_ACTIVITY_MAX_STAGE_ID = 1301; + MEMOIRS_QAVATAR_MAX_SITE_ID = 1302; + MEMOIRS_KINGDOM_WAR_0_KINGDOM_ID = 1501; + MEMOIRS_KINGDOM_WAR_0_SCORE = 1502; + MEMOIRS_THERESA_ACTIVITY_MAX_STAGE_ID = 1503; + MEMOIRS_AVATAR_MEI_C5_AC_UNLOCK_TIME = 1601; + MEMOIRS_ULTRA_ENDLESS_MAX_CUP_NUM = 1701; + MEMOIRS_ULTRA_ENDLESS_MAX_SCORE = 1702; + MEMOIRS_ULTRA_ENDLESS_AVATAR_TEAM = 1703; + MEMOIRS_AVATAR_FUKA_C6_FL_UNLOCK_TIME = 1801; + MEMOIRS_PAIMON_MEDAL_UNLOCK_STATUS = 1901; + MEMOIRS_AVATAR_KIANA_C6_MH_UNLOCK_TIME = 2001; + MEMOIRS_GOD_WAR_MAX_PUNISH_LEVEL = 2101; + MEMOIRS_GOD_WAR_AVATAR_ID = 2102; + MEMOIRS_AVATAR_DURANDAL_C4_DK_UNLOCK_TIME = 2201; + MEMOIRS_CHAPTER31_MAX_STORY_ID = 2301; + MEMOIRS_DICEY_DUNGEON_ACTIVITY_PROGRESS = 2302; + MEMOIRS_PVZ_ACTIVITY_PROGRESS = 2303; + MEMOIRS_HAS_GOT_PVZ_OR_DICEY_ACTIVITY_MATERIAL = 2304; + MEMOIRS_AVATAR_ELYSIA_C2_MC_UNLOCK_TIME = 2401; + MEMOIRS_AICYBER_REPAIR_PROGRESS = 2501; +} + +enum ActivityModuleType { + ACTIVITY_MODULE_INVALID = 0; + ACTIVITY_MODULE_MISC = 1; + ACTIVITY_MODULE_FLOP = 3; + ACTIVITY_MODULE_BINGO = 4; + ACTIVITY_MODULE_BULLETIN_SCORE = 5; + ACTIVITY_MODULE_RELATION = 6; + ACTIVITY_MODULE_FARM = 7; + ACTIVITY_MODULE_TOWER_RAID = 8; + ACTIVITY_MODULE_CONTINUOUS_RECHARGE = 9; + ACTIVITY_MODULE_MISSION_THEME = 10; + ACTIVITY_MODULE_OFFLINE_RESOURECE = 11; + ACTIVITY_MODULE_WEEKLY_ROUTINE = 12; + ACTIVITY_MODULE_AVATAR_MISSION = 13; + ACTIVITY_MODULE_KINGDOW_WAR = 14; + ACTIVITY_MODULE_CHAPTER = 16; + ACTIVITY_MODULE_BATTLE_PASS = 17; + ACTIVITY_MODULE_MONOPOLY = 18; + ACTIVITY_MODULE_RAFFLE = 19; + ACTIVITY_MODULE_OVERLAP = 20; + ACTIVITY_MODULE_GLOBAL_WAR = 21; + ACTIVITY_MODULE_SCRATCH_TICKET = 23; + ACTIVITY_MODULE_BBQ = 24; + ACTIVITY_MODULE_NEWBIE = 25; + ACTIVITY_MODULE_MOSAIC = 26; + ACTIVITY_MODULE_NINJA = 27; + ACTIVITY_MODULE_FAST_PASS = 28; + ACTIVITY_MODULE_QUESTION = 29; + ACTIVITY_MODULE_TRADING_CARD = 30; + ACTIVITY_MODULE_ARMADA_STAGE_SCORE = 31; + ACTIVITY_MODULE_PICTURE = 32; + ACTIVITY_MODULE_JIGSAW = 33; + ACTIVITY_MODULE_ARMADA_REUNION = 34; + ACTIVITY_MODULE_GARDEN = 35; + ACTIVITY_MODULE_CHATWORLD_DISH = 36; + ACTIVITY_MODULE_DROP_LIMIT = 37; + ACTIVITY_MODULE_LOGIN_MISSION = 38; + ACTIVITY_MODULE_SANCTUARY = 40; + ACTIVITY_MODULE_REWARD_STATISTIC = 41; + ACTIVITY_MODULE_SLOT_MACHINE = 42; + ACTIVITY_MODULE_EXAMINATION = 43; + ACTIVITY_MODULE_SUPPORT = 44; + ACTIVITY_MODULE_LOGIN_WISH = 46; + ACTIVITY_MODULE_RPG_DUNGEON = 49; + ACTIVITY_MODULE_REUNION_COOK = 50; + ACTIVITY_MODULE_DREAM = 51; + ACTIVITY_MODULE_SLG = 52; + ACTIVITY_MODULE_THEME_WANTED = 53; + ACTIVITY_MODULE_GLOBAL_POLLING = 54; + ACTIVITY_MODULE_RANCH = 55; + ACTIVITY_MODULE_RESTAURANT = 56; + ACTIVITY_MODULE_TOWN = 57; + ACTIVITY_MODULE_WEB = 58; + ACTIVITY_MODULE_MONSTER_CARD = 59; + ACTIVITY_MODULE_DICEY_DUNGEON = 60; + ACTIVITY_MODULE_PVZ = 61; + ACTIVITY_MODULE_BUFF_ASSIST = 62; + ACTIVITY_MODULE_INVITE = 63; + ACTIVITY_MODULE_QCANDY_BATTLE = 64; + ACTIVITY_MODULE_WAVE_RUSH = 65; + ACTIVITY_MODULE_AI_CYBER = 66; + ACTIVITY_MODULE_MINI_MONOPOLY = 67; + ACTIVITY_MODULE_GLOBAL_EXPLORE = 68; + ACTIVITY_MODULE_PLATFORM_SHOOTER = 69; + ACTIVITY_MODULE_AVATAR_CULTIVATE = 70; + ACTIVITY_MODULE_MIRAGE = 71; + ACTIVITY_MODULE_SUSANA_TRIAL = 72; + ACTIVITY_MODULE_MATCH_THREE = 73; + ACTIVITY_MODULE_CHAPTER_BW_WORLD = 74; + ACTIVITY_MODULE_SHIGURE_KIRA = 75; + ACTIVITY_MODULE_THEME_TOWER = 76; + ACTIVITY_MODULE_MAHOU_CARD = 77; + ACTIVITY_MODULE_PON_MACHINE = 78; + ACTIVITY_MODULE_TILED_GAME_LUNA = 80; + ACTIVITY_MODULE_CARNIVAL_LOTTERY = 81; + ACTIVITY_MODULE_CHAPTER_ARK = 82; + ACTIVITY_MODULE_TILED_GAME_FARM = 83; + ACTIVITY_MODULE_MINION_CLASH = 84; + ACTIVITY_MODULE_ARK_PLUS = 85; + ACTIVITY_MODULE_MARBLES_SHOOT = 86; + ACTIVITY_MODULE_GOURMET_HUNT = 87; + ACTIVITY_MODULE_THELEMA_ACTIVITY = 88; + ACTIVITY_MODULE_MATCH_THREE_PLUS = 89; + ACTIVITY_MODULE_DEVIL_AUTO_CHESS = 90; + ACTIVITY_MODULE_TILED_GAME_SRPG = 91; + ACTIVITY_MODULE_SIMPLIFIED_GOD_WAR = 92; + ACTIVITY_MODULE_GAME_ROOM = 93; + ACTIVITY_MODULE_CORRIDOR = 94; + ACTIVITY_MODULE_QRTS = 95; + ACTIVITY_MODULE_RE = 96; + ACTIVITY_MODULE_BURDEN_ALLEVIATION_V2 = 97; + ACTIVITY_MODULE_FUTARI_BATTLE = 98; + ACTIVITY_MODULE_TILED_GAME_MONSTER_FARM = 99; + ACTIVITY_MODULE_TILED_GAME_PRPG = 100; + ACTIVITY_MODULE_MONSTER_CARD_PVP = 101; + ACTIVITY_MODULE_MONSTER_MORPH = 102; + ACTIVITY_MODULE_KIANA_AUTO_CHESS = 103; + ACTIVITY_MODULE_CRYSTAL_LOTTERY = 104; + ACTIVITY_MODULE_TILED_GAME_INN = 105; + ACTIVITY_MODULE_TOWER_DEFENSE = 106; +} + +enum ManifestType { + MANIFEST_NONE = 0; + MANIFEST_AUDIO = 1; + MANIFEST_AUDIO_PRE_DOWNLOAD = 2; + MANIFEST_VIDEO_ENCRYPT = 3; + MANIFEST_DATA_VERSION = 4; +} + +enum WorldMapRecommendConditionType { + RECOMMEND_CONDITION_TYPE_NONE = 0; + RECOMMEND_CONDITION_TYPE_WEEKDAY_ACTIVITY_ALL_FINISH = 1; + RECOMMEND_CONDITION_TYPE_EXBOSS_FINISH_NUM = 2; + RECOMMEND_CONDITION_TYPE_EXBOSS_SINGLE_BOSS_REWARD = 3; + RECOMMEND_CONDITION_TYPE_EXBOSS_NOT_OPEN = 4; + RECOMMEND_CONDITION_TYPE_PLAYER_LEVEL = 5; + RECOMMEND_CONDITION_TYPE_MATERIAL_LESS = 6; + RECOMMEND_CONDITION_TYPE_DROP_LIMITED_MATERIAL = 7; + RECOMMEND_CONDITION_TYPE_MISSION_CLOSE = 8; + RECOMMEND_CONDITION_TYPE_OW_FINISH_PERIOD = 9; + RECOMMEND_CONDITION_TYPE_OW_NO_QUEST = 10; + RECOMMEND_CONDITION_TYPE_ARMADA_STAGE_SCORE = 11; + RECOMMEND_CONDITION_TYPE_ARMADA_STAGE_NOT_OPEN = 12; + RECOMMEND_CONDITION_TYPE_ULTRA_ENDLESS_SCORE = 13; + RECOMMEND_CONDITION_TYPE_ULTRA_ENDLESS_SCHEDULE = 14; + RECOMMEND_CONDITION_TYPE_ULTRA_ENDLESS_NOT_OPEN = 15; + RECOMMEND_CONDITION_TYPE_ENDLESS_CHALLENGE_FINISH = 16; + RECOMMEND_CONDITION_TYPE_ENDLESS_SCHEDULE = 17; + RECOMMEND_CONDITION_TYPE_ENDLESS_NOT_OPEN = 18; + RECOMMEND_CONDITION_TYPE_MISSION_NOT_DOING = 19; + RECOMMEND_CONDITION_TYPE_EXBOSS_RANK_FINISH_NUM = 20; + RECOMMEND_CONDITION_TYPE_RAID_REPLACE_CHALLENGE_NUM = 21; +} + +enum CollectionUnlockType { + COLLECTION_UNLOCK_TYPE_NONE = 0; + COLLECTION_UNLOCK_TYPE_STAGE = 1; + COLLECTION_UNLOCK_TYPE_MATERIAL_AUTO_USE = 2; + COLLECTION_UNLOCK_TYPE_PLOT = 3; +} + +message TileWaitSelectPath { + repeated uint32 candidate_path_cell_id_list = 1; + uint32 left_step_num = 2; +} + +message TileFloor { + uint32 floor_id = 1; + TileFloorStatus floor_status = 2; +} + +message TileMapCell { + message CellLayer { + uint32 model_id = 1; + uint32 direction = 2; + repeated TileMapCell.CellDataType updated_type_list = 3; + } + + enum CellDataType { + CELL_DATA_TYPE_NONE = 0; + CELL_DATA_TYPE_BARRIER = 1; + CELL_DATA_TYPE_FOG = 2; + CELL_DATA_TYPE_TERRAIN = 3; + CELL_DATA_TYPE_LAYER_MODEL_ID = 4; + CELL_DATA_TYPE_LAYER_DIRECTION = 5; + CELL_DATA_TYPE_HEIGHT = 6; + } + + uint32 cell_id = 1; + TileMapCell.CellLayer ground = 2; + TileMapCell.CellLayer decoration = 3; + uint32 barrier = 4; + uint32 fog = 5; + uint32 terrain = 6; + repeated TileMapCell.CellDataType updated_type_list = 7; + uint32 height = 8; +} + +message TileTrigger { + uint32 id = 1; + bool is_active = 2; + uint32 position = 3; +} + +message TileMark { + uint32 mark_id = 1; + uint32 mark_value = 2; +} + +message TilePlayerInfo { + uint32 uid = 1; + string nickname = 2; + uint32 avatar_id = 3; +} + +message TileNpcInfo { + uint32 id = 1; +} + +message TileEntity { + uint32 unique_id = 1; + uint32 entity_type = 2; + uint32 position = 3; + uint32 direction = 4; + uint32 reset_tag = 5; + TilePlayerInfo player_info = 11; + TileNpcInfo npc_info = 12; +} + +message TileMap { + uint32 map_id = 1; + uint32 width = 2; + uint32 height = 3; + repeated TileMapCell cell_list = 5; + repeated TileTrigger trigger_list = 6; + repeated TileEntity entity_list = 7; + repeated TileMark mark_list = 8; + repeated uint32 finished_linear_drama_id_list = 9; +} + +// CmdID: 4900 +message GetTileMapReq { + uint32 tower_id = 1; + uint32 floor_id = 2; +} + +// CmdID: 4901 +message GetTileMapRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LOCKED = 2; + FEATURE_CLOSED = 3; + } + + GetTileMapRsp.Retcode retcode = 1; + uint32 tower_id = 2; + uint32 floor_id = 3; + TileMap map = 4; + bool is_incremental_sync = 5; +} + +message TileUpdateMapOperation { + message MoveEntity { + uint32 unique_id = 1; + uint32 to_position = 2; + repeated uint32 path_cell_id_list = 3; + uint32 direction = 4; + uint32 saved_position = 5; + } + + repeated TileMapCell cell_list = 1; + repeated TileTrigger trigger_list = 2; + repeated TileEntity create_entity_list = 3; + repeated TileUpdateMapOperation.MoveEntity move_entity_list = 4; + repeated uint32 delete_entity_list = 5; + repeated TileMark mark_list = 6; + repeated uint32 rpg_content_id_list = 7; +} + +// CmdID: 4902 +message TileUpdateMapReq { + message MoveEntity { + uint32 unique_id = 1; + uint32 to_position = 2; + repeated uint32 path_cell_id_list = 3; + uint32 direction = 4; + uint32 saved_position = 5; + } + + message OuterValue { + enum Type { + NONE = 0; + RPG_OVERALL = 1; + } + + TileUpdateMapReq.OuterValue.Type type = 1; + uint32 key = 2; + uint32 value = 3; + } + + message ResetRegion { + enum Type { + TILE_RESET_REGION_TYPE_ALL = 0; + TILE_RESET_REGION_TYPE_ENTITY = 1; + } + + uint32 reset_tag = 3; + TileUpdateMapReq.ResetRegion.Type reset_type = 4; + } + + uint32 tower_id = 1; + uint32 floor_id = 2; + repeated TileMapCell cell_list = 3; + repeated TileTrigger trigger_list = 4; + repeated TileEntity create_entity_list = 5; + repeated TileUpdateMapReq.MoveEntity move_entity_list = 6; + repeated uint32 delete_entity_list = 7; + repeated TileMark mark_list = 8; + repeated TileUpdateMapReq.OuterValue outer_value_list = 9; + repeated uint32 rpg_content_id_list = 10; + repeated TileUpdateMapOperation operation_list = 11; + uint32 linear_drama_id = 12; + repeated TileUpdateMapReq.ResetRegion reset_region_list = 13; +} + +// CmdID: 4903 +message TileUpdateMapRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + START_CELL_ERROR = 2; + NOT_REACHABLE = 3; + FEATURE_CLOSED = 4; + } + + TileUpdateMapRsp.Retcode retcode = 1; + repeated TileEntity created_entity_list = 2; + repeated uint32 failed_content_id_list = 3; + uint32 not_reachable_cell_id = 4; + uint32 linear_drama_id = 5; + bool is_reset_region_has_type_all = 6; +} + +// CmdID: 4904 +message TileGetTowerReq { + uint32 tower_id = 1; +} + +// CmdID: 4905 +message TileGetTowerRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSED = 2; + } + + TileGetTowerRsp.Retcode retcode = 1; + uint32 cur_floor_id = 2; + repeated uint32 finished_dialog_id_list = 3; + repeated uint32 settled_event_id_list = 4; + repeated TileFloor floor_list = 5; + uint32 tower_id = 6; +} + +// CmdID: 4906 +message TileEnterReq { + uint32 tower_id = 1; + uint32 floor_id = 2; + bool is_teleport_player = 3; + uint32 teleport_position = 4; +} + +// CmdID: 4907 +message TileEnterRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LOCKED = 2; + TELEPORT_FAIL = 3; + FEATURE_CLOSED = 4; + } + + TileEnterRsp.Retcode retcode = 1; +} + +// CmdID: 4908 +message TileSaveProgressReq { + uint32 tower_id = 1; + repeated uint32 finished_dialog_id_list = 2; +} + +// CmdID: 4909 +message TileSaveProgressRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSED = 2; + } + + TileSaveProgressRsp.Retcode retcode = 1; + repeated uint32 finished_dialog_id_list = 2; +} + +// CmdID: 4912 +message TileResetFloorReq { + uint32 tower_id = 1; + repeated uint32 floor_id_list = 2; +} + +// CmdID: 4913 +message TileResetFloorRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSED = 2; + } + + TileResetFloorRsp.Retcode retcode = 1; + uint32 tower_id = 2; + repeated uint32 floor_id_list = 3; +} + +// CmdID: 4914 +message TileEntityOpNotify { + message StatusOp { + uint32 status = 1; + } + + message MoveOp { + repeated uint32 path_cell_id_list = 1; + TileMoveType move_type = 2; + uint32 direction = 3; + } + + message UpdateCellOp { + repeated TileMapCell cell_list = 1; + repeated TileTrigger trigger_list = 2; + } + + message UpdateEntityOp { + repeated TileEntity create_entity_list = 1; + repeated uint32 delete_entity_list = 2; + } + + message TileEntityOp { + uint32 unique_id = 1; + TileEntityOpNotify.MoveOp move = 2; + TileWaitSelectPath wait_select_path = 3; + TileEntityOpNotify.UpdateCellOp update_cell = 4; + TileEntityOpNotify.UpdateEntityOp update_entity = 5; + TileEntityOpNotify.StatusOp status = 6; + } + + uint32 tower_id = 1; + uint32 floor_id = 2; + repeated TileEntityOpNotify.TileEntityOp entity_op_list = 3; +} + +// CmdID: 4915 +message TileSelectPathReq { + uint32 tower_id = 1; + uint32 next_path_cell_id = 2; +} + +// CmdID: 4916 +message TileSelectPathRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_CANDIDATE = 2; + FEATURE_CLOSED = 3; + } + + TileSelectPathRsp.Retcode retcode = 1; + uint32 tower_id = 2; + uint32 next_path_cell_id = 3; +} + +// CmdID: 4919 +message TileReportSavedPositionReq { + uint32 tower_id = 1; + uint32 floor_id = 2; + uint32 position = 3; +} + +// CmdID: 4920 +message TileReportSavedPositionRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + POSITION_ERROR = 2; + FEATURE_CLOSED = 3; + } + + TileReportSavedPositionRsp.Retcode retcode = 1; +} + +// CmdID: 4921 +message TileLoadSavedPositionReq { + uint32 tower_id = 1; + uint32 floor_id = 2; + repeated uint32 rpg_content_id_list = 10; +} + +// CmdID: 4922 +message TileLoadSavedPositionRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_SAVED = 2; + FEATURE_CLOSED = 3; + } + + TileLoadSavedPositionRsp.Retcode retcode = 1; + uint32 position = 2; + repeated uint32 failed_content_id_list = 3; +} + +// CmdID: 4923 +message TileMapUpdateNotify { + uint32 tower_id = 1; + uint32 floor_id = 2; + repeated TileMapCell cell_list = 3; + repeated TileEntity entity_list = 4; + repeated uint32 deleted_entity_list = 5; +} + +// CmdID: 4924 +message TileGetPartialMapAsUpdateReq { + uint32 tower_id = 1; + uint32 floor_id = 2; + repeated uint32 cell_id_list = 3; +} + +// CmdID: 4925 +message TileGetPartialMapAsUpdateRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSED = 2; + } + + TileGetPartialMapAsUpdateRsp.Retcode retcode = 1; +} + +// CmdID: 4926 +message GetTileMiniMapReq { + uint32 activity_id = 1; + repeated uint32 map_id_list = 2; + bool is_all = 3; +} + +message TileMiniMapCell { + uint32 cell_id = 1; + uint32 fog = 2; +} + +message TileMiniMapEntity { + uint32 unique_id = 1; + uint32 entity_type = 2; + uint32 position = 3; + uint32 id = 4; +} + +message TileMiniMapMark { + uint32 mark_id = 1; + uint32 mark_value = 2; +} + +message TileMiniMap { + uint32 map_id = 1; + uint32 width = 2; + uint32 height = 3; + repeated TileMiniMapCell cell_list = 4; + repeated TileMiniMapEntity entity_list = 5; + bool is_active = 6; + repeated TileMiniMapMark mark_list = 7; +} + +// CmdID: 4927 +message GetTileMiniMapRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetTileMiniMapRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated uint32 map_id_list = 3; + repeated TileMiniMap tile_map_list = 4; + bool is_all = 5; +} + +enum CmdTypeTile { + CMD_TYPE_TILE_NONE = 0; + CMD_GET_TILE_MAP_REQ = 4900; + CMD_GET_TILE_MAP_RSP = 4901; + CMD_TILE_UPDATE_MAP_REQ = 4902; + CMD_TILE_UPDATE_MAP_RSP = 4903; + CMD_TILE_GET_TOWER_REQ = 4904; + CMD_TILE_GET_TOWER_RSP = 4905; + CMD_TILE_ENTER_REQ = 4906; + CMD_TILE_ENTER_RSP = 4907; + CMD_TILE_SAVE_PROGRESS_REQ = 4908; + CMD_TILE_SAVE_PROGRESS_RSP = 4909; + CMD_TILE_SETTLE_EVENT_REQ = 4910; + CMD_TILE_SETTLE_EVENT_RSP = 4911; + CMD_TILE_RESET_FLOOR_REQ = 4912; + CMD_TILE_RESET_FLOOR_RSP = 4913; + CMD_TILE_ENTITY_OP_NOTIFY = 4914; + CMD_TILE_SELECT_PATH_REQ = 4915; + CMD_TILE_SELECT_PATH_RSP = 4916; + CMD_TILE_REPORT_SAVED_POSITION_REQ = 4919; + CMD_TILE_REPORT_SAVED_POSITION_RSP = 4920; + CMD_TILE_LOAD_SAVED_POSITION_REQ = 4921; + CMD_TILE_LOAD_SAVED_POSITION_RSP = 4922; + CMD_TILE_MAP_UPDATE_NOTIFY = 4923; + CMD_TILE_GET_PARTIAL_MAP_AS_UPDATE_REQ = 4924; + CMD_TILE_GET_PARTIAL_MAP_AS_UPDATE_RSP = 4925; + CMD_GET_TILE_MINI_MAP_REQ = 4926; + CMD_GET_TILE_MINI_MAP_RSP = 4927; +} + +enum TileEntityType { + TILE_ENTITY_TYPE_NONE = 0; + TILE_ENTITY_TYPE_PLAYER = 1; + TILE_ENTITY_TYPE_NPC = 2; + TILE_ENTITY_TYPE_ROADBLOCK = 3; + TILE_ENTITY_TYPE_TOWN_AVATAR = 4; + TILE_ENTITY_TYPE_TOWN_BUILDING = 5; + TILE_ENTITY_TYPE_ITEM = 6; +} + +enum TileBarrierType { + TILE_BARRIER_TYPE_NONE = 0; + TILE_BARRIER_TYPE_PERMANENT = 1; + TILE_BARRIER_TYPE_BLOCK = 2; + TILE_BARRIER_TYPE_STOP_ON_PLAYER = 3; + TILE_BARRIER_TYPE_STOP_ON_ONCE = 4; + TILE_BARRIER_TYPE_NON_ROADBLOCK = 5; +} + +enum TileFloorStatus { + TILE_FLOOR_STATUS_NONE = 0; + TILE_FLOOR_STATUS_LOCKED = 1; + TILE_FLOOR_STATUS_UNLOCKED = 2; + TILE_FLOOR_STATUS_VISTIED = 3; +} + +enum TileMoveType { + TILE_MOVE_WALK = 0; + TILE_MOVE_TELEPORT = 1; + TILE_MOVE_KNOCK_OFF = 2; +} + +enum SetTileDataType { + SET_TILE_DATA_TYPE_NONE = 0; + SET_TILE_DATA_TYPE_CELL_GROUND = 1; + SET_TILE_DATA_TYPE_CELL_DECORATION = 2; + SET_TILE_DATA_TYPE_CELL_EXTRA = 3; + SET_TILE_DATA_TYPE_ENTITY_ADD = 4; + SET_TILE_DATA_TYPE_ENTITY_MODIFY = 5; + SET_TILE_DATA_TYPE_ENTITY_DELETE = 6; + SET_TILE_DATA_TYPE_TRIGGER = 7; + SET_TILE_DATA_TYPE_MARK = 8; +} + +// CmdID: 8000 +message TiledGameFarmGetDataReq { + uint32 activity_id = 1; +} + +message TiledGameFarmFarmland { + uint32 cell_id = 1; + uint32 mature_time = 2; +} + +message TiledGameFarmLivestock { + uint32 unique_entity_id = 1; + uint32 domestication = 2; + uint32 last_taming_time = 3; + uint32 last_feed_time = 4; + uint32 holding_product_num = 5; + uint32 product_progress = 6; + uint32 get_time = 7; + uint32 last_refresh_product_time = 8; +} + +message TiledGameFarmLivestockShed { + uint32 livestock_id = 1; + uint32 left_food_num = 2; + repeated TiledGameFarmLivestock livestock_list = 3; + uint32 level = 4; + uint32 privilege_stored_product_num = 5; +} + +message TiledGameFarmMine { + uint32 visited_max_floor = 1; + uint32 cur_floor = 2; +} + +message TiledGameFarmFishingFailStatus { + uint32 fish_id = 1; + uint32 continuous_fail_num = 2; +} + +message TiledGameFarmFishingSpot { + uint32 spot_cell_id = 1; + uint32 left_fish_num = 2; +} + +message TiledGameFarmFishingGround { + uint32 cur_fishing_cell_id = 1; + uint32 cur_fish_id = 2; + repeated TiledGameFarmFishingFailStatus fail_status_list = 3; + bool is_super_fishing_used_today = 4; + repeated TiledGameFarmFishingSpot fishing_spot_list = 5; +} + +message TiledGameFarmRestaurant { + uint32 level = 1; + uint32 today_use_meal_voucher_num = 2; +} + +message TiledGameFarmQuestBoard { + bool is_quest_chosen_today = 1; + uint32 cur_quest_id = 2; + repeated uint32 finished_extra_quest_id_list = 3; +} + +message TiledGameFarmCropBuyNum { + uint32 crop_id = 1; + uint32 buy_num = 2; +} + +// CmdID: 8001 +message TiledGameFarmGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + TiledGameFarmGetDataRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 activity_stamina = 3; + repeated TiledGameFarmFarmland farmland_list = 4; + repeated TiledGameFarmLivestockShed livestock_shed_list = 5; + TiledGameFarmMine farm_mine = 6; + TiledGameFarmFishingGround farm_fishing_ground = 7; + uint32 max_stamina = 8; + uint32 next_recover_stamina_time = 9; + TiledGameFarmRestaurant farm_restaurant = 10; + uint32 cur_tower_id = 11; + TiledGameFarmQuestBoard farm_quest_board = 12; + repeated uint32 scene_finished_avatar_id_list = 13; + repeated TiledGameFarmCropBuyNum crop_buy_num_list = 14; + repeated uint32 matured_farmland_id_list = 15; + uint32 last_refresh_time = 16; + repeated uint32 unlock_gallery_id_list = 17; +} + +// CmdID: 8002 +message TiledGameFarmUseToolReq { + uint32 activity_id = 1; + uint32 item_id = 2; + repeated uint32 cell_id_list = 3; +} + +// CmdID: 8003 +message TiledGameFarmUseToolRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LACK_STAMINA = 2; + RANGE_ERROR = 3; + ITEM_ERROR = 4; + LACK_ITEM = 5; + } + + TiledGameFarmUseToolRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 item_id = 3; + repeated uint32 failed_cell_id_list = 4; +} + +// CmdID: 8004 +message TiledGameFarmRefreshFarmlandReq { + uint32 activity_id = 1; + repeated uint32 cell_id_list = 2; +} + +// CmdID: 8005 +message TiledGameFarmRefreshFarmlandRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + TiledGameFarmRefreshFarmlandRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8006 +message TiledGameFarmEnterMineFloorReq { + uint32 activity_id = 1; + uint32 floor_id = 2; + bool is_teleport = 3; + bool is_teleport_player = 4; + uint32 teleport_position = 5; +} + +// CmdID: 8007 +message TiledGameFarmEnterMineFloorRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MINE_REFRESHED = 2; + NOT_TELEPORTABLE = 3; + NOT_VISITED = 4; + } + + TiledGameFarmEnterMineFloorRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 floor_id = 3; + uint32 tower_id = 4; + bool is_teleport_player = 5; + uint32 teleport_position = 6; +} + +// CmdID: 8008 +message TiledGameFarmSynthesisReq { + uint32 activity_id = 1; + uint32 blueprint_id = 2; + uint32 synthesis_num = 3; +} + +// CmdID: 8009 +message TiledGameFarmSynthesisRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_MATERIAL = 2; + BLUEPRINT_LOCKED = 3; + } + + TiledGameFarmSynthesisRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated TiledGameFarmItemInfo product_list = 3; +} + +message TiledGameFarmItemInfo { + uint32 item_id = 1; + uint32 item_num = 2; +} + +// CmdID: 8010 +message TiledGameFarmTradeReq { + enum TradeType { + TRADE_TYPE_NONE = 0; + TRADE_TYPE_BUY = 1; + TRADE_TYPE_SELL = 2; + } + + uint32 activity_id = 1; + TiledGameFarmTradeReq.TradeType trade_type = 2; + repeated TiledGameFarmItemInfo item_list = 3; +} + +// CmdID: 8011 +message TiledGameFarmTradeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_MATERIAL = 2; + NO_GOLD = 3; + ITEM_LOCKED = 4; + BUY_LIMIT = 5; + MATERIAL_OVERFLOW = 6; + } + + TiledGameFarmTradeRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8012 +message TiledGameFarmBeginFishingNotify { + uint32 activity_id = 1; + uint32 fish_id = 2; + uint32 cell_id = 3; + uint32 continuous_fail_num = 4; +} + +// CmdID: 8013 +message TiledGameFarmEndFishingReq { + uint32 activity_id = 1; + bool is_success = 2; +} + +// CmdID: 8014 +message TiledGameFarmEndFishingRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_FISHING = 2; + } + + TiledGameFarmEndFishingRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8015 +message TiledGameFarmGemIdentifyReq { + uint32 activity_id = 1; + uint32 item_id = 2; + uint32 item_num = 3; +} + +message TiledGameFarmGemIdentifyResult { + uint32 item_id = 1; + uint32 item_num = 2; +} + +// CmdID: 8016 +message TiledGameFarmGemIdentifyRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ITEM_LACK = 2; + GOLD_LACK = 3; + } + + TiledGameFarmGemIdentifyRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated TiledGameFarmGemIdentifyResult result_list = 3; +} + +// CmdID: 8017 +message TiledGameFarmFillShedFoodReq { + uint32 activity_id = 1; + uint32 shed_livestock_id = 2; + uint32 food_num = 3; +} + +// CmdID: 8018 +message TiledGameFarmFillShedFoodRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ITEM_LACK = 2; + FOOD_FULL = 3; + } + + TiledGameFarmFillShedFoodRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 shed_livestock_id = 3; +} + +// CmdID: 8019 +message TiledGameFarmUpgradeFacilityReq { + uint32 activity_id = 1; + uint32 facility_id = 2; + uint32 level = 3; + TiledGameFarmFacilityType facility_type = 5; +} + +// CmdID: 8020 +message TiledGameFarmUpgradeFacilityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ITEM_LACK = 2; + LEVEL_ERROR = 3; + FACILITY_ID_ERROR = 4; + } + + TiledGameFarmUpgradeFacilityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 facility_id = 3; + uint32 level = 4; + TiledGameFarmFacilityType facility_type = 5; +} + +// CmdID: 8021 +message TiledGameFarmRefreshLivestockShedReq { + uint32 activity_id = 1; + uint32 shed_livestock_id = 2; +} + +// CmdID: 8022 +message TiledGameFarmRefreshLivestockShedRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + TiledGameFarmRefreshLivestockShedRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8023 +message TiledGameFarmTameLivestockReq { + uint32 activity_id = 1; + uint32 unique_entity_id = 2; +} + +// CmdID: 8024 +message TiledGameFarmTameLivestockRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + TiledGameFarmTameLivestockRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 unique_entity_id = 3; + bool is_add_domestication = 4; +} + +// CmdID: 8025 +message TiledGameFarmHarvestLivestockReq { + uint32 activity_id = 1; + uint32 unique_entity_id = 2; + bool is_special_harvest = 3; +} + +// CmdID: 8026 +message TiledGameFarmHarvestLivestockRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_PRODUCT = 2; + LACK_STAMINA = 3; + AUTO_TAKE_CARE_LOCKED = 4; + } + + TiledGameFarmHarvestLivestockRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 unique_entity_id = 3; +} + +// CmdID: 8027 +message TiledGameFarmPickItemReq { + uint32 activity_id = 1; + uint32 unique_entity_id = 2; +} + +// CmdID: 8028 +message TiledGameFarmPickItemRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_ENTITY = 2; + ENTITY_TYPE_ERROR = 3; + } + + TiledGameFarmPickItemRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8029 +message TiledGameFarmUseMealVoucherReq { + uint32 activity_id = 1; +} + +// CmdID: 8030 +message TiledGameFarmUseMealVoucherRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + USE_LIMIT = 2; + NO_VOUCHER = 3; + } + + TiledGameFarmUseMealVoucherRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8031 +message TiledGameFarmBuyLivestockReq { + uint32 activity_id = 1; + uint32 livestock_id = 2; + uint32 buy_num = 3; +} + +// CmdID: 8032 +message TiledGameFarmBuyLivestockRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_ENOUGH_GOLD = 2; + NO_SHED = 3; + SHED_FULL = 4; + } + + TiledGameFarmBuyLivestockRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8033 +message TiledGameFarmGetSelectQuestReq { + uint32 activity_id = 1; +} + +// CmdID: 8034 +message TiledGameFarmGetSelectQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHOSEN = 2; + NO_CHOOSE_NUM = 3; + } + + TiledGameFarmGetSelectQuestRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated uint32 quest_id_list = 3; +} + +// CmdID: 8035 +message TiledGameFarmChooseQuestReq { + uint32 activity_id = 1; + uint32 quest_id = 2; +} + +// CmdID: 8036 +message TiledGameFarmChooseQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHOSEN = 2; + CAN_NOT_CHOOSE = 3; + } + + TiledGameFarmChooseQuestRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 quest_id = 3; +} + +// CmdID: 8037 +message TiledGameFarmFinishQuestReq { + uint32 activity_id = 1; + uint32 quest_id = 2; + repeated TiledGameFarmItemInfo commit_item_info_list = 3; +} + +// CmdID: 8038 +message TiledGameFarmFinishQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ITEM_LACK = 2; + ITEM_ERROR = 3; + ITEM_OVER = 4; + } + + TiledGameFarmFinishQuestRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 quest_id = 3; + RewardData reward_data = 4; +} + +// CmdID: 8039 +message TiledGameFarmSuperFishingReq { + uint32 activity_id = 1; +} + +// CmdID: 8040 +message TiledGameFarmSuperFishingRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + USED_TADAY = 2; + SUPER_FISHING_LOCKED = 3; + LACK_STAMINA = 4; + NO_FISHING_ROD = 5; + } + + TiledGameFarmSuperFishingRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +enum CmdTypeTiledgamefarm { + CMD_TYPE_TILEDGAMEFARM_NONE = 0; + CMD_TILED_GAME_FARM_GET_DATA_REQ = 8000; + CMD_TILED_GAME_FARM_GET_DATA_RSP = 8001; + CMD_TILED_GAME_FARM_USE_TOOL_REQ = 8002; + CMD_TILED_GAME_FARM_USE_TOOL_RSP = 8003; + CMD_TILED_GAME_FARM_REFRESH_FARMLAND_REQ = 8004; + CMD_TILED_GAME_FARM_REFRESH_FARMLAND_RSP = 8005; + CMD_TILED_GAME_FARM_ENTER_MINE_FLOOR_REQ = 8006; + CMD_TILED_GAME_FARM_ENTER_MINE_FLOOR_RSP = 8007; + CMD_TILED_GAME_FARM_SYNTHESIS_REQ = 8008; + CMD_TILED_GAME_FARM_SYNTHESIS_RSP = 8009; + CMD_TILED_GAME_FARM_TRADE_REQ = 8010; + CMD_TILED_GAME_FARM_TRADE_RSP = 8011; + CMD_TILED_GAME_FARM_BEGIN_FISHING_NOTIFY = 8012; + CMD_TILED_GAME_FARM_END_FISHING_REQ = 8013; + CMD_TILED_GAME_FARM_END_FISHING_RSP = 8014; + CMD_TILED_GAME_FARM_GEM_IDENTIFY_REQ = 8015; + CMD_TILED_GAME_FARM_GEM_IDENTIFY_RSP = 8016; + CMD_TILED_GAME_FARM_FILL_SHED_FOOD_REQ = 8017; + CMD_TILED_GAME_FARM_FILL_SHED_FOOD_RSP = 8018; + CMD_TILED_GAME_FARM_UPGRADE_FACILITY_REQ = 8019; + CMD_TILED_GAME_FARM_UPGRADE_FACILITY_RSP = 8020; + CMD_TILED_GAME_FARM_REFRESH_LIVESTOCK_SHED_REQ = 8021; + CMD_TILED_GAME_FARM_REFRESH_LIVESTOCK_SHED_RSP = 8022; + CMD_TILED_GAME_FARM_TAME_LIVESTOCK_REQ = 8023; + CMD_TILED_GAME_FARM_TAME_LIVESTOCK_RSP = 8024; + CMD_TILED_GAME_FARM_HARVEST_LIVESTOCK_REQ = 8025; + CMD_TILED_GAME_FARM_HARVEST_LIVESTOCK_RSP = 8026; + CMD_TILED_GAME_FARM_PICK_ITEM_REQ = 8027; + CMD_TILED_GAME_FARM_PICK_ITEM_RSP = 8028; + CMD_TILED_GAME_FARM_USE_MEAL_VOUCHER_REQ = 8029; + CMD_TILED_GAME_FARM_USE_MEAL_VOUCHER_RSP = 8030; + CMD_TILED_GAME_FARM_BUY_LIVESTOCK_REQ = 8031; + CMD_TILED_GAME_FARM_BUY_LIVESTOCK_RSP = 8032; + CMD_TILED_GAME_FARM_GET_SELECT_QUEST_REQ = 8033; + CMD_TILED_GAME_FARM_GET_SELECT_QUEST_RSP = 8034; + CMD_TILED_GAME_FARM_CHOOSE_QUEST_REQ = 8035; + CMD_TILED_GAME_FARM_CHOOSE_QUEST_RSP = 8036; + CMD_TILED_GAME_FARM_FINISH_QUEST_REQ = 8037; + CMD_TILED_GAME_FARM_FINISH_QUEST_RSP = 8038; + CMD_TILED_GAME_FARM_SUPER_FISHING_REQ = 8039; + CMD_TILED_GAME_FARM_SUPER_FISHING_RSP = 8040; +} + +enum TiledGameFarmToolType { + TILED_GAME_FARM_TOOL_TYPE_NONE = 0; + TILED_GAME_FARM_TOOL_TYPE_HAMMER = 1; + TILED_GAME_FARM_TOOL_TYPE_HOE = 2; + TILED_GAME_FARM_TOOL_TYPE_WATERING_CAN = 3; + TILED_GAME_FARM_TOOL_TYPE_SICKLE = 4; + TILED_GAME_FARM_TOOL_TYPE_SEED = 5; + TILED_GAME_FARM_TOOL_TYPE_FISHING_ROD = 6; + TILED_GAME_FARM_TOOL_TYPE_GLOVE = 7; +} + +enum TiledGameFarmFacilityType { + TILED_GAME_FARM_FACILITY_TYPE_NONE = 0; + TILED_GAME_FARM_FACILITY_TYPE_LIVESTOCK_SHED = 1; + TILED_GAME_FARM_FACILITY_TYPE_RESTAURANT = 2; +} + +enum TiledGameFarmPrivilegeType { + TILED_GAME_FARM_PRIVILEGE_TYPE_NONE = 0; + TILED_GAME_FARM_PRIVILEGE_TYPE_STARTUP_CAPITAL = 1; + TILED_GAME_FARM_PRIVILEGE_TYPE_SHOP_ITEM_UNLOCK = 2; + TILED_GAME_FARM_PRIVILEGE_TYPE_TELEPORT_UNLOCK = 3; + TILED_GAME_FARM_PRIVILEGE_TYPE_SELL_MULTIFIER = 4; + TILED_GAME_FARM_PRIVILEGE_TYPE_MAX_STAMINA_BOOST = 5; + TILED_GAME_FARM_PRIVILEGE_TYPE_LEVEL_UP_RESTAURANT = 6; + TILED_GAME_FARM_PRIVILEGE_TYPE_LIVESTOCK_AUTO_TAKE_CARE = 7; + TILED_GAME_FARM_PRIVILEGE_TYPE_SUPER_FISHING = 8; + TILED_GAME_FARM_PRIVILEGE_TYPE_UNLOCK_AND_UPGRADE_SEED = 9; +} + +// CmdID: 8300 +message TiledGameMonsterFarmGetDataReq { + uint32 activity_id = 1; +} + +message TiledGameMonsterFarmFarmland { + uint32 cell_id = 1; + uint32 mature_time = 2; +} + +message TiledGameMonsterFarmFarm { + repeated TiledGameMonsterFarmFarmland farmland_list = 1; + repeated uint32 matured_farmland_id_list = 2; +} + +message TiledGameMonsterFarmMine { + uint32 visited_max_floor = 1; + uint32 cur_floor = 2; +} + +message TiledGameMonsterFarmFishingFailStatus { + uint32 fish_id = 1; + uint32 continuous_fail_num = 2; +} + +message TiledGameMonsterFarmFishingSpot { + uint32 spot_cell_id = 1; + uint32 left_fish_num = 2; +} + +message TiledGameMonsterFarmFishingGround { + uint32 cur_fishing_cell_id = 1; + uint32 cur_fish_id = 2; + repeated TiledGameMonsterFarmFishingFailStatus fail_status_list = 3; + repeated TiledGameMonsterFarmFishingSpot fishing_spot_list = 5; +} + +message TiledGameMonsterFarmRestaurant { + uint32 level = 1; + uint32 today_use_meal_voucher_num = 2; +} + +message TiledGameMonsterFarmQuestBoard { + bool is_quest_chosen_today = 1; + uint32 cur_quest_id = 2; + repeated uint32 finished_extra_quest_id_list = 3; +} + +message TiledGameMonsterFarmItemNum { + uint32 item_id = 1; + uint32 item_num = 2; +} + +message TiledGameMonsterFarmMonsterAbility { + uint32 ability_type = 1; + uint32 ability_num = 2; +} + +message TiledGameMonsterFarmMonster { + uint32 unique_id = 1; + uint32 monster_id = 2; + uint32 mood = 3; + uint32 description_id = 4; + uint32 name_id = 5; + uint32 generation_id = 6; + uint32 work_building_type = 7; + repeated TiledGameMonsterFarmMonsterAbility ability_list = 8; + bool is_egg = 9; + bool is_exceed_limit_monster = 10; + uint32 work_produce_line_id = 11; + uint32 rare_id = 12; + bool is_mutated = 13; + uint32 total_work_time = 14; + bool is_dropped = 15; + uint32 recover_all_mood_time = 16; + uint32 cost_all_mood_time = 17; + uint32 egg_rare_id = 18; + uint32 left_breeding_times = 19; +} + +message TiledGameMonsterFarmProduceLine { + uint32 id = 1; + uint32 recipe_id = 2; + uint32 breeding_effect_item = 3; + uint32 left_produce_num = 4; + repeated TiledGameMonsterFarmItemNum produced_item_list = 5; + repeated uint32 monster_id_list = 7; + uint32 accumulate_work_time = 8; + TiledGameMonsterFarmMonster breeding_monster = 9; +} + +message TiledGameMonsterFarmBuilding { + uint32 building_id = 1; + repeated TiledGameMonsterFarmProduceLine produce_line_list = 3; +} + +message TiledGameMonsterFarmMonsterRecord { + uint32 monster_type = 1; + uint32 max_rare_id = 2; + repeated TiledGameMonsterFarmMonsterAbility max_ability_list = 3; +} + +message TiledGameMonsterFarmMonsterMgr { + repeated TiledGameMonsterFarmMonster farm_monster_list = 1; + repeated TiledGameMonsterFarmMonsterRecord monster_max_record_list = 3; + repeated uint32 monster_id_list = 4; +} + +message TiledGameMonsterFarmBusinessReport { + uint32 acquired_gold_num = 1; + repeated TiledGameMonsterFarmItemNum sold_item_list = 2; + uint32 star_monster_uid = 3; + uint32 model_worker_monster_uid = 4; + uint32 accumulate_operating_days = 5; +} + +// CmdID: 8301 +message TiledGameMonsterFarmGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + TiledGameMonsterFarmGetDataRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 activity_stamina = 3; + TiledGameMonsterFarmFarm farm_farm = 4; + TiledGameMonsterFarmMine farm_mine = 5; + TiledGameMonsterFarmFishingGround farm_fishing_ground = 6; + uint32 max_stamina = 7; + uint32 next_recover_stamina_time = 8; + uint32 cur_tower_id = 10; + TiledGameMonsterFarmQuestBoard farm_quest_board = 11; + repeated TiledGameMonsterFarmItemNum item_buy_num_list = 12; + uint32 last_refresh_time = 14; + repeated TiledGameMonsterFarmBuilding farm_building_list = 16; + TiledGameMonsterFarmMonsterMgr farm_monster_mgr = 18; + repeated uint32 unlocked_monster_type_list = 19; + repeated uint32 finished_privilege_list = 20; + repeated uint32 get_monster_tool_type_list = 21; + uint32 level = 22; + repeated uint32 unlock_gallery_id_list = 23; +} + +// CmdID: 8304 +message TiledGameMonsterFarmUseToolReq { + uint32 activity_id = 1; + uint32 item_id = 2; + repeated uint32 cell_id_list = 3; +} + +message TiledGameMonsterFarmPretenderMineCell { + uint32 cell_id = 1; + uint32 decoration_id = 2; +} + +// CmdID: 8305 +message TiledGameMonsterFarmUseToolRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LACK_STAMINA = 2; + RANGE_ERROR = 3; + ITEM_ERROR = 4; + LACK_ITEM = 5; + MONSTER_FULL = 6; + } + + TiledGameMonsterFarmUseToolRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 item_id = 3; + repeated uint32 failed_cell_id_list = 4; + repeated TiledGameMonsterFarmPretenderMineCell pretender_mine_cell_list = 5; +} + +// CmdID: 8306 +message TiledGameMonsterFarmRefreshFarmlandReq { + uint32 activity_id = 1; + repeated uint32 cell_id_list = 2; +} + +// CmdID: 8307 +message TiledGameMonsterFarmRefreshFarmlandRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + TiledGameMonsterFarmRefreshFarmlandRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8308 +message TiledGameMonsterFarmEnterMineFloorReq { + uint32 activity_id = 1; + uint32 floor_id = 2; + bool is_teleport = 3; + bool is_teleport_player = 4; + uint32 teleport_position = 5; +} + +// CmdID: 8309 +message TiledGameMonsterFarmEnterMineFloorRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MINE_REFRESHED = 2; + NOT_TELEPORTABLE = 3; + NOT_VISITED = 4; + } + + TiledGameMonsterFarmEnterMineFloorRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 floor_id = 3; + uint32 tower_id = 4; + bool is_teleport_player = 5; + uint32 teleport_position = 6; +} + +message TiledGameMonsterFarmItemInfo { + uint32 item_id = 1; + uint32 item_num = 2; +} + +// CmdID: 8310 +message TiledGameMonsterFarmTradeReq { + enum TradeType { + TRADE_TYPE_NONE = 0; + TRADE_TYPE_BUY = 1; + TRADE_TYPE_SELL = 2; + } + + uint32 activity_id = 1; + TiledGameMonsterFarmTradeReq.TradeType trade_type = 2; + repeated TiledGameMonsterFarmItemInfo item_list = 3; +} + +// CmdID: 8311 +message TiledGameMonsterFarmTradeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_MATERIAL = 2; + NO_GOLD = 3; + ITEM_LOCKED = 4; + BUY_LIMIT = 5; + MATERIAL_OVERFLOW = 6; + } + + TiledGameMonsterFarmTradeRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8312 +message TiledGameMonsterFarmBeginFishingNotify { + uint32 activity_id = 1; + uint32 fish_id = 2; + uint32 cell_id = 3; + uint32 continuous_fail_num = 4; +} + +// CmdID: 8313 +message TiledGameMonsterFarmEndFishingReq { + uint32 activity_id = 1; + bool is_success = 2; +} + +// CmdID: 8314 +message TiledGameMonsterFarmEndFishingRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_FISHING = 2; + } + + TiledGameMonsterFarmEndFishingRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8315 +message TiledGameMonsterFarmGetQuestReq { + uint32 activity_id = 1; +} + +// CmdID: 8316 +message TiledGameMonsterFarmGetQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHOSEN = 2; + NO_CHOOSE_NUM = 3; + } + + TiledGameMonsterFarmGetQuestRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated uint32 quest_id_list = 3; +} + +// CmdID: 8317 +message TiledGameMonsterFarmChooseQuestReq { + uint32 activity_id = 1; + uint32 quest_id = 2; +} + +// CmdID: 8318 +message TiledGameMonsterFarmChooseQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CHOSEN = 2; + CAN_NOT_CHOOSE = 3; + } + + TiledGameMonsterFarmChooseQuestRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 quest_id = 3; +} + +// CmdID: 8319 +message TiledGameMonsterFarmFinishQuestReq { + uint32 activity_id = 1; + uint32 quest_id = 2; + repeated TiledGameMonsterFarmItemInfo commit_item_info_list = 3; +} + +// CmdID: 8320 +message TiledGameMonsterFarmFinishQuestRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ITEM_LACK = 2; + ITEM_ERROR = 3; + ITEM_OVER = 4; + } + + TiledGameMonsterFarmFinishQuestRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 quest_id = 3; + RewardData reward_data = 4; +} + +// CmdID: 8321 +message TiledGameMonsterFarmUseMealVoucherReq { + uint32 activity_id = 1; +} + +// CmdID: 8322 +message TiledGameMonsterFarmUseMealVoucherRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + USE_LIMIT = 2; + NO_VOUCHER = 3; + } + + TiledGameMonsterFarmUseMealVoucherRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8323 +message TiledGameMonsterFarmPickItemReq { + uint32 activity_id = 1; + uint32 unique_entity_id = 2; +} + +// CmdID: 8324 +message TiledGameMonsterFarmPickItemRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_ENTITY = 2; + ENTITY_TYPE_ERROR = 3; + } + + TiledGameMonsterFarmPickItemRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8325 +message TiledGameMonsterFarmLevelUpReq { + uint32 activity_id = 1; +} + +// CmdID: 8326 +message TiledGameMonsterFarmLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MISSION_NOT_FINISH = 2; + } + + TiledGameMonsterFarmLevelUpRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8327 +message TiledGameMonsterFarmUpgradeBuildingReq { + uint32 activity_id = 1; + uint32 building_id = 2; +} + +// CmdID: 8328 +message TiledGameMonsterFarmUpgradeBuildingRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + BUILDING_NOT_EXIST = 2; + MISSION_NOT_FINISH = 3; + LACK_ITEM = 4; + } + + TiledGameMonsterFarmUpgradeBuildingRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 old_building_id = 3; + uint32 new_building_id = 4; +} + +// CmdID: 8329 +message TiledGameMonsterFarmManipulateMonsterReq { + uint32 activity_id = 1; + repeated uint32 monster_id_list = 2; + uint32 building_id = 3; + uint32 produce_line_id = 4; + uint32 breeding_effect_item = 6; +} + +// CmdID: 8330 +message TiledGameMonsterFarmManipulateMonsterRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MONSTER_NOT_EXIST = 2; + ITEM_LACK = 3; + MONSTER_CANT_WORK = 4; + MONSTER_CANT_BREEDING = 5; + } + + TiledGameMonsterFarmManipulateMonsterRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8331 +message TiledGameMonsterFarmRefreshBuildingReq { + uint32 activity_id = 1; + uint32 building_id = 2; + uint32 produce_line_id = 3; +} + +// CmdID: 8332 +message TiledGameMonsterFarmRefreshBuildingRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + TiledGameMonsterFarmRefreshBuildingRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8333 +message TiledGameMonsterFarmIncubateReq { + uint32 activity_id = 1; + uint32 monster_id = 2; +} + +// CmdID: 8334 +message TiledGameMonsterFarmIncubateRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ITEM_NOT_EXIST = 2; + LACK_STAMINA = 3; + MONSTER_NOT_EXIST = 4; + } + + TiledGameMonsterFarmIncubateRsp.Retcode retcode = 1; + uint32 activity_id = 2; + TiledGameMonsterFarmMonster monster = 3; +} + +// CmdID: 8335 +message TiledGameMonsterFarmSetProduceLineReq { + uint32 activity_id = 1; + uint32 building_id = 2; + uint32 produce_line_id = 3; + uint32 recipe_id = 4; + uint32 target_num = 5; +} + +// CmdID: 8336 +message TiledGameMonsterFarmSetProduceLineRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + BUILDING_NOT_EXIST = 2; + } + + TiledGameMonsterFarmSetProduceLineRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8337 +message TiledGameMonsterFarmDropMonsterReq { + uint32 activity_id = 1; + repeated uint32 monster_id_list = 2; +} + +// CmdID: 8338 +message TiledGameMonsterFarmDropMonsterRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MONSTER_NOT_EXIST = 2; + MONSTER_IN_WORKING = 3; + } + + TiledGameMonsterFarmDropMonsterRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated uint32 drop_monster_id_list = 3; +} + +message TiledGameMonsterFarmTakeBuildingData { + uint32 building_id = 1; + repeated uint32 produce_line_id_list = 2; +} + +// CmdID: 8339 +message TiledGameMonsterFarmTakeBuildingProductReq { + uint32 activity_id = 1; + repeated TiledGameMonsterFarmTakeBuildingData take_building_list = 5; +} + +// CmdID: 8340 +message TiledGameMonsterFarmTakeBuildingProductRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_FINISH = 2; + MONSTER_FULL = 3; + } + + TiledGameMonsterFarmTakeBuildingProductRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated uint32 taken_monster_list = 3; +} + +// CmdID: 8341 +message TiledGameMonsterFarmSetBuildingProduceTargetReq { + uint32 activity_id = 1; + uint32 building_id = 2; + uint32 produce_line_id = 3; + uint32 recipe_id = 4; + uint32 num = 6; +} + +// CmdID: 8342 +message TiledGameMonsterFarmSetBuildingProduceTargetRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + BUILDING_NOT_EXIST = 2; + BUILDING_TYPE_ERROR = 3; + PRODUCE_LINE_INVALID = 4; + RECIPE_INVALID = 5; + ITEM_LACK = 6; + } + + TiledGameMonsterFarmSetBuildingProduceTargetRsp.Retcode retcode = 1; + uint32 activity_id = 2; +} + +// CmdID: 8343 +message TiledGameMonsterFarmGetBusinessReportReq { + uint32 activity_id = 1; +} + +// CmdID: 8344 +message TiledGameMonsterFarmGetBusinessReportRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + TiledGameMonsterFarmGetBusinessReportRsp.Retcode retcode = 1; + uint32 activity_id = 2; + TiledGameMonsterFarmBusinessReport business_report = 3; +} + +// CmdID: 8345 +message TiledGameMonsterFarmGetRankReq { + uint32 activity_id = 1; + uint32 rank_type = 2; +} + +// CmdID: 8346 +message TiledGameMonsterFarmGetRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + TYPE_INVALID = 3; + } + + TiledGameMonsterFarmGetRankRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 rank_type = 3; + uint32 rank = 4; + uint32 rank_percent = 5; + RankShowData rank_data = 6; +} + +enum CmdTypeTiledgamemonsterfarm { + CMD_TYPE_TILEDGAMEMONSTERFARM_NONE = 0; + CMD_TILED_GAME_MONSTER_FARM_GET_DATA_REQ = 8300; + CMD_TILED_GAME_MONSTER_FARM_GET_DATA_RSP = 8301; + CMD_TILED_GAME_MONSTER_FARM_USE_TOOL_REQ = 8304; + CMD_TILED_GAME_MONSTER_FARM_USE_TOOL_RSP = 8305; + CMD_TILED_GAME_MONSTER_FARM_REFRESH_FARMLAND_REQ = 8306; + CMD_TILED_GAME_MONSTER_FARM_REFRESH_FARMLAND_RSP = 8307; + CMD_TILED_GAME_MONSTER_FARM_ENTER_MINE_FLOOR_REQ = 8308; + CMD_TILED_GAME_MONSTER_FARM_ENTER_MINE_FLOOR_RSP = 8309; + CMD_TILED_GAME_MONSTER_FARM_TRADE_REQ = 8310; + CMD_TILED_GAME_MONSTER_FARM_TRADE_RSP = 8311; + CMD_TILED_GAME_MONSTER_FARM_BEGIN_FISHING_NOTIFY = 8312; + CMD_TILED_GAME_MONSTER_FARM_END_FISHING_REQ = 8313; + CMD_TILED_GAME_MONSTER_FARM_END_FISHING_RSP = 8314; + CMD_TILED_GAME_MONSTER_FARM_GET_QUEST_REQ = 8315; + CMD_TILED_GAME_MONSTER_FARM_GET_QUEST_RSP = 8316; + CMD_TILED_GAME_MONSTER_FARM_CHOOSE_QUEST_REQ = 8317; + CMD_TILED_GAME_MONSTER_FARM_CHOOSE_QUEST_RSP = 8318; + CMD_TILED_GAME_MONSTER_FARM_FINISH_QUEST_REQ = 8319; + CMD_TILED_GAME_MONSTER_FARM_FINISH_QUEST_RSP = 8320; + CMD_TILED_GAME_MONSTER_FARM_USE_MEAL_VOUCHER_REQ = 8321; + CMD_TILED_GAME_MONSTER_FARM_USE_MEAL_VOUCHER_RSP = 8322; + CMD_TILED_GAME_MONSTER_FARM_PICK_ITEM_REQ = 8323; + CMD_TILED_GAME_MONSTER_FARM_PICK_ITEM_RSP = 8324; + CMD_TILED_GAME_MONSTER_FARM_LEVEL_UP_REQ = 8325; + CMD_TILED_GAME_MONSTER_FARM_LEVEL_UP_RSP = 8326; + CMD_TILED_GAME_MONSTER_FARM_UPGRADE_BUILDING_REQ = 8327; + CMD_TILED_GAME_MONSTER_FARM_UPGRADE_BUILDING_RSP = 8328; + CMD_TILED_GAME_MONSTER_FARM_MANIPULATE_MONSTER_REQ = 8329; + CMD_TILED_GAME_MONSTER_FARM_MANIPULATE_MONSTER_RSP = 8330; + CMD_TILED_GAME_MONSTER_FARM_REFRESH_BUILDING_REQ = 8331; + CMD_TILED_GAME_MONSTER_FARM_REFRESH_BUILDING_RSP = 8332; + CMD_TILED_GAME_MONSTER_FARM_INCUBATE_REQ = 8333; + CMD_TILED_GAME_MONSTER_FARM_INCUBATE_RSP = 8334; + CMD_TILED_GAME_MONSTER_FARM_SET_PRODUCE_LINE_REQ = 8335; + CMD_TILED_GAME_MONSTER_FARM_SET_PRODUCE_LINE_RSP = 8336; + CMD_TILED_GAME_MONSTER_FARM_DROP_MONSTER_REQ = 8337; + CMD_TILED_GAME_MONSTER_FARM_DROP_MONSTER_RSP = 8338; + CMD_TILED_GAME_MONSTER_FARM_TAKE_BUILDING_PRODUCT_REQ = 8339; + CMD_TILED_GAME_MONSTER_FARM_TAKE_BUILDING_PRODUCT_RSP = 8340; + CMD_TILED_GAME_MONSTER_FARM_SET_BUILDING_PRODUCE_TARGET_REQ = 8341; + CMD_TILED_GAME_MONSTER_FARM_SET_BUILDING_PRODUCE_TARGET_RSP = 8342; + CMD_TILED_GAME_MONSTER_FARM_GET_BUSINESS_REPORT_REQ = 8343; + CMD_TILED_GAME_MONSTER_FARM_GET_BUSINESS_REPORT_RSP = 8344; + CMD_TILED_GAME_MONSTER_FARM_GET_RANK_REQ = 8345; + CMD_TILED_GAME_MONSTER_FARM_GET_RANK_RSP = 8346; +} + +enum TiledGameMonsterFarmPrivilegeType { + TILED_GAME_MONSTER_FARM_PRIVILEGE_TYPE_NONE = 0; + TILED_GAME_MONSTER_FARM_PRIVILEGE_TYPE_STARTUP_CAPITAL = 1; + TILED_GAME_MONSTER_FARM_PRIVILEGE_TYPE_REDUCE_BREAK_EGG_STAMINA = 2; + TILED_GAME_MONSTER_FARM_PRIVILEGE_TYPE_REDUCE_COST_MODE_RATE = 3; + TILED_GAME_MONSTER_FARM_PRIVILEGE_TYPE_ADD_MONSTER_POOL = 4; + TILED_GAME_MONSTER_FARM_PRIVILEGE_TYPE_UNLOCK_QUICK_MANIPULATE_MONSTER = 5; + TILED_GAME_MONSTER_FARM_PRIVILEGE_TYPE_UNLOCK_QUICK_USE_TOOL = 6; +} + +enum TiledGameMonsterFarmRankType { + TILED_GAME_MONSTER_FARM_RANK_TYPE_NONE = 0; + TILED_GAME_MONSTER_FARM_RANK_TYPE_TOTAL_ACQUIRED_GOLD_NUM = 1; + TILED_GAME_MONSTER_FARM_RANK_TYPE_TOTAL_GET_MONSTER_ABILITY_NUM = 2; +} + +enum TiledGameMonsterFarmToolType { + TILED_GAME_MONSTER_FARM_TOOL_TYPE_NONE = 0; + TILED_GAME_MONSTER_FARM_TOOL_TYPE_HAMMER = 1; + TILED_GAME_MONSTER_FARM_TOOL_TYPE_HOE = 2; + TILED_GAME_MONSTER_FARM_TOOL_TYPE_WATERING_CAN = 3; + TILED_GAME_MONSTER_FARM_TOOL_TYPE_SICKLE = 4; + TILED_GAME_MONSTER_FARM_TOOL_TYPE_SEED = 5; + TILED_GAME_MONSTER_FARM_TOOL_TYPE_FISHING_ROD = 6; + TILED_GAME_MONSTER_FARM_TOOL_TYPE_GLOVE = 7; +} + +enum TiledGameMonsterFarmItemType { + TILED_GAME_MONSTER_FARM_ITEM_TYPE_NONE = 0; + TILED_GAME_MONSTER_FARM_ITEM_TYPE_PRODUCT = 1; + TILED_GAME_MONSTER_FARM_ITEM_TYPE_RAW_MATERIAL = 2; + TILED_GAME_MONSTER_FARM_ITEM_TYPE_CROP = 3; + TILED_GAME_MONSTER_FARM_ITEM_TYPE_TOOL = 4; + TILED_GAME_MONSTER_FARM_ITEM_TYPE_MONSTER = 5; +} + +enum TiledGameMonsterFarmBuildingType { + TILED_GAME_MONSTER_FARM_BUILDING_TYPE_NONE = 0; + TILED_GAME_MONSTER_FARM_BUILDING_TYPE_CITY_HALL = 1; + TILED_GAME_MONSTER_FARM_BUILDING_TYPE_AGRICULTURAL_FACILITY = 2; + TILED_GAME_MONSTER_FARM_BUILDING_TYPE_MINING_FACILITY = 3; + TILED_GAME_MONSTER_FARM_BUILDING_TYPE_DORMITORY = 4; + TILED_GAME_MONSTER_FARM_BUILDING_TYPE_PROCESSING_FACTORY = 5; + TILED_GAME_MONSTER_FARM_BUILDING_TYPE_LAB = 6; + TILED_GAME_MONSTER_FARM_BUILDING_TYPE_FISHERY = 7; + TILED_GAME_MONSTER_FARM_BUILDING_TYPE_LIVESTOCK_SHED = 8; +} + +enum TiledGameMonsterFarmSeedType { + TILED_GAME_MONSTER_FARM_SEED_TYPE_NONE = 0; + TILED_GAME_MONSTER_FARM_SEED_TYPE_NORMAL = 1; + TILED_GAME_MONSTER_FARM_SEED_TYPE_MONSTER = 2; +} + +enum TiledGameMonsterFarmAbilityType { + TILED_GAME_MONSTER_FARM_ABILITY_TYPE_NONE = 0; + TILED_GAME_MONSTER_FARM_ABILITY_TYPE_ONE = 1; + TILED_GAME_MONSTER_FARM_ABILITY_TYPE_TWO = 2; + TILED_GAME_MONSTER_FARM_ABILITY_TYPE_THREE = 3; + TILED_GAME_MONSTER_FARM_ABILITY_TYPE_FOUR = 4; +} + +enum TiledGameMonsterFarmMineralType { + TILED_GAME_MONSTER_FARM_MINERAL_TYPE_NONE = 0; + TILED_GAME_MONSTER_FARM_MINERAL_TYPE_NORMAL = 1; + TILED_GAME_MONSTER_FARM_MINERAL_TYPE_MONSTER = 2; + TILED_GAME_MONSTER_FARM_MINERAL_TYPE_PRETENDER = 3; +} + +enum TiledGameMonsterFarmNameType { + TILED_GAME_MONSTER_FARM_NAME_TYPE_NONE = 0; + TILED_GAME_MONSTER_FARM_NAME_TYPE_DESCRIBE = 1; + TILED_GAME_MONSTER_FARM_NAME_TYPE_NAME = 2; +} + +enum TiledGameMonsterFarmNameConditionType { + TILED_GAME_MONSTER_FARM_NAME_CONDITION_TYPE_NONE = 0; + TILED_GAME_MONSTER_FARM_NAME_CONDITION_TYPE_MAX_ABILITY = 1; + TILED_GAME_MONSTER_FARM_NAME_CONDITION_TYPE_ABILITY_RANGE = 2; + TILED_GAME_MONSTER_FARM_NAME_CONDITION_TYPE_ABILITY_RARE = 3; + TILED_GAME_MONSTER_FARM_NAME_CONDITION_TYPE_ABILITY_TYPEID = 4; + TILED_GAME_MONSTER_FARM_NAME_CONDITION_TYPE_ABILITY_DEFAULT = 5; +} + +message TiledGamePrpgCard { + uint32 card_id = 1; + uint32 level = 2; +} + +message TiledGamePrpgDeck { + uint32 deck_id = 1; + uint32 level = 2; + uint32 exp = 3; +} + +message TiledGamePrpgBattleMember { + uint32 uid = 1; + string nickname = 2; + uint32 custom_head_id = 3; + uint32 frame_id = 4; + uint32 card_back = 5; + repeated TiledGamePrpgCard card_list = 6; + uint32 rank_score = 7; + uint32 hidden_score = 8; + bool is_abandoned = 9; + bool is_can_match_robot = 10; +} + +message TiledGamePrpgHands { + TiledGamePrpgHandType type = 1; + repeated uint32 hands_list = 2; +} + +message TiledGamePrpgBattleSettleInfo { + uint32 win_rounds = 1; + uint32 lose_rounds = 2; + bool is_abandon = 3; + uint32 max_round_score = 4; + uint32 max_round_score_field_id = 5; + TiledGamePrpgHands max_round_score_hands = 6; + TiledGamePrpgHands best_hands = 7; + TiledGamePrpgPvpSettleSituationType situation = 8; +} + +message TiledGamePrpgBattleMemberSettleInfo { + uint32 uid = 1; + string nickname = 2; + uint32 cur_rank_score = 3; + bool is_abandoned = 4; + TiledGamePrpgBattleSettleInfo settle_info = 6; +} + +message TiledGamePrpgBestInfo { + uint32 pvp_max_field_score = 1; + repeated uint32 pvp_max_score_card_list = 2; + uint32 pvp_win_times = 3; + uint32 max_rank_score = 4; + uint32 pvp_max_score_field_id = 5; +} + +// CmdID: 8450 +message TiledGamePrpgGetDataReq { +} + +// CmdID: 8451 +message TiledGamePrpgGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + TiledGamePrpgGetDataRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 rank_score = 3; + uint32 pvp_card_back = 4; + uint32 explore_level = 5; + uint32 explore_exp = 6; + repeated uint32 unlock_skill_list = 7; + repeated TiledGamePrpgCard card_list = 8; + repeated TiledGamePrpgDeck deck_list = 9; + repeated uint32 passed_room_id_list = 10; + uint32 last_take_explore_reward_level = 11; + TiledGamePrpgBestInfo best_info = 12; + uint32 daily_drop_num = 13; +} + +// CmdID: 8452 +message TiledGamePrpgPvpBattleBeginNotify { + uint32 lobby_id = 1; + uint32 battle_id = 2; + string fightserver_ip_v4 = 3; + string fightserver_ip_v6 = 4; + uint32 fightserver_port = 5; + uint32 activity_id = 6; + bool is_reconnect = 7; +} + +// CmdID: 8453 +message TiledGamePrpgPvpBattleSettleNotify { + uint32 activity_id = 1; + uint32 lobby_id = 2; + TiledGamePrpgBattleMemberSettleInfo settle_info = 3; + uint32 rank_score_before = 4; + uint32 rank_score_after = 5; + string transaction_str = 6; +} + +// CmdID: 8454 +message TiledGamePrpgPvpEnterBattleReq { + uint32 battle_id = 1; +} + +// CmdID: 8455 +message TiledGamePrpgPvpEnterBattleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_BATTLE = 2; + } + + TiledGamePrpgPvpEnterBattleRsp.Retcode retcode = 1; + uint32 battle_id = 2; + repeated TiledGamePrpgBattleMember member_list = 3; +} + +// CmdID: 8456 +message TiledGamePrpgPvpAbandonBattleReq { + uint32 battle_id = 1; +} + +// CmdID: 8457 +message TiledGamePrpgPvpAbandonBattleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_BATTLE = 2; + } + + TiledGamePrpgPvpAbandonBattleRsp.Retcode retcode = 1; + uint32 battle_id = 2; +} + +// CmdID: 8458 +message TiledGamePrpgPvpGetBattleInfoReq { +} + +message TiledGamePrpgPvpBattleFieldPlayerInfo { + uint32 uid = 1; + repeated uint32 card_list = 2; + TiledGamePrpgHandType hand_type = 3; + repeated uint32 hand_type_card_list = 4; + uint32 type_score = 5; + uint32 point_score = 6; + uint32 field_score = 7; +} + +message TiledGamePrpgPvpBattleField { + uint32 id = 1; + repeated uint32 public_card_list = 2; + repeated TiledGamePrpgPvpBattleFieldPlayerInfo player_card_list = 3; +} + +message TiledGamePrpgPvpBattle { + enum RoundState { + ROUND_STATE_NONE = 0; + ROUND_BEGIN = 1; + IN_ROUND = 2; + ROUND_END = 3; + } + + uint32 battle_id = 1; + uint32 cur_round = 2; + TiledGamePrpgPvpBattle.RoundState round_state = 3; + repeated TiledGamePrpgBattleMember member_list = 4; + repeated TiledGamePrpgPvpBattleField field_list = 5; + uint32 remain_exchange_times = 6; + uint32 remain_put_card_times = 7; + repeated uint32 hand_card_list = 8; + bool is_auto_play = 9; + repeated uint32 cur_round_used_card_list = 10; +} + +// CmdID: 8459 +message TiledGamePrpgPvpGetBattleInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_BATTLE = 2; + } + + TiledGamePrpgPvpGetBattleInfoRsp.Retcode retcode = 1; + TiledGamePrpgPvpBattle battle_info = 2; +} + +// CmdID: 8460 +message TiledGamePrpgPvpMoveCardReq { + enum MoveType { + MOVE_TYPE_NONE = 0; + MOVE_HAND_TO_FIELD = 1; + MOVE_FIELD_TO_HAND = 2; + MOVE_FIELD_TO_FIELD = 3; + MOVE_SWAP_TWO_CARD = 4; + } + + uint32 battle_id = 1; + uint32 card_id = 2; + TiledGamePrpgPvpMoveCardReq.MoveType move_type = 3; + uint32 from_id = 4; + uint32 target_id = 5; +} + +// CmdID: 8461 +message TiledGamePrpgPvpMoveCardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_BATTLE = 2; + CARD_ID_ERROR = 3; + RESTRICTED = 4; + PUT_TIMES_LIMIT = 5; + HAND_CARD_NUM_LIMIT = 6; + } + + TiledGamePrpgPvpMoveCardRsp.Retcode retcode = 1; + uint32 battle_id = 2; +} + +// CmdID: 8462 +message TiledGamePrpgPvpExchangeCardReq { + uint32 battle_id = 1; + uint32 card_id = 2; +} + +// CmdID: 8463 +message TiledGamePrpgPvpExchangeCardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_BATTLE = 2; + CARD_ID_ERROR = 3; + EXCHANGE_TIMES_LIMIT = 4; + } + + TiledGamePrpgPvpExchangeCardRsp.Retcode retcode = 1; + uint32 battle_id = 2; + uint32 new_card_id = 3; +} + +// CmdID: 8464 +message TiledGamePrpgPvpEndRoundReq { + uint32 battle_id = 1; + uint32 cur_round = 2; +} + +// CmdID: 8465 +message TiledGamePrpgPvpEndRoundRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_BATTLE = 2; + ROUND_MISMATCH = 3; + } + + TiledGamePrpgPvpEndRoundRsp.Retcode retcode = 1; + uint32 battle_id = 2; +} + +// CmdID: 8466 +message TiledGamePrpgPvpSyncRoundNotify { + uint32 battle_id = 1; + uint32 cur_round = 2; + uint32 settle_round = 3; + uint32 cur_time = 4; + uint32 cur_round_end_time = 5; +} + +// CmdID: 8467 +message TiledGamePrpgPvpBattleEndNotify { + uint32 battle_id = 1; +} + +// CmdID: 8468 +message TiledGamePrpgPvpSetCardBackReq { + uint32 activity_id = 1; + uint32 card_back_id = 2; +} + +// CmdID: 8469 +message TiledGamePrpgPvpSetCardBackRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + INVALID_CARD_BACK_ID = 3; + } + + TiledGamePrpgPvpSetCardBackRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 card_back_id = 3; +} + +// CmdID: 8470 +message TiledGamePrpgUnlockSkillReq { + uint32 activity_id = 1; + uint32 skill_id = 2; +} + +// CmdID: 8471 +message TiledGamePrpgUnlockSkillRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + SKILL_ERROR = 3; + PRE_SKILL_REQUIRED = 4; + MATERIAL_LACK = 5; + } + + TiledGamePrpgUnlockSkillRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 skill_id = 3; +} + +// CmdID: 8472 +message TiledGamePrpgLevelUpCardReq { + uint32 activity_id = 1; + uint32 card_id = 2; + uint32 target_level = 3; +} + +// CmdID: 8473 +message TiledGamePrpgLevelUpCardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + CARD_ID_ERROR = 3; + MATERIAL_LACK = 4; + TARGET_LEVEL_ERROR = 5; + } + + TiledGamePrpgLevelUpCardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + TiledGamePrpgCard new_card = 3; +} + +// CmdID: 8474 +message TiledGamePrpgBattleBeginReq { + uint32 activity_id = 1; + uint32 room_id = 2; +} + +// CmdID: 8475 +message TiledGamePrpgBattleBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + ROOM_ID_ERROR = 3; + ROOM_TYPE_ERROR = 4; + } + + TiledGamePrpgBattleBeginRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 room_id = 3; + uint32 dynamic_level = 4; + string transaction_str = 5; +} + +// CmdID: 8476 +message TiledGamePrpgBattleEndReq { + enum Reason { + REASON_NONE = 0; + WIN = 1; + LOSE = 2; + EXIT = 3; + } + + uint32 activity_id = 1; + uint32 room_id = 2; + TiledGamePrpgBattleEndReq.Reason end_reason = 3; + uint32 score = 4; +} + +// CmdID: 8477 +message TiledGamePrpgBattleEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + ROOM_ID_MISMATCH = 3; + } + + TiledGamePrpgBattleEndRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 room_id = 3; + uint32 daily_material_drop_num = 4; +} + +// CmdID: 8478 +message TiledGamePrpgTakeExploreLevelRewardReq { + uint32 activity_id = 1; +} + +// CmdID: 8479 +message TiledGamePrpgTakeExploreLevelRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + NO_REWARD = 3; + } + + TiledGamePrpgTakeExploreLevelRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + repeated RewardData reward_list = 3; +} + +// CmdID: 8480 +message TiledGamePrpgPvpSendEmojiReq { + uint32 battle_id = 1; + uint32 emoji_id = 2; +} + +// CmdID: 8481 +message TiledGamePrpgPvpSendEmojiRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_BATTLE = 2; + INVALID_EMOJI = 3; + IN_CD = 4; + } + + TiledGamePrpgPvpSendEmojiRsp.Retcode retcode = 1; + uint32 battle_id = 2; + uint32 emoji_id = 3; + uint32 next_can_send_emoji_time = 4; +} + +// CmdID: 8482 +message TiledGamePrpgPvpEmojiNotify { + uint32 battle_id = 1; + uint32 sender_uid = 2; + uint32 emoji_id = 3; +} + +enum CmdTypeTiledgameprpg { + CMD_TYPE_TILEDGAMEPRPG_NONE = 0; + CMD_TILED_GAME_PRPG_GET_DATA_REQ = 8450; + CMD_TILED_GAME_PRPG_GET_DATA_RSP = 8451; + CMD_TILED_GAME_PRPG_PVP_BATTLE_BEGIN_NOTIFY = 8452; + CMD_TILED_GAME_PRPG_PVP_BATTLE_SETTLE_NOTIFY = 8453; + CMD_TILED_GAME_PRPG_PVP_ENTER_BATTLE_REQ = 8454; + CMD_TILED_GAME_PRPG_PVP_ENTER_BATTLE_RSP = 8455; + CMD_TILED_GAME_PRPG_PVP_ABANDON_BATTLE_REQ = 8456; + CMD_TILED_GAME_PRPG_PVP_ABANDON_BATTLE_RSP = 8457; + CMD_TILED_GAME_PRPG_PVP_GET_BATTLE_INFO_REQ = 8458; + CMD_TILED_GAME_PRPG_PVP_GET_BATTLE_INFO_RSP = 8459; + CMD_TILED_GAME_PRPG_PVP_MOVE_CARD_REQ = 8460; + CMD_TILED_GAME_PRPG_PVP_MOVE_CARD_RSP = 8461; + CMD_TILED_GAME_PRPG_PVP_EXCHANGE_CARD_REQ = 8462; + CMD_TILED_GAME_PRPG_PVP_EXCHANGE_CARD_RSP = 8463; + CMD_TILED_GAME_PRPG_PVP_END_ROUND_REQ = 8464; + CMD_TILED_GAME_PRPG_PVP_END_ROUND_RSP = 8465; + CMD_TILED_GAME_PRPG_PVP_SYNC_ROUND_NOTIFY = 8466; + CMD_TILED_GAME_PRPG_PVP_BATTLE_END_NOTIFY = 8467; + CMD_TILED_GAME_PRPG_PVP_SET_CARD_BACK_REQ = 8468; + CMD_TILED_GAME_PRPG_PVP_SET_CARD_BACK_RSP = 8469; + CMD_TILED_GAME_PRPG_UNLOCK_SKILL_REQ = 8470; + CMD_TILED_GAME_PRPG_UNLOCK_SKILL_RSP = 8471; + CMD_TILED_GAME_PRPG_LEVEL_UP_CARD_REQ = 8472; + CMD_TILED_GAME_PRPG_LEVEL_UP_CARD_RSP = 8473; + CMD_TILED_GAME_PRPG_BATTLE_BEGIN_REQ = 8474; + CMD_TILED_GAME_PRPG_BATTLE_BEGIN_RSP = 8475; + CMD_TILED_GAME_PRPG_BATTLE_END_REQ = 8476; + CMD_TILED_GAME_PRPG_BATTLE_END_RSP = 8477; + CMD_TILED_GAME_PRPG_TAKE_EXPLORE_LEVEL_REWARD_REQ = 8478; + CMD_TILED_GAME_PRPG_TAKE_EXPLORE_LEVEL_REWARD_RSP = 8479; + CMD_TILED_GAME_PRPG_PVP_SEND_EMOJI_REQ = 8480; + CMD_TILED_GAME_PRPG_PVP_SEND_EMOJI_RSP = 8481; + CMD_TILED_GAME_PRPG_PVP_EMOJI_NOTIFY = 8482; +} + +enum TiledGamePrpgPvpSettleSituationType { + TILED_GAME_PRPG_PVP_SETTLE_SITUATION_TYPE_NONE = 0; + TILED_GAME_PRPG_PVP_SETTLE_SITUATION_TYPE_WIN = 1; + TILED_GAME_PRPG_PVP_SETTLE_SITUATION_TYPE_LOSE = 2; + TILED_GAME_PRPG_PVP_SETTLE_SITUATION_TYPE_TIE = 3; +} + +enum TiledGamePrpgPvpCardSuitType { + TILED_GAME_PRPG_PVP_CARD_SUIT_INVALID = 0; + TILED_GAME_PRPG_PVP_CARD_SUIT_SPADE = 1; + TILED_GAME_PRPG_PVP_CARD_SUIT_HEART = 2; + TILED_GAME_PRPG_PVP_CARD_SUIT_CLUB = 3; + TILED_GAME_PRPG_PVP_CARD_SUIT_DIAMOND = 4; + TILED_GAME_PRPG_PVP_CARD_SUIT_NONE = 5; + TILED_GAME_PRPG_PVP_CARD_SUIT_ALL = 6; +} + +enum TiledGamePrpgPvpCardRankType { + TILED_GAME_PRPG_PVP_CARD_RANK_INVALID = 0; + TILED_GAME_PRPG_PVP_CARD_RANK_ACE = 1; + TILED_GAME_PRPG_PVP_CARD_RANK_2 = 2; + TILED_GAME_PRPG_PVP_CARD_RANK_3 = 3; + TILED_GAME_PRPG_PVP_CARD_RANK_4 = 4; + TILED_GAME_PRPG_PVP_CARD_RANK_5 = 5; + TILED_GAME_PRPG_PVP_CARD_RANK_6 = 6; + TILED_GAME_PRPG_PVP_CARD_RANK_7 = 7; + TILED_GAME_PRPG_PVP_CARD_RANK_8 = 8; + TILED_GAME_PRPG_PVP_CARD_RANK_9 = 9; + TILED_GAME_PRPG_PVP_CARD_RANK_10 = 10; + TILED_GAME_PRPG_PVP_CARD_RANK_JACK = 11; + TILED_GAME_PRPG_PVP_CARD_RANK_QUEUE = 12; + TILED_GAME_PRPG_PVP_CARD_RANK_KING = 13; + TILED_GAME_PRPG_PVP_CARD_RANK_NONE = 14; + TILED_GAME_PRPG_PVP_CARD_RANK_ALL = 15; + TILED_GAME_PRPG_PVP_CARD_RANK_NEGATIVE_SCORE = 16; +} + +enum TiledGamePrpgPvpFieldTriggerTimingType { + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_TIMING_NONE = 0; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_TIMING_ON_ROUND_BEGIN = 1; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_TIMING_ON_ROUND_END = 2; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_TIMING_ON_MOVE_CARD = 3; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_TIMING_AURA = 4; +} + +enum TiledGamePrpgPvpFieldTriggerConditionType { + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_CONDITION_ALWAYS = 0; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_CONDITION_HAS_ANY_SPECIFIED_HAND_TYPE = 1; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_CONDITION_FIELD_SCORE_COMP = 2; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_CONDITION_POINT_SCORE_IS = 3; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_CONDITION_HAS_ALL_SUIT = 4; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_CONDITION_IS_REVEAL_ROUND = 5; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_CONDITION_CUR_ROUND_GE = 6; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_CONDITION_CUR_ROUND_EQUAL = 7; +} + +enum TiledGamePrpgPvpFieldTriggerEffectType { + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_EFFECT_NONE = 0; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_EFFECT_SET_FIELD_SCORE = 1; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_EFFECT_SET_FIELD_SCORE_WITH_TAG_CARDS_NUM = 2; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_EFFECT_SET_PUBLIC_CARD_NUM = 3; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_EFFECT_SET_SETTLE_ROUND = 4; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_EFFECT_ADD_EXCHANGE_TIMES = 5; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_EFFECT_DRAW_CARDS = 6; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_EFFECT_ADD_PUT_TIMES_IN_CUR_ROUND = 7; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_EFFECT_MOVE_RANDOM_CARD_FROM_HAND = 8; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_EFFECT_MOVE_RANDOM_CARD_FROM_CARD_VEC = 9; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_EFFECT_MOVE_ALL_CARD_TO_OTHER_RANDOM_FIELD = 10; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_EFFECT_SET_HAND_TYPE_CONFIG = 11; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_EFFECT_HIDE_PLAYER_CARD_UNTIL = 12; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_EFFECT_DESTROY_ONE_OTHER_RANDOM_FIELD = 13; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_EFFECT_COPY_ONE_OTHER_RANDOM_FIELD = 14; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_EFFECT_FORBID_MOVE_CARD_TO_THIS_FIELD = 15; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_EFFECT_ALLOW_MOVE_FROM_THIS_FIELD = 16; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_EFFECT_NO_VISIBLE_IN_THIS_FIELD_BEFORE_SETTLE = 17; + TILED_GAME_PRPG_PVP_FIELD_TRIGGER_EFFECT_SET_FIELD_SCORE_WITH_FIELD_CARD_NUM = 18; +} + +enum TiledGamePrpgPvpLobbyStatus { + TILED_GAME_PRPG_PVP_LOBBY_STATUS_INVALID = 0; + TILED_GAME_PRPG_PVP_LOBBY_STATUS_INIT = 1; + TILED_GAME_PRPG_PVP_LOBBY_STATUS_FIGHT = 2; + TILED_GAME_PRPG_PVP_LOBBY_STATUS_SETTLE = 3; + TILED_GAME_PRPG_PVP_LOBBY_STATUS_DELETE = 4; +} + +enum TiledGamePrpgHandType { + TILED_GAME_PRPG_HAND_TYPE_INVALID = 0; + TILED_GAME_PRPG_HAND_TYPE_NONE = 1; + TILED_GAME_PRPG_HAND_TYPE_ONE_PAIR = 2; + TILED_GAME_PRPG_HAND_TYPE_TWO_PAIR = 3; + TILED_GAME_PRPG_HAND_TYPE_THREE_OF_A_KIND = 4; + TILED_GAME_PRPG_HAND_TYPE_FULL_HOUSE = 5; + TILED_GAME_PRPG_HAND_TYPE_STRAIGHT = 6; + TILED_GAME_PRPG_HAND_TYPE_FLUSH = 7; + TILED_GAME_PRPG_HAND_TYPE_FOUR_OF_A_KIND = 8; + TILED_GAME_PRPG_HAND_TYPE_STRAIGHT_FLUSH = 9; + TILED_GAME_PRPG_HAND_TYPE_FLUSH_FULL_HOUSE = 10; + TILED_GAME_PRPG_HAND_TYPE_FIVE_OF_A_KIND = 11; + TILED_GAME_PRPG_HAND_TYPE_FLUSH_FIVE_OF_A_KIND = 12; +} + +enum TiledGamePrpgRoomType { + TILED_GAME_PRPG_ROOM_TYPE_NONE = 0; + TILED_GAME_PRPG_ROOM_TYPE_NORMAL = 1; + TILED_GAME_PRPG_ROOM_TYPE_DAILY = 2; + TILED_GAME_PRPG_ROOM_TYPE_SIDE = 3; + TILED_GAME_PRPG_ROOM_TYPE_TUTORIAL = 4; + TILED_GAME_PRPG_ROOM_TYPE_PVP = 5; +} + +// CmdID: 6450 +message TownActivityGetDataReq { + uint32 town_id = 1; +} + +message TownActivity { + uint32 town_id = 1; + uint32 tower_id = 2; + uint32 game_round = 3; + repeated TownAvatar avatar_list = 4; + repeated uint32 brick_id_list = 5; + uint32 next_brick_round = 6; + repeated TownBuilding building_list = 7; + repeated uint32 valid_building_id_list = 8; + repeated TownMonster monster_list = 9; + repeated TownEvent event_list = 10; + TownBoss boss = 11; + repeated TownBuff buff_list = 12; + repeated TownPassByTrigger trigger_list = 13; + repeated TownChallenge challenge_list = 14; + repeated uint32 finished_tower_id_list = 15; + bool is_game_end = 16; + repeated TownPath path_list = 17; + string transaction_str = 18; +} + +message TownBuff { + uint32 buff_id = 1; + uint32 buff_num = 2; + uint32 left_duration_num = 3; +} + +message TownAvatar { + enum Status { + NORMAL = 0; + HEALING = 1; + DEAD = 2; + } + + uint32 avatar_id = 1; + uint32 tile_unique_id = 2; + uint32 left_step = 3; + uint32 tile_position = 4; + uint32 left_hp_ratio = 5; + TownAvatar.Status status = 6; + uint32 status_begin_round = 7; + uint32 check_in_building_unique_id = 8; + repeated TownBuff buff_list = 9; + uint32 speed_up_heal_times = 10; +} + +message TownPassByTrigger { + uint32 position = 1; + uint32 skill_id = 2; + uint32 building_unique_id = 3; +} + +message TownBuilding { + message SkillTriggerTimes { + uint32 skill_id = 1; + uint32 trigger_times = 2; + } + + uint32 unique_id = 1; + uint32 building_id = 2; + uint32 position = 3; + repeated uint32 occupy_position_list = 4; + repeated TownBuilding.SkillTriggerTimes skill_trigger_times_list = 5; + uint32 left_hp = 6; + repeated uint32 activated_duration_skill_id_list = 7; + repeated uint32 waiting_avatar_id_list = 8; + uint32 next_interval_skill_round = 9; +} + +message TownMonster { + uint32 unique_id = 1; + uint32 monster_id = 2; + uint32 position = 3; + uint32 strength = 4; + uint32 left_hp_ratio = 5; +} + +message TownBoss { + uint32 monster_id = 1; + uint32 unique_id = 2; + uint32 strength = 3; + uint32 left_hp_ratio = 4; + uint32 born_round = 5; + uint32 next_boss_born_round = 6; + uint32 next_boss_monster_id = 7; +} + +message TownEvent { + uint32 position = 1; + uint32 event_id = 2; +} + +message TownPath { + uint32 position = 1; + uint32 next_position = 2; +} + +// CmdID: 6451 +message TownActivityGetDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + TownActivityGetDataRsp.Retcode retcode = 1; + TownActivity town = 2; +} + +message TownCommonHead { + uint32 town_id = 1; + uint32 tower_id = 2; + uint32 game_round = 3; +} + +// CmdID: 6452 +message TownActivitySaveReq { + TownCommonHead head = 1; +} + +// CmdID: 6453 +message TownActivitySaveRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + TownActivitySaveRsp.Retcode retcode = 1; + TownCommonHead head = 2; +} + +// CmdID: 6454 +message TownActivityBuildReq { + TownCommonHead head = 1; + uint32 use_brick_index = 2; + uint32 use_brick_position = 3; + uint32 target_building_id = 4; + uint32 target_building_position = 5; + uint32 direction = 6; + repeated uint32 consume_building_unique_id_list = 7; +} + +// CmdID: 6455 +message TownActivityBuildRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + INVALID_BRICK = 2; + BLUEPRINT_ERROR = 3; + INVALID_POSITION = 4; + LIMIT = 5; + } + + TownActivityBuildRsp.Retcode retcode = 1; + TownCommonHead head = 2; +} + +// CmdID: 6456 +message TownActivityBattleReq { + message AvatarBattleResult { + uint32 avatar_id = 1; + uint32 left_hp_ratio = 2; + } + + message MonsterBattleResult { + uint32 monster_unique_id = 1; + uint32 left_hp_ratio = 2; + } + + enum BattleEndStatus { + BATTLE_END_STATUS_NONE = 0; + WIN = 1; + ALL_DEAD = 2; + } + + TownCommonHead head = 1; + TownActivityBattleReq.BattleEndStatus end_status = 2; + repeated TownActivityBattleReq.AvatarBattleResult avatar_result_list = 3; + TownActivityBattleReq.MonsterBattleResult monster_result = 4; +} + +// CmdID: 6457 +message TownActivityBattleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_ERROR = 2; + AVATAR_TEAM_NUM_ERROR = 3; + POSITION_ERROR = 4; + MONSTER_NOT_EXIST = 5; + } + + TownActivityBattleRsp.Retcode retcode = 1; + TownCommonHead head = 2; + repeated DropItem drop_item_list = 3; +} + +// CmdID: 6458 +message TownActivitySellBuildingReq { + TownCommonHead head = 1; + uint32 sell_building_unique_id = 2; +} + +// CmdID: 6459 +message TownActivitySellBuildingRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CAN_NOT_SELL = 2; + } + + TownActivitySellBuildingRsp.Retcode retcode = 1; + TownCommonHead head = 2; + repeated Material return_material_list = 3; +} + +// CmdID: 6460 +message TownActivityHealAvatarReq { + TownCommonHead head = 1; + uint32 avatar_id = 2; +} + +// CmdID: 6461 +message TownActivityHealAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + TownActivityHealAvatarRsp.Retcode retcode = 1; + TownCommonHead head = 2; +} + +// CmdID: 6462 +message TownActivitySellBrickReq { + TownCommonHead head = 1; + uint32 sell_brick_index = 2; +} + +// CmdID: 6463 +message TownActivitySellBrickRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CAN_NOT_SELL = 2; + } + + TownActivitySellBrickRsp.Retcode retcode = 1; + TownCommonHead head = 2; + repeated Material return_material_list = 3; +} + +message TownChallenge { + enum Status { + NONE = 0; + DOING = 1; + FINISH = 2; + CLOSE = 3; + } + + uint32 challenge_id = 1; + TownChallenge.Status status = 2; + uint32 value = 3; + uint32 tower_id = 4; +} + +// CmdID: 6464 +message TownActivityEndNotify { + enum Status { + WIN = 0; + LOSE = 1; + ABANDON = 2; + } + + TownCommonHead head = 1; + TownActivityEndNotify.Status status = 2; + repeated TownChallenge challenge_list = 3; + RewardData challenge_reward_data = 4; + GenericItemNum talent_point_item = 5; +} + +// CmdID: 6465 +message TownActivityBossAttackNotify { + TownCommonHead head = 1; + repeated uint32 attacked_position_list = 2; +} + +// CmdID: 6466 +message TownActivityGetShopReq { + TownCommonHead head = 1; + uint32 building_unique_id = 2; +} + +// CmdID: 6467 +message TownActivityGetShopRsp { + message ShopGoods { + uint32 goods_id = 1; + uint32 material_id = 2; + uint32 left_buy_times = 3; + uint32 cost_material_id = 4; + uint32 cost_num = 5; + uint32 limit_type = 6; + } + + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + TownActivityGetShopRsp.Retcode retcode = 1; + TownCommonHead head = 2; + uint32 building_unique_id = 3; + repeated TownActivityGetShopRsp.ShopGoods goods_list = 4; +} + +// CmdID: 6468 +message TownActivityShopBuyReq { + TownCommonHead head = 1; + uint32 shop_building_unique_id = 2; + uint32 goods_id = 3; +} + +// CmdID: 6469 +message TownActivityShopBuyRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + COIN_LACK = 2; + SOLD = 3; + FORBID = 4; + } + + TownActivityShopBuyRsp.Retcode retcode = 1; + TownCommonHead head = 2; + uint32 goods_id = 3; + uint32 left_buy_times = 4; +} + +// CmdID: 6470 +message TownActivityMaterialUseReq { + TownCommonHead head = 1; + uint32 material_id = 2; + uint32 target_param = 3; +} + +// CmdID: 6471 +message TownActivityMaterialUseRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_LACK = 2; + NOT_USABLE = 3; + INVALID_TARGET = 4; + FORBID = 5; + } + + TownActivityMaterialUseRsp.Retcode retcode = 1; + TownCommonHead head = 2; + uint32 material_id = 3; +} + +// CmdID: 6472 +message TownActivitySpeedUpHealReq { + TownCommonHead head = 1; + uint32 avatar_id = 2; +} + +// CmdID: 6473 +message TownActivitySpeedUpHealRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_HEALING = 2; + LACK_MATERIAL = 3; + } + + TownActivitySpeedUpHealRsp.Retcode retcode = 1; + TownCommonHead head = 2; +} + +// CmdID: 6474 +message TownActivityCheckInOptionalReq { + TownCommonHead head = 1; + uint32 building_unique_id = 2; + uint32 avatar_id = 3; +} + +// CmdID: 6475 +message TownActivityCheckInOptionalRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_LIST = 2; + CHECKED_IN = 3; + } + + TownActivityCheckInOptionalRsp.Retcode retcode = 1; + TownCommonHead head = 2; +} + +// CmdID: 6476 +message TownActivityResetReq { + uint32 town_id = 1; +} + +// CmdID: 6477 +message TownActivityResetRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + TownActivityResetRsp.Retcode retcode = 1; + uint32 town_id = 2; +} + +// CmdID: 6478 +message TownActivityAlterPathReq { + TownCommonHead head = 1; + uint32 position = 2; +} + +// CmdID: 6479 +message TownActivityAlterPathRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_ALTER = 2; + NOT_MEET_CONDITION = 3; + } + + TownActivityAlterPathRsp.Retcode retcode = 1; + TownCommonHead head = 2; + uint32 position = 3; + uint32 next_position = 4; +} + +// CmdID: 6480 +message TownActivityAttackEnemyBuffNotify { + message Attack { + uint32 building_unique_id = 1; + uint32 skill_id = 2; + repeated uint32 attacked_unique_id_list = 3; + } + + TownCommonHead head = 1; + repeated TownActivityAttackEnemyBuffNotify.Attack attack_list = 2; + repeated DropItem drop_item_list = 3; +} + +// CmdID: 6481 +message TownActivityRefreshBrickReq { + TownCommonHead head = 1; +} + +// CmdID: 6482 +message TownActivityRefreshBrickRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LACK_COIN = 2; + NO_BRICK = 3; + } + + TownActivityRefreshBrickRsp.Retcode retcode = 1; + TownCommonHead head = 2; +} + +enum CmdTypeTown { + CMD_TYPE_TOWN_NONE = 0; + CMD_TOWN_ACTIVITY_GET_DATA_REQ = 6450; + CMD_TOWN_ACTIVITY_GET_DATA_RSP = 6451; + CMD_TOWN_ACTIVITY_SAVE_REQ = 6452; + CMD_TOWN_ACTIVITY_SAVE_RSP = 6453; + CMD_TOWN_ACTIVITY_BUILD_REQ = 6454; + CMD_TOWN_ACTIVITY_BUILD_RSP = 6455; + CMD_TOWN_ACTIVITY_BATTLE_REQ = 6456; + CMD_TOWN_ACTIVITY_BATTLE_RSP = 6457; + CMD_TOWN_ACTIVITY_SELL_BUILDING_REQ = 6458; + CMD_TOWN_ACTIVITY_SELL_BUILDING_RSP = 6459; + CMD_TOWN_ACTIVITY_HEAL_AVATAR_REQ = 6460; + CMD_TOWN_ACTIVITY_HEAL_AVATAR_RSP = 6461; + CMD_TOWN_ACTIVITY_SELL_BRICK_REQ = 6462; + CMD_TOWN_ACTIVITY_SELL_BRICK_RSP = 6463; + CMD_TOWN_ACTIVITY_END_NOTIFY = 6464; + CMD_TOWN_ACTIVITY_BOSS_ATTACK_NOTIFY = 6465; + CMD_TOWN_ACTIVITY_GET_SHOP_REQ = 6466; + CMD_TOWN_ACTIVITY_GET_SHOP_RSP = 6467; + CMD_TOWN_ACTIVITY_SHOP_BUY_REQ = 6468; + CMD_TOWN_ACTIVITY_SHOP_BUY_RSP = 6469; + CMD_TOWN_ACTIVITY_MATERIAL_USE_REQ = 6470; + CMD_TOWN_ACTIVITY_MATERIAL_USE_RSP = 6471; + CMD_TOWN_ACTIVITY_SPEED_UP_HEAL_REQ = 6472; + CMD_TOWN_ACTIVITY_SPEED_UP_HEAL_RSP = 6473; + CMD_TOWN_ACTIVITY_CHECK_IN_OPTIONAL_REQ = 6474; + CMD_TOWN_ACTIVITY_CHECK_IN_OPTIONAL_RSP = 6475; + CMD_TOWN_ACTIVITY_RESET_REQ = 6476; + CMD_TOWN_ACTIVITY_RESET_RSP = 6477; + CMD_TOWN_ACTIVITY_ALTER_PATH_REQ = 6478; + CMD_TOWN_ACTIVITY_ALTER_PATH_RSP = 6479; + CMD_TOWN_ACTIVITY_ATTACK_ENEMY_BUFF_NOTIFY = 6480; + CMD_TOWN_ACTIVITY_REFRESH_BRICK_REQ = 6481; + CMD_TOWN_ACTIVITY_REFRESH_BRICK_RSP = 6482; +} + +enum TownActivityConst { + TOWN_ACTIVITY_CONST_NONE = 0; + TOWN_ACTIVITY_ROUND_PER_SECOND = 50; + TOWN_ACTIVITY_STEP_PER_TILE_CELL = 10000; + TOWN_ACTIVITY_MAX_HP_RATIO = 100000; +} + +enum TownPropType { + TOWN_NONE = 0; + TOWN_AVATAR = 1; + TOWN_MONSTER = 2; +} + +enum TownRangeType { + TOWN_RANGE_NONE = 0; + TOWN_RANGE_CROSS = 1; + TOWN_RANGE_ROUND = 2; +} + +enum TownBuildingSkillTargetType { + TOWN_TARGET_NONE = 0; + TOWN_TARGET_AVATAR_CHECK_IN = 1; + TOWN_TARGET_ALL_AVATAR = 2; + TOWN_TARGET_ATTRIBUTE_AVATAR = 3; + TOWN_TARGET_PASSED_AVATAR_IN_CROSS = 4; + TOWN_TARGET_ROAD_IN_CROSS = 5; + TOWN_TARGET_ROAD_IN_ROUND = 6; + TOWN_TARGET_BUILDING = 7; + TOWN_TARGET_PASSED_AVATAR_IN_ROUND = 8; + TOWN_TARGET_SPECIFIC_AVATAR = 9; + TOWN_TARGET_RANDOM_EMPTY_ROAD_IN_ROUND = 10; + TOWN_TARGET_RANDOM_MONSTER_AOE = 11; + TOWN_TARGET_BOSS = 12; +} + +enum TownBuffType { + TOWN_BUFF_TYPE_NONE = 0; + TOWN_BUFF_ADD_STRENGTH_RATIO = 1; + TOWN_BUFF_ADD_STRENGTH = 2; + TOWN_BUFF_ADD_LUCK = 3; + TOWN_BUFF_COIN_RATIO = 4; + TOWN_BUFF_ADD_MATERIAL = 5; + TOWN_BUFF_ADD_DAMAGE_RATIO = 6; + TOWN_BUFF_CHANGE_TERRAIN = 7; + TOWN_BUFF_CHANGE_GROUND = 8; + TOWN_BUFF_ADD_DAMAGE_RECEIVED = 9; + TOWN_BUFF_RPG_EVENT = 10; + TOWN_BUFF_HEAL_HP_BY_RATIO = 11; + TOWN_BUFF_HEAL = 12; + TOWN_BUFF_CHECK_IN = 13; + TOWN_BUFF_CHECK_OUT = 14; + TOWN_BUFF_POSTPONE_BOSS = 15; + TOWN_BUFF_CREATE_ENTITY = 16; + TOWN_BUFF_REPLACE_ENTITY = 17; + TOWN_BUFF_ADD_BRICK = 18; + TOWN_BUFF_LOSE_GAME = 19; + TOWN_BUFF_RESET_GROUND = 20; + TOWN_BUFF_ADD_SPEED = 21; + TOWN_BUFF_CHECK_IN_OPTIONAL = 22; + TOWN_BUFF_ADD_MONSTER = 23; + TOWN_BUFF_ADD_EVENT = 24; + TOWN_BUFF_WIN_GAME = 25; + TOWN_BUFF_RESET_TERRAIN = 26; + TOWN_BUFF_BATTLE_SKILL = 27; + TOWN_BUFF_CHANGE_BUILDING = 28; + TOWN_BUFF_REDUCE_BOSS_INITIAL_HP_RATIO = 29; + TOWN_BUFF_ATTACK_ENEMY = 30; +} + +enum TownBuffDurationType { + TOWN_BUFF_DURATION_PERMANENT = 0; + TOWN_BUFF_DURATION_BATTLE = 1; + TOWN_BUFF_DURATION_STEP = 2; + TOWN_BUFF_DURATION_BOSS = 3; +} + +enum TownBuildingSkillCondType { + TOWN_BUILDING_COND_NONE = 0; + TOWN_BUILDING_COND_SIDE_BUILDING = 1; + TOWN_BUILDING_COND_SIDE_BUILDING_MAX_NUM = 2; + TOWN_BUILDING_COND_NO_SIDE_BUILDING = 3; + TOWN_BUILDING_COND_SIDE_ROAD = 4; + TOWN_BUILDING_COND_TOTAL_BUILDING_NUM = 5; + TOWN_BUILDING_COND_PASS_AVATAR = 6; + TOWN_BUILDING_COND_SIDE_ROAD_WITH_TERRAIN = 7; +} + +enum TownActivityGoodsLimitType { + TOWN_ACTIVITY_GOODS_LIMIT_TYPE_NONE = 0; + TOWN_ACTIVITY_GOODS_LIMIT_SHOP = 1; + TOWN_ACTIVITY_GOODS_LIMIT_GLOBAL = 2; +} + +enum TownActivityMaterialUseType { + TOWN_ACTIVITY_MATERIAL_USE_TYPE_NONE = 0; + TOWN_ACTIVITY_MATERIAL_USE_BUILDING = 1; + TOWN_ACTIVITY_MATERIAL_USE_AVATAR_BUFF = 2; + TOWN_ACTIVITY_MATERIAL_USE_KILL_MONSTER = 3; + TOWN_ACTIVITY_MATERIAL_USE_GLOBAL_BUFF = 4; +} + +enum TownActivityChallengeFinishWay { + TOWN_ACTIVITY_CHALLENGE_FINISH_WAY_NONE = 0; + TOWN_ACTIVITY_CHALLENGE_BUILDING_HP = 1; + TOWN_ACTIVITY_CHALLENGE_AVATAR_DIE_TIMES = 2; + TOWN_ACTIVITY_CHALLENGE_BUILDING_TIMES = 3; + TOWN_ACTIVITY_CHALLENGE_STRENTH_AVATAR_NUM = 4; + TOWN_ACTIVITY_CHALLENGE_COIN_NUM = 5; +} + +enum TownActivityChallengeCmpType { + TOWN_ACTIVITY_CHALLENGE_CMP_TYPE_NONE = 0; + TOWN_ACTIVITY_CHALLENGE_CMP_GREATER = 1; + TOWN_ACTIVITY_CHALLENGE_CMP_LESS = 2; + TOWN_ACTIVITY_CHALLENGE_CMP_EQUAL = 3; + TOWN_ACTIVITY_CHALLENGE_CMP_GREATER_EQUAL = 4; + TOWN_ACTIVITY_CHALLENGE_CMP_LESS_EQUAL = 5; +} + +enum TownActivityChallengeRecordType { + TOWN_ACTIVITY_CHALLENGE_RECORD_TYPE_NONE = 0; + TOWN_ACTIVITY_CHALLENGE_RECORD_IN_GAME = 1; + TOWN_ACTIVITY_CHALLENGE_RECORD_SETTLE_GAME = 2; +} + +enum TownActivityCondType { + TOWN_ACTIVITY_COND_NONE = 0; + TOWN_ACTIVITY_COND_TOTAL_STRENGTH = 1; + TOWN_ACTIVITY_COND_TOTAL_SPEED = 2; + TOWN_ACTIVITY_COND_TOTAL_LUCK = 3; + TOWN_ACTIVITY_COND_COIN_MATERIAL_NUM = 4; + TOWN_ACTIVITY_COND_BUILDING_NUM = 5; +} + +// CmdID: 476 +message GetBuffEffectReq { + repeated uint32 effect_id_list = 1; +} + +// CmdID: 477 +message GetBuffEffectRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ADD_FAIL = 2; + } + + GetBuffEffectRsp.Retcode retcode = 1; + repeated BuffEffect effect_list = 2; + repeated uint32 aura_effect_list = 3; +} + +// CmdID: 506 +message GetGrandKeyReq { + repeated uint32 key_id_list = 1; +} + +// CmdID: 507 +message GetGrandKeyRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetGrandKeyRsp.Retcode retcode = 1; + repeated GrandKey key_list = 2; + bool is_all = 3; +} + +// CmdID: 449 +message GetMedalDataReq { + repeated uint32 medal_id_list = 1; +} + +// CmdID: 450 +message GetMedalDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetMedalDataRsp.Retcode retcode = 1; + repeated Medal medal_list = 2; + bool is_all = 3; +} + +// CmdID: 451 +message MedalOpReq { + MedalOpType op = 1; + uint32 on_id = 2; + uint32 off_id = 3; +} + +// CmdID: 452 +message MedalOpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_OWN = 2; + EXPIRED = 3; + OFF_ID_ERROR = 4; + } + + MedalOpRsp.Retcode retcode = 1; + MedalOpType op = 2; + uint32 on_id = 3; + uint32 off_id = 4; +} + +// CmdID: 456 +message GetStageActDifficultyReq { +} + +// CmdID: 457 +message GetStageActDifficultyRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetStageActDifficultyRsp.Retcode retcode = 1; + repeated StageActDifficultyInfo act_difficulty_list = 2; +} + +// CmdID: 458 +message TakeStageActChallengeRewardReq { + uint32 act_id = 1; + uint32 difficulty = 2; + uint32 challenge_num_index = 3; + repeated uint32 challenge_num_index_list = 4; +} + +// CmdID: 459 +message TakeStageActChallengeRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKE = 2; + CHALLENGE_NUM_LACK = 3; + PART_FAIL = 4; + } + + TakeStageActChallengeRewardRsp.Retcode retcode = 1; + uint32 act_id = 2; + uint32 difficulty = 3; + uint32 challenge_num_index = 4; + repeated RewardData reward_list = 5; + repeated uint32 succ_challenge_num_index_list = 6; + repeated uint32 fail_challenge_num_index_list = 7; +} + +message StageChapterBoss { + uint32 boss_stage_id = 1; + uint32 left_hp = 2; +} + +message StageChapterExclusive { + uint32 group_id = 1; + uint32 stage_id = 2; +} + +message StageChapterInfo { + uint32 chapter_id = 1; + uint64 has_take_challenge = 2; + uint32 enter_player_level = 3; + repeated StageChapterBoss boss_list = 4; + repeated StageChapterExclusive exclusive_stage_list = 5; +} + +// CmdID: 965 +message GetStageChapterReq { +} + +// CmdID: 966 +message GetStageChapterRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetStageChapterRsp.Retcode retcode = 1; + repeated StageChapterInfo chapter_list = 2; +} + +// CmdID: 967 +message TakeChapterChallengeRewardReq { + uint32 chapter_id = 1; + uint32 challenge_num_index = 2; +} + +// CmdID: 968 +message TakeChapterChallengeRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKE = 2; + CHALLENGE_NUM_LACK = 3; + REWARD_INVALID = 4; + } + + TakeChapterChallengeRewardRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + uint32 challenge_num_index = 3; + repeated RewardData reward_list = 4; +} + +// CmdID: 460 +message TakeActivityChallengeRewardReq { + uint32 activity_id = 1; + uint32 challenge_num_index = 2; +} + +// CmdID: 461 +message TakeActivityChallengeRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HAS_TAKE = 2; + CHALLENGE_NUM_LACK = 3; + } + + TakeActivityChallengeRewardRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 challenge_num_index = 3; + repeated RewardData reward_list = 4; +} + +// CmdID: 464 +message GetPediaReq { +} + +// CmdID: 465 +message GetPediaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetPediaRsp.Retcode retcode = 1; + repeated uint32 black_list = 2; +} + +// CmdID: 466 +message MpGetMatchInfoReq { +} + +// CmdID: 467 +message MpGetMatchInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_MATCH_ROOM = 2; + } + + MpGetMatchInfoRsp.Retcode retcode = 1; + repeated MpMatchInfo match_info_list = 2; + uint32 battle_begin_time = 3; + uint32 lobby_idx = 4; +} + +// CmdID: 468 +message MpCancelMatchReq { +} + +// CmdID: 469 +message MpCancelMatchRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + MpCancelMatchRsp.Retcode retcode = 1; +} + +// CmdID: 470 +message MpGetLobbyRecommendReq { + uint32 stage_id = 1; +} + +// CmdID: 471 +message MpGetLobbyRecommendRsp { + enum RecommendType { + RECOMMEND_NONE = 0; + RECOMMEND_CREATE = 1; + RECOMMEND_ENTER = 2; + } + + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + MpGetLobbyRecommendRsp.Retcode retcode = 1; + uint32 stage_id = 2; + MpGetLobbyRecommendRsp.RecommendType recommend_type = 3; +} + +// CmdID: 478 +message EquipSynthesisReq { + Material material = 1; + EquipmentItem equip_item = 2; +} + +// CmdID: 479 +message EquipSynthesisRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FRAG_ERROR = 2; + BAG_FULL = 3; + } + + EquipSynthesisRsp.Retcode retcode = 1; + EquipmentItemList equip_list = 2; +} + +// CmdID: 480 +message GetPlayerCardReq { + PlayerCardType type = 1; +} + +// CmdID: 481 +message GetPlayerCardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetPlayerCardRsp.Retcode retcode = 1; + PlayerCardType type = 2; + repeated uint32 avatar_id_list = 3; + repeated uint32 medal_id_list = 4; + uint32 msg_config = 5; + PlayerCardMsgData msg_data = 6; + uint32 last_read_msg_index = 7; + uint32 mp_like_num = 8; + uint32 island_like_num = 9; + repeated uint32 elf_id_list = 10; + uint32 campaign_like_num = 11; + repeated Medal medal_list = 12; +} + +// CmdID: 482 +message ChangePlayerCardReq { + PlayerCardType type = 1; + repeated PlayerCardSlot slot_list = 2; + PlayerCardMsgConfig msg_config = 3; +} + +// CmdID: 483 +message ChangePlayerCardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + ChangePlayerCardRsp.Retcode retcode = 1; + PlayerCardType type = 2; + repeated PlayerCardSlot slot_list = 3; + PlayerCardMsgConfig msg_config = 4; +} + +// CmdID: 489 +message DelPlayerCardMsgReq { + uint32 target_uid = 1; + repeated uint32 index_list = 2; +} + +// CmdID: 492 +message PlayerCardDataChangeNotify { + uint32 uid = 1; + uint32 msg_config = 2; + PlayerCardMedalData medal = 3; + PlayerCardAvatarData avatar = 4; +} + +// CmdID: 486 +message SendPlayerCardMsgReq { + uint32 target_uid = 1; + string msg = 2; + ChatMsg chat_msg = 3; + uint32 msg_num_limit = 4; + bool is_friend = 5; +} + +// CmdID: 493 +message SendPlayerCardMsgRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SEND_NUM_LIMIT = 2; + SEND_NUM_LIMIT_PLAYER = 3; + MSG_INVALID = 4; + BLACK_LIST = 5; + FORBIDDEN = 6; + ONLY_FRIEND = 7; + MSG_CLOSED = 8; + FEATURE_CLOSED = 9; + } + + SendPlayerCardMsgRsp.Retcode retcode = 1; + uint32 target_uid = 2; + uint32 msg_index = 3; + uint32 forbidden_time = 4; + ChatMsg chat_msg = 5; +} + +// CmdID: 490 +message GetOtherPlayerCardDataReq { + uint32 target_uid = 1; +} + +// CmdID: 491 +message GetOtherPlayerCardDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_SAME_IDC = 2; + HAS_LOGOFF = 3; + } + + GetOtherPlayerCardDataRsp.Retcode retcode = 1; + uint32 target_uid = 2; + PlayerCardData card_data = 3; + PlayerDetailData player_data = 4; +} + +// CmdID: 487 +message RecvPlayerCardMsgNotify { + repeated PlayerCardMsg msg_list = 1; + uint32 target_uid = 2; +} + +message MapQuestSettleData { + uint32 map_id = 1; + uint32 old_level = 2; + uint32 old_star = 3; + uint32 cur_level = 4; + uint32 cur_star = 5; + uint32 sub_star = 6; +} + +// CmdID: 496 +message GetBossRushActivityReq { + uint32 activity_id = 1; +} + +message BossRushBuff { + uint32 pool_id = 1; + uint32 buff_id = 2; +} + +// CmdID: 497 +message GetBossRushActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + ACTIVITY_ERROR = 3; + } + + GetBossRushActivityRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 phase_id = 3; + repeated BossRushBuff buff_list = 4; +} + +// CmdID: 498 +message ChooseBossRushBuffReq { + uint32 activity_id = 1; + uint32 pool_id = 2; + uint32 buff_id = 3; +} + +// CmdID: 499 +message ChooseBossRushBuffRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACTIVITY_NOT_OPEN = 2; + ACTIVITY_ERROR = 3; + POOL_ID_ERROR = 4; + BUFF_ID_ERROR = 5; + TIME_LIMIT = 6; + } + + ChooseBossRushBuffRsp.Retcode retcode = 1; + uint32 activity_id = 2; + uint32 pool_id = 3; + uint32 buff_id = 4; +} + +// CmdID: 500 +message GetDeleteMaterialReq { +} + +// CmdID: 501 +message GetDeleteMaterialRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetDeleteMaterialRsp.Retcode retcode = 1; + repeated Material materials = 2; + repeated GenericItemNum return_item_list = 3; +} + +// CmdID: 502 +message GetExtraStoryChallengeModeDataReq { + uint32 chapter_id = 1; +} + +// CmdID: 503 +message GetExtraStoryChallengeModeDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + EXTRA_STORY_NOT_OPEN = 3; + } + + GetExtraStoryChallengeModeDataRsp.Retcode retcode = 1; + uint32 choose_difficulty = 2; + bool is_can_reset = 3; + repeated ChallengeModeArea challenge_area_list = 4; + uint32 chapter_id = 5; +} + +// CmdID: 504 +message ResetExtraStoryChallengeModeReq { + uint32 chapter_id = 1; + uint32 difficulty = 2; +} + +// CmdID: 505 +message ResetExtraStoryChallengeModeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TIME_LIMIT = 2; + EXTRA_STORY_NOT_OPEN = 3; + RESET_TIMES_LACK = 4; + DIFFICULTY_NOT_OPEN = 5; + LEVEL_LIMIT = 6; + } + + ResetExtraStoryChallengeModeRsp.Retcode retcode = 1; + uint32 chapter_id = 2; + uint32 difficulty = 3; +} + +// CmdID: 508 +message GetExBossScheduleReq { +} + +// CmdID: 509 +message GetExBossScheduleRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FEATURE_CLOSED = 2; + } + + GetExBossScheduleRsp.Retcode retcode = 1; + uint32 begin_time = 2; + uint32 end_time = 3; + uint32 min_level = 4; + string image_path = 5; + uint32 schedule_id = 6; + uint32 rank_id = 7; +} + +message ExBossIdInfo { + uint32 boss_id = 1; + repeated uint32 avatar_id_list = 3; + repeated uint32 weapon_id_list = 4; + repeated uint32 stigmata_id_list = 5; + uint32 score = 6; + repeated uint32 last_avatar_id_list = 7; + uint32 boss_times_score = 8; +} + +message ExBossSingleBossScoreReward { + uint32 boss_id = 1; + uint32 max_settle_score = 2; +} + +message ExBossInfo { + uint32 enter_times = 1; + uint32 schedule_id = 2; + uint32 rank_id = 3; + repeated ExBossIdInfo boss_id_list = 4; + uint32 now_schedule_id = 5; + repeated ExBossIdInfo ex_boss_list = 6; + uint32 max_sweep_level = 7; + repeated ExBossSingleBossScoreReward single_boss_score_reward_list = 8; + uint32 cur_max_enter_times = 9; + repeated uint32 has_taken_score_reward_id_list = 10; +} + +// CmdID: 510 +message GetExBossInfoReq { +} + +// CmdID: 511 +message GetExBossInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + FEATURE_CLOSED = 3; + } + + GetExBossInfoRsp.Retcode retcode = 1; + ExBossInfo boss_info = 2; +} + +// CmdID: 516 +message TakeExBossRankRewardNotify { + repeated RewardData reward_list = 1; + uint32 rank = 2; + uint32 score = 3; +} + +// CmdID: 517 +message GetNewConsignedOrderDataReq { +} + +// CmdID: 518 +message GetNewConsignedOrderDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + } + + GetNewConsignedOrderDataRsp.Retcode retcode = 1; + uint32 progress = 2; + repeated ConsignedOrder order_list = 3; + uint32 cd_finish_time = 4; + uint32 finish_order_times = 5; + uint32 total_order_times = 6; +} + +// CmdID: 519 +message GetConsignedRewardReq { +} + +// CmdID: 520 +message GetConsignedRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + } + + GetConsignedRewardRsp.Retcode retcode = 1; + repeated RewardData required_reward_list = 2; + repeated RewardData optional_reward_list = 3; + uint32 my_credit = 4; + uint32 total_credit = 5; + repeated uint32 my_optional_reward_list = 6; +} + +// CmdID: 521 +message ChooseConsignedRewardReq { + repeated uint32 optional_reward_list = 1; +} + +// CmdID: 522 +message ChooseConsignedRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + ITEM_NOT_EXIST = 3; + } + + ChooseConsignedRewardRsp.Retcode retcode = 1; + repeated uint32 optional_reward_list = 2; +} + +// CmdID: 523 +message TakeConsignedRewardReq { + uint32 reliable_id = 1; +} + +// CmdID: 524 +message TakeConsignedRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + REWARD_TAKEN = 3; + } + + TakeConsignedRewardRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; + uint32 reliable_id = 3; +} + +message ConsignedRewardLog { + uint32 uid = 1; + repeated RewardData reward_list = 2; + uint32 credit = 3; +} + +// CmdID: 525 +message GetConsignedRewardLogReq { +} + +// CmdID: 526 +message GetConsignedRewardLogRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_ARMADA = 2; + } + + GetConsignedRewardLogRsp.Retcode retcode = 1; + repeated ConsignedRewardLog reward_log_list = 2; +} + +// CmdID: 527 +message GetExBossRankReq { + uint32 rank_id = 1; + uint32 boss_id = 2; +} + +// CmdID: 528 +message GetExBossRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + RANK_ERROR = 3; + NOT_JOIN = 4; + SCHEDULE_DISMATCH = 5; + FEATURE_CLOSED = 6; + } + + GetExBossRankRsp.Retcode retcode = 1; + RankShowData rank_data = 2; + uint32 rank_id = 3; + bool is_filtered = 4; + uint32 boss_id = 5; +} + +// CmdID: 529 +message ExBossStageBeginReq { + repeated uint32 avatar_id_list = 1; + uint32 boss_id = 2; + bool is_training = 3; + repeated uint32 elf_id_list = 4; + bool is_turbo = 5; +} + +// CmdID: 530 +message ExBossStageBeginRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_ERROR = 3; + DUP_AVATAR = 4; + ENTER_TIMES_LACK = 5; + EX_BOSS_LACK_SCORE = 6; + ELF_ERROR = 7; + ELF_CARRY_LEVEL_LIMIT = 8; + NEED_FINISH_NORMAL = 9; + FEATURE_LIMIT = 10; + FEATURE_CLOSED = 11; + NOT_OPEN = 12; + NOT_ALLOW_TURBO = 13; + NO_AVAILABLE_BOSS = 14; + LACK_LOCK_SLOT = 15; + PRE_BOSS_NOT_FINISH = 16; + ELF_SYSTEM_ERROR = 17; + AVATAR_NUM_ERROR = 18; + } + + ExBossStageBeginRsp.Retcode retcode = 1; + string stage_transaction_str = 2; +} + +// CmdID: 531 +message ExBossStageEndReq { + StageEndStatus end_status = 1; + repeated StageCheatData cheat_data_list = 3; + uint32 boss_id = 4; + uint32 score = 5; +} + +// CmdID: 532 +message ExBossStageEndRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_BEGIN = 3; + NOT_OPEN = 4; + } + + ExBossStageEndRsp.Retcode retcode = 1; + StageEndStatus end_status = 2; + uint32 boss_id = 3; +} + +// CmdID: 533 +message TakeExBossScoreRewardNotify { + repeated RewardData reward_list = 1; +} + +// CmdID: 534 +message OpenWeekDayActivityReq { + uint32 activity_id = 1; +} + +// CmdID: 535 +message OpenWeekDayActivityRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + IS_OPEN = 2; + HAS_OPEN = 3; + VALID_OPEN = 4; + MATERIAL_LACK = 5; + SCOIN_LACK = 6; + } + + OpenWeekDayActivityRsp.Retcode retcode = 1; +} + +// CmdID: 536 +message GetChallengeStepRewardReq { + uint32 step_id = 1; +} + +// CmdID: 537 +message GetChallengeStepRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + STEP_ID_ERROR = 2; + STEP_STATUS_ERROR = 3; + EQUIPMENT_FULL = 4; + EQUIPMENT_MATERIAL_LIMIT = 5; + EQUIPMENT_FRAGMENT_LIMIT = 6; + EQUIPMENT_ELF_FRAGMENT_LIMIT = 7; + } + + GetChallengeStepRewardRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; +} + +// CmdID: 538 +message AddTechExpReq { + uint32 material_id = 1; + uint32 material_num = 2; + uint32 map_id = 3; +} + +// CmdID: 539 +message AddTechExpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TECH_NOT_OPEN = 2; + TECH_LEVEL_FULL = 3; + MATERAIL_NOT_ENOUGH = 4; + MATERAIL_CAN_NOT_ADD_EXP = 5; + } + + AddTechExpRsp.Retcode retcode = 1; +} + +// CmdID: 540 +message TakeTechCollectRewardReq { + uint32 map_id = 1; +} + +// CmdID: 541 +message TakeTechCollectRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + TECH_LEVEL_LIMIT = 2; + IN_CD_TIME = 3; + } + + TakeTechCollectRewardRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; + uint32 map_id = 3; +} + +// CmdID: 553 +message MaterialDeleteReturnReq { +} + +// CmdID: 564 +message TakeDailyCompensationRewardReq { +} + +// CmdID: 565 +message TakeDailyCompensationRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + TakeDailyCompensationRewardRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; +} + +// CmdID: 566 +message AsMasterPupilCardReq { + MasterPupilCard card = 1; +} + +// CmdID: 567 +message AsMasterPupilCardRsp { + MasterPupilRetcode.Retcode retcode = 1; + uint32 cd_end_time = 2; +} + +// CmdID: 568 +message GetMasterPupilDataReq { + uint32 type = 1; + uint32 time = 2; +} + +// CmdID: 569 +message GetMasterPupilDataRsp { + MasterPupilRetcode.Retcode retcode = 1; + uint32 type = 2; + repeated MasterPupilData data_list = 3; + uint32 dismissed_graduated_pupil_num = 4; +} + +// CmdID: 570 +message AskForMasterOrPupilReq { + MasterPupilType type = 1; + uint32 ask_uid = 2; + uint32 time = 3; +} + +// CmdID: 571 +message AskForMasterOrPupilRsp { + MasterPupilRetcode.Retcode retcode = 1; + MasterPupilType type = 2; + uint32 ask_uid = 3; +} + +// CmdID: 572 +message DealMasterPupilReq { + uint32 uid = 1; + MasterPupilOpType op = 2; + MasterPupilType type = 3; + uint32 time = 4; + string nickname = 5; +} + +// CmdID: 573 +message DealMasterPupilRsp { + MasterPupilRetcode.Retcode retcode = 1; + uint32 uid = 2; + MasterPupilOpType op = 3; + MasterPupilType type = 4; +} + +// CmdID: 574 +message MasterPupilEvalReq { + uint32 uid = 1; + uint32 star = 2; + uint32 step_id = 3; + string comment = 4; + uint32 level = 5; + string nickname = 6; + MasterPoolData pool_reward = 7; +} + +// CmdID: 575 +message MasterPupilEvalRsp { + MasterPupilRetcode.Retcode retcode = 1; + uint32 uid = 2; + uint32 star = 3; + uint32 step_id = 4; + string comment = 5; + MasterPoolData pool_reward = 6; + uint32 master_score = 7; +} + +// CmdID: 576 +message GetMasterFameRewardReq { + uint32 level = 1; +} + +// CmdID: 577 +message GetMasterFameRewardRsp { + MasterPupilRetcode.Retcode retcode = 1; + uint32 level = 2; + repeated RewardData reward_list = 3; +} + +// CmdID: 578 +message MasterPupilCardReportReq { + MasterPupilCard card = 1; +} + +// CmdID: 583 +message ActivateTrialAvatarReq { + uint32 sample_id = 1; +} + +// CmdID: 584 +message ActivateTrialAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + REPEATE_ACTIVATE = 2; + MATERIAL_LACK = 3; + TYPE_ERROR = 4; + LEVEL_LIMIT = 5; + } + + ActivateTrialAvatarRsp.Retcode retcode = 1; + TrialAvatar avatar = 2; +} + +// CmdID: 585 +message GetTrialAvatarReq { +} + +// CmdID: 586 +message GetTrialAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetTrialAvatarRsp.Retcode retcode = 1; + repeated TrialAvatar avatar_list = 2; + bool is_all_update = 3; +} + +// CmdID: 587 +message GetMasterPupilCardReq { +} + +// CmdID: 588 +message GetMasterPupilCardRsp { + MasterPupilRetcode.Retcode retcode = 1; + MasterPupilCard card = 2; +} + +// CmdID: 589 +message MasterPupilMsgNotify { + uint32 target_uid = 1; + MasterPupilEventType event = 2; + MasterPupilEventData data = 3; +} + +// CmdID: 590 +message GetFrameDataReq { +} + +message FrameData { + uint32 id = 1; + uint32 expire_time = 2; +} + +// CmdID: 591 +message GetFrameDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetFrameDataRsp.Retcode retcode = 1; + repeated FrameData frame_list = 2; + bool is_all = 3; +} + +// CmdID: 592 +message SetFrameUseReq { + uint32 frame_id = 1; +} + +// CmdID: 593 +message SetFrameUseRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + SetFrameUseRsp.Retcode retcode = 1; + uint32 frame_id = 2; +} + +// CmdID: 601 +message GetDormDataReq { + DormDataType data_type = 1; +} + +// CmdID: 602 +message GetDormDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetDormDataRsp.Retcode retcode = 1; + DormDataType data_type = 2; + repeated DormHouse house_list = 3; + repeated uint32 finish_talk_plot_id_list = 4; + repeated DepotFurniture depot_furniture_list = 5; + uint32 level_up_house_id = 6; + uint32 level_up_end_time = 7; + uint32 level_up_end_house_id = 8; + DormFacilityData facility_data = 9; + repeated DormEvent event_list = 10; + uint32 show_house = 11; + uint32 show_room = 12; + uint32 visit_avatar = 13; + bool is_allow_visit = 14; + uint32 last_take_dorm_daily_stamina_time = 15; + repeated uint32 unlock_avatar_list = 16; +} + +// CmdID: 603 +message GetDormHouseReq { + repeated uint32 house_id_list = 1; +} + +// CmdID: 604 +message GetDormHouseRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HOUSE_NOT_EXIST = 2; + } + + GetDormHouseRsp.Retcode retcode = 1; + repeated DormHouse house_list = 2; +} + +// CmdID: 605 +message EditDormRoomReq { + uint32 house_id = 1; + uint32 room_id = 2; + repeated Furniture furniture_list = 3; +} + +// CmdID: 606 +message EditDormRoomRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ROOM_NOT_EXIST = 2; + FURNITURE_LACK = 3; + EFFECT_LACK = 4; + } + + EditDormRoomRsp.Retcode retcode = 1; +} + +// CmdID: 607 +message GetDepotFurnitureReq { + repeated uint32 furniture_id_list = 1; +} + +// CmdID: 608 +message GetDepotFurnitureRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetDepotFurnitureRsp.Retcode retcode = 1; + repeated DepotFurniture depot_furniture_list = 2; +} + +// CmdID: 609 +message UnlockDormHouseReq { + uint32 house_id = 1; +} + +// CmdID: 610 +message UnlockDormHouseRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + REPEAT_UNLOCK = 2; + MATERIAL_LIMIT = 3; + LEVEL_LIMIT = 4; + } + + UnlockDormHouseRsp.Retcode retcode = 1; + DormHouse house = 2; +} + +// CmdID: 611 +message SetDormAvatarReq { + uint32 house_id = 1; + repeated DormRoomAvatar room_avatar_list = 2; +} + +// CmdID: 612 +message SetDormAvatarRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HOUSE_NOT_EXIST = 2; + ROOM_NOT_EXIST = 3; + AVATAR_NOT_EXIST = 4; + AVATAR_LIMIT = 5; + } + + SetDormAvatarRsp.Retcode retcode = 1; +} + +// CmdID: 613 +message LevelUpDormReq { + uint32 house_id = 1; + uint32 target_level = 2; +} + +// CmdID: 614 +message LevelUpDormRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + BUSY = 2; + HOUSE_NOT_EXIST = 3; + LEVEL_ERROR = 4; + COMFORT_LIMIT = 5; + MATERIAL_LIMIT = 6; + } + + LevelUpDormRsp.Retcode retcode = 1; + uint32 level_up_house_id = 2; + uint32 level_up_end_time = 3; +} + +// CmdID: 615 +message SetDormNameReq { + uint32 house_id = 1; + uint32 room_id = 2; + string name = 3; +} + +// CmdID: 616 +message SetDormNameRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HOUSE_NOT_EXIST = 2; + ROOM_NOT_EXIST = 3; + FORMAT_ERROR = 4; + SENSITIVE_WORDS = 5; + NAME_REPEAT = 6; + IN_AUDIT = 7; + IN_CD = 8; + } + + SetDormNameRsp.Retcode retcode = 1; + uint32 cd_end_time = 2; +} + +// CmdID: 617 +message FinishDormEventReq { + uint32 event_id = 1; + uint32 avatar_id = 2; +} + +// CmdID: 618 +message FinishDormEventRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + CONDITION_LIMIT = 2; + } + + FinishDormEventRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; + repeated DropItem drop_item_list = 3; +} + +// CmdID: 619 +message GetHasGotFurnitureIdListReq { +} + +// CmdID: 620 +message GetHasGotFurnitureIdListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetHasGotFurnitureIdListRsp.Retcode retcode = 1; + repeated uint32 furniture_id_list = 2; + repeated uint32 has_unlock_furniture_id_list = 3; +} + +// CmdID: 621 +message BuyFurnitureReq { + repeated DepotFurniture furniture_list = 1; +} + +// CmdID: 622 +message BuyFurnitureRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LOCK = 2; + HCOIN_LACK = 3; + SCOIN_LACK = 4; + MATERIAL_LACK = 5; + KEEP_LIMIT = 6; + } + + BuyFurnitureRsp.Retcode retcode = 1; +} + +// CmdID: 633 +message GetOtherDormDataReq { + uint32 target_uid = 1; + uint32 visit_avatar = 2; + uint32 level = 3; + string name = 4; +} + +// CmdID: 634 +message GetOtherDormDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LEVEL_LIMIT = 2; + VISIT_FORBID = 3; + TARGET_ERROR = 4; + } + + GetOtherDormDataRsp.Retcode retcode = 1; + uint32 target_uid = 2; + DormHouse house = 3; + uint32 show_room = 4; + uint32 visit_avatar = 5; + uint32 be_liked_num = 6; + repeated DormVisitRecord record_list = 7; + uint32 be_visit_num = 8; + bool is_receive_like_limit = 9; + bool is_has_liked = 10; + bool is_send_like_limit = 11; + repeated DormFacility facility_list = 12; + uint32 comfort_value = 13; +} + +// CmdID: 635 +message SetDormSnsInfoReq { + uint32 show_house = 1; + uint32 show_room = 2; + uint32 visit_avatar = 3; + bool is_allow_visit = 4; +} + +// CmdID: 636 +message SetDormSnsInfoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + HOUSE_NOT_EXIST = 2; + ROOM_NOT_EXIST = 3; + AVATAR_NOT_EXIST = 4; + } + + SetDormSnsInfoRsp.Retcode retcode = 1; +} + +// CmdID: 637 +message GetDormSnsDataReq { +} + +// CmdID: 638 +message GetDormSnsDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LEVEL_LIMIT = 2; + } + + GetDormSnsDataRsp.Retcode retcode = 1; + uint32 be_liked_num = 2; + repeated DormVisitRecord record_list = 3; + uint32 be_visit_num = 4; +} + +// CmdID: 639 +message LikeDormReq { + uint32 target_uid = 1; +} + +// CmdID: 640 +message LikeDormRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LEVEL_LIMIT = 2; + HAS_LIKED = 3; + SEND_LIKE_LIMIT = 4; + RECEIVE_LIKE_LIMIT = 5; + } + + LikeDormRsp.Retcode retcode = 1; + uint32 target_uid = 2; + uint32 friends_point = 3; +} + +// CmdID: 641 +message FinishDormTalkReq { + uint32 plot_id = 1; + repeated uint32 avatar_id_list = 2; +} + +// CmdID: 642 +message FinishDormTalkRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + PLOT_ERROR = 2; + PLOT_FINISHED = 3; + } + + FinishDormTalkRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; + repeated DropItem drop_item_list = 3; +} + +// CmdID: 643 +message GetAvatarRollDataReq { + repeated uint32 avatar_id_list = 1; +} + +// CmdID: 644 +message GetAvatarRollDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_NOT_EXIST = 2; + } + + GetAvatarRollDataRsp.Retcode retcode = 1; + repeated AvatarRoll roll_list = 2; + bool is_all = 3; +} + +// CmdID: 645 +message TakeRollRewardReq { + uint32 avatar_id = 1; + uint32 reward_group_id = 2; +} + +// CmdID: 646 +message TakeRollRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_ERROR = 2; + REWARD_ERROR = 3; + PROGRESS_LACK = 4; + REWARD_HAS_TAKE = 5; + } + + TakeRollRewardRsp.Retcode retcode = 1; + repeated RewardData reward_list = 2; +} + +// CmdID: 649 +message ClaimStaminaReq { + uint32 stamina = 1; +} + +// CmdID: 650 +message ClaimStaminaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + FACILITY_LOCK = 2; + STORE_LACK = 3; + POWER_LACK = 4; + STAMINA_EXCEED = 5; + } + + ClaimStaminaRsp.Retcode retcode = 1; + uint32 stamina = 2; +} + +// CmdID: 651 +message GetPupilMissionReq { + uint32 uid = 1; +} + +// CmdID: 652 +message GetPupilMissionRsp { + MasterPupilRetcode.Retcode retcode = 1; + uint32 uid = 2; + uint32 step_id = 3; + repeated Mission mission_list = 4; + MasterPoolData pool_reward = 5; + uint32 time = 6; +} + +// CmdID: 653 +message GetMasterPupilApplyReq { + MasterPupilType type = 1; + uint32 time = 2; +} + +// CmdID: 654 +message GetMasterPupilApplyRsp { + MasterPupilRetcode.Retcode retcode = 1; + MasterPupilType type = 2; + repeated MasterPupilApplyMsg msg_list = 3; + repeated MasterPupilApplyMsg send_msg_list = 4; +} + +// CmdID: 655 +message GetRecommendMasterPupilReq { + MasterPupilType type = 1; + MasterPupilCard card = 2; +} + +// CmdID: 656 +message GetRecommendMasterPupilRsp { + MasterPupilRetcode.Retcode retcode = 1; + MasterPupilType type = 2; + repeated MasterPupilApplyMsg msg_list = 3; +} + +// CmdID: 657 +message GetMasterPupilMainDataReq { + MasterPupilType type = 1; +} + +// CmdID: 658 +message GetMasterPupilMainDataRsp { + MasterPupilRetcode.Retcode retcode = 1; + MasterPupilType type = 2; + MasterMainData master = 3; + PupilMainData pupil = 4; +} + +// CmdID: 659 +message GetPupilEvalDataReq { +} + +// CmdID: 660 +message GetPupilEvalDataRsp { + MasterPupilRetcode.Retcode retcode = 1; + MasterPupilEvalMsg eval_msg = 2; +} + +// CmdID: 662 +message GetMasterRankReq { +} + +// CmdID: 663 +message GetMasterRankRsp { + MasterPupilRetcode.Retcode retcode = 1; + RankShowData rank_data = 2; + uint32 refresh_time = 3; +} + +// CmdID: 664 +message GetOtherMasterPupilReq { + repeated uint32 uid_list = 1; +} + +// CmdID: 665 +message GetOtherMasterPupilRsp { + MasterPupilRetcode.Retcode retcode = 1; + repeated uint32 uid_list = 2; + repeated MasterPupilDetailData master_pupil_list = 3; +} + +// CmdID: 680 +message UnlockFurnitureReq { + uint32 furniture_id = 1; +} + +// CmdID: 681 +message UnlockFurnitureRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + UNLOCK_FORBID = 2; + HAS_UNLOCK = 3; + HCOIN_LACK = 4; + SCOIN_LACK = 5; + MATERIAL_LACK = 6; + } + + UnlockFurnitureRsp.Retcode retcode = 1; +} + +// CmdID: 753 +message GrandKeyLevelUpReq { + uint32 key_id = 1; +} + +// CmdID: 754 +message GrandKeyLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + WEAPON_LEVEL_LIMIT = 2; + MATERIAL_LIMIT = 3; + MAX_LEVEL = 4; + PLAYER_LEVEL_LIMIT = 5; + } + + GrandKeyLevelUpRsp.Retcode retcode = 1; + uint32 key_id = 2; + uint32 level = 3; +} + +// CmdID: 755 +message GrandKeyResetReq { + repeated uint32 key_id_list = 1; +} + +// CmdID: 756 +message GrandKeyResetRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GrandKeyResetRsp.Retcode retcode = 1; + repeated uint32 key_id_list = 2; +} + +// CmdID: 757 +message GrandKeyBreachReq { + uint32 key_id = 1; +} + +// CmdID: 758 +message GrandKeyBreachRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + WEAPON_LIMIT = 2; + } + + GrandKeyBreachRsp.Retcode retcode = 1; + uint32 key_id = 2; + uint32 breach_level = 3; +} + +// CmdID: 759 +message GrandKeyActivateSkillReq { + repeated GrandKeySkill key_list = 1; +} + +// CmdID: 760 +message GrandKeyActivateSkillRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_LIMIT = 2; + REPEAT_ACTIVATE = 3; + SKILL_LOCK = 4; + NUM_LIMIT = 5; + } + + GrandKeyActivateSkillRsp.Retcode retcode = 1; +} + +// CmdID: 761 +message GrandKeyContrastReq { + uint32 unique_id = 1; +} + +// CmdID: 762 +message GrandKeyContrastRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GrandKeyContrastRsp.Retcode retcode = 1; + uint32 unique_id = 2; + uint32 unique_id_after = 3; +} + +// CmdID: 763 +message GrandKeySetSkillReq { + repeated GrandKeySkill key_list = 1; +} + +// CmdID: 764 +message GrandKeySetSkillRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_ACTIVE = 2; + SKILL_LOCKED = 3; + NUM_LIMIT = 4; + } + + GrandKeySetSkillRsp.Retcode retcode = 1; +} + +// CmdID: 765 +message GrandKeyUnlockSkillReq { + repeated GrandKeySkill skill_list = 1; +} + +// CmdID: 766 +message GrandKeyUnlockSkillRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + SKILL_NOT_EXIST = 2; + SKILL_AUTO_UNLOCKED = 3; + NOT_MEET_CONDITION = 4; + SKILL_HAS_UNLOCKED = 5; + } + + GrandKeyUnlockSkillRsp.Retcode retcode = 1; +} + +// CmdID: 801 +message PushClientMsgNotify { + repeated string platform_list = 1; + repeated string uid_list = 2; + repeated string tag_list = 3; + repeated string tag_and_list = 4; + repeated string tag_not_list = 5; + string content = 6; +} + +// CmdID: 802 +message SetPlayerTagNotify { + string uid = 1; + repeated string tag_list = 2; +} + +// CmdID: 803 +message SyncTimeReq { + uint32 seq = 1; +} + +// CmdID: 804 +message SyncTimeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + SyncTimeRsp.Retcode retcode = 1; + uint32 cur_time = 2; + uint32 seq = 3; +} + +// CmdID: 807 +message TakeExtraStoryChallengeModeChapterRewardReq { + uint32 chapter_id = 1; + uint32 difficulty = 2; +} + +// CmdID: 808 +message TakeExtraStoryChallengeModeChapterRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_OPEN = 2; + LEVEL_LIMIT = 3; + DIFFICULTY_NOT_OPEN = 4; + NOT_FINISHED = 5; + HAS_TAKEN = 6; + NO_CHAPTER_REWARD = 7; + } + + TakeExtraStoryChallengeModeChapterRewardRsp.Retcode retcode = 1; + RewardData chapter_reward = 2; +} + +// CmdID: 809 +message GetAvatarBindEquipInChallengeModeReq { + repeated uint32 avatar_id_list = 1; +} + +message AvatarBindEquipData { + uint32 avatar_id = 1; + uint32 weapon_uid = 2; + repeated uint32 stigmata_uid_list = 3; +} + +// CmdID: 810 +message GetAvatarBindEquipInChallengeModeRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetAvatarBindEquipInChallengeModeRsp.Retcode retcode = 1; + repeated AvatarBindEquipData avatar_equip_list = 2; +} + +// CmdID: 813 +message GetGalInteractTriggerEventReq { + uint32 avatar_id = 1; + repeated uint32 event_id_list = 2; +} + +// CmdID: 814 +message GetGalInteractTriggerEventRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_SUCH_AVATAR = 2; + } + + GetGalInteractTriggerEventRsp.Retcode retcode = 1; + uint32 event_id = 2; + uint32 avatar_id = 3; +} + +// CmdID: 815 +message TakeGalInteractTriggerEventReq { + uint32 avatar_id = 1; + uint32 event_id = 2; +} + +// CmdID: 816 +message TakeGalInteractTriggerEventRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_SUCH_AVATAR = 2; + EVENT_ID_ERROR = 3; + } + + TakeGalInteractTriggerEventRsp.Retcode retcode = 1; + uint32 avatar_id = 2; + uint32 event_id = 3; + RewardData reward_data = 4; + DropItem drop_item = 5; +} + +// CmdID: 827 +message AvatarFragmentTransformReq { + uint32 id = 1; + uint32 num = 2; + repeated GenericItemNum fragment_list = 3; +} + +// CmdID: 828 +message AvatarFragmentTransformRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NEED_SSS = 2; + LACK = 3; + FULL = 4; + FEATURE_CLOSED = 5; + } + + AvatarFragmentTransformRsp.Retcode retcode = 1; + uint32 return_id = 2; + uint32 return_num = 3; + repeated GenericItemNum return_list = 4; +} + +// CmdID: 829 +message StageBattleSaveClientDataReq { + uint32 stage_id = 1; + uint32 act_id = 2; + string client_data = 3; +} + +// CmdID: 830 +message StageBattleSaveClientDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ONE_VALID_ID = 2; + STAGE_BEGIN = 3; + } + + StageBattleSaveClientDataRsp.Retcode retcode = 1; +} + +// CmdID: 836 +message TakeExtraStoryLineStoryFinishRewardReq { + uint32 line_id = 1; +} + +// CmdID: 837 +message TakeExtraStoryLineStoryFinishRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_FINISH = 2; + HAS_TAKEN = 3; + } + + TakeExtraStoryLineStoryFinishRewardRsp.Retcode retcode = 1; + uint32 line_id = 2; + RewardData reward_data = 3; +} + +// CmdID: 961 +message UnbindAccountReq { + uint32 account_type = 1; + string account_uid = 2; + string account_token = 3; + string token = 4; +} + +// CmdID: 962 +message UnbindAccountRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + ACCOUNT_VERIFY_ERROR = 2; + ACCOUNT_TYPE_ERROR = 3; + NOT_BIND = 4; + IS_LOGIN = 5; + } + + UnbindAccountRsp.Retcode retcode = 1; +} + +// CmdID: 969 +message SyncDutyNotify { + uint32 daily_duty_point = 1; + repeated uint32 has_take_daily_duty_id_list = 2; + uint32 weekly_duty_point = 3; + repeated uint32 has_take_weekly_duty_id_list = 4; +} + +// CmdID: 970 +message RecallMasterPupilApplicationReq { + uint32 target_uid = 1; + string self_nickname = 2; +} + +// CmdID: 971 +message RecallMasterPupilApplicationRsp { + MasterPupilRetcode.Retcode retcode = 1; +} + +// CmdID: 972 +message SetFriendRemarkReq { + uint32 uid = 1; + string new_remark = 2; + string old_remark = 3; +} + +// CmdID: 973 +message SetFriendRemarkRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_FRIEND = 2; + FORMAT_ERROR = 3; + SENSITIVE_WORDS = 4; + SAME_REMARK = 5; + FEATURE_CLOSED = 6; + IN_AUDIT = 7; + IN_CD = 8; + } + + SetFriendRemarkRsp.Retcode retcode = 1; + uint32 uid = 2; + string remark = 3; + uint32 set_friend_remark_cd_end_time = 4; +} + +// CmdID: 974 +message GetFriendRemarkListReq { +} + +message FriendRemark { + uint32 uid = 1; + string remark = 2; +} + +// CmdID: 975 +message GetFriendRemarkListRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetFriendRemarkListRsp.Retcode retcode = 1; + repeated FriendRemark friend_remark_list = 2; +} + +// CmdID: 976 +message PlayerLevelUpNotify { + uint32 old_level = 1; + uint32 new_level = 2; + RewardData reward_data = 3; +} + +enum CmdTypeTwo { + CMD_TYPE_TWO_NONE = 0; + CMD_GET_MEDAL_DATA_REQ = 449; + CMD_GET_MEDAL_DATA_RSP = 450; + CMD_MEDAL_OP_REQ = 451; + CMD_MEDAL_OP_RSP = 452; + CMD_GET_STAGE_ACT_DIFFICULTY_REQ = 456; + CMD_GET_STAGE_ACT_DIFFICULTY_RSP = 457; + CMD_TAKE_STAGE_ACT_CHALLENGE_REWARD_REQ = 458; + CMD_TAKE_STAGE_ACT_CHALLENGE_REWARD_RSP = 459; + CMD_TAKE_ACTIVITY_CHALLENGE_REWARD_REQ = 460; + CMD_TAKE_ACTIVITY_CHALLENGE_REWARD_RSP = 461; + CMD_GET_PEDIA_REQ = 464; + CMD_GET_PEDIA_RSP = 465; + CMD_MP_GET_MATCH_INFO_REQ = 466; + CMD_MP_GET_MATCH_INFO_RSP = 467; + CMD_MP_CANCEL_MATCH_REQ = 468; + CMD_MP_CANCEL_MATCH_RSP = 469; + CMD_MP_GET_LOBBY_RECOMMEND_REQ = 470; + CMD_MP_GET_LOBBY_RECOMMEND_RSP = 471; + CMD_GET_BUFF_EFFECT_REQ = 476; + CMD_GET_BUFF_EFFECT_RSP = 477; + CMD_EQUIP_SYNTHESIS_REQ = 478; + CMD_EQUIP_SYNTHESIS_RSP = 479; + CMD_GET_PLAYER_CARD_REQ = 480; + CMD_GET_PLAYER_CARD_RSP = 481; + CMD_CHANGE_PLAYER_CARD_REQ = 482; + CMD_CHANGE_PLAYER_CARD_RSP = 483; + CMD_SEND_PLAYER_CARD_MSG = 486; + CMD_RECV_PLAYER_CARD_MSG = 487; + CMD_DEL_PLAYER_CARD_MSG_REQ = 489; + CMD_GET_OTHER_PLAYER_CARD_DATA_REQ = 490; + CMD_GET_OTHER_PLAYER_CARD_DATA_RSP = 491; + CMD_CHANGE_PLAYER_CARD_DATA_NOTIFY = 492; + CMD_SEND_PLAYER_CARD_MSG_RSP = 493; + CMD_GET_BOSS_RUSH_ACTIVITY_REQ = 496; + CMD_GET_BOSS_RUSH_ACTIVITY_RSP = 497; + CMD_CHOOSE_BOSS_RUSH_BUFF_REQ = 498; + CMD_CHOOSE_BOSS_RUSH_BUFF_RSP = 499; + CMD_GET_DELETE_MATERIAL_REQ = 500; + CMD_GET_DELETE_MATERIAL_RSP = 501; + CMD_GET_EXTRA_STORY_CHALLENGE_MODE_DATA_REQ = 502; + CMD_GET_EXTRA_STORY_CHALLENGE_MODE_DATA_RSP = 503; + CMD_RESET_EXTRA_STORY_CHALLENGE_MODE_REQ = 504; + CMD_RESET_EXTRA_STORY_CHALLENGE_MODE_RSP = 505; + CMD_GET_GRAND_KEY_REQ = 506; + CMD_GET_GRAND_KEY_RSP = 507; + CMD_GET_EX_BOSS_SCHEDULE_REQ = 508; + CMD_GET_EX_BOSS_SCHEDULE_RSP = 509; + CMD_GET_EX_BOSS_INFO_REQ = 510; + CMD_GET_EX_BOSS_INFO_RSP = 511; + CMD_TAKE_EX_BOSS_RANK_REWARD_NOTIFY = 516; + CMD_GET_NEW_CONSIGNED_ORDER_DATA_REQ = 517; + CMD_GET_NEW_CONSIGNED_ORDER_DATA_RSP = 518; + CMD_GET_CONSIGNED_REWARD_REQ = 519; + CMD_GET_CONSIGNED_REWARD_RSP = 520; + CMD_CHOOSE_CONSIGNED_REWARD_REQ = 521; + CMD_CHOOSE_CONSIGNED_REWARD_RSP = 522; + CMD_TAKE_CONSIGNED_REWARD_REQ = 523; + CMD_TAKE_CONSIGNED_REWARD_RSP = 524; + CMD_GET_CONSIGNED_REWARD_LOG_REQ = 525; + CMD_GET_CONSIGNED_REWARD_LOG_RSP = 526; + CMD_GET_EX_BOSS_RANK_REQ = 527; + CMD_GET_EX_BOSS_RANK_RSP = 528; + CMD_EX_BOSS_STAGE_BEGIN_REQ = 529; + CMD_EX_BOSS_STAGE_BEGIN_RSP = 530; + CMD_EX_BOSS_STAGE_END_REQ = 531; + CMD_EX_BOSS_STAGE_END_RSP = 532; + CMD_TAKE_EX_BOSS_SCORE_REWARD_NOTIFY = 533; + CMD_OPEN_WEEK_DAY_ACTIVITY_REQ = 534; + CMD_OPEN_WEEK_DAY_ACTIVITY_RSP = 535; + CMD_GET_CHALLENGE_STEP_REWARD_REQ = 536; + CMD_GET_CHALLENGE_STEP_REWARD_RSP = 537; + CMD_ADD_TECH_EXP_REQ = 538; + CMD_ADD_TECH_EXP_RSP = 539; + CMD_TAKE_TECH_COLLECT_REWARD_REQ = 540; + CMD_TAKE_TECH_COLLECT_REWARD_RSP = 541; + CMD_MATERIAL_DELETE_RETURN_REQ = 553; + CMD_TAKE_DAILY_COMPENSATION_REWARD_REQ = 564; + CMD_TAKE_DAILY_COMPENSATION_REWARD_RSP = 565; + CMD_AS_MASTER_PUPIL_CARD_REQ = 566; + CMD_AS_MASTER_PUPIL_CARD_RSP = 567; + CMD_GET_MASTER_PUPIL_DATA_REQ = 568; + CMD_GET_MASTER_PUPIL_DATA_RSP = 569; + CMD_ASK_FOR_MASTER_PUPIL_REQ = 570; + CMD_ASK_FOR_MASTER_PUPIL_RSP = 571; + CMD_DEAL_MASTER_PUPIL_REQ = 572; + CMD_DEAL_MASTER_PUPIL_RSP = 573; + CMD_MASTER_PUPIL_EVA_REQ = 574; + CMD_MASTER_PUPIL_EVA_RSP = 575; + CMD_GET_MASTER_FAME_REWARD_REQ = 576; + CMD_GET_MASTER_FAME_REWARD_RSP = 577; + CMD_MASTER_PUPIL_CARD_REPORT_REQ = 578; + CMD_ACTIVATE_TRIAL_AVATAR_REQ = 583; + CMD_ACTIVATE_TRIAL_AVATAR_RSP = 584; + CMD_GET_TRIAL_AVATAR_REQ = 585; + CMD_GET_TRIAL_AVATAR_RSP = 586; + CMD_GET_MASTER_PUPIL_CARD_REQ = 587; + CMD_GET_MASTER_PUPIL_CARD_RSP = 588; + CMD_MASTER_PUPIL_NOTIFY = 589; + CMD_GET_FRAME_DATA_REQ = 590; + CMD_GET_FRAME_DATA_RSP = 591; + CMD_SET_USE_FRAME_REQ = 592; + CMD_SET_USE_FRAME_RSP = 593; + CMD_GET_DORM_DATA_REQ = 601; + CMD_GET_DORM_DATA_RSP = 602; + CMD_GET_DORM_HOUSE_REQ = 603; + CMD_GET_DORM_HOUSE_RSP = 604; + CMD_EDIT_DORM_ROOM_REQ = 605; + CMD_EDIT_DORM_ROOM_RSP = 606; + CMD_GET_DEPOT_FURNITURE_REQ = 607; + CMD_GET_DEPOT_FURNITURE_RSP = 608; + CMD_UNLOCK_DORM_HOUSE_REQ = 609; + CMD_UNLOCK_DORM_HOUSE_RSP = 610; + CMD_SET_DORM_AVATAR_REQ = 611; + CMD_SET_DORM_AVATAR_RSP = 612; + CMD_LEVEL_UP_DORM_REQ = 613; + CMD_LEVEL_UP_DORM_RSP = 614; + CMD_SET_DORM_NAME_REQ = 615; + CMD_SET_DORM_NAME_RSP = 616; + CMD_FINISH_DORM_EVENT_REQ = 617; + CMD_FINISH_DORM_EVENT_RSP = 618; + CMD_GET_HAS_GOT_FURNITURE_ID_LIST_REQ = 619; + CMD_GET_HAS_GOT_FURNITURE_ID_LIST_RSP = 620; + CMD_BUY_FURNITURE_REQ = 621; + CMD_BUY_FURNITURE_RSP = 622; + CMD_GET_OTHER_DORM_DATA_REQ = 633; + CMD_GET_OTHER_DORM_DATA_RSP = 634; + CMD_SET_DORM_SNS_INFO_REQ = 635; + CMD_SET_DORM_SNS_INFO_RSP = 636; + CMD_GET_DORM_SNS_DATA_REQ = 637; + CMD_GET_DORM_SNS_DATA_RSP = 638; + CMD_LIKE_DORM_REQ = 639; + CMD_LIKE_DORM_RSP = 640; + CMD_FINISH_DORM_TALK_REQ = 641; + CMD_FINISH_DORM_TALK_RSP = 642; + CMD_GET_AVATAR_ROLL_DATA_REQ = 643; + CMD_GET_AVATAR_ROLL_DATA_RSP = 644; + CMD_TAKE_ROLL_REWARD_REQ = 645; + CMD_TAKE_ROLL_REWARD_RSP = 646; + CMD_CLAIM_STAMINA_REQ = 649; + CMD_CLAIM_STAMINA_RSP = 650; + CMD_GET_PUPIL_MISSION_REQ = 651; + CMD_GET_PUPIL_MISSION_RSP = 652; + CMD_GET_MASTER_PUPIL_APPLY_REQ = 653; + CMD_GET_MASTER_PUPIL_APPLY_RSP = 654; + CMD_GET_RECOMMEND_MASTER_PUPIL_REQ = 655; + CMD_GET_RECOMMEND_MASTER_PUPIL_RSP = 656; + CMD_GET_MASTER_PUPIL_MAIN_DATA_REQ = 657; + CMD_GET_MASTER_PUPIL_MAIN_DATA_RSP = 658; + CMD_GET_PUPIL_EVAL_DATA_REQ = 659; + CMD_GET_PUPIL_EVAL_DATA_RSP = 660; + CMD_GET_MASTER_RANK_REQ = 662; + CMD_GET_MASTER_RANK_RSP = 663; + CMD_GET_OTHER_MASTER_PUPIL_REQ = 664; + CMD_GET_OTHER_MASTER_PUPIL_RSP = 665; + CMD_UNLOCK_FURNITURE_REQ = 680; + CMD_UNLOCK_FURNITURE_RSP = 681; + CMD_GRAND_KEY_LEVEL_UP_REQ = 753; + CMD_GRAND_KEY_LEVEL_UP_RSP = 754; + CMD_GRAND_KEY_RESET_REQ = 755; + CMD_GRAND_KEY_RESET_RSP = 756; + CMD_GRAND_KEY_BREACH_REQ = 757; + CMD_GRAND_KEY_BREACH_RSP = 758; + CMD_GRAND_KEY_ACTIVATE_SKILL_REQ = 759; + CMD_GRAND_KEY_ACTIVATE_SKILL_RSP = 760; + CMD_GRAND_KEY_CONTRAST_REQ = 761; + CMD_GRAND_KEY_CONTRAST_RSP = 762; + CMD_GRAND_KEY_SET_SKILL_REQ = 763; + CMD_GRAND_KEY_SET_SKILL_RSP = 764; + CMD_GRAND_KEY_UNLOCK_SKILL_REQ = 765; + CMD_GRAND_KEY_UNLOCK_SKILL_RSP = 766; + CMD_GET_STAGE_DROP_LIMIT_ACTIVITY_REQ = 776; + CMD_GET_STAGE_DROP_LIMIT_ACTIVITY_RSP = 777; + CMD_PUSH_CLIENT_MSG_NOTIFY = 801; + CMD_SET_PLAYER_TAG_NOTIFY = 802; + CMD_SYNC_TIME_REQ = 803; + CMD_SYNC_TIME_RSP = 804; + CMD_TAKE_EXTRA_STORY_CHALLENGE_MODE_CHAPTER_REWARD_REQ = 807; + CMD_TAKE_EXTRA_STORY_CHALLENGE_MODE_CHAPTER_REWARD_RSP = 808; + CMD_GET_AVATAR_BIND_EQUIP_IN_CHALLENGE_MODE_REQ = 809; + CMD_GET_AVATAR_BIND_EQUIP_IN_CHALLENGE_MODE_RSP = 810; + CMD_GET_GALINTERACT_TRIGGER_EVENT_REQ = 813; + CMD_GET_GALINTERACT_TRIGGER_EVENT_RSP = 814; + CMD_TAKE_GALINTERACT_TRIGGER_EVENT_REQ = 815; + CMD_TAKE_GALINTERACT_TRIGGER_EVENT_RSP = 816; + CMD_AVATAE_FRAGMENT_TRANSFORM_REQ = 827; + CMD_AVATAE_FRAGMENT_TRANSFORM_RSP = 828; + CMD_STAGE_BATTLE_SAVE_CLIENT_DATA_REQ = 829; + CMD_STAGE_BATTLE_SAVE_CLIENT_DATA_RSP = 830; + CMD_TAKE_EXTRA_STORY_LINE_STORY_FINISH_REWARD_REQ = 836; + CMD_TAKE_EXTRA_STORY_LINE_STORY_FINISH_REWARD_RSP = 837; + CMD_UNBIND_ACCOUNT_REQ = 961; + CMD_UNBIND_ACCOUNT_RSP = 962; + CMD_GET_STAGE_CHAPTER_REQ = 965; + CMD_GET_STAGE_CHAPTER_RSP = 966; + CMD_TAKE_CHAPTER_CHALLENGE_REWARD_REQ = 967; + CMD_TAKE_CHAPTER_CHALLENGE_REWARD_RSP = 968; + CMD_SYNC_DUTY_NOTIFY = 969; + CMD_RECALL_MASTER_PUPIL_APPLICATION_REQ = 970; + CMD_RECALL_MASTER_PUPIL_APPLICATION_RSP = 971; + CMD_SET_FRIEND_REMARK_REQ = 972; + CMD_SET_FRIEND_REMARK_RSP = 973; + CMD_GET_FRIEND_REMARK_LIST_REQ = 974; + CMD_GET_FRIEND_REMARK_LIST_RSP = 975; + CMD_PLAYER_LEVEL_UP_NOTIFY = 976; +} + +// CmdID: 5200 +message UltraEndlessGetTopRankReq { + uint32 schedule_id = 1; +} + +// CmdID: 5201 +message UltraEndlessGetTopRankRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + UltraEndlessGetTopRankRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + RankShowData rank_data = 3; +} + +// CmdID: 5202 +message UltraEndlessGetMainDataReq { + uint32 player_level = 1; + uint32 cur_schedule_id = 2; + uint32 max_stage_score = 3; + LineupBriefInfo lineup_info = 4; +} + +message UltraEndlessPlayer { + uint32 uid = 1; + uint32 group_level = 2; + uint32 cup_num = 3; + uint32 max_stage_score = 4; + uint32 score_update_time = 5; + LineupBriefInfo lineup_info = 6; +} + +message UltraEndlessFloor { + uint32 floor = 1; + uint32 max_score = 2; +} + +message UltraEndlessSite { + uint32 site_id = 1; + repeated UltraEndlessFloor floor_list = 2; + uint32 max_score_cost_time = 3; +} + +message OldEndlessPlayerSettle { + uint32 uid = 1; + uint32 begin_time = 2; + uint32 endless_type = 3; + uint32 group_level = 4; +} + +message UltraEndlessSettleInfo { + uint32 schedule_id = 1; + uint32 group_level = 2; + uint32 max_stage_score = 3; + uint32 group_member_num = 4; + uint32 rank = 5; + uint32 cup_num_before = 6; + uint32 cup_num_after_schedule_settle = 7; + uint32 cup_num_after_season_settle = 8; + uint32 cup_num_before_season_settle = 9; + uint32 cup_num = 10; + repeated OldEndlessPlayerSettle old_endless_settle_list = 11; + uint32 mmr_score = 12; + uint32 buffer_cup_before_schedule_settle = 13; + uint32 buffer_cup = 15; +} + +message UltraEndlessMainData { + uint32 schedule_id = 1; + uint32 effect_time = 2; + uint32 begin_time = 3; + uint32 end_time = 4; + uint32 close_time = 5; + uint32 last_schedule_id = 6; + repeated UltraEndlessSite site_list = 8; + uint32 last_settle_top_rank_schedule_id = 10; + uint32 cur_season_id = 11; + uint32 last_settle_season_id = 12; +} + +// CmdID: 5203 +message UltraEndlessGetMainDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + PLAYER_LEVEL_LACK = 2; + NOT_OPEN = 3; + IN_OLD_ENDLESS = 4; + FEATURE_CLOSED = 5; + } + + UltraEndlessGetMainDataRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + uint32 group_level = 3; + uint32 top_group_level = 4; + uint32 cup_num = 5; + UltraEndlessMainData main_data = 6; + UltraEndlessSettleInfo last_settle_info = 7; + bool is_just_join = 8; + uint32 dynamic_hard_level = 9; + repeated UltraEndlessPlayer endless_player_list = 10; + repeated PlayerFriendBriefData brief_data_list = 11; +} + +// CmdID: 5205 +message UltraEndlessLastSettleRewardNotify { + UltraEndlessSettleInfo settle_info = 1; + RewardData settle_reward_data = 2; + RewardData group_level_reward_data = 3; +} + +// CmdID: 5206 +message UltraEndlessReportSiteFloorReq { + uint32 site_id = 1; + uint32 floor = 2; + uint32 score = 3; + uint32 cost_time = 4; + uint32 total_cost_time = 5; + repeated uint32 avatar_id_list = 6; + repeated uint32 elf_id_list = 7; + bool is_up_floor = 8; +} + +// CmdID: 5207 +message UltraEndlessReportSiteFloorRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + PRE_NOT_FINISH = 2; + NOT_IN_SCHEDULE = 3; + } + + UltraEndlessReportSiteFloorRsp.Retcode retcode = 1; + uint32 site_id = 2; + uint32 floor = 3; + bool is_up_floor = 4; +} + +// CmdID: 5210 +message UltraEndlessBriefDataNotify { + UltraEndlessMainData main_data = 1; +} + +// CmdID: 5211 +message UltraEndlessEnterSiteReq { + uint32 site_id = 1; +} + +// CmdID: 5212 +message UltraEndlessEnterSiteRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_SCHEDULE = 2; + PRE_NOT_FINISH = 3; + ALREADY_FINISH = 4; + } + + UltraEndlessEnterSiteRsp.Retcode retcode = 1; + uint32 site_id = 2; +} + +// CmdID: 5215 +message UltraEndlessTopRankRewardReq { +} + +// CmdID: 5216 +message UltraEndlessTopRankRewardRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_IN_RANK = 2; + ALREADY_TAKEN = 3; + } + + UltraEndlessTopRankRewardRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + uint32 rank = 3; + RewardData reward_data = 4; +} + +// CmdID: 5219 +message UltraEndlessClientReportNotify { + enum ClientReportType { + CLIENT_REPORT_TYPE_NONE = 0; + CLIENT_REPORT_TYPE_STAGE_BEGIN = 1; + } + + UltraEndlessClientReportNotify.ClientReportType client_report_type = 1; + string client_transaction_str = 2; + string report_msg = 3; +} + +// CmdID: 5220 +message UltraEndlessFirstJoinRewardNotify { + RewardData medal_reward = 1; + RewardData promote_reward = 2; +} + +// CmdID: 5298 +message UltraEndlessCommonNotify { + enum EventType { + EVENT_NONE = 0; + EVENT_IN_SETTLE = 1; + } + + UltraEndlessCommonNotify.EventType event_type = 1; +} + +enum CmdTypeUltraendless { + CMD_TYPE_ULTRAENDLESS_NONE = 0; + CMD_ULTRA_ENDLESS_GET_TOP_RANK_REQ = 5200; + CMD_ULTRA_ENDLESS_GET_TOP_RANK_RSP = 5201; + CMD_ULTRA_ENDLESS_GET_MAIN_DATA_REQ = 5202; + CMD_ULTRA_ENDLESS_GET_MAIN_DATA_RSP = 5203; + CMD_ULTRA_ENDLESS_LAST_SETTLE_REWARD_NOTIFY = 5205; + CMD_ULTRA_ENDLESS_REPORT_SITE_FLOOR_REQ = 5206; + CMD_ULTRA_ENDLESS_REPORT_SITE_FLOOR_RSP = 5207; + CMD_ULTRA_ENDLESS_BRIEF_DATA_NOTIFY = 5210; + CMD_ULTRA_ENDLESS_ENTER_SITE_REQ = 5211; + CMD_ULTRA_ENDLESS_ENTER_SITE_RSP = 5212; + CMD_ULTRA_ENDLESS_GROUP_LEVEL_REWARD_REQ = 5213; + CMD_ULTRA_ENDLESS_GROUP_LEVEL_REWARD_RSP = 5214; + CMD_ULTRA_ENDLESS_TOP_RANK_REWARD_REQ = 5215; + CMD_ULTRA_ENDLESS_TOP_RANK_REWARD_RSP = 5216; + CMD_ULTRA_ENDLESS_CLIENT_REPORT_NOTIFY = 5219; + CMD_ULTRA_ENDLESS_FIRST_JOIN_REWARD_NOTIFY = 5220; + CMD_ULTRA_ENDLESS_COMMON_NOTIFY = 5298; + CMD_ULTRA_ENDLESS_DUMMY = 5299; +} + +enum UltraEndlessSiteTag { + ULTRA_ENDLESS_SITE_TAG_NONE = 0; + ULTRA_ENDLESS_SITE_TAG_NORMAL_1 = 1; + ULTRA_ENDLESS_SITE_TAG_NORMAL_2 = 2; + ULTRA_ENDLESS_SITE_TAG_BOSS = 3; + ULTRA_ENDLESS_SITE_TAG_BRANCH = 4; +} + +message VirtualTrainCommon { + enum GroupType { + GROUP_TYPE_NONE = 0; + GROUP_CHAPTER = 1; + GROUP_RPG_TALE = 2; + } + + enum ItemType { + ITEM_NONE = 0; + ITEM_AVATAR = 1; + ITEM_WEAPON = 2; + ITEM_STIGMATA = 3; + ITEM_BUFF = 4; + } + + enum VirtualAvatarType { + VIRTUAL_AVATAR_NONE = 0; + VIRTUAL_AVATAR_NORMAL = 1; + VIRTUAL_AVATAR_QAVATAR = 2; + } + +} + +message VirtualTrainCustom { + uint32 custom_id = 1; + uint32 level = 2; + uint32 choosed_index = 3; + uint32 max_index = 4; +} + +message VirtualTrainRole { + uint32 virtual_role_id = 1; + repeated VirtualTrainCustom custom_list = 2; +} + +message VirtualAvatarGroup { + uint32 group_id = 1; + repeated VirtualAvatar virtual_avatar_list = 2; + repeated uint32 virtual_weapon_id_list = 3; + repeated uint32 virtual_stigmata_id_list = 4; + repeated uint32 virtual_avatar_team_list = 5; + repeated VirtualTrainRole virtual_role_list = 6; + bool is_locked = 7; +} + +message VirtualAvatarGroupBriefData { + uint32 group_id = 1; + uint32 chapter_id = 2; +} + +// CmdID: 3502 +message GetVirtualAvatarGroupDetailReq { + uint32 group_id = 1; +} + +// CmdID: 3503 +message GetVirtualAvatarGroupDetailRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetVirtualAvatarGroupDetailRsp.Retcode retcode = 1; + VirtualAvatarGroup virtual_avatar_group = 2; +} + +// CmdID: 3504 +message SetVirtualAvatarTeamReq { + uint32 group_id = 1; + repeated uint32 avatar_team_list = 2; +} + +// CmdID: 3505 +message SetVirtualAvatarTeamRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_NOT_EXIST = 2; + AVATAR_REPEATED = 3; + AVATAR_EMPTY = 4; + TEAM_SIZE_LIMIT = 5; + LOCK = 6; + } + + SetVirtualAvatarTeamRsp.Retcode retcode = 1; + uint32 group_id = 2; + repeated uint32 avatar_team_list = 3; +} + +// CmdID: 3506 +message DressVirtualEquipmentReq { + uint32 group_id = 1; + uint32 virtual_avatar_id = 2; + uint32 equip_type = 3; + uint32 slot = 4; + uint32 virtual_equip_id = 5; +} + +// CmdID: 3507 +message DressVirtualEquipmentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_NOT_EXIST = 2; + EQUIP_NOT_EXIST = 3; + HAVE_DRESSED = 4; + } + + DressVirtualEquipmentRsp.Retcode retcode = 1; + uint32 group_id = 2; + VirtualAvatar virtual_avatar = 3; +} + +message VirtualGachaPool { + uint32 pool_id = 1; + uint32 gacha_times = 2; + uint32 total_times = 3; +} + +message VirtualGacha { + enum Status { + NORMAL = 0; + EMPTY = 1; + } + + uint32 box_id = 1; + VirtualGacha.Status status = 2; + repeated VirtualGachaPool pool_list = 3; +} + +// CmdID: 3508 +message VirtualGachaReq { + uint32 box_id = 1; + VirtualGachaType gacha_type = 2; +} + +// CmdID: 3509 +message VirtualGachaRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + WAIT_CHOOSE = 2; + MATERIAL_LACK = 3; + EMPTY = 4; + } + + VirtualGachaRsp.Retcode retcode = 1; + uint32 item_id = 2; + repeated uint32 candidate_item_id_list = 3; + VirtualGacha gacha_status = 4; + repeated uint32 item_list = 5; +} + +// CmdID: 3510 +message GetVirtualGachaStatusReq { + uint32 group_id = 1; +} + +// CmdID: 3511 +message GetVirtualGachaStatusRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetVirtualGachaStatusRsp.Retcode retcode = 1; + repeated VirtualGacha gacha_list = 2; + uint32 group_id = 3; + uint32 candidate_gacha_box_id = 4; + repeated uint32 candidate_item_id_list = 5; + uint32 candidate_gacha_pool_id = 6; +} + +// CmdID: 3512 +message VirtualAvatarGroupChangeNotify { + VirtualAvatarGroup virtual_avatar_group = 1; +} + +// CmdID: 3513 +message VirtualTrainDirectGachaNotify { + uint32 group_id = 1; + uint32 item_id = 2; +} + +// CmdID: 3514 +message ChooseVirtualTrainGachaItemReq { + uint32 group_id = 1; + uint32 item_id = 2; +} + +// CmdID: 3515 +message ChooseVirtualTrainGachaItemRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NO_CANDIDATE = 2; + ITEM_ERROR = 3; + } + + ChooseVirtualTrainGachaItemRsp.Retcode retcode = 1; + uint32 group_id = 2; + uint32 item_id = 3; +} + +// CmdID: 3516 +message ChooseVirtualDefaultAvatarNotify { + uint32 group_id = 1; + repeated uint32 candidate_avatar_list = 2; +} + +// CmdID: 3517 +message SyncVirtualGachaStatusNotify { + uint32 group_id = 1; + VirtualGacha gacha = 2; +} + +// CmdID: 3518 +message VirtualTrainRoleCustomLevelUpReq { + uint32 group_id = 1; + uint32 virtual_role_id = 2; + uint32 custom_id = 3; +} + +// CmdID: 3519 +message VirtualTrainRoleCustomLevelUpRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + MATERIAL_NOT_ENOUGH = 2; + LEVEL_MAX = 3; + ROLE_NOT_EXIST = 4; + STAGE_NOT_FINISH = 5; + PRE_CUSTOM_LEVEL_LACK = 6; + } + + VirtualTrainRoleCustomLevelUpRsp.Retcode retcode = 1; + uint32 group_id = 2; + uint32 virtual_role_id = 3; + uint32 custom_id = 4; + uint32 level = 5; +} + +// CmdID: 3520 +message VirtualTrainRoleCustomChooseReq { + uint32 group_id = 1; + uint32 virtual_role_id = 2; + uint32 custom_id = 3; + uint32 index = 4; +} + +// CmdID: 3521 +message VirtualTrainRoleCustomChooseRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + LOCKED = 2; + ROLE_NOT_EXIST = 3; + } + + VirtualTrainRoleCustomChooseRsp.Retcode retcode = 1; +} + +// CmdID: 3522 +message VirtualTrainEvoReq { + uint32 group_id = 1; + uint32 evo_avatar_id = 2; + bool is_quick_evo = 3; +} + +// CmdID: 3523 +message VirtualTrainEvoRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + AVATAR_NOT_EXIST = 2; + NO_NEXT_AVATAR = 3; + CAN_NOT_EVO = 4; + MATERIAL_LACK = 5; + EVO_LIMIT = 6; + } + + VirtualTrainEvoRsp.Retcode retcode = 1; + uint32 group_id = 2; + uint32 evo_avatar_id = 3; +} + +message VirtualTrainItemDrop { + uint32 item_id = 1; + uint32 item_num = 2; + repeated Material split_material_list = 3; +} + +// CmdID: 3524 +message VirtualTrainItemDropNotify { + enum DropSrcType { + DROP_SRC_NONE = 0; + DROP_SRC_RPG_STAGE = 1; + DROP_SRC_RPG_MISSION = 2; + DROP_SRC_RPG_QAVATAR = 3; + DROP_SRC_GM = 10; + } + + uint32 group_id = 1; + VirtualTrainItemDropNotify.DropSrcType drop_src_type = 2; + repeated VirtualTrainItemDrop item_drop_list = 3; + uint32 stage_id = 4; +} + +enum CmdTypeVirtualtrain { + CMD_TYPE_VIRTUALTRAIN_NONE = 0; + CMD_GET_VIRTUAL_AVATAR_GROUP_DETAIL_REQ = 3502; + CMD_GET_VIRTUAL_AVATAR_GROUP_DETAIL_RSP = 3503; + CMD_SET_VIRTUAL_AVATAR_TEAM_REQ = 3504; + CMD_SET_VIRTUAL_AVATAR_TEAM_RSP = 3505; + CMD_DRESS_VIRTUAL_EQUIPMENT_REQ = 3506; + CMD_DRESS_VIRTUAL_EQUIPMENT_RSP = 3507; + CMD_VIRTUAL_GACHA_REQ = 3508; + CMD_VIRTUAL_GACHA_RSP = 3509; + CMD_GET_VIRTUAL_GACHA_STATUS_REQ = 3510; + CMD_GET_VIRTUAL_GACHA_STATUS_RSP = 3511; + CMD_VIRTUAL_AVATAR_GROUP_CHANGE_NOTIFY = 3512; + CMD_VIRTUAL_TRAIN_DIRECT_GACHA_NOTIFY = 3513; + CMD_CHOOSE_VIRTUAL_GACHA_ITEM_REQ = 3514; + CMD_CHOOSE_VIRTUAL_GACHA_ITEM_RSP = 3515; + CMD_CHOOSE_VIRTUAL_DEFAULT_AVATAR_NOTIFY = 3516; + CMD_SYNC_VIRTUAL_GACHA_STATUS_NOTIFY = 3517; + CMD_VIRTUAL_TRAIN_ROLE_CUSTOM_LEVEL_UP_REQ = 3518; + CMD_VIRTUAL_TRAIN_ROLE_CUSTOM_LEVEL_UP_RSP = 3519; + CMD_VIRTUAL_TRAIN_ROLE_CUSTOM_CHOOSE_REQ = 3520; + CMD_VIRTUAL_TRAIN_ROLE_CUSTOM_CHOOSE_RSP = 3521; + CMD_VIRTUAL_TRAIN_EVO_REQ = 3522; + CMD_VIRTUAL_TRAIN_EVO_RSP = 3523; + CMD_VIRTUAL_TRAIN_ITEM_DROP_NOTIFY = 3524; + CMD_VIRTUAL_TRAIN_DUMMY = 3549; +} + +enum VirtualGachaType { + VIRTUAL_GACHA_TYPE_NONE = 0; + VRITUAL_GACHA_TYPE_SINGLE = 1; + VIRTUAL_GACHA_TYPE_BATCH = 2; +} + +message TrialWarship { + uint32 sample_id = 1; + uint32 end_time = 2; +} + +// CmdID: 5450 +message GetWarshipItemDataReq { + repeated uint32 warship_item_id_list = 1; + bool is_all = 2; +} + +// CmdID: 5451 +message GetWarshipItemDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetWarshipItemDataRsp.Retcode retcode = 1; + repeated uint32 warship_item_id_list = 2; + bool is_all = 3; +} + +// CmdID: 5452 +message GetWarshipTrialDataReq { + repeated uint32 sample_id_list = 1; + bool is_all = 2; +} + +// CmdID: 5453 +message GetWarshipTrialDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetWarshipTrialDataRsp.Retcode retcode = 1; + repeated TrialWarship trial_warship_list = 2; + bool is_all = 3; +} + +// CmdID: 5454 +message GetWarshipDataReq { + repeated uint32 warship_id_list = 1; + bool is_all = 2; +} + +// CmdID: 5455 +message GetWarshipDataRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetWarshipDataRsp.Retcode retcode = 1; + repeated WarshipThemeData warship_list = 2; + bool is_all = 3; +} + +// CmdID: 5456 +message SetWarshipReq { + uint32 warship_id = 1; +} + +// CmdID: 5457 +message SetWarshipRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + NOT_EXIST = 2; + } + + SetWarshipRsp.Retcode retcode = 1; +} + +// CmdID: 5458 +message SetWarshipComponentReq { + uint32 warship_id = 1; + repeated WarshipComponent component_list = 2; +} + +// CmdID: 5459 +message SetWarshipComponentRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + WARSHIP_NOT_EXIST = 2; + COMPONENT_TYPE_ERROR = 3; + COMPONENT_NOT_EXIST = 4; + WARSHIP_ERROR = 5; + } + + SetWarshipComponentRsp.Retcode retcode = 1; +} + +// CmdID: 5460 +message SetWarshipSettingReq { + uint32 warship_id = 1; + WarshipSettingType setting_type = 2; + WarshipBgmPlayMode bgm_play_mode = 3; + bool is_weather_fixed = 4; + uint32 weather_idx = 5; +} + +// CmdID: 5461 +message SetWarshipSettingRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + WARSHIP_NOT_EXIST = 2; + } + + SetWarshipSettingRsp.Retcode retcode = 1; +} + +// CmdID: 5462 +message WarshipItemReturnMaterialNotify { + uint32 warship_item_id = 1; + uint32 convert_num = 2; + uint32 return_material_id = 3; + uint32 return_material_num = 4; +} + +// CmdID: 5463 +message AddWarshipItemNotify { + repeated uint32 warship_item_id_list = 1; +} + +enum CmdTypeWarship { + CMD_TYPE_WARSHIP_NONE = 0; + CMD_GET_WARSHIP_ITEM_DATA_REQ = 5450; + CMD_GET_WARSHIP_ITEM_DATA_RSP = 5451; + CMD_GET_WARSHIP_TRIAL_DATA_REQ = 5452; + CMD_GET_WARSHIP_TRIAL_DATA_RSP = 5453; + CMD_GET_WARSHIP_DATA_REQ = 5454; + CMD_GET_WARSHIP_DATA_RSP = 5455; + CMD_SET_WARSHIP_REQ = 5456; + CMD_SET_WARSHIP_RSP = 5457; + CMD_SET_WARSHIP_COMPONENT_REQ = 5458; + CMD_SET_WARSHIP_COMPONENT_RSP = 5459; + CMD_SET_WARSHIP_SETTING_REQ = 5460; + CMD_SET_WARSHIP_SETTING_RSP = 5461; + CMD_WARSHIP_ITEM_RETURN_MATERIAL_NOTIFY = 5462; + CMD_ADD_WARSHIP_ITEM_NOTIFY = 5463; +} + +enum TrialWarshipTimeType { + TRIAL_WARSHIP_TIME_TYPE_NONE = 0; + TRIAL_WARSHIP_TIME_UNTIL = 1; + TRIAL_WARSHIP_TIME_DURATION = 2; +} + +enum WarshipSettingType { + WARSHIP_SETTING_TYPE_NONE = 0; + WARSHIP_SETTING_BGM_PLAY_MODE = 1; + WARSHIP_SETTING_BGM_WEATHER = 2; +} + +// CmdID: 5100 +message GetWeeklyReportReq { + uint32 target_uid = 1; +} + +message WeeklyReportExBossGroup { + uint32 boss_group_id = 1; + FinishedExBossInfo finished_boss_info = 2; +} + +message WeeklyReportExBoss { + uint32 schedule_id = 1; + uint32 rank_id = 2; + uint32 times_score = 3; + repeated WeeklyReportExBossGroup boss_group_list = 4; + uint32 rank_percent = 5; + uint32 rank = 6; + uint32 begin_time = 7; + uint32 end_time = 8; + repeated uint32 reward_id_list = 9; +} + +message WeeklyReportEndless { + EndlessType endless_type = 1; + uint32 begin_time = 2; + uint32 group_level = 3; + uint32 final_boss_id = 4; + uint32 score = 6; + LineupBriefInfo lineup_info = 7; + uint32 reward_progress = 8; + EndlessRewardType reward_type = 9; + uint32 single_mode_score = 10; + uint32 battle_config_id = 11; + uint32 single_mode_activity_id = 12; + uint32 end_time = 13; + RewardData greedy_reward_data = 14; + uint32 greedy_max_finish_floor = 15; +} + +message WeeklyReportUltraEndless { + uint32 schedule_id = 1; + uint32 group_level = 2; + uint32 max_stage_score = 3; + uint32 group_member_num = 4; + uint32 rank = 5; + uint32 cup_num_before_schedule_begin = 6; + uint32 cup_num_after_schedule_settle = 7; + uint32 top_rank = 8; + uint32 top_rank_reward_id = 9; + uint32 group_level_reward_id = 10; + LineupBriefInfo lineup_info = 11; + uint32 max_mission_num = 12; + uint32 finished_mission_num = 13; + repeated uint32 mission_reward_list = 14; + uint32 begin_time = 15; + uint32 end_time = 16; + uint32 battle_config_id = 17; +} + +// CmdID: 5101 +message GetWeeklyReportRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetWeeklyReportRsp.Retcode retcode = 1; + repeated WeeklyReportExBoss ex_boss_data_list = 2; + repeated WeeklyReportEndless endless_data_list = 3; + repeated WeeklyReportUltraEndless ultra_endless_list = 4; + uint32 target_uid = 6; +} + +// CmdID: 5102 +message GetWeeklyReportEndlessRecommendPlayerReq { + uint32 begin_time = 1; + uint32 group_level = 2; +} + +// CmdID: 5103 +message GetWeeklyReportEndlessRecommendPlayerRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetWeeklyReportEndlessRecommendPlayerRsp.Retcode retcode = 1; + uint32 begin_time = 2; + uint32 group_level = 3; + RankShowData rank_data = 4; + EndlessType endless_type = 5; +} + +// CmdID: 5104 +message GetWeeklyReportExBossRecommendPlayerReq { + uint32 schedule_id = 1; + uint32 rank_reward_id = 2; +} + +// CmdID: 5105 +message GetWeeklyReportExBossRecommendPlayerRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetWeeklyReportExBossRecommendPlayerRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + uint32 rank_reward_id = 3; + RankShowData rank_data = 4; +} + +// CmdID: 5106 +message GetWeeklyReportUltraEndlessRecommendPlayerReq { + uint32 schedule_id = 1; + uint32 group_id = 2; +} + +// CmdID: 5107 +message GetWeeklyReportUltraEndlessRecommendPlayerRsp { + enum Retcode { + SUCC = 0; + FAIL = 1; + } + + GetWeeklyReportUltraEndlessRecommendPlayerRsp.Retcode retcode = 1; + uint32 schedule_id = 2; + uint32 group_id = 3; + RankShowData rank_data = 4; +} + +enum CmdTypeWeeklyreport { + CMD_TYPE_WEEKLYREPORT_NONE = 0; + CMD_GET_WEEKLY_REPORT_REQ = 5100; + CMD_GET_WEEKLY_REPORT_RSP = 5101; + CMD_GET_WEEKLY_REPORT_ENDLESS_RECOMMEND_PLAYER_REQ = 5102; + CMD_GET_WEEKLY_REPORT_ENDLESS_RECOMMEND_PLAYER_RSP = 5103; + CMD_GET_WEEKLY_REPORT_EX_BOSS_RECOMMEND_PLAYER_REQ = 5104; + CMD_GET_WEEKLY_REPORT_EX_BOSS_RECOMMEND_PLAYER_RSP = 5105; + CMD_GET_WEEKLY_REPORT_ULTRA_ENDLESS_RECOMMEND_PLAYER_REQ = 5106; + CMD_GET_WEEKLY_REPORT_ULTRA_ENDLESS_RECOMMEND_PLAYER_RSP = 5107; +} + diff --git a/Proto/CmdIds.cs b/Proto/CmdIds.cs new file mode 100644 index 0000000..db2e9bb --- /dev/null +++ b/Proto/CmdIds.cs @@ -0,0 +1,3094 @@ +namespace KianaBH.Proto; + +public class CmdIds +{ + public const int None = 0; + public const int GetScratchTicketReq = 4150; + public const int GetScratchTicketRsp = 4151; + public const int ScratchReq = 4152; + public const int ScratchRsp = 4153; + public const int ResetScratchTicketPlateReq = 4154; + public const int ResetScratchTicketPlateRsp = 4155; + public const int AddOnActivityRewardNotify = 4156; + public const int GetBingoActivityDataReq = 4157; + public const int GetBingoActivityDataRsp = 4158; + public const int BingoActivityFlopCardReq = 4159; + public const int BingoActivityFlopCardRsp = 4160; + public const int BingoActivityResetBingoReq = 4161; + public const int BingoActivityResetBingoRsp = 4162; + public const int GetBulletinScoreActivityReq = 4163; + public const int GetBulletinScoreActivityRsp = 4164; + public const int TakeBulletinScoreActivityRewardReq = 4165; + public const int TakeBulletinScoreActivityRewardRsp = 4166; + public const int GetContinuousRechargeActivityReq = 4167; + public const int GetContinuousRechargeActivityRsp = 4168; + public const int TakeContinuousRechargeRewardReq = 4169; + public const int TakeContinuousRechargeRewardRsp = 4170; + public const int GetFlopActivityDataReq = 4173; + public const int GetFlopActivityDataRsp = 4174; + public const int TakeFlopRewardReq = 4171; + public const int TakeFlopRewardRsp = 4172; + public const int FlopActivityFlopCardReq = 4175; + public const int FlopActivityFlopCardRsp = 4176; + public const int GetLotteryActivityReq = 4177; + public const int GetLotteryActivityRsp = 4178; + public const int LotteryUseBoxReq = 4179; + public const int LotteryUseBoxRsp = 4180; + public const int LotteryDrawNumberReq = 4181; + public const int LotteryDrawNumberRsp = 4182; + public const int LotteryTakeRewardReq = 4183; + public const int LotteryTakeRewardRsp = 4184; + public const int GetTowerRaidActivityReq = 4185; + public const int GetTowerRaidActivityRsp = 4186; + public const int TakeTowerRaidRewardReq = 4187; + public const int TakeTowerRaidRewardRsp = 4188; + public const int UpdateTowerRaidBossReq = 4189; + public const int UpdateTowerRaidBossRsp = 4190; + public const int TowerRaidLockAvatarNotify = 4191; + public const int GetLoginActivityReq = 4192; + public const int GetLoginActivityRsp = 4193; + public const int TakeLoginActivityRewardReq = 4194; + public const int TakeLoginActivityRewardRsp = 4195; + public const int GetChapterActivityDataReq = 4200; + public const int GetChapterActivityDataRsp = 4201; + public const int TakeChapterActivityLevelRewardReq = 4202; + public const int TakeChapterActivityLevelRewardRsp = 4203; + public const int SyncChapterActivityDataNotify = 4204; + public const int ResetChapterActivityExclusiveStageReq = 4386; + public const int ResetChapterActivityExclusiveStageRsp = 4387; + public const int ResetChapterActivityTalentReq = 4388; + public const int ResetChapterActivityTalentRsp = 4389; + public const int ReportChapterActivityStageReq = 4390; + public const int ReportChapterActivityStageRsp = 4391; + public const int GetMissionThemeDataReq = 4205; + public const int GetMissionThemeDataRsp = 4206; + public const int UpgradeMissionThemeReq = 4207; + public const int UpgradeMissionThemeRsp = 4208; + public const int TakeMissionThemeRewardReq = 4209; + public const int TakeMissionThemeRewardRsp = 4210; + public const int GetOfflineResourceDataReq = 4211; + public const int GetOfflineResourceDataRsp = 4212; + public const int TakeOfflineResourceBoxReq = 4213; + public const int TakeOfflineResourceBoxRsp = 4214; + public const int GetOverlapActivityDataReq = 4215; + public const int GetOverlapActivityDataRsp = 4216; + public const int TakeOverlapActivityRewardReq = 4217; + public const int TakeOverlapActivityRewardRsp = 4218; + public const int OverlapActivitySummonReq = 4219; + public const int OverlapActivitySummonRsp = 4220; + public const int OverlapActivityMoveReq = 4221; + public const int OverlapActivityMoveRsp = 4222; + public const int GetWeeklyRoutineActivityReq = 4229; + public const int GetWeeklyRoutineActivityRsp = 4230; + public const int TakeWeeklyRoutineRewardReq = 4231; + public const int TakeWeeklyRoutineRewardRsp = 4232; + public const int GetRankScheduleDataReq = 4233; + public const int GetRankScheduleDataRsp = 4234; + public const int GetRankScheduleRankReq = 4235; + public const int GetRankScheduleRankRsp = 4236; + public const int GetSurveyDataReq = 4241; + public const int GetSurveyDataRsp = 4242; + public const int FinishSurveyNotify = 4243; + public const int GetThemeDataReq = 4244; + public const int GetThemeDataRsp = 4245; + public const int SyncThemeDataNotify = 4246; + public const int GrantOuterRewardNotify = 4247; + public const int GetNewbieActivityReq = 4248; + public const int GetNewbieActivityRsp = 4249; + public const int GetBbqActivityDataReq = 4250; + public const int GetBbqActivityDataRsp = 4251; + public const int BbqActivityCookReq = 4252; + public const int BbqActivityCookRsp = 4253; + public const int BbqActivityTakeLevelUpRewardReq = 4254; + public const int BbqActivityTakeLevelUpRewardRsp = 4255; + public const int GetTradingCardActivityReq = 4262; + public const int GetTradingCardActivityRsp = 4263; + public const int TakeTradingCardRewardReq = 4264; + public const int TakeTradingCardRewardRsp = 4265; + public const int GetPictureActivityReq = 4266; + public const int GetPictureActivityRsp = 4267; + public const int PictureActivityChooseReq = 4268; + public const int PictureActivityChooseRsp = 4269; + public const int PictureActivityShareReq = 4270; + public const int PictureActivityShareRsp = 4271; + public const int SyncPictureActivityScoreNotify = 4272; + public const int GetJigsawActivityReq = 4273; + public const int GetJigsawActivityRsp = 4274; + public const int JigsawExchangePieceReq = 4275; + public const int JigsawExchangePieceRsp = 4276; + public const int JigsawMoveWaitingPieceReq = 4277; + public const int JigsawMoveWaitingPieceRsp = 4278; + public const int JigsawMovePieceInJigsawAreaReq = 4279; + public const int JigsawMovePieceInJigsawAreaRsp = 4280; + public const int JigsawTakeGroupRewardReq = 4281; + public const int JigsawTakeGroupRewardRsp = 4282; + public const int JigsawTakeFinishRewardReq = 4283; + public const int JigsawTakeFinishRewardRsp = 4284; + public const int GetGardenActivityReq = 4287; + public const int GetGardenActivityRsp = 4288; + public const int GardenHarvestReq = 4289; + public const int GardenHarvestRsp = 4290; + public const int GardenSpeedUpWithMaterialReq = 4291; + public const int GardenSpeedUpWithMaterialRsp = 4292; + public const int GardenRefreshSiteReq = 4293; + public const int GardenRefreshSiteRsp = 4294; + public const int GetGardenScheduleReq = 4295; + public const int GetGardenScheduleRsp = 4296; + public const int GetDropLimitActivityReq = 4297; + public const int GetDropLimitActivityRsp = 4298; + public const int GetLoginMissionActivityReq = 4299; + public const int GetLoginMissionActivityRsp = 4300; + public const int TakeLoginMissionRewardReq = 4301; + public const int TakeLoginMissionRewardRsp = 4302; + public const int SanctuaryGetMainInfoReq = 4305; + public const int SanctuaryGetMainInfoRsp = 4306; + public const int SanctuaryTakeLevelRewardReq = 4307; + public const int SanctuaryTakeLevelRewardRsp = 4308; + public const int SanctuaryTakeProductReq = 4309; + public const int SanctuaryTakeProductRsp = 4310; + public const int SanctuaryStartNotify = 4311; + public const int GetActivityRewardStatisticDataReq = 4312; + public const int GetActivityRewardStatisticDataRsp = 4313; + public const int SanctuaryStageEndNotify = 4314; + public const int GetSlotMachineMainInfoReq = 4315; + public const int GetSlotMachineMainInfoRsp = 4316; + public const int StartSlotMachineReq = 4317; + public const int StartSlotMachineRsp = 4318; + public const int TakeSlotMachineProgressRewardReq = 4319; + public const int TakeSlotMachineProgressRewardRsp = 4320; + public const int GetBulletinActivityMissionReq = 4321; + public const int GetBulletinActivityMissionRsp = 4322; + public const int GetExaminationActivityReq = 4323; + public const int GetExaminationActivityRsp = 4324; + public const int FinishExaminationReq = 4325; + public const int FinishExaminationRsp = 4326; + public const int StartNextRoundExaminationReq = 4327; + public const int StartNextRoundExaminationRsp = 4328; + public const int EvaluateExaminationReq = 4329; + public const int EvaluateExaminationRsp = 4330; + public const int ChapterActivityDailyRewardNotify = 4331; + public const int GetSupportActivityReq = 4332; + public const int GetSupportActivityRsp = 4333; + public const int SupportActivitySupportReq = 4334; + public const int SupportActivitySupportRsp = 4335; + public const int SupportActivityTakeShareRewardReq = 4336; + public const int SupportActivityTakeShareRewardRsp = 4337; + public const int SupportActivityTakeGlobalRewardReq = 4338; + public const int SupportActivityTakeGlobalRewardRsp = 4339; + public const int GetMosaicActivityReq = 4340; + public const int GetMosaicActivityRsp = 4341; + public const int TakeMosaicActivityRewardReq = 4342; + public const int TakeMosaicActivityRewardRsp = 4343; + public const int GetMissionGroupMainInfoReq = 4346; + public const int GetMissionGroupMainInfoRsp = 4347; + public const int TakeMissionGroupRewardReq = 4348; + public const int TakeMissionGroupRewardRsp = 4349; + public const int ChapterActivityTakeDailyRewardReq = 4350; + public const int ChapterActivityTakeDailyRewardRsp = 4351; + public const int ReunionCookGetActivityReq = 4380; + public const int ReunionCookGetActivityRsp = 4381; + public const int ReunionCookMakeDinnerReq = 4382; + public const int ReunionCookMakeDinnerRsp = 4383; + public const int ReunionCookTakeScoreRewardReq = 4384; + public const int ReunionCookTakeScoreRewardRsp = 4385; + public const int DreamGetActivityReq = 5750; + public const int DreamGetActivityRsp = 5751; + public const int DreamOpenDreamReq = 5752; + public const int DreamOpenDreamRsp = 5753; + public const int DreamGiveUpDreamReq = 5754; + public const int DreamGiveUpDreamRsp = 5755; + public const int DreamExchangeScoreReq = 5756; + public const int DreamExchangeScoreRsp = 5757; + public const int DreamTakeRewardReq = 5758; + public const int DreamTakeRewardRsp = 5759; + public const int GetThemeWantedReq = 5790; + public const int GetThemeWantedRsp = 5791; + public const int ThemeWantedRefreshTicketReq = 5794; + public const int ThemeWantedRefreshTicketRsp = 5795; + public const int GlobalPollingGetDataReq = 5811; + public const int GlobalPollingGetDataRsp = 5812; + public const int GlobalPollingSupportReq = 5813; + public const int GlobalPollingSupportRsp = 5814; + public const int GlobalPollingVoteReq = 5815; + public const int GlobalPollingVoteRsp = 5816; + public const int GetCollaborationScheduleReq = 5831; + public const int GetCollaborationScheduleRsp = 5832; + public const int RanchGetActivityReq = 5833; + public const int RanchGetActivityRsp = 5834; + public const int RanchSynthesisMonsterReq = 5835; + public const int RanchSynthesisMonsterRsp = 5836; + public const int RanchFreeMonsterReq = 5837; + public const int RanchFreeMonsterRsp = 5838; + public const int RanchAssignMonsterReq = 5839; + public const int RanchAssignMonsterRsp = 5840; + public const int RanchFireMonsterReq = 5841; + public const int RanchFireMonsterRsp = 5842; + public const int RanchTakeProductReq = 5843; + public const int RanchTakeProductRsp = 5844; + public const int RanchGetMonsterWikiReq = 5845; + public const int RanchGetMonsterWikiRsp = 5846; + public const int RanchSyncMonsterNotify = 5847; + public const int RanchDelMonsterNotify = 5848; + public const int RanchLockMonsterSkillReq = 5849; + public const int RanchLockMonsterSkillRsp = 5850; + public const int RanchSetBattleMonsterReq = 5851; + public const int RanchSetBattleMonsterRsp = 5852; + public const int GetRestaurantActivityReq = 5860; + public const int GetRestaurantActivityRsp = 5861; + public const int LevelUpRestaurantFacilityReq = 5862; + public const int LevelUpRestaurantFacilityRsp = 5863; + public const int AssignRestaurantWorkReq = 5864; + public const int AssignRestaurantWorkRsp = 5865; + public const int CancelRestaurantWorkReq = 5866; + public const int CancelRestaurantWorkRsp = 5867; + public const int TakeRestaurantOrderReq = 5868; + public const int TakeRestaurantOrderRsp = 5869; + public const int DeliverRestaurantQuestReq = 5870; + public const int DeliverRestaurantQuestRsp = 5871; + public const int AccelerateRestaurantWorkReq = 5872; + public const int AccelerateRestaurantWorkRsp = 5873; + public const int NewbieLevelRushPurchaseReq = 5881; + public const int NewbieLevelRushPurchaseRsp = 5882; + public const int NewbieLevelRushTakeRewardReq = 5883; + public const int NewbieLevelRushTakeRewardRsp = 5884; + public const int GetRewardLineActivityReq = 5890; + public const int GetRewardLineActivityRsp = 5891; + public const int TakeRewardLineActivityRewardReq = 5892; + public const int TakeRewardLineActivityRewardRsp = 5893; + public const int MonsterCardGetActivityReq = 5920; + public const int MonsterCardGetActivityRsp = 5921; + public const int MonsterCardLevelUpReq = 5922; + public const int MonsterCardLevelUpRsp = 5923; + public const int MonsterCardStarUpReq = 5924; + public const int MonsterCardStarUpRsp = 5925; + public const int MonsterCardLearnRandomTalentReq = 5926; + public const int MonsterCardLearnRandomTalentRsp = 5927; + public const int MonsterCardConfirmRandomTalentReq = 5933; + public const int MonsterCardConfirmRandomTalentRsp = 5934; + public const int MonsterCardSyncCardNotify = 5928; + public const int MonsterCardGetTowerRankReq = 5929; + public const int MonsterCardGetTowerRankRsp = 5930; + public const int MonsterCardGetBossRankReq = 5931; + public const int MonsterCardGetBossRankRsp = 5932; + public const int MonsterCardFragmentOverflowNotify = 5935; + public const int BuffAssistGetActivityReq = 5941; + public const int BuffAssistGetActivityRsp = 5942; + public const int BuffAssistRefreshWaitSelectBuffPoolReq = 5943; + public const int BuffAssistRefreshWaitSelectBuffPoolRsp = 5944; + public const int BuffAssistSelectBuffReq = 5945; + public const int BuffAssistSelectBuffRsp = 5946; + public const int BuffAssistPublishBuffPoolReq = 5947; + public const int BuffAssistPublishBuffPoolRsp = 5948; + public const int BuffAssistStageEndNotify = 5949; + public const int BuffAssistRecvStageAssistInfoNotify = 5950; + public const int WaveRushGetActivityReq = 5961; + public const int WaveRushGetActivityRsp = 5962; + public const int WaveRushGetRankReq = 5963; + public const int WaveRushGetRankRsp = 5964; + public const int WaveRushLevelUpBuffReq = 5965; + public const int WaveRushLevelUpBuffRsp = 5966; + public const int WaveRushUpdateBuffSuiteReq = 5967; + public const int WaveRushUpdateBuffSuiteRsp = 5968; + public const int WaveRushActiveBuffSuiteReq = 5969; + public const int WaveRushActiveBuffSuiteRsp = 5970; + public const int MiniMonopolyGetDataReq = 5981; + public const int MiniMonopolyGetDataRsp = 5982; + public const int MiniMonopolyThrowDiceReq = 5983; + public const int MiniMonopolyThrowDiceRsp = 5984; + public const int MiniMonopolyUseItemReq = 5985; + public const int MiniMonopolyUseItemRsp = 5986; + public const int AvatarCultivateGetActivityReq = 5991; + public const int AvatarCultivateGetActivityRsp = 5992; + public const int ThemeTowerGetActivityReq = 7070; + public const int ThemeTowerGetActivityRsp = 7071; + public const int ThemeTowerGetRankReq = 7072; + public const int ThemeTowerGetRankRsp = 7073; + public const int ThemeTowerLevelUpSectionReq = 7074; + public const int ThemeTowerLevelUpSectionRsp = 7075; + public const int ShigureKiraAddConcertProgressReq = 7062; + public const int ShigureKiraAddConcertProgressRsp = 7063; + public const int ShigureKiraGetActivityReq = 7060; + public const int ShigureKiraGetActivityRsp = 7061; + public const int SusannaTrialGetActivityReq = 7050; + public const int SusannaTrialGetActivityRsp = 7051; + public const int SusannaTrialTakeMentorProgressRewardReq = 7052; + public const int SusannaTrialTakeMentorProgressRewardRsp = 7053; + public const int SusannaTrialTakePlotRewardReq = 7054; + public const int SusannaTrialTakePlotRewardRsp = 7055; + public const int GetPonMachineActivityReq = 7100; + public const int GetPonMachineActivityRsp = 7101; + public const int StartPonMachineReq = 7102; + public const int StartPonMachineRsp = 7103; + public const int CarnivalLotteryBetReq = 7111; + public const int CarnivalLotteryBetRsp = 7112; + public const int CarnivalLotteryGetInfoReq = 7113; + public const int CarnivalLotteryGetInfoRsp = 7114; + public const int CarnivalLotteryTakeSpecialRewardReq = 7115; + public const int CarnivalLotteryTakeSpecialRewardRsp = 7116; + public const int CarnivalLotteryOpenRewardReq = 7117; + public const int CarnivalLotteryOpenRewardRsp = 7118; + public const int TiledGameLunaTrapReq = 7121; + public const int TiledGameLunaTrapRsp = 7122; + public const int GetTiledGameLunaReq = 7123; + public const int GetTiledGameLunaRsp = 7124; + public const int TiledGameLunaBattleReq = 7125; + public const int TiledGameLunaBattleRsp = 7126; + public const int TiledGameLunaHealReq = 7129; + public const int TiledGameLunaHealRsp = 7130; + public const int MinionClashGetActivityReq = 7141; + public const int MinionClashGetActivityRsp = 7142; + public const int MinionClashGetGachaInfoReq = 7143; + public const int MinionClashGetGachaInfoRsp = 7144; + public const int MinionClashDoGachaReq = 7145; + public const int MinionClashDoGachaRsp = 7146; + public const int MinionClashLevelUpTalentReq = 7147; + public const int MinionClashLevelUpTalentRsp = 7148; + public const int MinionClashReportStageBeginReq = 7149; + public const int MinionClashReportStageBeginRsp = 7150; + public const int MinionClashUpdateBuildReq = 7151; + public const int MinionClashUpdateBuildRsp = 7152; + public const int MinionClashStarUpCardReq = 7153; + public const int MinionClashStarUpCardRsp = 7154; + public const int ThelemaActivityGetActivityReq = 7161; + public const int ThelemaActivityGetActivityRsp = 7162; + public const int ThelemaActivityFinishQuestionReq = 7163; + public const int ThelemaActivityFinishQuestionRsp = 7164; + public const int MatchThreePlusGetActivityReq = 7171; + public const int MatchThreePlusGetActivityRsp = 7172; + public const int MatchThreePlusRoleLevelUpReq = 7173; + public const int MatchThreePlusRoleLevelUpRsp = 7174; + public const int MatchThreePlusGachaDisplayReq = 7175; + public const int MatchThreePlusGachaDisplayRsp = 7176; + public const int MatchThreePlusGachaReq = 7177; + public const int MatchThreePlusGachaRsp = 7178; + public const int MatchThreePlusRoomBeginReq = 7179; + public const int MatchThreePlusRoomBeginRsp = 7180; + public const int MatchThreePlusRoomEndReq = 7181; + public const int MatchThreePlusRoomEndRsp = 7182; + public const int MatchThreePlusGetRankReq = 7183; + public const int MatchThreePlusGetRankRsp = 7184; + public const int MatchThreePlusUpdateCombinationReq = 7185; + public const int MatchThreePlusUpdateCombinationRsp = 7186; + public const int MatchThreePlusSyncAutoUnlockNotify = 7187; + public const int TiledGameSrpgGetActivityReq = 7191; + public const int TiledGameSrpgGetActivityRsp = 7192; + public const int TiledGameSrpgAvatarLevelUpReq = 7193; + public const int TiledGameSrpgAvatarLevelUpRsp = 7194; + public const int TiledGameSrpgBattleBeginReq = 7195; + public const int TiledGameSrpgBattleBeginRsp = 7196; + public const int TiledGameSrpgBattleEndReq = 7197; + public const int TiledGameSrpgBattleEndRsp = 7198; + public const int TiledGameSrpgTakeBpRewardReq = 7199; + public const int TiledGameSrpgTakeBpRewardRsp = 7200; + public const int GameRoomActivityGetActivityReq = 7211; + public const int GameRoomActivityGetActivityRsp = 7212; + public const int GameRoomActivityGetRankReq = 7213; + public const int GameRoomActivityGetRankRsp = 7214; + public const int QRtsActivityGetActivityReq = 7221; + public const int QRtsActivityGetActivityRsp = 7222; + public const int QRtsActivityFinishRoundReq = 7223; + public const int QRtsActivityFinishRoundRsp = 7224; + public const int QRtsActivityResetRoundReq = 7225; + public const int QRtsActivityResetRoundRsp = 7226; + public const int QRtsActivityBuildReq = 7227; + public const int QRtsActivityBuildRsp = 7228; + public const int QRtsActivitySelectTalentReq = 7229; + public const int QRtsActivitySelectTalentRsp = 7230; + public const int QRtsActivitySyncGameNotify = 7231; + public const int QRtsActivitySweepReq = 7232; + public const int QRtsActivitySweepRsp = 7233; + public const int QRtsActivityUpgradeBuffReq = 7234; + public const int QRtsActivityUpgradeBuffRsp = 7235; + public const int QRtsActivityClearGameReq = 7236; + public const int QRtsActivityClearGameRsp = 7237; + public const int QRtsActivityWishReq = 7238; + public const int QRtsActivityWishRsp = 7239; + public const int GetBurdenAlleviationV2Req = 7241; + public const int GetBurdenAlleviationV2Rsp = 7242; + public const int TriggerBurdenAlleviationV2Req = 7243; + public const int TriggerBurdenAlleviationV2Rsp = 7244; + public const int FutariBattleActivityGetActivityReq = 7245; + public const int FutariBattleActivityGetActivityRsp = 7246; + public const int FutariBattleActivityGetRankReq = 7247; + public const int FutariBattleActivityGetRankRsp = 7248; + public const int FutariBattleActivityPassStageFloorReq = 7249; + public const int FutariBattleActivityPassStageFloorRsp = 7250; + public const int ReActivityGetDataReq = 7251; + public const int ReActivityGetDataRsp = 7252; + public const int ReActivityTileBeginReq = 7253; + public const int ReActivityTileBeginRsp = 7254; + public const int ReActivityTileEndReq = 7255; + public const int ReActivityTileEndRsp = 7256; + public const int ResidentActivityGetDataReq = 7260; + public const int ResidentActivityGetDataRsp = 7261; + public const int ResidentActivityUnlockActivityReq = 7262; + public const int ResidentActivityUnlockActivityRsp = 7263; + public const int QRtsActivityGetRankReq = 7270; + public const int QRtsActivityGetRankRsp = 7271; + public const int MonsterCardPvpGetActivityReq = 7275; + public const int MonsterCardPvpGetActivityRsp = 7276; + public const int MonsterCardPvpSelectInitCardVecReq = 7277; + public const int MonsterCardPvpSelectInitCardVecRsp = 7278; + public const int MonsterCardPvpStarUpCardReq = 7279; + public const int MonsterCardPvpStarUpCardRsp = 7280; + public const int MonsterCardPvpOpenSkillPackReq = 7281; + public const int MonsterCardPvpOpenSkillPackRsp = 7282; + public const int MonsterCardPvpSelectNewSkillReq = 7283; + public const int MonsterCardPvpSelectNewSkillRsp = 7284; + public const int MonsterCardPvpGetPvpOpponentReq = 7285; + public const int MonsterCardPvpGetPvpOpponentRsp = 7286; + public const int MonsterCardPvpFinishCombatReq = 7287; + public const int MonsterCardPvpFinishCombatRsp = 7288; + public const int MonsterCardPvpUpdatePlayerInfoReq = 7289; + public const int MonsterCardPvpUpdatePlayerInfoRsp = 7290; + public const int MonsterCardPvpGetDefendDataReq = 7291; + public const int MonsterCardPvpGetDefendDataRsp = 7292; + public const int MonsterCardPvpGetPvpRankReq = 7293; + public const int MonsterCardPvpGetPvpRankRsp = 7294; + public const int MonsterCardPvpTakeProductRewardReq = 7295; + public const int MonsterCardPvpTakeProductRewardRsp = 7296; + public const int MonsterCardPvpGetGachaDisplayReq = 7297; + public const int MonsterCardPvpGetGachaDisplayRsp = 7298; + public const int MonsterCardPvpGachaReq = 7299; + public const int MonsterCardPvpGachaRsp = 7300; + public const int MonsterCardPvpStartCombatReq = 7301; + public const int MonsterCardPvpStartCombatRsp = 7302; + public const int MonsterCardPvpCustomTeamReq = 7303; + public const int MonsterCardPvpCustomTeamRsp = 7304; + public const int MonsterCardPvpSkipReq = 7305; + public const int MonsterCardPvpSkipRsp = 7306; + public const int MonsterMorphGetActivityReq = 7311; + public const int MonsterMorphGetActivityRsp = 7312; + public const int MonsterMorphLevelUpMonsterReq = 7313; + public const int MonsterMorphLevelUpMonsterRsp = 7314; + public const int MonsterMorphStarUpMonsterReq = 7315; + public const int MonsterMorphStarUpMonsterRsp = 7316; + public const int MonsterMorphRefineMinionAffixReq = 7317; + public const int MonsterMorphRefineMinionAffixRsp = 7318; + public const int MonsterMorphSelectNewMinionAffixReq = 7319; + public const int MonsterMorphSelectNewMinionAffixRsp = 7320; + public const int MonsterMorphGetRankReq = 7321; + public const int MonsterMorphGetRankRsp = 7322; + public const int MonsterMorphSweepReq = 7323; + public const int MonsterMorphSweepRsp = 7324; + public const int CrystalLotteryGetMainDataReq = 7331; + public const int CrystalLotteryGetMainDataRsp = 7332; + public const int CrystalLotteryEnrollReq = 7333; + public const int CrystalLotteryEnrollRsp = 7334; + public const int CrystalLotteryTakeRewardReq = 7335; + public const int CrystalLotteryTakeRewardRsp = 7336; + public const int TiledGameInnGetActivityReq = 7341; + public const int TiledGameInnGetActivityRsp = 7342; + public const int TiledGameInnBuyFurnitureReq = 7343; + public const int TiledGameInnBuyFurnitureRsp = 7344; + public const int TiledGameInnEditInnReq = 7345; + public const int TiledGameInnEditInnRsp = 7346; + public const int TiledGameInnStartManagementReq = 7347; + public const int TiledGameInnStartManagementRsp = 7348; + public const int TiledGameInnStopManagementReq = 7349; + public const int TiledGameInnStopManagementRsp = 7350; + public const int TiledGameInnStartTravelReq = 7351; + public const int TiledGameInnStartTravelRsp = 7352; + public const int TiledGameInnEndTravelReq = 7353; + public const int TiledGameInnEndTravelRsp = 7354; + public const int TiledGameInnLevelUpReq = 7355; + public const int TiledGameInnLevelUpRsp = 7356; + public const int TiledGameInnDevelopDishReq = 7357; + public const int TiledGameInnDevelopDishRsp = 7358; + public const int TiledGameInnLevelUpInnReq = 7359; + public const int TiledGameInnLevelUpInnRsp = 7360; + public const int TiledGameInnSyncInnDataNotify = 7361; + public const int TiledGameInnGetOtherInnDataReq = 7362; + public const int TiledGameInnGetOtherInnDataRsp = 7363; + public const int TiledGameInnAddLeftDropNumNotify = 7364; + public const int TowerDefenseGetActivityReq = 7375; + public const int TowerDefenseGetActivityRsp = 7376; + public const int TowerDefenseSaveTurnReq = 7377; + public const int TowerDefenseSaveTurnRsp = 7378; + public const int TowerDefenseBattleBeginReq = 7379; + public const int TowerDefenseBattleBeginRsp = 7380; + public const int TowerDefenseBattleEndReq = 7381; + public const int TowerDefenseBattleEndRsp = 7382; + public const int GetAdventureGroupReq = 3900; + public const int GetAdventureGroupRsp = 3901; + public const int SelectAdventureQuestReq = 3902; + public const int SelectAdventureQuestRsp = 3903; + public const int TakeAdventureQuestRewardReq = 3904; + public const int TakeAdventureQuestRewardRsp = 3905; + public const int ClaimScoinReq = 3910; + public const int ClaimScoinRsp = 3911; + public const int AdventureStorySweepReq = 3912; + public const int AdventureStorySweepRsp = 3913; + public const int GetAdventureStorySweepInfoReq = 3914; + public const int GetAdventureStorySweepInfoRsp = 3915; + public const int TakeAdventureStorySweepRewardReq = 3916; + public const int TakeAdventureStorySweepRewardRsp = 3917; + public const int TakeAdventureCompensationReq = 3918; + public const int TakeAdventureCompensationRsp = 3919; + public const int EditAdventureRoomReq = 3920; + public const int EditAdventureRoomRsp = 3921; + public const int CancelAdventureQuestReq = 3922; + public const int CancelAdventureQuestRsp = 3923; + public const int ResetAdventureQuestReq = 3924; + public const int ResetAdventureQuestRsp = 3925; + public const int AiCyberGetActivityReq = 6650; + public const int AiCyberGetActivityRsp = 6651; + public const int AiCyberTakePuzzleRewardReq = 6652; + public const int AiCyberTakePuzzleRewardRsp = 6653; + public const int AiCyberAddRepairProgressReq = 6654; + public const int AiCyberAddRepairProgressRsp = 6655; + public const int AiCyberSetBlessReq = 6656; + public const int AiCyberSetBlessRsp = 6657; + public const int AiCyberRefreshTicketReq = 6658; + public const int AiCyberRefreshTicketRsp = 6659; + public const int AiCyberUpdateClientSettingReq = 6660; + public const int AiCyberUpdateClientSettingRsp = 6661; + public const int GetArmadaDataReq = 2601; + public const int GetArmadaDataRsp = 2602; + public const int CreateArmadaReq = 2603; + public const int CreateArmadaRsp = 2604; + public const int SearchArmadaReq = 2605; + public const int SearchArmadaRsp = 2606; + public const int ApplyJoinArmadaReq = 2607; + public const int ApplyJoinArmadaRsp = 2608; + public const int DealArmadaApplyReq = 2609; + public const int DealArmadaApplyRsp = 2610; + public const int GetArmadaManageDataReq = 2611; + public const int GetArmadaManageDataRsp = 2612; + public const int SetArmadaApplyReq = 2613; + public const int SetArmadaApplyRsp = 2614; + public const int SetArmadaBulletinReq = 2615; + public const int SetArmadaBulletinRsp = 2616; + public const int GetRecommendArmadaReq = 2617; + public const int GetRecommendArmadaRsp = 2618; + public const int TransferArmadaLeaderReq = 2619; + public const int TransferArmadaLeaderRsp = 2620; + public const int SetArmadaPositionReq = 2621; + public const int SetArmadaPositionRsp = 2622; + public const int KickArmadaMemberReq = 2623; + public const int KickArmadaMemberRsp = 2624; + public const int DissolveArmadaReq = 2625; + public const int DissolveArmadaRsp = 2626; + public const int QuitArmadaReq = 2627; + public const int QuitArmadaRsp = 2628; + public const int CancelApplyArmadaReq = 2629; + public const int CancelApplyArmadaRsp = 2630; + public const int LevelUpArmadaCabinReq = 2631; + public const int LevelUpArmadaCabinRsp = 2632; + public const int CancelLevelUpArmadaCabinReq = 2633; + public const int CancelLevelUpArmadaCabinRsp = 2634; + public const int MoveArmadaCabinReq = 2635; + public const int MoveArmadaCabinRsp = 2636; + public const int GetConsignedOrderDataReq = 2639; + public const int GetConsignedOrderDataRsp = 2640; + public const int ChooseConsignedOrderReq = 2641; + public const int ChooseConsignedOrderRsp = 2642; + public const int FinishConsignedOrderReq = 2643; + public const int FinishConsignedOrderRsp = 2644; + public const int ResetConsignedOrderReq = 2645; + public const int ResetConsignedOrderRsp = 2646; + public const int GetWareHouseDataReq = 2647; + public const int GetWareHouseDataRsp = 2648; + public const int PostWareHouseDemandReq = 2649; + public const int PostWareHouseDemandRsp = 2650; + public const int CancelWareHouseDemandReq = 2651; + public const int CancelWareHouseDemandRsp = 2652; + public const int DonateWareHouseItemReq = 2653; + public const int DonateWareHouseItemRsp = 2654; + public const int GetWareHouseItemReq = 2655; + public const int GetWareHouseItemRsp = 2656; + public const int EnterArmadaChatroomReq = 2657; + public const int EnterArmadaChatroomRsp = 2658; + public const int SendArmadaSystemChatMsgNotify = 2661; + public const int RecvArmadaSystemChatMsgNotify = 2662; + public const int DonateWareHouseNotify = 2677; + public const int ArmadaBuildNotify = 2678; + public const int ArmadaBulletinNotify = 2679; + public const int ArmadaManageNotify = 2680; + public const int ArmadaPlayerNotify = 2681; + public const int ArmadaApplyNotify = 2682; + public const int CancelDissolveArmadaReq = 2683; + public const int CancelDissolveArmadaRsp = 2684; + public const int GetArmadaBuildOwnershipReq = 2685; + public const int GetArmadaBuildOwnershipRsp = 2686; + public const int ReleaseArmadaBuildOwnershipReq = 2687; + public const int ReleaseArmadaBuildOwnershipRsp = 2688; + public const int ArmadaSendMailReq = 2689; + public const int ArmadaSendMailRsp = 2690; + public const int ChangeArmadaNameReq = 2691; + public const int ChangeArmadaNameRsp = 2692; + public const int JoinArmadaElectionReq = 2693; + public const int JoinArmadaElectionRsp = 2694; + public const int ArmadaLogoutNotify = 2731; + public const int QuickApplyJoinArmadaReq = 2732; + public const int QuickApplyJoinArmadaRsp = 2733; + public const int OpenArmadaStageReq = 2799; + public const int OpenArmadaStageRsp = 2800; + public const int TakeArmadaAchievementReq = 2801; + public const int TakeArmadaAchievementRsp = 2802; + public const int GetRecommendArmadaMemberListReq = 2803; + public const int GetRecommendArmadaMemberListRsp = 2804; + public const int JoinQuitArmadaNotify = 2805; + public const int ArmadaPlayerContributionSyncNotify = 2806; + public const int GetArmadaStageScoreActivityReq = 2821; + public const int GetArmadaStageScoreActivityRsp = 2822; + public const int TakeArmadaStageScoreActivityRewardReq = 2823; + public const int TakeArmadaStageScoreActivityRewardRsp = 2824; + public const int GetArmadaActivityListReq = 2825; + public const int GetArmadaActivityListRsp = 2826; + public const int GetArmadaReunionActivityReq = 2834; + public const int GetArmadaReunionActivityRsp = 2835; + public const int ArmadaReunionRewardNotify = 2836; + public const int TakeArmadaReunionRewardReq = 2837; + public const int TakeArmadaReunionRewardRsp = 2838; + public const int SetArmadaLabelReq = 2840; + public const int SetArmadaLabelRsp = 2841; + public const int GetArmadaStageScoreRankReq = 2842; + public const int GetArmadaStageScoreRankRsp = 2843; + public const int GetAvatarMissionActivityReq = 3000; + public const int GetAvatarMissionActivityRsp = 3001; + public const int ChooseAvatarMissionAvatarReq = 3002; + public const int ChooseAvatarMissionAvatarRsp = 3003; + public const int TakeAvatarMissionDailyRewardReq = 3004; + public const int TakeAvatarMissionDailyRewardRsp = 3005; + public const int TakeAvatarMissionPhaseRewardReq = 3006; + public const int TakeAvatarMissionPhaseRewardRsp = 3007; + public const int ResetAvatarMissionAvatarReq = 3008; + public const int ResetAvatarMissionAvatarRsp = 3009; + public const int GetBattlePassReq = 3750; + public const int GetBattlePassRsp = 3751; + public const int BuyBattlePassTicketReq = 3752; + public const int BuyBattlePassTicketRsp = 3753; + public const int TakeBattlePassLevelRewardReq = 3754; + public const int TakeBattlePassLevelRewardRsp = 3755; + public const int BuyBattlePassLevelReq = 3756; + public const int BuyBattlePassLevelRsp = 3757; + public const int TakeBattlePassPhaseExpReq = 3758; + public const int TakeBattlePassPhaseExpRsp = 3759; + public const int GetBattlePassMissionPanelReq = 3767; + public const int GetBattlePassMissionPanelRsp = 3768; + public const int ChapterArkGetDataReq = 7950; + public const int ChapterArkGetDataRsp = 7951; + public const int ChapterArkRoleLevelUpReq = 7952; + public const int ChapterArkRoleLevelUpRsp = 7953; + public const int ChapterArkSkillUnlockReq = 7954; + public const int ChapterArkSkillUnlockRsp = 7955; + public const int ChapterArkSkillLevelUpReq = 7956; + public const int ChapterArkSkillLevelUpRsp = 7957; + public const int ChapterArkTakeRewardLineRewardReq = 7958; + public const int ChapterArkTakeRewardLineRewardRsp = 7959; + public const int ChapterArkGetRankReq = 7960; + public const int ChapterArkGetRankRsp = 7961; + public const int ChapterArkFinishOpeningReq = 7962; + public const int ChapterArkFinishOpeningRsp = 7963; + public const int ChapterArkSyncAutoUnlockNotify = 7964; + public const int ChapterArkSupSkillLevelUpReq = 7965; + public const int ChapterArkSupSkillLevelUpRsp = 7966; + public const int ChapterArkSettleTowerReq = 7967; + public const int ChapterArkSettleTowerRsp = 7968; + public const int ChapterArkReportTowerFloorReq = 7969; + public const int ChapterArkReportTowerFloorRsp = 7970; + public const int ArkPlusActivityGetDataReq = 7971; + public const int ArkPlusActivityGetDataRsp = 7972; + public const int ArkPlusActivityFinishRoomReq = 7973; + public const int ArkPlusActivityFinishRoomRsp = 7974; + public const int ArkPlusActivityResetChallengeReq = 7975; + public const int ArkPlusActivityResetChallengeRsp = 7976; + public const int ArkPlusActivityGetRankReq = 7977; + public const int ArkPlusActivityGetRankRsp = 7978; + public const int ArkPlusActivityAddLiftMaterialReq = 7979; + public const int ArkPlusActivityAddLiftMaterialRsp = 7980; + public const int ChapterBwWorldGetDataReq = 7650; + public const int ChapterBwWorldGetDataRsp = 7651; + public const int ChapterBwWorldUpdateEquipRuneReq = 7652; + public const int ChapterBwWorldUpdateEquipRuneRsp = 7653; + public const int ChapterBwWorldRuneLevelUpReq = 7654; + public const int ChapterBwWorldRuneLevelUpRsp = 7655; + public const int ChapterBwWorldRuneSynthesisReq = 7656; + public const int ChapterBwWorldRuneSynthesisRsp = 7657; + public const int ChapterBwWorldGetRankReq = 7658; + public const int ChapterBwWorldGetRankRsp = 7659; + public const int ChapterBwWorldTakeRewardLineRewardReq = 7660; + public const int ChapterBwWorldTakeRewardLineRewardRsp = 7661; + public const int ChapterBwWorldSyncRuneNotify = 7662; + public const int ChapterBwWorldTowerStageReportFloorReq = 7663; + public const int ChapterBwWorldTowerStageReportFloorRsp = 7664; + public const int ChapterBwWorldRefreshTicketReq = 7665; + public const int ChapterBwWorldRefreshTicketRsp = 7666; + public const int ChapterKnightRichManGetDataReq = 8350; + public const int ChapterKnightRichManGetDataRsp = 8351; + public const int ChapterKnightRichManGetRankReq = 8352; + public const int ChapterKnightRichManGetRankRsp = 8353; + public const int ChapterKnightRichManGetMapReq = 8354; + public const int ChapterKnightRichManGetMapRsp = 8355; + public const int ChapterKnightRichManBeginMapReq = 8356; + public const int ChapterKnightRichManBeginMapRsp = 8357; + public const int ChapterKnightRichManEndMapReq = 8358; + public const int ChapterKnightRichManEndMapRsp = 8359; + public const int ChapterKnightRichManThrowDiceReq = 8360; + public const int ChapterKnightRichManThrowDiceRsp = 8361; + public const int ChapterKnightRichManFinishGameReq = 8362; + public const int ChapterKnightRichManFinishGameRsp = 8363; + public const int ChapterKnightRichManRefreshShopReq = 8364; + public const int ChapterKnightRichManRefreshShopRsp = 8365; + public const int ChapterKnightRichManBuyShopGoodsReq = 8366; + public const int ChapterKnightRichManBuyShopGoodsRsp = 8367; + public const int ChapterKnightRichManFinishSiteReq = 8368; + public const int ChapterKnightRichManFinishSiteRsp = 8369; + public const int ChapterKnightRichManUseCardReq = 8370; + public const int ChapterKnightRichManUseCardRsp = 8371; + public const int ChapterKnightRichManLevelUpBuffReq = 8372; + public const int ChapterKnightRichManLevelUpBuffRsp = 8373; + public const int ChapterKnightRichManSelectItemReq = 8374; + public const int ChapterKnightRichManSelectItemRsp = 8375; + public const int ChapterKnightRichManTriggerEventReq = 8376; + public const int ChapterKnightRichManTriggerEventRsp = 8377; + public const int ChapterKnightRichManGetItemNotify = 8378; + public const int ChapterKnightRichManRefreshWaitSelectItemReq = 8379; + public const int ChapterKnightRichManRefreshWaitSelectItemRsp = 8380; + public const int ChapterKnightRichManGetShopReq = 8381; + public const int ChapterKnightRichManGetShopRsp = 8382; + public const int ChapterKnightRichManSelectInitReq = 8383; + public const int ChapterKnightRichManSelectInitRsp = 8384; + public const int ChapterKnightRichManReloadFloorReq = 8385; + public const int ChapterKnightRichManReloadFloorRsp = 8386; + public const int ChapterKnightRichManEnterFloorReq = 8387; + public const int ChapterKnightRichManEnterFloorRsp = 8388; + public const int ChapterKnightRichManEquipFlowerReq = 8389; + public const int ChapterKnightRichManEquipFlowerRsp = 8390; + public const int ChapterKnightRichManRefreshWeatherReq = 8391; + public const int ChapterKnightRichManRefreshWeatherRsp = 8392; + public const int ChapterKnightRichManSelectWeatherReq = 8393; + public const int ChapterKnightRichManSelectWeatherRsp = 8394; + public const int ChapterKnightRichManFinishGambleReq = 8395; + public const int ChapterKnightRichManFinishGambleRsp = 8396; + public const int ChapterKnightRichManBeginGambleReq = 8397; + public const int ChapterKnightRichManBeginGambleRsp = 8398; + public const int ChapterKnightRichManFloorEndSelectFlowerReq = 8399; + public const int ChapterKnightRichManFloorEndSelectFlowerRsp = 8400; + public const int ChapterKnightRichManBuyHouseReq = 8401; + public const int ChapterKnightRichManBuyHouseRsp = 8402; + public const int PjmsChapterKnightDurandalCubeGetDataReq = 8411; + public const int PjmsChapterKnightDurandalCubeGetDataRsp = 8412; + public const int PjmsChapterKnightDurandalCubeTileBeginReq = 8413; + public const int PjmsChapterKnightDurandalCubeTileBeginRsp = 8414; + public const int PjmsChapterKnightDurandalCubeTileEndReq = 8415; + public const int PjmsChapterKnightDurandalCubeTileEndRsp = 8416; + public const int PjmsChapterKnightSpaceAdventureGetMainDataReq = 8421; + public const int PjmsChapterKnightSpaceAdventureGetMainDataRsp = 8422; + public const int PjmsChapterKnightSpaceAdventureSiteBeginReq = 8423; + public const int PjmsChapterKnightSpaceAdventureSiteBeginRsp = 8424; + public const int PjmsChapterKnightSpaceAdventureSiteEndReq = 8425; + public const int PjmsChapterKnightSpaceAdventureSiteEndRsp = 8426; + public const int PjmsChapterKnightSpaceAdventureChooseSiteEventReq = 8427; + public const int PjmsChapterKnightSpaceAdventureChooseSiteEventRsp = 8428; + public const int PjmsChapterKnightSpaceAdventureUpdateBattleCardReq = 8429; + public const int PjmsChapterKnightSpaceAdventureUpdateBattleCardRsp = 8430; + public const int PjmsChapterKnightSpaceAdventureGetShopDataReq = 8431; + public const int PjmsChapterKnightSpaceAdventureGetShopDataRsp = 8432; + public const int PjmsChapterKnightSpaceAdventureRefreshShopReq = 8433; + public const int PjmsChapterKnightSpaceAdventureRefreshShopRsp = 8434; + public const int PjmsChapterKnightSpaceAdventureBuyShopGoodsReq = 8435; + public const int PjmsChapterKnightSpaceAdventureBuyShopGoodsRsp = 8436; + public const int PjmsChapterKnightSpaceAdventureStatusNotify = 8437; + public const int PjmsChapterKnightSpaceAdventureResetAreaReq = 8438; + public const int PjmsChapterKnightSpaceAdventureResetAreaRsp = 8439; + public const int CreateChatgroupReq = 2200; + public const int CreateChatgroupRsp = 2201; + public const int InviteChatgroupReq = 2202; + public const int InviteChatgroupRsp = 2203; + public const int GetChatgroupListReq = 2204; + public const int GetChatgroupListRsp = 2205; + public const int SetChatgroupReq = 2206; + public const int SetChatgroupRsp = 2207; + public const int LeaveChatgroupReq = 2208; + public const int LeaveChatgroupRsp = 2209; + public const int ChatgroupSystemNotify = 2211; + public const int KickChatgroupMemberReq = 2212; + public const int KickChatgroupMemberRsp = 2213; + public const int DealChatgroupInviteReq = 2214; + public const int DealChatgroupInviteRsp = 2215; + public const int InviteToMultiChatgroupReq = 2216; + public const int InviteToMultiChatgroupRsp = 2217; + public const int GetChatgroupHistoryChatMsgReq = 2218; + public const int GetChatgroupHistoryChatMsgRsp = 2219; + public const int EnterWorldChatroomReq = 2231; + public const int EnterWorldChatroomRsp = 2232; + public const int LeaveChatroomNotify = 2233; + public const int SendChatMsgNotify = 2234; + public const int RecvChatMsgNotify = 2235; + public const int RecvOfflinePrivateChatMsgNotify = 2236; + public const int GetPrivateHistoryChatMsgReq = 2237; + public const int GetPrivateHistoryChatMsgRsp = 2238; + public const int ChatCloseNotify = 2239; + public const int EnterCommonChatworldReq = 2400; + public const int EnterCommonChatworldRsp = 2401; + public const int LeaveCommonChatworldReq = 2402; + public const int LeaveCommonChatworldRsp = 2403; + public const int SendCommonChatworldMsgNotify = 2404; + public const int RecvCommonChatworldMsgNotify = 2405; + public const int ChatworldUseItemReq = 2407; + public const int ChatworldUseItemRsp = 2408; + public const int ChatworldChangeAvatarReq = 2409; + public const int ChatworldChangeAvatarRsp = 2410; + public const int GetChatworldListReq = 2411; + public const int GetChatworldListRsp = 2412; + public const int ChatworldInteractReq = 2413; + public const int ChatworldInteractRsp = 2414; + public const int GetChatworldTreasureDataReq = 2415; + public const int GetChatworldTreasureDataRsp = 2416; + public const int OpenChatworldTreasureReq = 2417; + public const int OpenChatworldTreasureRsp = 2418; + public const int ChatworldTreasureRewardNotify = 2419; + public const int ChatworldSkillDamageJudgeReq = 2420; + public const int ChatworldSkillDamageJudgeRsp = 2421; + public const int ChatworldBattleUseItemReq = 2422; + public const int ChatworldBattleUseItemRsp = 2423; + public const int ChatworldPosResetNotify = 2424; + public const int ChatworldBattleCollectItemReq = 2425; + public const int ChatworldBattleCollectItemRsp = 2426; + public const int ChatworldGetActivityScheduleReq = 2427; + public const int ChatworldGetActivityScheduleRsp = 2428; + public const int ChatworldFishJoinSpotReq = 2429; + public const int ChatworldFishJoinSpotRsp = 2430; + public const int ChatworldFishLeaveSpotReq = 2431; + public const int ChatworldFishLeaveSpotRsp = 2432; + public const int ChatworldFishStartReq = 2433; + public const int ChatworldFishStartRsp = 2434; + public const int ChatworldFishEndReq = 2435; + public const int ChatworldFishEndRsp = 2436; + public const int ChatworldFishAssistReq = 2437; + public const int ChatworldFishAssistRsp = 2438; + public const int ChatworldFishLikeReq = 2439; + public const int ChatworldFishLikeRsp = 2440; + public const int ChatworldFishRewardNotify = 2441; + public const int ChatworldFishCancelWaitAssistReq = 2442; + public const int ChatworldFishCancelWaitAssistRsp = 2443; + public const int ChatworldFishKickPlayerNotify = 2444; + public const int ChatworldFishGetActivityInfoReq = 2445; + public const int ChatworldFishGetActivityInfoRsp = 2446; + public const int ChatworldGetPrayInfoReq = 2451; + public const int ChatworldGetPrayInfoRsp = 2452; + public const int ChatworldPrayReq = 2453; + public const int ChatworldPrayRsp = 2454; + public const int ChatworldGrantRewardNotify = 2455; + public const int ChatworldGetDishInfoReq = 2456; + public const int ChatworldGetDishInfoRsp = 2457; + public const int ChatworldTakeDishRewardReq = 2458; + public const int ChatworldTakeDishRewardRsp = 2459; + public const int ChatworldBeastAddResultNotify = 2460; + public const int ChatworldBeastChallengeReq = 2461; + public const int ChatworldBeastChallengeRsp = 2462; + public const int ChatworldBeastSyncReq = 2463; + public const int ChatworldBeastSyncRsp = 2464; + public const int ChatworldBeastGetActivityReq = 2465; + public const int ChatworldBeastGetActivityRsp = 2466; + public const int ChatworldBoxGetDataReq = 2467; + public const int ChatworldBoxGetDataRsp = 2468; + public const int ChatworldBoxTakeRewardReq = 2469; + public const int ChatworldBoxTakeRewardRsp = 2470; + public const int ChatworldBeastTakeTreasureReq = 2471; + public const int ChatworldBeastTakeTreasureRsp = 2472; + public const int ChatworldBeastAbandonChallengeReq = 2473; + public const int ChatworldBeastAbandonChallengeRsp = 2474; + public const int ChatworldGetCinemaInfoReq = 2475; + public const int ChatworldGetCinemaInfoRsp = 2476; + public const int ChatworldWoodenBoyEnterReq = 2477; + public const int ChatworldWoodenBoyEnterRsp = 2478; + public const int ChatworldWoodenBoyLeaveReq = 2479; + public const int ChatworldWoodenBoyLeaveRsp = 2480; + public const int ChatworldWoodenBoyStartNotify = 2481; + public const int ChatworldWoodenBoySettleNotify = 2482; + public const int ChatworldWoodenBoyUpdateStatusReq = 2483; + public const int ChatworldWoodenBoyUpdateStatusRsp = 2484; + public const int ChatworldQuestionSettleNotify = 2485; + public const int ChatWorldGetWishInfoReq = 2486; + public const int ChatWorldGetWishInfoRsp = 2487; + public const int ChatWorldDoWishReq = 2488; + public const int ChatWorldDoWishRsp = 2489; + public const int ChatWorldExchangeGoodsReq = 2492; + public const int ChatWorldExchangeGoodsRsp = 2493; + public const int ChatworldChangeEnterEffectReq = 2494; + public const int ChatworldChangeEnterEffectRsp = 2495; + public const int ChatworldQCandyActivityGetReq = 2496; + public const int ChatworldQCandyActivityGetRsp = 2497; + public const int ChatworldGroupPhotoGetOpenedBackDropReq = 2506; + public const int ChatworldGroupPhotoGetOpenedBackDropRsp = 2507; + public const int ChatworldGroupPhotoUpdatePlayerInfoReq = 2498; + public const int ChatworldGroupPhotoUpdatePlayerInfoRsp = 2499; + public const int ChatworldBanquetSendLanternReq = 2500; + public const int ChatworldBanquetSendLanternRsp = 2501; + public const int ChatworldBanquetTakeLanternRewardReq = 2502; + public const int ChatworldBanquetTakeLanternRewardRsp = 2503; + public const int ChatworldBanquetGetDataReq = 2504; + public const int ChatworldBanquetGetDataRsp = 2505; + public const int ChatworldBanquetReportDanceTimeReq = 2508; + public const int ChatworldBanquetReportDanceTimeRsp = 2509; + public const int ChatworldBanquetTakeDanceRewardReq = 2510; + public const int ChatworldBanquetTakeDanceRewardRsp = 2511; + public const int ChatworldAddRobotNotify = 2512; + public const int DevilAutoChessGetActivityReq = 8200; + public const int DevilAutoChessGetActivityRsp = 8201; + public const int DevilAutoChessRoleLevelUpReq = 8202; + public const int DevilAutoChessRoleLevelUpRsp = 8203; + public const int DevilAutoChessBeginGameReq = 8204; + public const int DevilAutoChessBeginGameRsp = 8205; + public const int DevilAutoChessGetGameReq = 8206; + public const int DevilAutoChessGetGameRsp = 8207; + public const int DevilAutoChessEndGameReq = 8208; + public const int DevilAutoChessEndGameRsp = 8209; + public const int DevilAutoChessRemoveCardReq = 8210; + public const int DevilAutoChessRemoveCardRsp = 8211; + public const int DevilAutoChessRefreshTreasurePoolReq = 8212; + public const int DevilAutoChessRefreshTreasurePoolRsp = 8213; + public const int DevilAutoChessRefreshCardPoolReq = 8214; + public const int DevilAutoChessRefreshCardPoolRsp = 8215; + public const int DevilAutoChessPromoteCardReq = 8216; + public const int DevilAutoChessPromoteCardRsp = 8217; + public const int DevilAutoChessSelectTreasureReq = 8218; + public const int DevilAutoChessSelectTreasureRsp = 8219; + public const int DevilAutoChessSelectCardReq = 8220; + public const int DevilAutoChessSelectCardRsp = 8221; + public const int DevilAutoChessFinishWaveReq = 8222; + public const int DevilAutoChessFinishWaveRsp = 8223; + public const int DevilAutoChessTriggerEventReq = 8224; + public const int DevilAutoChessTriggerEventRsp = 8225; + public const int DevilAutoChessSweepChallengeReq = 8226; + public const int DevilAutoChessSweepChallengeRsp = 8227; + public const int DevilAutoChessGetSpecialRankReq = 8228; + public const int DevilAutoChessGetSpecialRankRsp = 8229; + public const int DevilAutoChessGetWikiReq = 8230; + public const int DevilAutoChessGetWikiRsp = 8231; + public const int DevilAutoChessUnlockAchievementReq = 8232; + public const int DevilAutoChessUnlockAchievementRsp = 8233; + public const int DevilAutoChessUnlockBondReq = 8234; + public const int DevilAutoChessUnlockBondRsp = 8235; + public const int DiceyDungeonActivityGetDataReq = 6500; + public const int DiceyDungeonActivityGetDataRsp = 6501; + public const int DiceyDungeonActivityRoleLevelUpReq = 6502; + public const int DiceyDungeonActivityRoleLevelUpRsp = 6503; + public const int DiceyDungeonActivityDungeonBeginReq = 6504; + public const int DiceyDungeonActivityDungeonBeginRsp = 6505; + public const int DiceyDungeonActivityDungeonEndReq = 6506; + public const int DiceyDungeonActivityDungeonEndRsp = 6507; + public const int DiceyDungeonActivityRoomBeginReq = 6508; + public const int DiceyDungeonActivityRoomBeginRsp = 6509; + public const int DiceyDungeonActivityRoomEndReq = 6510; + public const int DiceyDungeonActivityRoomEndRsp = 6511; + public const int DiceyDungeonActivityGetWeaponGachaDisplayReq = 6512; + public const int DiceyDungeonActivityGetWeaponGachaDisplayRsp = 6513; + public const int DiceyDungeonActivityWeaponGachaReq = 6514; + public const int DiceyDungeonActivityWeaponGachaRsp = 6515; + public const int DiceyDungeonActivitySelectOrnamentReq = 6516; + public const int DiceyDungeonActivitySelectOrnamentRsp = 6517; + public const int DiceyDungeonActivityRefreshOrnamentReq = 6518; + public const int DiceyDungeonActivityRefreshOrnamentRsp = 6519; + public const int DiceyDungeonActivityGetDailyScoreRankReq = 6520; + public const int DiceyDungeonActivityGetDailyScoreRankRsp = 6521; + public const int GetDLCReq = 3550; + public const int GetDLCRsp = 3551; + public const int LevelUpDLCAvatarTalentReq = 3552; + public const int LevelUpDLCAvatarTalentRsp = 3553; + public const int EquipDLCAvatarTalentReq = 3554; + public const int EquipDLCAvatarTalentRsp = 3555; + public const int SyncDLCAvatarNotify = 3556; + public const int ModifyDLCNameReq = 3557; + public const int ModifyDLCNameRsp = 3558; + public const int GetDLCAvatarReq = 3559; + public const int GetDLCAvatarRsp = 3560; + public const int TakeDLCLevelRewardReq = 3561; + public const int TakeDLCLevelRewardRsp = 3562; + public const int DLCTowerStageBeginReq = 3563; + public const int DLCTowerStageBeginRsp = 3564; + public const int DLCTowerStageEndReq = 3565; + public const int DLCTowerStageEndRsp = 3566; + public const int DLCAvatarReviveReq = 3569; + public const int DLCAvatarReviveRsp = 3570; + public const int GetDLCTowerRankReq = 3571; + public const int GetDLCTowerRankRsp = 3572; + public const int TakeDLCTowerRankRewardNotify = 3573; + public const int GetDLCTowerReq = 3574; + public const int GetDLCTowerRsp = 3575; + public const int ResetDLCTowerProgressReq = 3576; + public const int ResetDLCTowerProgressRsp = 3577; + public const int FinishDLCDialogReq = 3578; + public const int FinishDLCDialogRsp = 3579; + public const int RefreshDLCTalentAffixReq = 3580; + public const int RefreshDLCTalentAffixRsp = 3581; + public const int SelectDLCTalentAffixReq = 3584; + public const int SelectDLCTalentAffixRsp = 3585; + public const int UnlockDLCPhotoReq = 3586; + public const int UnlockDLCPhotoRsp = 3587; + public const int SwitchDLCAvatarTalentReq = 3588; + public const int SwitchDLCAvatarTalentRsp = 3589; + public const int ReportDLCDropItemReq = 3590; + public const int ReportDLCDropItemRsp = 3591; + public const int GetElfDataReq = 2100; + public const int GetElfDataRsp = 2101; + public const int SyncElfDataNotify = 2102; + public const int SyncElfFragmentNotify = 2103; + public const int ElfStarUpReq = 2105; + public const int ElfStarUpRsp = 2106; + public const int AddElfExpByMaterialReq = 2107; + public const int AddElfExpByMaterialRsp = 2108; + public const int ElfFragmentTransformReq = 2121; + public const int ElfFragmentTransformRsp = 2122; + public const int ElfSkillLevelUpReq = 2123; + public const int ElfSkillLevelUpRsp = 2124; + public const int ElfTakeCompensationReq = 2125; + public const int ElfTakeCompensationRsp = 2126; + public const int GetLastEndlessRewardDataReq = 3406; + public const int GetLastEndlessRewardDataRsp = 3407; + public const int TakeEndlessBaseRewardReq = 3417; + public const int TakeEndlessBaseRewardRsp = 3418; + public const int GetOpenworldEndlessDataReq = 3419; + public const int GetOpenworldEndlessDataRsp = 3420; + public const int OpenworldEndlessItemUpdateNotify = 3421; + public const int UseOpenworldEndlessItemReq = 3422; + public const int UseOpenworldEndlessItemRsp = 3423; + public const int FinishOpenworldEndlessMonsterGroupReq = 3424; + public const int FinishOpenworldEndlessMonsterGroupRsp = 3425; + public const int GetOpenworldEndlessStageInnerDataReq = 3426; + public const int GetOpenworldEndlessStageInnerDataRsp = 3427; + public const int TriggerOpenworldEndlessTrapReq = 3428; + public const int TriggerOpenworldEndlessTrapRsp = 3429; + public const int FinishOpenworldEndlessInvasionMonsterReq = 3430; + public const int FinishOpenworldEndlessInvasionMonsterRsp = 3431; + public const int GetEndlessStatusReq = 3432; + public const int GetEndlessStatusRsp = 3433; + public const int ReportOpenworldEndlessDataReq = 3434; + public const int ReportOpenworldEndlessDataRsp = 3435; + public const int OpenworldEndlessBattleBeginReq = 3438; + public const int OpenworldEndlessBattleBeginRsp = 3439; + public const int OpenworldEndlessBattleEndReq = 3440; + public const int OpenworldEndlessBattleEndRsp = 3441; + public const int OpenworldEndlessWarInfoNotify = 3442; + public const int GetOpenworldEndlessPlayerWarInfoReq = 3443; + public const int GetOpenworldEndlessPlayerWarInfoRsp = 3444; + public const int OpenworldEndlessPlayerUpdateNotify = 3445; + public const int GetOpenworldEndlessTopGroupReq = 3446; + public const int GetOpenworldEndlessTopGroupRsp = 3447; + public const int SetOpenworldEndlessMonsterGroupProgressReq = 3448; + public const int SetOpenworldEndlessMonsterGroupProgressRsp = 3449; + public const int OpenworldEndlessChangeAvatarReq = 3450; + public const int OpenworldEndlessChangeAvatarRsp = 3451; + public const int EndlessInSettleNotify = 3452; + public const int GreedyEndlessEnrollReq = 3453; + public const int GreedyEndlessEnrollRsp = 3454; + public const int GreedyEndlessReportFloorEndReq = 3455; + public const int GreedyEndlessReportFloorEndRsp = 3456; + public const int GreedyEndlessFloorRewardNotify = 3457; + public const int GreedyEndlessGetRankReq = 3458; + public const int GreedyEndlessGetRankRsp = 3459; + public const int GreedyEndlessTakeRankRewardReq = 3460; + public const int GreedyEndlessTakeRankRewardRsp = 3461; + public const int EndlessSelectTypeReq = 3462; + public const int EndlessSelectTypeRsp = 3463; + public const int GreedyEndlessReportFloorBeginReq = 3464; + public const int GreedyEndlessReportFloorBeginRsp = 3465; + public const int GetEquipmentForgeDataReq = 3650; + public const int GetEquipmentForgeDataRsp = 3651; + public const int ForgeEquipmentReq = 3652; + public const int ForgeEquipmentRsp = 3653; + public const int ExtractEquipmentReq = 3654; + public const int ExtractEquipmentRsp = 3655; + public const int ReforgeEquipmentReq = 3657; + public const int ReforgeEquipmentRsp = 3658; + public const int GetExtractReforgeActivityReq = 3659; + public const int GetExtractReforgeActivityRsp = 3660; + public const int GetEquipmentBackReq = 3661; + public const int GetEquipmentBackRsp = 3662; + public const int BackEquipmentReq = 3663; + public const int BackEquipmentRsp = 3664; + public const int GachaReq = 4700; + public const int GachaRsp = 4701; + public const int GetGachaDisplayReq = 4702; + public const int GetGachaDisplayRsp = 4703; + public const int BuyGachaTicketReq = 4704; + public const int BuyGachaTicketRsp = 4705; + public const int GetGachaLogReq = 4706; + public const int GetGachaLogRsp = 4707; + public const int GetGachaProbReq = 4708; + public const int GetGachaProbRsp = 4709; + public const int WishWellReq = 4710; + public const int WishWellRsp = 4711; + public const int BuyControllableBoxGachaTicketReq = 4712; + public const int BuyControllableBoxGachaTicketRsp = 4713; + public const int TakeGachaExRewardReq = 4714; + public const int TakeGachaExRewardRsp = 4715; + public const int ChooseOptionalGachaReq = 4716; + public const int ChooseOptionalGachaRsp = 4717; + public const int SelectControllableBoxGachaSelectableGroupItemReq = 4718; + public const int SelectControllableBoxGachaSelectableGroupItemRsp = 4719; + public const int UniqueGachaUpdateItemPoolReq = 4722; + public const int UniqueGachaUpdateItemPoolRsp = 4723; + public const int GeneralActivityScoreRewardNotify = 4000; + public const int GeneralActivityGetScoreRewardInfoReq = 4001; + public const int GeneralActivityGetScoreRewardInfoRsp = 4002; + public const int GeneralActivityGetScheduleReq = 4003; + public const int GeneralActivityGetScheduleRsp = 4004; + public const int GeneralActivityGetMainInfoReq = 4005; + public const int GeneralActivityGetMainInfoRsp = 4006; + public const int GeneralActivityGetRankReq = 4007; + public const int GeneralActivityGetRankRsp = 4008; + public const int PushTowerActivityTakeStageRewardReq = 4009; + public const int PushTowerActivityTakeStageRewardRsp = 4010; + public const int PushTowerActivityTakeClearRewardReq = 4011; + public const int PushTowerActivityTakeClearRewardRsp = 4012; + public const int GeneralActivityStageExchangeEnterTimesReq = 4030; + public const int GeneralActivityStageExchangeEnterTimesRsp = 4031; + public const int GeneralActivityStageTakeStageRewardReq = 4032; + public const int GeneralActivityStageTakeStageRewardRsp = 4033; + public const int TakeGeneralActivityScoreRewardReq = 4034; + public const int TakeGeneralActivityScoreRewardRsp = 4035; + public const int GeneralActivityStageTakeStageGroupRewardReq = 4036; + public const int GeneralActivityStageTakeStageGroupRewardRsp = 4037; + public const int EndlessSingleModeActivityFinishFloorReq = 4038; + public const int EndlessSingleModeActivityFinishFloorRsp = 4039; + public const int EndlessSingleModeActivityResetReq = 4040; + public const int EndlessSingleModeActivityResetRsp = 4041; + public const int EndlessSingleModeActivityBattleBeginReq = 4042; + public const int EndlessSingleModeActivityBattleBeginRsp = 4043; + public const int EndlessSingleModeActivityBattleEndReq = 4044; + public const int EndlessSingleModeActivityBattleEndRsp = 4045; + public const int EndlessSingleModeActivityTakeItemReq = 4046; + public const int EndlessSingleModeActivityTakeItemRsp = 4047; + public const int EndlessSingleModeActivityUseItemReq = 4048; + public const int EndlessSingleModeActivityUseItemRsp = 4049; + public const int GeneralActivityGetStageRankReq = 4052; + public const int GeneralActivityGetStageRankRsp = 4053; + public const int CrisisModeActivityTakeStageRewardReq = 4056; + public const int CrisisModeActivityTakeStageRewardRsp = 4057; + public const int GeneralActivityTakeTicketReq = 4060; + public const int GeneralActivityTakeTicketRsp = 4061; + public const int BossChallengeActivityGetStageRankReq = 4062; + public const int BossChallengeActivityGetStageRankRsp = 4063; + public const int FrontEndlessActivityBattleBeginReq = 4064; + public const int FrontEndlessActivityBattleBeginRsp = 4065; + public const int FrontEndlessActivityBattleEndReq = 4066; + public const int FrontEndlessActivityBattleEndRsp = 4067; + public const int GlobalExploreGetActivityReq = 6900; + public const int GlobalExploreGetActivityRsp = 6901; + public const int GlobalExploreNotify = 6902; + public const int GlobalExploreMoveReq = 6903; + public const int GlobalExploreMoveRsp = 6904; + public const int GlobalExploreInteractReq = 6905; + public const int GlobalExploreInteractRsp = 6906; + public const int GlobalExploreActionReq = 6907; + public const int GlobalExploreActionRsp = 6908; + public const int GetGlobalWarActivityReq = 3950; + public const int GetGlobalWarActivityRsp = 3951; + public const int GlobalWarTakePointRewardReq = 3952; + public const int GlobalWarTakePointRewardRsp = 3953; + public const int GlobalWarAddCurrencyNotify = 3954; + public const int GlobalWarExchangeCurrencyReq = 3955; + public const int GlobalWarExchangeCurrencyRsp = 3956; + public const int GlobalWarGetRankReq = 3957; + public const int GlobalWarGetRankRsp = 3958; + public const int GlobalWarTakeSweepRewardReq = 3959; + public const int GlobalWarTakeSweepRewardRsp = 3960; + public const int GetGodWarReq = 6150; + public const int GetGodWarRsp = 6151; + public const int SelectGodWarChallengeAvatarReq = 6152; + public const int SelectGodWarChallengeAvatarRsp = 6153; + public const int ChangeGodWarChallengeSupportAvatarReq = 6154; + public const int ChangeGodWarChallengeSupportAvatarRsp = 6155; + public const int SyncGodWarTaleNotify = 6156; + public const int ResetGodWarChallengeReq = 6157; + public const int ResetGodWarChallengeRsp = 6158; + public const int GodWarEventNotify = 6160; + public const int TriggerGodWarEventReq = 6161; + public const int TriggerGodWarEventRsp = 6162; + public const int RefreshGodWarTeleportEventReq = 6163; + public const int RefreshGodWarTeleportEventRsp = 6164; + public const int SelectGodWarBuffReq = 6170; + public const int SelectGodWarBuffRsp = 6171; + public const int LevelUpGodWarTalentReq = 6172; + public const int LevelUpGodWarTalentRsp = 6173; + public const int TakeGodWarTalentSupportLevelRewardNotify = 6176; + public const int AddGodWarRoleRelationExpReq = 6177; + public const int AddGodWarRoleRelationExpRsp = 6178; + public const int LevelUpGodWarRoleRelationReq = 6179; + public const int LevelUpGodWarRoleRelationRsp = 6180; + public const int TakeGodWarRoleRelationLevelRewardReq = 6181; + public const int TakeGodWarRoleRelationLevelRewardRsp = 6182; + public const int GetGodWarTaleShopReq = 6183; + public const int GetGodWarTaleShopRsp = 6184; + public const int BuyGodWarShopGoodsReq = 6185; + public const int BuyGodWarShopGoodsRsp = 6186; + public const int TakeGodWarRoleStoryRewardReq = 6187; + public const int TakeGodWarRoleStoryRewardRsp = 6188; + public const int RefreshGodWarTicketReq = 6189; + public const int RefreshGodWarTicketRsp = 6190; + public const int PredictGodWarEventReq = 6191; + public const int PredictGodWarEventRsp = 6192; + public const int RefreshGodWarBuffEventReq = 6193; + public const int RefreshGodWarBuffEventRsp = 6194; + public const int GetGodWarRoleReq = 6195; + public const int GetGodWarRoleRsp = 6196; + public const int GetGodWarTeleportEventReq = 6197; + public const int GetGodWarTeleportEventRsp = 6198; + public const int SwitchGodWarChapterReq = 6199; + public const int SwitchGodWarChapterRsp = 6200; + public const int GetGodWarLobbyReq = 6201; + public const int GetGodWarLobbyRsp = 6202; + public const int FinishGodWarLobbyActionReq = 6203; + public const int FinishGodWarLobbyActionRsp = 6204; + public const int RefreshGodWarShopGoodsReq = 6205; + public const int RefreshGodWarShopGoodsRsp = 6206; + public const int SkipGodWarStoryNodeReq = 6207; + public const int SkipGodWarStoryNodeRsp = 6208; + public const int RefreshGodWarGachaReq = 6209; + public const int RefreshGodWarGachaRsp = 6210; + public const int GourmetHuntGetActivityReq = 8150; + public const int GourmetHuntGetActivityRsp = 8151; + public const int GourmetHuntLevelUpReq = 8152; + public const int GourmetHuntLevelUpRsp = 8153; + public const int GourmetHuntUnlockWeaponModuleReq = 8154; + public const int GourmetHuntUnlockWeaponModuleRsp = 8155; + public const int GourmetHuntUnlockFurnitureReq = 8156; + public const int GourmetHuntUnlockFurnitureRsp = 8157; + public const int GourmetHuntStartManagementReq = 8158; + public const int GourmetHuntStartManagementRsp = 8159; + public const int GourmetHuntStopManagementReq = 8160; + public const int GourmetHuntStopManagementRsp = 8161; + public const int GourmetHuntStartExploreReq = 8162; + public const int GourmetHuntStartExploreRsp = 8163; + public const int GourmetHuntStopExploreReq = 8164; + public const int GourmetHuntStopExploreRsp = 8165; + public const int GourmetHuntOpenTreasureReq = 8166; + public const int GourmetHuntOpenTreasureRsp = 8167; + public const int GourmetHuntTriggerTeleportReq = 8168; + public const int GourmetHuntTriggerTeleportRsp = 8169; + public const int GourmetHuntKillBossReq = 8170; + public const int GourmetHuntKillBossRsp = 8171; + public const int GourmetHuntEnterRoomReq = 8172; + public const int GourmetHuntEnterRoomRsp = 8173; + public const int GourmetHuntGetRankReq = 8174; + public const int GourmetHuntGetRankRsp = 8175; + public const int GourmetHuntTriggerEntityReq = 8176; + public const int GourmetHuntTriggerEntityRsp = 8177; + public const int GourmetHuntDailyStaminaRecoveryNotify = 8178; + public const int GourmetHuntBuildBranchStoreReq = 8179; + public const int GourmetHuntBuildBranchStoreRsp = 8180; + public const int GourmetHuntOpenBranchStoreReq = 8181; + public const int GourmetHuntOpenBranchStoreRsp = 8182; + public const int KianaAutoChessGetActivityReq = 8500; + public const int KianaAutoChessGetActivityRsp = 8501; + public const int KianaAutoChessSaveTurnReq = 8502; + public const int KianaAutoChessSaveTurnRsp = 8503; + public const int KianaAutoChessPvpBeginBattleNotify = 8504; + public const int KianaAutoChessPvpPlayerSettleNotify = 8505; + public const int KianaAutoChessPvpEnterBattleReq = 8506; + public const int KianaAutoChessPvpEnterBattleRsp = 8507; + public const int KianaAutoChessPvpGetBattleReq = 8508; + public const int KianaAutoChessPvpGetBattleRsp = 8509; + public const int KianaAutoChessPvpAbandonBattleReq = 8510; + public const int KianaAutoChessPvpAbandonBattleRsp = 8511; + public const int KianaAutoChessPvpEndBattleNotify = 8512; + public const int KianaAutoChessPvpSyncOpponentNotify = 8513; + public const int KianaAutoChessPvpSyncActionNotify = 8514; + public const int KianaAutoChessPvpUseItemReq = 8515; + public const int KianaAutoChessPvpUseItemRsp = 8516; + public const int KianaAutoChessPvpSellCardReq = 8517; + public const int KianaAutoChessPvpSellCardRsp = 8518; + public const int KianaAutoChessPvpBuyCardReq = 8519; + public const int KianaAutoChessPvpBuyCardRsp = 8520; + public const int KianaAutoChessPvpRefreshShopReq = 8521; + public const int KianaAutoChessPvpRefreshShopRsp = 8522; + public const int KianaAutoChessPvpLockShopReq = 8523; + public const int KianaAutoChessPvpLockShopRsp = 8524; + public const int KianaAutoChessPvpSendEmojiReq = 8525; + public const int KianaAutoChessPvpSendEmojiRsp = 8526; + public const int KianaAutoChessPvpSelectRuneReq = 8527; + public const int KianaAutoChessPvpSelectRuneRsp = 8528; + public const int KianaAutoChessPvpRefreshRuneReq = 8529; + public const int KianaAutoChessPvpRefreshRuneRsp = 8530; + public const int KianaAutoChessPvpUpgradeBagReq = 8531; + public const int KianaAutoChessPvpUpgradeBagRsp = 8532; + public const int KianaAutoChessPvpReportTurnReq = 8533; + public const int KianaAutoChessPvpReportTurnRsp = 8534; + public const int KianaAutoChessGetLobbyStatusReq = 8535; + public const int KianaAutoChessGetLobbyStatusRsp = 8536; + public const int KianaAutoChessClearStageRecordReq = 8537; + public const int KianaAutoChessClearStageRecordRsp = 8538; + public const int KianaAutoChessStoryStageBeginReq = 8539; + public const int KianaAutoChessStoryStageBeginRsp = 8540; + public const int KianaAutoChessStoryStageEndReq = 8541; + public const int KianaAutoChessStoryStageEndRsp = 8542; + public const int KianaAutoChessPvpFightEndNotify = 8543; + public const int MahouCardGetActivityReq = 7900; + public const int MahouCardGetActivityRsp = 7901; + public const int MahouCardRoleLevelUpReq = 7902; + public const int MahouCardRoleLevelUpRsp = 7903; + public const int MahouCardEnterSiteReq = 7904; + public const int MahouCardEnterSiteRsp = 7905; + public const int MahouCardEnterRoomReq = 7906; + public const int MahouCardEnterRoomRsp = 7907; + public const int MahouCardExitRoomReq = 7908; + public const int MahouCardExitRoomRsp = 7909; + public const int MahouCardExitSiteReq = 7925; + public const int MahouCardExitSiteRsp = 7926; + public const int MahouCardGetCurSiteInfoReq = 7910; + public const int MahouCardGetCurSiteInfoRsp = 7911; + public const int MahouCardHandCardChangeNotify = 7912; + public const int MahouCardExchangeCardReq = 7913; + public const int MahouCardExchangeCardRsp = 7914; + public const int MahouCardDiscardCardReq = 7915; + public const int MahouCardDiscardCardRsp = 7916; + public const int MahouCardLevelUpCardReq = 7917; + public const int MahouCardLevelUpCardRsp = 7918; + public const int MahouCardSetBattleCardReq = 7919; + public const int MahouCardSetBattleCardRsp = 7920; + public const int MahouCardRecallBattleCardReq = 7921; + public const int MahouCardRecallBattleCardRsp = 7922; + public const int MahouCardSelectProphesyReq = 7923; + public const int MahouCardSelectProphesyRsp = 7924; + public const int MahouCardChooseEventOptionReq = 7927; + public const int MahouCardChooseEventOptionRsp = 7928; + public const int MahouCardEventNotify = 7929; + public const int MahouCardBattleBeginReq = 7930; + public const int MahouCardBattleBeginRsp = 7931; + public const int MahouCardBattleEndReq = 7932; + public const int MahouCardBattleEndRsp = 7933; + public const int MahouCardUnlockDailySiteReq = 7934; + public const int MahouCardUnlockDailySiteRsp = 7935; + public const int MahouCardGetDailySiteRankReq = 7936; + public const int MahouCardGetDailySiteRankRsp = 7937; + public const int MahouCardOverdrawnNotify = 7938; + public const int GetClientMailDataReq = 3800; + public const int GetClientMailDataRsp = 3801; + public const int TakeClientMailAttachmentReq = 3802; + public const int TakeClientMailAttachmentRsp = 3803; + public const int MarkReadClientMailReq = 3804; + public const int MarkReadClientMailRsp = 3805; + public const int DelClientMailReq = 3806; + public const int DelClientMailRsp = 3807; + public const int NewClientMailNotify = 3808; + public const int SetClientMailFavoriteReq = 3809; + public const int SetClientMailFavoriteRsp = 3810; + public const int MarblesShootGetActivityReq = 8050; + public const int MarblesShootGetActivityRsp = 8051; + public const int MarblesShootAvatarLevelUpReq = 8052; + public const int MarblesShootAvatarLevelUpRsp = 8053; + public const int MarblesShootGetGameReq = 8054; + public const int MarblesShootGetGameRsp = 8055; + public const int MarblesShootBeginGameReq = 8056; + public const int MarblesShootBeginGameRsp = 8057; + public const int MarblesShootEndGameReq = 8058; + public const int MarblesShootEndGameRsp = 8059; + public const int MarblesShootFinishRoomReq = 8060; + public const int MarblesShootFinishRoomRsp = 8061; + public const int MarblesShootTriggerEventReq = 8062; + public const int MarblesShootTriggerEventRsp = 8063; + public const int MarblesShootFinishBattleReq = 8064; + public const int MarblesShootFinishBattleRsp = 8065; + public const int MarblesShootSelectRewardReq = 8066; + public const int MarblesShootSelectRewardRsp = 8067; + public const int MarblesShootShopOperateReq = 8068; + public const int MarblesShootShopOperateRsp = 8069; + public const int MarblesShootGetRankReq = 8070; + public const int MarblesShootGetRankRsp = 8071; + public const int MarblesShootSelectInitItemReq = 8072; + public const int MarblesShootSelectInitItemRsp = 8073; + public const int MarblesShootGetWikiReq = 8074; + public const int MarblesShootGetWikiRsp = 8075; + public const int MatchThreeGetActivityReq = 7601; + public const int MatchThreeGetActivityRsp = 7602; + public const int MatchThreeRoleLevelUpReq = 7603; + public const int MatchThreeRoleLevelUpRsp = 7604; + public const int MatchThreeGemGachaDisplayReq = 7605; + public const int MatchThreeGemGachaDisplayRsp = 7606; + public const int MatchThreeGemGachaReq = 7607; + public const int MatchThreeGemGachaRsp = 7608; + public const int MatchThreeGetRankReq = 7609; + public const int MatchThreeGetRankRsp = 7610; + public const int MatchThreeRoomBeginReq = 7611; + public const int MatchThreeRoomBeginRsp = 7612; + public const int MatchThreeRoomEndReq = 7613; + public const int MatchThreeRoomEndRsp = 7614; + public const int MirageGetActivityReq = 7000; + public const int MirageGetActivityRsp = 7001; + public const int MirageTalentLevelUpReq = 7002; + public const int MirageTalentLevelUpRsp = 7003; + public const int MirageReportStageBeginReq = 7004; + public const int MirageReportStageBeginRsp = 7005; + public const int MirageResetDailyDropLimitReq = 7006; + public const int MirageResetDailyDropLimitRsp = 7007; + public const int GetMonopolyActivityReq = 3850; + public const int GetMonopolyActivityRsp = 3851; + public const int MonopolyThrowDiceReq = 3852; + public const int MonopolyThrowDiceRsp = 3853; + public const int MonopolyBuildingConstructReq = 3854; + public const int MonopolyBuildingConstructRsp = 3855; + public const int MonopolyEndRoundReq = 3856; + public const int MonopolyEndRoundRsp = 3857; + public const int MonopolyUseItemReq = 3858; + public const int MonopolyUseItemRsp = 3859; + public const int MonopolyRewardNotify = 3860; + public const int MonopolyBuyGoodsReq = 3861; + public const int MonopolyBuyGoodsRsp = 3862; + public const int MonopolySkipBattleReq = 3863; + public const int MonopolySkipBattleRsp = 3864; + public const int MonopolyResetFloorReq = 3865; + public const int MonopolyResetFloorRsp = 3866; + public const int MonopolyAddMonsterReq = 3867; + public const int MonopolyAddMonsterRsp = 3868; + public const int ExchangeRaffleMaterialReq = 3890; + public const int ExchangeRaffleMaterialRsp = 3891; + public const int TakeRaffleRewardReq = 3894; + public const int TakeRaffleRewardRsp = 3895; + public const int DrawRaffleTicketReq = 3896; + public const int DrawRaffleTicketRsp = 3897; + public const int GetRaffleActivityReq = 3898; + public const int GetRaffleActivityRsp = 3899; + public const int GetNinjaActivityReq = 4400; + public const int GetNinjaActivityRsp = 4401; + public const int NinjaSlotStrengthenReq = 4402; + public const int NinjaSlotStrengthenRsp = 4403; + public const int NinjaActivityNotify = 4404; + public const int NinjaSlotChooseEffectReq = 4405; + public const int NinjaSlotChooseEffectRsp = 4406; + public const int KeepAliveNotify = 1; + public const int GetGameserverReq = 2; + public const int GetGameserverRsp = 3; + public const int GetPlayerTokenReq = 4; + public const int GetPlayerTokenRsp = 5; + public const int PlayerLoginReq = 6; + public const int PlayerLoginRsp = 7; + public const int PlayerLogoutReq = 8; + public const int GetMainDataReq = 10; + public const int GetMainDataRsp = 11; + public const int GetScoinExchangeInfoReq = 12; + public const int GetScoinExchangeInfoRsp = 13; + public const int ScoinExchangeReq = 14; + public const int ScoinExchangeRsp = 15; + public const int GetStaminaExchangeInfoReq = 16; + public const int GetStaminaExchangeInfoRsp = 17; + public const int StaminaExchangeReq = 18; + public const int StaminaExchangeRsp = 19; + public const int NicknameModifyReq = 20; + public const int NicknameModifyRsp = 21; + public const int GmTalkReq = 22; + public const int GmTalkRsp = 23; + public const int GetAvatarDataReq = 24; + public const int GetAvatarDataRsp = 25; + public const int GetEquipmentDataReq = 26; + public const int GetEquipmentDataRsp = 27; + public const int DelEquipmentNotify = 28; + public const int AvatarStarUpReq = 29; + public const int AvatarStarUpRsp = 30; + public const int EquipmentPowerUpReq = 31; + public const int EquipmentPowerUpRsp = 32; + public const int EquipmentSellReq = 33; + public const int EquipmentSellRsp = 34; + public const int AddAvatarExpByMaterialReq = 35; + public const int AddAvatarExpByMaterialRsp = 36; + public const int EquipmentEvoReq = 37; + public const int EquipmentEvoRsp = 38; + public const int DressEquipmentReq = 39; + public const int DressEquipmentRsp = 40; + public const int GetStageDataReq = 41; + public const int GetStageDataRsp = 42; + public const int StageBeginReq = 43; + public const int StageBeginRsp = 44; + public const int StageEndReq = 45; + public const int StageEndRsp = 46; + public const int GetAvatarTeamDataReq = 47; + public const int GetAvatarTeamDataRsp = 48; + public const int UpdateAvatarTeamNotify = 49; + public const int AvatarSubSkillLevelUpReq = 50; + public const int AvatarSubSkillLevelUpRsp = 51; + public const int MaterialEvoReq = 56; + public const int MaterialEvoRsp = 57; + public const int GetStageDropDisplayReq = 60; + public const int GetStageDropDisplayRsp = 61; + public const int GetFriendListReq = 64; + public const int GetFriendListRsp = 65; + public const int AddFriendReq = 66; + public const int AddFriendRsp = 67; + public const int DelFriendReq = 68; + public const int DelFriendRsp = 69; + public const int GetAskAddFriendListReq = 70; + public const int GetAskAddFriendListRsp = 71; + public const int GetPlayerDetailDataReq = 72; + public const int GetPlayerDetailDataRsp = 73; + public const int UpdateEquipmentProtectedStatusReq = 74; + public const int UpdateEquipmentProtectedStatusRsp = 75; + public const int GetRecommendFriendListReq = 76; + public const int GetRecommendFriendListRsp = 77; + public const int SetSelfDescReq = 78; + public const int SetSelfDescRsp = 79; + public const int DelFriendNotify = 80; + public const int GetOfflineFriendsPointNotify = 81; + public const int VerifyItunesOrderNotify = 82; + public const int GetMailDataReq = 84; + public const int GetMailDataRsp = 85; + public const int GetMailAttachmentReq = 86; + public const int GetMailAttachmentRsp = 87; + public const int UnlockAvatarSkillReq = 88; + public const int UnlockAvatarSkillRsp = 89; + public const int EquipmentQuickLevelUpReq = 90; + public const int EquipmentQuickLevelUpRsp = 91; + public const int RefreshAvatarSkillReq = 92; + public const int RefreshAvatarSkillRsp = 93; + public const int GetAssistantFrozenListReq = 100; + public const int GetAssistantFrozenListRsp = 101; + public const int SellAvatarFragmentReq = 102; + public const int SellAvatarFragmentRsp = 103; + public const int GetHasGotItemIdListReq = 104; + public const int GetHasGotItemIdListRsp = 105; + public const int AvatarReviveReq = 106; + public const int AvatarReviveRsp = 107; + public const int ResetStageEnterTimesReq = 108; + public const int ResetStageEnterTimesRsp = 109; + public const int GetConfigReq = 110; + public const int GetConfigRsp = 111; + public const int GetMissionDataReq = 112; + public const int GetMissionDataRsp = 113; + public const int GetMissionRewardReq = 114; + public const int GetMissionRewardRsp = 115; + public const int DelMissionNotify = 116; + public const int UpdateMissionProgressReq = 117; + public const int UpdateMissionProgressRsp = 118; + public const int BindAccountReq = 119; + public const int BindAccountRsp = 120; + public const int GetSignInRewardStatusReq = 121; + public const int GetSignInRewardStatusRsp = 122; + public const int GetSignInRewardReq = 123; + public const int GetSignInRewardRsp = 124; + public const int GetWeekDayActivityDataReq = 125; + public const int GetWeekDayActivityDataRsp = 126; + public const int GetFinishGuideDataReq = 127; + public const int GetFinishGuideDataRsp = 128; + public const int FinishGuideReportReq = 129; + public const int FinishGuideReportRsp = 130; + public const int StageInnerDataReportReq = 131; + public const int StageInnerDataReportRsp = 132; + public const int GetDispatchReq = 133; + public const int GetDispatchRsp = 134; + public const int ExchangeAvatarWeaponReq = 135; + public const int ExchangeAvatarWeaponRsp = 136; + public const int GetBulletinReq = 137; + public const int GetBulletinRsp = 138; + public const int AddGoodfeelReq = 154; + public const int AddGoodfeelRsp = 155; + public const int IslandDisjoinEquipmentReq = 179; + public const int IslandDisjoinEquipmentRsp = 180; + public const int GetGuideRewardReq = 185; + public const int GetGuideRewardRsp = 186; + public const int UrgencyMsgNotify = 187; + public const int RefineStigmataRuneReq = 193; + public const int RefineStigmataRuneRsp = 194; + public const int SelectNewStigmataRuneReq = 195; + public const int SelectNewStigmataRuneRsp = 196; + public const int CreateWeiXinOrderReq = 207; + public const int CreateWeiXinOrderRsp = 208; + public const int CommentReportReq = 229; + public const int CommentReportRsp = 230; + public const int GetExtraStoryDataReq = 231; + public const int GetExtraStoryDataRsp = 232; + public const int GetExtraStoryActivityActReq = 233; + public const int GetExtraStoryActivityActRsp = 234; + public const int GetExtraStoryAchieveDataReq = 235; + public const int GetExtraStoryAchieveDataRsp = 236; + public const int GetExtraStoryAchieveRewardReq = 237; + public const int GetExtraStoryAchieveRewardRsp = 238; + public const int SwitchDynamicHardLvReq = 239; + public const int SwitchDynamicHardLvRsp = 240; + public const int GetIslandEventReq = 241; + public const int GetIslandEventRsp = 242; + public const int FinishIslandEventReq = 243; + public const int FinishIslandEventRsp = 244; + public const int SetTransferPwdReq = 245; + public const int SetTransferPwdRsp = 246; + public const int VerifyGoogleOrderNotify = 247; + public const int SetDressReq = 248; + public const int SetDressRsp = 249; + public const int DressToReturnMaterialNotify = 250; + public const int UseMaterialReq = 251; + public const int UseMaterialRsp = 252; + public const int SwitchAvatarSubSkillReq = 253; + public const int SwitchAvatarSubSkillRsp = 254; + public const int ExchangeWeekDayActivityTimesReq = 259; + public const int ExchangeWeekDayActivityTimesRsp = 260; + public const int UpdateCustomAvatarTeamReq = 269; + public const int UpdateCustomAvatarTeamRsp = 270; + public const int UpdateAssistantAvatarIdReq = 271; + public const int UpdateAssistantAvatarIdRsp = 272; + public const int TakeDutyRewardReq = 288; + public const int TakeDutyRewardRsp = 289; + public const int ReportBirthdayReq = 299; + public const int ReportBirthdayRsp = 300; + public const int CreateLobbyReq = 301; + public const int CreateLobbyRsp = 302; + public const int EnterLobbyReq = 303; + public const int EnterLobbyRsp = 304; + public const int LeaveTeamReq = 305; + public const int LeaveTeamRsp = 306; + public const int UpdateLobbyLineupReq = 307; + public const int UpdateLobbyLineupRsp = 308; + public const int SwitchMemberStatusReq = 309; + public const int SwitchMemberStatusRsp = 310; + public const int LobbyStageBeginReq = 311; + public const int LobbyStageBeginRsp = 312; + public const int LobbyStageEndReq = 313; + public const int LobbyStageEndRsp = 314; + public const int KickLobbyMemberReq = 317; + public const int KickLobbyMemberRsp = 318; + public const int SetLobbyFastEntranceReq = 319; + public const int SetLobbyFastEntranceRsp = 320; + public const int LobbyEnterFightErrorNotify = 321; + public const int PromoteStigmataRuneReq = 332; + public const int PromoteStigmataRuneRsp = 333; + public const int GetMpDataReq = 340; + public const int GetMpDataRsp = 341; + public const int MpUpgradeSkillReq = 342; + public const int MpUpgradeSkillRsp = 343; + public const int MpResetSkillPointReq = 344; + public const int MpResetSkillPointRsp = 345; + public const int MpGetTeamReq = 346; + public const int MpGetTeamRsp = 347; + public const int MpTeamSyncNotify = 395; + public const int MpCreateTeamReq = 348; + public const int MpCreateTeamRsp = 349; + public const int MpEnterTeamReq = 350; + public const int MpEnterTeamRsp = 351; + public const int GetTeamBriefInfoReq = 352; + public const int GetTeamBriefInfoRsp = 353; + public const int MpKickFromTeamReq = 354; + public const int MpKickFromTeamRsp = 355; + public const int MpTeamEnterLobbyReq = 356; + public const int MpTeamEnterLobbyRsp = 357; + public const int MpTeamChangeLeaderReq = 362; + public const int MpTeamChangeLeaderRsp = 363; + public const int GetGobackReq = 364; + public const int GetGobackRsp = 365; + public const int TakeGobackLoginRewardReq = 366; + public const int TakeGobackLoginRewardRsp = 367; + public const int TeamLeaderChangeNotify = 371; + public const int MpTeamLeaveLobbyReq = 373; + public const int MpTeamLeaveLobbyRsp = 374; + public const int MpMemberSetClientStatusReq = 375; + public const int MpMemberSetClientStatusRsp = 376; + public const int MpReportPlayerReq = 381; + public const int MpReportPlayerRsp = 382; + public const int MpStageSettleNotify = 391; + public const int MpLikePlayerReq = 392; + public const int MpLikePlayerRsp = 393; + public const int FriendBondNotify = 394; + public const int MpTeamMemberSetVoiceIdReq = 396; + public const int MpTeamMemberSetVoiceIdRsp = 397; + public const int ReportClientDataVersionReq = 398; + public const int ReportClientDataVersionRsp = 399; + public const int OpenworldPeriodSettleNotify = 4450; + public const int OpenworldWeeklySettleNotify = 4451; + public const int AcceptOpenworldStoryReq = 4452; + public const int AcceptOpenworldStoryRsp = 4453; + public const int SetOpenworldStoryProgressReq = 4454; + public const int SetOpenworldStoryProgressRsp = 4455; + public const int TakeOpenworldStoryRewardReq = 4456; + public const int TakeOpenworldStoryRewardRsp = 4457; + public const int TakeOpenworldEventRewardReq = 4458; + public const int TakeOpenworldEventRewardRsp = 4459; + public const int GetOpenworldStageReq = 4460; + public const int GetOpenworldStageRsp = 4461; + public const int OpenworldStageBeginReq = 4462; + public const int OpenworldStageBeginRsp = 4463; + public const int OpenworldStageEndReq = 4464; + public const int OpenworldStageEndRsp = 4465; + public const int OpenOpenworldQuestReq = 4474; + public const int OpenOpenworldQuestRsp = 4475; + public const int GetOpenworldSelectQuestReq = 4476; + public const int GetOpenworldSelectQuestRsp = 4477; + public const int ChooseOpenworldQuestReq = 4478; + public const int ChooseOpenworldQuestRsp = 4479; + public const int RefreshOpenworldQuestReq = 4480; + public const int RefreshOpenworldQuestRsp = 4481; + public const int TakeOpenworldQuestRewardReq = 4482; + public const int TakeOpenworldQuestRewardRsp = 4483; + public const int AbandonOpenworldQuestReq = 4484; + public const int AbandonOpenworldQuestRsp = 4485; + public const int ReportOpenworldSpawnPointReq = 4486; + public const int ReportOpenworldSpawnPointRsp = 4487; + public const int FinishOpenworldQuestReq = 4488; + public const int FinishOpenworldQuestRsp = 4489; + public const int TakeOpenworldCycleFinishRewardReq = 4490; + public const int TakeOpenworldCycleFinishRewardRsp = 4491; + public const int EatOpenworldCookReq = 4492; + public const int EatOpenworldCookRsp = 4493; + public const int TakeOpenworldKeyQuestRewardReq = 4494; + public const int TakeOpenworldKeyQuestRewardRsp = 4495; + public const int GetNewOpenworldReq = 4496; + public const int GetNewOpenworldRsp = 4497; + public const int GetOpenworldMapReq = 4498; + public const int GetOpenworldMapRsp = 4499; + public const int GetOpenworldStoryReq = 4500; + public const int GetOpenworldStoryRsp = 4501; + public const int UnlockOpenworldTechSkillReq = 4502; + public const int UnlockOpenworldTechSkillRsp = 4503; + public const int ActivateOpenworldMapReq = 4504; + public const int ActivateOpenworldMapRsp = 4505; + public const int OpenworldSetMechaTeamReq = 4506; + public const int OpenworldSetMechaTeamRsp = 4507; + public const int OpenworldGetMechaTeamReq = 4508; + public const int OpenworldGetMechaTeamRsp = 4509; + public const int OpenworldMechaDefenseBeginReq = 4510; + public const int OpenworldMechaDefenseBeginRsp = 4511; + public const int OpenworldMechaDefenseEndReq = 4512; + public const int OpenworldMechaDefenseEndRsp = 4513; + public const int GetOpenworldMechaDefenseReq = 4514; + public const int GetOpenworldMechaDefenseRsp = 4515; + public const int OpenworldMakeMechaReq = 4516; + public const int OpenworldMakeMechaRsp = 4517; + public const int SetMechaPortReq = 4518; + public const int SetMechaPortRsp = 4519; + public const int ChooseOpenworldBossReq = 4520; + public const int ChooseOpenworldBossRsp = 4521; + public const int UpdateOpenworldBossStatusReq = 4522; + public const int UpdateOpenworldBossStatusRsp = 4523; + public const int UpdateOpenworldBossSearchTimeReq = 4524; + public const int UpdateOpenworldBossSearchTimeRsp = 4525; + public const int TakeOpenworldBossRewardReq = 4526; + public const int TakeOpenworldBossRewardRsp = 4527; + public const int TakeOpenworldBossHuntRatingRewardReq = 4528; + public const int TakeOpenworldBossHuntRatingRewardRsp = 4529; + public const int SyncOpenworldBossHuntNotify = 4530; + public const int TakeOpenworldActivityLevelRewardReq = 4531; + public const int TakeOpenworldActivityLevelRewardRsp = 4532; + public const int GetOpenworldBossHuntRankReq = 4533; + public const int GetOpenworldBossHuntRankRsp = 4534; + public const int SyncOpenworldActivityNotify = 4535; + public const int ResetOpenworldBossReq = 4536; + public const int ResetOpenworldBossRsp = 4537; + public const int ReportOpenworldAreaInfoReq = 4538; + public const int ReportOpenworldAreaInfoRsp = 4539; + public const int OpenworldFightBeginNotify = 4540; + public const int OpenworldFightEndNotify = 4541; + public const int ReportOpenworldAreaEntityStateReq = 4542; + public const int ReportOpenworldAreaEntityStateRsp = 4543; + public const int UpdateOpenworldQuestProgressReq = 4544; + public const int UpdateOpenworldQuestProgressRsp = 4545; + public const int GetOpenworldQuestActivityReq = 4546; + public const int GetOpenworldQuestActivityRsp = 4547; + public const int GetOpenworldAvatarActivityReq = 4548; + public const int GetOpenworldAvatarActivityRsp = 4549; + public const int OpenworldAvatarActivityAcceptDailyQuestReq = 4550; + public const int OpenworldAvatarActivityAcceptDailyQuestRsp = 4551; + public const int OpenworldAvatarActivityRefreshDailyQuestReq = 4552; + public const int OpenworldAvatarActivityRefreshDailyQuestRsp = 4553; + public const int OpenworldAvatarActivityFinishQuestReq = 4554; + public const int OpenworldAvatarActivityFinishQuestRsp = 4555; + public const int OpenworldAvatarActivityTakeQuestRewardReq = 4556; + public const int OpenworldAvatarActivityTakeQuestRewardRsp = 4557; + public const int OpenworldAvatarActivityCultivateReq = 4558; + public const int OpenworldAvatarActivityCultivateRsp = 4559; + public const int OpenworldAvatarActivityTalentLevelupReq = 4560; + public const int OpenworldAvatarActivityTalentLevelupRsp = 4561; + public const int OpenworldAvatarActivityGetFileReq = 4562; + public const int OpenworldAvatarActivityGetFileRsp = 4563; + public const int OpenworldAvatarActivitySpecialQuestNotify = 4564; + public const int OpenworldChapterGetDataReq = 4565; + public const int OpenworldChapterGetDataRsp = 4566; + public const int OpenworldChapterSlotEquipBuffReq = 4567; + public const int OpenworldChapterSlotEquipBuffRsp = 4568; + public const int OpenworldAcceptNewStoryReq = 4569; + public const int OpenworldAcceptNewStoryRsp = 4570; + public const int OpenworldChapterTakeRewardReq = 4571; + public const int OpenworldChapterTakeRewardRsp = 4572; + public const int OpenworldCloseStoryReq = 4573; + public const int OpenworldCloseStoryRsp = 4574; + public const int OpenworldChapterGetShopDataReq = 4575; + public const int OpenworldChapterGetShopDataRsp = 4576; + public const int OpenworldChapterShopBuyGoodsReq = 4577; + public const int OpenworldChapterShopBuyGoodsRsp = 4578; + public const int OpenworldChapterEndlessTowerGetRankReq = 4579; + public const int OpenworldChapterEndlessTowerGetRankRsp = 4580; + public const int OpenworldChapterEndlessTowerTakeRewardReq = 4581; + public const int OpenworldChapterEndlessTowerTakeRewardRsp = 4582; + public const int OpenworldChapterLevelUpHeroReq = 4583; + public const int OpenworldChapterLevelUpHeroRsp = 4584; + public const int OpenworldChapterEquipCardGroupReq = 4585; + public const int OpenworldChapterEquipCardGroupRsp = 4586; + public const int OpenworldChapterModifyCardGroupNameReq = 4587; + public const int OpenworldChapterModifyCardGroupNameRsp = 4588; + public const int OpenworldChapterActiveCardGroupReq = 4589; + public const int OpenworldChapterActiveCardGroupRsp = 4590; + public const int OpenworldChapterDeleteCardGroupReq = 4591; + public const int OpenworldChapterDeleteCardGroupRsp = 4592; + public const int OpenworldChapterGetChallengeDataReq = 4593; + public const int OpenworldChapterGetChallengeDataRsp = 4594; + public const int OpenworldChapterFinishChallengeReq = 4595; + public const int OpenworldChapterFinishChallengeRsp = 4596; + public const int OpenworldChapterHeroCardLevelUpNotify = 4597; + public const int OpenworldChapterOpenHeroTreasureReq = 4598; + public const int OpenworldChapterOpenHeroTreasureRsp = 4599; + public const int OpenworldHuntActivityGetDataReq = 4600; + public const int OpenworldHuntActivityGetDataRsp = 4601; + public const int OpenworldHuntActivityGetMapDataReq = 4602; + public const int OpenworldHuntActivityGetMapDataRsp = 4603; + public const int OpenworldHuntActivityCommonStateChangeReq = 4604; + public const int OpenworldHuntActivityCommonStateChangeRsp = 4605; + public const int OpenworldHuntActivityTalentUpgradeReq = 4606; + public const int OpenworldHuntActivityTalentUpgradeRsp = 4607; + public const int OpenworldHuntActivityFinishQuestReq = 4608; + public const int OpenworldHuntActivityFinishQuestRsp = 4609; + public const int OpenworldHuntActivityTakeStrongholdRewardNotify = 4610; + public const int OpenworldHuntActivityChangeHunterAreaReq = 4611; + public const int OpenworldHuntActivityChangeHunterAreaRsp = 4612; + public const int OpenworldHuntActivityReportHuntingScoreReq = 4613; + public const int OpenworldHuntActivityReportHuntingScoreRsp = 4614; + public const int OpenworldChapterChallengeBeginReq = 4630; + public const int OpenworldChapterChallengeBeginRsp = 4631; + public const int OpenworldChapterEndlessChallengeBeginReq = 4632; + public const int OpenworldChapterEndlessChallengeBeginRsp = 4633; + public const int OpenworldChapterEndlessChallengeEndReq = 4634; + public const int OpenworldChapterEndlessChallengeEndRsp = 4635; + public const int OpenworldChapterLevelUpBuildingReq = 4636; + public const int OpenworldChapterLevelUpBuildingRsp = 4637; + public const int OpenworldChapterLevelUpBuildingFinishNotify = 4638; + public const int OpenworldChapterAccelerateLevelUpBuildingReq = 4639; + public const int OpenworldChapterAccelerateLevelUpBuildingRsp = 4640; + public const int OpenworldChapterTerminalPeriodUpgradeReq = 4641; + public const int OpenworldChapterTerminalPeriodUpgradeRsp = 4642; + public const int OpenworldChapterGetSelectQuestReq = 4643; + public const int OpenworldChapterGetSelectQuestRsp = 4644; + public const int OpenworldChapterRefreshQuestReq = 4645; + public const int OpenworldChapterRefreshQuestRsp = 4646; + public const int OpenworldChapterAcceptQuestReq = 4647; + public const int OpenworldChapterAcceptQuestRsp = 4648; + public const int OpenworldChapterFinishQuestReq = 4649; + public const int OpenworldChapterFinishQuestRsp = 4650; + public const int OpenworldChapterTakeQuestRewardReq = 4651; + public const int OpenworldChapterTakeQuestRewardRsp = 4652; + public const int OpenworldChapterFurnaceStartWorkReq = 4653; + public const int OpenworldChapterFurnaceStartWorkRsp = 4654; + public const int OpenworldChapterFurnaceCancelWorkReq = 4655; + public const int OpenworldChapterFurnaceCancelWorkRsp = 4656; + public const int OpenworldChapterFurnaceAccelerateWorkReq = 4657; + public const int OpenworldChapterFurnaceAccelerateWorkRsp = 4658; + public const int TakeOpenworldChapterFurnaceWorkRewardReq = 4659; + public const int TakeOpenworldChapterFurnaceWorkRewardRsp = 4660; + public const int OpenworldChapterLevelUpTalentReq = 4661; + public const int OpenworldChapterLevelUpTalentRsp = 4662; + public const int OpenworldChapterActiveTalentReq = 4663; + public const int OpenworldChapterActiveTalentRsp = 4664; + public const int OpenworldChapterDigSiteStartReq = 4665; + public const int OpenworldChapterDigSiteStartRsp = 4666; + public const int OpenworldChapterDigSiteCancelReq = 4667; + public const int OpenworldChapterDigSiteCancelRsp = 4668; + public const int OpenworldChapterDigSiteTakeRewardReq = 4669; + public const int OpenworldChapterDigSiteTakeRewardRsp = 4670; + public const int OpenworldChapterDigSiteAccelerateReq = 4671; + public const int OpenworldChapterDigSiteAccelerateRsp = 4672; + public const int OpenworldChapterMoonChallengeTowerGetDataReq = 4673; + public const int OpenworldChapterMoonChallengeTowerGetDataRsp = 4674; + public const int OpenworldChapterMoonChallengeTowerBattleBeginReq = 4675; + public const int OpenworldChapterMoonChallengeTowerBattleBeginRsp = 4676; + public const int OpenworldChapterMoonChallengeTowerBattleEndReq = 4677; + public const int OpenworldChapterMoonChallengeTowerBattleEndRsp = 4678; + public const int OpenworldChapterMoonChallengeTowerSweepReq = 4679; + public const int OpenworldChapterMoonChallengeTowerSweepRsp = 4680; + public const int OpenworldChapterMoonChallengeTowerGetRankReq = 4681; + public const int OpenworldChapterMoonChallengeTowerGetRankRsp = 4682; + public const int OpenworldChapterMoonRelicsChangeReq = 4687; + public const int OpenworldChapterMoonRelicsChangeRsp = 4688; + public const int OpenworldChapterQTEMapEndReq = 4683; + public const int OpenworldChapterQTEMapEndRsp = 4684; + public const int OpenworldChapterReportDropItemReq = 4685; + public const int OpenworldChapterReportDropItemRsp = 4686; + public const int OpenworldChapterGetAntiGravityDataReq = 4689; + public const int OpenworldChapterGetAntiGravityDataRsp = 4690; + public const int PjmsEnterWorldReq = 7700; + public const int PjmsEnterWorldRsp = 7701; + public const int PjmsGetCurWorldReq = 7702; + public const int PjmsGetCurWorldRsp = 7703; + public const int PjmsGetMainDataReq = 7706; + public const int PjmsGetMainDataRsp = 7707; + public const int PjmsGetStoryDataReq = 7708; + public const int PjmsGetStoryDataRsp = 7709; + public const int PjmsUpdateStoryProgressNotify = 7714; + public const int PjmsSyncMapInfoNotify = 7719; + public const int PjmsUpdateEntityNotify = 7720; + public const int PjmsUpdateStoryProgressReq = 7725; + public const int PjmsUpdateStoryProgressRsp = 7726; + public const int PjmsKillMonsterReq = 7727; + public const int PjmsKillMonsterRsp = 7728; + public const int PjmsChangeGadgetStateReq = 7729; + public const int PjmsChangeGadgetStateRsp = 7730; + public const int PjmsActiveGroupReq = 7731; + public const int PjmsActiveGroupRsp = 7732; + public const int PjmsActiveEntityReq = 7733; + public const int PjmsActiveEntityRsp = 7734; + public const int PjmsSetWorldTimeReq = 7735; + public const int PjmsSetWorldTimeRsp = 7736; + public const int PjmsCommonDropNotify = 7737; + public const int PjmsChangeChapterReq = 7738; + public const int PjmsChangeChapterRsp = 7739; + public const int PjmsSetCurAvatarReq = 7740; + public const int PjmsSetCurAvatarRsp = 7741; + public const int PjmsUpdateFormationReq = 7742; + public const int PjmsUpdateFormationRsp = 7743; + public const int PjmsUpdateAvatarStatusReq = 7744; + public const int PjmsUpdateAvatarStatusRsp = 7745; + public const int PjmsGetAvatarStatusReq = 7746; + public const int PjmsGetAvatarStatusRsp = 7747; + public const int PjmsUpdateChapterNotify = 7756; + public const int PjmsLevelUpTalentReq = 7757; + public const int PjmsLevelUpTalentRsp = 7758; + public const int PjmsSetNameReq = 7761; + public const int PjmsSetNameRsp = 7762; + public const int PjmsSetGenderReq = 7763; + public const int PjmsSetGenderRsp = 7764; + public const int PjmsGetUnitInfoReq = 7765; + public const int PjmsGetUnitInfoRsp = 7766; + public const int PjmsLevelUpCoreUnitReq = 7767; + public const int PjmsLevelUpCoreUnitRsp = 7768; + public const int PjmsLevelUpAuxiliaryUnitReq = 7769; + public const int PjmsLevelUpAuxiliaryUnitRsp = 7770; + public const int PjmsUnitSetChangeNotify = 7771; + public const int PjmsSetCurUnitSetReq = 7773; + public const int PjmsSetCurUnitSetRsp = 7774; + public const int PjmsChangeUnitSetSlotReq = 7775; + public const int PjmsChangeUnitSetSlotRsp = 7776; + public const int PjmsUnitChangeNotify = 7777; + public const int PjmsChangeBgmReq = 7778; + public const int PjmsChangeBgmRsp = 7779; + public const int PjmsTakeChapterRewardReq = 7780; + public const int PjmsTakeChapterRewardRsp = 7781; + public const int PjmsDisjoinAuxiliaryUnitReq = 7782; + public const int PjmsDisjoinAuxiliaryUnitRsp = 7783; + public const int PjmsGetResidentStageDataReq = 7784; + public const int PjmsGetResidentStageDataRsp = 7785; + public const int PjmsGetExploreScoreReq = 7786; + public const int PjmsGetExploreScoreRsp = 7787; + public const int PjmsGetHomeDataReq = 7788; + public const int PjmsGetHomeDataRsp = 7789; + public const int PjmsGetAchievementDataReq = 7790; + public const int PjmsGetAchievementDataRsp = 7791; + public const int PjmsTakeAchievementPlatinumRewardReq = 7792; + public const int PjmsTakeAchievementPlatinumRewardRsp = 7793; + public const int PjmsTakeChapterLevelRewardReq = 7796; + public const int PjmsTakeChapterLevelRewardRsp = 7797; + public const int PjmsRefreshGroupReq = 7800; + public const int PjmsRefreshGroupRsp = 7801; + public const int PjmsSetAuxiliaryUnitLockStatusReq = 7794; + public const int PjmsSetAuxiliaryUnitLockStatusRsp = 7795; + public const int PjmsReviveAvatarReq = 7798; + public const int PjmsReviveAvatarRsp = 7799; + public const int PjmsFinishConsumeMaterialStoryReq = 7802; + public const int PjmsFinishConsumeMaterialStoryRsp = 7803; + public const int PjmsStoryStatusNotify = 7804; + public const int PjmsChangeNpcStateReq = 7805; + public const int PjmsChangeNpcStateRsp = 7806; + public const int PjmsAddShadowLakeEnergyReq = 7807; + public const int PjmsAddShadowLakeEnergyRsp = 7808; + public const int PjmsSubShadowLakeEnergyReq = 7809; + public const int PjmsSubShadowLakeEnergyRsp = 7810; + public const int PjmsShadowLakeNotify = 7811; + public const int PjmsGetChapterDataReq = 7812; + public const int PjmsGetChapterDataRsp = 7813; + public const int PjmsGetActivityPanelReq = 7814; + public const int PjmsGetActivityPanelRsp = 7815; + public const int PjmsResidentStageGetRankReq = 7816; + public const int PjmsResidentStageGetRankRsp = 7817; + public const int PjmsGetRecoveryRecordReq = 7818; + public const int PjmsGetRecoveryRecordRsp = 7819; + public const int PjmsRecordRecoveryActionReq = 7820; + public const int PjmsRecordRecoveryActionRsp = 7821; + public const int PjmsGetConditionDataReq = 7822; + public const int PjmsGetConditionDataRsp = 7823; + public const int PjmsChapterTrackStorySeriesReq = 7826; + public const int PjmsChapterTrackStorySeriesRsp = 7827; + public const int PjmsLeaveCurWorldReq = 7828; + public const int PjmsLeaveCurWorldRsp = 7829; + public const int PjmsChapterActiveEcologyTalkReq = 7830; + public const int PjmsChapterActiveEcologyTalkRsp = 7831; + public const int PjmsTrackStorySeriesReq = 7834; + public const int PjmsTrackStorySeriesRsp = 7835; + public const int PjmsSkipStoryReq = 7836; + public const int PjmsSkipStoryRsp = 7837; + public const int PjmsUpdateChapterSectionNotify = 7839; + public const int PlatformShooterGetActivityReq = 6950; + public const int PlatformShooterGetActivityRsp = 6951; + public const int PlatformShooterQAvatarLevelUpReq = 6952; + public const int PlatformShooterQAvatarLevelUpRsp = 6953; + public const int PlatformShooterWeaponPoolGetDisplayReq = 6954; + public const int PlatformShooterWeaponPoolGetDisplayRsp = 6955; + public const int PlatformShooterWeaponPoolGachaReq = 6956; + public const int PlatformShooterWeaponPoolGachaRsp = 6957; + public const int PlatformShooterWeaponAffixRefineReq = 6958; + public const int PlatformShooterWeaponAffixRefineRsp = 6959; + public const int PlatformShooterWeaponAffixConfirmReq = 6960; + public const int PlatformShooterWeaponAffixConfirmRsp = 6961; + public const int PlatformShooterGetRankReq = 6962; + public const int PlatformShooterGetRankRsp = 6963; + public const int PvzGetActivityReq = 6550; + public const int PvzGetActivityRsp = 6551; + public const int PvzBattleBeginReq = 6552; + public const int PvzBattleBeginRsp = 6553; + public const int PvzBattleEndReq = 6554; + public const int PvzBattleEndRsp = 6555; + public const int PvzQAvatarLevelUpReq = 6556; + public const int PvzQAvatarLevelUpRsp = 6557; + public const int QAvatarBattleBeginNotify = 5550; + public const int QAvatarBattleSettleNotify = 5551; + public const int QAvatarBattleGetLobbyInfoReq = 5552; + public const int QAvatarBattleGetLobbyInfoRsp = 5553; + public const int QAvatarBattleDataNotify = 5600; + public const int QAvatarBattleEnterBattleReq = 5601; + public const int QAvatarBattleEnterBattleRsp = 5602; + public const int QAvatarBattleMoveNotify = 5603; + public const int QAvatarBattleEndBattleNotify = 5630; + public const int QAvatarBattleStartSkillReq = 5604; + public const int QAvatarBattleStartSkillRsp = 5605; + public const int QAvatarBattleStartSkillNotify = 5606; + public const int QAvatarBattleEndSkillReq = 5607; + public const int QAvatarBattleEndSkillRsp = 5608; + public const int QAvatarBattleEndSkillNotify = 5609; + public const int QAvatarBattleSkillTriggerNotify = 5610; + public const int QAvatarBattleComponentOpNotify = 5611; + public const int QAvatarBattleDiscardStigmataReq = 5612; + public const int QAvatarBattleDiscardStigmataRsp = 5613; + public const int QAvatarBattleGetDataNotify = 5614; + public const int QAvatarBattleKillNotify = 5621; + public const int QAvatarBattleRefreshGadgetForecastNotify = 5622; + public const int QAvatarBattleRefreshGadgetGenerateNotify = 5623; + public const int QCandyBattleGetActivityReq = 6601; + public const int QCandyBattleGetActivityRsp = 6602; + public const int QCandyBattleBeginNotify = 6603; + public const int QCandyBattleChooseAvatarReq = 6604; + public const int QCandyBattleChooseAvatarRsp = 6605; + public const int QCandyBattleUnlockAvatarReq = 6606; + public const int QCandyBattleUnlockAvatarRsp = 6607; + public const int QCandyBattleSettleBattleNotify = 6608; + public const int QCandyBattleEnterBattleReq = 6570; + public const int QCandyBattleEnterBattleRsp = 6571; + public const int QCandyBattleDataNotify = 6572; + public const int QCandyBattleEndNotify = 6573; + public const int QCandyBattleMoveNotify = 6574; + public const int QCandyBattleTriggerEntityReq = 6580; + public const int QCandyBattleTriggerEntityRsp = 6581; + public const int QCandyBattleAvatarLifeTimesChangeNotify = 6582; + public const int QCandyBattleArriveReq = 6583; + public const int QCandyBattleArriveRsp = 6584; + public const int QCandyBattleUseSkillReq = 6585; + public const int QCandyBattleUseSkillRsp = 6586; + public const int QCandyBattleUseSkillNotify = 6587; + public const int QCandyBattleAvatarStateClientNotify = 6588; + public const int QCandyBattleAvatarStateServerNotify = 6589; + public const int QCandyBattleSkillEndNotify = 6590; + public const int QCandyBattleFinishBattleNotify = 6591; + public const int QCandyBattleLeaveBattleReq = 6592; + public const int QCandyBattleLeaveBattleRsp = 6593; + public const int QCandyBattleLeaveBattleNotify = 6594; + public const int QCandyBattleStartTimeLineNotify = 6595; + public const int QCandyBattleSkillUseTimesChangeNotify = 6596; + public const int QCandyBattleSendEmojiReq = 6597; + public const int QCandyBattleSendEmojiRsp = 6598; + public const int QCandyBattleSendEmojiNotify = 6599; + public const int QCandyBattleSyncAbilityNotify = 6600; + public const int QCandyBattleMemoryRoundEndReq = 6622; + public const int QCandyBattleMemoryRoundEndRsp = 6623; + public const int QCandyBattleSyncActionNotify = 6624; + public const int QCandyBattleActionAckReq = 6625; + public const int QCandyBattleActionAckRsp = 6626; + public const int RaidReplaceGetDataReq = 8100; + public const int RaidReplaceGetDataRsp = 8101; + public const int RaidReplaceTakeRewardLineRewardReq = 8102; + public const int RaidReplaceTakeRewardLineRewardRsp = 8103; + public const int RaidReplaceTakeSpecialRewardReq = 8104; + public const int RaidReplaceTakeSpecialRewardRsp = 8105; + public const int GetRoomDataReq = 3150; + public const int GetRoomDataRsp = 3151; + public const int SyncRoomDataNotify = 3152; + public const int CreateRoomReq = 3153; + public const int CreateRoomRsp = 3154; + public const int EnterRoomReq = 3155; + public const int EnterRoomRsp = 3156; + public const int ExitRoomReq = 3157; + public const int ExitRoomRsp = 3158; + public const int ExitRoomNotify = 3159; + public const int InviteRoomReq = 3160; + public const int InviteRoomRsp = 3161; + public const int RoomInvitationNotify = 3162; + public const int SendRoomChatMsgNotify = 3163; + public const int RecvRoomChatMsgNotify = 3164; + public const int StartRoomMatchReq = 3165; + public const int StartRoomMatchRsp = 3166; + public const int CancelRoomMatchReq = 3167; + public const int CancelRoomMatchRsp = 3168; + public const int SyncRoomMatchDataNotify = 3169; + public const int RoomMatchTimeoutNotify = 3170; + public const int UpdateRoomInfoReq = 3171; + public const int UpdateRoomInfoRsp = 3172; + public const int RoomSwitchMemberStatusReq = 3173; + public const int RoomSwitchMemberStatusRsp = 3174; + public const int RoomKickMemberReq = 3175; + public const int RoomKickMemberRsp = 3176; + public const int RoomTransferLeaderReq = 3177; + public const int RoomTransferLeaderRsp = 3178; + public const int RoomMemberSetVoiceIdReq = 3179; + public const int RoomMemberSetVoiceIdRsp = 3180; + public const int RoomGetStatusReq = 3181; + public const int RoomGetStatusRsp = 3182; + public const int DismissRoomReq = 3183; + public const int DismissRoomRsp = 3184; + public const int RpgDungeonGetActivityReq = 5500; + public const int RpgDungeonGetActivityRsp = 5501; + public const int RpgDungeonSelectQuestReq = 5502; + public const int RpgDungeonSelectQuestRsp = 5503; + public const int RpgDungeonGetCandidateBuffReq = 5504; + public const int RpgDungeonGetCandidateBuffRsp = 5505; + public const int RpgDungeonSelectBuffReq = 5506; + public const int RpgDungeonSelectBuffRsp = 5507; + public const int GetRpgTaleReq = 2300; + public const int GetRpgTaleRsp = 2301; + public const int SyncRpgTaleSiteNotify = 2302; + public const int EnterRpgTaleSiteReq = 2303; + public const int EnterRpgTaleSiteRsp = 2304; + public const int FinishRpgTalePlotReq = 2305; + public const int FinishRpgTalePlotRsp = 2306; + public const int UnlockRpgTaleSiteReq = 2307; + public const int UnlockRpgTaleSiteRsp = 2308; + public const int TakeRpgTaleCollectionRewardReq = 2309; + public const int TakeRpgTaleCollectionRewardRsp = 2310; + public const int RpgTaleEventNotify = 2312; + public const int TriggerRpgTaleEventReq = 2313; + public const int TriggerRpgTaleEventRsp = 2314; + public const int CheckRpgTaleStageTriggerReq = 2315; + public const int CheckRpgTaleStageTriggerRsp = 2316; + public const int TriggerRpgTaleStageEventReq = 2317; + public const int TriggerRpgTaleStageEventRsp = 2318; + public const int GetMatrixReq = 2320; + public const int GetMatrixRsp = 2321; + public const int GetMatrixFloorReq = 2322; + public const int GetMatrixFloorRsp = 2323; + public const int MatrixEnterReq = 2324; + public const int MatrixEnterRsp = 2325; + public const int MatrixAdvanceReq = 2326; + public const int MatrixAdvanceRsp = 2327; + public const int SyncMatrixFloorNotify = 2328; + public const int SyncMatrixNotify = 2329; + public const int MatrixTriggerEventReq = 2330; + public const int MatrixTriggerEventRsp = 2331; + public const int MatrixCancelEventReq = 2332; + public const int MatrixCancelEventRsp = 2333; + public const int SyncMatrixCurEventNotify = 2334; + public const int MatrixEventFinishNotify = 2335; + public const int FinishMatrixEventPlotReq = 2336; + public const int FinishMatrixEventPlotRsp = 2337; + public const int MatrixTeleportNotify = 2338; + public const int MatrixMoveObjectReq = 2339; + public const int MatrixMoveObjectRsp = 2340; + public const int MatrixResetFloorReq = 2341; + public const int MatrixResetFloorRsp = 2342; + public const int MatrixSettleFloorEventReq = 2343; + public const int MatrixSettleFloorEventRsp = 2344; + public const int MatrixThrowDiceReq = 2345; + public const int MatrixThrowDiceRsp = 2346; + public const int MatrixSetDiceDestinationReq = 2347; + public const int MatrixSetDiceDestinationRsp = 2348; + public const int MatrixGuessFingerReq = 2349; + public const int MatrixGuessFingerRsp = 2350; + public const int MatrixSetLotteryNumReq = 2351; + public const int MatrixSetLotteryNumRsp = 2352; + public const int MatrixLotteryDrawNotify = 2353; + public const int FinishRpgTaleStagePlotReq = 2370; + public const int FinishRpgTaleStagePlotRsp = 2371; + public const int ReportRpgTaleStageReq = 2374; + public const int ReportRpgTaleStageRsp = 2375; + public const int RpgTaleSweepReq = 2376; + public const int RpgTaleSweepRsp = 2377; + public const int GetRpgTaleFileReq = 2378; + public const int GetRpgTaleFileRsp = 2379; + public const int RpgTaleRefreshTicketReq = 2380; + public const int RpgTaleRefreshTicketRsp = 2381; + public const int RpgTaleLevelUpAbilityReq = 2382; + public const int RpgTaleLevelUpAbilityRsp = 2383; + public const int RpgTaleResetTowerReq = 2384; + public const int RpgTaleResetTowerRsp = 2385; + public const int RpgTaleSetOverallReq = 2386; + public const int RpgTaleSetOverallRsp = 2387; + public const int RpgTaleRefreshSiteReq = 2388; + public const int RpgTaleRefreshSiteRsp = 2389; + public const int RpgTaleSetPvpVirtualAvatarReq = 2390; + public const int RpgTaleSetPvpVirtualAvatarRsp = 2391; + public const int RpgTaleGetPvpDivisionRewardReq = 2392; + public const int RpgTaleGetPvpDivisionRewardRsp = 2393; + public const int RpgTaleGetStageScoreRankReq = 2394; + public const int RpgTaleGetStageScoreRankRsp = 2395; + public const int RpgTaleFinishMissionGroupNotify = 2396; + public const int GetScDLCReq = 6300; + public const int GetScDLCRsp = 6301; + public const int UpdateScDLCFeverSuiteReq = 6304; + public const int UpdateScDLCFeverSuiteRsp = 6305; + public const int ActiveScDLCFeverSuiteReq = 6306; + public const int ActiveScDLCFeverSuiteRsp = 6307; + public const int AddScDLCSupportNPCExpReq = 6308; + public const int AddScDLCSupportNPCExpRsp = 6309; + public const int LevelUpScDLCAvatarReq = 6310; + public const int LevelUpScDLCAvatarRsp = 6311; + public const int LevelUpScDLCTalentReq = 6312; + public const int LevelUpScDLCTalentRsp = 6313; + public const int EquipScDLCAvatarTalentReq = 6314; + public const int EquipScDLCAvatarTalentRsp = 6315; + public const int GetScDLCSelectDailyQuestReq = 6316; + public const int GetScDLCSelectDailyQuestRsp = 6317; + public const int RefreshScDLCDailyQuestReq = 6318; + public const int RefreshScDLCDailyQuestRsp = 6319; + public const int AcceptScDLCDailyQuestReq = 6320; + public const int AcceptScDLCDailyQuestRsp = 6321; + public const int FinishScDLCDailyQuestReq = 6322; + public const int FinishScDLCDailyQuestRsp = 6323; + public const int TakeScDLCDailyQuestRewardReq = 6324; + public const int TakeScDLCDailyQuestRewardRsp = 6325; + public const int ModifyScDLCNameReq = 6326; + public const int ModifyScDLCNameRsp = 6327; + public const int TakeScDLCChallengeRewardReq = 6328; + public const int TakeScDLCChallengeRewardRsp = 6329; + public const int FinishScDLCPlotReq = 6330; + public const int FinishScDLCPlotRsp = 6331; + public const int GetScDLCTowerReq = 6332; + public const int GetScDLCTowerRsp = 6333; + public const int ScDLCTowerStageBeginReq = 6334; + public const int ScDLCTowerStageBeginRsp = 6335; + public const int ScDLCTowerStageEndReq = 6336; + public const int ScDLCTowerStageEndRsp = 6337; + public const int GetScDLCTowerRankReq = 6338; + public const int GetScDLCTowerRankRsp = 6339; + public const int ScDLCTowerScheduleRewardNotify = 6340; + public const int ScDLCReviveAvatarReq = 6341; + public const int ScDLCReviveAvatarRsp = 6342; + public const int ScDLCTowerReviveAvatarReq = 6343; + public const int ScDLCTowerReviveAvatarRsp = 6344; + public const int ScDLCActiveFeverAbilityReq = 6345; + public const int ScDLCActiveFeverAbilityRsp = 6346; + public const int ScDLCSweepTowerReq = 6347; + public const int ScDLCSweepTowerRsp = 6348; + public const int UpdateClientSettingNotify = 5002; + public const int CommonCdCheckNotify = 5003; + public const int AntiAddictNotify = 5004; + public const int SensitiveWordCheckReq = 5005; + public const int SensitiveWordCheckRsp = 5006; + public const int KickOutPlayerNotify = 5007; + public const int ClientReportReq = 5008; + public const int ClientReportRsp = 5009; + public const int GetAuthkeyReq = 5010; + public const int GetAuthkeyRsp = 5011; + public const int ClientReportBinReq = 5012; + public const int ClientReportBinRsp = 5013; + public const int NetTestReq = 5014; + public const int NetTestRsp = 5015; + public const int GetSecurityPasswordReq = 5021; + public const int GetSecurityPasswordRsp = 5022; + public const int SetSecurityPasswordReq = 5023; + public const int SetSecurityPasswordRsp = 5024; + public const int ChangeSecurityPasswordReq = 5025; + public const int ChangeSecurityPasswordRsp = 5026; + public const int UnlockDeviceSecurityPasswordReq = 5027; + public const int UnlockDeviceSecurityPasswordRsp = 5028; + public const int SecurityPasswordOpReq = 5029; + public const int SecurityPasswordOpRsp = 5030; + public const int ResetSecurityPasswordReq = 5031; + public const int ResetSecurityPasswordRsp = 5032; + public const int SecurityPasswordRejectionNotify = 5033; + public const int GetShopListReq = 6700; + public const int GetShopListRsp = 6701; + public const int GetShoppingMallListReq = 6702; + public const int GetShoppingMallListRsp = 6703; + public const int GetSingleShopWithoutRefreshReq = 6704; + public const int GetSingleShopWithoutRefreshRsp = 6705; + public const int GetProductListReq = 6706; + public const int GetProductListRsp = 6707; + public const int ManualRefreshShopReq = 6708; + public const int ManualRefreshShopRsp = 6709; + public const int GetRecommendGoodsReq = 6710; + public const int GetRecommendGoodsRsp = 6711; + public const int BuyGoodsReq = 6714; + public const int BuyGoodsRsp = 6715; + public const int GlobalShopGoodsInfoNotify = 6716; + public const int GetVipRewardDataReq = 6717; + public const int GetVipRewardDataRsp = 6718; + public const int GetVipRewardReq = 6719; + public const int GetVipRewardRsp = 6720; + public const int GetCardProductInfoReq = 6721; + public const int GetCardProductInfoRsp = 6722; + public const int TakeCardProductDailyRewardReq = 6723; + public const int TakeCardProductDailyRewardRsp = 6724; + public const int TakeCardProductBonusRewardReq = 6725; + public const int TakeCardProductBonusRewardRsp = 6726; + public const int TakeFoundationRewardReq = 6727; + public const int TakeFoundationRewardRsp = 6728; + public const int GetProductRecommendListReq = 6729; + public const int GetProductRecommendListRsp = 6730; + public const int BuyProductReq = 6731; + public const int BuyProductRsp = 6732; + public const int ExchangeHcoinByMcoinReq = 6733; + public const int ExchangeHcoinByMcoinRsp = 6734; + public const int GetMyCardAuthCodeReq = 6739; + public const int GetMyCardAuthCodeRsp = 6740; + public const int VerifyMyCardOrderNotify = 6741; + public const int RechargeFinishNotify = 6742; + public const int ReportClickRechargeButtonNotify = 6743; + public const int GlobalShopGoodsGetBuyOrderReq = 6744; + public const int GlobalShopGoodsGetBuyOrderRsp = 6745; + public const int SimplifiedGodWarGetActivityReq = 8250; + public const int SimplifiedGodWarGetActivityRsp = 8251; + public const int SimplifiedGodWarSelectChallengeAvatarReq = 8252; + public const int SimplifiedGodWarSelectChallengeAvatarRsp = 8253; + public const int SimplifiedGodWarResetChallengeReq = 8254; + public const int SimplifiedGodWarResetChallengeRsp = 8255; + public const int SimplifiedGodWarGetBuffReq = 8256; + public const int SimplifiedGodWarGetBuffRsp = 8257; + public const int SimplifiedGodWarSelectBuffReq = 8258; + public const int SimplifiedGodWarSelectBuffRsp = 8259; + public const int SimplifiedGodWarGetAssistRoleReq = 8260; + public const int SimplifiedGodWarGetAssistRoleRsp = 8261; + public const int SimplifiedGodWarSelectAssistRoleReq = 8262; + public const int SimplifiedGodWarSelectAssistRoleRsp = 8263; + public const int SimplifiedGodWarEnterSiteReq = 8264; + public const int SimplifiedGodWarEnterSiteRsp = 8265; + public const int SlgGetDataReq = 6050; + public const int SlgGetDataRsp = 6051; + public const int SlgPointSweepReq = 6052; + public const int SlgPointSweepRsp = 6053; + public const int SlgBattleMatchRsp = 6054; + public const int SlgEnrollReq = 6055; + public const int SlgEnrollRsp = 6056; + public const int SlgGetActivityStaminaReq = 6057; + public const int SlgGetActivityStaminaRsp = 6058; + public const int SlgTakeScoreRewardReq = 6059; + public const int SlgTakeScoreRewardRsp = 6060; + public const int SlgBattleAddScoreFailNotify = 6061; + public const int SlgGetBattleRankReq = 6062; + public const int SlgGetBattleRankRsp = 6063; + public const int SlgGetPointRankReq = 6064; + public const int SlgGetPointRankRsp = 6065; + public const int SlgBattleSettleNotify = 6066; + public const int SlgBroadcastNotify = 6068; + public const int SlgMainPageReq = 6069; + public const int SlgBattleInSettleNotify = 6070; + public const int SlgGetBriefRankReq = 6071; + public const int SlgGetBriefRankRsp = 6072; + public const int SwitchDataNotify = 3700; + public const int SwitchChangeDataNotify = 3701; + public const int CheckExtraStoryLockedAvatarBindEquipReq = 1000; + public const int CheckExtraStoryLockedAvatarBindEquipRsp = 1001; + public const int SwitchExtraStoryLockedAvatarBindEquipReq = 1002; + public const int SwitchExtraStoryLockedAvatarBindEquipRsp = 1003; + public const int TakeDormLikesDropReq = 1008; + public const int TakeDormLikesDropRsp = 1009; + public const int CheckDormLikesDropReq = 1010; + public const int CheckDormLikesDropRsp = 1011; + public const int GetWorldMapDataReq = 1012; + public const int GetWorldMapDataRsp = 1013; + public const int GetMpStageRecordReq = 1018; + public const int GetMpStageRecordRsp = 1019; + public const int LobbySetClientStatusReq = 1026; + public const int LobbySetClientStatusRsp = 1027; + public const int LobbyPrepareCountDownNotify = 1028; + public const int MpStageVoteCountDownNotify = 1029; + public const int MpStageVoteReq = 1030; + public const int MpStageVoteRsp = 1031; + public const int MpStageVoteResultNotify = 1032; + public const int LobbyTimeoutNoLeaderNotify = 1033; + public const int TakeWeekDayActivityReturnCoinReq = 1034; + public const int TakeWeekDayActivityReturnCoinRsp = 1035; + public const int MpStageGetVoteInfoReq = 1036; + public const int MpStageGetVoteInfoRsp = 1037; + public const int MpStageMemberVoteNotify = 1038; + public const int SwitchExtraStoryLineEnhanceReq = 1039; + public const int SwitchExtraStoryLineEnhanceRsp = 1040; + public const int GetChallengeStepBonusReq = 1043; + public const int GetChallengeStepBonusRsp = 1044; + public const int MpLeaveTeamNotify = 1101; + public const int GetLobbyStatReq = 1102; + public const int GetLobbyStatRsp = 1103; + public const int DisjoinFurnitureReq = 1134; + public const int DisjoinFurnitureRsp = 1135; + public const int ChatReportReq = 1150; + public const int ChatReportRsp = 1151; + public const int ChatReportNotify = 1152; + public const int ChatUnforbidNotify = 1153; + public const int ChatForbidNotify = 1154; + public const int GetChatReportInfoReq = 1159; + public const int GetChatReportInfoRsp = 1160; + public const int ChatForbidSnsNotify = 1161; + public const int RecoverChatCreditNotify = 1162; + public const int SendChatRedEnvelopeReq = 1163; + public const int SendChatRedEnvelopeRsp = 1164; + public const int TakeChatRedEnvelopeReq = 1165; + public const int TakeChatRedEnvelopeRsp = 1166; + public const int GetPhotoDataReq = 1191; + public const int GetPhotoDataRsp = 1192; + public const int GetWikiDataReq = 1193; + public const int GetWikiDataRsp = 1194; + public const int TakeWikiRatingRewardReq = 1195; + public const int TakeWikiRatingRewardRsp = 1196; + public const int GetPhonePendantDataReq = 1197; + public const int GetPhonePendantDataRsp = 1198; + public const int PhonePendantOpReq = 1199; + public const int PhonePendantOpRsp = 1200; + public const int GetTeamListReq = 1215; + public const int GetTeamListRsp = 1216; + public const int GetEmojiDataReq = 1245; + public const int GetEmojiDataRsp = 1246; + public const int MpFastMatchReq = 1247; + public const int MpFastMatchRsp = 1248; + public const int GetSnsShowDataReq = 1266; + public const int GetSnsShowDataRsp = 1267; + public const int GetClientSettingReq = 1270; + public const int UpdateClientSettingReq = 1271; + public const int GetClientSettingRsp = 1272; + public const int GetOtherPlayerClientSettingReq = 1273; + public const int GetOtherPlayerClientSettingRsp = 1274; + public const int UpdateLobbySettingReq = 1365; + public const int UpdateLobbySettingRsp = 1366; + public const int ExchangePurpleJadeReq = 1367; + public const int ExchangePurpleJadeRsp = 1368; + public const int GetBriefDataListReq = 1374; + public const int GetBriefDataListRsp = 1375; + public const int FinishPlotReq = 1378; + public const int FinishPlotRsp = 1379; + public const int GetRegionUidRangeReq = 1380; + public const int GetRegionUidRangeRsp = 1381; + public const int GetPlotListReq = 1382; + public const int GetPlotListRsp = 1383; + public const int GetFarmActivityDataReq = 1385; + public const int GetFarmActivityDataRsp = 1386; + public const int UnlockFarmSlotReq = 1387; + public const int UnlockFarmSlotRsp = 1388; + public const int StartFarmProduceReq = 1389; + public const int StartFarmProduceRsp = 1390; + public const int FinishFarmProduceReq = 1391; + public const int FinishFarmProduceRsp = 1392; + public const int SpeedUpFarmProduceReq = 1393; + public const int SpeedUpFarmProduceRsp = 1394; + public const int FarmActivityNotify = 1395; + public const int AvatarArtifactUnlockReq = 1444; + public const int AvatarArtifactUnlockRsp = 1445; + public const int AvatarArtifactLevelUpReq = 1446; + public const int AvatarArtifactLevelUpRsp = 1447; + public const int TakeGobackScoreRewardReq = 1448; + public const int TakeGobackScoreRewardRsp = 1449; + public const int GetAvatarEquipSuiteReq = 1454; + public const int GetAvatarEquipSuiteRsp = 1455; + public const int SetAvatarEquipSuiteReq = 1456; + public const int SetAvatarEquipSuiteRsp = 1457; + public const int SelectAvatarEquipSuiteReq = 1458; + public const int SelectAvatarEquipSuiteRsp = 1459; + public const int RefreshAndSyncMissionNotify = 1473; + public const int GetCurrencyExchangeInfoReq = 1480; + public const int GetCurrencyExchangeInfoRsp = 1481; + public const int SetLevelLockReq = 1488; + public const int SetLevelLockRsp = 1489; + public const int FinishFastPassReq = 1490; + public const int FinishFastPassRsp = 1491; + public const int SetWarshipAvatarReq = 1492; + public const int SetWarshipAvatarRsp = 1493; + public const int CreateAlipayOrderReq = 1494; + public const int CreateAlipayOrderRsp = 1495; + public const int SubscriptionStatusNotify = 1496; + public const int GetChatRedEnvelopeInfoReq = 1502; + public const int GetChatRedEnvelopeInfoRsp = 1503; + public const int WantedMirrorRecoveryReq = 1517; + public const int WantedMirrorRecoveryRsp = 1518; + public const int GetRecommendMissionPanelListReq = 1519; + public const int GetRecommendMissionPanelListRsp = 1520; + public const int GetCustomHeadDataReq = 1523; + public const int GetCustomHeadDataRsp = 1524; + public const int SetCustomHeadReq = 1525; + public const int SetCustomHeadRsp = 1526; + public const int GetStageBuffReq = 1528; + public const int GetStageBuffRsp = 1529; + public const int ChooseStageBuffReq = 1530; + public const int ChooseStageBuffRsp = 1531; + public const int TriggerRecommendGoodsNotify = 1538; + public const int ConfirmRecommendGoodsReq = 1539; + public const int ConfirmRecommendGoodsRsp = 1540; + public const int GetStageRecommendAvatarReq = 1541; + public const int GetStageRecommendAvatarRsp = 1542; + public const int SendDanmakuReq = 1543; + public const int SendDanmakuRsp = 1544; + public const int GetDanmakuListReq = 1545; + public const int GetDanmakuListRsp = 1546; + public const int GetDanmakuBriefInfoReq = 1547; + public const int GetDanmakuBriefInfoRsp = 1548; + public const int ImpeachDanmakuReq = 1549; + public const int ImpeachDanmakuRsp = 1550; + public const int DanmakuBlacklistNotify = 1551; + public const int GetTeamStatusReq = 1553; + public const int GetTeamStatusRsp = 1554; + public const int GetFastPassDataReq = 1555; + public const int GetFastPassDataRsp = 1556; + public const int GetPlayerOnlineStatusReq = 1576; + public const int GetPlayerOnlineStatusRsp = 1577; + public const int MpSyncActionFromPlayerNotify = 1579; + public const int MpSyncActionFromServerNotify = 1580; + public const int VerifySamSungOrderNotify = 1581; + public const int GetClientDataReq = 1586; + public const int GetClientDataRsp = 1587; + public const int SetClientDataReq = 1588; + public const int SetClientDataRsp = 1589; + public const int WikiTakeActivitySuitRewardReq = 1592; + public const int WikiTakeActivitySuitRewardRsp = 1593; + public const int GetBlackListReq = 1594; + public const int GetBlackListRsp = 1595; + public const int AddToBlackListReq = 1596; + public const int AddToBlackListRsp = 1597; + public const int DelFromBlackListReq = 1598; + public const int DelFromBlackListRsp = 1599; + public const int DebugHotPatchFileNotify = 1600; + public const int GetWebActivityInfoReq = 1601; + public const int GetWebActivityInfoRsp = 1602; + public const int GetMiniRankReq = 1603; + public const int GetMiniRankRsp = 1604; + public const int ChargeActivityBuffReq = 1605; + public const int ChargeActivityBuffRsp = 1606; + public const int LoginWishGetMainDataReq = 1607; + public const int LoginWishGetMainDataRsp = 1608; + public const int LoginWishTakeLoginRewardReq = 1609; + public const int LoginWishTakeLoginRewardRsp = 1610; + public const int LoginWishTakeSpecialRewardReq = 1611; + public const int LoginWishTakeSpecialRewardRsp = 1612; + public const int LoginWishMakeWishReq = 1613; + public const int LoginWishMakeWishRsp = 1614; + public const int LoginWishTakeWishRewardReq = 1615; + public const int LoginWishTakeWishRewardRsp = 1616; + public const int DevLevelChangeNotify = 1619; + public const int DelAvatarEquipSuiteReq = 1620; + public const int DelAvatarEquipSuiteRsp = 1621; + public const int ClientCheckNetworkEnvReq = 1626; + public const int ClientCheckNetworkEnvRsp = 1627; + public const int GetStageRecommendAvatarCourseInfoReq = 1630; + public const int GetStageRecommendAvatarCourseInfoRsp = 1631; + public const int GetMissionStepCompensationInfoReq = 1632; + public const int GetMissionStepCompensationInfoRsp = 1633; + public const int TakeMissionStepCompensationReq = 1634; + public const int TakeMissionStepCompensationRsp = 1635; + public const int GetEliteChapterCompensationInfoReq = 1636; + public const int GetEliteChapterCompensationInfoRsp = 1637; + public const int TakeEliteChapterCompensationReq = 1638; + public const int TakeEliteChapterCompensationRsp = 1639; + public const int UnlockPrivilegeReq = 1642; + public const int UnlockPrivilegeRsp = 1643; + public const int MpSetExtraSkillReq = 1644; + public const int MpSetExtraSkillRsp = 1645; + public const int GetPrivilegeInfoReq = 1646; + public const int GetPrivilegeInfoRsp = 1647; + public const int CreateSteamOrderReq = 1648; + public const int CreateSteamOrderRsp = 1649; + public const int VerifySteamOrderNotify = 1650; + public const int UnlockGobackFundReq = 1651; + public const int UnlockGobackFundRsp = 1652; + public const int TakeGobackFundRewardReq = 1653; + public const int TakeGobackFundRewardRsp = 1654; + public const int ExBossSweepReq = 1655; + public const int ExBossSweepRsp = 1656; + public const int ExBossTakeBossScoreRewardNotify = 1657; + public const int BindHoyolabAccountReq = 1658; + public const int BindHoyolabAccountRsp = 1659; + public const int ChapterGroupGetDataReq = 1660; + public const int ChapterGroupGetDataRsp = 1661; + public const int WeekDayActivitySweepReq = 1664; + public const int WeekDayActivitySweepRsp = 1665; + public const int GetWeekDayActivityCompensationInfoReq = 1666; + public const int GetWeekDayActivityCompensationInfoRsp = 1667; + public const int TakeWeekDayActivityCompensationReq = 1668; + public const int TakeWeekDayActivityCompensationRsp = 1669; + public const int RequestLogoffReq = 1670; + public const int RequestLogoffRsp = 1671; + public const int GetChapterCompensationInfoReq = 1672; + public const int GetChapterCompensationInfoRsp = 1673; + public const int TakeChapterCompensationReq = 1674; + public const int TakeChapterCompensationRsp = 1675; + public const int GetChallengeStepCompensationInfoReq = 1676; + public const int GetChallengeStepCompensationInfoRsp = 1677; + public const int TakeChallengeStepCompensationReq = 1678; + public const int TakeChallengeStepCompensationRsp = 1679; + public const int GetSpecificRankReq = 1684; + public const int GetSpecificRankRsp = 1685; + public const int GetInviteActivityInviterDataReq = 1690; + public const int GetInviteActivityInviterDataRsp = 1691; + public const int TakeInviteActivityInviterProgressRewardReq = 1692; + public const int TakeInviteActivityInviterProgressRewardRsp = 1693; + public const int GetInviteActivityInviteeDataReq = 1694; + public const int GetInviteActivityInviteeDataRsp = 1695; + public const int InviteActivityAcceptInviteReq = 1696; + public const int InviteActivityAcceptInviteRsp = 1697; + public const int GetMainStoryBlessReq = 1703; + public const int GetMainStoryBlessRsp = 1704; + public const int GetMainStoryMemoirsDataReq = 1701; + public const int GetMainStoryMemoirsDataRsp = 1702; + public const int GetActivityMainDataReq = 1705; + public const int GetActivityMainDataRsp = 1706; + public const int SetRedPointStatusNotify = 1707; + public const int ClientResetNotify = 1708; + public const int AddCustomAvatarTeamReq = 1709; + public const int AddCustomAvatarTeamRsp = 1710; + public const int DelCustomAvatarTeamReq = 1711; + public const int DelCustomAvatarTeamRsp = 1712; + public const int GetWorldMapRecommendReq = 1713; + public const int GetWorldMapRecommendRsp = 1714; + public const int UnlockCollectionReq = 1715; + public const int UnlockCollectionRsp = 1716; + public const int GetCollectionListReq = 1717; + public const int GetCollectionListRsp = 1718; + public const int ActivateCollectionReq = 1719; + public const int ActivateCollectionRsp = 1720; + public const int ExchangeAvatarStigmataReq = 1721; + public const int ExchangeAvatarStigmataRsp = 1722; + public const int ChooseSpecialGobackReq = 1723; + public const int ChooseSpecialGobackRsp = 1724; + public const int GobackSpecialBpPurchaseReq = 1725; + public const int GobackSpecialBpPurchaseRsp = 1726; + public const int GobackSpecialBpTakeRewardReq = 1727; + public const int GobackSpecialBpTakeRewardRsp = 1728; + public const int WeaponHomologyReq = 1734; + public const int WeaponHomologyRsp = 1735; + public const int UpdateMultiMissionProgressReq = 1736; + public const int UpdateMultiMissionProgressRsp = 1737; + public const int WeaponLevelUpUseTicketReq = 1738; + public const int WeaponLevelUpUseTicketRsp = 1739; + public const int StigmataLevelUpUseTicketReq = 1740; + public const int StigmataLevelUpUseTicketRsp = 1741; + public const int GetTileMapReq = 4900; + public const int GetTileMapRsp = 4901; + public const int TileUpdateMapReq = 4902; + public const int TileUpdateMapRsp = 4903; + public const int TileGetTowerReq = 4904; + public const int TileGetTowerRsp = 4905; + public const int TileEnterReq = 4906; + public const int TileEnterRsp = 4907; + public const int TileSaveProgressReq = 4908; + public const int TileSaveProgressRsp = 4909; + public const int TileResetFloorReq = 4912; + public const int TileResetFloorRsp = 4913; + public const int TileEntityOpNotify = 4914; + public const int TileSelectPathReq = 4915; + public const int TileSelectPathRsp = 4916; + public const int TileReportSavedPositionReq = 4919; + public const int TileReportSavedPositionRsp = 4920; + public const int TileLoadSavedPositionReq = 4921; + public const int TileLoadSavedPositionRsp = 4922; + public const int TileMapUpdateNotify = 4923; + public const int TileGetPartialMapAsUpdateReq = 4924; + public const int TileGetPartialMapAsUpdateRsp = 4925; + public const int GetTileMiniMapReq = 4926; + public const int GetTileMiniMapRsp = 4927; + public const int TiledGameFarmGetDataReq = 8000; + public const int TiledGameFarmGetDataRsp = 8001; + public const int TiledGameFarmUseToolReq = 8002; + public const int TiledGameFarmUseToolRsp = 8003; + public const int TiledGameFarmRefreshFarmlandReq = 8004; + public const int TiledGameFarmRefreshFarmlandRsp = 8005; + public const int TiledGameFarmEnterMineFloorReq = 8006; + public const int TiledGameFarmEnterMineFloorRsp = 8007; + public const int TiledGameFarmSynthesisReq = 8008; + public const int TiledGameFarmSynthesisRsp = 8009; + public const int TiledGameFarmTradeReq = 8010; + public const int TiledGameFarmTradeRsp = 8011; + public const int TiledGameFarmBeginFishingNotify = 8012; + public const int TiledGameFarmEndFishingReq = 8013; + public const int TiledGameFarmEndFishingRsp = 8014; + public const int TiledGameFarmGemIdentifyReq = 8015; + public const int TiledGameFarmGemIdentifyRsp = 8016; + public const int TiledGameFarmFillShedFoodReq = 8017; + public const int TiledGameFarmFillShedFoodRsp = 8018; + public const int TiledGameFarmUpgradeFacilityReq = 8019; + public const int TiledGameFarmUpgradeFacilityRsp = 8020; + public const int TiledGameFarmRefreshLivestockShedReq = 8021; + public const int TiledGameFarmRefreshLivestockShedRsp = 8022; + public const int TiledGameFarmTameLivestockReq = 8023; + public const int TiledGameFarmTameLivestockRsp = 8024; + public const int TiledGameFarmHarvestLivestockReq = 8025; + public const int TiledGameFarmHarvestLivestockRsp = 8026; + public const int TiledGameFarmPickItemReq = 8027; + public const int TiledGameFarmPickItemRsp = 8028; + public const int TiledGameFarmUseMealVoucherReq = 8029; + public const int TiledGameFarmUseMealVoucherRsp = 8030; + public const int TiledGameFarmBuyLivestockReq = 8031; + public const int TiledGameFarmBuyLivestockRsp = 8032; + public const int TiledGameFarmGetSelectQuestReq = 8033; + public const int TiledGameFarmGetSelectQuestRsp = 8034; + public const int TiledGameFarmChooseQuestReq = 8035; + public const int TiledGameFarmChooseQuestRsp = 8036; + public const int TiledGameFarmFinishQuestReq = 8037; + public const int TiledGameFarmFinishQuestRsp = 8038; + public const int TiledGameFarmSuperFishingReq = 8039; + public const int TiledGameFarmSuperFishingRsp = 8040; + public const int TiledGameMonsterFarmGetDataReq = 8300; + public const int TiledGameMonsterFarmGetDataRsp = 8301; + public const int TiledGameMonsterFarmUseToolReq = 8304; + public const int TiledGameMonsterFarmUseToolRsp = 8305; + public const int TiledGameMonsterFarmRefreshFarmlandReq = 8306; + public const int TiledGameMonsterFarmRefreshFarmlandRsp = 8307; + public const int TiledGameMonsterFarmEnterMineFloorReq = 8308; + public const int TiledGameMonsterFarmEnterMineFloorRsp = 8309; + public const int TiledGameMonsterFarmTradeReq = 8310; + public const int TiledGameMonsterFarmTradeRsp = 8311; + public const int TiledGameMonsterFarmBeginFishingNotify = 8312; + public const int TiledGameMonsterFarmEndFishingReq = 8313; + public const int TiledGameMonsterFarmEndFishingRsp = 8314; + public const int TiledGameMonsterFarmGetQuestReq = 8315; + public const int TiledGameMonsterFarmGetQuestRsp = 8316; + public const int TiledGameMonsterFarmChooseQuestReq = 8317; + public const int TiledGameMonsterFarmChooseQuestRsp = 8318; + public const int TiledGameMonsterFarmFinishQuestReq = 8319; + public const int TiledGameMonsterFarmFinishQuestRsp = 8320; + public const int TiledGameMonsterFarmUseMealVoucherReq = 8321; + public const int TiledGameMonsterFarmUseMealVoucherRsp = 8322; + public const int TiledGameMonsterFarmPickItemReq = 8323; + public const int TiledGameMonsterFarmPickItemRsp = 8324; + public const int TiledGameMonsterFarmLevelUpReq = 8325; + public const int TiledGameMonsterFarmLevelUpRsp = 8326; + public const int TiledGameMonsterFarmUpgradeBuildingReq = 8327; + public const int TiledGameMonsterFarmUpgradeBuildingRsp = 8328; + public const int TiledGameMonsterFarmManipulateMonsterReq = 8329; + public const int TiledGameMonsterFarmManipulateMonsterRsp = 8330; + public const int TiledGameMonsterFarmRefreshBuildingReq = 8331; + public const int TiledGameMonsterFarmRefreshBuildingRsp = 8332; + public const int TiledGameMonsterFarmIncubateReq = 8333; + public const int TiledGameMonsterFarmIncubateRsp = 8334; + public const int TiledGameMonsterFarmSetProduceLineReq = 8335; + public const int TiledGameMonsterFarmSetProduceLineRsp = 8336; + public const int TiledGameMonsterFarmDropMonsterReq = 8337; + public const int TiledGameMonsterFarmDropMonsterRsp = 8338; + public const int TiledGameMonsterFarmTakeBuildingProductReq = 8339; + public const int TiledGameMonsterFarmTakeBuildingProductRsp = 8340; + public const int TiledGameMonsterFarmSetBuildingProduceTargetReq = 8341; + public const int TiledGameMonsterFarmSetBuildingProduceTargetRsp = 8342; + public const int TiledGameMonsterFarmGetBusinessReportReq = 8343; + public const int TiledGameMonsterFarmGetBusinessReportRsp = 8344; + public const int TiledGameMonsterFarmGetRankReq = 8345; + public const int TiledGameMonsterFarmGetRankRsp = 8346; + public const int TiledGamePrpgGetDataReq = 8450; + public const int TiledGamePrpgGetDataRsp = 8451; + public const int TiledGamePrpgPvpBattleBeginNotify = 8452; + public const int TiledGamePrpgPvpBattleSettleNotify = 8453; + public const int TiledGamePrpgPvpEnterBattleReq = 8454; + public const int TiledGamePrpgPvpEnterBattleRsp = 8455; + public const int TiledGamePrpgPvpAbandonBattleReq = 8456; + public const int TiledGamePrpgPvpAbandonBattleRsp = 8457; + public const int TiledGamePrpgPvpGetBattleInfoReq = 8458; + public const int TiledGamePrpgPvpGetBattleInfoRsp = 8459; + public const int TiledGamePrpgPvpMoveCardReq = 8460; + public const int TiledGamePrpgPvpMoveCardRsp = 8461; + public const int TiledGamePrpgPvpExchangeCardReq = 8462; + public const int TiledGamePrpgPvpExchangeCardRsp = 8463; + public const int TiledGamePrpgPvpEndRoundReq = 8464; + public const int TiledGamePrpgPvpEndRoundRsp = 8465; + public const int TiledGamePrpgPvpSyncRoundNotify = 8466; + public const int TiledGamePrpgPvpBattleEndNotify = 8467; + public const int TiledGamePrpgPvpSetCardBackReq = 8468; + public const int TiledGamePrpgPvpSetCardBackRsp = 8469; + public const int TiledGamePrpgUnlockSkillReq = 8470; + public const int TiledGamePrpgUnlockSkillRsp = 8471; + public const int TiledGamePrpgLevelUpCardReq = 8472; + public const int TiledGamePrpgLevelUpCardRsp = 8473; + public const int TiledGamePrpgBattleBeginReq = 8474; + public const int TiledGamePrpgBattleBeginRsp = 8475; + public const int TiledGamePrpgBattleEndReq = 8476; + public const int TiledGamePrpgBattleEndRsp = 8477; + public const int TiledGamePrpgTakeExploreLevelRewardReq = 8478; + public const int TiledGamePrpgTakeExploreLevelRewardRsp = 8479; + public const int TiledGamePrpgPvpSendEmojiReq = 8480; + public const int TiledGamePrpgPvpSendEmojiRsp = 8481; + public const int TiledGamePrpgPvpEmojiNotify = 8482; + public const int TownActivityGetDataReq = 6450; + public const int TownActivityGetDataRsp = 6451; + public const int TownActivitySaveReq = 6452; + public const int TownActivitySaveRsp = 6453; + public const int TownActivityBuildReq = 6454; + public const int TownActivityBuildRsp = 6455; + public const int TownActivityBattleReq = 6456; + public const int TownActivityBattleRsp = 6457; + public const int TownActivitySellBuildingReq = 6458; + public const int TownActivitySellBuildingRsp = 6459; + public const int TownActivityHealAvatarReq = 6460; + public const int TownActivityHealAvatarRsp = 6461; + public const int TownActivitySellBrickReq = 6462; + public const int TownActivitySellBrickRsp = 6463; + public const int TownActivityEndNotify = 6464; + public const int TownActivityBossAttackNotify = 6465; + public const int TownActivityGetShopReq = 6466; + public const int TownActivityGetShopRsp = 6467; + public const int TownActivityShopBuyReq = 6468; + public const int TownActivityShopBuyRsp = 6469; + public const int TownActivityMaterialUseReq = 6470; + public const int TownActivityMaterialUseRsp = 6471; + public const int TownActivitySpeedUpHealReq = 6472; + public const int TownActivitySpeedUpHealRsp = 6473; + public const int TownActivityCheckInOptionalReq = 6474; + public const int TownActivityCheckInOptionalRsp = 6475; + public const int TownActivityResetReq = 6476; + public const int TownActivityResetRsp = 6477; + public const int TownActivityAlterPathReq = 6478; + public const int TownActivityAlterPathRsp = 6479; + public const int TownActivityAttackEnemyBuffNotify = 6480; + public const int TownActivityRefreshBrickReq = 6481; + public const int TownActivityRefreshBrickRsp = 6482; + public const int GetBuffEffectReq = 476; + public const int GetBuffEffectRsp = 477; + public const int GetGrandKeyReq = 506; + public const int GetGrandKeyRsp = 507; + public const int GetMedalDataReq = 449; + public const int GetMedalDataRsp = 450; + public const int MedalOpReq = 451; + public const int MedalOpRsp = 452; + public const int GetStageActDifficultyReq = 456; + public const int GetStageActDifficultyRsp = 457; + public const int TakeStageActChallengeRewardReq = 458; + public const int TakeStageActChallengeRewardRsp = 459; + public const int GetStageChapterReq = 965; + public const int GetStageChapterRsp = 966; + public const int TakeChapterChallengeRewardReq = 967; + public const int TakeChapterChallengeRewardRsp = 968; + public const int TakeActivityChallengeRewardReq = 460; + public const int TakeActivityChallengeRewardRsp = 461; + public const int GetPediaReq = 464; + public const int GetPediaRsp = 465; + public const int MpGetMatchInfoReq = 466; + public const int MpGetMatchInfoRsp = 467; + public const int MpCancelMatchReq = 468; + public const int MpCancelMatchRsp = 469; + public const int MpGetLobbyRecommendReq = 470; + public const int MpGetLobbyRecommendRsp = 471; + public const int EquipSynthesisReq = 478; + public const int EquipSynthesisRsp = 479; + public const int GetPlayerCardReq = 480; + public const int GetPlayerCardRsp = 481; + public const int ChangePlayerCardReq = 482; + public const int ChangePlayerCardRsp = 483; + public const int DelPlayerCardMsgReq = 489; + public const int PlayerCardDataChangeNotify = 492; + public const int SendPlayerCardMsgReq = 486; + public const int SendPlayerCardMsgRsp = 493; + public const int GetOtherPlayerCardDataReq = 490; + public const int GetOtherPlayerCardDataRsp = 491; + public const int RecvPlayerCardMsgNotify = 487; + public const int GetBossRushActivityReq = 496; + public const int GetBossRushActivityRsp = 497; + public const int ChooseBossRushBuffReq = 498; + public const int ChooseBossRushBuffRsp = 499; + public const int GetDeleteMaterialReq = 500; + public const int GetDeleteMaterialRsp = 501; + public const int GetExtraStoryChallengeModeDataReq = 502; + public const int GetExtraStoryChallengeModeDataRsp = 503; + public const int ResetExtraStoryChallengeModeReq = 504; + public const int ResetExtraStoryChallengeModeRsp = 505; + public const int GetExBossScheduleReq = 508; + public const int GetExBossScheduleRsp = 509; + public const int GetExBossInfoReq = 510; + public const int GetExBossInfoRsp = 511; + public const int TakeExBossRankRewardNotify = 516; + public const int GetNewConsignedOrderDataReq = 517; + public const int GetNewConsignedOrderDataRsp = 518; + public const int GetConsignedRewardReq = 519; + public const int GetConsignedRewardRsp = 520; + public const int ChooseConsignedRewardReq = 521; + public const int ChooseConsignedRewardRsp = 522; + public const int TakeConsignedRewardReq = 523; + public const int TakeConsignedRewardRsp = 524; + public const int GetConsignedRewardLogReq = 525; + public const int GetConsignedRewardLogRsp = 526; + public const int GetExBossRankReq = 527; + public const int GetExBossRankRsp = 528; + public const int ExBossStageBeginReq = 529; + public const int ExBossStageBeginRsp = 530; + public const int ExBossStageEndReq = 531; + public const int ExBossStageEndRsp = 532; + public const int TakeExBossScoreRewardNotify = 533; + public const int OpenWeekDayActivityReq = 534; + public const int OpenWeekDayActivityRsp = 535; + public const int GetChallengeStepRewardReq = 536; + public const int GetChallengeStepRewardRsp = 537; + public const int AddTechExpReq = 538; + public const int AddTechExpRsp = 539; + public const int TakeTechCollectRewardReq = 540; + public const int TakeTechCollectRewardRsp = 541; + public const int MaterialDeleteReturnReq = 553; + public const int TakeDailyCompensationRewardReq = 564; + public const int TakeDailyCompensationRewardRsp = 565; + public const int AsMasterPupilCardReq = 566; + public const int AsMasterPupilCardRsp = 567; + public const int GetMasterPupilDataReq = 568; + public const int GetMasterPupilDataRsp = 569; + public const int AskForMasterOrPupilReq = 570; + public const int AskForMasterOrPupilRsp = 571; + public const int DealMasterPupilReq = 572; + public const int DealMasterPupilRsp = 573; + public const int MasterPupilEvalReq = 574; + public const int MasterPupilEvalRsp = 575; + public const int GetMasterFameRewardReq = 576; + public const int GetMasterFameRewardRsp = 577; + public const int MasterPupilCardReportReq = 578; + public const int ActivateTrialAvatarReq = 583; + public const int ActivateTrialAvatarRsp = 584; + public const int GetTrialAvatarReq = 585; + public const int GetTrialAvatarRsp = 586; + public const int GetMasterPupilCardReq = 587; + public const int GetMasterPupilCardRsp = 588; + public const int MasterPupilMsgNotify = 589; + public const int GetFrameDataReq = 590; + public const int GetFrameDataRsp = 591; + public const int SetFrameUseReq = 592; + public const int SetFrameUseRsp = 593; + public const int GetDormDataReq = 601; + public const int GetDormDataRsp = 602; + public const int GetDormHouseReq = 603; + public const int GetDormHouseRsp = 604; + public const int EditDormRoomReq = 605; + public const int EditDormRoomRsp = 606; + public const int GetDepotFurnitureReq = 607; + public const int GetDepotFurnitureRsp = 608; + public const int UnlockDormHouseReq = 609; + public const int UnlockDormHouseRsp = 610; + public const int SetDormAvatarReq = 611; + public const int SetDormAvatarRsp = 612; + public const int LevelUpDormReq = 613; + public const int LevelUpDormRsp = 614; + public const int SetDormNameReq = 615; + public const int SetDormNameRsp = 616; + public const int FinishDormEventReq = 617; + public const int FinishDormEventRsp = 618; + public const int GetHasGotFurnitureIdListReq = 619; + public const int GetHasGotFurnitureIdListRsp = 620; + public const int BuyFurnitureReq = 621; + public const int BuyFurnitureRsp = 622; + public const int GetOtherDormDataReq = 633; + public const int GetOtherDormDataRsp = 634; + public const int SetDormSnsInfoReq = 635; + public const int SetDormSnsInfoRsp = 636; + public const int GetDormSnsDataReq = 637; + public const int GetDormSnsDataRsp = 638; + public const int LikeDormReq = 639; + public const int LikeDormRsp = 640; + public const int FinishDormTalkReq = 641; + public const int FinishDormTalkRsp = 642; + public const int GetAvatarRollDataReq = 643; + public const int GetAvatarRollDataRsp = 644; + public const int TakeRollRewardReq = 645; + public const int TakeRollRewardRsp = 646; + public const int ClaimStaminaReq = 649; + public const int ClaimStaminaRsp = 650; + public const int GetPupilMissionReq = 651; + public const int GetPupilMissionRsp = 652; + public const int GetMasterPupilApplyReq = 653; + public const int GetMasterPupilApplyRsp = 654; + public const int GetRecommendMasterPupilReq = 655; + public const int GetRecommendMasterPupilRsp = 656; + public const int GetMasterPupilMainDataReq = 657; + public const int GetMasterPupilMainDataRsp = 658; + public const int GetPupilEvalDataReq = 659; + public const int GetPupilEvalDataRsp = 660; + public const int GetMasterRankReq = 662; + public const int GetMasterRankRsp = 663; + public const int GetOtherMasterPupilReq = 664; + public const int GetOtherMasterPupilRsp = 665; + public const int UnlockFurnitureReq = 680; + public const int UnlockFurnitureRsp = 681; + public const int GrandKeyLevelUpReq = 753; + public const int GrandKeyLevelUpRsp = 754; + public const int GrandKeyResetReq = 755; + public const int GrandKeyResetRsp = 756; + public const int GrandKeyBreachReq = 757; + public const int GrandKeyBreachRsp = 758; + public const int GrandKeyActivateSkillReq = 759; + public const int GrandKeyActivateSkillRsp = 760; + public const int GrandKeyContrastReq = 761; + public const int GrandKeyContrastRsp = 762; + public const int GrandKeySetSkillReq = 763; + public const int GrandKeySetSkillRsp = 764; + public const int GrandKeyUnlockSkillReq = 765; + public const int GrandKeyUnlockSkillRsp = 766; + public const int PushClientMsgNotify = 801; + public const int SetPlayerTagNotify = 802; + public const int SyncTimeReq = 803; + public const int SyncTimeRsp = 804; + public const int TakeExtraStoryChallengeModeChapterRewardReq = 807; + public const int TakeExtraStoryChallengeModeChapterRewardRsp = 808; + public const int GetAvatarBindEquipInChallengeModeReq = 809; + public const int GetAvatarBindEquipInChallengeModeRsp = 810; + public const int GetGalInteractTriggerEventReq = 813; + public const int GetGalInteractTriggerEventRsp = 814; + public const int TakeGalInteractTriggerEventReq = 815; + public const int TakeGalInteractTriggerEventRsp = 816; + public const int AvatarFragmentTransformReq = 827; + public const int AvatarFragmentTransformRsp = 828; + public const int StageBattleSaveClientDataReq = 829; + public const int StageBattleSaveClientDataRsp = 830; + public const int TakeExtraStoryLineStoryFinishRewardReq = 836; + public const int TakeExtraStoryLineStoryFinishRewardRsp = 837; + public const int UnbindAccountReq = 961; + public const int UnbindAccountRsp = 962; + public const int SyncDutyNotify = 969; + public const int RecallMasterPupilApplicationReq = 970; + public const int RecallMasterPupilApplicationRsp = 971; + public const int SetFriendRemarkReq = 972; + public const int SetFriendRemarkRsp = 973; + public const int GetFriendRemarkListReq = 974; + public const int GetFriendRemarkListRsp = 975; + public const int PlayerLevelUpNotify = 976; + public const int UltraEndlessGetTopRankReq = 5200; + public const int UltraEndlessGetTopRankRsp = 5201; + public const int UltraEndlessGetMainDataReq = 5202; + public const int UltraEndlessGetMainDataRsp = 5203; + public const int UltraEndlessLastSettleRewardNotify = 5205; + public const int UltraEndlessReportSiteFloorReq = 5206; + public const int UltraEndlessReportSiteFloorRsp = 5207; + public const int UltraEndlessBriefDataNotify = 5210; + public const int UltraEndlessEnterSiteReq = 5211; + public const int UltraEndlessEnterSiteRsp = 5212; + public const int UltraEndlessTopRankRewardReq = 5215; + public const int UltraEndlessTopRankRewardRsp = 5216; + public const int UltraEndlessClientReportNotify = 5219; + public const int UltraEndlessFirstJoinRewardNotify = 5220; + public const int UltraEndlessCommonNotify = 5298; + public const int GetVirtualAvatarGroupDetailReq = 3502; + public const int GetVirtualAvatarGroupDetailRsp = 3503; + public const int SetVirtualAvatarTeamReq = 3504; + public const int SetVirtualAvatarTeamRsp = 3505; + public const int DressVirtualEquipmentReq = 3506; + public const int DressVirtualEquipmentRsp = 3507; + public const int VirtualGachaReq = 3508; + public const int VirtualGachaRsp = 3509; + public const int GetVirtualGachaStatusReq = 3510; + public const int GetVirtualGachaStatusRsp = 3511; + public const int VirtualAvatarGroupChangeNotify = 3512; + public const int VirtualTrainDirectGachaNotify = 3513; + public const int ChooseVirtualTrainGachaItemReq = 3514; + public const int ChooseVirtualTrainGachaItemRsp = 3515; + public const int ChooseVirtualDefaultAvatarNotify = 3516; + public const int SyncVirtualGachaStatusNotify = 3517; + public const int VirtualTrainRoleCustomLevelUpReq = 3518; + public const int VirtualTrainRoleCustomLevelUpRsp = 3519; + public const int VirtualTrainRoleCustomChooseReq = 3520; + public const int VirtualTrainRoleCustomChooseRsp = 3521; + public const int VirtualTrainEvoReq = 3522; + public const int VirtualTrainEvoRsp = 3523; + public const int VirtualTrainItemDropNotify = 3524; + public const int GetWarshipItemDataReq = 5450; + public const int GetWarshipItemDataRsp = 5451; + public const int GetWarshipTrialDataReq = 5452; + public const int GetWarshipTrialDataRsp = 5453; + public const int GetWarshipDataReq = 5454; + public const int GetWarshipDataRsp = 5455; + public const int SetWarshipReq = 5456; + public const int SetWarshipRsp = 5457; + public const int SetWarshipComponentReq = 5458; + public const int SetWarshipComponentRsp = 5459; + public const int SetWarshipSettingReq = 5460; + public const int SetWarshipSettingRsp = 5461; + public const int WarshipItemReturnMaterialNotify = 5462; + public const int AddWarshipItemNotify = 5463; + public const int GetWeeklyReportReq = 5100; + public const int GetWeeklyReportRsp = 5101; + public const int GetWeeklyReportEndlessRecommendPlayerReq = 5102; + public const int GetWeeklyReportEndlessRecommendPlayerRsp = 5103; + public const int GetWeeklyReportExBossRecommendPlayerReq = 5104; + public const int GetWeeklyReportExBossRecommendPlayerRsp = 5105; + public const int GetWeeklyReportUltraEndlessRecommendPlayerReq = 5106; + public const int GetWeeklyReportUltraEndlessRecommendPlayerRsp = 5107; +} \ No newline at end of file diff --git a/Proto/Proto.csproj b/Proto/Proto.csproj new file mode 100644 index 0000000..8af8537 --- /dev/null +++ b/Proto/Proto.csproj @@ -0,0 +1,26 @@ + + + + net9.0 + enable + enable + false + KianaProto + KianaBH.Proto + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + diff --git a/SdkServer/Handlers/Dispatch/QueryDispatchController.cs b/SdkServer/Handlers/Dispatch/QueryDispatchController.cs new file mode 100644 index 0000000..a56eeb5 --- /dev/null +++ b/SdkServer/Handlers/Dispatch/QueryDispatchController.cs @@ -0,0 +1,41 @@ +using KianaBH.Configuration; +using KianaBH.Data.Models.Dispatch; +using KianaBH.Util; +using KianaBH.Util.Crypto; +using Microsoft.AspNetCore.Mvc; + +namespace KianaBH.SdkServer.Handlers.Dispatch; + +[ApiController] +public class QueryDispatchController : ControllerBase +{ + [HttpGet("/query_dispatch")] + public IActionResult QueryDispatch([FromQuery] DispatchQuery query, Logger logger) + { + var version = HotfixContainer.ExtractVersionNumber(query.Version); + if (!ConfigManager.Hotfix.Hotfixes.ContainsKey(version)) + { + logger.Warn($"Client sent requesting unsupported game version: {version}"); + return BadRequest(); + } + + var response = new QueryDispatchResponse + { + Retcode = 0, + RegionList = + [ + new QueryDispatchResponse.RegionInfo + { + Retcode = 0, + DispatchUrl = + $"{ConfigManager.Config.HttpServer.GetDisplayAddress()}/query_gateway", + Ext = null, + Name = "KianaBH", + Title = "KianaBH", + } + ] + }; + + return Ok(DispatchEncryption.EncryptDispatchContent(version, response)); + } +} \ No newline at end of file diff --git a/SdkServer/Handlers/Dispatch/QueryGatewayController.cs b/SdkServer/Handlers/Dispatch/QueryGatewayController.cs new file mode 100644 index 0000000..ebb24c4 --- /dev/null +++ b/SdkServer/Handlers/Dispatch/QueryGatewayController.cs @@ -0,0 +1,191 @@ +using System.Text.RegularExpressions; +using KianaBH.Configuration; +using KianaBH.Data.Models.Dispatch; +using KianaBH.Util; +using KianaBH.Util.Crypto; +using Microsoft.AspNetCore.Mvc; + +namespace KianaBH.SdkServer.Handlers.Dispatch; + +[ApiController] +public class QueryGatewayController : ControllerBase +{ + [HttpGet("/query_gateway")] + public IActionResult QueryGateway([FromQuery] DispatchQuery query, Logger logger) + { + var version = HotfixContainer.ExtractVersionNumber(query.Version); + + if (!ConfigManager.Hotfix.Hotfixes.TryGetValue(version, out var hotfix)) + { + logger.Warn($"Client sent requesting unsupported game version: {version}"); + return BadRequest(); + } + + var serverInfo = new QueryGatewayResponse.ServerInfo + { + Ip = ConfigManager.Config.GameServer.PublicAddress, + Port = ConfigManager.Config.GameServer.Port, + IsKcp = true, + }; + + var assetBundleUrlList = UrlProvider.GetAssetBundleUrlList(query.Version!); + var exResourceUrlList = UrlProvider.GetExResourceUrlList(query.Version!); + var exAudioAndVideoUrlList = UrlProvider.GetExAudioAndVideoUrlList(query.Version!); + + var response = new QueryGatewayResponse + { + AccountUrl = $"{ConfigManager.Config.HttpServer.GetDisplayAddress()}/", + Gameserver = serverInfo, + Gateway = serverInfo, + AssetBundleUrlList = assetBundleUrlList, + ExResourceUrlList = exResourceUrlList, + ExAudioAndVideoUrlList = exAudioAndVideoUrlList, + Manifest = hotfix, + Ext = new Dictionary + { + { "ex_res_use_http", "0" }, + { "is_xxxx", "0" }, + { "elevator_model_path", "GameEntry/EVA/StartLoading_Model" }, + { "block_error_dialog", "1" }, + { "ex_res_pre_publish", "0" }, + { "ex_resource_url_list", exResourceUrlList }, + { "apm_switch_game_log", "1" }, + { "ex_audio_and_video_url_list", exAudioAndVideoUrlList }, + { "apm_log_dest", "2" }, + { "update_streaming_asb", "1" }, + { "use_multy_cdn", "1" }, + { "show_bulletin_empty_dialog_bg", "0" }, + { "ai_use_asset_boundle", "1" }, + { "res_use_asset_boundle", "1" }, + { "apm_log_level", "0" }, + { "apm_switch_crash", "1" }, + { "network_feedback_enable", "0" }, + { "new_audio_upload", "1" }, + { "apm_switch", "1" } + } + }; + + return Ok(DispatchEncryption.EncryptDispatchContent(version, response)); + } +} + +public static partial class UrlProvider +{ + [GeneratedRegex("^(.*?)_(os|gf|global)_(.*?)$")] + private static partial Regex VersionRegex(); + + public static List GetAssetBundleUrlList(string version) + { + var match = VersionRegex().Match(version); + if (!match.Success) return []; + + var type = match.Groups[2].Value; + + if (ConfigManager.Hotfix.UseLocalCache) return GetLocalUrlList(type, version); + + return type switch + { + "os" => + [ + "https://autopatchos.honkaiimpact3.com/asset_bundle/overseas01/1.1", + "https://bundle-aliyun-os.honkaiimpact3.com/asset_bundle/overseas01/1.1", + ], + "gf" when version.Contains("beta") => + [ + "https://autopatchbeta.bh3.com/asset_bundle/beta_release/1.0", + "https://autopatchbeta.bh3.com/asset_bundle/beta_release/1.0", + ], + "gf" => + [ + "https://bundle-qcloud.bh3.com/asset_bundle/android01/1.0", + "https://bundle.bh3.com/asset_bundle/android01/1.0", + ], + "global" => + [ + "http://hk-bundle-west-mihayo.akamaized.net/asset_bundle/usa01/1.1", + "http://bundle-aliyun-usa.honkaiimpact3.com/asset_bundle/usa01/1.1", + ], + _ => + [ + "https://bundle-aliyun-os.honkaiimpact3.com/asset_bundle/overseas01/1.1", + "https://hk-bundle-os-mihayo.akamaized.net/asset_bundle/overseas01/1.1", + ] + }; + } + + public static List GetExAudioAndVideoUrlList(string version) + { + var match = VersionRegex().Match(version); + if (!match.Success) return []; + + var type = match.Groups[2].Value; + + if (ConfigManager.Hotfix.UseLocalCache) return GetLocalUrlList(type, version); + + return type switch + { + "os" => + [ + "autopatchos.honkaiimpact3.com/com.miHoYo.bh3oversea", + "bigfile-aliyun-os.honkaiimpact3.com/com.miHoYo.bh3oversea", + ], + "gf" when version.Contains("beta") => + [ + "autopatchbeta.bh3.com/tmp/CGAudio", + "autopatchbeta.bh3.com/tmp/CGAudio", + ], + _ => + [ + "bh3rd-beta-qcloud.bh3.com/tmp/CGAudio", + "bh3rd-beta.bh3.com/tmp/CGAudio", + ] + }; + } + + public static List GetExResourceUrlList(string version) + { + var match = VersionRegex().Match(version); + if (!match.Success) return []; + + var type = match.Groups[2].Value; + + if (ConfigManager.Hotfix.UseLocalCache) return GetLocalUrlList(type, version); + + return type switch + { + "os" => + [ + "autopatchos.honkaiimpact3.com/com.miHoYo.bh3oversea", + "bigfile-aliyun-os.honkaiimpact3.com/com.miHoYo.bh3oversea", + ], + "gf" when version.Contains("beta") => + [ + "autopatchbeta.bh3.com/tmp/beta", + "autopatchbeta.bh3.com/tmp/beta", + ], + "gf" => + [ + "bundle-qcloud.bh3.com/tmp/Original", + "bundle.bh3.com/tmp/Original", + ], + "global" => + [ + "hk-bundle-west-mihayo.akamaized.net/tmp/com.miHoYo.bh3global", + "bigfile-aliyun-usa.honkaiimpact3.com/tmp/com.miHoYo.bh3global", + ], + _ => + [ + "bigfile-aliyun-os.honkaiimpact3.com/com.miHoYo.bh3oversea", + "hk-bigfile-os-mihayo.akamaized.net/com.miHoYo.bh3oversea", + ] + }; + } + + private static List GetLocalUrlList(string type, string version) + { + var formattedVersion = version.Replace(".", "_"); + var baseUrl = + $"{ConfigManager.Config.HttpServer.GetDisplayAddress()}/statics/{type}/{formattedVersion}"; + return [baseUrl, baseUrl]; + } +} \ No newline at end of file diff --git a/SdkServer/Handlers/Sdk/AbTestController.cs b/SdkServer/Handlers/Sdk/AbTestController.cs new file mode 100644 index 0000000..68f1972 --- /dev/null +++ b/SdkServer/Handlers/Sdk/AbTestController.cs @@ -0,0 +1,33 @@ +using KianaBH.Data.Models.Sdk; +using Microsoft.AspNetCore.Mvc; + +namespace KianaBH.SdkServer.Handlers.Sdk; + +[ApiController] +public class AbTestController : ControllerBase +{ + [HttpPost("/data_abtest_api/config/experiment/list")] + public IActionResult GetExperimentList() + { + return Ok(new ResponseBase + { + Data = new[] + { + new + { + code = 1000, + type = 2, + config_id = "169", + period_id = "6524_721", + version = 2, + configs = new + { + hoyopass_enable = false + }, + sceneWhiteList = false, + experimentWhiteList = false, + } + } + }); + } +} \ No newline at end of file diff --git a/SdkServer/Handlers/Sdk/ComboGranterController.cs b/SdkServer/Handlers/Sdk/ComboGranterController.cs new file mode 100644 index 0000000..e5dab93 --- /dev/null +++ b/SdkServer/Handlers/Sdk/ComboGranterController.cs @@ -0,0 +1,123 @@ +using Microsoft.AspNetCore.Mvc; +using KianaBH.Data.Models.Sdk; +using KianaBH.Database.Account; +using KianaBH.Util; + +namespace KianaBH.SdkServer.Handlers.Sdk; + +[ApiController] +public class ComboGranterController : Controller +{ + [HttpPost("/{productName}/combo/granter/login/v2/login")] + public async Task ComboLoginV2(string productName, [FromBody] ComboGranterRequest request) + { + // TODO: Reuse this logic with MDK Controller Verify Token + + int accountUid; + try + { + accountUid = int.Parse(request.Data?.Uid!); + } + catch + { + return Ok(new ResponseBase + { + Retcode = -101, + Success = false, + Message = "Account token error" + }); + } + + var account = AccountData.GetAccountByUid(accountUid,true); + + if (account == null || account!.ComboToken != request.Data!.Token) + { + return Ok(new ResponseBase + { + Retcode = -101, + Success = false, + Message = "Account token error" + }); + } + + return Ok(new ComboGranterResponse + { + Data = new ComboGranterResponse.ComboGranterResponseData + { + AccountType = 1, + Data = "{\"guest\": false}", + Heartbeat = false, + OpenId = account!.Uid.ToString(), + ComboToken = account!.ComboToken, + }, + }); + } + + [HttpPost("/{productName}/combo/granter/api/compareProtocolVersion")] + public IActionResult CompareProtocolVersion(string productName) + { + return Ok(new ResponseBase + { + Data = new + { + Modified = false, + } + }); + } + + [HttpGet("/{productName}/combo/granter/api/getConfig")] + public IActionResult GetConfig() + { + return Ok(new ResponseBase + { + Data = new + { + protocol = true, + qr_enabled = false, + log_level = "INFO", + announce_url = + $"{ConfigManager.Config.HttpServer.GetDisplayAddress()}/announcement/index.html", + push_alias_type = 2, + disable_ysdk_guard = false, + enable_announce_popup = false, + app_name = "崩坏3-东南亚", + qr_enabled_apps = new + { + bbs = false, + cloud = false + }, + qr_app_icons = new + { + app = "", + bbs = "", + cloud = "", + }, + qr_cloud_display_name = "", + enable_user_center = false, + functional_switch_configs = new { } + } + }); + } + + [HttpGet("/combo/box/api/config/sdk/combo")] + public IActionResult GetComboConfig() + { + return Ok(new ResponseBase + { + Data = new + { + vals = new + { + network_report_config = + "{ \"enable\": 1, \"status_codes\": [206], \"url_paths\": [\"dataUpload\", \"red_dot\"] }", + list_price_tierv2_enable = "false", + default_os_pay_dialog_type = "old", + kibana_pc_config = "{ \"enable\": 1, \"level\": \"Info\",\"modules\": [\"download\"]\n", + telemetry_config = "{\n \"dataupload_enable\": 1,\n}", + h5log_filter_config = + "{\n\t\"function\": {\n\t\t\"event_name\": [\"info_get_cps\", \"notice_close_notice\", \"info_get_uapc\", \"report_set_info\", \"info_get_channel_id\", \"info_get_sub_channel_id\"]\n\t}\n}", + } + } + }); + } +} \ No newline at end of file diff --git a/SdkServer/Handlers/Sdk/DeviceFingerprintController.cs b/SdkServer/Handlers/Sdk/DeviceFingerprintController.cs new file mode 100644 index 0000000..76f50a0 --- /dev/null +++ b/SdkServer/Handlers/Sdk/DeviceFingerprintController.cs @@ -0,0 +1,57 @@ +using KianaBH.Data.Models.Sdk; +using Microsoft.AspNetCore.Mvc; + +namespace KianaBH.SdkServer.Handlers.Sdk; + +[ApiController] +public class DeviceFingerprintController : ControllerBase +{ + [HttpPost("/device-fp/api/getFp")] + public IActionResult GetDeviceFingerprint([FromBody] GetDeviceFingerprintRequest request) + { + return Ok(new ResponseBase + { + Data = new { request.DeviceFp, Code = 0, Msg = "ok" } + }); + } + + [HttpGet("/device-fp/api/getExtList")] + public IActionResult GetExtList() + { + var extList = new[] + { + "cpuName", + "deviceModel", + "deviceName", + "deviceType", + "deviceUID", + "gpuID", + "gpuName", + "gpuAPI", + "gpuVendor", + "gpuVersion", + "gpuMemory", + "osVersion", + "cpuCores", + "cpuFrequency", + "gpuVendorID", + "isGpuMultiTread", + "memorySize", + "screenSize", + "engineName", + "addressMAC", + "packageVersion" + }; + + return Ok(new ResponseBase + { + Data = new + { + code = 200, + msg = "ok", + ext_list = extList, + pkg_list = Array.Empty() + } + }); + } +} \ No newline at end of file diff --git a/SdkServer/Handlers/Sdk/GameWeatherController.cs b/SdkServer/Handlers/Sdk/GameWeatherController.cs new file mode 100644 index 0000000..f8ce9ab --- /dev/null +++ b/SdkServer/Handlers/Sdk/GameWeatherController.cs @@ -0,0 +1,31 @@ +using KianaBH.Data.Models.Sdk; +using Microsoft.AspNetCore.Mvc; + +namespace KianaBH.SdkServer.Handlers.Sdk; + +[ApiController] +public class GameWeatherController : ControllerBase +{ + [HttpGet("/game_weather/weather/get_weather")] + public IActionResult GetWeather() + { + var now = DateTime.Now; + var dateString = now.ToString("yyyy-MM-dd"); + + return Ok(new GetWeatherResponse + { + Data = new GetWeatherResponse.GetWeatherResponseData + { + Timezone = (int)TimeZoneInfo.Local.GetUtcOffset(now).TotalHours, + Hourly = Enumerable.Range(1, 24).Select(i => + new GetWeatherResponse.GetWeatherResponseData.HourlyWeatherData + { + Condition = 3, + Date = dateString, + Hour = i, + Temp = 21 + }).ToList() + } + }); + } +} \ No newline at end of file diff --git a/SdkServer/Handlers/Sdk/LogDataUploadController.cs b/SdkServer/Handlers/Sdk/LogDataUploadController.cs new file mode 100644 index 0000000..4c968fe --- /dev/null +++ b/SdkServer/Handlers/Sdk/LogDataUploadController.cs @@ -0,0 +1,36 @@ +using Microsoft.AspNetCore.Mvc; + +namespace KianaBH.SdkServer.Handlers.Sdk; + +[ApiController] +public class LogDataUploadController : ControllerBase +{ + [HttpGet("/report")] + public IActionResult Report() + { + return Ok(new { code = 0, message = "OK" }); + } + + [HttpPost("/{logType}/dataUpload")] + public IActionResult LogDataUpload(string logType) + { + return Ok(new { code = 0, message = "OK" }); + } + + [HttpPost("/common/h5log/log/batch")] + public IActionResult H5LogBatch() + { + return Ok(new { code = 0, message = "OK" }); + } + + [HttpGet("/_ts")] + public IActionResult GetTs() + { + return Ok(new + { + code = 0, + message = "app running", + milliTs = DateTime.Now.Millisecond.ToString() + }); + } +} \ No newline at end of file diff --git a/SdkServer/Handlers/Sdk/MaPassportController.cs b/SdkServer/Handlers/Sdk/MaPassportController.cs new file mode 100644 index 0000000..6d444f9 --- /dev/null +++ b/SdkServer/Handlers/Sdk/MaPassportController.cs @@ -0,0 +1,50 @@ +// TODO: Since these stuff requires client patch, we will disable it for now + +// using Microsoft.AspNetCore.Mvc; +// using KianaBH.Database.Repositories; +// using KianaBH.SdkServer.Models; +// using KianaBH.SdkServer.Models.Sdk; +// +// namespace KianaBH.SdkServer.Handlers.Sdk; +// +// [ApiController] +// public class MaPassportController : ControllerBase +// { +// [HttpPost("/{productName}/account/ma-passport/api/appLoginByPassword")] +// public async Task AppLoginByPassword(string productName, +// [FromBody] AppLoginByPasswordRequest request) +// { +// var account = AccountRepository.FindAccountByUsername(request.Account); +// +// // Make new account +// if (account == null) +// { +// var (success, accountUid) = await AccountRepository.CreateAccount(request.Account, request.Password); +// if (!success) +// { +// return Ok(new ResponseBase +// { +// Retcode = -101, +// Message = "Failed to create account" +// }); +// } +// +// account = AccountRepository.FindAccountByAccountUid(accountUid); +// } +// +// +// return Ok(new AppLoginByPasswordResponse +// { +// Data = new AppLoginByPasswordResponse.AppLoginByPasswordResponseData +// { +// } +// }); +// } +// +// [HttpPost("/{productName}/account/ma-passport/api/logout")] +// public IActionResult Logout(string productName, [FromBody] LogoutRequest request) +// { +// return Ok(new ResponseBase()); +// } +// } + diff --git a/SdkServer/Handlers/Sdk/MdkController.cs b/SdkServer/Handlers/Sdk/MdkController.cs new file mode 100644 index 0000000..3ba6b12 --- /dev/null +++ b/SdkServer/Handlers/Sdk/MdkController.cs @@ -0,0 +1,153 @@ +using KianaBH.Data.Models.Sdk; +using KianaBH.Database.Account; +using Microsoft.AspNetCore.Mvc; + +namespace KianaBH.SdkServer.Models.Sdk; + +[ApiController] +public class MdkController : Controller +{ + [HttpPost("/{productName}/mdk/shield/api/login")] + public async Task MdkShieldLogin(string productName, [FromBody] MdkShieldLoginRequest request) + { + var account = AccountData.GetAccountByUserName(request.Account!); + + // Make new account + if (account == null) + { + AccountData.CreateAccount(request.Account!, 0, request.Password!); + + account = AccountData.GetAccountByUserName(request.Account!)!; + } + + return Ok(new MdkShieldResponse + { + Data = new MdkShieldResponse.MdkShieldResponseData + { + Account = new MdkShieldAccountData + { + Uid = account.Uid.ToString(), + Token = account.GenerateComboToken(), + Name = account.Username, + Realname = account.Username, + IsEmailVerify = "0", + Email = $"{account!.Username}@neonteam.dev", + AreaCode = "**", + Country = "US", + }, + } + }); + } + + [HttpPost("/{productName}/mdk/shield/api/verify")] + public async Task MdkShieldVerify(string productName, [FromBody] MdkShieldVerifyRequest request) + { + int accountUid; + try + { + accountUid = int.Parse(request.Uid!); + } + catch + { + return Ok(new ResponseBase + { + Retcode = -101, + Success = false, + Message = "Account cache error" + }); + } + + var account = AccountData.GetAccountByUid(accountUid,true); + + if (account == null) + { + return Ok(new ResponseBase + { + Retcode = -101, + Success = false, + Message = "Account cache error" + }); + } + + if (account.ComboToken != request.Token) + { + return Ok(new ResponseBase + { + Retcode = -101, + Success = false, + Message = "For account safety, please log in again" + }); + } + + return Ok(new MdkShieldResponse + { + Data = new MdkShieldResponse.MdkShieldResponseData + { + Account = new MdkShieldAccountData + { + Uid = account.Uid.ToString(), + Token = account.ComboToken!, + Name = account.Username, + Realname = account.Username, + IsEmailVerify = "0", + Email = $"{account!.Username}@neonteam.dev", + AreaCode = "**", + Country = "US", + }, + } + }); + } + + [HttpGet("/{productName}/mdk/agreement/api/getAgreementInfos")] + public IActionResult MdkGetAgreementInfos(string productName) + { + return Ok(new ResponseBase + { + Data = new { marketing_agreements = Array.Empty() } + }); + } + + [HttpGet("/{productName}/mdk/shield/api/loadConfig")] + public IActionResult MdkLoadConfig(string productName) + { + return Ok(new ResponseBase + { + Data = new + { + id = 16, + game_key = productName, + client = "PC", + identity = "I_IDENTITY", + guest = false, + ignore_versions = "", + scene = "S_NORMAL", + name = "崩坏3rd-东南亚", + disable_regist = false, + enable_email_captcha = false, + thirdparty = Array.Empty(), + disable_mmt = false, + server_guest = false, + thirdparty_ignore = new { }, + enable_ps_bind_account = false, + thirdparty_login_configs = new { }, + initialize_firebase = false, + bbs_auth_login = false, + bbs_auth_login_ignore = Array.Empty(), + fetch_instance_id = false, + enable_flash_login = false, + enable_logo_18 = false, + logo_height = "0", + logo_width = "0", + enable_cx_bind_account = false, + firebase_blacklist_devices_switch = false, + firebase_blacklist_devices_version = 0, + hoyolab_auth_login = false, + hoyolab_auth_login_ignore = Array.Empty(), + hoyoplay_auth_login = true, + enable_douyin_flash_login = false, + enable_age_gate = false, + enable_age_gate_ignore = Array.Empty() + } + }); + } +} \ No newline at end of file diff --git a/SdkServer/Handlers/Sdk/RiskyController.cs b/SdkServer/Handlers/Sdk/RiskyController.cs new file mode 100644 index 0000000..f8338ab --- /dev/null +++ b/SdkServer/Handlers/Sdk/RiskyController.cs @@ -0,0 +1,14 @@ +using KianaBH.Data.Models.Sdk; +using Microsoft.AspNetCore.Mvc; + +namespace KianaBH.SdkServer.Models.Sdk; + +[ApiController] +public class RiskyController : ControllerBase +{ + [HttpPost("/account/risky/api/check")] + public IActionResult ComboGranter() + { + return Ok(new ResponseBase { Data = new { } }); + } +} \ No newline at end of file diff --git a/SdkServer/SdkServer.cs b/SdkServer/SdkServer.cs new file mode 100644 index 0000000..0105794 --- /dev/null +++ b/SdkServer/SdkServer.cs @@ -0,0 +1,53 @@ +using KianaBH.SdkServer.Utils; +using KianaBH.Util; +using Microsoft.AspNetCore; +using System.Text.Json; + +namespace KianaBH.SdkServer; + +public class SdkServer +{ + public static void Main(string[] args) + { + BuildWebHost(args).Start(); + } + + private static IWebHost BuildWebHost(string[] args) + { + var builder = WebHost.CreateDefaultBuilder(args) + .UseStartup() + .ConfigureLogging((_, logging) => { logging.ClearProviders(); }) + .UseUrls(ConfigManager.Config.HttpServer.GetBindDisplayAddress()); + + return builder.Build(); + } +} + +public class Startup +{ + public static void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + if (env.IsDevelopment()) app.UseDeveloperExceptionPage(); + + app.UseRouting(); + app.UseCors("AllowAll"); + app.UseAuthorization(); + app.UseMiddleware(); + app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); + } + + public static void ConfigureServices(IServiceCollection services) + { + services.AddCors(options => + { + options.AddPolicy("AllowAll", + builder => { builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader(); }); + }); + services.AddControllers() + .AddJsonOptions(options => + { + options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower; + }); + services.AddSingleton(_ => new Logger("HttpServer")); + } +} \ No newline at end of file diff --git a/SdkServer/SdkServer.csproj b/SdkServer/SdkServer.csproj new file mode 100644 index 0000000..5251453 --- /dev/null +++ b/SdkServer/SdkServer.csproj @@ -0,0 +1,32 @@ + + + + net9.0 + enable + false + enable + KianaBH.SdkServer + Library + KianaSdkServer + + + + + + + + + + + + + + + + + + + + + +