CTT/Server/Hotfix/Game/Handler/User/R2M_DeleteUserHandler.cs

86 lines
3.1 KiB
C#

using System;
using System.Collections.Generic;
namespace ET
{
[ActorMessageHandler]
public class R2M_DeleteUserHandler : AMActorRpcHandler<Scene, R2M_DeleteUser, M2R_DeleteUser>
{
protected override async ETTask Run(Scene scene, R2M_DeleteUser request, M2R_DeleteUser response, Action reply)
{
try
{
//**********************
Log.Debug($"*********************************************************UserId = {request.UserId} 删除角色");
User user = await UserComponent.Instance.Query(request.UserId);
if (user == null)
{
response.Message = $"没有这个玩家";
Log.Error($"服务器没有这个玩家Id={ request.UserId}");
reply();
return;
}
long unitId = user.Id;
Unit unit = MapUnitComponent.Instance.Get(unitId);
if (unit == null)
{
return;
}
else
{
Team team = TeamComponent.Instance.Get(unit.TeamLeaderId);
if (team.TeamState == TeamState.Fight)
{
response.Message = "战斗中不能删除角色!";
reply();
return;
}
}
user.hasRole = false;
await DBComponent.Instance.Save(user);
await DBComponent.Instance.Remove<Unit>(unitId);
await C2M_DeleteFriend(unitId);
await DBComponent.Instance.Remove<MailLib>(unitId);
await DBComponent.Instance.Remove<Store>(unitId);
await DBComponent.Instance.Remove<BuffLib>(unitId);
await DBComponent.Instance.Remove<NickName>(t => t.Nickname.Equals(user.NickName));
await DeleteConsignment(unitId);
await DeleteFamily(user.NickName, unitId);
reply();
Log.Debug($"UserId = {request.UserId}删除角色完成");
}
catch (System.Exception e)
{
Log.Error(e);
}
}
private async ETTask DeleteFamily(string name, long unitId)
{
Family family = await FamilyComponent.Instance.Query(name);
if(family != null)
await family.ForceDeleteMember(unitId);
}
private async ETTask C2M_DeleteFriend(long unitId)
{
IEnumerable<long> list = await FriendComponent.Instance.GetFriends(unitId);
foreach (long id in list)
{
await FriendComponent.Instance.DeleteFriend(id, unitId);
}
FriendComponent.Instance.FriendDic.Remove(unitId);
await DBComponent.Instance.Remove<Friend>(unitId);
}
private async ETTask DeleteConsignment(long unitId)
{
await DBComponent.Instance.Remove<Consignment>(t => t.UnitId == unitId);
}
}
}