public void SendGeneralPacket(bool players, bool spectators) { var mobiles = GetInGameMobiles(players, spectators); if (mobiles.Count == 0) { return; } Span <byte> generalInfo = stackalloc byte[MahjongPackets.MahjongGeneralInfoPacketLength].InitializePacket(); foreach (var mobile in mobiles) { MahjongPackets.CreateMahjongGeneralInfo(generalInfo, _game); mobile.NetState?.Send(generalInfo); } }
public void SendRelievePacket(bool players, bool spectators) { var mobiles = GetInGameMobiles(players, spectators); if (mobiles.Count == 0) { return; } Span <byte> relievePacket = stackalloc byte[MahjongPackets.MahjongRelievePacketLength].InitializePacket(); foreach (var mobile in mobiles) { MahjongPackets.CreateMahjongRelieve(relievePacket, _game.Serial); mobile.NetState?.Send(relievePacket); } }
public void CheckPlayers() { var removed = false; Span <byte> relievePacket = stackalloc byte[MahjongPackets.MahjongRelievePacketLength].InitializePacket(); for (var i = 0; i < _players.Length; i++) { var player = _players[i]; if (player == null) { continue; } if (player.Deleted) { _players[i] = null; SendPlayerExitMessage(player); UpdateDealer(true); removed = true; } else if (_inGame[i]) { if (player.NetState == null) { _inGame[i] = false; SendPlayerExitMessage(player); UpdateDealer(true); removed = true; } else if (!_game.IsAccessibleTo(player) || player.Map != _game.Map || !player.InRange(_game.GetWorldLocation(), 5)) { _inGame[i] = false; MahjongPackets.CreateMahjongRelieve(relievePacket, _game.Serial); player.NetState?.Send(relievePacket); SendPlayerExitMessage(player); UpdateDealer(true); removed = true; } } } for (var i = 0; i < _spectators.Count;) { var mobile = _spectators[i]; if (mobile.NetState == null || mobile.Deleted) { _spectators.RemoveAt(i); } else if (!_game.IsAccessibleTo(mobile) || mobile.Map != _game.Map || !mobile.InRange(_game.GetWorldLocation(), 5)) { _spectators.RemoveAt(i); MahjongPackets.CreateMahjongRelieve(relievePacket, _game.Serial); mobile.NetState?.Send(relievePacket); } else { i++; } } if (removed && !UpdateSpectators()) { SendPlayersPacket(true, true); } }