public static void ExitRoomRequest(string roomId) { ExitRoom request = new ExitRoom(); request.RoomId = roomId; byte[] data = NetworkUtils.Serialize(request); Enqueue(MessageType.ExitRoomRequest, data); }
/// <summary> /// 退出房间 /// </summary> public void ExitRoomRequest(int roomId) { ExitRoom request = new ExitRoom(); request.roomId = roomId; byte[] data = NetworkUtils.Serialize(request); NetworkClient.Enqueue(MessageType.ExitRoom, data); }
private void Awake() { _Instance = this; /*if (PhotonNetwork.PlayerList.Length > 1) * { * gameObject.transform.parent.gameObject.SetActive(false); * }*/ }
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); }
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)); }
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("退出房间失败"); } }
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("退出房间失败"); } }
/// <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>())); }