Esempio n. 1
0
        public void UseCapsuleReq(GameSession session, ItemUseCapsuleReqMessage message)
        {
            var ItemBags = GameServer.Instance.ResourceCache.GetItemRewards();
            var plr      = session.Player;
            var item     = plr.Inventory[message.ItemId];

            if (!ItemBags.ContainsKey(item.ItemNumber))
            {
                session.SendAsync(new ItemUseCapsuleAckMessage(1));
                return;
            }

            item.Count--;

            if (item.Count <= 0)
            {
                plr.Inventory.Remove(item);
            }
            else
            {
                session.SendAsync(new ItemUpdateInventoryAckMessage(InventoryAction.Update, item.Map <PlayerItem, ItemDto>()));
            }

            var ItemBag = ItemBags[item.ItemNumber];

            var Rewards = (from bag in ItemBag.Bags
                           let reward = bag.Take()
                                        select new CapsuleRewardDto
            {
                RewardType = reward.Type,
                ItemNumber = reward.Item,
                PriceType = reward.PriceType,
                PeriodType = reward.PeriodType,
                Period = reward.Period,
                PEN = reward.PEN,
                Effect = reward.Effects.FirstOrDefault(),
                Color = (byte)reward.Color
            }).ToArray();

            foreach (var it in Rewards)
            {
                if (it.RewardType == CapsuleRewardType.PEN)
                {
                    plr.PEN += it.PEN;
                }
                else
                {
                    if (it.PeriodType == ItemPeriodType.Units)
                    {
                        session.Player.Inventory.Create(it.ItemNumber, 3, it.Color, new EffectNumber[] { it.Effect }, it.Period);
                    }
                    else
                    {
                        session.Player.Inventory.Create(it.ItemNumber, 1, it.Color, new EffectNumber[] { it.Effect }, it.Period);
                    }
                }
            }
            session.SendAsync(new ItemUseCapsuleAckMessage(Rewards, 3));
            session.SendAsync(new MoneyRefreshCashInfoAckMessage(plr.PEN, plr.AP));
        }
 public void UseCapsuleReq(GameSession session, ItemUseCapsuleReqMessage message)
 {
     session.SendAsync(new ServerResultAckMessage((ServerResult)1));
     //session.Send(new ItemUseCapsuleAckMessage(new List<CapsuleRewardDto>
     //{
     //    new CapsuleRewardDto(CapsuleRewardType.Item, 0, 64, 0),
     //    new CapsuleRewardDto(CapsuleRewardType.Item, 0, 154, 123),
     //    new CapsuleRewardDto(CapsuleRewardType.PEN, 9999, 0, 0),
     //    //new CapsuleRewardDto(CapsuleRewardType.PEN, 2, 0, 0),
     //    //new CapsuleRewardDto(CapsuleRewardType.PEN, 3, 0, 0),
     //}, 3));
 }
Esempio n. 3
0
        //[MessageHandler(typeof(ItemUseCapsuleReqMessage))]
        public void UseCapsuleReq1(GameSession session, ItemUseCapsuleReqMessage message)
        {
            var item = session.Player.Inventory.GetItem(message.ItemId);

            if (item.ItemNumber.Id == 4030051) //capsule
            {
                var  random = new SecureRandom();
                uint count  = 100;
                for (var i = 0; i < 5; i++)
                {
                    var counta = (uint)random.Next(1, 100);
                    if (counta < count)
                    {
                        count = counta;
                    }
                }

                if (count >= 75)
                {
                    count = 100;
                }
                else if (count >= 50)
                {
                    count = 50;
                }
                else if (count >= 25)
                {
                    count = 25;
                }
                else if (count >= 20)
                {
                    count = 20;
                }
                else if (count >= 15)
                {
                    count = 15;
                }
                else if (count >= 5)
                {
                    count = 5;
                }
                else if (count >= 2)
                {
                    count = 2;
                }
                else if (count >= 1)
                {
                    count = 1;
                }

                var pencount = 0;
                pencount = random.Next(300, (int)(count + 300 * 100));
                pencount = 5 * (int)Math.Round(pencount / 5.0);
                pencount = 150 * (int)Math.Round(pencount / 150.0);

                var reward = new List <CapsuleRewardDto>
                {
                    new CapsuleRewardDto(CapsuleRewardType.Item, 0, new ItemNumber(6000001), ItemPriceType.CP,
                                         ItemPeriodType.Units, count),
                    new CapsuleRewardDto(CapsuleRewardType.PEN, (uint)pencount, new ItemNumber(),
                                         ItemPriceType.PEN, ItemPeriodType.None, 0)
                };

                session.SendAsync(new ItemUseCapsuleAckMessage(reward.ToArray(), 3));
                if (item.Count <= 1)
                {
                    session.Player.Inventory.Remove(item);
                }
                else
                {
                    item.Count      -= 1;
                    item.NeedsToSave = true;
                    session.SendAsync(new ItemUpdateInventoryAckMessage(InventoryAction.Update, item.Map <PlayerItem, ItemDto>()));
                }
            }
            else
            {
                session.SendAsync(new ItemUseCapsuleAckMessage(1));
            }
        }
Esempio n. 4
0
        public async Task ItemUseCapsule(GameSession session, ItemUseCapsuleReqMessage message)
        {
            var ItemBags = GameServer.Instance.ResourceCache.GetItemRewards();
            var shop     = GameServer.Instance.ResourceCache.GetShop();

            var plr  = session.Player;
            var item = plr.Inventory[message.ItemId];

            if (!ItemBags.ContainsKey(item.ItemNumber))
            {
                await session.SendAsync(new ServerResultAckMessage(ServerResult.DBError));

                return;
            }

            item.Count--;

            if (item.Count <= 0)
            {
                plr.Inventory.Remove(item);
            }
            else
            {
                await session.SendAsync(new ItemUpdateInventoryAckMessage(InventoryAction.Update, item.Map <PlayerItem, ItemDto>()));
            }

            var ItemBag = ItemBags[item.ItemNumber];
            var Rewards = (from bag in ItemBag.Bags
                           let reward = bag.Take()
                                        select new CapsuleRewardDto
            {
                RewardType = reward.Type,
                ItemNumber = reward.Item,
                PriceType = reward.PriceType,
                PeriodType = reward.PeriodType,
                Period = reward.Period,
                Color = reward.Color,
                PEN = reward.PEN,
            }).ToArray();

            Dictionary <CapsuleRewardDto, EffectNumber[]> _rewards = new Dictionary <CapsuleRewardDto, EffectNumber[]>();

            foreach (var rew in Rewards)
            {
                var info    = shop.GetItemInfo(rew.ItemNumber, rew.PriceType);
                var effects = new List <EffectNumber>();

                if (info == null && rew.RewardType != CapsuleRewardType.PEN)
                {
                    await session.SendAsync(new ItemUseCapsuleAckMessage(7));

                    item.Count++;
                    return;
                }

                if (rew.RewardType == CapsuleRewardType.Item)
                {
                    foreach (var effect in info.EffectGroup.Effects)
                    {
                        effects.Add(effect.Effect);
                    }
                }

                var reward = new CapsuleRewardDto
                {
                    RewardType = rew.RewardType,
                    ItemNumber = rew.ItemNumber,
                    PriceType  = rew.PriceType,
                    PeriodType = rew.PeriodType,
                    Effect     = rew.RewardType == CapsuleRewardType.PEN ? 0 : info.EffectGroup.MainEffect,
                    Period     = rew.Period,
                    Color      = (byte)rew.Color,
                    PEN        = rew.PEN
                };
                _rewards.Add(reward, effects.ToArray());
            }

            foreach (var it in _rewards)
            {
                if (it.Key.RewardType == CapsuleRewardType.PEN)
                {
                    plr.PEN += it.Key.PEN;
                }
                else
                {
                    if (it.Key.PeriodType == ItemPeriodType.None)
                    {
                        //plr.Inventory.Create(it.Key.ItemNumber, it.Key.PriceType, it.Key.PeriodType, (ushort)it.Key.Period, it.Key.Color, null, 1);
                        plr.Inventory.Create(it.Key.ItemNumber, 0, it.Key.Color, new EffectNumber[0], 1);
                    }
                    else
                    {
                        var prev = plr.Inventory
                                   .FirstOrDefault(p => p.ItemNumber == it.Key.ItemNumber &&
                                                   p.PeriodType == it.Key.PeriodType &&
                                                   p.PriceType == it.Key.PriceType);
                        if (prev == null || prev.ItemNumber == 0)
                        {
                            // plr.Inventory.Create(it.Key.ItemNumber, it.Key.PriceType, it.Key.PeriodType, (ushort)it.Key.Period, it.Key.Color, null, 1);
                            plr.Inventory.Create(it.Key.ItemNumber, 0, it.Key.Color, new EffectNumber[0], 1);
                        }
                        else
                        {
                            if (it.Key.PeriodType == ItemPeriodType.Units)
                            {
                                prev.Count += it.Key.Period;
                            }
                            else
                            {
                                prev.Period += (ushort)it.Key.Period;
                            }
                            await session.SendAsync(new ItemUpdateInventoryAckMessage(InventoryAction.Update, prev.Map <PlayerItem, ItemDto>()));
                        }
                    }
                }
            }
            await session.SendAsync(new ItemUseCapsuleAckMessage(_rewards.Keys.ToArray(), 3));

            await session.SendAsync(new MoneyRefreshCashInfoAckMessage(plr.PEN, plr.AP));
        }