示例#1
0
    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));
    }
示例#2
0
    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));
    }