public static void ExitRoomRequest(string roomId)
    {
        ExitRoom request = new ExitRoom();

        request.RoomId = roomId;
        byte[] data = NetworkUtils.Serialize(request);
        Enqueue(MessageType.ExitRoomRequest, data);
    }
Ejemplo n.º 2
0
    /// <summary>
    /// 退出房间
    /// </summary>
    public void ExitRoomRequest(int roomId)
    {
        ExitRoom request = new ExitRoom();

        request.roomId = roomId;
        byte[] data = NetworkUtils.Serialize(request);
        NetworkClient.Enqueue(MessageType.ExitRoom, data);
    }
Ejemplo n.º 3
0
    private void Awake()
    {
        _Instance = this;

        /*if (PhotonNetwork.PlayerList.Length > 1)
         * {
         *  gameObject.transform.parent.gameObject.SetActive(false);
         * }*/
    }
Ejemplo n.º 4
0
        public void SetupRooms(List <RoomDef> Rooms)
        {
            Entrance = null;
            Exit     = null;
            Boss     = null;
            Granny   = null;
            OldMan   = null;
            MultiConnection.Clear();
            SingleConnection.Clear();
            SubShop.Clear();

            foreach (var Room in Rooms)
            {
                Room.SetEmpty();
            }

            foreach (var Room in Rooms)
            {
                if (Room is BossRoom b)
                {
                    Boss = b;
                }
                else if (Room is OldManRoom)
                {
                    OldMan = (OldManRoom)Room;
                }
                else if (Room is GrannyRoom)
                {
                    Granny = (GrannyRoom)Room;
                }
                else if (Room is EntranceRoom)
                {
                    Entrance = (EntranceRoom)Room;
                }
                else if (Room is ExitRoom)
                {
                    Exit = (ExitRoom)Room;
                }
                else if (Room is SubShopRoom)
                {
                    SubShop.Add(Room);
                }
                else if (Room.GetMaxConnections(RoomDef.Connection.All) == 1)
                {
                    SingleConnection.Add(Room);
                }
                else if (Room.GetMaxConnections(RoomDef.Connection.All) > 1)
                {
                    MultiConnection.Add(Room);
                }
            }

            WeightRooms(MultiConnection);
            MultiConnection = new List <RoomDef>(MultiConnection);
        }
Ejemplo n.º 5
0
    public void ExitRoomRequest(int fd, int roomOwnerFd)
    {
        ProtocolNetRequest req = new ProtocolNetRequest();

        req.cmd = (int)NetRequestType.EXITROOM;
        ExitRoom exitRoom = new ExitRoom();

        exitRoom.fd          = fd;
        exitRoom.roomOwnerFd = roomOwnerFd;
        socket.sendMSG(PBCSerialize.Serialize(req));
    }
Ejemplo n.º 6
0
    private void _ExitRoom(Player player, byte[] data)
    {
        //结果
        ExitRoom result = new ExitRoom();

        ExitRoom receive = NetworkUtils.Deserialize <ExitRoom>(data);

        //逻辑检测(有该房间)
        if (Server.Rooms.ContainsKey(receive.RoomId))
        {
            //确保有该房间并且玩家在该房间内
            if (Server.Rooms[receive.RoomId].Players.Contains(player) ||
                Server.Rooms[receive.RoomId].OBs.Contains(player))
            {
                result.Suc = true;
                //移除该玩家
                if (Server.Rooms[receive.RoomId].Players.Contains(player))
                {
                    Server.Rooms[receive.RoomId].Players.Remove(player);
                }
                else if (Server.Rooms[receive.RoomId].OBs.Contains(player))
                {
                    Server.Rooms[receive.RoomId].OBs.Remove(player);
                }

                if (Server.Rooms[receive.RoomId].Players.Count == 0)
                {
                    Server.Rooms.Remove(receive.RoomId); //如果该房间没有玩家则移除该房间
                }

                Console.WriteLine($"玩家:{player.Name}退出房间成功");

                player.ExitRoom();
                //向玩家发送成功操作结果
                data = NetworkUtils.Serialize(result);
                player.Send(MessageType.ExitRoom, data);
            }
            else
            {
                Console.WriteLine($"玩家:{player.Name}退出房间失败");
                //向玩家发送失败操作结果
                data = NetworkUtils.Serialize(result);
                player.Send(MessageType.ExitRoom, data);
            }
        }
        else
        {
            Console.WriteLine($"玩家:{player.Name}退出房间失败");
            //向玩家发送失败操作结果
            data = NetworkUtils.Serialize(result);
            player.Send(MessageType.ExitRoom, data);
        }
    }
    private static void _ExitRoom(byte[] data)
    {
        ExitRoom result = NetworkUtils.Deserialize <ExitRoom>(data);

        if (result.Suc)
        {
            NetworkPlayer.Instance.OnPlayingChange(false);
            NetworkPlayer.Instance.OnRoomIdChange("0");
            NetworkPlayer.Instance.OnGUIDChange(0);
            Debug.Log("退出房间成功");
        }
        else
        {
            Debug.Log("退出房间失败");
        }
    }
Ejemplo n.º 8
0
    private void _ExitRoom(byte[] data)
    {
        ExitRoom result = NetworkUtils.Deserialize <ExitRoom>(data);

        if (result.isSuc)
        {
            //房间号变为默认
            NetworkPlayer.Instance.OnRoomIdChange(0);
            //玩家状态改变
            NetworkPlayer.Instance.OnPlayingChange(false);

            Info.Instance.Print("退出房间成功");
        }
        else
        {
            Info.Instance.Print("退出房间失败");
        }
    }
Ejemplo n.º 9
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="startRoom"></param>
    /// <param name="exitRoom"></param>
    private int ResolveRoomConnections(StartRoom startRoom, ExitRoom exitRoom)
    {
        // Put walls around the edge of the map
        for (var x = 0; x < GridSize; ++x)
        {
            for (var y = 0; y < GridSize; ++y)
            {
                foreach (var direction in RoomConnection.Directions)
                {
                    var room = GetRoom(x, y);
                    if (room?.HasConnection(direction) != true)
                    {
                        continue;
                    }

                    var adjacentRoom = GetAdjacentRoom(x, y, direction);

                    // Adjacent room has no connection point at the opposite side, set to a wall.
                    if (adjacentRoom != null && !adjacentRoom.HasConnection(direction.GetOpposite()))
                    {
                        room.SetConnection(direction, RandomArrayItem(WallConnectionPrefabs));
                        continue;
                    }

                    // adjacent it out of bounds, set to a wall.
                    if (adjacentRoom == null)
                    {
                        room.SetConnection(direction, RandomArrayItem(WallConnectionPrefabs));
                    }
                }
            }
        }

        // Find a route from start to exit.
        var      maxPathResolve = (GridSize * GridSize) * RoomConnection.Directions.Length;
        BaseRoom currentRoom    = startRoom;
        var      roomRoute      = new Stack <BaseRoom>();

        while (currentRoom != exitRoom)
        {
            var openDirections = currentRoom.GetFreeConnectionDirections();
            if (!openDirections.Any())
            {
                if (roomRoute.Count == 0)
                {
                    Debug.LogError($"The room '{currentRoom.name}' has no open connections.");
                    break;
                }

                currentRoom = roomRoute.Pop();
                continue;
            }

            var moveDirection = openDirections[Random.Range(0, openDirections.Count)];
            var nextRoom      = GetAdjacentRoom(currentRoom, moveDirection);

            var doorPrefabs = DoorConnectionPrefabs;
            if (currentRoom == startRoom)
            {
                doorPrefabs = doorPrefabs.Where(x => x.Type == DoorConnector.DoorType.Normal).ToArray();
            }

            var doorConnection = RandomArrayItem(doorPrefabs);
            currentRoom.SetConnection(moveDirection, doorConnection);
            nextRoom.SetConnection(moveDirection.GetOpposite(), doorConnection);

            roomRoute.Push(currentRoom);
            currentRoom = nextRoom;

            if (--maxPathResolve == 0)
            {
                Debug.LogError("Failed to generate a path from start to finish within the maximum number of moves.");
                break;
            }
        }

        // Fill all open connections with walls.
        for (var x = 0; x < GridSize; ++x)
        {
            for (var y = 0; y < GridSize; ++y)
            {
                var room = GetRoom(x, y);
                if (room == null)
                {
                    continue;
                }

                foreach (var direction in room.GetFreeConnectionDirections())
                {
                    var wallPrefab = RandomArrayItem(WallConnectionPrefabs);
                    room.SetConnection(direction, wallPrefab);

                    var adjacentRoom = GetAdjacentRoom(x, y, direction);
                    if (adjacentRoom?.HasConnection(direction.GetOpposite()) == true)
                    {
                        adjacentRoom.SetConnection(direction.GetOpposite(), wallPrefab);
                    }
                }
            }
        }

        // Remove completely walled rooms
        for (var x = 0; x < GridSize; ++x)
        {
            for (var y = 0; y < GridSize; ++y)
            {
                var room = GetRoom(x, y);
                if (room?.IsBoxedIn() == true)
                {
                    Destroy(room.gameObject);
                    m_tiles[x, y] = null;
                }
            }
        }

        return(CalculateShortestRoute(startRoom, exitRoom, 0, new HashSet <BaseRoom>()));
    }