public bool Check(Deck deck) { if (deck.Main.Count != Main.Count || deck.Extra.Count != Extra.Count) return false; IDictionary<int, int> cards = new Dictionary<int, int>(); IDictionary<int, int> ncards = new Dictionary<int, int>(); IList<int>[] stacks = new IList<int>[] { Main, Extra, Side }; foreach (IList<int> stack in stacks) { foreach (int id in stack) { if (!cards.ContainsKey(id)) cards.Add(id, 1); else cards[id]++; } } stacks = new IList<int>[] { deck.Main, deck.Extra, deck.Side }; foreach (IList<int> stack in stacks) { foreach (int id in stack) { if (!ncards.ContainsKey(id)) ncards.Add(id, 1); else ncards[id]++; } } foreach (KeyValuePair<int, int> pair in cards) { if (!ncards.ContainsKey(pair.Key)) return false; if (ncards[pair.Key] != pair.Value) return false; } return true; }
private void OnUpdateDeck(GameClientPacket packet) { if (Type == (int)PlayerType.Observer) return; Deck deck = new Deck(); int main = packet.ReadInt32(); int side = packet.ReadInt32(); for (int i = 0; i < main; i++) deck.AddMain(packet.ReadInt32()); for (int i = 0; i < side; i++) deck.AddSide(packet.ReadInt32()); if (Game.State == GameState.Lobby) { Deck = deck; Game.IsReady[Type] = false; } else if (Game.State == GameState.Side) { if (Game.IsReady[Type]) return; if (!Deck.Check(deck)) { GameServerPacket error = new GameServerPacket(StocMessage.ErrorMsg); error.Write((byte)3); error.Write(0); Send(error); return; } Deck = deck; Game.IsReady[Type] = true; Game.ServerMessage(Name + " is ready."); Send(new GameServerPacket(StocMessage.DuelStart)); Game.MatchSide(); } }
public static void OnUpdateDeck(GameSession client, GameClientPacket packet){ if (client.Game==null||client.Type == (int)PlayerType.Observer||client.Type == (int)PlayerType.Undefined) return; Deck deck = new Deck(); int main = packet.ReadInt32(); int side = packet.ReadInt32(); for (int i = 0; i < main; i++) deck.AddMain(packet.ReadInt32()); for (int i = 0; i < side; i++) deck.AddSide(packet.ReadInt32()); if (client.Game.State == GameState.Lobby) { client.Deck = deck; client.Game.IsReady[client.Type] = false; } else if (client.Game.State == GameState.Side) { if (client.Game.IsReady[client.Type]) return; if (!client.Deck.Check(deck)) { using(GameServerPacket error = new GameServerPacket(StocMessage.ErrorMsg)){ error.Write((byte)3); error.Write(0); client.Send(error); } return; } client.Deck = deck; client.Game.IsReady[client.Type] = true; client.Game.ServerMessage(string.Format(Messages.MSG_READY, client.Name)); client.Send(GameServerPacket.EmtryMessage(StocMessage.DuelStart)); client.Game.MatchSide(); } }