This commit is contained in:
2025-09-25 19:19:51 +08:00
parent ddffaac7b3
commit f3d82df793
25 changed files with 532 additions and 244 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"; syntax = "proto3";
package Fantasy.Network.Message; 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

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

View File

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

View File

@@ -23,16 +23,14 @@ message QuaternionInfo
message GearInfo message GearInfo
{ {
int64 Rod = 1; int64 Rod = 1;
repeated int64 Rigs = 2; //钓组配件 repeated int64 Rigs = 2; //钓组配件
float LineLength = 3; //线长度 int32 State = 3; //杆子状态
float ReelSpeed = 4; //收线速度 Vector3Info Position = 4; //钓组当前位置
int32 State = 5; //杆子状态 Vector3Info Rotation = 5; //钓组方向
Vector3Info Position = 6; //钓组当前位置 repeated KeyValueInt32 Propertys = 6; //属性信息
Vector3Info Rotation = 7; //钓组方向
} }
message UnitStateInfo message UnitStateInfo
{ {
int32 State = 1; //状态id int32 State = 1; //状态id

View File

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

View File

@@ -6,7 +6,7 @@ using NB.Game;
namespace NB; namespace NB;
public sealed class ItemContainer : Entity public sealed class PlayerItemContainer : Entity
{ {
/// <summary> /// <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>
/// 背包 /// 背包
/// </summary> /// </summary>
[BsonElement("bag")] public ItemContainer ItemContainer; [BsonElement("bag")] public PlayerItemContainer ItemContainer;
/// <summary> /// <summary>
/// 鱼护 /// 鱼护
@@ -83,14 +83,5 @@ public sealed class Player : Entity
public bool IsVip => Vip != null && Vip.ExpirationTime > TimeHelper.Now; public bool IsVip => Vip != null && Vip.ExpirationTime > TimeHelper.Now;
[BsonIgnore] public long SessionRunTimeId; [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 sealed class PlayerManageComponent : Entity
{ {
public long AutoSaveTimerId;
public readonly Dictionary<long, Player> Players = new(); public readonly Dictionary<long, Player> Players = new();
} }

View File

@@ -150,12 +150,12 @@ namespace Fantasy
BaseInfo = default; BaseInfo = default;
RoleId = default; RoleId = default;
Items.Clear(); Items.Clear();
ItemBinds.Clear();
Fishs.Clear(); Fishs.Clear();
Activities.Clear(); Activities.Clear();
Currency.Clear(); Currency.Clear();
Slots.Clear(); Slots.Clear();
Skills.Clear(); Skills.Clear();
Gears.Clear();
MapId = default; MapId = default;
#if FANTASY_NET || FANTASY_UNITY #if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<RoleInfo>(this); GetScene().MessagePoolComponent.Return<RoleInfo>(this);
@@ -168,17 +168,17 @@ namespace Fantasy
[ProtoMember(3)] [ProtoMember(3)]
public List<ItemInfo> Items = new List<ItemInfo>(); public List<ItemInfo> Items = new List<ItemInfo>();
[ProtoMember(4)] [ProtoMember(4)]
public List<FishInfo> Fishs = new List<FishInfo>(); public List<ItemBindInfo> ItemBinds = new List<ItemBindInfo>();
[ProtoMember(5)] [ProtoMember(5)]
public List<ActivityInfo> Activities = new List<ActivityInfo>(); public List<FishInfo> Fishs = new List<FishInfo>();
[ProtoMember(6)] [ProtoMember(6)]
public List<KeyValueInt64> Currency = new List<KeyValueInt64>(); public List<ActivityInfo> Activities = new List<ActivityInfo>();
[ProtoMember(7)] [ProtoMember(7)]
public List<KeyValueInt64> Slots = new List<KeyValueInt64>(); public List<KeyValueInt64> Currency = new List<KeyValueInt64>();
[ProtoMember(8)] [ProtoMember(8)]
public List<SkillInfo> Skills = new List<SkillInfo>(); public List<KeyValueInt64> Slots = new List<KeyValueInt64>();
[ProtoMember(9)] [ProtoMember(9)]
public List<GearInfo> Gears = new List<GearInfo>(); public List<SkillInfo> Skills = new List<SkillInfo>();
[ProtoMember(10)] [ProtoMember(10)]
public int MapId { get; set; } public int MapId { get; set; }
} }
@@ -267,6 +267,29 @@ namespace Fantasy
public int Count { get; set; } public int Count { get; set; }
} }
/// <summary> /// <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> /// </summary>
[ProtoContract] [ProtoContract]

View File

@@ -17,4 +17,304 @@ using Fantasy.Serialize;
namespace Fantasy 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

@@ -70,7 +70,7 @@ namespace Fantasy
public uint ErrorCode { get; set; } public uint ErrorCode { get; set; }
} }
/// <summary> /// <summary>
/// 请求网关离开房间 /// 请求网关离开房间(离开房间,但是不离开地图)
/// </summary> /// </summary>
[ProtoContract] [ProtoContract]
public partial class C2G_ExitRoomRequest : AMessage, IRequest, IProto public partial class C2G_ExitRoomRequest : AMessage, IRequest, IProto

View File

@@ -100,11 +100,10 @@ namespace Fantasy
{ {
Rod = default; Rod = default;
Rigs.Clear(); Rigs.Clear();
LineLength = default;
ReelSpeed = default;
State = default; State = default;
Position = default; Position = default;
Rotation = default; Rotation = default;
Propertys.Clear();
#if FANTASY_NET || FANTASY_UNITY #if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<GearInfo>(this); GetScene().MessagePoolComponent.Return<GearInfo>(this);
#endif #endif
@@ -114,15 +113,13 @@ namespace Fantasy
[ProtoMember(2)] [ProtoMember(2)]
public List<long> Rigs = new List<long>(); public List<long> Rigs = new List<long>();
[ProtoMember(3)] [ProtoMember(3)]
public float LineLength { get; set; }
[ProtoMember(4)]
public float ReelSpeed { get; set; }
[ProtoMember(5)]
public int State { get; set; } public int State { get; set; }
[ProtoMember(6)] [ProtoMember(4)]
public Vector3Info Position { get; set; } public Vector3Info Position { get; set; }
[ProtoMember(7)] [ProtoMember(5)]
public Vector3Info Rotation { get; set; } public Vector3Info Rotation { get; set; }
[ProtoMember(6)]
public List<KeyValueInt32> Propertys = new List<KeyValueInt32>();
} }
[ProtoContract] [ProtoContract]
public partial class UnitStateInfo : AMessage, IProto public partial class UnitStateInfo : AMessage, IProto

View File

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

View File

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

View File

@@ -3,9 +3,9 @@ using Fantasy.Entitas.Interface;
namespace NB.Game; 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; self.CellCountMax = 0;
@@ -31,7 +31,7 @@ public static class ItemContainerSystem
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="item"></param> /// <param name="item"></param>
/// <returns></returns> /// <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); return self.Items.TryGetValue(id, out item);
} }
@@ -42,7 +42,7 @@ public static class ItemContainerSystem
/// <param name="self"></param> /// <param name="self"></param>
/// <param name="configId"></param> /// <param name="configId"></param>
/// <param name="item"></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) foreach (var (_, it) in self.Items)
{ {
@@ -100,7 +100,7 @@ public static class ItemContainerSystem
#region Add #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); var item = ItemFactory.Create(self.Scene, configId, count);
self.Items.Add(item.Id, item); self.Items.Add(item.Id, item);
@@ -110,7 +110,7 @@ public static class ItemContainerSystem
#region #region
public static List<ItemInfo> GetItemInfos(this ItemContainer self) public static List<ItemInfo> GetItemInfos(this PlayerItemContainer self)
{ {
List<ItemInfo> ret = new List<ItemInfo>(); List<ItemInfo> ret = new List<ItemInfo>();
foreach (var (_, item) in self.Items) foreach (var (_, item) in self.Items)
@@ -121,7 +121,7 @@ public static class ItemContainerSystem
return ret; return ret;
} }
public static List<GearInfo> GetGearInfos(this ItemContainer self) public static List<GearInfo> GetGearInfos(this PlayerItemContainer self)
{ {
List<GearInfo> ret = new List<GearInfo>(); List<GearInfo> ret = new List<GearInfo>();

View File

@@ -12,8 +12,6 @@ public sealed class PlayerManageComponentAwakeSystem : AwakeSystem<PlayerManageC
{ {
protected override void Awake(PlayerManageComponent self) 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.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 = PlayerFactory.Create(self.Scene, accountId);
account.Level = 99; account.Level = 99;
account.NickName = "王麻子"; account.NickName = "王麻子";
account.Country = "cn"; account.Country = "cn";
@@ -103,8 +98,8 @@ public static class PlayerManageComponentSystem
} }
// account.Statistics.LoginTime = TimeHelper.Now; // account.Statistics.LoginTime = TimeHelper.Now;
account.SetTestData(); account.SetTestData();
await account.Save(); await account.Save();
return account; return account;
@@ -157,20 +152,29 @@ public static class PlayerManageComponentSystem
#endregion #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 #endregion
} }

View File

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

View File

@@ -9,57 +9,9 @@ namespace NB.Game;
public static class PlayerHelper public static class PlayerHelper
{ {
#region MyRegion #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) public static async FTask Save(this Player self)
{ {
self.NeedSave = true;
self.NeedSaveTime = TimeHelper.Now + AppConfig.PlayerDataAutoSaveTime;
//先立马保存,后续做缓存 //先立马保存,后续做缓存
await self.Scene.World.DataBase.Save(self); await self.Scene.World.DataBase.Save(self);
} }
@@ -97,7 +49,7 @@ public static class PlayerHelper
public static async FTask Disconnect(this Player self) public static async FTask Disconnect(this Player self)
{ {
// 保存该账号信息到数据库中。 // 保存该账号信息到数据库中。
await SaveImmediately(self); await Save(self);
// 在缓存中移除自己并且执行自己的Dispose方法。 // 在缓存中移除自己并且执行自己的Dispose方法。
self.Scene.GetComponent<PlayerManageComponent>().Remove(self.Id); self.Scene.GetComponent<PlayerManageComponent>().Remove(self.Id);
} }
@@ -176,7 +128,6 @@ public static class PlayerHelper
var info = new RoleInfo(); var info = new RoleInfo();
info.BaseInfo = GetRoleBaseInfo(self); info.BaseInfo = GetRoleBaseInfo(self);
info.Items = self.ItemContainer.GetItemInfos(); info.Items = self.ItemContainer.GetItemInfos();
info.Gears = self.ItemContainer.GetGearInfos();
info.RoleId = self.RouteId; info.RoleId = self.RouteId;
return info; return info;
} }