public void UseCapsuleReq(GameSession session, CUseCapsuleReqMessage message) { session.SendAsync(new SServerResultInfoAckMessage((ServerResult)1)); //session.Send(new SUseCapsuleAckMessage(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)); }
public void UseCapsuleReq(GameSession session, CUseCapsuleReqMessage 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 SServerResultInfoAckMessage(ServerResult.DBError)); return; } item.Count--; if (item.Count <= 0) { plr.Inventory.Remove(item); } else { session.SendAsync(new SInventoryActionAckMessage(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.Effect, Unk = (byte)reward.Color }).ToArray(); foreach (var it in Rewards) { if (it.RewardType == CapsuleRewardType.PEN) { plr.PEN += it.PEN; } else { if (it.PeriodType == ItemPeriodType.Units) { var prev = plr.Inventory .FirstOrDefault(p => p.ItemNumber == it.ItemNumber && p.PeriodType == it.PeriodType && p.PriceType == it.PriceType && p.Effect == it.Effect); if (prev == null || prev.ItemNumber == 0) { plr.Inventory.Create(it.ItemNumber, it.PriceType, it.PeriodType, (ushort)it.Period, it.Unk, it.Effect, 1); } else { prev.Count++; session.SendAsync(new SInventoryActionAckMessage(InventoryAction.Update, prev.Map <PlayerItem, ItemDto>())); } } else { plr.Inventory.Create(it.ItemNumber, it.PriceType, it.PeriodType, (ushort)it.Period, it.Unk, it.Effect, 1); } } } session.SendAsync(new SUseCapsuleAckMessage(Rewards, 3)); session.SendAsync(new SRefreshCashInfoAckMessage(plr.PEN, plr.AP)); }