提交示例代码
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Network;
|
||||
using Fantasy.Network.Interface;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public sealed class C2G_GameInitCompleteRequestHandler : MessageRPC<C2G_GameInitCompleteRequest, G2C_GameInitCompleteResponse>
|
||||
{
|
||||
protected override async FTask Run(Session session, C2G_GameInitCompleteRequest request, G2C_GameInitCompleteResponse response, Action reply)
|
||||
{
|
||||
var account = session.GetComponent<Account>();
|
||||
var requestPushContainer = request.PushContainer;
|
||||
var requestPushUnitInfo = request.PushUnitInfo;
|
||||
var requestAoi = request.Aoi;
|
||||
// 当调用reply方法的时候,就会马上返回G2C_GameInitCompleteResponse消息给客户端了。
|
||||
// 这时候客户端await等待就会继续执行。
|
||||
reply();
|
||||
// 比如这个代码就是推送给客户端的。
|
||||
if (requestPushContainer)
|
||||
{
|
||||
// 推送容器的数据给客户端。
|
||||
ContainerHelper.SendAllContainerInfo(account);
|
||||
}
|
||||
await FTask.CompletedTask;
|
||||
}
|
||||
}
|
||||
41
物品和背包的完整代码/Server/Hotfix/Handler/C2G_LoginRequestHandler.cs
Normal file
41
物品和背包的完整代码/Server/Hotfix/Handler/C2G_LoginRequestHandler.cs
Normal file
@@ -0,0 +1,41 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Entitas;
|
||||
using Fantasy.Network;
|
||||
using Fantasy.Network.Interface;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public class C2G_LoginRequestHandler : MessageRPC<C2G_LoginRequest, G2C_LoginResponse>
|
||||
{
|
||||
protected override async FTask Run(Session session, C2G_LoginRequest request, G2C_LoginResponse response, Action reply)
|
||||
{
|
||||
// 由于本课程中,主要讲解的是物品和背包的内容,所以这里就简单的创建了一个登陆逻辑。
|
||||
// 这个登陆逻辑,并不能用于商用,只是为了当前的课程服务的临时。
|
||||
// 如果想学习完整的注册登陆的流程,建议关注下我的注册登陆的课程。
|
||||
var scene = session.Scene;
|
||||
// 再数据库中查询用户名和密码是否存在。
|
||||
var account = await scene.World.DataBase.First<Account>(d =>
|
||||
d.UserName == request.UserName && d.Password == request.PassWord, true);
|
||||
if (account == null)
|
||||
{
|
||||
// 如果没有就创建一个新的实体,并且保存到数据库中。
|
||||
account = UnitFactory.CreatePlayer(scene, 1, request.UserName, request.PassWord);
|
||||
// account = Entity.Create<Account>(scene, true, true);
|
||||
// account.UserName = request.UserName;
|
||||
// account.Password = request.PassWord;
|
||||
// // 增加背包组件
|
||||
// var bagComponent = account.AddComponent<BagComponent>();
|
||||
// // 创建一个临时物品,并且放入到临时背包中
|
||||
// var item = ItemFactory.Create(scene, 1, 1, true);
|
||||
// bagComponent.AddItem(item);
|
||||
// 把实体保存到数据库中。
|
||||
await scene.World.DataBase.Save(account);
|
||||
}
|
||||
// 把当前账号添加到Session下,好处有下面的几个方面:
|
||||
// 1、客在Session下很方便的获得到当前账号。
|
||||
// 2、当Session断开了,也就是客户端跟服务器断开连接了,会自动执行小伙这个Account。
|
||||
account.Session = session;
|
||||
session.AddComponent(account);
|
||||
Log.Debug($"登陆成功 UserName:{request.UserName} Password:{request.PassWord}");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Network;
|
||||
using Fantasy.Network.Interface;
|
||||
// ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public sealed class C2G_StartCreateItemHandler : Message<C2G_StartCreateItem>
|
||||
{
|
||||
// protected override async FTask Run(Session session, C2G_StartCreateItem message)
|
||||
// {
|
||||
// var account = session.GetComponent<Account>();
|
||||
//
|
||||
// if (account == null)
|
||||
// {
|
||||
// session.Dispose();
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// var item = ItemFactory.Create(session.Scene, 1000001, 1, true);
|
||||
// var addItemErrorCode = ContainerHelper.AddItem(account, ContainerType.Bag, item, ItemReason.ItemTestAdd, true);
|
||||
// Log.Debug($"addItemErrorCode:{addItemErrorCode}");
|
||||
// await session.Scene.World.DataBase.Save(account);
|
||||
// await FTask.CompletedTask;
|
||||
// }
|
||||
|
||||
protected override async FTask Run(Session session, C2G_StartCreateItem message)
|
||||
{
|
||||
var account = session.GetComponent<Account>();
|
||||
|
||||
if (account == null)
|
||||
{
|
||||
session.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
var items = new List<Item>();
|
||||
ContainerHelper.GetItemsByConfigId(account, ContainerType.Bag, 1000001, items);
|
||||
Log.Debug($"MountEquip:{EquipHelper.MountEquip(account, items[0])}");
|
||||
await session.Scene.World.DataBase.Save(account);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Network;
|
||||
using Fantasy.Network.Interface;
|
||||
// ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public class C2G_UseItemRequestHandler : MessageRPC<C2G_UseItemRequest, G2C_UseItemResponse>
|
||||
{
|
||||
protected override async FTask Run(Session session, C2G_UseItemRequest request, G2C_UseItemResponse response, Action reply)
|
||||
{
|
||||
var account = session.GetComponent<Account>();
|
||||
|
||||
if (account == null)
|
||||
{
|
||||
session.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
response.ErrorCode = ItemUseHelper.UseItem(account, (ContainerType)request.ContainerType, request.ItemId, request.Count);
|
||||
await FTask.CompletedTask;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user