Beispiel #1
0
        public void RemovePlayer(Player player)
        {
            if (player.Equals(HostPlayer) && State == GameState.Lobby)
                m_room.Close();
            else if (player.Type == (int)PlayerType.Observer)
            {
                Observers.Remove(player);
                if (State == GameState.Lobby)
                {
                    GameServerPacket nwatch = new GameServerPacket(StocMessage.HsWatchChange);
                    nwatch.Write((short)Observers.Count);
                    SendToAll(nwatch);
                    if (Program.Config.STDOUT == true)
                    Console.WriteLine("::::spectator|{0}", Observers.Count);
                }
             //   if (Program.Config.STDOUT == true)        
             //       Console.WriteLine("{0} - disconnected", player.Name); //Need API
                player.Disconnect();
            }
            else if (State == GameState.Lobby)
            {
                Players[player.Type] = null;
                IsReady[player.Type] = false;

                GameServerPacket change = new GameServerPacket(StocMessage.HsPlayerChange);
                change.Write((byte)((player.Type << 4) + (int)PlayerChange.Leave));
                if (Program.Config.STDOUT == true)
                    Console.WriteLine("::::left-slot|{1}|{0}", player.Name, player.Type);

                SendToAll(change);
                player.Disconnect();
            }
            else
                Surrender(player, 4, true);
        }
Beispiel #2
0
		public void RemovePlayer(Player player)
		{
			if(player==null){
				return;
			}
			if (player.Equals(HostPlayer) && State == GameState.Lobby){
				//Logger.WriteLine("HostPlayer is leave", false);
				m_room.Close(true);
			}
			else if (player.Type == (int)PlayerType.Observer)
			{
				Observers.Remove(player);
				if (State == GameState.Lobby)
				{
					GameServerPacket nwatch = new GameServerPacket(StocMessage.HsWatchChange);
					nwatch.Write((short) Observers.Count);
					SendToAll(nwatch);
				}
				player.Disconnect();
			}
			else if (State == GameState.Lobby)
			{
				Players[player.Type] = null;
				IsReady[player.Type] = false;
				GameServerPacket change = new GameServerPacket(StocMessage.HsPlayerChange);
				change.Write((byte)((player.Type << 4) + (int) PlayerChange.Leave));
				SendToAll(change);
				player.Disconnect();
			}
			else{
//				if(CanPause){
//					if(State == GameState.Duel){
//						//断线重连
//						string name = player.Name;
//						int pos = player.Type;
//						if(pos != (int)PlayerType.Observer){
//							PlayerNames[pos] = name;
//							Players[pos] = null;
//							IsPause = true;
//							AutoEndTrun = false;
//							SendToAll(GameManager.getMessage(string.Format(Messages.MSG_DISCONECT
//							                                               , name, Config.GameTimer),PlayerType.Red));
//							return;
//						}
//					}else if(State == GameState.Side){
//						//断线重连
//						IsPause = true;
//					}
//				}
				if(IsEnd){
					return;
				}
				Surrender(player, 4, true);
			}
		}