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);
}
}));
}