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); }
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); }
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 }。"); } }
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); }
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); }
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); }
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}。。。"); }
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 }); }
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; } }
public async Task <PlayerEntity> GetUserPlayer(int userId) { return(await _playerDomainService.Get(x => x.UserId == userId)); }
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); }
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; } }
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); }
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); }
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); }
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); }
public async Task <PlayerEntity> Get(int id) { return(await _playerDomainService.Get(id)); }
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); }