private static void HandleRoll(GameSession session)
    {
        // Check if player can roll
        Item token = session.Player.Inventory.Items.FirstOrDefault(x => x.Value.Id == Mapleopoly.TOKEN_ITEM_ID).Value;

        if (session.Player.Mapleopoly.FreeRollAmount > 0)
        {
            session.Player.Mapleopoly.FreeRollAmount--;
        }
        else if (token != null && token.Amount >= Mapleopoly.TOKEN_COST)
        {
            session.Player.Inventory.ConsumeItem(session, token.Uid, Mapleopoly.TOKEN_COST);
        }
        else
        {
            session.Send(MapleopolyPacket.Notice((byte)MapleopolyNotice.NotEnoughTokens));
            return;
        }

        Random rnd = RandomProvider.Get();

        // roll two dice
        int roll1     = rnd.Next(1, 6);
        int roll2     = rnd.Next(1, 6);
        int totalRoll = roll1 + roll2;

        session.Player.Mapleopoly.TotalTileCount += totalRoll;
        if (roll1 == roll2)
        {
            session.Player.Mapleopoly.FreeRollAmount++;
        }
        session.Send(MapleopolyPacket.Roll(session.Player.Mapleopoly.TotalTileCount, roll1, roll2));
    }
    private static void HandleOpen(GameSession session)
    {
        List <MapleopolyTile> tiles = DatabaseManager.Mapleopoly.FindAllTiles();

        int  tokenAmount = 0;
        Item token       = session.Player.Inventory.Items.FirstOrDefault(x => x.Value.Id == Mapleopoly.TOKEN_ITEM_ID).Value;

        if (token != null)
        {
            tokenAmount = token.Amount;
        }
        session.Send(MapleopolyPacket.Open(session.Player.Mapleopoly, tiles, tokenAmount));
    }
    private static void HandleProcessTile(GameSession session)
    {
        int currentTilePosition = session.Player.Mapleopoly.TotalTileCount % Mapleopoly.TILE_AMOUNT;

        MapleopolyTile currentTile = DatabaseManager.Mapleopoly.FindTileByPosition(currentTilePosition + 1);

        switch (currentTile.Type)
        {
        case MapleopolyTileType.Item:
        case MapleopolyTileType.TreasureTrove:
            Item item = new(currentTile.ItemId)
            {
                Amount = currentTile.ItemAmount,
                Rarity = currentTile.ItemRarity
            };
            session.Player.Inventory.AddItem(session, item, true);
            break;

        case MapleopolyTileType.Backtrack:
            session.Player.Mapleopoly.TotalTileCount -= currentTile.TileParameter;
            break;

        case MapleopolyTileType.MoveForward:
            session.Player.Mapleopoly.TotalTileCount += currentTile.TileParameter;
            break;

        case MapleopolyTileType.RoundTrip:
            session.Player.Mapleopoly.TotalTileCount += Mapleopoly.TILE_AMOUNT;
            break;

        case MapleopolyTileType.GoToStart:
            int tileToStart = Mapleopoly.TILE_AMOUNT - currentTilePosition;
            session.Player.Mapleopoly.TotalTileCount += tileToStart;
            break;

        case MapleopolyTileType.Start:
            break;

        default:
            Logger.Warn("Unsupported tile");
            break;
        }

        ProcessTrip(session); // Check if player passed Start
        session.Send(MapleopolyPacket.ProcessTile(session.Player.Mapleopoly, currentTile));
    }
Esempio n. 4
0
    private static void HandleProcessTile(GameSession session, GameEventUserValue totalTileValue, GameEventUserValue freeRollValue,
                                          GameEventUserValue totalTripValue)
    {
        int.TryParse(freeRollValue.EventValue, out int freeRolls);
        int.TryParse(totalTileValue.EventValue, out int totalTiles);
        int currentTilePosition = totalTiles % MapleopolyTile.TILE_AMOUNT;

        MapleopolyTile currentTile = DatabaseManager.Mapleopoly.FindTileByPosition(currentTilePosition + 1);

        switch (currentTile.Type)
        {
        case MapleopolyTileType.Item:
        case MapleopolyTileType.TreasureTrove:
            Item item = new(currentTile.ItemId, currentTile.ItemAmount, currentTile.ItemRarity);
            session.Player.Inventory.AddItem(session, item, true);
            break;

        case MapleopolyTileType.Backtrack:
            totalTiles -= currentTile.TileParameter;
            break;

        case MapleopolyTileType.MoveForward:
            totalTiles += currentTile.TileParameter;
            break;

        case MapleopolyTileType.RoundTrip:
            totalTiles += MapleopolyTile.TILE_AMOUNT;
            break;

        case MapleopolyTileType.GoToStart:
            int tileToStart = MapleopolyTile.TILE_AMOUNT - currentTilePosition;
            totalTiles += tileToStart;
            break;

        case MapleopolyTileType.Start:
            break;

        default:
            Logger.Warning("Unsupported tile");
            break;
        }

        ProcessTrip(session, totalTripValue, totalTiles); // Check if player passed Start
        totalTileValue.UpdateValue(session, totalTiles);
        session.Send(MapleopolyPacket.ProcessTile(totalTiles, freeRolls, currentTile));
    }
Esempio n. 5
0
    private static void HandleRoll(GameSession session, GameEventUserValue totalTileValue, GameEventUserValue freeRollValue)
    {
        // Check if player can roll
        int tokenItemId = int.Parse(ConstantsMetadataStorage.GetConstant("MapleopolyTokenItemId"));
        int tokenCost   = int.Parse(ConstantsMetadataStorage.GetConstant("MapleopolyTokenCost"));

        Item token = session.Player.Inventory.GetById(tokenItemId);

        int.TryParse(freeRollValue.EventValue, out int freeRolls);

        if (freeRolls > 0)
        {
            freeRolls--;
        }
        else if (token != null && token.Amount >= tokenCost)
        {
            session.Player.Inventory.ConsumeItem(session, token.Uid, tokenCost);
        }
        else
        {
            session.Send(MapleopolyPacket.Notice((byte)MapleopolyNotice.NotEnoughTokens));
            return;
        }

        Random rnd = Random.Shared;

        // roll two dice
        int roll1     = rnd.Next(1, 6);
        int roll2     = rnd.Next(1, 6);
        int totalRoll = roll1 + roll2;

        int.TryParse(totalTileValue.EventValue, out int totalTiles);
        totalTiles += totalRoll;
        if (roll1 == roll2)
        {
            freeRolls++;
        }

        // update user event values
        freeRollValue.UpdateValue(session, freeRolls);
        totalTileValue.UpdateValue(session, totalTiles);

        session.Send(MapleopolyPacket.Roll(totalTiles, roll1, roll2));
    }
Esempio n. 6
0
    private static void HandleOpen(GameSession session, GameEventUserValue totalTileValue, GameEventUserValue freeRollValue)
    {
        List <MapleopolyTile> tiles = DatabaseManager.Mapleopoly.FindAllTiles();

        if (tiles.Count == 0)
        {
            return;
        }

        int  tokenAmount = 0;
        int  tokenItemId = int.Parse(ConstantsMetadataStorage.GetConstant("MapleopolyTokenItemId"));
        Item token       = session.Player.Inventory.GetById(tokenItemId);

        if (token != null)
        {
            tokenAmount = token.Amount;
        }

        int.TryParse(totalTileValue.EventValue, out int totalTiles);
        int.TryParse(freeRollValue.EventValue, out int freeRolls);
        session.Send(MapleopolyPacket.Open(totalTiles, freeRolls, tiles, tokenItemId, tokenAmount));
    }