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)); }
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)); }
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)); }
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)); }