王刚 3 жил өмнө
parent
commit
c9107b034b

+ 3 - 2
CSserver/PBReferens/DataBuff.cs

@@ -34,10 +34,10 @@ namespace ProtoDataBuff
         {
             byte[] _tmpBuff = new byte[_buffLength];
             byte[] _tmpBuffLength = BitConverter.GetBytes(_buffLength);
-            byte[] _tmpDataLenght = BitConverter.GetBytes((UInt16)_protocallType);
+            byte[] _tmpDataType = BitConverter.GetBytes((UInt16)_protocallType);
 
             Array.Copy(_tmpBuffLength, 0, _tmpBuff, 0, Constants.HEAD_DATA_LEN);//缓存总长度
-            Array.Copy(_tmpDataLenght, 0, _tmpBuff, Constants.HEAD_DATA_LEN, Constants.HEAD_TYPE_LEN);//协议类型
+            Array.Copy(_tmpDataType, 0, _tmpBuff, Constants.HEAD_DATA_LEN, Constants.HEAD_TYPE_LEN);//协议类型
             Array.Copy(_data, 0, _tmpBuff, Constants.HEAD_LEN, _dataLength);//协议数据
 
             return _tmpBuff;
@@ -73,6 +73,7 @@ namespace ProtoDataBuff
         private int _dataLength;
         private UInt16 _protocalType;
 
+
         /// <summary>
         /// 构造函数
         /// </summary>

+ 2 - 2
CSserver/PBReferens/PBReferens.csproj

@@ -1,11 +1,11 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
     <TargetFramework>net6.0</TargetFramework>
   </PropertyGroup>
 
   <Target Name="PreBuild" BeforeTargets="PreBuildEvent">
-    <Exec Command="protoc --csharp_out=pbcs pb/*.proto" />
+    <Exec Command="protoc --csharp_out=pbcs pb/*.proto&#xD;&#xA;protoc --go_out=pbgo pb/*.proto" />
   </Target>
 
   <ItemGroup>

+ 1 - 0
CSserver/PBReferens/pb/ErrCode.proto

@@ -1,6 +1,7 @@
 syntax = "proto3";
 
  // package BossServer; //暂时没有定 命名空间
+ option go_package = "/pb";
 
 enum ErrCode {
   ok = 0;

+ 2 - 0
CSserver/PBReferens/pb/MsgTypeEnum.proto

@@ -1,7 +1,9 @@
 syntax = "proto3";
 
  // package BossServer; //暂时没有定 命名空间
+ option go_package = "/pb";
 
+ // 注意不要超过65535(在socket传输时只分配了2字节 -gwang)
 enum eProtocalCommand {
   // 无操作
   noop = 0;

+ 1 - 0
CSserver/PBReferens/pb/MultiDup.proto

@@ -1,6 +1,7 @@
 syntax = "proto3";
 // 多人副本
 package MultiDup;
+option go_package = "pb/MultiDup";
  
 //
 // 进入大厅(注册下自己的uid)

+ 1 - 0
CSserver/PBReferens/pb/chat.proto

@@ -1,6 +1,7 @@
 syntax = "proto3";
 
 package Chat;
+option go_package = "pb/Chat";
  
 
 // 频道

+ 1 - 1
CSserver/PBReferens/pb/fight.proto

@@ -2,7 +2,7 @@
 syntax = "proto3";
 
 package BossServer;
- 
+option go_package = "pb/BossServer"; 
 
 //上报伤害输出
 message CSFightReportDamage

+ 1 - 1
CSserver/PBReferens/pbcs/Chat.cs

@@ -32,7 +32,7 @@ namespace Chat {
             "d01zZxImCgtGcm9tQ2hhbm5lbBgBIAEoDjIRLkNoYXQuQ2hhdENoYW5uZWwS",
             "CwoDTXNnGAIgASgJEhIKClNlbmRlck5hbWUYAyABKAkSEQoJU2VuZGVyVWlk",
             "GAQgASgJKjsKC0NoYXRDaGFubmVsEgoKBlN5c3RlbRAAEgkKBVdvcmxkEAES",
-            "CQoFR3VpbGQQAhIKCgZTaW5nbGUQA2IGcHJvdG8z"));
+            "CQoFR3VpbGQQAhIKCgZTaW5nbGUQA0IJWgdwYi9DaGF0YgZwcm90bzM="));
       descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
           new pbr::FileDescriptor[] { },
           new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Chat.ChatChannel), }, new pbr::GeneratedClrTypeInfo[] {

+ 1 - 1
CSserver/PBReferens/pbcs/ErrCode.cs

@@ -21,7 +21,7 @@ public static partial class ErrCodeReflection {
     byte[] descriptorData = global::System.Convert.FromBase64String(
         string.Concat(
           "ChBwYi9FcnJDb2RlLnByb3RvKiMKB0VyckNvZGUSBgoCb2sQABIQCgxPcE5v",
-          "dEFsbG93ZWQQAWIGcHJvdG8z"));
+          "dEFsbG93ZWQQAUIFWgMvcGJiBnByb3RvMw=="));
     descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
         new pbr::FileDescriptor[] { },
         new pbr::GeneratedClrTypeInfo(new[] {typeof(global::ErrCode), }, null));

+ 1 - 1
CSserver/PBReferens/pbcs/Fight.cs

@@ -31,7 +31,7 @@ namespace BossServer {
             "KAUSEQoJQ291bnREb3duGAQgASgFIkoKElNDVXBkYXRlUHJvcGVydGllcxIO",
             "CgZCb3NzSHAYASABKAUSEQoJQm9zc01heEhwGAIgASgFEhEKCUNvdW50RG93",
             "bhgDIAEoBSIvCgpTQ0dhbWVPdmVyEg4KBkJvc3NIcBgBIAEoBRIRCglDb3Vu",
-            "dERvd24YAiABKAViBnByb3RvMw=="));
+            "dERvd24YAiABKAVCD1oNcGIvQm9zc1NlcnZlcmIGcHJvdG8z"));
       descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
           new pbr::FileDescriptor[] { },
           new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {

+ 1 - 1
CSserver/PBReferens/pbcs/MsgTypeEnum.cs

@@ -37,7 +37,7 @@ public static partial class MsgTypeEnumReflection {
           "gwESEQoMU0NfQlRfU3RhdHVzEIQBEhIKDVNDX0JUX1Bvc3Rpb24QhQESFAoP",
           "U0NfQlRfQnJvYWRDYXN0EIYBEhUKEFNDX0JUX1Blb3BsZUxpc3QQhwESGAoT",
           "U1NfQ3JlYXRlQmF0dGxlUm9vbRCtAhIaChVTU19DcmVhdGVCYXR0bGVSb29t",
-          "T2sQrgJiBnByb3RvMw=="));
+          "T2sQrgJCBVoDL3BiYgZwcm90bzM="));
     descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
         new pbr::FileDescriptor[] { },
         new pbr::GeneratedClrTypeInfo(new[] {typeof(global::eProtocalCommand), }, null));

+ 1 - 1
CSserver/PBReferens/pbcs/MultiDup.cs

@@ -62,7 +62,7 @@ namespace MultiDup {
             "Q19CVF9PdmVyEg4KBlpvbmVpZBgBIAEoBRIRCglTZW5kZXJVaWQYAiABKAkS",
             "CwoDTXNnGAMgASgJIjsKFVNTX0NyZWF0ZUJhdHRsZVNlcnZlchIOCgZSb29t",
             "SWQYASABKAUSEgoKUGxheWVyVWlkcxgCIAMoCSIZChdTU19DcmVhdGVCYXR0",
-            "bGVTZXJ2ZXJPS2IGcHJvdG8z"));
+            "bGVTZXJ2ZXJPS0INWgtwYi9NdWx0aUR1cGIGcHJvdG8z"));
       descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
           new pbr::FileDescriptor[] { },
           new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {

+ 617 - 0
CSserver/PBReferens/pbgo/pb/BossServer/fight.pb.go

@@ -0,0 +1,617 @@
+//import "google/protobuf/any.proto";
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.27.1
+// 	protoc        v3.3.0
+// source: pb/fight.proto
+
+package BossServer
+
+import (
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+//上报伤害输出
+type CSFightReportDamage struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// 伤害输出
+	Damage int32 `protobuf:"varint,1,opt,name=Damage,proto3" json:"Damage,omitempty"`
+}
+
+func (x *CSFightReportDamage) Reset() {
+	*x = CSFightReportDamage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_fight_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CSFightReportDamage) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CSFightReportDamage) ProtoMessage() {}
+
+func (x *CSFightReportDamage) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_fight_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CSFightReportDamage.ProtoReflect.Descriptor instead.
+func (*CSFightReportDamage) Descriptor() ([]byte, []int) {
+	return file_pb_fight_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *CSFightReportDamage) GetDamage() int32 {
+	if x != nil {
+		return x.Damage
+	}
+	return 0
+}
+
+// 上报玩家剩余血量
+type CSReportUserHP struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	UserHP int32 `protobuf:"varint,1,opt,name=UserHP,proto3" json:"UserHP,omitempty"`
+}
+
+func (x *CSReportUserHP) Reset() {
+	*x = CSReportUserHP{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_fight_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CSReportUserHP) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CSReportUserHP) ProtoMessage() {}
+
+func (x *CSReportUserHP) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_fight_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CSReportUserHP.ProtoReflect.Descriptor instead.
+func (*CSReportUserHP) Descriptor() ([]byte, []int) {
+	return file_pb_fight_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *CSReportUserHP) GetUserHP() int32 {
+	if x != nil {
+		return x.UserHP
+	}
+	return 0
+}
+
+// 结束(一般情况下是玩家血量到底主动退出)
+type CSLeaveFight struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	XNo int32 `protobuf:"varint,1,opt,name=_no,json=No,proto3" json:"_no,omitempty"`
+}
+
+func (x *CSLeaveFight) Reset() {
+	*x = CSLeaveFight{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_fight_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CSLeaveFight) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CSLeaveFight) ProtoMessage() {}
+
+func (x *CSLeaveFight) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_fight_proto_msgTypes[2]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CSLeaveFight.ProtoReflect.Descriptor instead.
+func (*CSLeaveFight) Descriptor() ([]byte, []int) {
+	return file_pb_fight_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *CSLeaveFight) GetXNo() int32 {
+	if x != nil {
+		return x.XNo
+	}
+	return 0
+}
+
+// 从连接状态转入已经登陆状态(标记自己的uid和zoneid)
+type CSEnterFight struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid int32  `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	Uid    string `protobuf:"bytes,2,opt,name=Uid,proto3" json:"Uid,omitempty"`
+	Name   string `protobuf:"bytes,3,opt,name=Name,proto3" json:"Name,omitempty"`
+	BossId int32  `protobuf:"varint,4,opt,name=BossId,proto3" json:"BossId,omitempty"`
+}
+
+func (x *CSEnterFight) Reset() {
+	*x = CSEnterFight{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_fight_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CSEnterFight) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CSEnterFight) ProtoMessage() {}
+
+func (x *CSEnterFight) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_fight_proto_msgTypes[3]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CSEnterFight.ProtoReflect.Descriptor instead.
+func (*CSEnterFight) Descriptor() ([]byte, []int) {
+	return file_pb_fight_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *CSEnterFight) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *CSEnterFight) GetUid() string {
+	if x != nil {
+		return x.Uid
+	}
+	return ""
+}
+
+func (x *CSEnterFight) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *CSEnterFight) GetBossId() int32 {
+	if x != nil {
+		return x.BossId
+	}
+	return 0
+}
+
+// 登陆完成
+type SCEnterFight struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	BossHp    int32 `protobuf:"varint,1,opt,name=BossHp,proto3" json:"BossHp,omitempty"`
+	BossMaxHp int32 `protobuf:"varint,2,opt,name=BossMaxHp,proto3" json:"BossMaxHp,omitempty"`
+	UserHP    int32 `protobuf:"varint,3,opt,name=UserHP,proto3" json:"UserHP,omitempty"`
+	// 倒计时
+	CountDown int32 `protobuf:"varint,4,opt,name=CountDown,proto3" json:"CountDown,omitempty"`
+}
+
+func (x *SCEnterFight) Reset() {
+	*x = SCEnterFight{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_fight_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SCEnterFight) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SCEnterFight) ProtoMessage() {}
+
+func (x *SCEnterFight) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_fight_proto_msgTypes[4]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SCEnterFight.ProtoReflect.Descriptor instead.
+func (*SCEnterFight) Descriptor() ([]byte, []int) {
+	return file_pb_fight_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *SCEnterFight) GetBossHp() int32 {
+	if x != nil {
+		return x.BossHp
+	}
+	return 0
+}
+
+func (x *SCEnterFight) GetBossMaxHp() int32 {
+	if x != nil {
+		return x.BossMaxHp
+	}
+	return 0
+}
+
+func (x *SCEnterFight) GetUserHP() int32 {
+	if x != nil {
+		return x.UserHP
+	}
+	return 0
+}
+
+func (x *SCEnterFight) GetCountDown() int32 {
+	if x != nil {
+		return x.CountDown
+	}
+	return 0
+}
+
+// 更新状态数据
+type SCUpdateProperties struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	BossHp    int32 `protobuf:"varint,1,opt,name=BossHp,proto3" json:"BossHp,omitempty"`
+	BossMaxHp int32 `protobuf:"varint,2,opt,name=BossMaxHp,proto3" json:"BossMaxHp,omitempty"`
+	// 倒计时
+	CountDown int32 `protobuf:"varint,3,opt,name=CountDown,proto3" json:"CountDown,omitempty"`
+}
+
+func (x *SCUpdateProperties) Reset() {
+	*x = SCUpdateProperties{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_fight_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SCUpdateProperties) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SCUpdateProperties) ProtoMessage() {}
+
+func (x *SCUpdateProperties) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_fight_proto_msgTypes[5]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SCUpdateProperties.ProtoReflect.Descriptor instead.
+func (*SCUpdateProperties) Descriptor() ([]byte, []int) {
+	return file_pb_fight_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *SCUpdateProperties) GetBossHp() int32 {
+	if x != nil {
+		return x.BossHp
+	}
+	return 0
+}
+
+func (x *SCUpdateProperties) GetBossMaxHp() int32 {
+	if x != nil {
+		return x.BossMaxHp
+	}
+	return 0
+}
+
+func (x *SCUpdateProperties) GetCountDown() int32 {
+	if x != nil {
+		return x.CountDown
+	}
+	return 0
+}
+
+// 战斗结束
+type SCGameOver struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	BossHp int32 `protobuf:"varint,1,opt,name=BossHp,proto3" json:"BossHp,omitempty"`
+	// 倒计时
+	CountDown int32 `protobuf:"varint,2,opt,name=CountDown,proto3" json:"CountDown,omitempty"`
+}
+
+func (x *SCGameOver) Reset() {
+	*x = SCGameOver{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_fight_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SCGameOver) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SCGameOver) ProtoMessage() {}
+
+func (x *SCGameOver) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_fight_proto_msgTypes[6]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SCGameOver.ProtoReflect.Descriptor instead.
+func (*SCGameOver) Descriptor() ([]byte, []int) {
+	return file_pb_fight_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *SCGameOver) GetBossHp() int32 {
+	if x != nil {
+		return x.BossHp
+	}
+	return 0
+}
+
+func (x *SCGameOver) GetCountDown() int32 {
+	if x != nil {
+		return x.CountDown
+	}
+	return 0
+}
+
+var File_pb_fight_proto protoreflect.FileDescriptor
+
+var file_pb_fight_proto_rawDesc = []byte{
+	0x0a, 0x0e, 0x70, 0x62, 0x2f, 0x66, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x12, 0x0a, 0x42, 0x6f, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x2d, 0x0a, 0x13,
+	0x43, 0x53, 0x46, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x44, 0x61, 0x6d,
+	0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x06, 0x44, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x28, 0x0a, 0x0e, 0x43,
+	0x53, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x73, 0x65, 0x72, 0x48, 0x50, 0x12, 0x16, 0x0a,
+	0x06, 0x55, 0x73, 0x65, 0x72, 0x48, 0x50, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x55,
+	0x73, 0x65, 0x72, 0x48, 0x50, 0x22, 0x1f, 0x0a, 0x0c, 0x43, 0x53, 0x4c, 0x65, 0x61, 0x76, 0x65,
+	0x46, 0x69, 0x67, 0x68, 0x74, 0x12, 0x0f, 0x0a, 0x03, 0x5f, 0x6e, 0x6f, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x02, 0x4e, 0x6f, 0x22, 0x64, 0x0a, 0x0c, 0x43, 0x53, 0x45, 0x6e, 0x74, 0x65,
+	0x72, 0x46, 0x69, 0x67, 0x68, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x10,
+	0x0a, 0x03, 0x55, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x69, 0x64,
+	0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
+	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x42, 0x6f, 0x73, 0x73, 0x49, 0x64, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x42, 0x6f, 0x73, 0x73, 0x49, 0x64, 0x22, 0x7a, 0x0a, 0x0c,
+	0x53, 0x43, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x46, 0x69, 0x67, 0x68, 0x74, 0x12, 0x16, 0x0a, 0x06,
+	0x42, 0x6f, 0x73, 0x73, 0x48, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x42, 0x6f,
+	0x73, 0x73, 0x48, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x6f, 0x73, 0x73, 0x4d, 0x61, 0x78, 0x48,
+	0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x6f, 0x73, 0x73, 0x4d, 0x61, 0x78,
+	0x48, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x48, 0x50, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x48, 0x50, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x6f,
+	0x75, 0x6e, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x43,
+	0x6f, 0x75, 0x6e, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x22, 0x68, 0x0a, 0x12, 0x53, 0x43, 0x55, 0x70,
+	0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x16,
+	0x0a, 0x06, 0x42, 0x6f, 0x73, 0x73, 0x48, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06,
+	0x42, 0x6f, 0x73, 0x73, 0x48, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x6f, 0x73, 0x73, 0x4d, 0x61,
+	0x78, 0x48, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x6f, 0x73, 0x73, 0x4d,
+	0x61, 0x78, 0x48, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x6f, 0x77,
+	0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x6f,
+	0x77, 0x6e, 0x22, 0x42, 0x0a, 0x0a, 0x53, 0x43, 0x47, 0x61, 0x6d, 0x65, 0x4f, 0x76, 0x65, 0x72,
+	0x12, 0x16, 0x0a, 0x06, 0x42, 0x6f, 0x73, 0x73, 0x48, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x06, 0x42, 0x6f, 0x73, 0x73, 0x48, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x6f, 0x75, 0x6e,
+	0x74, 0x44, 0x6f, 0x77, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x43, 0x6f, 0x75,
+	0x6e, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x42, 0x0f, 0x5a, 0x0d, 0x70, 0x62, 0x2f, 0x42, 0x6f, 0x73,
+	0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_pb_fight_proto_rawDescOnce sync.Once
+	file_pb_fight_proto_rawDescData = file_pb_fight_proto_rawDesc
+)
+
+func file_pb_fight_proto_rawDescGZIP() []byte {
+	file_pb_fight_proto_rawDescOnce.Do(func() {
+		file_pb_fight_proto_rawDescData = protoimpl.X.CompressGZIP(file_pb_fight_proto_rawDescData)
+	})
+	return file_pb_fight_proto_rawDescData
+}
+
+var file_pb_fight_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
+var file_pb_fight_proto_goTypes = []interface{}{
+	(*CSFightReportDamage)(nil), // 0: BossServer.CSFightReportDamage
+	(*CSReportUserHP)(nil),      // 1: BossServer.CSReportUserHP
+	(*CSLeaveFight)(nil),        // 2: BossServer.CSLeaveFight
+	(*CSEnterFight)(nil),        // 3: BossServer.CSEnterFight
+	(*SCEnterFight)(nil),        // 4: BossServer.SCEnterFight
+	(*SCUpdateProperties)(nil),  // 5: BossServer.SCUpdateProperties
+	(*SCGameOver)(nil),          // 6: BossServer.SCGameOver
+}
+var file_pb_fight_proto_depIdxs = []int32{
+	0, // [0:0] is the sub-list for method output_type
+	0, // [0:0] is the sub-list for method input_type
+	0, // [0:0] is the sub-list for extension type_name
+	0, // [0:0] is the sub-list for extension extendee
+	0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_pb_fight_proto_init() }
+func file_pb_fight_proto_init() {
+	if File_pb_fight_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_pb_fight_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CSFightReportDamage); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_fight_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CSReportUserHP); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_fight_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CSLeaveFight); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_fight_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CSEnterFight); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_fight_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SCEnterFight); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_fight_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SCUpdateProperties); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_fight_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SCGameOver); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_pb_fight_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   7,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_pb_fight_proto_goTypes,
+		DependencyIndexes: file_pb_fight_proto_depIdxs,
+		MessageInfos:      file_pb_fight_proto_msgTypes,
+	}.Build()
+	File_pb_fight_proto = out.File
+	file_pb_fight_proto_rawDesc = nil
+	file_pb_fight_proto_goTypes = nil
+	file_pb_fight_proto_depIdxs = nil
+}

+ 535 - 0
CSserver/PBReferens/pbgo/pb/Chat/chat.pb.go

@@ -0,0 +1,535 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.27.1
+// 	protoc        v3.3.0
+// source: pb/chat.proto
+
+package Chat
+
+import (
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// 频道
+type ChatChannel int32
+
+const (
+	// 系统频道
+	ChatChannel_System ChatChannel = 0
+	// 世界频道
+	ChatChannel_World ChatChannel = 1
+	// 公会频道
+	ChatChannel_Guild ChatChannel = 2
+	// 密语(单独发送给某人)
+	ChatChannel_Single ChatChannel = 3
+)
+
+// Enum value maps for ChatChannel.
+var (
+	ChatChannel_name = map[int32]string{
+		0: "System",
+		1: "World",
+		2: "Guild",
+		3: "Single",
+	}
+	ChatChannel_value = map[string]int32{
+		"System": 0,
+		"World":  1,
+		"Guild":  2,
+		"Single": 3,
+	}
+)
+
+func (x ChatChannel) Enum() *ChatChannel {
+	p := new(ChatChannel)
+	*p = x
+	return p
+}
+
+func (x ChatChannel) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ChatChannel) Descriptor() protoreflect.EnumDescriptor {
+	return file_pb_chat_proto_enumTypes[0].Descriptor()
+}
+
+func (ChatChannel) Type() protoreflect.EnumType {
+	return &file_pb_chat_proto_enumTypes[0]
+}
+
+func (x ChatChannel) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ChatChannel.Descriptor instead.
+func (ChatChannel) EnumDescriptor() ([]byte, []int) {
+	return file_pb_chat_proto_rawDescGZIP(), []int{0}
+}
+
+// 错误码
+type SC_ChatLogin_ErrorCode int32
+
+const (
+	// 成功
+	SC_ChatLogin_OK SC_ChatLogin_ErrorCode = 0
+	// 未知的UID
+	SC_ChatLogin_AccIDInvalid SC_ChatLogin_ErrorCode = 1
+	// 重复登入
+	SC_ChatLogin_LoginRepeat SC_ChatLogin_ErrorCode = 2
+	// 内部错误
+	SC_ChatLogin_InnerError SC_ChatLogin_ErrorCode = 3
+)
+
+// Enum value maps for SC_ChatLogin_ErrorCode.
+var (
+	SC_ChatLogin_ErrorCode_name = map[int32]string{
+		0: "OK",
+		1: "AccIDInvalid",
+		2: "LoginRepeat",
+		3: "InnerError",
+	}
+	SC_ChatLogin_ErrorCode_value = map[string]int32{
+		"OK":           0,
+		"AccIDInvalid": 1,
+		"LoginRepeat":  2,
+		"InnerError":   3,
+	}
+)
+
+func (x SC_ChatLogin_ErrorCode) Enum() *SC_ChatLogin_ErrorCode {
+	p := new(SC_ChatLogin_ErrorCode)
+	*p = x
+	return p
+}
+
+func (x SC_ChatLogin_ErrorCode) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (SC_ChatLogin_ErrorCode) Descriptor() protoreflect.EnumDescriptor {
+	return file_pb_chat_proto_enumTypes[1].Descriptor()
+}
+
+func (SC_ChatLogin_ErrorCode) Type() protoreflect.EnumType {
+	return &file_pb_chat_proto_enumTypes[1]
+}
+
+func (x SC_ChatLogin_ErrorCode) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use SC_ChatLogin_ErrorCode.Descriptor instead.
+func (SC_ChatLogin_ErrorCode) EnumDescriptor() ([]byte, []int) {
+	return file_pb_chat_proto_rawDescGZIP(), []int{2, 0}
+}
+
+// 聊天, 登录
+type CS_ChatLogin struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid int32  `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	Uid    string `protobuf:"bytes,2,opt,name=Uid,proto3" json:"Uid,omitempty"`
+	Name   string `protobuf:"bytes,3,opt,name=Name,proto3" json:"Name,omitempty"`
+}
+
+func (x *CS_ChatLogin) Reset() {
+	*x = CS_ChatLogin{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_chat_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CS_ChatLogin) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CS_ChatLogin) ProtoMessage() {}
+
+func (x *CS_ChatLogin) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_chat_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CS_ChatLogin.ProtoReflect.Descriptor instead.
+func (*CS_ChatLogin) Descriptor() ([]byte, []int) {
+	return file_pb_chat_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *CS_ChatLogin) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *CS_ChatLogin) GetUid() string {
+	if x != nil {
+		return x.Uid
+	}
+	return ""
+}
+
+func (x *CS_ChatLogin) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+// 聊天, 发送消息
+type CS_ChatSendMsg struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ToChannel  ChatChannel `protobuf:"varint,1,opt,name=ToChannel,proto3,enum=Chat.ChatChannel" json:"ToChannel,omitempty"`
+	Msg        string      `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"`
+	ToNickName string      `protobuf:"bytes,3,opt,name=ToNickName,proto3" json:"ToNickName,omitempty"`
+}
+
+func (x *CS_ChatSendMsg) Reset() {
+	*x = CS_ChatSendMsg{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_chat_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CS_ChatSendMsg) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CS_ChatSendMsg) ProtoMessage() {}
+
+func (x *CS_ChatSendMsg) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_chat_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CS_ChatSendMsg.ProtoReflect.Descriptor instead.
+func (*CS_ChatSendMsg) Descriptor() ([]byte, []int) {
+	return file_pb_chat_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *CS_ChatSendMsg) GetToChannel() ChatChannel {
+	if x != nil {
+		return x.ToChannel
+	}
+	return ChatChannel_System
+}
+
+func (x *CS_ChatSendMsg) GetMsg() string {
+	if x != nil {
+		return x.Msg
+	}
+	return ""
+}
+
+func (x *CS_ChatSendMsg) GetToNickName() string {
+	if x != nil {
+		return x.ToNickName
+	}
+	return ""
+}
+
+// 聊天, 初始化返回值
+type SC_ChatLogin struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// 错误码
+	Code SC_ChatLogin_ErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=Chat.SC_ChatLogin_ErrorCode" json:"code,omitempty"`
+}
+
+func (x *SC_ChatLogin) Reset() {
+	*x = SC_ChatLogin{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_chat_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SC_ChatLogin) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SC_ChatLogin) ProtoMessage() {}
+
+func (x *SC_ChatLogin) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_chat_proto_msgTypes[2]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SC_ChatLogin.ProtoReflect.Descriptor instead.
+func (*SC_ChatLogin) Descriptor() ([]byte, []int) {
+	return file_pb_chat_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *SC_ChatLogin) GetCode() SC_ChatLogin_ErrorCode {
+	if x != nil {
+		return x.Code
+	}
+	return SC_ChatLogin_OK
+}
+
+// 聊天, 新的消息
+type SC_ChatNewMsg struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	FromChannel ChatChannel `protobuf:"varint,1,opt,name=FromChannel,proto3,enum=Chat.ChatChannel" json:"FromChannel,omitempty"`
+	Msg         string      `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"`
+	SenderName  string      `protobuf:"bytes,3,opt,name=SenderName,proto3" json:"SenderName,omitempty"`
+	SenderUid   string      `protobuf:"bytes,4,opt,name=SenderUid,proto3" json:"SenderUid,omitempty"`
+}
+
+func (x *SC_ChatNewMsg) Reset() {
+	*x = SC_ChatNewMsg{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_chat_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SC_ChatNewMsg) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SC_ChatNewMsg) ProtoMessage() {}
+
+func (x *SC_ChatNewMsg) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_chat_proto_msgTypes[3]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SC_ChatNewMsg.ProtoReflect.Descriptor instead.
+func (*SC_ChatNewMsg) Descriptor() ([]byte, []int) {
+	return file_pb_chat_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *SC_ChatNewMsg) GetFromChannel() ChatChannel {
+	if x != nil {
+		return x.FromChannel
+	}
+	return ChatChannel_System
+}
+
+func (x *SC_ChatNewMsg) GetMsg() string {
+	if x != nil {
+		return x.Msg
+	}
+	return ""
+}
+
+func (x *SC_ChatNewMsg) GetSenderName() string {
+	if x != nil {
+		return x.SenderName
+	}
+	return ""
+}
+
+func (x *SC_ChatNewMsg) GetSenderUid() string {
+	if x != nil {
+		return x.SenderUid
+	}
+	return ""
+}
+
+var File_pb_chat_proto protoreflect.FileDescriptor
+
+var file_pb_chat_proto_rawDesc = []byte{
+	0x0a, 0x0d, 0x70, 0x62, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
+	0x04, 0x43, 0x68, 0x61, 0x74, 0x22, 0x4c, 0x0a, 0x0c, 0x43, 0x53, 0x5f, 0x43, 0x68, 0x61, 0x74,
+	0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x10, 0x0a,
+	0x03, 0x55, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x69, 0x64, 0x12,
+	0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e,
+	0x61, 0x6d, 0x65, 0x22, 0x73, 0x0a, 0x0e, 0x43, 0x53, 0x5f, 0x43, 0x68, 0x61, 0x74, 0x53, 0x65,
+	0x6e, 0x64, 0x4d, 0x73, 0x67, 0x12, 0x2f, 0x0a, 0x09, 0x54, 0x6f, 0x43, 0x68, 0x61, 0x6e, 0x6e,
+	0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x2e,
+	0x43, 0x68, 0x61, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x09, 0x54, 0x6f, 0x43,
+	0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, 0x4e, 0x69,
+	0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x54, 0x6f,
+	0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x88, 0x01, 0x0a, 0x0c, 0x53, 0x43, 0x5f,
+	0x43, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x30, 0x0a, 0x04, 0x63, 0x6f, 0x64,
+	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x53,
+	0x43, 0x5f, 0x43, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x2e, 0x45, 0x72, 0x72, 0x6f,
+	0x72, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x46, 0x0a, 0x09, 0x45,
+	0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00,
+	0x12, 0x10, 0x0a, 0x0c, 0x41, 0x63, 0x63, 0x49, 0x44, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64,
+	0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x65, 0x61,
+	0x74, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x6e, 0x6e, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f,
+	0x72, 0x10, 0x03, 0x22, 0x94, 0x01, 0x0a, 0x0d, 0x53, 0x43, 0x5f, 0x43, 0x68, 0x61, 0x74, 0x4e,
+	0x65, 0x77, 0x4d, 0x73, 0x67, 0x12, 0x33, 0x0a, 0x0b, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61,
+	0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x43, 0x68, 0x61,
+	0x74, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x0b, 0x46,
+	0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73,
+	0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x1e, 0x0a, 0x0a,
+	0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0a, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09,
+	0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x09, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x69, 0x64, 0x2a, 0x3b, 0x0a, 0x0b, 0x43, 0x68,
+	0x61, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x79, 0x73,
+	0x74, 0x65, 0x6d, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x10, 0x01,
+	0x12, 0x09, 0x0a, 0x05, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x53,
+	0x69, 0x6e, 0x67, 0x6c, 0x65, 0x10, 0x03, 0x42, 0x09, 0x5a, 0x07, 0x70, 0x62, 0x2f, 0x43, 0x68,
+	0x61, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_pb_chat_proto_rawDescOnce sync.Once
+	file_pb_chat_proto_rawDescData = file_pb_chat_proto_rawDesc
+)
+
+func file_pb_chat_proto_rawDescGZIP() []byte {
+	file_pb_chat_proto_rawDescOnce.Do(func() {
+		file_pb_chat_proto_rawDescData = protoimpl.X.CompressGZIP(file_pb_chat_proto_rawDescData)
+	})
+	return file_pb_chat_proto_rawDescData
+}
+
+var file_pb_chat_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
+var file_pb_chat_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
+var file_pb_chat_proto_goTypes = []interface{}{
+	(ChatChannel)(0),            // 0: Chat.ChatChannel
+	(SC_ChatLogin_ErrorCode)(0), // 1: Chat.SC_ChatLogin.ErrorCode
+	(*CS_ChatLogin)(nil),        // 2: Chat.CS_ChatLogin
+	(*CS_ChatSendMsg)(nil),      // 3: Chat.CS_ChatSendMsg
+	(*SC_ChatLogin)(nil),        // 4: Chat.SC_ChatLogin
+	(*SC_ChatNewMsg)(nil),       // 5: Chat.SC_ChatNewMsg
+}
+var file_pb_chat_proto_depIdxs = []int32{
+	0, // 0: Chat.CS_ChatSendMsg.ToChannel:type_name -> Chat.ChatChannel
+	1, // 1: Chat.SC_ChatLogin.code:type_name -> Chat.SC_ChatLogin.ErrorCode
+	0, // 2: Chat.SC_ChatNewMsg.FromChannel:type_name -> Chat.ChatChannel
+	3, // [3:3] is the sub-list for method output_type
+	3, // [3:3] is the sub-list for method input_type
+	3, // [3:3] is the sub-list for extension type_name
+	3, // [3:3] is the sub-list for extension extendee
+	0, // [0:3] is the sub-list for field type_name
+}
+
+func init() { file_pb_chat_proto_init() }
+func file_pb_chat_proto_init() {
+	if File_pb_chat_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_pb_chat_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CS_ChatLogin); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_chat_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CS_ChatSendMsg); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_chat_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SC_ChatLogin); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_chat_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SC_ChatNewMsg); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_pb_chat_proto_rawDesc,
+			NumEnums:      2,
+			NumMessages:   4,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_pb_chat_proto_goTypes,
+		DependencyIndexes: file_pb_chat_proto_depIdxs,
+		EnumInfos:         file_pb_chat_proto_enumTypes,
+		MessageInfos:      file_pb_chat_proto_msgTypes,
+	}.Build()
+	File_pb_chat_proto = out.File
+	file_pb_chat_proto_rawDesc = nil
+	file_pb_chat_proto_goTypes = nil
+	file_pb_chat_proto_depIdxs = nil
+}

+ 126 - 0
CSserver/PBReferens/pbgo/pb/ErrCode.pb.go

@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.27.1
+// 	protoc        v3.3.0
+// source: pb/ErrCode.proto
+
+package pb
+
+import (
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type ErrCode int32
+
+const (
+	ErrCode_ok           ErrCode = 0
+	ErrCode_OpNotAllowed ErrCode = 1
+)
+
+// Enum value maps for ErrCode.
+var (
+	ErrCode_name = map[int32]string{
+		0: "ok",
+		1: "OpNotAllowed",
+	}
+	ErrCode_value = map[string]int32{
+		"ok":           0,
+		"OpNotAllowed": 1,
+	}
+)
+
+func (x ErrCode) Enum() *ErrCode {
+	p := new(ErrCode)
+	*p = x
+	return p
+}
+
+func (x ErrCode) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ErrCode) Descriptor() protoreflect.EnumDescriptor {
+	return file_pb_ErrCode_proto_enumTypes[0].Descriptor()
+}
+
+func (ErrCode) Type() protoreflect.EnumType {
+	return &file_pb_ErrCode_proto_enumTypes[0]
+}
+
+func (x ErrCode) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ErrCode.Descriptor instead.
+func (ErrCode) EnumDescriptor() ([]byte, []int) {
+	return file_pb_ErrCode_proto_rawDescGZIP(), []int{0}
+}
+
+var File_pb_ErrCode_proto protoreflect.FileDescriptor
+
+var file_pb_ErrCode_proto_rawDesc = []byte{
+	0x0a, 0x10, 0x70, 0x62, 0x2f, 0x45, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2a, 0x23, 0x0a, 0x07, 0x45, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x06, 0x0a,
+	0x02, 0x6f, 0x6b, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x70, 0x4e, 0x6f, 0x74, 0x41, 0x6c,
+	0x6c, 0x6f, 0x77, 0x65, 0x64, 0x10, 0x01, 0x42, 0x05, 0x5a, 0x03, 0x2f, 0x70, 0x62, 0x62, 0x06,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_pb_ErrCode_proto_rawDescOnce sync.Once
+	file_pb_ErrCode_proto_rawDescData = file_pb_ErrCode_proto_rawDesc
+)
+
+func file_pb_ErrCode_proto_rawDescGZIP() []byte {
+	file_pb_ErrCode_proto_rawDescOnce.Do(func() {
+		file_pb_ErrCode_proto_rawDescData = protoimpl.X.CompressGZIP(file_pb_ErrCode_proto_rawDescData)
+	})
+	return file_pb_ErrCode_proto_rawDescData
+}
+
+var file_pb_ErrCode_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_pb_ErrCode_proto_goTypes = []interface{}{
+	(ErrCode)(0), // 0: ErrCode
+}
+var file_pb_ErrCode_proto_depIdxs = []int32{
+	0, // [0:0] is the sub-list for method output_type
+	0, // [0:0] is the sub-list for method input_type
+	0, // [0:0] is the sub-list for extension type_name
+	0, // [0:0] is the sub-list for extension extendee
+	0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_pb_ErrCode_proto_init() }
+func file_pb_ErrCode_proto_init() {
+	if File_pb_ErrCode_proto != nil {
+		return
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_pb_ErrCode_proto_rawDesc,
+			NumEnums:      1,
+			NumMessages:   0,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_pb_ErrCode_proto_goTypes,
+		DependencyIndexes: file_pb_ErrCode_proto_depIdxs,
+		EnumInfos:         file_pb_ErrCode_proto_enumTypes,
+	}.Build()
+	File_pb_ErrCode_proto = out.File
+	file_pb_ErrCode_proto_rawDesc = nil
+	file_pb_ErrCode_proto_goTypes = nil
+	file_pb_ErrCode_proto_depIdxs = nil
+}

+ 311 - 0
CSserver/PBReferens/pbgo/pb/MsgTypeEnum.pb.go

@@ -0,0 +1,311 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.27.1
+// 	protoc        v3.3.0
+// source: pb/MsgTypeEnum.proto
+
+package pb
+
+import (
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type EProtocalCommand int32
+
+const (
+	// 无操作
+	EProtocalCommand_noop EProtocalCommand = 0
+	// 登录()
+	EProtocalCommand_CS_Login EProtocalCommand = 1
+	// 上报伤害输出
+	EProtocalCommand_CS_ReportDamage EProtocalCommand = 2
+	// 离开房间(战斗失败结束)
+	EProtocalCommand_CS_LeaveRoom EProtocalCommand = 3
+	// 上报玩家剩余血量
+	EProtocalCommand_CS_ReportUserHp EProtocalCommand = 4
+	// 聊天, 客户端初始化
+	EProtocalCommand_CS_ChatLogin EProtocalCommand = 10
+	// 聊天, 发送消息
+	EProtocalCommand_CS_ChatSendMsg EProtocalCommand = 11
+	// 多人副本,进入大厅(登录自己的uid)
+	EProtocalCommand_CS_MD_EnterLobby EProtocalCommand = 20
+	// 多人副本, 创建房间
+	EProtocalCommand_CS_MD_CreateRoom EProtocalCommand = 21
+	// 多人副本, 申请房间(列表)
+	EProtocalCommand_CS_MD_GetRoomList EProtocalCommand = 22
+	// 多人副本, 加入房间
+	EProtocalCommand_CS_MD_EnterRoom EProtocalCommand = 23
+	// 多人副本, 离开房间
+	EProtocalCommand_CS_MD_LeaveRoom EProtocalCommand = 24
+	// 多人副本, 开始游戏(创建者)
+	EProtocalCommand_CS_MD_BeginDup EProtocalCommand = 25
+	// 战斗服务 登录
+	EProtocalCommand_CS_BT_Login EProtocalCommand = 31
+	// 战斗服务 状态同步
+	EProtocalCommand_CS_BT_Status EProtocalCommand = 32
+	// 战斗服务 位置同步
+	EProtocalCommand_CS_BT_Position EProtocalCommand = 33
+	// 战斗服务 广播
+	EProtocalCommand_CS_BT_BroadCast EProtocalCommand = 34
+	// 战斗服务器 玩家列表更新
+	EProtocalCommand_CS_BT_PeopleList EProtocalCommand = 35
+	// 登录结果
+	EProtocalCommand_SC_Login EProtocalCommand = 100
+	// 更新数据
+	EProtocalCommand_SC_UpdateProperties EProtocalCommand = 101
+	// 游戏结束
+	EProtocalCommand_SC_GameOver EProtocalCommand = 102
+	// 聊天, 登录成功
+	EProtocalCommand_SC_ChatLogin EProtocalCommand = 110
+	// 聊天, 新消息
+	EProtocalCommand_SC_ChatNewMsg EProtocalCommand = 111
+	// ---- 多人副本 ----
+	// 多人副本, 进入大厅(登录自己的uid)
+	EProtocalCommand_SC_MD_EnterLobby EProtocalCommand = 120
+	// 多人副本, 创建房间
+	EProtocalCommand_SC_MD_CreateRoom EProtocalCommand = 121
+	// 多人副本, 申请房间(列表)
+	EProtocalCommand_SC_MD_GetRoomList EProtocalCommand = 122
+	// 多人副本, 加入房间
+	EProtocalCommand_SC_MD_EnterRoom EProtocalCommand = 123
+	// 多人副本, 离开房间
+	EProtocalCommand_SC_MD_LeaveRoom EProtocalCommand = 124
+	// 多人副本, 开始游戏(创建者)
+	EProtocalCommand_SC_MD_BeginDup EProtocalCommand = 125
+	// 战斗服务 登录通知
+	EProtocalCommand_SC_BT_Login EProtocalCommand = 131
+	// 战斗服务 状态同步
+	EProtocalCommand_SC_BT_Status EProtocalCommand = 132
+	// 战斗服务 位置同步
+	EProtocalCommand_SC_BT_Postion EProtocalCommand = 133
+	// 战斗服务 广播
+	EProtocalCommand_SC_BT_BroadCast EProtocalCommand = 134
+	// 战斗服务 玩家列表更新
+	EProtocalCommand_SC_BT_PeopleList EProtocalCommand = 135
+	//////////////   S - S    //////////////////
+	//创建战斗房间
+	EProtocalCommand_SS_CreateBattleRoom EProtocalCommand = 301
+	// 创建房间OK
+	EProtocalCommand_SS_CreateBattleRoomOk EProtocalCommand = 302
+)
+
+// Enum value maps for EProtocalCommand.
+var (
+	EProtocalCommand_name = map[int32]string{
+		0:   "noop",
+		1:   "CS_Login",
+		2:   "CS_ReportDamage",
+		3:   "CS_LeaveRoom",
+		4:   "CS_ReportUserHp",
+		10:  "CS_ChatLogin",
+		11:  "CS_ChatSendMsg",
+		20:  "CS_MD_EnterLobby",
+		21:  "CS_MD_CreateRoom",
+		22:  "CS_MD_GetRoomList",
+		23:  "CS_MD_EnterRoom",
+		24:  "CS_MD_LeaveRoom",
+		25:  "CS_MD_BeginDup",
+		31:  "CS_BT_Login",
+		32:  "CS_BT_Status",
+		33:  "CS_BT_Position",
+		34:  "CS_BT_BroadCast",
+		35:  "CS_BT_PeopleList",
+		100: "SC_Login",
+		101: "SC_UpdateProperties",
+		102: "SC_GameOver",
+		110: "SC_ChatLogin",
+		111: "SC_ChatNewMsg",
+		120: "SC_MD_EnterLobby",
+		121: "SC_MD_CreateRoom",
+		122: "SC_MD_GetRoomList",
+		123: "SC_MD_EnterRoom",
+		124: "SC_MD_LeaveRoom",
+		125: "SC_MD_BeginDup",
+		131: "SC_BT_Login",
+		132: "SC_BT_Status",
+		133: "SC_BT_Postion",
+		134: "SC_BT_BroadCast",
+		135: "SC_BT_PeopleList",
+		301: "SS_CreateBattleRoom",
+		302: "SS_CreateBattleRoomOk",
+	}
+	EProtocalCommand_value = map[string]int32{
+		"noop":                  0,
+		"CS_Login":              1,
+		"CS_ReportDamage":       2,
+		"CS_LeaveRoom":          3,
+		"CS_ReportUserHp":       4,
+		"CS_ChatLogin":          10,
+		"CS_ChatSendMsg":        11,
+		"CS_MD_EnterLobby":      20,
+		"CS_MD_CreateRoom":      21,
+		"CS_MD_GetRoomList":     22,
+		"CS_MD_EnterRoom":       23,
+		"CS_MD_LeaveRoom":       24,
+		"CS_MD_BeginDup":        25,
+		"CS_BT_Login":           31,
+		"CS_BT_Status":          32,
+		"CS_BT_Position":        33,
+		"CS_BT_BroadCast":       34,
+		"CS_BT_PeopleList":      35,
+		"SC_Login":              100,
+		"SC_UpdateProperties":   101,
+		"SC_GameOver":           102,
+		"SC_ChatLogin":          110,
+		"SC_ChatNewMsg":         111,
+		"SC_MD_EnterLobby":      120,
+		"SC_MD_CreateRoom":      121,
+		"SC_MD_GetRoomList":     122,
+		"SC_MD_EnterRoom":       123,
+		"SC_MD_LeaveRoom":       124,
+		"SC_MD_BeginDup":        125,
+		"SC_BT_Login":           131,
+		"SC_BT_Status":          132,
+		"SC_BT_Postion":         133,
+		"SC_BT_BroadCast":       134,
+		"SC_BT_PeopleList":      135,
+		"SS_CreateBattleRoom":   301,
+		"SS_CreateBattleRoomOk": 302,
+	}
+)
+
+func (x EProtocalCommand) Enum() *EProtocalCommand {
+	p := new(EProtocalCommand)
+	*p = x
+	return p
+}
+
+func (x EProtocalCommand) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (EProtocalCommand) Descriptor() protoreflect.EnumDescriptor {
+	return file_pb_MsgTypeEnum_proto_enumTypes[0].Descriptor()
+}
+
+func (EProtocalCommand) Type() protoreflect.EnumType {
+	return &file_pb_MsgTypeEnum_proto_enumTypes[0]
+}
+
+func (x EProtocalCommand) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use EProtocalCommand.Descriptor instead.
+func (EProtocalCommand) EnumDescriptor() ([]byte, []int) {
+	return file_pb_MsgTypeEnum_proto_rawDescGZIP(), []int{0}
+}
+
+var File_pb_MsgTypeEnum_proto protoreflect.FileDescriptor
+
+var file_pb_MsgTypeEnum_proto_rawDesc = []byte{
+	0x0a, 0x14, 0x70, 0x62, 0x2f, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2a, 0xe9, 0x05, 0x0a, 0x10, 0x65, 0x50, 0x72, 0x6f, 0x74,
+	0x6f, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x08, 0x0a, 0x04, 0x6e,
+	0x6f, 0x6f, 0x70, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x53, 0x5f, 0x4c, 0x6f, 0x67, 0x69,
+	0x6e, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x53, 0x5f, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74,
+	0x44, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x53, 0x5f, 0x4c,
+	0x65, 0x61, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x53,
+	0x5f, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x73, 0x65, 0x72, 0x48, 0x70, 0x10, 0x04, 0x12,
+	0x10, 0x0a, 0x0c, 0x43, 0x53, 0x5f, 0x43, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x10,
+	0x0a, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x53, 0x5f, 0x43, 0x68, 0x61, 0x74, 0x53, 0x65, 0x6e, 0x64,
+	0x4d, 0x73, 0x67, 0x10, 0x0b, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x53, 0x5f, 0x4d, 0x44, 0x5f, 0x45,
+	0x6e, 0x74, 0x65, 0x72, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x10, 0x14, 0x12, 0x14, 0x0a, 0x10, 0x43,
+	0x53, 0x5f, 0x4d, 0x44, 0x5f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x10,
+	0x15, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x53, 0x5f, 0x4d, 0x44, 0x5f, 0x47, 0x65, 0x74, 0x52, 0x6f,
+	0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x10, 0x16, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x53, 0x5f, 0x4d,
+	0x44, 0x5f, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6f, 0x6d, 0x10, 0x17, 0x12, 0x13, 0x0a,
+	0x0f, 0x43, 0x53, 0x5f, 0x4d, 0x44, 0x5f, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d,
+	0x10, 0x18, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x53, 0x5f, 0x4d, 0x44, 0x5f, 0x42, 0x65, 0x67, 0x69,
+	0x6e, 0x44, 0x75, 0x70, 0x10, 0x19, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x53, 0x5f, 0x42, 0x54, 0x5f,
+	0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x10, 0x1f, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x53, 0x5f, 0x42, 0x54,
+	0x5f, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0x20, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x53, 0x5f,
+	0x42, 0x54, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x21, 0x12, 0x13, 0x0a,
+	0x0f, 0x43, 0x53, 0x5f, 0x42, 0x54, 0x5f, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x73, 0x74,
+	0x10, 0x22, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x53, 0x5f, 0x42, 0x54, 0x5f, 0x50, 0x65, 0x6f, 0x70,
+	0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x10, 0x23, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x43, 0x5f, 0x4c,
+	0x6f, 0x67, 0x69, 0x6e, 0x10, 0x64, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x43, 0x5f, 0x55, 0x70, 0x64,
+	0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x10, 0x65, 0x12,
+	0x0f, 0x0a, 0x0b, 0x53, 0x43, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x10, 0x66,
+	0x12, 0x10, 0x0a, 0x0c, 0x53, 0x43, 0x5f, 0x43, 0x68, 0x61, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e,
+	0x10, 0x6e, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x43, 0x5f, 0x43, 0x68, 0x61, 0x74, 0x4e, 0x65, 0x77,
+	0x4d, 0x73, 0x67, 0x10, 0x6f, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x43, 0x5f, 0x4d, 0x44, 0x5f, 0x45,
+	0x6e, 0x74, 0x65, 0x72, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x10, 0x78, 0x12, 0x14, 0x0a, 0x10, 0x53,
+	0x43, 0x5f, 0x4d, 0x44, 0x5f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x10,
+	0x79, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x43, 0x5f, 0x4d, 0x44, 0x5f, 0x47, 0x65, 0x74, 0x52, 0x6f,
+	0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x10, 0x7a, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x43, 0x5f, 0x4d,
+	0x44, 0x5f, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6f, 0x6d, 0x10, 0x7b, 0x12, 0x13, 0x0a,
+	0x0f, 0x53, 0x43, 0x5f, 0x4d, 0x44, 0x5f, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d,
+	0x10, 0x7c, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x43, 0x5f, 0x4d, 0x44, 0x5f, 0x42, 0x65, 0x67, 0x69,
+	0x6e, 0x44, 0x75, 0x70, 0x10, 0x7d, 0x12, 0x10, 0x0a, 0x0b, 0x53, 0x43, 0x5f, 0x42, 0x54, 0x5f,
+	0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x10, 0x83, 0x01, 0x12, 0x11, 0x0a, 0x0c, 0x53, 0x43, 0x5f, 0x42,
+	0x54, 0x5f, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0x84, 0x01, 0x12, 0x12, 0x0a, 0x0d, 0x53,
+	0x43, 0x5f, 0x42, 0x54, 0x5f, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x85, 0x01, 0x12,
+	0x14, 0x0a, 0x0f, 0x53, 0x43, 0x5f, 0x42, 0x54, 0x5f, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x43, 0x61,
+	0x73, 0x74, 0x10, 0x86, 0x01, 0x12, 0x15, 0x0a, 0x10, 0x53, 0x43, 0x5f, 0x42, 0x54, 0x5f, 0x50,
+	0x65, 0x6f, 0x70, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x10, 0x87, 0x01, 0x12, 0x18, 0x0a, 0x13,
+	0x53, 0x53, 0x5f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x52,
+	0x6f, 0x6f, 0x6d, 0x10, 0xad, 0x02, 0x12, 0x1a, 0x0a, 0x15, 0x53, 0x53, 0x5f, 0x43, 0x72, 0x65,
+	0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x4f, 0x6b, 0x10,
+	0xae, 0x02, 0x42, 0x05, 0x5a, 0x03, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x33,
+}
+
+var (
+	file_pb_MsgTypeEnum_proto_rawDescOnce sync.Once
+	file_pb_MsgTypeEnum_proto_rawDescData = file_pb_MsgTypeEnum_proto_rawDesc
+)
+
+func file_pb_MsgTypeEnum_proto_rawDescGZIP() []byte {
+	file_pb_MsgTypeEnum_proto_rawDescOnce.Do(func() {
+		file_pb_MsgTypeEnum_proto_rawDescData = protoimpl.X.CompressGZIP(file_pb_MsgTypeEnum_proto_rawDescData)
+	})
+	return file_pb_MsgTypeEnum_proto_rawDescData
+}
+
+var file_pb_MsgTypeEnum_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_pb_MsgTypeEnum_proto_goTypes = []interface{}{
+	(EProtocalCommand)(0), // 0: eProtocalCommand
+}
+var file_pb_MsgTypeEnum_proto_depIdxs = []int32{
+	0, // [0:0] is the sub-list for method output_type
+	0, // [0:0] is the sub-list for method input_type
+	0, // [0:0] is the sub-list for extension type_name
+	0, // [0:0] is the sub-list for extension extendee
+	0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_pb_MsgTypeEnum_proto_init() }
+func file_pb_MsgTypeEnum_proto_init() {
+	if File_pb_MsgTypeEnum_proto != nil {
+		return
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_pb_MsgTypeEnum_proto_rawDesc,
+			NumEnums:      1,
+			NumMessages:   0,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_pb_MsgTypeEnum_proto_goTypes,
+		DependencyIndexes: file_pb_MsgTypeEnum_proto_depIdxs,
+		EnumInfos:         file_pb_MsgTypeEnum_proto_enumTypes,
+	}.Build()
+	File_pb_MsgTypeEnum_proto = out.File
+	file_pb_MsgTypeEnum_proto_rawDesc = nil
+	file_pb_MsgTypeEnum_proto_goTypes = nil
+	file_pb_MsgTypeEnum_proto_depIdxs = nil
+}

+ 2286 - 0
CSserver/PBReferens/pbgo/pb/MultiDup/MultiDup.pb.go

@@ -0,0 +1,2286 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.27.1
+// 	protoc        v3.3.0
+// source: pb/MultiDup.proto
+
+// 多人副本
+
+package MultiDup
+
+import (
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+//
+// 进入大厅(注册下自己的uid)
+type CS_MD_EnterLobby struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid int32  `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	Uid    string `protobuf:"bytes,2,opt,name=Uid,proto3" json:"Uid,omitempty"`
+}
+
+func (x *CS_MD_EnterLobby) Reset() {
+	*x = CS_MD_EnterLobby{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CS_MD_EnterLobby) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CS_MD_EnterLobby) ProtoMessage() {}
+
+func (x *CS_MD_EnterLobby) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CS_MD_EnterLobby.ProtoReflect.Descriptor instead.
+func (*CS_MD_EnterLobby) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *CS_MD_EnterLobby) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *CS_MD_EnterLobby) GetUid() string {
+	if x != nil {
+		return x.Uid
+	}
+	return ""
+}
+
+// 多人副本, 创建房间
+type CS_MD_CreateRoom struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid int32  `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"` // zoneid
+	Uid    string `protobuf:"bytes,2,opt,name=Uid,proto3" json:"Uid,omitempty"`        // 玩家id
+	Mapid  int32  `protobuf:"varint,3,opt,name=Mapid,proto3" json:"Mapid,omitempty"`   // 地图id
+}
+
+func (x *CS_MD_CreateRoom) Reset() {
+	*x = CS_MD_CreateRoom{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CS_MD_CreateRoom) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CS_MD_CreateRoom) ProtoMessage() {}
+
+func (x *CS_MD_CreateRoom) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CS_MD_CreateRoom.ProtoReflect.Descriptor instead.
+func (*CS_MD_CreateRoom) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *CS_MD_CreateRoom) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *CS_MD_CreateRoom) GetUid() string {
+	if x != nil {
+		return x.Uid
+	}
+	return ""
+}
+
+func (x *CS_MD_CreateRoom) GetMapid() int32 {
+	if x != nil {
+		return x.Mapid
+	}
+	return 0
+}
+
+// 多人副本, 申请房间(列表)
+type CS_MD_GetRoomList struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid int32  `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	Uid    string `protobuf:"bytes,2,opt,name=Uid,proto3" json:"Uid,omitempty"`
+}
+
+func (x *CS_MD_GetRoomList) Reset() {
+	*x = CS_MD_GetRoomList{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CS_MD_GetRoomList) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CS_MD_GetRoomList) ProtoMessage() {}
+
+func (x *CS_MD_GetRoomList) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[2]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CS_MD_GetRoomList.ProtoReflect.Descriptor instead.
+func (*CS_MD_GetRoomList) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *CS_MD_GetRoomList) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *CS_MD_GetRoomList) GetUid() string {
+	if x != nil {
+		return x.Uid
+	}
+	return ""
+}
+
+// 多人副本, 加入房间
+type CS_MD_EnterRoom struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid int32  `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	Uid    string `protobuf:"bytes,2,opt,name=Uid,proto3" json:"Uid,omitempty"`
+	RoomId int32  `protobuf:"varint,3,opt,name=RoomId,proto3" json:"RoomId,omitempty"` // 房间id
+}
+
+func (x *CS_MD_EnterRoom) Reset() {
+	*x = CS_MD_EnterRoom{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CS_MD_EnterRoom) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CS_MD_EnterRoom) ProtoMessage() {}
+
+func (x *CS_MD_EnterRoom) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[3]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CS_MD_EnterRoom.ProtoReflect.Descriptor instead.
+func (*CS_MD_EnterRoom) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *CS_MD_EnterRoom) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *CS_MD_EnterRoom) GetUid() string {
+	if x != nil {
+		return x.Uid
+	}
+	return ""
+}
+
+func (x *CS_MD_EnterRoom) GetRoomId() int32 {
+	if x != nil {
+		return x.RoomId
+	}
+	return 0
+}
+
+// 多人副本, 离开房间
+type CS_MD_LeaveRoom struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid int32  `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	Uid    string `protobuf:"bytes,2,opt,name=Uid,proto3" json:"Uid,omitempty"` //int32 RoomId=3;    // 房间id (理论上已经处于房间中不需要此字段)
+}
+
+func (x *CS_MD_LeaveRoom) Reset() {
+	*x = CS_MD_LeaveRoom{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CS_MD_LeaveRoom) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CS_MD_LeaveRoom) ProtoMessage() {}
+
+func (x *CS_MD_LeaveRoom) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[4]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CS_MD_LeaveRoom.ProtoReflect.Descriptor instead.
+func (*CS_MD_LeaveRoom) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *CS_MD_LeaveRoom) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *CS_MD_LeaveRoom) GetUid() string {
+	if x != nil {
+		return x.Uid
+	}
+	return ""
+}
+
+// 多人副本, 开始游戏(创建者)
+type CS_MD_BeginDup struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid int32  `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	Uid    string `protobuf:"bytes,2,opt,name=Uid,proto3" json:"Uid,omitempty"` //int32 RoomId=3;    // 房间id (理论上已经处于房间中不需要此字段)
+}
+
+func (x *CS_MD_BeginDup) Reset() {
+	*x = CS_MD_BeginDup{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CS_MD_BeginDup) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CS_MD_BeginDup) ProtoMessage() {}
+
+func (x *CS_MD_BeginDup) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[5]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CS_MD_BeginDup.ProtoReflect.Descriptor instead.
+func (*CS_MD_BeginDup) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *CS_MD_BeginDup) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *CS_MD_BeginDup) GetUid() string {
+	if x != nil {
+		return x.Uid
+	}
+	return ""
+}
+
+type CS_BT_Login struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid int32  `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	Uid    string `protobuf:"bytes,2,opt,name=Uid,proto3" json:"Uid,omitempty"`
+	Msg    string `protobuf:"bytes,3,opt,name=Msg,proto3" json:"Msg,omitempty"`
+}
+
+func (x *CS_BT_Login) Reset() {
+	*x = CS_BT_Login{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CS_BT_Login) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CS_BT_Login) ProtoMessage() {}
+
+func (x *CS_BT_Login) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[6]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CS_BT_Login.ProtoReflect.Descriptor instead.
+func (*CS_BT_Login) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *CS_BT_Login) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *CS_BT_Login) GetUid() string {
+	if x != nil {
+		return x.Uid
+	}
+	return ""
+}
+
+func (x *CS_BT_Login) GetMsg() string {
+	if x != nil {
+		return x.Msg
+	}
+	return ""
+}
+
+// 查询组队列表
+type CS_BT_PeopleList struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid int32  `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	Uid    string `protobuf:"bytes,2,opt,name=Uid,proto3" json:"Uid,omitempty"`
+}
+
+func (x *CS_BT_PeopleList) Reset() {
+	*x = CS_BT_PeopleList{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CS_BT_PeopleList) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CS_BT_PeopleList) ProtoMessage() {}
+
+func (x *CS_BT_PeopleList) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[7]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CS_BT_PeopleList.ProtoReflect.Descriptor instead.
+func (*CS_BT_PeopleList) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *CS_BT_PeopleList) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *CS_BT_PeopleList) GetUid() string {
+	if x != nil {
+		return x.Uid
+	}
+	return ""
+}
+
+type CS_BT_Status struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid       int32  `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	SenderUid    string `protobuf:"bytes,2,opt,name=SenderUid,proto3" json:"SenderUid,omitempty"`
+	PropertyName string `protobuf:"bytes,3,opt,name=PropertyName,proto3" json:"PropertyName,omitempty"`
+	Value        string `protobuf:"bytes,4,opt,name=Value,proto3" json:"Value,omitempty"`
+}
+
+func (x *CS_BT_Status) Reset() {
+	*x = CS_BT_Status{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CS_BT_Status) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CS_BT_Status) ProtoMessage() {}
+
+func (x *CS_BT_Status) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[8]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CS_BT_Status.ProtoReflect.Descriptor instead.
+func (*CS_BT_Status) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *CS_BT_Status) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *CS_BT_Status) GetSenderUid() string {
+	if x != nil {
+		return x.SenderUid
+	}
+	return ""
+}
+
+func (x *CS_BT_Status) GetPropertyName() string {
+	if x != nil {
+		return x.PropertyName
+	}
+	return ""
+}
+
+func (x *CS_BT_Status) GetValue() string {
+	if x != nil {
+		return x.Value
+	}
+	return ""
+}
+
+type CS_BT_Position struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid    int32   `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	SenderUid string  `protobuf:"bytes,2,opt,name=SenderUid,proto3" json:"SenderUid,omitempty"`
+	X         float32 `protobuf:"fixed32,3,opt,name=X,proto3" json:"X,omitempty"`
+	Y         float32 `protobuf:"fixed32,4,opt,name=Y,proto3" json:"Y,omitempty"`
+	Z         float32 `protobuf:"fixed32,5,opt,name=Z,proto3" json:"Z,omitempty"`
+}
+
+func (x *CS_BT_Position) Reset() {
+	*x = CS_BT_Position{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CS_BT_Position) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CS_BT_Position) ProtoMessage() {}
+
+func (x *CS_BT_Position) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[9]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CS_BT_Position.ProtoReflect.Descriptor instead.
+func (*CS_BT_Position) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *CS_BT_Position) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *CS_BT_Position) GetSenderUid() string {
+	if x != nil {
+		return x.SenderUid
+	}
+	return ""
+}
+
+func (x *CS_BT_Position) GetX() float32 {
+	if x != nil {
+		return x.X
+	}
+	return 0
+}
+
+func (x *CS_BT_Position) GetY() float32 {
+	if x != nil {
+		return x.Y
+	}
+	return 0
+}
+
+func (x *CS_BT_Position) GetZ() float32 {
+	if x != nil {
+		return x.Z
+	}
+	return 0
+}
+
+// 战斗服务, 广播
+type CS_BT_BroadCast struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid    int32  `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	SenderUid string `protobuf:"bytes,2,opt,name=SenderUid,proto3" json:"SenderUid,omitempty"`
+	Msg       string `protobuf:"bytes,3,opt,name=Msg,proto3" json:"Msg,omitempty"`
+}
+
+func (x *CS_BT_BroadCast) Reset() {
+	*x = CS_BT_BroadCast{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CS_BT_BroadCast) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CS_BT_BroadCast) ProtoMessage() {}
+
+func (x *CS_BT_BroadCast) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[10]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CS_BT_BroadCast.ProtoReflect.Descriptor instead.
+func (*CS_BT_BroadCast) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *CS_BT_BroadCast) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *CS_BT_BroadCast) GetSenderUid() string {
+	if x != nil {
+		return x.SenderUid
+	}
+	return ""
+}
+
+func (x *CS_BT_BroadCast) GetMsg() string {
+	if x != nil {
+		return x.Msg
+	}
+	return ""
+}
+
+type CS_BT_Over struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid    int32  `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	SenderUid string `protobuf:"bytes,2,opt,name=SenderUid,proto3" json:"SenderUid,omitempty"`
+	Msg       string `protobuf:"bytes,3,opt,name=Msg,proto3" json:"Msg,omitempty"`
+}
+
+func (x *CS_BT_Over) Reset() {
+	*x = CS_BT_Over{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CS_BT_Over) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CS_BT_Over) ProtoMessage() {}
+
+func (x *CS_BT_Over) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[11]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CS_BT_Over.ProtoReflect.Descriptor instead.
+func (*CS_BT_Over) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{11}
+}
+
+func (x *CS_BT_Over) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *CS_BT_Over) GetSenderUid() string {
+	if x != nil {
+		return x.SenderUid
+	}
+	return ""
+}
+
+func (x *CS_BT_Over) GetMsg() string {
+	if x != nil {
+		return x.Msg
+	}
+	return ""
+}
+
+//
+// 加入房间成功
+type SC_MD_EnterLobby struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *SC_MD_EnterLobby) Reset() {
+	*x = SC_MD_EnterLobby{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SC_MD_EnterLobby) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SC_MD_EnterLobby) ProtoMessage() {}
+
+func (x *SC_MD_EnterLobby) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[12]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SC_MD_EnterLobby.ProtoReflect.Descriptor instead.
+func (*SC_MD_EnterLobby) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{12}
+}
+
+// 多人副本, 创建房间
+type SC_MD_CreateRoom struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid int32  `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	Uid    string `protobuf:"bytes,2,opt,name=Uid,proto3" json:"Uid,omitempty"`
+	Mapid  int32  `protobuf:"varint,3,opt,name=Mapid,proto3" json:"Mapid,omitempty"`
+	RoomId int32  `protobuf:"varint,4,opt,name=RoomId,proto3" json:"RoomId,omitempty"` // 房间id (服务端分配)
+}
+
+func (x *SC_MD_CreateRoom) Reset() {
+	*x = SC_MD_CreateRoom{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SC_MD_CreateRoom) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SC_MD_CreateRoom) ProtoMessage() {}
+
+func (x *SC_MD_CreateRoom) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[13]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SC_MD_CreateRoom.ProtoReflect.Descriptor instead.
+func (*SC_MD_CreateRoom) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{13}
+}
+
+func (x *SC_MD_CreateRoom) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *SC_MD_CreateRoom) GetUid() string {
+	if x != nil {
+		return x.Uid
+	}
+	return ""
+}
+
+func (x *SC_MD_CreateRoom) GetMapid() int32 {
+	if x != nil {
+		return x.Mapid
+	}
+	return 0
+}
+
+func (x *SC_MD_CreateRoom) GetRoomId() int32 {
+	if x != nil {
+		return x.RoomId
+	}
+	return 0
+}
+
+// 多人副本, 申请房间(列表)
+type SC_MD_GetRoomList struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	RoomInfos []*SC_MD_GetRoomList_RoomInfo `protobuf:"bytes,1,rep,name=RoomInfos,proto3" json:"RoomInfos,omitempty"`
+}
+
+func (x *SC_MD_GetRoomList) Reset() {
+	*x = SC_MD_GetRoomList{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SC_MD_GetRoomList) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SC_MD_GetRoomList) ProtoMessage() {}
+
+func (x *SC_MD_GetRoomList) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[14]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SC_MD_GetRoomList.ProtoReflect.Descriptor instead.
+func (*SC_MD_GetRoomList) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *SC_MD_GetRoomList) GetRoomInfos() []*SC_MD_GetRoomList_RoomInfo {
+	if x != nil {
+		return x.RoomInfos
+	}
+	return nil
+}
+
+// 多人副本, 加入房间
+type SC_MD_EnterRoom struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid     int32    `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	Uid        string   `protobuf:"bytes,2,opt,name=Uid,proto3" json:"Uid,omitempty"` // (新进id)
+	Mapid      int32    `protobuf:"varint,3,opt,name=Mapid,proto3" json:"Mapid,omitempty"`
+	Ip         string   `protobuf:"bytes,4,opt,name=Ip,proto3" json:"Ip,omitempty"`      // 战斗服务器ip
+	Port       int32    `protobuf:"varint,5,opt,name=Port,proto3" json:"Port,omitempty"` // 战斗服务器端口
+	PlayerUids []string `protobuf:"bytes,6,rep,name=PlayerUids,proto3" json:"PlayerUids,omitempty"`
+}
+
+func (x *SC_MD_EnterRoom) Reset() {
+	*x = SC_MD_EnterRoom{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SC_MD_EnterRoom) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SC_MD_EnterRoom) ProtoMessage() {}
+
+func (x *SC_MD_EnterRoom) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[15]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SC_MD_EnterRoom.ProtoReflect.Descriptor instead.
+func (*SC_MD_EnterRoom) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{15}
+}
+
+func (x *SC_MD_EnterRoom) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *SC_MD_EnterRoom) GetUid() string {
+	if x != nil {
+		return x.Uid
+	}
+	return ""
+}
+
+func (x *SC_MD_EnterRoom) GetMapid() int32 {
+	if x != nil {
+		return x.Mapid
+	}
+	return 0
+}
+
+func (x *SC_MD_EnterRoom) GetIp() string {
+	if x != nil {
+		return x.Ip
+	}
+	return ""
+}
+
+func (x *SC_MD_EnterRoom) GetPort() int32 {
+	if x != nil {
+		return x.Port
+	}
+	return 0
+}
+
+func (x *SC_MD_EnterRoom) GetPlayerUids() []string {
+	if x != nil {
+		return x.PlayerUids
+	}
+	return nil
+}
+
+// 多人副本, 离开房间
+type SC_MD_LeaveRoom struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid int32  `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	Uid    string `protobuf:"bytes,2,opt,name=Uid,proto3" json:"Uid,omitempty"` // (离开id)
+}
+
+func (x *SC_MD_LeaveRoom) Reset() {
+	*x = SC_MD_LeaveRoom{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SC_MD_LeaveRoom) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SC_MD_LeaveRoom) ProtoMessage() {}
+
+func (x *SC_MD_LeaveRoom) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[16]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SC_MD_LeaveRoom.ProtoReflect.Descriptor instead.
+func (*SC_MD_LeaveRoom) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{16}
+}
+
+func (x *SC_MD_LeaveRoom) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *SC_MD_LeaveRoom) GetUid() string {
+	if x != nil {
+		return x.Uid
+	}
+	return ""
+}
+
+// 多人副本, 开始游戏(创建者)
+type SC_MD_BeginDup struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Battleserver     string `protobuf:"bytes,1,opt,name=Battleserver,proto3" json:"Battleserver,omitempty"`
+	BattleServerPort int32  `protobuf:"varint,2,opt,name=BattleServerPort,proto3" json:"BattleServerPort,omitempty"`
+	Mapid            int32  `protobuf:"varint,3,opt,name=Mapid,proto3" json:"Mapid,omitempty"`
+}
+
+func (x *SC_MD_BeginDup) Reset() {
+	*x = SC_MD_BeginDup{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SC_MD_BeginDup) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SC_MD_BeginDup) ProtoMessage() {}
+
+func (x *SC_MD_BeginDup) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[17]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SC_MD_BeginDup.ProtoReflect.Descriptor instead.
+func (*SC_MD_BeginDup) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *SC_MD_BeginDup) GetBattleserver() string {
+	if x != nil {
+		return x.Battleserver
+	}
+	return ""
+}
+
+func (x *SC_MD_BeginDup) GetBattleServerPort() int32 {
+	if x != nil {
+		return x.BattleServerPort
+	}
+	return 0
+}
+
+func (x *SC_MD_BeginDup) GetMapid() int32 {
+	if x != nil {
+		return x.Mapid
+	}
+	return 0
+}
+
+type SC_BT_Login struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid int32  `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	Uid    string `protobuf:"bytes,2,opt,name=Uid,proto3" json:"Uid,omitempty"`
+	Msg    string `protobuf:"bytes,3,opt,name=Msg,proto3" json:"Msg,omitempty"`
+}
+
+func (x *SC_BT_Login) Reset() {
+	*x = SC_BT_Login{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SC_BT_Login) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SC_BT_Login) ProtoMessage() {}
+
+func (x *SC_BT_Login) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[18]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SC_BT_Login.ProtoReflect.Descriptor instead.
+func (*SC_BT_Login) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{18}
+}
+
+func (x *SC_BT_Login) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *SC_BT_Login) GetUid() string {
+	if x != nil {
+		return x.Uid
+	}
+	return ""
+}
+
+func (x *SC_BT_Login) GetMsg() string {
+	if x != nil {
+		return x.Msg
+	}
+	return ""
+}
+
+// 战斗服务器, 玩家列表更新
+type SC_BT_PeopleList struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid     int32    `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	NewerUid   string   `protobuf:"bytes,2,opt,name=NewerUid,proto3" json:"NewerUid,omitempty"` // (新进id)
+	PlayerUids []string `protobuf:"bytes,3,rep,name=PlayerUids,proto3" json:"PlayerUids,omitempty"`
+}
+
+func (x *SC_BT_PeopleList) Reset() {
+	*x = SC_BT_PeopleList{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SC_BT_PeopleList) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SC_BT_PeopleList) ProtoMessage() {}
+
+func (x *SC_BT_PeopleList) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[19]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SC_BT_PeopleList.ProtoReflect.Descriptor instead.
+func (*SC_BT_PeopleList) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{19}
+}
+
+func (x *SC_BT_PeopleList) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *SC_BT_PeopleList) GetNewerUid() string {
+	if x != nil {
+		return x.NewerUid
+	}
+	return ""
+}
+
+func (x *SC_BT_PeopleList) GetPlayerUids() []string {
+	if x != nil {
+		return x.PlayerUids
+	}
+	return nil
+}
+
+// 战斗服务 同步状态
+type SC_BT_Status struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid    int32  `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	SenderUid string `protobuf:"bytes,2,opt,name=SenderUid,proto3" json:"SenderUid,omitempty"`
+	// 属性名称
+	PropertyName string `protobuf:"bytes,3,opt,name=PropertyName,proto3" json:"PropertyName,omitempty"`
+	// 属性值
+	Value string `protobuf:"bytes,4,opt,name=Value,proto3" json:"Value,omitempty"`
+}
+
+func (x *SC_BT_Status) Reset() {
+	*x = SC_BT_Status{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SC_BT_Status) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SC_BT_Status) ProtoMessage() {}
+
+func (x *SC_BT_Status) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[20]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SC_BT_Status.ProtoReflect.Descriptor instead.
+func (*SC_BT_Status) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{20}
+}
+
+func (x *SC_BT_Status) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *SC_BT_Status) GetSenderUid() string {
+	if x != nil {
+		return x.SenderUid
+	}
+	return ""
+}
+
+func (x *SC_BT_Status) GetPropertyName() string {
+	if x != nil {
+		return x.PropertyName
+	}
+	return ""
+}
+
+func (x *SC_BT_Status) GetValue() string {
+	if x != nil {
+		return x.Value
+	}
+	return ""
+}
+
+// 战斗服务 同步位置
+type SC_BT_Position struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid int32 `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	// 发送者uid
+	SenderUid string  `protobuf:"bytes,2,opt,name=SenderUid,proto3" json:"SenderUid,omitempty"`
+	X         float32 `protobuf:"fixed32,3,opt,name=X,proto3" json:"X,omitempty"`
+	Y         float32 `protobuf:"fixed32,4,opt,name=Y,proto3" json:"Y,omitempty"`
+	Z         float32 `protobuf:"fixed32,5,opt,name=Z,proto3" json:"Z,omitempty"`
+}
+
+func (x *SC_BT_Position) Reset() {
+	*x = SC_BT_Position{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SC_BT_Position) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SC_BT_Position) ProtoMessage() {}
+
+func (x *SC_BT_Position) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[21]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SC_BT_Position.ProtoReflect.Descriptor instead.
+func (*SC_BT_Position) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{21}
+}
+
+func (x *SC_BT_Position) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *SC_BT_Position) GetSenderUid() string {
+	if x != nil {
+		return x.SenderUid
+	}
+	return ""
+}
+
+func (x *SC_BT_Position) GetX() float32 {
+	if x != nil {
+		return x.X
+	}
+	return 0
+}
+
+func (x *SC_BT_Position) GetY() float32 {
+	if x != nil {
+		return x.Y
+	}
+	return 0
+}
+
+func (x *SC_BT_Position) GetZ() float32 {
+	if x != nil {
+		return x.Z
+	}
+	return 0
+}
+
+// 战斗服务 广播
+type SC_BT_BroadCast struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid int32 `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	// 发送者uid
+	SenderUid string `protobuf:"bytes,2,opt,name=SenderUid,proto3" json:"SenderUid,omitempty"`
+	Msg       string `protobuf:"bytes,3,opt,name=Msg,proto3" json:"Msg,omitempty"`
+}
+
+func (x *SC_BT_BroadCast) Reset() {
+	*x = SC_BT_BroadCast{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SC_BT_BroadCast) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SC_BT_BroadCast) ProtoMessage() {}
+
+func (x *SC_BT_BroadCast) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[22]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SC_BT_BroadCast.ProtoReflect.Descriptor instead.
+func (*SC_BT_BroadCast) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{22}
+}
+
+func (x *SC_BT_BroadCast) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *SC_BT_BroadCast) GetSenderUid() string {
+	if x != nil {
+		return x.SenderUid
+	}
+	return ""
+}
+
+func (x *SC_BT_BroadCast) GetMsg() string {
+	if x != nil {
+		return x.Msg
+	}
+	return ""
+}
+
+// 战斗服务,结束
+type SC_BT_Over struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Zoneid    int32  `protobuf:"varint,1,opt,name=Zoneid,proto3" json:"Zoneid,omitempty"`
+	SenderUid string `protobuf:"bytes,2,opt,name=SenderUid,proto3" json:"SenderUid,omitempty"`
+	Msg       string `protobuf:"bytes,3,opt,name=Msg,proto3" json:"Msg,omitempty"`
+}
+
+func (x *SC_BT_Over) Reset() {
+	*x = SC_BT_Over{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SC_BT_Over) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SC_BT_Over) ProtoMessage() {}
+
+func (x *SC_BT_Over) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[23]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SC_BT_Over.ProtoReflect.Descriptor instead.
+func (*SC_BT_Over) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{23}
+}
+
+func (x *SC_BT_Over) GetZoneid() int32 {
+	if x != nil {
+		return x.Zoneid
+	}
+	return 0
+}
+
+func (x *SC_BT_Over) GetSenderUid() string {
+	if x != nil {
+		return x.SenderUid
+	}
+	return ""
+}
+
+func (x *SC_BT_Over) GetMsg() string {
+	if x != nil {
+		return x.Msg
+	}
+	return ""
+}
+
+// 多人副本在战斗服创建房间
+type SS_CreateBattleServer struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	RoomId     int32    `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"`
+	PlayerUids []string `protobuf:"bytes,2,rep,name=PlayerUids,proto3" json:"PlayerUids,omitempty"`
+}
+
+func (x *SS_CreateBattleServer) Reset() {
+	*x = SS_CreateBattleServer{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[24]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SS_CreateBattleServer) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SS_CreateBattleServer) ProtoMessage() {}
+
+func (x *SS_CreateBattleServer) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[24]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SS_CreateBattleServer.ProtoReflect.Descriptor instead.
+func (*SS_CreateBattleServer) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{24}
+}
+
+func (x *SS_CreateBattleServer) GetRoomId() int32 {
+	if x != nil {
+		return x.RoomId
+	}
+	return 0
+}
+
+func (x *SS_CreateBattleServer) GetPlayerUids() []string {
+	if x != nil {
+		return x.PlayerUids
+	}
+	return nil
+}
+
+// 多人副本,创建战斗房间OK
+type SS_CreateBattleServerOK struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *SS_CreateBattleServerOK) Reset() {
+	*x = SS_CreateBattleServerOK{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SS_CreateBattleServerOK) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SS_CreateBattleServerOK) ProtoMessage() {}
+
+func (x *SS_CreateBattleServerOK) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[25]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SS_CreateBattleServerOK.ProtoReflect.Descriptor instead.
+func (*SS_CreateBattleServerOK) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{25}
+}
+
+type SC_MD_GetRoomList_RoomInfo struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	RoomId           int32    `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"`
+	Mapid            int32    `protobuf:"varint,2,opt,name=Mapid,proto3" json:"Mapid,omitempty"`
+	PlayerUids       []string `protobuf:"bytes,3,rep,name=PlayerUids,proto3" json:"PlayerUids,omitempty"` //??
+	Battleserver     string   `protobuf:"bytes,4,opt,name=Battleserver,proto3" json:"Battleserver,omitempty"`
+	BattleServerPort int32    `protobuf:"varint,5,opt,name=BattleServerPort,proto3" json:"BattleServerPort,omitempty"`
+}
+
+func (x *SC_MD_GetRoomList_RoomInfo) Reset() {
+	*x = SC_MD_GetRoomList_RoomInfo{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_pb_MultiDup_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SC_MD_GetRoomList_RoomInfo) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SC_MD_GetRoomList_RoomInfo) ProtoMessage() {}
+
+func (x *SC_MD_GetRoomList_RoomInfo) ProtoReflect() protoreflect.Message {
+	mi := &file_pb_MultiDup_proto_msgTypes[26]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SC_MD_GetRoomList_RoomInfo.ProtoReflect.Descriptor instead.
+func (*SC_MD_GetRoomList_RoomInfo) Descriptor() ([]byte, []int) {
+	return file_pb_MultiDup_proto_rawDescGZIP(), []int{14, 0}
+}
+
+func (x *SC_MD_GetRoomList_RoomInfo) GetRoomId() int32 {
+	if x != nil {
+		return x.RoomId
+	}
+	return 0
+}
+
+func (x *SC_MD_GetRoomList_RoomInfo) GetMapid() int32 {
+	if x != nil {
+		return x.Mapid
+	}
+	return 0
+}
+
+func (x *SC_MD_GetRoomList_RoomInfo) GetPlayerUids() []string {
+	if x != nil {
+		return x.PlayerUids
+	}
+	return nil
+}
+
+func (x *SC_MD_GetRoomList_RoomInfo) GetBattleserver() string {
+	if x != nil {
+		return x.Battleserver
+	}
+	return ""
+}
+
+func (x *SC_MD_GetRoomList_RoomInfo) GetBattleServerPort() int32 {
+	if x != nil {
+		return x.BattleServerPort
+	}
+	return 0
+}
+
+var File_pb_MultiDup_proto protoreflect.FileDescriptor
+
+var file_pb_MultiDup_proto_rawDesc = []byte{
+	0x0a, 0x11, 0x70, 0x62, 0x2f, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x44, 0x75, 0x70, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x12, 0x08, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x44, 0x75, 0x70, 0x22, 0x3c, 0x0a,
+	0x10, 0x43, 0x53, 0x5f, 0x4d, 0x44, 0x5f, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x4c, 0x6f, 0x62, 0x62,
+	0x79, 0x12, 0x16, 0x0a, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x69, 0x64,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x69, 0x64, 0x22, 0x52, 0x0a, 0x10, 0x43,
+	0x53, 0x5f, 0x4d, 0x44, 0x5f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12,
+	0x16, 0x0a, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x69, 0x64, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x61, 0x70,
+	0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, 0x61, 0x70, 0x69, 0x64, 0x22,
+	0x3d, 0x0a, 0x11, 0x43, 0x53, 0x5f, 0x4d, 0x44, 0x5f, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d,
+	0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03,
+	0x55, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x69, 0x64, 0x22, 0x53,
+	0x0a, 0x0f, 0x43, 0x53, 0x5f, 0x4d, 0x44, 0x5f, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6f,
+	0x6d, 0x12, 0x16, 0x0a, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x69, 0x64,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52,
+	0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f,
+	0x6d, 0x49, 0x64, 0x22, 0x3b, 0x0a, 0x0f, 0x43, 0x53, 0x5f, 0x4d, 0x44, 0x5f, 0x4c, 0x65, 0x61,
+	0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x10,
+	0x0a, 0x03, 0x55, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x69, 0x64,
+	0x22, 0x3a, 0x0a, 0x0e, 0x43, 0x53, 0x5f, 0x4d, 0x44, 0x5f, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x44,
+	0x75, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x69,
+	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x69, 0x64, 0x22, 0x49, 0x0a, 0x0b,
+	0x43, 0x53, 0x5f, 0x42, 0x54, 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x5a,
+	0x6f, 0x6e, 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x5a, 0x6f, 0x6e,
+	0x65, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x03, 0x55, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x3c, 0x0a, 0x10, 0x43, 0x53, 0x5f, 0x42, 0x54,
+	0x5f, 0x50, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x5a,
+	0x6f, 0x6e, 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x5a, 0x6f, 0x6e,
+	0x65, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x03, 0x55, 0x69, 0x64, 0x22, 0x7e, 0x0a, 0x0c, 0x43, 0x53, 0x5f, 0x42, 0x54, 0x5f, 0x53,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x1c, 0x0a,
+	0x09, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x09, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x50,
+	0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12,
+	0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x70, 0x0a, 0x0e, 0x43, 0x53, 0x5f, 0x42, 0x54, 0x5f, 0x50,
+	0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69,
+	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x12,
+	0x1c, 0x0a, 0x09, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x09, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x69, 0x64, 0x12, 0x0c, 0x0a,
+	0x01, 0x58, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x01, 0x58, 0x12, 0x0c, 0x0a, 0x01, 0x59,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x01, 0x59, 0x12, 0x0c, 0x0a, 0x01, 0x5a, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x02, 0x52, 0x01, 0x5a, 0x22, 0x59, 0x0a, 0x0f, 0x43, 0x53, 0x5f, 0x42, 0x54,
+	0x5f, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x5a, 0x6f,
+	0x6e, 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x5a, 0x6f, 0x6e, 0x65,
+	0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x69, 0x64, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x69, 0x64,
+	0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d,
+	0x73, 0x67, 0x22, 0x54, 0x0a, 0x0a, 0x43, 0x53, 0x5f, 0x42, 0x54, 0x5f, 0x4f, 0x76, 0x65, 0x72,
+	0x12, 0x16, 0x0a, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x65, 0x6e, 0x64,
+	0x65, 0x72, 0x55, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x53, 0x65, 0x6e,
+	0x64, 0x65, 0x72, 0x55, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x12, 0x0a, 0x10, 0x53, 0x43, 0x5f, 0x4d,
+	0x44, 0x5f, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x4c, 0x6f, 0x62, 0x62, 0x79, 0x22, 0x6a, 0x0a, 0x10,
+	0x53, 0x43, 0x5f, 0x4d, 0x44, 0x5f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d,
+	0x12, 0x16, 0x0a, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x69, 0x64, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x61,
+	0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, 0x61, 0x70, 0x69, 0x64,
+	0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x82, 0x02, 0x0a, 0x11, 0x53, 0x43, 0x5f,
+	0x4d, 0x44, 0x5f, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x42,
+	0x0a, 0x09, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x24, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x44, 0x75, 0x70, 0x2e, 0x53, 0x43, 0x5f,
+	0x4d, 0x44, 0x5f, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x52,
+	0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66,
+	0x6f, 0x73, 0x1a, 0xa8, 0x01, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12,
+	0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x61, 0x70, 0x69, 0x64,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, 0x61, 0x70, 0x69, 0x64, 0x12, 0x1e, 0x0a,
+	0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x55, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
+	0x09, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x55, 0x69, 0x64, 0x73, 0x12, 0x22, 0x0a,
+	0x0c, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0c, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65,
+	0x72, 0x12, 0x2a, 0x0a, 0x10, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65,
+	0x72, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x42, 0x61, 0x74,
+	0x74, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x22, 0x95, 0x01,
+	0x0a, 0x0f, 0x53, 0x43, 0x5f, 0x4d, 0x44, 0x5f, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6f,
+	0x6d, 0x12, 0x16, 0x0a, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x05, 0x52, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x69, 0x64,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x4d,
+	0x61, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, 0x61, 0x70, 0x69,
+	0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49,
+	0x70, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x04, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x55,
+	0x69, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65,
+	0x72, 0x55, 0x69, 0x64, 0x73, 0x22, 0x3b, 0x0a, 0x0f, 0x53, 0x43, 0x5f, 0x4d, 0x44, 0x5f, 0x4c,
+	0x65, 0x61, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x5a, 0x6f, 0x6e, 0x65,
+	0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64,
+	0x12, 0x10, 0x0a, 0x03, 0x55, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55,
+	0x69, 0x64, 0x22, 0x76, 0x0a, 0x0e, 0x53, 0x43, 0x5f, 0x4d, 0x44, 0x5f, 0x42, 0x65, 0x67, 0x69,
+	0x6e, 0x44, 0x75, 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x73, 0x65,
+	0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x42, 0x61, 0x74, 0x74,
+	0x6c, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x42, 0x61, 0x74, 0x74,
+	0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x10, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
+	0x50, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x61, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, 0x61, 0x70, 0x69, 0x64, 0x22, 0x49, 0x0a, 0x0b, 0x53, 0x43,
+	0x5f, 0x42, 0x54, 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x5a, 0x6f, 0x6e,
+	0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69,
+	0x64, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
+	0x55, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x66, 0x0a, 0x10, 0x53, 0x43, 0x5f, 0x42, 0x54, 0x5f, 0x50,
+	0x65, 0x6f, 0x70, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x5a, 0x6f, 0x6e,
+	0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69,
+	0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x65, 0x77, 0x65, 0x72, 0x55, 0x69, 0x64, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x08, 0x4e, 0x65, 0x77, 0x65, 0x72, 0x55, 0x69, 0x64, 0x12, 0x1e, 0x0a,
+	0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x55, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
+	0x09, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x55, 0x69, 0x64, 0x73, 0x22, 0x7e, 0x0a,
+	0x0c, 0x53, 0x43, 0x5f, 0x42, 0x54, 0x5f, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a,
+	0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x5a,
+	0x6f, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55,
+	0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72,
+	0x55, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x4e,
+	0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x65,
+	0x72, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x70, 0x0a,
+	0x0e, 0x53, 0x43, 0x5f, 0x42, 0x54, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+	0x16, 0x0a, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x65, 0x6e, 0x64, 0x65,
+	0x72, 0x55, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x53, 0x65, 0x6e, 0x64,
+	0x65, 0x72, 0x55, 0x69, 0x64, 0x12, 0x0c, 0x0a, 0x01, 0x58, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02,
+	0x52, 0x01, 0x58, 0x12, 0x0c, 0x0a, 0x01, 0x59, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x01,
+	0x59, 0x12, 0x0c, 0x0a, 0x01, 0x5a, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x01, 0x5a, 0x22,
+	0x59, 0x0a, 0x0f, 0x53, 0x43, 0x5f, 0x42, 0x54, 0x5f, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x43, 0x61,
+	0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x65,
+	0x6e, 0x64, 0x65, 0x72, 0x55, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x53,
+	0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x54, 0x0a, 0x0a, 0x53, 0x43,
+	0x5f, 0x42, 0x54, 0x5f, 0x4f, 0x76, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x5a, 0x6f, 0x6e, 0x65,
+	0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x5a, 0x6f, 0x6e, 0x65, 0x69, 0x64,
+	0x12, 0x1c, 0x0a, 0x09, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x69, 0x64, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x09, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x69, 0x64, 0x12, 0x10,
+	0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67,
+	0x22, 0x4f, 0x0a, 0x15, 0x53, 0x53, 0x5f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74,
+	0x74, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f,
+	0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49,
+	0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x55, 0x69, 0x64, 0x73, 0x18,
+	0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x55, 0x69, 0x64,
+	0x73, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x53, 0x5f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61,
+	0x74, 0x74, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4f, 0x4b, 0x42, 0x0d, 0x5a, 0x0b,
+	0x70, 0x62, 0x2f, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x44, 0x75, 0x70, 0x62, 0x06, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x33,
+}
+
+var (
+	file_pb_MultiDup_proto_rawDescOnce sync.Once
+	file_pb_MultiDup_proto_rawDescData = file_pb_MultiDup_proto_rawDesc
+)
+
+func file_pb_MultiDup_proto_rawDescGZIP() []byte {
+	file_pb_MultiDup_proto_rawDescOnce.Do(func() {
+		file_pb_MultiDup_proto_rawDescData = protoimpl.X.CompressGZIP(file_pb_MultiDup_proto_rawDescData)
+	})
+	return file_pb_MultiDup_proto_rawDescData
+}
+
+var file_pb_MultiDup_proto_msgTypes = make([]protoimpl.MessageInfo, 27)
+var file_pb_MultiDup_proto_goTypes = []interface{}{
+	(*CS_MD_EnterLobby)(nil),           // 0: MultiDup.CS_MD_EnterLobby
+	(*CS_MD_CreateRoom)(nil),           // 1: MultiDup.CS_MD_CreateRoom
+	(*CS_MD_GetRoomList)(nil),          // 2: MultiDup.CS_MD_GetRoomList
+	(*CS_MD_EnterRoom)(nil),            // 3: MultiDup.CS_MD_EnterRoom
+	(*CS_MD_LeaveRoom)(nil),            // 4: MultiDup.CS_MD_LeaveRoom
+	(*CS_MD_BeginDup)(nil),             // 5: MultiDup.CS_MD_BeginDup
+	(*CS_BT_Login)(nil),                // 6: MultiDup.CS_BT_Login
+	(*CS_BT_PeopleList)(nil),           // 7: MultiDup.CS_BT_PeopleList
+	(*CS_BT_Status)(nil),               // 8: MultiDup.CS_BT_Status
+	(*CS_BT_Position)(nil),             // 9: MultiDup.CS_BT_Position
+	(*CS_BT_BroadCast)(nil),            // 10: MultiDup.CS_BT_BroadCast
+	(*CS_BT_Over)(nil),                 // 11: MultiDup.CS_BT_Over
+	(*SC_MD_EnterLobby)(nil),           // 12: MultiDup.SC_MD_EnterLobby
+	(*SC_MD_CreateRoom)(nil),           // 13: MultiDup.SC_MD_CreateRoom
+	(*SC_MD_GetRoomList)(nil),          // 14: MultiDup.SC_MD_GetRoomList
+	(*SC_MD_EnterRoom)(nil),            // 15: MultiDup.SC_MD_EnterRoom
+	(*SC_MD_LeaveRoom)(nil),            // 16: MultiDup.SC_MD_LeaveRoom
+	(*SC_MD_BeginDup)(nil),             // 17: MultiDup.SC_MD_BeginDup
+	(*SC_BT_Login)(nil),                // 18: MultiDup.SC_BT_Login
+	(*SC_BT_PeopleList)(nil),           // 19: MultiDup.SC_BT_PeopleList
+	(*SC_BT_Status)(nil),               // 20: MultiDup.SC_BT_Status
+	(*SC_BT_Position)(nil),             // 21: MultiDup.SC_BT_Position
+	(*SC_BT_BroadCast)(nil),            // 22: MultiDup.SC_BT_BroadCast
+	(*SC_BT_Over)(nil),                 // 23: MultiDup.SC_BT_Over
+	(*SS_CreateBattleServer)(nil),      // 24: MultiDup.SS_CreateBattleServer
+	(*SS_CreateBattleServerOK)(nil),    // 25: MultiDup.SS_CreateBattleServerOK
+	(*SC_MD_GetRoomList_RoomInfo)(nil), // 26: MultiDup.SC_MD_GetRoomList.RoomInfo
+}
+var file_pb_MultiDup_proto_depIdxs = []int32{
+	26, // 0: MultiDup.SC_MD_GetRoomList.RoomInfos:type_name -> MultiDup.SC_MD_GetRoomList.RoomInfo
+	1,  // [1:1] is the sub-list for method output_type
+	1,  // [1:1] is the sub-list for method input_type
+	1,  // [1:1] is the sub-list for extension type_name
+	1,  // [1:1] is the sub-list for extension extendee
+	0,  // [0:1] is the sub-list for field type_name
+}
+
+func init() { file_pb_MultiDup_proto_init() }
+func file_pb_MultiDup_proto_init() {
+	if File_pb_MultiDup_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_pb_MultiDup_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CS_MD_EnterLobby); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CS_MD_CreateRoom); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CS_MD_GetRoomList); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CS_MD_EnterRoom); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CS_MD_LeaveRoom); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CS_MD_BeginDup); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CS_BT_Login); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CS_BT_PeopleList); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CS_BT_Status); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CS_BT_Position); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CS_BT_BroadCast); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CS_BT_Over); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SC_MD_EnterLobby); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SC_MD_CreateRoom); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SC_MD_GetRoomList); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SC_MD_EnterRoom); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SC_MD_LeaveRoom); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SC_MD_BeginDup); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SC_BT_Login); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SC_BT_PeopleList); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SC_BT_Status); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SC_BT_Position); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SC_BT_BroadCast); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SC_BT_Over); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SS_CreateBattleServer); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SS_CreateBattleServerOK); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_pb_MultiDup_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SC_MD_GetRoomList_RoomInfo); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_pb_MultiDup_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   27,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_pb_MultiDup_proto_goTypes,
+		DependencyIndexes: file_pb_MultiDup_proto_depIdxs,
+		MessageInfos:      file_pb_MultiDup_proto_msgTypes,
+	}.Build()
+	File_pb_MultiDup_proto = out.File
+	file_pb_MultiDup_proto_rawDesc = nil
+	file_pb_MultiDup_proto_goTypes = nil
+	file_pb_MultiDup_proto_depIdxs = nil
+}

+ 2 - 2
CSserver/clientTest/Program_Chat.cs

@@ -124,8 +124,8 @@ namespace clientTest.chat
 
             var port = 6000;
 
-            var endPoint = new IPEndPoint(IPAddress.Parse("192.168.10.17"), port);
-            //var endPoint = new IPEndPoint(IPAddress.Loopback, port);
+            //var endPoint = new IPEndPoint(IPAddress.Parse("192.168.10.17"), port);
+            var endPoint = new IPEndPoint(IPAddress.Loopback, port);
             //var endPoint = new IPEndPoint(IPAddress.Parse("115.159.121.129"), port);
 
             using (var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))