private static void HandleOpen(GameSession session, PacketReader packet) { int rouletteId = packet.ReadInt(); List <RouletteGameItem> items = DatabaseManager.RouletteGameItems.FindAllByRouletteId(rouletteId); if (items.Count == 0) { return; } session.Player.RouletteId = rouletteId; session.Send(RouletteGamePacket.OpenWheel(items)); }
private static void HandleSpin(GameSession session) { List <RouletteGameItem> items = DatabaseManager.RouletteGameItems.FindAllByRouletteId(session.Player.RouletteId); if (items.Count == 0) { return; } Script luaScript = ScriptLoader.GetScript($"Npcs/{session.Player.NpcTalk.Npc.Id}", session); DynValue result = luaScript?.RunFunction("rouletteSpin", session.Player.NpcTalk.ScriptId); if (result == null) { return; } int tokenItemId = (int)result.Tuple[0].Number; int spinCount = (int)result.Tuple[1].Number; int tokenSpinCost = (int)result.Tuple[2].Number; int totalTokenSpinCost = spinCount * tokenSpinCost; Item token = session.Player.Inventory.GetById(tokenItemId); if (token.Amount < totalTokenSpinCost) { return; } session.Player.Inventory.ConsumeItem(session, token.Uid, totalTokenSpinCost); List <int> randomIndexes = new(); for (int i = 0; i < spinCount; i++) { int randomIndex = Random.Shared.Next(0, items.Count); randomIndexes.Add(randomIndex); Item item = new(items[randomIndex].ItemId, items[randomIndex].ItemAmount, items[randomIndex].ItemRarity); session.Player.Inventory.AddItem(session, item, true); } session.Send(RouletteGamePacket.SpinWheel(randomIndexes, items)); }