You shouldn't need to pay someone to do this. What you're asking for actually is pretty easy.
First, to list all the rooms in a game, you just call the Request Room List action from the Multiplayer object, and then create a list object in your game, and add a for loop from 1 to Multiplayer.ListRoomCount, which calls the actions: List>Clear, List>Add Item>Multiplayer.ListRoomName(loopindex)
Call this action once every say, 0.2 seconds to keep it updated.
Then, add the condition List>On Double-Clicked with the action Multiplayer>Join Room>Room Name = List.SelectedText
Then, within Host, you can send a message to the connecting peer that tells it what room in the game to go to, and what extra events should take place, etc.
Then, if you want to transfer information from the Host to the Peer and make the Peer the host, first you have to make sure all the information on the peer's side of the game is the exact same as the host. If it is, then that you're starting point.
First, make a variable (IE b_IsInRoom) which will act as a Boolean. 0 = false, 1 = true. When a player enters a room manually, this variable's value will be changed to 1, otherwise, if room is left or never joined, it's set to 0.
Then there should be string variable (IE s_RoomName) which will be set to the name of a room when entered.
After this is done, use the Multiplayer object's condition: Multiplayer>On Peer Left, and in the same event use System>Compare two values>If Multiplayer.PeerAlias = Multiplayer.HostAlias. This will determine if it's the host who has left. Then, in the same event add one more conidition: System>Compare Variable>b_IsInRoom = 1.
Now, this should call the action, Multiplayer>Join Room, and set the room name as the variable containing the room name (IE s_RoomName).
The first player to reconnect to the room will become the host automatically, and you're done.
If you experience any issues doing this, feel free to PM me.