예제 #1
0
        private async Task <WareModel> Computed(WareEntity ware, PlayerWareEntity playerWare)
        {
            var wareModel = _mapper.Map <WareModel>(ware);

            wareModel.PlayerWareId = playerWare.Id;
            wareModel.Number       = playerWare.Number;
            wareModel.Status       = playerWare.Status;

            var wareEffectAttr = new WareEffectAttr();
            var effects        = JsonConvert.DeserializeObject <List <WareEffect> >(ware.Effect);

            foreach (var effect in effects)
            {
                foreach (var attr in effect.Attrs)
                {
                    int.TryParse(attr.Val, out int val);

                    switch (attr.Attr)
                    {
                    case "Atk":
                        wareEffectAttr.Atk += val;
                        break;

                    case "Def":
                        wareEffectAttr.Def += val;
                        break;

                    case "Hp":
                        wareEffectAttr.Hp += val;
                        break;

                    case "Mp":
                        wareEffectAttr.Mp += val;
                        break;
                    }
                }
            }

            wareModel.WareEffect = wareEffectAttr;

            return(await Task.FromResult(wareModel));
        }
예제 #2
0
 public async Task Update(PlayerWareEntity entity)
 {
     await _scriptRepository.Update(entity);
 }
예제 #3
0
 public async Task Add(PlayerWareEntity entity)
 {
     await _scriptRepository.Add(entity);
 }
예제 #4
0
        private async Task DoWork(PlayerEntity player)
        {
            await _mudProvider.ShowMessage(player.Id, $"你正在{player.Status}。。。");

            WorkTypeEnum workType = WorkTypeEnum.伐木;

            switch (player.Status)
            {
            case PlayerStatusEnum.伐木:
                workType = WorkTypeEnum.伐木;
                break;

            case PlayerStatusEnum.挖矿:
                workType = WorkTypeEnum.挖矿;
                break;

            case PlayerStatusEnum.打猎:
                workType = WorkTypeEnum.打猎;
                break;

            case PlayerStatusEnum.采药:
                workType = WorkTypeEnum.采药;
                break;

            case PlayerStatusEnum.钓鱼:
                workType = WorkTypeEnum.钓鱼;
                break;

            case PlayerStatusEnum.打工:
                workType = WorkTypeEnum.打工;
                break;

            default:
                return;
            }

            var ids = (await _roomItemDropDomainService.GetAll()).Where(x => x.RoomId == player.RoomId).Select(x => x.ItemDropId).ToList();

            var itemDrop = (await _itemDropDomainService.GetAll()).Where(x => ids.Contains(x.Id)).FirstOrDefault(x => x.WorkType == workType);

            if (itemDrop == null)
            {
                return;
            }


            var itemDropRates = (await _itemDropRateDomainService.GetAll()).Where(x => x.ItemDropId == itemDrop.Id).ToList();

            if (itemDropRates?.Count == 0)
            {
                return;
            }

            var random         = new Random();
            int maxWeight      = 100;//掉落总权重
            var itemDropModels = new List <ItemDropRateModel>();

            foreach (var itemDropRate in itemDropRates.OrderBy(x => x.Order))
            {
                if (itemDropRate.Percent < random.Next(0, 100))
                {
                    continue;
                }

                int number = random.Next(Math.Min(itemDropRate.MinNumber, itemDropRate.MaxNumber), itemDropRate.MaxNumber + 1);
                if (number <= 0)
                {
                    continue;
                }

                //掉落
                maxWeight -= itemDropRate.Weight;

                var itemDropModel = new ItemDropRateModel
                {
                    DropType = itemDropRate.DropType,
                    Number   = number,
                    WareId   = itemDropRate.WareId
                };
                itemDropModels.Add(itemDropModel);



                if (maxWeight <= 0)
                {
                    break;
                }
            }

            if (itemDropModels.Count == 0)
            {
                //没有掉落
                return;
            }

            var           playerAttributeChanged = false;
            List <string> dropContents           = new List <string>();

            foreach (var itemDropModel in itemDropModels)
            {
                switch (itemDropModel.DropType)
                {
                case ItemDropTypeEnum.潜能:
                    playerAttributeChanged = true;
                    player.Pot            += itemDropModel.Number;
                    dropContents.Add($"潜能 +{itemDropModel.Number}");
                    break;

                case ItemDropTypeEnum.经验:
                    playerAttributeChanged = true;
                    player.Exp            += itemDropModel.Number;
                    dropContents.Add($"经验 +{itemDropModel.Number}");
                    break;

                case ItemDropTypeEnum.金钱:
                    playerAttributeChanged = true;
                    player.Money          += itemDropModel.Number;
                    dropContents.Add($" +{itemDropModel.Number.ToMoney()}");
                    break;

                case ItemDropTypeEnum.物品:
                    #region MyRegion
                    int wareId = itemDropModel.WareId;
                    int number = itemDropModel.Number;

                    var ware = await _wareDomainService.Get(wareId);

                    if (ware == null)
                    {
                        continue;
                    }

                    dropContents.Add($"{ware.Name} X{number}");

                    var canStack = ware.Category != WareCategoryEnum.武器;

                    if (canStack)
                    {
                        var playerWare = await _playerWareDomainService.Get(x => x.WareId == ware.Id && x.PlayerId == player.Id);

                        if (playerWare == null)
                        {
                            playerWare = new PlayerWareEntity
                            {
                                IsBind   = false,
                                IsTemp   = false,
                                Level    = 1,
                                Number   = number,
                                Damage   = 0,
                                PlayerId = player.Id,
                                Status   = WareStatusEnum.卸下,
                                WareId   = wareId,
                                WareName = ware.Name
                            };
                            await _playerWareDomainService.Add(playerWare);
                        }
                        else
                        {
                            playerWare.Number += number;
                            await _playerWareDomainService.Update(playerWare);
                        }
                    }
                    else
                    {
                        var playerWare = new PlayerWareEntity
                        {
                            IsBind   = false,
                            IsTemp   = false,
                            Level    = 1,
                            Number   = number,
                            Damage   = 0,
                            PlayerId = player.Id,
                            Status   = WareStatusEnum.卸下,
                            WareId   = wareId,
                            WareName = ware.Name
                        };
                        await _playerWareDomainService.Add(playerWare);
                    }
                    #endregion


                    break;
                }
            }

            if (playerAttributeChanged)
            {
                await _bus.RaiseEvent(new PlayerAttributeChangedEvent(player)).ConfigureAwait(false);
            }


            if (dropContents.Count > 0)
            {
                await _mudProvider.ShowMessage(player.Id, $"获得{ string.Join(",", dropContents)   }。");
            }
        }
예제 #5
0
        public async Task <Unit> Handle(BuyStoreWareCommand command, CancellationToken cancellationToken)
        {
            var playerId    = command.PlayerId;
            var storeWareId = command.StoreWareId;
            var number      = command.Number;

            var player = await _playerDomainService.Get(playerId);

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

                return(Unit.Value);
            }

            var storeWare = await _storeWareDomainService.Get(storeWareId);

            if (storeWare == null)
            {
                await _bus.RaiseEvent(new DomainNotification($"物品不存在!"));

                return(Unit.Value);
            }


            var ware = await _wareDomainService.Get(storeWare.WareId);

            if (ware == null)
            {
                await _bus.RaiseEvent(new DomainNotification($"物品不存在!"));

                return(Unit.Value);
            }



            int money = storeWare.Price * number;

            switch (storeWare.PriceType)
            {
            case PriceTypeEnum.点券:
                await _bus.RaiseEvent(new DomainNotification($"该物品无法购买!"));

                break;

            case PriceTypeEnum.元宝:
                await _bus.RaiseEvent(new DomainNotification($"该物品无法购买!"));

                break;

            case PriceTypeEnum.银两:
                if (player.Money < money)
                {
                    await _bus.RaiseEvent(new DomainNotification($"先去赚点钱吧!"));

                    return(Unit.Value);
                }

                player.Money -= money;

                break;
            }

            await _playerDomainService.Update(player);

            var isStack = true;

            if (ware.Category == WareCategoryEnum.装 || ware.Category == WareCategoryEnum.武器)
            {
                isStack = false;
            }

            var newPlayerWare = new PlayerWareEntity
            {
                PlayerId = playerId,
                Damage   = 0,
                IsBind   = false,
                IsTemp   = false,
                Level    = 0,
                Number   = number,
                Status   = WareStatusEnum.卸下,
                WareId   = ware.Id,
                WareName = ware.Name
            };

            if (isStack)
            {
                var playerWare = await _playerWareDomainService.Get(x => x.PlayerId == playerId && x.WareId == ware.Id);

                if (playerWare == null)
                {
                    await _playerWareDomainService.Add(newPlayerWare);
                }
                else
                {
                    playerWare.Number   += number;
                    playerWare.WareName += ware.Name;
                    await _playerWareDomainService.Update(playerWare);
                }
            }
            else
            {
                await _playerWareDomainService.Add(newPlayerWare);
            }


            await _mudProvider.ShowMessage(playerId, $"你购买了 {number}{ware.Unit}[{ware.Name}]!");

            return(Unit.Value);
        }