public void RandomShopRollHandler(GameSession session, CRandomShopRollingStartReqMessage message) { var shop = GameServer.Instance.ResourceCache.GetShop(); session.Send(new SRandomShopItemInfoAckMessage { Item = new RandomShopItemDto() }); //session.Send(new SRandomShopItemInfoAckMessage //{ // Item = new RandomShopItemDto // { // Unk1 = 2000001, // Value = 2000001, // CurrentWeapon = 2000001, // Unk4 = 2000001, // Unk5 = 2000001, // Unk6 = 0, // } //}); }
public void RandomShopRollHandler(GameSession session, CRandomShopRollingStartReqMessage message) { var shop = GameServer.Instance.ResourceCache.GetShop(); var itemList = shop.RandomShop; if (itemList.Count == 0) { session.SendAsync(new SRandomShopItemInfoAckMessage { Item = new RandomShopItemDto { Unk1 = (uint)(message.IsWeapon ? 1 : 0), ItemNumber = 0, Effect = 0, PeriodType = 0, Period = 0 } }); return; } var effectList = shop.Effects; var plr = session.Player; var rand = new Random(); Shop.ShopItemInfo item = null; var PEN = message.IsWeapon ? 3000 : 800; if (plr.RandomShop[message.IsWeapon ? 1 : 0] == null) { plr.RandomShop[message.IsWeapon ? 1 : 0] = new RandomShopInfo(); } var rnd = plr.RandomShop[message.IsWeapon ? 1 : 0]; if (plr.PEN < PEN) { session.SendAsync(new SRandomShopItemInfoAckMessage { Item = new RandomShopItemDto() }); } plr.PEN -= (uint)PEN; session.SendAsync(new SRefreshCashInfoAckMessage { PEN = plr.PEN, AP = plr.AP }); roll: if (message.StopItem == 0) { ItemCategory cat; if (message.IsWeapon) { cat = ItemCategory.Weapon; } else { cat = ItemCategory.Costume; } var bag = (from it in itemList where it.ShopItem.ItemNumber.Category == cat select it).ToList(); item = bag.ElementAt(rand.Next(bag.Count)); rnd.Item = item.ShopItem.ItemNumber; } else { item = itemList.FirstOrDefault(x => x.ShopItem.ItemNumber == rnd.Item); } if (item == null) { goto roll; } var prices = item.PriceGroup.Prices; var price = prices.ElementAt(rand.Next(prices.Count)); if (message.StopEffect == 0) { var effects = item.EffectGroup.Effects; rnd.Effect = effects.ElementAt(rand.Next(effects.Count)).Effect; } rnd.PriceType = item.PriceGroup.PriceType; rnd.PeriodType = price.PeriodType; rnd.Period = price.Period; session.SendAsync(new SRandomShopItemInfoAckMessage { Item = new RandomShopItemDto { Unk1 = (uint)(message.IsWeapon ? 1 : 0), ItemNumber = rnd.Item, Effect = rnd.Effect, PeriodType = rnd.PeriodType, Period = rnd.Period } }); }