public async Task <Unit> Handle(PlayerActionCommand command, CancellationToken cancellationToken)
        {
            var targetId    = command.TargetId;
            var playerId    = command.PlayerId;
            var commandName = command.CommandName;

            var player = await _playerDomainService.Get(playerId);

            if (player == null)
            {
                await _bus.RaiseEvent(new DomainNotification($"角色不存在!"));

                return(Unit.Value);
            }

            var target = await _playerDomainService.Get(targetId);

            if (target == null)
            {
                await _bus.RaiseEvent(new DomainNotification($"npc不存在!"));

                return(Unit.Value);
            }


            //await DoPlayerAction(player, target, commandName);

            PlayerActionEnum actionEnum;

            if (!Enum.TryParse(commandName, out actionEnum))
            {
                return(Unit.Value);
            }

            switch (actionEnum)
            {
            case PlayerActionEnum.添加好友:
                await Friend(player, target);

                break;

            case PlayerActionEnum.割袍断义:
                await UnFriend(player, target);

                break;

            case PlayerActionEnum.查看武功:
                await ShowFriendSkill(player, target);

                break;
            }

            if (await Commit())
            {
                //Do nothing
            }

            return(Unit.Value);
        }
Example #2
0
        public async Task <Unit> Handle(ShowMySkillCommand command, CancellationToken cancellationToken)
        {
            var playerId = command.PlayerId;
            var player   = await _playerDomainService.Get(playerId);

            if (player == null)
            {
                return(Unit.Value);
            }

            var skillModels = new List <SkillModel>();

            var playerSkills = await _playerSkillDomainService.GetAll(player.Id);

            var baseSkills = await _skillDomainService.GetAllBaseSkills();

            foreach (var baseSkill in baseSkills)
            {
                if (playerSkills.Count(x => x.SkillId == baseSkill.Id) == 0)
                {
                    var playerSkill = new PlayerSkillEntity
                    {
                        Exp       = 0,
                        Level     = 0,
                        PlayerId  = playerId,
                        SkillId   = baseSkill.Id,
                        SkillName = baseSkill.Name
                    };
                    await _playerSkillDomainService.Add(playerSkill);

                    playerSkills.Add(playerSkill);
                }
            }


            var ids = playerSkills?.Select(x => x.SkillId);

            var skills = (await _skillDomainService.GetAll()).Where(x => ids.Contains(x.Id));

            foreach (var playerSkill in playerSkills)
            {
                var skill = skills.FirstOrDefault(x => x.Id == playerSkill.SkillId);
                if (skill != null)
                {
                    var skillModel = _mapper.Map <SkillModel>(skill);
                    skillModel.PlayerSkillId = playerSkill.Id;
                    skillModel.Level         = playerSkill.Level;
                    skillModel.Exp           = playerSkill.Exp;
                    skillModels.Add(skillModel);
                }
            }

            await _mudProvider.ShowMySkill(playerId, skillModels);

            return(Unit.Value);
        }
Example #3
0
        public async Task Execute(int playerId)
        {
            var player = await _playerDomainService.Get(playerId);

            if (player == null)
            {
                _logger.LogDebug($"player == null");
                return;
            }

            var level      = player.Level;
            var levelUpExp = (level * level * level + 60) / 5 * (level * 2 + 60) - 600;

            if (levelUpExp <= player.Exp)
            {
                player.Level += 1;
                player.Point += 1;

                player.Computed();

                await _playerDomainService.Update(player);

                await _bus.RaiseEvent(new PlayerStatusChangedEvent(player)).ConfigureAwait(false);

                await _mudProvider.ShowMessage(player.Id, $"恭喜你升级到 Lv{ player.Level }。");
            }
        }
Example #4
0
        public async Task <Unit> Handle(ShowFriendCommand command, CancellationToken cancellationToken)
        {
            var playerId = command.PlayerId;

            var player = await _playerDomainService.Get(playerId);

            if (player == null)
            {
                await _bus.RaiseEvent(new DomainNotification($"角色不存在!"));

                return(Unit.Value);
            }

            var playerRelationQuery = await _playerRelationDomainService.GetAll();

            //我加了别人的
            var requestIds = playerRelationQuery.Where(x => x.PlayerId == playerId && x.Type == PlayerRelationTypeEnum.好友).Select(x => x.RelationId).ToList();

            //别人加了我的
            var friendToMeIds = playerRelationQuery.Where(x => x.RelationId == playerId && x.Type == PlayerRelationTypeEnum.好友).Select(x => x.PlayerId).ToList();

            //互相加了的
            var friendIds = requestIds.Intersect(friendToMeIds).ToList();

            requestIds    = requestIds.Except(friendIds).ToList();
            friendToMeIds = friendToMeIds.Except(friendIds).ToList();

            var playerQuery = await _playerDomainService.GetAll();

            var players     = playerQuery.Where(x => friendIds.Contains(x.Id)).ToList();
            var requests    = playerQuery.Where(x => requestIds.Contains(x.Id)).ToList();
            var friendToMes = playerQuery.Where(x => friendToMeIds.Contains(x.Id)).ToList();

            await _mudProvider.ShowFriend(playerId, new MyFriendModel
            {
                Friends   = _mapper.Map <List <PlayerBaseInfo> >(players),
                Requests  = _mapper.Map <List <PlayerBaseInfo> >(requests),
                FriendMes = _mapper.Map <List <PlayerBaseInfo> >(friendToMes)
            });



            return(Unit.Value);
        }
Example #5
0
        public async Task <Unit> Handle(ShowMyPackCommand command, CancellationToken cancellationToken)
        {
            var playerId = command.PlayerId;
            var myPack   = new MyPack()
            {
                Money = "",
                Wares = new List <WareModel>()
            };
            var player = await _playerDomainService.Get(playerId);

            if (player == null)
            {
                return(Unit.Value);
            }

            myPack.Money = player.Money.ToMoney();

            var playerWares = await _playerWareDomainService.GetAll(player.Id);

            if (playerWares == null)
            {
                return(Unit.Value);
            }

            var ids = playerWares.Select(x => x.WareId);

            var wares = (await _wareDomainService.GetAll()).Where(x => ids.Contains(x.Id));

            foreach (var playerWare in playerWares)
            {
                var ware = wares.FirstOrDefault(x => x.Id == playerWare.WareId);
                if (ware != null)
                {
                    var wareModel = _mapper.Map <WareModel>(ware);
                    wareModel.Number = playerWare.Number;
                    wareModel.Status = playerWare.Status;
                    myPack.Wares.Add(wareModel);
                }
            }

            await _mudProvider.ShowMyPack(playerId, myPack);

            return(Unit.Value);
        }
Example #6
0
        public async Task <RoomModel> GetCurrent(int playerId)
        {
            var player = await _playerDomainService.Get(playerId);

            var room = await _roomDomainService.Get(player.RoomId);

            var roomModel = _mapper.Map <RoomModel>(room);


            return(roomModel);
        }
Example #7
0
        public async Task Execute(PlayerStatusModel model)
        {
            int playerId = model.PlayerId;
            var player   = await _playerDomainService.Get(playerId);

            if (player == null)
            {
                _logger.LogDebug($"player == null");
                return;
            }

            var online = await _mudOnlineProvider.GetPlayerOnline(playerId);

            if (online == null)
            {
                //玩家离线后,从队列删除,并且修改状态为空闲
                await _recurringQueue.Remove <PlayerStatusModel>(playerId);

                if (player.Status != PlayerStatusEnum.空闲)
                {
                    player.Status = PlayerStatusEnum.空闲;
                    await _playerDomainService.Update(player);

                    await _bus.RaiseEvent(new PlayerStatusChangedEvent(player)).ConfigureAwait(false);
                }
                return;
            }

            if (player.Status != model.Status)
            {
                await _recurringQueue.Remove <PlayerStatusModel>(playerId);

                return;
            }


            //TODO
            switch (model.Status)
            {
            case PlayerStatusEnum.伐木:

                break;
            }

            await _mudProvider.ShowMessage(playerId, $"你正在{model.Status}。。。");
        }
Example #8
0
        public async Task Execute(NpcStatusModel model)
        {
            int playerId = model.TargetId;
            int npcId    = model.NpcId;
            var player   = await _playerDomainService.Get(playerId);

            if (player == null)
            {
                await StopAction(npcId);

                return;
            }
            var npc = await _npcDomainService.Get(npcId);

            if (npc == null)
            {
                await StopAction(npcId);

                return;
            }

            var npcFightingPlayerId = await _redisDb.StringGet <int>(string.Format(RedisKey.NpcFighting, npc.Id));

            if (npcFightingPlayerId != playerId)
            {
                await _mudProvider.ShowMessage(player.Id, $"【切磋】{npcFightingPlayerId},{playerId},{npcId}");
                await StopAction(npcId);

                return;
            }

            await _mudProvider.ShowMessage(player.Id, $"【切磋】[{npc.Name}]正在攻击你。。。");


            await _mudProvider.AddFightingTarget(player.Id, new FightingTargetModel
            {
                TargetId   = npcId,
                TargetName = npc.Name,
                Hp         = npc.Hp,
                Mp         = npc.Mp,
                MaxHp      = npc.MaxHp,
                MaxMp      = npc.MaxMp,
                TargetType = TargetTypeEnum.Npc
            });
        }
Example #9
0
        public async Task Execute(NpcStatusModel model)
        {
            int playerId = model.TargetId;
            int npcId    = model.NpcId;



            var npc = await _npcDomainService.Get(npcId);

            if (npc == null)
            {
                await StopAction(npcId);

                return;
            }

            switch (model.Status)
            {
            case NpcStatusEnum.切磋:
                var player = await _playerDomainService.Get(playerId);

                if (player == null)
                {
                    await StopAction(npcId);

                    return;
                }

                await Fighting(npc, player);

                break;

            case NpcStatusEnum.移动:

                break;

            case NpcStatusEnum.空闲:

                break;
            }
        }
Example #10
0
 public async Task <PlayerEntity> GetUserPlayer(int userId)
 {
     return(await _playerDomainService.Get(x => x.UserId == userId));
 }
Example #11
0
        public async Task <Unit> Handle(QuestCommand command, CancellationToken cancellationToken)
        {
            var playerId = command.PlayerId;
            var questId  = command.QuestId;

            var player = await _playerDomainService.Get(playerId);

            if (player == null)
            {
                await _bus.RaiseEvent(new DomainNotification($"角色不存在!"));

                return(Unit.Value);
            }

            var quest = await _questDomainService.Get(questId);

            if (quest == null)
            {
                await _bus.RaiseEvent(new DomainNotification($"任务不存在!"));

                return(Unit.Value);
            }

            var playerQuest = await _playerQuestDomainService.Get(x => x.PlayerId == playerId && x.QuestId == questId);

            if (playerQuest != null)
            {
                //已领取
                if (playerQuest.HasTake)
                {
                    await _mudProvider.ShowMessage(playerId, "领取任务成功!");

                    //await _mudProvider.ShowMessage(playerId, quest.InProgressWords);
                    return(Unit.Value);
                }

                //未领取但是之前已经完成过
                switch (quest.Period)
                {
                case QuestPeriodEnum.可重复:
                    await _mudProvider.ShowMessage(playerId, "该任务仅可领取一次,你已经领取过!");

                    return(Unit.Value);

                    break;

                case QuestPeriodEnum.无限制:

                    break;

                case QuestPeriodEnum.每周一次:
                    if (DateTime.Now.Subtract(playerQuest.TakeDate).TotalDays <= 7)
                    {
                        await _mudProvider.ShowMessage(playerId, "该任务每周仅可领取一次,你已经领取过!");

                        return(Unit.Value);
                    }
                    break;

                case QuestPeriodEnum.每天一次:
                    if (DateTime.Now.Subtract(playerQuest.TakeDate).TotalHours <= 24)
                    {
                        await _mudProvider.ShowMessage(playerId, "该任务每天仅可领取一次,你已经领取过!");

                        return(Unit.Value);
                    }
                    break;

                case QuestPeriodEnum.每年一次:
                    if (DateTime.Now.Subtract(playerQuest.TakeDate).TotalDays <= 365)
                    {
                        await _mudProvider.ShowMessage(playerId, "该任务每年仅可领取一次,你已经领取过!");

                        return(Unit.Value);
                    }
                    break;

                case QuestPeriodEnum.每月一次:
                    if (DateTime.Now.Subtract(playerQuest.TakeDate).TotalDays <= 30)
                    {
                        await _mudProvider.ShowMessage(playerId, "该任务每月仅可领取一次,你已经领取过!");

                        return(Unit.Value);
                    }
                    break;
                }
            }

            var checkCondition = await CheckTakeCondition(player, quest.TakeCondition);

            if (!checkCondition.IsSuccess)
            {
                await _bus.RaiseEvent(new DomainNotification($"你还不能领取这个任务 !{checkCondition.ErrorMessage}"));

                return(Unit.Value);
            }

            if (playerQuest == null)
            {
                playerQuest = new PlayerQuestEntity
                {
                    PlayerId     = player.Id,
                    QuestId      = questId,
                    IsComplete   = false,
                    TakeDate     = DateTime.Now,
                    CompleteDate = DateTime.Now,
                    CreateDate   = DateTime.Now,
                    DayTimes     = 1,
                    HasTake      = true,
                    Target       = quest.Target,
                    Times        = 1,
                    UpdateDate   = DateTime.Now
                };
                await _playerQuestDomainService.Add(playerQuest);
            }
            else
            {
                //TODO 领取任务
                playerQuest.HasTake    = true;
                playerQuest.IsComplete = false;
                playerQuest.TakeDate   = DateTime.Now;
                playerQuest.Times     += 1;
                playerQuest.Target     = quest.Target;

                await _playerQuestDomainService.Update(playerQuest);
            }


            if (await Commit())
            {
                await _bus.RaiseEvent(new DomainNotification($"领取任务 {quest.Name} !"));
            }



            return(Unit.Value);
        }
Example #12
0
        public async Task Execute(PlayerStatusModel model)
        {
            int playerId = model.PlayerId;
            var player   = await _playerDomainService.Get(playerId);

            if (player == null)
            {
                _logger.LogDebug($"player == null");
                return;
            }

            var online = await _mudOnlineProvider.GetPlayerOnline(playerId);

            if (online == null)
            {
                //玩家离线后,从队列删除,并且修改状态为空闲
                await _recurringQueue.Remove <PlayerStatusModel>(playerId);

                if (player.Status != PlayerStatusEnum.空闲)
                {
                    player.Status = PlayerStatusEnum.空闲;
                    await _playerDomainService.Update(player);

                    await _bus.RaiseEvent(new PlayerStatusChangedEvent(player)).ConfigureAwait(false);
                }
                return;
            }

            if (player.Status != model.Status)
            {
                await _recurringQueue.Remove <PlayerStatusModel>(playerId);

                return;
            }


            //TODO
            switch (model.Status)
            {
            case PlayerStatusEnum.伐木:
            case PlayerStatusEnum.挖矿:
            case PlayerStatusEnum.打猎:
            case PlayerStatusEnum.采药:
            case PlayerStatusEnum.钓鱼:
            case PlayerStatusEnum.打工:

                await DoWork(player);

                break;

            case PlayerStatusEnum.疗伤:
                await Heal(player);

                break;

            case PlayerStatusEnum.打坐:
                await Muse(player);

                break;

            case PlayerStatusEnum.战斗:
                await Fighting(player, model.TargetId);

                break;
            }
        }
Example #13
0
        public async Task <Unit> Handle(StopActionCommand command, CancellationToken cancellationToken)
        {
            //await _bus.RaiseEvent(new DomainNotification("功能暂时未实现"));

            var playerId = command.PlayerId;
            var player   = await _playerDomainService.Get(playerId);

            if (player == null)
            {
                await _bus.RaiseEvent(new DomainNotification($"角色不存在!"));

                return(Unit.Value);
            }
            var status = player.Status;

            if (status == PlayerStatusEnum.空闲)
            {
                return(Unit.Value);
            }


            player.Status = PlayerStatusEnum.空闲;
            await _playerDomainService.Update(player);

            switch (status)
            {
            case PlayerStatusEnum.打坐:
                await _mudProvider.ShowMessage(playerId, "你停止了打坐。。。");

                break;

            case PlayerStatusEnum.打工:
                await _mudProvider.ShowMessage(playerId, "你停止了打工。。。");

                break;

            case PlayerStatusEnum.伐木:
                await _mudProvider.ShowMessage(playerId, "你停止了伐木。。。");

                break;

            case PlayerStatusEnum.打猎:
                await _mudProvider.ShowMessage(playerId, "你停止了打猎。。。");

                break;

            case PlayerStatusEnum.挖矿:
                await _mudProvider.ShowMessage(playerId, "你停止了挖矿。。。");

                break;

            case PlayerStatusEnum.疗伤:
                await _mudProvider.ShowMessage(playerId, "你停止了疗伤。。。");

                break;

            case PlayerStatusEnum.采药:
                await _mudProvider.ShowMessage(playerId, "你停止了采药。。。");

                break;

            case PlayerStatusEnum.钓鱼:
                await _mudProvider.ShowMessage(playerId, "你停止了钓鱼。。。");

                break;

            default:
                await _mudProvider.ShowMessage(playerId, $"你停止了{status}。。。");

                break;
            }

            await _recurringQueue.Remove <PlayerStatusModel>($"player_{playerId}");

            if (await Commit())
            {
                await _bus.RaiseEvent(new PlayerStatusChangedEvent(player)).ConfigureAwait(false);
            }
            return(Unit.Value);
        }
Example #14
0
        public async Task <bool> CompleteQuestNewbieQuestQueue(CompleteQuestNewbieQuestQueue message)
        {
            _logger.LogDebug($"Consumer Get Queue {JsonConvert.SerializeObject(message)} ready");

            var playerId  = message.PlayerId;
            var questType = message.Quest;

            int questId = 0;

            switch (questType)
            {
            case NewbieQuestEnum.第一次伐木:
                questId = 5;
                break;

            case NewbieQuestEnum.第一次聊天:
                questId = 3;
                break;
            }
            if (questId == 0)
            {
                return(true);
            }

            var hasCompleteQuest = await _redisDb.StringGet <int>(string.Format(RedisKey.CompleteQuest, playerId, questId));

            if (hasCompleteQuest == 1)
            {
                return(true);
            }

            var player = await _playerDomainService.Get(playerId);

            if (player == null)
            {
                return(true);
            }

            var quest = await _questDomainService.Get(questId);

            if (quest == null || quest.Type != QuestTypeEnum.新手)
            {
                return(true);
            }

            var playerQuest = await _playerQuestDomainService.Get(x => x.PlayerId == playerId && x.QuestId == quest.Id);

            if (playerQuest == null || playerQuest.Status != QuestStateEnum.已领取进行中)
            {
                return(true);
            }



            //TODO 修改任务状态
            //playerQuest.HasTake = false;
            playerQuest.CompleteDate = DateTime.Now;
            playerQuest.Status       = QuestStateEnum.完成已领奖;
            playerQuest.CompleteTimes++;
            //playerQuest.IsComplete = true;
            await _playerQuestDomainService.Update(playerQuest);

            await _mudProvider.ShowMessage(player.Id, $"完成任务[{quest.Name}]");

            await TakeQuestReward(player, quest.Reward);

            //TODO  领取奖励



            if (await Commit())
            {
                await _redisDb.StringSet <int>(string.Format(RedisKey.CompleteQuest, playerId, questId), 1);
            }

            return(true);
        }
Example #15
0
        public async Task <Unit> Handle(ShowNpcCommand command, CancellationToken cancellationToken)
        {
            var playerId = command.PlayerId;
            var npcId    = command.NpcId;

            var npcInfo = new NpcInfo()
            {
                Descriptions = new List <string>(),
                Actions      = new List <NpcAction>(),
                Id           = npcId
            };
            var npc = await _npcDomainService.Get(npcId);

            if (npc == null)
            {
                return(Unit.Value);
            }

            npcInfo.Name = npc.Name;
            string genderStr = npc.Gender.ToGender();

            if (npc.Type == NpcTypeEnum.人物)
            {
                //npcInfo.Actions.Add(new NpcAction { Name = NpcActionEnum.给予.ToString() });
            }

            if (npc.CanFight)
            {
                npcInfo.Actions.Add(new NpcAction {
                    Name = NpcActionEnum.切磋.ToString()
                });
            }

            if (npc.CanKill)
            {
                npcInfo.Actions.Add(new NpcAction {
                    Name = NpcActionEnum.杀死.ToString()
                });
            }

            var player = await _playerDomainService.Get(playerId);

            npcInfo.Descriptions.Add(npc.Description ?? "");
            npcInfo.Descriptions.Add($"{genderStr}{npc.Age.ToAge()}");
            npcInfo.Descriptions.Add($"{genderStr}{npc.Per.ToPer(npc.Age, npc.Gender)}");
            npcInfo.Descriptions.Add($"{genderStr}{npc.Exp.ToKunFuLevel(player.Exp)}");


            var npcScripts = (await _npcScriptDomainService.GetAll()).Where(x => x.NpcId == npc.Id).ToList();

            foreach (var npcScript in npcScripts)
            {
                var script = await _scriptDomainService.Get(npcScript.ScriptId);

                if (script != null)
                {
                    npcInfo.Actions.Add(new NpcAction {
                        Name = script.Name, ScriptId = script.Id, CommandId = 0
                    });
                }
            }


            await _mudProvider.ShowNpc(playerId, npcInfo);


            await _bus.RaiseEvent(new ChatWithNpcEvent(playerId, npc.Id)).ConfigureAwait(false);



            return(Unit.Value);
        }
Example #16
0
        public async Task <Unit> Handle(ShowNpcCommand command, CancellationToken cancellationToken)
        {
            var playerId = command.PlayerId;
            var npcId    = command.NpcId;

            var npcInfo = new NpcInfo()
            {
                Descriptions = new List <string>(),
                Actions      = new List <NpcAction>(),
                Id           = npcId
            };
            var npc = await _npcDomainService.Get(npcId);

            if (npc == null)
            {
                return(Unit.Value);
            }

            npcInfo.Name = npc.Name;
            string genderStr = npc.Gender.ToGender();

            if (npc.CanChat)
            {
                npcInfo.Actions.Add(new NpcAction {
                    Name = NpcActionEnum.闲聊.ToString()
                });
            }

            if (npc.Type == NpcTypeEnum.人物)
            {
                //npcInfo.Actions.Add(new NpcAction { Name = NpcActionEnum.给予.ToString() });
            }

            if (npc.CanFight)
            {
                npcInfo.Actions.Add(new NpcAction {
                    Name = NpcActionEnum.切磋.ToString()
                });
            }

            if (npc.CanKill)
            {
                npcInfo.Actions.Add(new NpcAction {
                    Name = NpcActionEnum.杀死.ToString(), IsConfirm = true, Message = $"要杀死{npc.Name}吗?"
                });
            }

            var npcLiking = await _npcLikingDomainService.Get(x => x.PlayerId == playerId && x.NpcId == npcId);

            if (npcLiking?.Liking > 20)
            {
                var playerRelation = await _playerRelationDomainService.Get(x => x.Type == PlayerRelationTypeEnum.师父 && x.PlayerId == playerId && x.RelationId == npcId);

                if (playerRelation == null)
                {
                    npcInfo.Actions.Add(new NpcAction {
                        Name = NpcActionEnum.拜师.ToString(), IsConfirm = true, Message = $"要拜{npc.Name}为师吗?"
                    });
                }
                else
                {
                    npcInfo.Actions.Add(new NpcAction {
                        Name = NpcActionEnum.出师.ToString(), IsConfirm = true, Message = $"要与{npc.Name}断绝师徒关系吗?"
                    });

                    npcInfo.Actions.Add(new NpcAction {
                        Name = NpcActionEnum.查看武功.ToString()
                    });
                }
            }

            var player = await _playerDomainService.Get(playerId);

            npcInfo.Descriptions.Add(npc.Description ?? "");
            npcInfo.Descriptions.Add($"{genderStr}{npc.Age.ToAge()}");
            npcInfo.Descriptions.Add($"{genderStr}{npc.Per.ToPer(npc.Age, npc.Gender)}");
            npcInfo.Descriptions.Add($"{genderStr}{npc.Exp.ToKunFuLevel(player.Exp)}");


            var npcScripts = (await _npcScriptDomainService.GetAll()).Where(x => x.NpcId == npc.Id).ToList();

            foreach (var npcScript in npcScripts)
            {
                var script = await _scriptDomainService.Get(npcScript.ScriptId);

                if (script != null)
                {
                    npcInfo.Actions.Add(new NpcAction {
                        Name = script.Name, ScriptId = script.Id, CommandId = 0
                    });
                }
            }


            await _mudProvider.ShowNpc(playerId, npcInfo);



            return(Unit.Value);
        }
Example #17
0
 public async Task <PlayerEntity> Get(int id)
 {
     return(await _playerDomainService.Get(id));
 }
Example #18
0
        public async Task <Unit> Handle(CreateCommand command, CancellationToken cancellationToken)
        {
            var name   = command.Name;
            var gender = command.Gender;
            var userId = command.UserId;
            var str    = command.Str;
            var @int   = command.Int;
            var dex    = command.Dex;
            var con    = command.Con;

            var player = await _playerDomainService.Get(p => p.Name == name);

            if (player != null)
            {
                await _bus.RaiseEvent(new DomainNotification("角色名已被使用,请更改!"));

                return(Unit.Value);
            }

            player = await _playerDomainService.Get(x => x.UserId == userId);

            if (player != null)
            {
                await _bus.RaiseEvent(new DomainNotification("已经超过最大可创建角色数!"));

                return(Unit.Value);
            }

            if (str + @int + dex + con != 80)
            {
                await _bus.RaiseEvent(new DomainNotification("所有先天属性之和必须为80!"));

                return(Unit.Value);
            }

            var roomId = _appConfig.Site.BornRoomId;

            if (roomId <= 0)
            {
                await _bus.RaiseEvent(new DomainNotification("未设置出生地点!"));

                return(Unit.Value);
            }

            var room = await _roomDomainService.Get(roomId);

            if (room == null)
            {
                await _bus.RaiseEvent(new DomainNotification("设置的出生地点不存在!"));

                return(Unit.Value);
            }

            Random random = new Random();

            player = new PlayerEntity
            {
                CreateDate = DateTime.Now,
                LastDate   = DateTime.Now,
                Level      = 1,
                Name       = name,
                UserId     = userId,
                Status     = PlayerStatusEnum.空闲,
                Gender     = gender,
                Age        = 14 * 12,
                ConAdd     = 0,
                DexAdd     = 0,
                FactionId  = 0,
                IntAdd     = 0,
                Money      = 0,
                RoomId     = roomId,
                Title      = "",
                StrAdd     = 0,
                Atk        = 0,
                Str        = str,
                Con        = con,
                Int        = @int,
                Dex        = dex,
                Exp        = 0,
                Cor        = 20,
                Cps        = 20,


                Pot     = 0,
                Kar     = random.Next(1, 100),
                Def     = 0,
                Hp      = 0,
                LimitMp = 0,
                MaxHp   = 0,
                MaxMp   = 0,
                Mp      = 0,

                Hit   = 0,
                Parry = 0,
                Flee  = 0,
                Per   = random.Next(10, 50),
                Nrg   = 0
            };

            player.Computed();

            await _playerDomainService.Add(player);

            var jwtAccount = new JwtAccount
            {
                UserId     = userId,
                Email      = _account.Email,
                PlayerId   = player.Id,
                PlayerName = player.Name
            };

            await _httpAccessor.HttpContext.SignIn("user", jwtAccount);

            if (await Commit())
            {
                await _bus.RaiseEvent(new CreatedEvent(player)).ConfigureAwait(false);
            }


            return(Unit.Value);
        }