internal int CreateAutoRoom(ulong[] users, int type) { RoomInfo room = NewRoomInfo(); room.RoomId = ++m_CurRoomId; room.SceneType = type; room.RoomServerName = GetIdlestRoomServer(); room.TotalCount = users.Length; if (!room.IsPvp) { room.AddUsers((int)CampIdEnum.Blue, users); } else { int ct = users.Length / 2; ulong[] blues = new ulong[users.Length - ct]; ulong[] reds = new ulong[ct]; Array.Copy(users, 0, blues, 0, users.Length - ct); Array.Copy(users, ct, reds, 0, ct); room.AddUsers((int)CampIdEnum.Blue, blues); room.AddUsers((int)CampIdEnum.Red, reds); } if (!m_Rooms.ContainsKey(room.RoomId)) { m_Rooms.Add(room.RoomId, room); } else { m_Rooms[room.RoomId] = room; } room.Creator = 0; return(room.RoomId); }
private void RequestEnterSceneRoom(UserInfo info, int roomId, int hp, int mp, float x, float y) { RoomInfo room = m_LobbyInfo.GetRoomByID(roomId); if (null != room) { int campId = (int)CampIdEnum.Blue; room.AddUsers(campId, info.Guid); Msg_LR_EnterScene enterSceneMsg = new Msg_LR_EnterScene(); enterSceneMsg.UserGuid = info.Guid; enterSceneMsg.RoomId = roomId; Msg_LR_RoomUserInfo ruiBuilder = info.RoomUserInfo; ruiBuilder.Key = info.Key; ruiBuilder.Camp = info.CampId; if (hp > 0 && mp > 0) { enterSceneMsg.HP = hp; enterSceneMsg.MP = mp; } if (x > 0 && y > 0) { ruiBuilder.EnterX = x; ruiBuilder.EnterY = y; } enterSceneMsg.UserInfo = ruiBuilder; LobbyServer.Instance.RoomSvrChannel.Send(room.RoomServerName, enterSceneMsg); LogSys.Log(LOG_TYPE.DEBUG, "Request enter field, user {0} room {1}", info.Guid, roomId); } }
internal void OnChangeSceneResult(ulong userGuid, int roomID, int targetRoomID, int result, int hp, int mp) { UserInfo user = LobbyServer.Instance.UserProcessScheduler.GetUserInfo(userGuid); if (user == null) { return; } if ((int)SceneOperationResultEnum.Success == result) { RoomInfo room = m_LobbyInfo.GetRoomByID(roomID); RoomInfo targetRoom = m_LobbyInfo.GetRoomByID(targetRoomID); if (null != room && null != targetRoom) { int fromSceneId = room.SceneType; int targetSceneId = targetRoom.SceneType; float enterX = 50, enterY = 50; /* * int transportId = TransportConfigProvider.GenTransportId(fromSceneId, targetSceneId); * TransportConfig cfg = TransportConfigProvider.Instance.GetTransportConfig(transportId); * if (null != cfg) { * enterX = cfg.m_EnterX; * enterY = cfg.m_EnterY; * } */ room.DelUsers(userGuid); if (room.RoomServerName == targetRoom.RoomServerName) { targetRoom.AddUsers(user.CampId, userGuid); user.CurrentState = UserState.Room; Msg_BL_UserChangeScene msg = new Msg_BL_UserChangeScene(); msg.Guid = userGuid; msg.SceneId = targetRoom.SceneType; LobbyServer.Instance.UserChannel.Send(user.UserSvrName, msg); } else { user.CurrentState = UserState.Online; RequestEnterSceneRoom(user, targetRoomID, hp, mp, enterX, enterY); } LogSys.Log(LOG_TYPE.INFO, "User change field success ! , guid:{0} room:{1} target room:{2} result:{3}", userGuid, roomID, targetRoomID, (SceneOperationResultEnum)result); } else { LobbyServer.Instance.HighlightPrompt(user, 42);//进入游戏失败,请稍后重试 } } else { LogSys.Log(LOG_TYPE.INFO, "User change field failed ! guid:{0} room:{1} target room:{2} result:{3}", userGuid, roomID, targetRoomID, (SceneOperationResultEnum)result); LobbyServer.Instance.HighlightPrompt(user, 42);//进入游戏失败,请稍后重试 } }
internal int CreateAutoRoom(ulong[] users, int type) { RoomInfo room = NewRoomInfo(); room.RoomId = ++m_CurRoomId; room.SceneType = type; room.RoomServerName = GetIdlestRoomServer(); room.TotalCount = users.Length; room.AddUsers((int)CampIdEnum.Blue, users); if (!m_Rooms.ContainsKey(room.RoomId)) { m_Rooms.Add(room.RoomId, room); } else { m_Rooms[room.RoomId] = room; } room.Creator = 0; return(room.RoomId); }