public void MoveToObserver(Player player) { if (State != GameState.Lobby) return; if (player.Type == (int)PlayerType.Observer) return; if (IsReady[player.Type]) return; if (Program.Config.STDOUT == true) Console.WriteLine("::::left-slot|{1}|{0}", player.Name, player.Type); Players[player.Type] = null; IsReady[player.Type] = false; Observers.Add(player); GameServerPacket change = new GameServerPacket(StocMessage.HsPlayerChange); change.Write((byte)((player.Type << 4) + (int)PlayerChange.Observe)); SendToAll(change); player.Type = (int)PlayerType.Observer; player.SendTypeChange(); if (Program.Config.STDOUT == true) Console.WriteLine("::::spectator|{0}", Observers.Count); }
public void MoveToDuelist(Player player) { if (State != GameState.Lobby) return; int pos = GetAvailablePlayerPos(); if (pos == -1) return; if (player.Type != (int)PlayerType.Observer) { if (!IsTag || IsReady[player.Type]) return; pos = (player.Type + 1) % 4; while (Players[pos] != null) pos = (pos + 1) % 4; GameServerPacket change = new GameServerPacket(StocMessage.HsPlayerChange); if (Program.Config.STDOUT == true) Console.WriteLine("::::left-slot|{1}|{0}", player.Name, player.Type); change.Write((byte)((player.Type << 4) + pos)); SendToAll(change); Players[player.Type] = null; Players[pos] = player; player.Type = pos; player.SendTypeChange(); } else { Observers.Remove(player); Players[pos] = player; player.Type = pos; GameServerPacket enter = new GameServerPacket(StocMessage.HsPlayerEnter); enter.Write(player.Name, 20); enter.Write((byte)pos); SendToAll(enter); GameServerPacket nwatch = new GameServerPacket(StocMessage.HsWatchChange); nwatch.Write((short)Observers.Count); SendToAll(nwatch); player.SendTypeChange(); } if (Program.Config.STDOUT == true) Console.WriteLine("::::join-slot|{1}|{0}", player.Name, pos); if (Program.Config.STDOUT == true) Console.WriteLine("::::spectator|{0}", Observers.Count); }
public void AddPlayer(Player player) { int pos = GetAvailablePlayerPos(); if (Program.Config.STDOUT == true) Console.WriteLine("::::join-slot|{1}|{0}", player.Name, pos); if (State != GameState.Lobby) { player.Type = (int)PlayerType.Observer; if (State == GameState.End) return; SendJoinGame(player); player.SendTypeChange(); player.Send(new GameServerPacket(StocMessage.DuelStart)); Observers.Add(player); if (State == GameState.Duel) InitNewSpectator(player); return; } if (HostPlayer == null) HostPlayer = player; if (pos != -1) { GameServerPacket enter = new GameServerPacket(StocMessage.HsPlayerEnter); enter.Write(player.Name, 20); enter.Write((byte)pos); SendToAll(enter); Players[pos] = player; IsReady[pos] = false; player.Type = pos; } else { GameServerPacket watch = new GameServerPacket(StocMessage.HsWatchChange); watch.Write((short)(Observers.Count + 1)); if (Program.Config.STDOUT == true) Console.WriteLine("::::spectator|{0}", Observers.Count); SendToAll(watch); player.Type = (int)PlayerType.Observer; Observers.Add(player); } SendJoinGame(player); player.SendTypeChange(); for (int i = 0; i < Players.Length; i++) { if (Players[i] != null) { GameServerPacket enter = new GameServerPacket(StocMessage.HsPlayerEnter); enter.Write(Players[i].Name, 20); enter.Write((byte)i); player.Send(enter); if (IsReady[i]) { GameServerPacket change = new GameServerPacket(StocMessage.HsPlayerChange); change.Write((byte)((i << 4) + (int)PlayerChange.Ready)); player.Send(change); } } } if (Observers.Count > 0) { GameServerPacket nwatch = new GameServerPacket(StocMessage.HsWatchChange); nwatch.Write((short)Observers.Count); player.Send(nwatch); if (Program.Config.STDOUT == true) Console.WriteLine("::::spectator|{0}", Observers.Count); } }
public void MoveToObserver(Player player) { if (State != GameState.Lobby) return; if (player.Type == (int)PlayerType.Observer) return; if (IsReady[player.Type]) return; Players[player.Type] = null; IsReady[player.Type] = false; Observers.Add(player); GameServerPacket change = new GameServerPacket(StocMessage.HsPlayerChange); change.Write((byte)((player.Type << 4) + (int)PlayerChange.Observe)); SendToAll(change); player.Type = (int)PlayerType.Observer; player.SendTypeChange(); }
public void MoveToDuelist(Player player) { if (State != GameState.Lobby) return; int pos = GetAvailablePlayerPos(); if (pos == -1) return; if (player.Type != (int)PlayerType.Observer) { if (!IsTag || IsReady[player.Type]) return; pos = (player.Type + 1) % 4; while (Players[pos] != null) pos = (pos + 1) % 4; GameServerPacket change = new GameServerPacket(StocMessage.HsPlayerChange); change.Write((byte)((player.Type << 4) + pos)); SendToAll(change); PlayerNames[pos] = player.Name; Players[player.Type] = null; Players[pos] = player; player.Type = pos; player.SendTypeChange(); } else { Observers.Remove(player); PlayerNames[pos] = player.Name; Players[pos] = player; player.Type = pos; GameServerPacket enter = new GameServerPacket(StocMessage.HsPlayerEnter); enter.WriteUnicode(player.Name, 20); enter.Write((byte)pos); SendToAll(enter); GameServerPacket nwatch = new GameServerPacket(StocMessage.HsWatchChange); nwatch.Write((short)Observers.Count); SendToAll(nwatch); player.SendTypeChange(); } }
public void AddPlayer(Player player) { if (State != GameState.Lobby) { if (State == GameState.End) return; //断线重连 // if(CanPause && IsPause){ // for(int i=0;i<PlayerNames.Length;i++){ // if(PlayerNames[i] == player.Name){ // if(Players[i] == null){ // //重新加入游戏 // player.Type = i; // Players[i] = player; // AutoEndTrun = Program.Config.AutoEndTurn; // GameServerPacket enter = new GameServerPacket(StocMessage.HsPlayerEnter); // enter.Write(player.Name, 20); // enter.Write((byte)i); // SendToAll(enter); // SendJoinGame(player); // player.SendTypeChange(); // //player.Send(new GameServerPacket(StocMessage.DuelStart)); // InitNewSpectator(player, i); // IsPause = false; // return; // } // break; // } // } // } player.Type = (int)PlayerType.Observer; SendJoinGame(player); player.SendTypeChange(); player.Send(new GameServerPacket(StocMessage.DuelStart)); Observers.Add(player); if (State == GameState.Duel){ //中途观战 InitNewSpectator(player); }else if(State == GameState.Side){ player.ServerMessage(Messages.MSG_WATCH_SIDE); } return; } if (HostPlayer == null) HostPlayer = player; int pos = GetAvailablePlayerPos(); if (pos != -1) { GameServerPacket enter = new GameServerPacket(StocMessage.HsPlayerEnter); enter.WriteUnicode(player.Name, 20); enter.Write((byte)pos); SendToAll(enter); PlayerNames[pos] = player.Name; Players[pos] = player; IsReady[pos] = false; player.Type = pos; } else { GameServerPacket watch = new GameServerPacket(StocMessage.HsWatchChange); watch.Write((short)(Observers.Count + 1)); SendToAll(watch); player.Type = (int)PlayerType.Observer; Observers.Add(player); if(player.IsAuthentified){ SendToAll(GameManager.getMessage("[Server] "+player.Name+" watch game.", PlayerType.White)); } } SendJoinGame(player); player.SendTypeChange(); for (int i = 0; i < Players.Length; i++) { if (Players[i] != null) { GameServerPacket enter = new GameServerPacket(StocMessage.HsPlayerEnter); enter.WriteUnicode(Players[i].Name, 20); enter.Write((byte)i); player.Send(enter); if (IsReady[i]) { GameServerPacket change = new GameServerPacket(StocMessage.HsPlayerChange); change.Write((byte)((i << 4) + (int)PlayerChange.Ready)); player.Send(change); } } } if (Observers.Count > 0) { GameServerPacket nwatch = new GameServerPacket(StocMessage.HsWatchChange); nwatch.Write((short)Observers.Count); player.Send(nwatch); } }