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)); }
//[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)); } }
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)); }