private void HandleChangeSceneResult(Msg_RL_ChangeSceneResult msg, PBChannel channel, int src, uint session) { //响应RoomServer消息,进入野外场景结果消息 int hp = 0; int mp = 0; if (msg.HP > 0 && msg.MP > 0) { hp = msg.HP; mp = msg.MP; } m_RoomProcessThread.OnChangeSceneResult(msg.UserGuid, msg.RoomId, msg.TargetRoomId, msg.Result, hp, mp); }
private void PlayerGotoRoom(User user, int roomId, int targetRoomId) { bool isFieldThread; int ix = GetActiveRoomThreadIndex(targetRoomId, out isFieldThread); if (ix < 0) { return; } RoomThread roomThread; if (isFieldThread) { roomThread = field_roomthread_list_[ix]; } else { roomThread = roomthread_list_[ix]; } roomThread.QueueAction(roomThread.AddUser, user, targetRoomId, (MyAction <bool, int, User>)((bool ret, int sceneId, User successUser) => { if (ret) { Msg_RC_ChangeScene msg = new Msg_RC_ChangeScene(); msg.target_scene_id = sceneId; successUser.SendMessage(RoomMessageDefine.Msg_RC_ChangeScene, msg); Msg_RL_ChangeSceneResult replyBuilder = new Msg_RL_ChangeSceneResult(); EntityInfo info = user.Info; if (null != info) { replyBuilder.HP = info.Hp; replyBuilder.MP = info.Energy; } replyBuilder.UserGuid = user.Guid; replyBuilder.RoomID = roomId; replyBuilder.TargetRoomID = targetRoomId; replyBuilder.Result = (int)SceneOperationResultEnum.Success; connector_.SendMsgToLobby(replyBuilder); } else { Msg_RL_ChangeSceneResult replyBuilder = new Msg_RL_ChangeSceneResult(); replyBuilder.UserGuid = user.Guid; replyBuilder.RoomID = roomId; replyBuilder.TargetRoomID = targetRoomId; replyBuilder.Result = (int)SceneOperationResultEnum.Cant_Find_Room; connector_.SendMsgToLobby(replyBuilder); } })); }
private void RemoveUserForChangeScene(Room room, User user, ulong userGuid, int roomId, int targetRoomId, PBChannel channel, int handle, uint seq) { Msg_RL_ChangeSceneResult replyBuilder = new Msg_RL_ChangeSceneResult(); EntityInfo info = user.Info; if (null != info) { replyBuilder.HP = info.Hp; replyBuilder.MP = info.Energy; } room.RemoveUserFromRoomThread(user, true); replyBuilder.UserGuid = userGuid; replyBuilder.RoomID = roomId; replyBuilder.TargetRoomID = targetRoomId; replyBuilder.Result = (int)SceneOperationResultEnum.Success; channel.Send(replyBuilder); }
private void HandleChangeScene(Msg_LR_ChangeScene msg, PBChannel channel, int handle, uint seq) { ulong guid = msg.UserGuid; int roomid = msg.RoomID; int targetRoomId = msg.TargetRoomID; bool isFieldThread; int ix = GetActiveRoomThreadIndex(msg.RoomID, out isFieldThread); if (ix < 0) { Msg_RL_ChangeSceneResult replyBuilder = new Msg_RL_ChangeSceneResult(); replyBuilder.UserGuid = msg.UserGuid; replyBuilder.RoomID = msg.RoomID; replyBuilder.TargetRoomID = msg.TargetRoomID; replyBuilder.Result = (int)SceneOperationResultEnum.Cant_Find_Room; channel.Send(replyBuilder); } else { RoomThread roomThread; if (isFieldThread) { roomThread = field_roomthread_list_[ix]; } else { roomThread = roomthread_list_[ix]; } bool targetIsFieldThread; int targetIx = GetActiveRoomThreadIndex(targetRoomId, out targetIsFieldThread); if (null != roomThread) { if (targetIx >= 0) { //同服切场景 roomThread.QueueAction(roomThread.RemoveUser, guid, roomid, false, (MyAction <bool, int, User>)((bool success, int sceneId, User user) => { if (success) { PlayerGotoRoom(user, roomid, targetRoomId); } else { Msg_RL_ChangeSceneResult replyBuilder = new Msg_RL_ChangeSceneResult(); replyBuilder.UserGuid = guid; replyBuilder.RoomID = roomid; replyBuilder.TargetRoomID = targetRoomId; replyBuilder.Result = (int)SceneOperationResultEnum.Cant_Find_Room; channel.Send(replyBuilder); } })); } else { //跨服切场景 roomThread.QueueAction(roomThread.RemoveUser, guid, roomid, true, (MyAction <bool, int, User>)((bool success, int sceneId, User user) => { if (success) { Msg_RL_ChangeSceneResult replyBuilder = new Msg_RL_ChangeSceneResult(); EntityInfo info = user.Info; if (null != info) { replyBuilder.HP = info.Hp; replyBuilder.MP = info.Energy; } replyBuilder.UserGuid = guid; replyBuilder.RoomID = roomid; replyBuilder.TargetRoomID = targetRoomId; replyBuilder.Result = (int)SceneOperationResultEnum.Success; channel.Send(replyBuilder); } else { Msg_RL_ChangeSceneResult replyBuilder = new Msg_RL_ChangeSceneResult(); replyBuilder.UserGuid = guid; replyBuilder.RoomID = roomid; replyBuilder.TargetRoomID = targetRoomId; replyBuilder.Result = (int)SceneOperationResultEnum.Cant_Find_Room; channel.Send(replyBuilder); } })); } } } }