# Conflicts:
#	Config/NetworkProtocol/Outer/data/MapProtoData.proto
#	Entity/Generate/NetworkProtocol/MapProtoData.cs
#	Entity/Generate/NetworkProtocol/OuterOpcode.cs
This commit is contained in:
2025-09-25 23:23:18 +08:00
22 changed files with 521 additions and 229 deletions

View File

@@ -1 +1 @@
{"WorksheetNames":[-8419147776733210060,-3495952183970875596,-1088042625810372120,1720330851179383898],"Tables":{"-3495952183970875596":1757242691062,"-1088042625810372120":1753532052628,"1720330851179383898":1753711757684,"3730651590607244245":1753532052629,"5812538452563588342":1753532052630}}
{"WorksheetNames":[-8419147776733210060,-3495952183970875596,1720330851179383898,5812538452563588342],"Tables":{"-3495952183970875596":1757296589391,"-1088042625810372120":1748918712210,"1720330851179383898":1753770985781,"3730651590607244245":1748918712210,"5812538452563588342":1751250727840}}

View File

@@ -1,3 +1,86 @@
syntax = "proto3";
package Fantasy.Network.Message;
////////////// ******** 物品信息 *******/////////////
///请求背包列表
message C2Game_GetItemsRequest // ICustomRouteRequest,Game2C_GetItemsResponse,GameRoute
{
}
///请求背包列表响应
message Game2C_GetItemsResponse // ICustomRouteResponse
{
repeated ItemInfo Items = 1; //物品信息
repeated ItemBindInfo Rigs = 2; //钓组信息
}
///请求使用物品
message C2Game_UseItemRequest // ICustomRouteRequest,Game2C_UseItemResponse,GameRoute
{
}
///请求使用物品响应
message Game2C_UseItemResponse // ICustomRouteResponse
{
}
///物品变化
message Game2C_ItemChange // ICustomRouteMessage,GameRoute
{
int32 Type = 1; //变化类型 0.新增 1,更新 -1删除
repeated ItemInfo Items = 2; //物品信息
repeated int64 Removes = 3; //移除物品(移除时有)
}
////////////// ******** 鱼护 *******/////////////
///请求鱼护列表
message C2Game_GetFishsRequest // ICustomRouteRequest,Game2C_GetFishsResponse,GameRoute
{
}
///请求鱼护列表响应
message Game2C_GetFishsResponse // ICustomRouteResponse
{
repeated FishInfo Fishs = 1;
}
///鱼护变化
message Game2C_FishChange // ICustomRouteMessage,GameRoute
{
int32 Type = 1; //变化类型 0.新增 1,更新 -1删除
repeated FishInfo Fishs = 2; //物品信息
repeated int64 Removes = 3; //移除物品(移除时有)
}
///请求出售
message C2Game_SellFishRequest // ICustomRouteRequest,Game2C_SellFishResponse,GameRoute
{
repeated int64 Ids = 1; //出售id
}
///请求出售响应
message Game2C_SellFishResponse // ICustomRouteResponse
{
repeated AwardInfo Awards = 1; //奖励
}
////////////// ******** 商店 *******/////////////
///请求购买
message C2Game_BuyRequest // ICustomRouteRequest,Game2C_GetFishsResponse,GameRoute
{
}
///请求购买响应
message Game2C_BuyResponse // ICustomRouteResponse
{
repeated AwardInfo Awards = 1; //奖励
}

View File

@@ -72,7 +72,8 @@ message Map2C_MoveNotify // ICustomRouteMessage,MapRoute
Vector3Info Rotation = 3; //角色方向
Vector3Info Direction = 4; // 移动方向
bool IsStop = 5; // 是否停止移动
int64 Timestamp = 6; // 时间点
bool IsRun = 6; //是否奔跑
int64 Timestamp = 7; // 时间点
}
///玩家旋转推送

View File

@@ -28,13 +28,13 @@ message RoleInfo
RoleBaseInfo BaseInfo = 1;
int64 RoleId = 2; //账号id
repeated ItemInfo Items = 3; //身上物品
repeated FishInfo Fishs = 4; //鱼护
repeated ActivityInfo Activities = 5; //活动信息
repeated KeyValueInt64 Currency = 6; //货币信息
repeated KeyValueInt64 Slots = 7; //插槽使用情况
repeated SkillInfo Skills = 8; //技能信息
repeated GearInfo Gears = 9; //钓组信息
int32 MapId = 9; //当前所在地图
repeated ItemBindInfo ItemBinds = 4; //物品绑定信息
repeated FishInfo Fishs = 5; //鱼护
repeated ActivityInfo Activities = 6; //活动信息
repeated KeyValueInt64 Currency = 7; //货币信息
repeated KeyValueInt64 Slots = 8; //插槽使用情况
repeated SkillInfo Skills = 9; //技能信息
int32 MapId = 10; //当前所在地图
}
/// 角色信息
@@ -64,6 +64,12 @@ message AwardInfo
int32 Count = 2; //数量
}
///玩家当前使用钓组信息
message ItemBindInfo
{
int64 Item = 1; //主物品
repeated int64 BindItems = 2; //绑定物品
}
///物品信息
message ItemInfo
{

View File

@@ -46,5 +46,5 @@ public class Item : Entity
/// <summary>
/// 物品所属的容器
/// </summary>
[BsonIgnore] ItemContainer Container;
[BsonIgnore] PlayerItemContainer Container;
}

View File

@@ -6,7 +6,7 @@ using NB.Game;
namespace NB;
public sealed class ItemContainer : Entity
public sealed class PlayerItemContainer : Entity
{
/// <summary>
/// 最大格子数量

View File

@@ -1,32 +0,0 @@
using Fantasy.Entitas;
using MongoDB.Bson.Serialization.Attributes;
namespace NB.Game;
// public class PlayerBasic : Entity
// {
// /// <summary>
// /// 昵称
// /// </summary>
// public string NickName;
//
// /// <summary>
// /// 头像
// /// </summary>
// public string Head;
//
// /// <summary>
// /// 国家
// /// </summary>
// public string Country;
//
// /// <summary>
// /// 等级
// /// </summary>
// public int Level;
//
// /// <summary>
// /// 当前经验
// /// </summary>
// public int Exp;
// }

View File

@@ -1,34 +0,0 @@
using Fantasy.Entitas;
namespace NB.Game;
public enum SlotType
{
None,
/// <summary>
/// 物品
/// </summary>
Item,
/// <summary>
/// 钓组
/// </summary>
Tackle
}
/// <summary>
/// 快速使用插槽
/// </summary>
public class PlayerSlot : Entity
{
/// <summary>
/// 插槽类型
/// </summary>
public SlotType SlotType;
/// <summary>
/// 绑定快速使用的id
/// </summary>
public long BindId;
}

View File

@@ -1,11 +0,0 @@
using Fantasy.Entitas;
namespace NB;
/// <summary>
/// 玩家钓组
/// </summary>
public class PlayerTackle : Entity
{
}

View File

@@ -59,7 +59,7 @@ public sealed class Player : Entity
/// <summary>
/// 背包
/// </summary>
[BsonElement("bag")] public ItemContainer ItemContainer;
[BsonElement("bag")] public PlayerItemContainer ItemContainer;
/// <summary>
/// 鱼护
@@ -84,13 +84,4 @@ public sealed class Player : Entity
[BsonIgnore] public long SessionRunTimeId;
/// <summary>
/// 需要保存数据库
/// </summary>
[BsonIgnore] public bool NeedSave;
/// <summary>
/// 需要保存数据库时间
/// </summary>
[BsonIgnore] public long NeedSaveTime;
}

View File

@@ -4,7 +4,5 @@ namespace NB.Game;
public sealed class PlayerManageComponent : Entity
{
public long AutoSaveTimerId;
public readonly Dictionary<long, Player> Players = new();
}

View File

@@ -90,12 +90,12 @@ namespace Fantasy
BaseInfo = default;
RoleId = default;
Items.Clear();
ItemBinds.Clear();
Fishs.Clear();
Activities.Clear();
Currency.Clear();
Slots.Clear();
Skills.Clear();
Gears.Clear();
MapId = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<RoleInfo>(this);
@@ -108,17 +108,17 @@ namespace Fantasy
[ProtoMember(3)]
public List<ItemInfo> Items = new List<ItemInfo>();
[ProtoMember(4)]
public List<FishInfo> Fishs = new List<FishInfo>();
public List<ItemBindInfo> ItemBinds = new List<ItemBindInfo>();
[ProtoMember(5)]
public List<ActivityInfo> Activities = new List<ActivityInfo>();
public List<FishInfo> Fishs = new List<FishInfo>();
[ProtoMember(6)]
public List<KeyValueInt64> Currency = new List<KeyValueInt64>();
public List<ActivityInfo> Activities = new List<ActivityInfo>();
[ProtoMember(7)]
public List<KeyValueInt64> Slots = new List<KeyValueInt64>();
public List<KeyValueInt64> Currency = new List<KeyValueInt64>();
[ProtoMember(8)]
public List<SkillInfo> Skills = new List<SkillInfo>();
public List<KeyValueInt64> Slots = new List<KeyValueInt64>();
[ProtoMember(9)]
public List<GearInfo> Gears = new List<GearInfo>();
public List<SkillInfo> Skills = new List<SkillInfo>();
[ProtoMember(10)]
public int MapId { get; set; }
}
@@ -207,6 +207,29 @@ namespace Fantasy
public int Count { get; set; }
}
/// <summary>
/// 玩家当前使用钓组信息
/// </summary>
[ProtoContract]
public partial class ItemBindInfo : AMessage, IProto
{
public static ItemBindInfo Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<ItemBindInfo>();
}
public override void Dispose()
{
Item = default;
BindItems.Clear();
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<ItemBindInfo>(this);
#endif
}
[ProtoMember(1)]
public long Item { get; set; }
[ProtoMember(2)]
public List<long> BindItems = new List<long>();
}
/// <summary>
/// 物品信息
/// </summary>
[ProtoContract]

View File

@@ -17,4 +17,304 @@ using Fantasy.Serialize;
namespace Fantasy
{
/// <summary>
/// /////////// ******** 物品信息 *******/////////////
/// </summary>
/// <summary>
/// 请求背包列表
/// </summary>
[ProtoContract]
public partial class C2Game_GetItemsRequest : AMessage, ICustomRouteRequest, IProto
{
public static C2Game_GetItemsRequest Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<C2Game_GetItemsRequest>();
}
public override void Dispose()
{
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<C2Game_GetItemsRequest>(this);
#endif
}
[ProtoIgnore]
public Game2C_GetItemsResponse ResponseType { get; set; }
public uint OpCode() { return OuterOpcode.C2Game_GetItemsRequest; }
[ProtoIgnore]
public int RouteType => Fantasy.RouteType.GameRoute;
}
/// <summary>
/// 请求背包列表响应
/// </summary>
[ProtoContract]
public partial class Game2C_GetItemsResponse : AMessage, ICustomRouteResponse, IProto
{
public static Game2C_GetItemsResponse Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<Game2C_GetItemsResponse>();
}
public override void Dispose()
{
ErrorCode = default;
Items.Clear();
Rigs.Clear();
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<Game2C_GetItemsResponse>(this);
#endif
}
public uint OpCode() { return OuterOpcode.Game2C_GetItemsResponse; }
[ProtoMember(1)]
public List<ItemInfo> Items = new List<ItemInfo>();
[ProtoMember(2)]
public List<ItemBindInfo> Rigs = new List<ItemBindInfo>();
[ProtoMember(3)]
public uint ErrorCode { get; set; }
}
/// <summary>
/// 请求使用物品
/// </summary>
[ProtoContract]
public partial class C2Game_UseItemRequest : AMessage, ICustomRouteRequest, IProto
{
public static C2Game_UseItemRequest Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<C2Game_UseItemRequest>();
}
public override void Dispose()
{
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<C2Game_UseItemRequest>(this);
#endif
}
[ProtoIgnore]
public Game2C_UseItemResponse ResponseType { get; set; }
public uint OpCode() { return OuterOpcode.C2Game_UseItemRequest; }
[ProtoIgnore]
public int RouteType => Fantasy.RouteType.GameRoute;
}
/// <summary>
/// 请求使用物品响应
/// </summary>
[ProtoContract]
public partial class Game2C_UseItemResponse : AMessage, ICustomRouteResponse, IProto
{
public static Game2C_UseItemResponse Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<Game2C_UseItemResponse>();
}
public override void Dispose()
{
ErrorCode = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<Game2C_UseItemResponse>(this);
#endif
}
public uint OpCode() { return OuterOpcode.Game2C_UseItemResponse; }
[ProtoMember(1)]
public uint ErrorCode { get; set; }
}
/// <summary>
/// 物品变化
/// </summary>
[ProtoContract]
public partial class Game2C_ItemChange : AMessage, ICustomRouteMessage, IProto
{
public static Game2C_ItemChange Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<Game2C_ItemChange>();
}
public override void Dispose()
{
Type = default;
Items.Clear();
Removes.Clear();
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<Game2C_ItemChange>(this);
#endif
}
public uint OpCode() { return OuterOpcode.Game2C_ItemChange; }
[ProtoIgnore]
public int RouteType => Fantasy.RouteType.GameRoute;
[ProtoMember(1)]
public int Type { get; set; }
[ProtoMember(2)]
public List<ItemInfo> Items = new List<ItemInfo>();
[ProtoMember(3)]
public List<long> Removes = new List<long>();
}
/// <summary>
/// /////////// ******** 鱼护 *******/////////////
/// </summary>
/// <summary>
/// 请求鱼护列表
/// </summary>
[ProtoContract]
public partial class C2Game_GetFishsRequest : AMessage, ICustomRouteRequest, IProto
{
public static C2Game_GetFishsRequest Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<C2Game_GetFishsRequest>();
}
public override void Dispose()
{
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<C2Game_GetFishsRequest>(this);
#endif
}
[ProtoIgnore]
public Game2C_GetFishsResponse ResponseType { get; set; }
public uint OpCode() { return OuterOpcode.C2Game_GetFishsRequest; }
[ProtoIgnore]
public int RouteType => Fantasy.RouteType.GameRoute;
}
/// <summary>
/// 请求鱼护列表响应
/// </summary>
[ProtoContract]
public partial class Game2C_GetFishsResponse : AMessage, ICustomRouteResponse, IProto
{
public static Game2C_GetFishsResponse Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<Game2C_GetFishsResponse>();
}
public override void Dispose()
{
ErrorCode = default;
Fishs.Clear();
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<Game2C_GetFishsResponse>(this);
#endif
}
public uint OpCode() { return OuterOpcode.Game2C_GetFishsResponse; }
[ProtoMember(1)]
public List<FishInfo> Fishs = new List<FishInfo>();
[ProtoMember(2)]
public uint ErrorCode { get; set; }
}
/// <summary>
/// 鱼护变化
/// </summary>
[ProtoContract]
public partial class Game2C_FishChange : AMessage, ICustomRouteMessage, IProto
{
public static Game2C_FishChange Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<Game2C_FishChange>();
}
public override void Dispose()
{
Type = default;
Fishs.Clear();
Removes.Clear();
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<Game2C_FishChange>(this);
#endif
}
public uint OpCode() { return OuterOpcode.Game2C_FishChange; }
[ProtoIgnore]
public int RouteType => Fantasy.RouteType.GameRoute;
[ProtoMember(1)]
public int Type { get; set; }
[ProtoMember(2)]
public List<FishInfo> Fishs = new List<FishInfo>();
[ProtoMember(3)]
public List<long> Removes = new List<long>();
}
/// <summary>
/// 请求出售
/// </summary>
[ProtoContract]
public partial class C2Game_SellFishRequest : AMessage, ICustomRouteRequest, IProto
{
public static C2Game_SellFishRequest Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<C2Game_SellFishRequest>();
}
public override void Dispose()
{
Ids.Clear();
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<C2Game_SellFishRequest>(this);
#endif
}
[ProtoIgnore]
public Game2C_SellFishResponse ResponseType { get; set; }
public uint OpCode() { return OuterOpcode.C2Game_SellFishRequest; }
[ProtoIgnore]
public int RouteType => Fantasy.RouteType.GameRoute;
[ProtoMember(1)]
public List<long> Ids = new List<long>();
}
/// <summary>
/// 请求出售响应
/// </summary>
[ProtoContract]
public partial class Game2C_SellFishResponse : AMessage, ICustomRouteResponse, IProto
{
public static Game2C_SellFishResponse Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<Game2C_SellFishResponse>();
}
public override void Dispose()
{
ErrorCode = default;
Awards.Clear();
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<Game2C_SellFishResponse>(this);
#endif
}
public uint OpCode() { return OuterOpcode.Game2C_SellFishResponse; }
[ProtoMember(1)]
public List<AwardInfo> Awards = new List<AwardInfo>();
[ProtoMember(2)]
public uint ErrorCode { get; set; }
}
/// <summary>
/// /////////// ******** 商店 *******/////////////
/// </summary>
/// <summary>
/// 请求购买
/// </summary>
[ProtoContract]
public partial class C2Game_BuyRequest : AMessage, ICustomRouteRequest, IProto
{
public static C2Game_BuyRequest Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<C2Game_BuyRequest>();
}
public override void Dispose()
{
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<C2Game_BuyRequest>(this);
#endif
}
[ProtoIgnore]
public Game2C_GetFishsResponse ResponseType { get; set; }
public uint OpCode() { return OuterOpcode.C2Game_BuyRequest; }
[ProtoIgnore]
public int RouteType => Fantasy.RouteType.GameRoute;
}
/// <summary>
/// 请求购买响应
/// </summary>
[ProtoContract]
public partial class Game2C_BuyResponse : AMessage, ICustomRouteResponse, IProto
{
public static Game2C_BuyResponse Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<Game2C_BuyResponse>();
}
public override void Dispose()
{
ErrorCode = default;
Awards.Clear();
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<Game2C_BuyResponse>(this);
#endif
}
public uint OpCode() { return OuterOpcode.Game2C_BuyResponse; }
[ProtoMember(1)]
public List<AwardInfo> Awards = new List<AwardInfo>();
[ProtoMember(2)]
public uint ErrorCode { get; set; }
}
}

View File

@@ -2,61 +2,72 @@ namespace Fantasy
{
public static partial class OuterOpcode
{
public const uint C2Map_CreateRoomRequest = 2281711377;
public const uint Map2C_CreateRoomResponse = 2415929105;
public const uint C2Game_GetItemsRequest = 2281711377;
public const uint Game2C_GetItemsResponse = 2415929105;
public const uint C2Game_UseItemRequest = 2281711378;
public const uint Game2C_UseItemResponse = 2415929106;
public const uint Game2C_ItemChange = 2147493649;
public const uint C2Game_GetFishsRequest = 2281711379;
public const uint Game2C_GetFishsResponse = 2415929107;
public const uint Game2C_FishChange = 2147493650;
public const uint C2Game_SellFishRequest = 2281711380;
public const uint Game2C_SellFishResponse = 2415929108;
public const uint C2Game_BuyRequest = 2281711381;
public const uint Game2C_BuyResponse = 2415929109;
public const uint C2Map_CreateRoomRequest = 2281711382;
public const uint Map2C_CreateRoomResponse = 2415929110;
public const uint C2G_ExitRoomRequest = 268445457;
public const uint G2C_ExitRoomResponse = 402663185;
public const uint C2G_EnterMapRequest = 268445458;
public const uint G2C_EnterMapResponse = 402663186;
public const uint Map2C_ChangeMap = 2147493649;
public const uint Map2C_ChangeMap = 2147493651;
public const uint C2A_LoginRequest = 268445459;
public const uint A2C_LoginResponse = 402663187;
public const uint C2G_LoginRequest = 268445460;
public const uint G2C_LoginResponse = 402663188;
public const uint G2C_RepeatLogin = 134227729;
public const uint C2Game_GetRoleInfoRequest = 2281711378;
public const uint Game2C_GetRoleInfoResponse = 2415929106;
public const uint Map2C_RoleEnterRoomNotify = 2147493650;
public const uint Map2C_RoleExitRoomNotify = 2147493651;
public const uint C2Map_RolePropertyChange = 2147493652;
public const uint Map2C_RoleStateNotify = 2147493653;
public const uint Map2C_RoleGearChangeNotify = 2147493654;
public const uint Map2C_RolePropertyChangeNotify = 2147493655;
public const uint C2Map_Move = 2147493656;
public const uint C2Map_Look = 2147493657;
public const uint Map2C_MoveNotify = 2147493658;
public const uint Map2C_LookeNotify = 2147493659;
public const uint C2S_GetConversationsRequest = 2281711379;
public const uint S2C_GetConversationsResponse = 2415929107;
public const uint C2S_SendMailRequest = 2281711380;
public const uint S2C_SendMailResponse = 2415929108;
public const uint C2S_DeleteMailRequest = 2281711381;
public const uint S2C_DeleteMailResponse = 2415929109;
public const uint S2C_HaveMail = 2147493660;
public const uint S2C_MailState = 2147493661;
public const uint C2S_CreateChannelRequest = 2281711382;
public const uint S2C_CreateChannelResponse = 2415929110;
public const uint C2S_JoinChannelRequest = 2281711383;
public const uint S2C_JoinChannelResponse = 2415929111;
public const uint C2S_SendMessageRequest = 2281711384;
public const uint S2C_SendMessageResponse = 2415929112;
public const uint S2C_Message = 2147493662;
public const uint C2S_CreateClubRequest = 2281711385;
public const uint S2C_CreateClubResponse = 2415929113;
public const uint C2S_GetClubInfoRequest = 2281711386;
public const uint S2C_GetClubInfoResponse = 2415929114;
public const uint C2S_GetMemberListRequest = 2281711387;
public const uint S2C_GetMemberListResponse = 2415929115;
public const uint C2S_GetClubListRequest = 2281711388;
public const uint S2C_GetClubListResponse = 2415929116;
public const uint C2S_JoinClubRequest = 2281711389;
public const uint S2C_JoinClubResponse = 2415929117;
public const uint C2S_LeaveClubRequest = 2281711390;
public const uint S2C_LeaveClubResponse = 2415929118;
public const uint C2S_DissolveClubRequest = 2281711391;
public const uint S2C_DissolveClubResponse = 2415929119;
public const uint C2S_DisposeJoinRequest = 2281711392;
public const uint S2C_DisposeJoinResponse = 2415929120;
public const uint S2C_ClubChange = 2147493663;
public const uint C2Game_GetRoleInfoRequest = 2281711383;
public const uint Game2C_GetRoleInfoResponse = 2415929111;
public const uint Map2C_RoleEnterRoomNotify = 2147493652;
public const uint Map2C_RoleExitRoomNotify = 2147493653;
public const uint Map2C_RoleStateNotify = 2147493654;
public const uint Map2C_RoleGearChangeNotify = 2147493655;
public const uint Map2C_RolePropertyChangeNotify = 2147493656;
public const uint C2Map_Move = 2147493657;
public const uint C2Map_Look = 2147493658;
public const uint Map2C_MoveNotify = 2147493659;
public const uint Map2C_LookeNotify = 2147493660;
public const uint C2S_GetConversationsRequest = 2281711384;
public const uint S2C_GetConversationsResponse = 2415929112;
public const uint C2S_SendMailRequest = 2281711385;
public const uint S2C_SendMailResponse = 2415929113;
public const uint C2S_DeleteMailRequest = 2281711386;
public const uint S2C_DeleteMailResponse = 2415929114;
public const uint S2C_HaveMail = 2147493661;
public const uint S2C_MailState = 2147493662;
public const uint C2S_CreateChannelRequest = 2281711387;
public const uint S2C_CreateChannelResponse = 2415929115;
public const uint C2S_JoinChannelRequest = 2281711388;
public const uint S2C_JoinChannelResponse = 2415929116;
public const uint C2S_SendMessageRequest = 2281711389;
public const uint S2C_SendMessageResponse = 2415929117;
public const uint S2C_Message = 2147493663;
public const uint C2S_CreateClubRequest = 2281711390;
public const uint S2C_CreateClubResponse = 2415929118;
public const uint C2S_GetClubInfoRequest = 2281711391;
public const uint S2C_GetClubInfoResponse = 2415929119;
public const uint C2S_GetMemberListRequest = 2281711392;
public const uint S2C_GetMemberListResponse = 2415929120;
public const uint C2S_GetClubListRequest = 2281711393;
public const uint S2C_GetClubListResponse = 2415929121;
public const uint C2S_JoinClubRequest = 2281711394;
public const uint S2C_JoinClubResponse = 2415929122;
public const uint C2S_LeaveClubRequest = 2281711395;
public const uint S2C_LeaveClubResponse = 2415929123;
public const uint C2S_DissolveClubRequest = 2281711396;
public const uint S2C_DissolveClubResponse = 2415929124;
public const uint C2S_DisposeJoinRequest = 2281711397;
public const uint S2C_DisposeJoinResponse = 2415929125;
public const uint S2C_ClubChange = 2147493664;
}
}

View File

@@ -233,6 +233,7 @@ namespace Fantasy
Rotation = default;
Direction = default;
IsStop = default;
IsRun = default;
Timestamp = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<Map2C_MoveNotify>(this);
@@ -252,6 +253,8 @@ namespace Fantasy
[ProtoMember(5)]
public bool IsStop { get; set; }
[ProtoMember(6)]
public bool IsRun { get; set; }
[ProtoMember(7)]
public long Timestamp { get; set; }
}
/// <summary>

View File

@@ -3,9 +3,9 @@ using Fantasy.Entitas.Interface;
namespace NB.Game;
public sealed class ItemContainerDestroySystem : DestroySystem<ItemContainer>
public sealed class ItemContainerDestroySystem : DestroySystem<PlayerItemContainer>
{
protected override void Destroy(ItemContainer self)
protected override void Destroy(PlayerItemContainer self)
{
self.CellCountMax = 0;
@@ -31,7 +31,7 @@ public static class ItemContainerSystem
/// <param name="id"></param>
/// <param name="item"></param>
/// <returns></returns>
public static bool GetItemById(this ItemContainer self, long id, out Item? item)
public static bool GetItemById(this PlayerItemContainer self, long id, out Item? item)
{
return self.Items.TryGetValue(id, out item);
}
@@ -42,7 +42,7 @@ public static class ItemContainerSystem
/// <param name="self"></param>
/// <param name="configId"></param>
/// <param name="item"></param>
public static bool GetFistItemByConfigId(this ItemContainer self, int configId, out Item? item)
public static bool GetFistItemByConfigId(this PlayerItemContainer self, int configId, out Item? item)
{
foreach (var (_, it) in self.Items)
{
@@ -100,7 +100,7 @@ public static class ItemContainerSystem
#region Add
public static void Add(this ItemContainer self, int configId, int count)
public static void Add(this PlayerItemContainer self, int configId, int count)
{
var item = ItemFactory.Create(self.Scene, configId, count);
self.Items.Add(item.Id, item);
@@ -110,7 +110,7 @@ public static class ItemContainerSystem
#region
public static List<ItemInfo> GetItemInfos(this ItemContainer self)
public static List<ItemInfo> GetItemInfos(this PlayerItemContainer self)
{
List<ItemInfo> ret = new List<ItemInfo>();
foreach (var (_, item) in self.Items)
@@ -121,7 +121,7 @@ public static class ItemContainerSystem
return ret;
}
public static List<GearInfo> GetGearInfos(this ItemContainer self)
public static List<GearInfo> GetGearInfos(this PlayerItemContainer self)
{
List<GearInfo> ret = new List<GearInfo>();

View File

@@ -12,8 +12,6 @@ public sealed class PlayerManageComponentAwakeSystem : AwakeSystem<PlayerManageC
{
protected override void Awake(PlayerManageComponent self)
{
self.AutoSaveTimerId =
self.Scene.TimerComponent.Net.RepeatedTimer(1000 * 60, () => { _ = self.CheckAutoSave(); });
}
}
@@ -27,8 +25,6 @@ public sealed class PlayerManageComponentDestroySystem : DestroySystem<PlayerMan
}
self.Players.Clear();
self.Scene.TimerComponent.Net.Remove(self.AutoSaveTimerId);
self.AutoSaveTimerId = 0;
}
}
@@ -57,7 +53,6 @@ public static class PlayerManageComponentSystem
// 如果不存在,表示这是一个新的账号,需要创建一下这个账号。
account = PlayerFactory.Create(self.Scene, accountId);
account.Level = 99;
account.NickName = "王麻子";
account.Country = "cn";
@@ -157,20 +152,29 @@ public static class PlayerManageComponentSystem
#endregion
#region
#region
public static async FTask CheckAutoSave(this PlayerManageComponent self)
/// <summary>
/// 尝试获取或增加相关组件
/// </summary>
/// <param name="player"></param>
/// <typeparam name="T"></typeparam>
public static async FTask TryComponent<T>(this Player player) where T : Entity, new()
{
foreach (var (_, player) in self.Players)
if (player.GetComponent<T>() == null)
{
if (player.NeedSave)
var component = await player.Scene.World.DataBase.Query<T>(player.Id, true);
if (component == null)
{
await player.SaveImmediately();
//如果没有组件
player.AddComponent<T>();
}
else
{
player.AddComponent(component);
}
}
}
#endregion
}

View File

@@ -13,12 +13,10 @@ public static class PlayerFactory
/// </summary>
/// <param name="scene"></param>
/// <param name="aId">ToKen令牌传递过来的aId</param>
/// <param name="isSaveDataBase">是否在创建的过程中保存到数据库</param>
/// <returns></returns>
public static Player Create(Scene scene, long aId)
{
var player = Entity.Create<Player>(scene, aId, true, true);
player.InitializeChildEntity();
return player;
}
}

View File

@@ -10,56 +10,8 @@ public static class PlayerHelper
{
#region MyRegion
public static void InitializeChildEntity(this Player self)
{
if (self.Vip == null)
{
self.Vip = Entity.Create<PlayerVip>(self.Scene, true, true);
}
if (self.Wallet == null)
{
self.Wallet = Entity.Create<PlayerWallet>(self.Scene, true, true);
}
if (self.ItemContainer == null)
{
self.ItemContainer = Entity.Create<ItemContainer>(self.Scene, true, true);
}
if (self.FishContainer == null)
{
self.FishContainer = Entity.Create<FishContainer>(self.Scene, true, true);
}
if (self.SkillContainer == null)
{
self.SkillContainer = Entity.Create<SkillContainer>(self.Scene, true, true);
}
if (self.AchievementContainer == null)
{
self.AchievementContainer = Entity.Create<AchievementContainer>(self.Scene, true, true);
}
// if (self.Statistics == null)
// {
// self.Statistics = Entity.Create<PlayerStatistics>(self.Scene, true, true);
// self.Statistics.LoginTime = self.Statistics.CreateTime = TimeHelper.Now;
// }
}
public static async FTask SaveImmediately(this Player self)
{
await self.Scene.World.DataBase.Save(self);
self.NeedSave = false;
Log.Info($"player id:{self.Id} save data to dataBase");
}
public static async FTask Save(this Player self)
{
self.NeedSave = true;
self.NeedSaveTime = TimeHelper.Now + AppConfig.PlayerDataAutoSaveTime;
//先立马保存,后续做缓存
await self.Scene.World.DataBase.Save(self);
}
@@ -97,7 +49,7 @@ public static class PlayerHelper
public static async FTask Disconnect(this Player self)
{
// 保存该账号信息到数据库中。
await SaveImmediately(self);
await Save(self);
// 在缓存中移除自己并且执行自己的Dispose方法。
self.Scene.GetComponent<PlayerManageComponent>().Remove(self.Id);
}
@@ -176,7 +128,6 @@ public static class PlayerHelper
var info = new RoleInfo();
info.BaseInfo = GetRoleBaseInfo(self);
info.Items = self.ItemContainer.GetItemInfos();
info.Gears = self.ItemContainer.GetGearInfos();
info.RoleId = self.RouteId;
return info;
}