feat(protocol): 补齐容器命令与短命令别名机制

- Containers.kt 实现 lt/pt/zt/alias 四种布局,覆盖 ModelService 4 条容器命令
- 生成 ModelRegistry.ByModelId,供 pt 项按 modelId 展开
- 短命令:_setModelCommandAlias 解码后写入别名表,记录链可按别名继续解
- 下行注册补到 681 条;railgun-battle 400 帧复跑仍为 399/399 回编码一致
This commit is contained in:
TermiNexus committed 2026-10-21 00:13:12 +08:00
1 parent 7481dad24e
commit f3db51cf4b
48 files changed
+779 -18

No files matched your search

@@ -69,6 +69,7 @@ private class Stats {
var HeaderErrors = 0 var HeaderErrors = 0
var ShortCommands = 0 var ShortCommands = 0
var UnknownMethods = 0 var UnknownMethods = 0
val UnknownIds = ArrayList<Long>()
val Failures = ArrayList<String>() val Failures = ArrayList<String>()
} }
@@ -79,6 +80,8 @@ private fun RunOne(Path: String, Registry: Map<Long, ErasedCodec>, S: Stats) {
S.BadFrames++ S.BadFrames++
return return
} }
// 别名表按文件(同一次连接的一段抓包)维护;_setModelCommandAlias 解码后会填充
val Aliases = HashMap<Int, Pair<Long, Long>>()
for (F in Frames) { for (F in Frames) {
S.Frames++ S.Frames++
val Body = try { val Body = try {
@@ -88,10 +91,11 @@ private fun RunOne(Path: String, Registry: Map<Long, ErasedCodec>, S: Stats) {
if (S.Failures.size < 12) S.Failures.add("$Path 解压失败:${E.message}") if (S.Failures.size < 12) S.Failures.add("$Path 解压失败:${E.message}")
continue continue
} }
val R = SpaceFrame.DecodeBody(Body, Registry) val R = SpaceFrame.DecodeBody(Body, Registry, Aliases)
S.Records += R.Records.size S.Records += R.Records.size
S.ShortCommands += R.ShortCommandCount S.ShortCommands += R.ShortCommandCount
S.UnknownMethods += R.UnknownMethodIds.size S.UnknownMethods += R.UnknownMethodIds.size
for (Id in R.UnknownMethodIds) if (S.UnknownIds.size < 8) S.UnknownIds.add(Id)
val Err = R.Error val Err = R.Error
if (Err != null) { if (Err != null) {
if (Err.startsWith("记录头截断")) S.HeaderErrors++ if (Err.startsWith("记录头截断")) S.HeaderErrors++
@@ -161,6 +165,9 @@ fun main() {
println("回编码一致 ${S.RoundTripOk}|不一致 ${S.RoundTripBad}") println("回编码一致 ${S.RoundTripOk}|不一致 ${S.RoundTripBad}")
println("短命令 ${S.ShortCommands}|未知 methodId ${S.UnknownMethods}|记录头截断 ${S.HeaderErrors}|其它解码错误 ${S.DecodeErrors}|坏帧 ${S.BadFrames}") println("短命令 ${S.ShortCommands}|未知 methodId ${S.UnknownMethods}|记录头截断 ${S.HeaderErrors}|其它解码错误 ${S.DecodeErrors}|坏帧 ${S.BadFrames}")
println("下行注册 ${DownlinkRegistry.ByMethodId.size}|上行注册 ${UplinkRegistry.ByMethodId.size}") println("下行注册 ${DownlinkRegistry.ByMethodId.size}|上行注册 ${UplinkRegistry.ByMethodId.size}")
if (S.UnknownIds.isNotEmpty()) {
println("未知 methodId 样例:" + S.UnknownIds.joinToString(","))
}
if (S.Failures.isNotEmpty()) { if (S.Failures.isNotEmpty()) {
println("前若干失败:") println("前若干失败:")
for (F in S.Failures) println(" · $F") for (F in S.Failures) println(" · $F")
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 下行 1798193036336198760|module_10283 // 下行 1798193036336198760|module_10283
data class Down10283Xt8760( data class Down10283Xt8760(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 下行 3001647159444627062|module_1510 // 下行 3001647159444627062|module_1510
data class Down1510Gn7062( data class Down1510Gn7062(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 下行 1246109053620123806|module_25377 // 下行 1246109053620123806|module_25377
data class UidNotifierData3806( data class UidNotifierData3806(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 下行 8179162314198150518|module_29554 // 下行 8179162314198150518|module_29554
data class ZnM88693Lt0518( data class ZnM88693Lt0518(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 下行 1661920281800548495|module_31908 // 下行 1661920281800548495|module_31908
data class StatisticsTeamCC8495( data class StatisticsTeamCC8495(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 下行 246376163847464422|module_37504 // 下行 246376163847464422|module_37504
data class ClanUserCC4422( data class ClanUserCC4422(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 下行 73478093585084631|module_47243 // 下行 73478093585084631|module_47243
data class Down47243K4631( data class Down47243K4631(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 下行 314983404410424222|module_54199 // 下行 314983404410424222|module_54199
data class NewsShowingCC4222( data class NewsShowingCC4222(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 下行 28608551882350617|module_85183 // 下行 28608551882350617|module_85183
data class ModerationToolInteropCC0617( data class ModerationToolInteropCC0617(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 下行 7615142300796401818|module_85196 // 下行 7615142300796401818|module_85196
data class Down85196Ch1818( data class Down85196Ch1818(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 下行 756296912352966419|module_85667 // 下行 756296912352966419|module_85667
data class CaptchaCC6419( data class CaptchaCC6419(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 下行 2997538417603420748|module_88693 // 下行 2997538417603420748|module_88693
data class Down88693Pt0748( data class Down88693Pt0748(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 下行 1480424224583906965|module_89803 // 下行 1480424224583906965|module_89803
data class TeamBattleInfoCC6965( data class TeamBattleInfoCC6965(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// FacebookPaymentCC|module_01510 // FacebookPaymentCC|module_01510
data class FacebookPaymentCC( data class FacebookPaymentCC(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// AntiAddictionRealNameValidatorModelCC|module_10283 // AntiAddictionRealNameValidatorModelCC|module_10283
data class AntiAddictionRealNameValidatorModelCC( data class AntiAddictionRealNameValidatorModelCC(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// Atlas|module_16100 // Atlas|module_16100
data class Atlas( data class Atlas(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// codec module_24635::Ht|module_24635 // codec module_24635::Ht|module_24635
data class F24635Ht( data class F24635Ht(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// UserNotifierCC|module_25377 // UserNotifierCC|module_25377
data class UserNotifierCC( data class UserNotifierCC(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// BattleCreateParameters|module_31908 // BattleCreateParameters|module_31908
data class BattleCreateParameters( data class BattleCreateParameters(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// ClanFriendsCC|module_37504 // ClanFriendsCC|module_37504
data class ClanFriendsCC( data class ClanFriendsCC(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// at|module_45686 // at|module_45686
data class At( data class At(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// Hc|module_47243 // Hc|module_47243
data class Hc( data class Hc(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// ChannelSidAndName|module_54199 // ChannelSidAndName|module_54199
data class ChannelSidAndName( data class ChannelSidAndName(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// Lt|module_61860 // Lt|module_61860
data class Lt( data class Lt(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// SocialNetworkParametersCC|module_67222 // SocialNetworkParametersCC|module_67222
data class SocialNetworkParametersCC( data class SocialNetworkParametersCC(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// codec module_71105::ps|module_71105 // codec module_71105::ps|module_71105
class F71105Ps class F71105Ps
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// FlagBattleSFXCC|module_85183 // FlagBattleSFXCC|module_85183
data class FlagBattleSFXCC( data class FlagBattleSFXCC(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// AvailableForAllCC|module_85196 // AvailableForAllCC|module_85196
data class AvailableForAllCC( data class AvailableForAllCC(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// bu|module_85667 // bu|module_85667
data class Bu( data class Bu(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// E|module_85745 // E|module_85745
data class EM85745X( data class EM85745X(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// TankState|module_87072 // TankState|module_87072
class TankStateM87072T5 class TankStateM87072T5
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// FriendsCC|module_88693 // FriendsCC|module_88693
data class FriendsCC( data class FriendsCC(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// BattleInfoCC|module_89803 // BattleInfoCC|module_89803
data class BattleInfoCC( data class BattleInfoCC(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// DescriptionModelCC|module_99527 // DescriptionModelCC|module_99527
data class DescriptionModelCC( data class DescriptionModelCC(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
object DownlinkRegistry { object DownlinkRegistry {
val ByMethodId: Map<Long, ErasedCodec> = mapOf( val ByMethodId: Map<Long, ErasedCodec> = mapOf(
@@ -602,7 +606,6 @@ object DownlinkRegistry {
8164325377073720540L to F24635WtCodec, 8164325377073720540L to F24635WtCodec,
8171556272533651970L to F24635WtCodec, 8171556272533651970L to F24635WtCodec,
8171778085109430386L to UserNotifierCCCodec, 8171778085109430386L to UserNotifierCCCodec,
8179162314198150518L to ZnM88693Lt0518Codec,
8188577464406062306L to PaymentRequestVariableCodec, 8188577464406062306L to PaymentRequestVariableCodec,
8201829668071386439L to F24635WtCodec, 8201829668071386439L to F24635WtCodec,
8230065716229425028L to Down47243Jg5028Codec, 8230065716229425028L to Down47243Jg5028Codec,
@@ -677,7 +680,6 @@ object DownlinkRegistry {
8981778623033134120L to UserNotifierCCCodec, 8981778623033134120L to UserNotifierCCCodec,
8992960192854306015L to Down47243Iv6015Codec, 8992960192854306015L to Down47243Iv6015Codec,
9006618999845515525L to UserNotifierCCCodec, 9006618999845515525L to UserNotifierCCCodec,
9038756763225879447L to ClanOutgoingCCCodec,
9045061171239007459L to FacebookPaymentCCCodec, 9045061171239007459L to FacebookPaymentCCCodec,
9047763868814832699L to DemomanSfxCC2699Codec, 9047763868814832699L to DemomanSfxCC2699Codec,
9052673731308612681L to FacebookPaymentCCCodec, 9052673731308612681L to FacebookPaymentCCCodec,
@@ -693,6 +695,10 @@ object DownlinkRegistry {
9187558822227119790L to TCodec, 9187558822227119790L to TCodec,
9187558822227614985L to F24635WtCodec, 9187558822227614985L to F24635WtCodec,
9198230959529402310L to DonationAlertCC0661Codec, 9198230959529402310L to DonationAlertCC0661Codec,
9038756763225879447L to LtCodec,
7640916300855664666L to PtCodec,
3216143066888387731L to ZtCodec,
8179162314198150518L to AliasCodec,
) )
} }
@@ -1061,3 +1067,365 @@ object UplinkRegistry {
9221299643007466131L to TCodec, 9221299643007466131L to TCodec,
) )
} }
object ModelRegistry {
val ByModelId: Map<Long, ErasedCodec> = mapOf(
3000206000964343740L to FacebookPaymentCCCodec,
7245225301789542308L to SonyProductToItemIdMapCCCodec,
7838366943662257567L to AntiAddictionRealNameValidatorModelCCCodec,
6791702738669939115L to LoaderBackgroundModelCCCodec,
4065909569861626318L to ServerHaltEntranceCCCodec,
466296741210741928L to ExternalEntranceCCCodec,
9117714962311439886L to InviteEntranceCCCodec,
5457907984000701384L to NotificationsByCountryModelCCCodec,
513176302374590130L to CompositePartnerCCCodec,
8618289906968528240L to RegistrationModelCCCodec,
2474458842977623992L to RegistrationModelCCCodec,
7300500077035374704L to EntranceResourcesCCCodec,
6627517808336136295L to MaterialsCodec,
6403067749608679876L to UserNotifierCCCodec,
1850509145998626828L to UserActionsLoggerCCCodec,
258682513334072065L to RankNotifierDataCodec,
4255726087158005051L to UidNotifierDataCodec,
3527205014716342329L to RankInfoCodec,
216902005816818019L to SpectatorsModelCCCodec,
2085529474881905981L to StatisticsModelCCCodec,
787936358514072261L to StatisticsDMCCCodec,
2472262160204144219L to StatisticsDMCCCodec,
8115862559097350286L to ClanFriendsCCCodec,
7076997842038370798L to ClanMembersCCCodec,
3413041240691998182L to ClanIncomingCCCodec,
8762499949521628954L to ClanInfoCCCodec,
6048708024205731750L to ClanOutgoingCCCodec,
6882547137659234022L to ClanPermissionsCCCodec,
6768558945605412944L to ContainerCCCodec,
871785774630866042L to ContainerCCCodec,
6220257539261493170L to ContainerCCCodec,
2023935033691193766L to ContainerCCCodec,
5297988375509642470L to ContainerCCCodec,
4813819753066546054L to ContainerCCCodec,
649690707811173020L to ContainerCCCodec,
881620222948704326L to ContainerCCCodec,
8495889215182031654L to LicenseClanUserCCCodec,
7949064601138261608L to ClanNotifierDataCodec,
2547093126916834195L to ClanEditPriceCCCodec,
6247612331185889342L to ClanLoadingPanelCCCodec,
2606798949852309286L to ClanPanelNotificationCCCodec,
6042266992054445914L to ClanCreateCCCodec,
1115275516484037832L to ClanUserCCCodec,
1986821874929333245L to UserAccountRemovalModelCCCodec,
1298753286651761171L to F45686JtCodec,
7588919819099098108L to BattleInviteCCCodec,
2855626038259597130L to BattlePassPurchaseNotifierCCCodec,
7805766859473669177L to ChallengeClientCCCodec,
3349786357139026014L to TierCodec,
8237913720896985151L to TierItemCodec,
1987602940683756146L to StarsInfoCCCodec,
8677996546985988365L to StarsInfoCCCodec,
6514486185481319524L to CreatorTagCCCodec,
965113061940997187L to CreatorTagsCCCodec,
7341286352739641155L to DebtInfoCCCodec,
3395764563215792356L to DonationAlertCCCodec,
2108103923322474513L to DonationDataCodec,
8464700182634408374L to UserDroppableGoldSettingsCCCodec,
3503382027414679973L to TankHasGrenadeCCCodec,
5801057999588514016L to ResistancesCCCodec,
6820688895043695030L to GSWarningInfoModelCCCodec,
7822174537018024954L to GSWarningInfoModelCCCodec,
3152693668290247629L to IconsProviderCCCodec,
6726403008449784914L to KeysInfoCCCodec,
1417398836682569292L to PaymentCCCodec,
3031864034871022835L to PaymentLoaderCCCodec,
1009501302658881534L to PaymentLoaderCCCodec,
4748522118519647527L to PayModeCCCodec,
5952355564848177159L to AndroidPayCCCodec,
6169263949965533624L to AppleAppStoreCCCodec,
5156898764211343104L to AppleAppStoreCCCodec,
8083057704493864984L to BottomDescriptionCCCodec,
6144768774251946863L to BottomDescriptionCCCodec,
2951667042968033849L to JwCodec,
4905763060352702216L to PayPalPayModelCCCodec,
7860106430129114440L to RuStorePayCCCodec,
3158124838791669092L to PaymentButtonCCCodec,
213661725715747381L to PeriodicRewardCCCodec,
3620520388804703780L to PeriodicRewardCCCodec,
5780017129265868734L to PresentsSettingsCCCodec,
7307951074626252633L to PresentsSettingsCCCodec,
9028066746998427457L to PaidRenameCCCodec,
3179861497615625536L to UserEmailCCCodec,
1893408944113965505L to UserPropertiesCCCodec,
9006361281849290638L to UserPushNotificationSettingsModelCCCodec,
5895522515282663537L to UserAchievementCCCodec,
7295738902766942560L to MainQuestBattleProgressCodec,
701801920209410257L to MainQuestUserModelCCCodec,
7105110962241677955L to MainQuestUserModelCCCodec,
5167916989664044333L to ReferralEventUserModelCCCodec,
4038465370530850950L to QuestCategoriesModelCCCodec,
462434031489766566L to QuestCategoriesModelCCCodec,
6680653332718076818L to QuestCategoryStatisticCodec,
6966229709169193455L to RewardedVideosCCCodec,
8659306545527654916L to RubyInfoCCCodec,
2767408225195389970L to RubyInfoCCCodec,
1456475022890566348L to RulesUpdateShowingCCCodec,
3714146481313901316L to ShopCardCCCodec,
5172585086901412996L to ShopCardDiscountCCCodec,
5817682208733860186L to ShowcaseViewCCCodec,
1535852183188388854L to BattlePassPackageCCCodec,
889485403566576664L to KitBundleViewCCCodec,
4186634155763928467L to CoinPackageCCCodec,
6484910309342792771L to ContractShopCCCodec,
2789386002514731022L to CrystalPackageCCCodec,
7810820263988615290L to ShopItemAdditionalDescriptionCCCodec,
8458424802385151068L to ShopDiscountCCCodec,
6744857484209767976L to EmailRequiredCCCodec,
8853923292505519798L to RestrictionByPayModeCCCodec,
6091707767266836975L to ShopItemFeaturingCCCodec,
6899642532024252493L to GoldBoxPackageCCCodec,
806128205466208462L to GoldBoxPackageCCCodec,
6395651505226788750L to GoodsCCCodec,
7786222713213880898L to GoodsCCCodec,
7935550480449821024L to IndemnityCCCodec,
8629995567796005946L to KeysPackageCCCodec,
2103303438297476110L to KitPackageCCCodec,
3985896237583754666L to KitViewResourceCCCodec,
4440355418204561498L to KitViewResourceLocalizedCCCodec,
8755539534673619516L to LootBoxPackageCCCodec,
5004566952388327414L to LootboxAndPaintCCCodec,
6841476710481576918L to ShopItemOneTimePurchaseCCCodec,
7949842549440362353L to ShopItemOneTimePurchaseCCCodec,
9121776538033375678L to PaintPackageCCCodec,
7881181052304665842L to PaintPackageCCCodec,
5138794050233567698L to PremiumPackageCCCodec,
693025797100292228L to ShopItemCCCodec,
8048067679617995470L to ShopCategoryCCCodec,
4268132139764766386L to ShopItemCategoryCCCodec,
6192892501890483066L to SpecialKitPackageCCCodec,
1036461397335537760L to StarsPackageCCCodec,
2168011188167752629L to ContextTutorialModelCCCodec,
4782427880403395260L to LobbyTutorialModelCCCodec,
5256681735304582291L to TwitchAccountModelCCCodec,
2252704231082045810L to TwoStepVerificationModelCCCodec,
2080556892932195426L to UserCountryCCCodec,
1851605205665890036L to RewardInfoDataCodec,
8517963146836182364L to RewardsInfoCCCodec,
6071565290933648049L to ChatCCCodec,
891137447706578619L to ClanChatCCCodec,
868364325972433765L to NewsShowingCCCodec,
7970528904804811572L to OiCodec,
7267982595724632282L to MiM61860FrCodec,
6359692933626160397L to SocialNetworkParametersCCCodec,
7762582768388221832L to FlagBattleSFXCCCodec,
7401419333842694749L to BattlefieldCCCodec,
2101100305743734614L to BillboardCCCodec,
5958419804845264849L to BotNavigationCCCodec,
2464705242400585109L to FacilitySphericalZoneCCCodec,
5242494537362061802L to CommonFacilityCCCodec,
8109298281939714429L to BattleLockingCCCodec,
9172358609541951983L to MeteorStormCCCodec,
2057320715890332864L to BattleMineCCCodec,
8980131978880882207L to BattleStartDelayCCCodec,
5385894712778438726L to BattleChatCCCodec,
6445399806655453890L to InventoryCCCodec,
3364392936313775902L to TargetHighlightingCCCodec,
7874327015886119466L to JuggernautCCCodec,
5123834867188931684L to KillStreakCCCodec,
2648029304025111838L to CaptureTheFlagCCCodec,
2618111250571302204L to RugbyCCCodec,
2269636304551395302L to BallExplosionCCCodec,
6141842138930446750L to StatusEffectBattleCCCodec,
1475210252818583689L to BattleTutorialCCCodec,
9114375113924783411L to BattleTutorialCCCodec,
2145315487377727727L to BattlefieldBonusesCCCodec,
5215232257096838692L to BonusRegionsCCCodec,
3339617300033754420L to GoldBonusCCCodec,
510571369984788727L to BattleGoldBonusCCCodec,
8966480724474352542L to BonusCommonCCCodec,
3305376498517733218L to NotificationBonusCCCodec,
7484749077586587376L to BonusLightCCCodec,
5968651969329902265L to ColorAdjustCCCodec,
1661364280719338177L to DemomanSfxCCCodec,
8316165996190533130L to DroneIndicatorCCCodec,
4553925959338838726L to CrisisEffectCCCodec,
5207857306014573244L to XCCodec,
6424605984954645392L to TankEffectSFXCCCodec,
8166810800706377715L to ActiveAfterDeathCCCodec,
5779075235189237790L to EffectDescriptionCCCodec,
3157947224668485277L to EffectLevelCCCodec,
2078544146946392301L to GrenadeCCCodec,
9169475278259220023L to GrenadeCommonSFXCCCodec,
8082047509383246662L to BazookaExplosionCCCodec,
6729312304988255776L to FoamBazookaCCCodec,
2046257084008991040L to MagnetBazookaCCCodec,
2360640997000854496L to RepairGrenadeCCCodec,
3385611214280288146L to TeslaBazookaCCCodec,
7336962025965257296L to HeatTrapBazookaCCCodec,
4985274885530276227L to InventoryItemCCCodec,
2173939047300893281L to InventorySfxCCCodec,
4693095212037357021L to BattleMapCCCodec,
1688856467034284073L to MapBonusLightCCCodec,
4885574251230758729L to ModerationToolInteropCCCodec,
7894174029759745197L to ClassicParachuteCCCodec,
4778752313022424015L to RadarCCCodec,
3719295044981767592L to StatusEffectCCCodec,
8889030940127130747L to StatusEffectCCCodec,
5215458949573069793L to SuppliesTutorialModelCCCodec,
3535248640055401164L to TrackedChassisCCCodec,
9175894397021160571L to HullCommonCCCodec,
3966050316678844327L to TankRankUpEffectCCCodec,
6638615717159906637L to TankRankUpEffectCCCodec,
4875657231924274329L to SimpleArmorCCCodec,
7912514999422640843L to SimpleArmorCCCodec,
1090112775751802907L to ColorTransformCCCodec,
7968893209278436962L to ColorTransformCCCodec,
844040023906032853L to FreezeSFXCCCodec,
5745114335268581493L to IsisSFXCCCodec,
2368553937090306741L to RailgunShootSFXCCCodec,
5257069799854314780L to RicochetSFXCCCodec,
9094843804380507187L to ShaftShootSFXCCCodec,
1748249573394295263L to SmokyShootSFXCCCodec,
6623392760536649465L to TeslaShootSFXCCCodec,
8191021443726008799L to ThunderShootSFXCCCodec,
7692437363459179503L to TwinsShootSFXCCCodec,
6641568549549264883L to HullSmokeCCCodec,
2638139599268780529L to AimAssistCCCodec,
7883218652624289568L to VerticalAnglesCCCodec,
1237976996871886061L to WeaponCommonCCCodec,
4444006910106229297L to FlameThrowerCCCodec,
9105939015977236209L to FreezeCCCodec,
1782954502314814229L to GaussCCCodec,
3075844226211230705L to GaussSFXCCCodec,
7068168268219022867L to IsisCCCodec,
5194655544597440038L to LaserPointerCCCodec,
7266201540452328992L to LaserPointerCCCodec,
1663344340563853103L to RailgunCCCodec,
1092307613749405757L to RicochetCCCodec,
1130027771466355435L to ScorpioCCCodec,
313670832122918648L to ScorpioSfxCCCodec,
732152133982227177L to ShaftCCCodec,
7700337090161867199L to ShotCCCodec,
2172139419072369403L to SmokyCCCodec,
2544465990449691855L to SplashCCCodec,
2235965200289058033L to SplashCCCodec,
8345039896357067195L to StreamWeaponCCCodec,
2057487026153364495L to StreamWeaponCCCodec,
6855550629220038001L to TerminatorCCCodec,
6210980129845088505L to TerminatorSFXCCCodec,
573691036321759779L to TeslaCCCodec,
8212033390179430143L to TsunamiCCCodec,
5604117679922858821L to TsunamiShootSFXCCCodec,
2803166101624878775L to RotatingTurretCCCodec,
8384919755051909877L to TwinsCCCodec,
6384655869260380731L to WeaponWeakeningCCCodec,
6642061974307112160L to ArtilleryCCCodec,
8754295211549969729L to ArtilleryElevatingBarrelCCCodec,
4499337062875496540L to ArtillerySfxCCCodec,
7235761383767133268L to BonkWeaponCCCodec,
7022952987062772048L to MachineGunCCCodec,
6596471917520283782L to MachineGunSFXCCCodec,
8784137528831277530L to MachineGunSFXCCCodec,
6528115483341986769L to RocketLauncherCCCodec,
4045733714401632272L to RocketLauncherCCCodec,
770654516236272028L to ShotgunSFXCCCodec,
5867914731324680416L to ShotgunShotCCCodec,
2660691061343351669L to TeamLightCCCodec,
171896995500198357L to TeamLightCCCodec,
1500120709087433677L to TeamLightColorParamsCodec,
6455142242556985012L to UltimateCCCodec,
7899544742191273818L to AresUltimateProjectileCCCodec,
6210079079280471693L to CrusaderEffectCCCodec,
3907559303616283277L to CrusaderUltimateCCCodec,
6590506277285284269L to DictatorUltimateCCCodec,
6668012086939621459L to HopperUltimateCCCodec,
8738779591519195597L to HornetUltimateCCCodec,
7214131179703676563L to HornetUltimateCCCodec,
920233600808088339L to BattleUltimateRadarCCCodec,
4406836274649365203L to HunterUltimateCCCodec,
7257138969919985658L to TankStunCCCodec,
887431150717814637L to JuggernautUltimateCCCodec,
1997576349992148053L to MammothUltimateCCCodec,
4658911146867546991L to PaladinAuraVisualCCCodec,
4388979890807820236L to TankSuperchargeCCCodec,
973781565169577734L to TankSuperchargeCCCodec,
7551602984488625261L to VikingUltimateCCCodec,
3137250957878113145L to WaspUltimateBombCCCodec,
3248199557469599724L to NuclearRechargeCCCodec,
5055746953759097716L to BossStateCCCodec,
3317051239895575278L to TankConfigurationCCCodec,
1838248562944554574L to TankCritCCCodec,
1767155986856291742L to TankPointersCCCodec,
5543162332469864498L to TankInfoCCCodec,
260111248825415414L to BattleBotControlCCCodec,
2560105521800470759L to RemoteTankStateUpdatingCCCodec,
4206032257972775630L to TankResistanceCodec,
7127632667958387441L to TankResistancesCCCodec,
2104999573658810427L to TankSpawnerCCCodec,
7163171834328288344L to SpeedCharacteristicsCCCodec,
2271787261806799336L to SuicideCCCodec,
2150802556932617880L to TankCCCodec,
6589716392600418185L to AvailableForAllCCCodec,
9168562037264832365L to PassToShopCCCodec,
3122964582367261689L to TemperatureCCCodec,
3730185794267514852L to GaragePreviewModelCCCodec,
2769268442698022653L to BuyableCCCodec,
2114179554921095892L to ItemCategoryCCCodec,
120961863156462946L to CountableItemCCCodec,
7391892068905080676L to DelayMountCategoryCCCodec,
7109632754421804521L to DelayMountCategoryCCCodec,
7640081207058999117L to DevicePropertiesCCCodec,
6111098822553419499L to PaCodec,
4692610703461978415L to ProAbonementRankDiscountCCCodec,
6430862429652735997L to EmissionColorCCCodec,
1534251830977989099L to EmissionColorCCCodec,
1865478986390468300L to GroupedCCCodec,
658797348514407988L to ItemModelCCCodec,
3438505192580052999L to ItemModelCCCodec,
7472019549033825785L to Item3DCCCodec,
5219530271535770658L to GarageKitCCCodec,
4309274349580876968L to ItemSaleByKitCCCodec,
2494628067134376039L to ModificationCCCodec,
4245000165576407500L to Object3DSCCCodec,
1139677084511624062L to PremiumItemCCCodec,
8153652471440648359L to RelativePropertiesCCCodec,
5724298620794499870L to MountedResistancesCCCodec,
6628468327090974523L to ResistanceBackgroundCCCodec,
712090483864327130L to HullSkinModelCCCodec,
5738770490413536673L to TankPartSkinModelCCCodec,
481504601146841174L to TankPartSkinModelCCCodec,
4234781414353452329L to TurretSkinModelCCCodec,
3893855999545616334L to TemporaryItemCCCodec,
4743567393313674375L to UpgradeParamsCCCodec,
6117306895090150422L to ItemViewCategoryCCCodec,
4817031001612283794L to ProtectionSlotsCCCodec,
2433120830275396692L to PresentsCCCodec,
5988756521593027564L to DwCodec,
7563487786199453443L to OverdriveDescriptionCCCodec,
149643551432886459L to TurretMechanismCCCodec,
905970599512839002L to MountedSkinCCCodec,
834829861153964627L to MountedSkinCCCodec,
1164458258646872337L to AvailableShotSkinsCCCodec,
7175193612424807833L to VuCodec,
4068618447512888231L to ColoringCCCodec,
5255782026414758079L to BsCodec,
1259328549938381181L to VoCodec,
7272122855372520854L to FriendsCCCodec,
7286757952195114814L to UserContainerCCCodec,
433350986715773690L to UserContainerCCCodec,
6666386288157781248L to UserContainerCCCodec,
6165842138816273510L to UserContainerCCCodec,
4806152428066355053L to ContainersInfoCCCodec,
2396069765491056127L to UserReportsModelCCCodec,
5111180848188020047L to NotificationEnabledCCCodec,
821863604528384663L to ZnM88693LtCodec,
2913056477936031270L to BattleInfoCCCodec,
994751080759166914L to BattleDMInfoCCCodec,
6282101613166902704L to BattleParamInfoCCCodec,
6652129902375288094L to TeamBattleInfoCCCodec,
7185560430911351668L to FormatBattleOptionsCCCodec,
5412538083071671358L to MapInfoCCCodec,
104562115846147942L to MatchmakingGroupCCCodec,
5932347630672640435L to MatchmakingLayoutCCCodec,
3935107155251354407L to DescriptionModelCCCodec,
1472449384337994019L to DescriptionModelCCCodec,
8032192927455575509L to TimePeriodModelCCCodec,
)
}
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 上行 108605496059850042|module_10283 // 上行 108605496059850042|module_10283
data class Up10283On( data class Up10283On(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 上行 2522279596878141909|module_25377 // 上行 2522279596878141909|module_25377
data class Up25377Mn( data class Up25377Mn(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 上行 1923257295373322726|module_37504 // 上行 1923257295373322726|module_37504
data class Up37504Mi( data class Up37504Mi(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 上行 545646835775802391|module_47243 // 上行 545646835775802391|module_47243
data class Up47243Xd( data class Up47243Xd(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 上行 3122753540375943279|module_54199 // 上行 3122753540375943279|module_54199
data class Up54199Nn( data class Up54199Nn(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 上行 242594788112599303|module_85183 // 上行 242594788112599303|module_85183
data class Up85183GL( data class Up85183GL(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 上行 3992138268563757275|module_85196 // 上行 3992138268563757275|module_85196
data class Up85196A( data class Up85196A(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 上行 3312562673813486434|module_85667 // 上行 3312562673813486434|module_85667
data class Up85667Hu( data class Up85667Hu(
@@ -11,6 +11,10 @@ import Net.Wire.ModelCodec
import Net.Wire.Wire import Net.Wire.Wire
import Net.Wire.ErasedCodec import Net.Wire.ErasedCodec
import Net.Protocol.TankStateCodec import Net.Protocol.TankStateCodec
import Net.Protocol.LtCodec
import Net.Protocol.PtCodec
import Net.Protocol.ZtCodec
import Net.Protocol.AliasCodec
// 上行 1389350490037720721|module_89803 // 上行 1389350490037720721|module_89803
data class Up89803Kr( data class Up89803Kr(
@@ -0,0 +1,164 @@
// Containers.kt —— ModelService 4 条容器命令的真实布局
//
// 依据(逐字节标定过):3DTank/tools/server/container.js + module_29554.js 的 U.u7j:
// _unloadObjects (9038756763225879447) → lt:varint 个数 + 个数 × i64
// _loadObjectsData (7640916300855664666) → pt:i32 对象数 + 对象表 + i32 项数 + 项表
// _loadDependencies (3216143066888387731) → zt:i32 X + i32 批次数 + 批次 + i32 项数 + 项表
// _setModelCommandAlias (8179162314198150518) → i32 alias + i64 + i64
//
// pt 的每一项:i64 id;id == 0 → 再读 i64 当值;否则 id 是 modelId,就地展开该模型的字段。
// modelId → codec 由生成的 ModelRegistry.ByModelId 提供。
package Net.Protocol
import Core.ByteReader
import Core.ByteWriter
import Core.NullmapCursor
import Core.NullmapWriter
import Core.ProtocolException
import Net.Generated.ModelRegistry
import Net.Wire.ModelCodec
// ---------------- lt ----------------
class LtPayload(val Ids: List<Long>)
object LtCodec : ModelCodec<LtPayload> {
override fun Decode(R: ByteReader, N: NullmapCursor): LtPayload {
val Count = R.ReadVarint()
if (Count < 0 || Count > 1 shl 20) throw ProtocolException("lt 个数不合法:$Count")
val Ids = ArrayList<Long>(Count)
repeat(Count) { Ids.add(R.ReadLong()) }
return LtPayload(Ids)
}
override fun Encode(W: ByteWriter, N: NullmapWriter, V: LtPayload) {
W.WriteVarint(V.Ids.size)
for (Id in V.Ids) W.WriteLong(Id)
}
}
// ---------------- pt ----------------
class PtObject(val ObjectId: Long, val GameTypeId: Long)
class PtItem(val Id: Long, val Value: Any)
class PtPayload(val Objects: List<PtObject>, val Items: List<PtItem>)
object PtCodec : ModelCodec<PtPayload> {
override fun Decode(R: ByteReader, N: NullmapCursor): PtPayload {
val CObjects = R.ReadInt()
if (CObjects < 0 || CObjects > 1 shl 20) throw ProtocolException("pt 对象数不合法:$CObjects")
val Objects = ArrayList<PtObject>(CObjects)
repeat(CObjects) { Objects.add(PtObject(R.ReadLong(), R.ReadLong())) }
val CItems = R.ReadInt()
if (CItems < 0 || CItems > 1 shl 20) throw ProtocolException("pt 项数不合法:$CItems")
val Items = ArrayList<PtItem>(CItems)
repeat(CItems) {
val Id = R.ReadLong()
if (Id == 0L) {
Items.add(PtItem(Id, R.ReadLong()))
} else {
val Codec = ModelRegistry.ByModelId[Id]
?: throw ProtocolException("pt 项 modelId=$Id 没有 codec")
Items.add(PtItem(Id, Codec.DecodeAny(R, N)))
}
}
return PtPayload(Objects, Items)
}
override fun Encode(W: ByteWriter, N: NullmapWriter, V: PtPayload) {
W.WriteInt(V.Objects.size)
for (O in V.Objects) {
W.WriteLong(O.ObjectId)
W.WriteLong(O.GameTypeId)
}
W.WriteInt(V.Items.size)
for (Item in V.Items) {
W.WriteLong(Item.Id)
if (Item.Id == 0L) {
W.WriteLong(Item.Value as Long)
} else {
val Codec = ModelRegistry.ByModelId[Item.Id]
?: throw ProtocolException("pt 项 modelId=${Item.Id} 没有 codec")
Codec.EncodeAny(W, N, Item.Value)
}
}
}
}
// ---------------- zt ----------------
class ZtBatch(val ObjectId: Long, val ModelIds: List<Long>)
class ZtItem(
val R: Long,
val E: Short,
val U: Short,
val S: Long,
val O: Byte,
val Skipped: List<Long>,
)
class ZtPayload(val X: Int, val Batches: List<ZtBatch>, val Items: List<ZtItem>)
object ZtCodec : ModelCodec<ZtPayload> {
override fun Decode(R: ByteReader, N: NullmapCursor): ZtPayload {
val X = R.ReadInt()
val CBatches = R.ReadInt()
if (CBatches < 0 || CBatches > 1 shl 20) throw ProtocolException("zt 批次数不合法:$CBatches")
val Batches = ArrayList<ZtBatch>(CBatches)
repeat(CBatches) {
val ObjectId = R.ReadLong()
val Count = R.ReadInt()
if (Count < 0 || Count > 1 shl 20) throw ProtocolException("zt 批次 modelId 数不合法:$Count")
val Ids = ArrayList<Long>(Count)
repeat(Count) { Ids.add(R.ReadLong()) }
Batches.add(ZtBatch(ObjectId, Ids))
}
val CItems = R.ReadInt()
if (CItems < 0 || CItems > 1 shl 20) throw ProtocolException("zt 项数不合法:$CItems")
val Items = ArrayList<ZtItem>(CItems)
repeat(CItems) {
val R0 = R.ReadLong()
val E = R.ReadShort()
val U = R.ReadShort()
val S = R.ReadLong()
val O = R.ReadByte()
val Skip = R.ReadByte().toInt()
if (Skip < 0) throw ProtocolException("zt 跳过个数不合法:$Skip")
val Skipped = ArrayList<Long>(Skip)
repeat(Skip) { Skipped.add(R.ReadLong()) }
Items.add(ZtItem(R0, E, U, S, O, Skipped))
}
return ZtPayload(X, Batches, Items)
}
override fun Encode(W: ByteWriter, N: NullmapWriter, V: ZtPayload) {
W.WriteInt(V.X)
W.WriteInt(V.Batches.size)
for (B in V.Batches) {
W.WriteLong(B.ObjectId)
W.WriteInt(B.ModelIds.size)
for (Id in B.ModelIds) W.WriteLong(Id)
}
W.WriteInt(V.Items.size)
for (Item in V.Items) {
W.WriteLong(Item.R)
W.WriteShort(Item.E.toInt())
W.WriteShort(Item.U.toInt())
W.WriteLong(Item.S)
W.WriteByte(Item.O.toInt())
W.WriteByte(Item.Skipped.size)
for (Id in Item.Skipped) W.WriteLong(Id)
}
}
}
// ---------------- alias ----------------
class AliasPayload(val Alias: Int, val A: Long, val B: Long)
object AliasCodec : ModelCodec<AliasPayload> {
override fun Decode(R: ByteReader, N: NullmapCursor): AliasPayload =
AliasPayload(R.ReadInt(), R.ReadLong(), R.ReadLong())
override fun Encode(W: ByteWriter, N: NullmapWriter, V: AliasPayload) {
W.WriteInt(V.Alias)
W.WriteLong(V.A)
W.WriteLong(V.B)
}
}
@@ -33,7 +33,14 @@ class DecodeBodyResult(
object SpaceFrame { object SpaceFrame {
fun DecodeBody(Body: ByteArray, Registry: Map<Long, ErasedCodec>): DecodeBodyResult { // _setModelCommandAlias 的 methodId:解码到它时把「别名 → (objectId, methodId)」写进会话表
private const val AliasMethodId = 8179162314198150518L
fun DecodeBody(
Body: ByteArray,
Registry: Map<Long, ErasedCodec>,
Aliases: MutableMap<Int, Pair<Long, Long>>? = null,
): DecodeBodyResult {
val Records = ArrayList<DecodedRecord>() val Records = ArrayList<DecodedRecord>()
val Unknown = ArrayList<Long>() val Unknown = ArrayList<Long>()
var ShortCount = 0 var ShortCount = 0
@@ -45,19 +52,26 @@ object SpaceFrame {
val R = ByteReader(Body, NullmapSize) val R = ByteReader(Body, NullmapSize)
while (R.Remaining > 0) { while (R.Remaining > 0) {
val Form = Cursor.ReadBit() val Form = Cursor.ReadBit()
if (Form) {
// 短命令:后面还有 1 字节别名 + 未知长度负载,S2 不猜,停在第一条短命令
ShortCount++
break
}
val ObjectId: Long val ObjectId: Long
val MethodId: Long val MethodId: Long
try { if (Form) {
ObjectId = R.ReadLong() // 短命令:1 字节别名 → 会话别名表;表里没有就如实停下(不猜)
MethodId = R.ReadLong() val Alias = R.ReadByte().toInt() and 0xff
} catch (E: Throwable) { val Entry = Aliases?.get(Alias)
// 不是空间帧(常见于入口/登录帧),或帧体在记录头处截断:如实中止 if (Entry == null) {
return DecodeBodyResult(Records, ShortCount, Unknown, "记录头截断:${E.message}") ShortCount++
break
}
ObjectId = Entry.first
MethodId = Entry.second
} else {
try {
ObjectId = R.ReadLong()
MethodId = R.ReadLong()
} catch (E: Throwable) {
// 不是空间帧(常见于入口/登录帧),或帧体在记录头处截断:如实中止
return DecodeBodyResult(Records, ShortCount, Unknown, "记录头截断:${E.message}")
}
} }
val Codec = Registry[MethodId] val Codec = Registry[MethodId]
if (Codec == null) { if (Codec == null) {
@@ -81,6 +95,9 @@ object SpaceFrame {
"methodId=$MethodId 回编码失败:${E.message}") "methodId=$MethodId 回编码失败:${E.message}")
} }
Records.add(DecodedRecord(ObjectId, MethodId, Value, Payload, W.ToByteArray())) Records.add(DecodedRecord(ObjectId, MethodId, Value, Payload, W.ToByteArray()))
if (MethodId == AliasMethodId && Value is AliasPayload) {
Aliases?.set(Value.Alias and 0xff, Value.A to Value.B)
}
} }
return DecodeBodyResult(Records, ShortCount, Unknown, null) return DecodeBodyResult(Records, ShortCount, Unknown, null)
} }
+36 -3
View File
@@ -28,6 +28,15 @@ OUT = ROOT / "net" / "src" / "jsMain" / "kotlin" / "Net" / "Generated"
# 这些 codec 的线形不能由字段表直译,改由 Net/Protocol 下手写(数据类仍由生成器产出)。 # 这些 codec 的线形不能由字段表直译,改由 Net/Protocol 下手写(数据类仍由生成器产出)。
# module_85183::jq = TankState 的「字段表版」;真正上线的是 module_87072 注册的 T5(23 字节位打包) # module_85183::jq = TankState 的「字段表版」;真正上线的是 module_87072 注册的 T5(23 字节位打包)
OVERLAY_CODECS = {"module_85183::jq"} OVERLAY_CODECS = {"module_85183::jq"}
OVERLAY_NAMES = {"module_85183::jq": "TankStateCodec"}
# ModelService 的 4 条容器命令:布局由 Net/Protocol/Containers.kt 手写,直接覆盖注册表
REGISTRY_OVERRIDES = {
"9038756763225879447": "LtCodec", # _unloadObjects
"7640916300855664666": "PtCodec", # _loadObjectsData
"3216143066888387731": "ZtCodec", # _loadDependencies
"8179162314198150518": "AliasCodec", # _setModelCommandAlias
}
PRIMS = { PRIMS = {
"bool": ("Boolean", "R.ReadBool()", "W.WriteBool({})"), "bool": ("Boolean", "R.ReadBool()", "W.WriteBool({})"),
@@ -349,7 +358,8 @@ def Main():
"import Core.ByteReader\nimport Core.ByteWriter\nimport Core.NullmapCursor\n" "import Core.ByteReader\nimport Core.ByteWriter\nimport Core.NullmapCursor\n"
"import Core.NullmapWriter\nimport Core.Vector3\n" "import Core.NullmapWriter\nimport Core.Vector3\n"
"import Net.Wire.ModelCodec\nimport Net.Wire.Wire\nimport Net.Wire.ErasedCodec\n" "import Net.Wire.ModelCodec\nimport Net.Wire.Wire\nimport Net.Wire.ErasedCodec\n"
"import Net.Protocol.TankStateCodec\n\n") "import Net.Protocol.TankStateCodec\nimport Net.Protocol.LtCodec\n"
"import Net.Protocol.PtCodec\nimport Net.Protocol.ZtCodec\nimport Net.Protocol.AliasCodec\n\n")
def EmitClass(Def: ClassDef, Nodes): def EmitClass(Def: ClassDef, Nodes):
Names = UniqueFieldNames(Def.Fields) Names = UniqueFieldNames(Def.Fields)
@@ -409,17 +419,40 @@ def Main():
Lines = [f"object {Title} {{", " val ByMethodId: Map<Long, ErasedCodec> = mapOf("] Lines = [f"object {Title} {{", " val ByMethodId: Map<Long, ErasedCodec> = mapOf("]
Seen = set() Seen = set()
for Mid, Name in Entries: for Mid, Name in Entries:
if Name not in Emitted or Mid in Seen: if Name not in Emitted or Mid in Seen or Mid in REGISTRY_OVERRIDES:
continue continue
Seen.add(Mid) Seen.add(Mid)
Lines.append(f" {Mid}L to {Name}Codec,") Lines.append(f" {Mid}L to {Name}Codec,")
if Title == "DownlinkRegistry":
for Mid, Expr in REGISTRY_OVERRIDES.items():
Lines.append(f" {Mid}L to {Expr},")
Lines.append(" )")
Lines.append("}")
return Lines
def RegistryWithModelIds(ResolvedMap, NameMap):
Lines = ["object ModelRegistry {", " val ByModelId: Map<Long, ErasedCodec> = mapOf("]
Seen = set()
for Key, (Def, Nodes) in ResolvedMap.items():
C = Codecs[Key]
Expr = OVERLAY_NAMES.get(Key, NameMap[Key] + "Codec")
Ids = []
if C.get("ModelId"):
Ids.append(str(C["ModelId"]))
Ids += [str(M) for M in (C.get("ModelIds") or [])]
for Mid in Ids:
if Mid in Seen:
continue
Seen.add(Mid)
Lines.append(f" {Mid}L to {Expr},")
Lines.append(" )") Lines.append(" )")
Lines.append("}") Lines.append("}")
return Lines return Lines
(OUT / "Registry.kt").write_text( (OUT / "Registry.kt").write_text(
Header + "\n".join(Registry(DownRegistry, "DownlinkRegistry")) + "\n\n" + Header + "\n".join(Registry(DownRegistry, "DownlinkRegistry")) + "\n\n" +
"\n".join(Registry(UpRegistry, "UplinkRegistry")) + "\n", "utf-8") "\n".join(Registry(UpRegistry, "UplinkRegistry")) + "\n\n" +
"\n".join(RegistryWithModelIds(Resolved, CodecKeyToName)) + "\n", "utf-8")
# ---------- 6. 元数据 ---------- # ---------- 6. 元数据 ----------
def MetaEntry(Def: ClassDef, Nodes): def MetaEntry(Def: ClassDef, Nodes):