commit 6a03b39f07df98e1970f3d1cfd892af12dc8ce69 Author: Naruse <71993948+DevilProMT@users.noreply.github.com> Date: Sat Jun 14 11:15:32 2025 +0800 Init enter game 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 0000000..c518cc2 Binary files /dev/null and b/KianaBH/Source/Kiana.ico differ 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 + + + + + + + + + + + + + + + + + + + + + +