This is probably because Odin developers are not aware of how UserTeleport works. In Ludi PQ (pre-bb version), the portals are fixed. This means that their locations are client-sided and in the same order every time. In post-bb when LPQ gets revamped, Lithium sources warp the user to a destination portal. This means they change their map and warp them to the specific portal index as their starting point. I'm assuming this is what you mean for your other PQ map or whatever event that is. In this event PQ thing, when you're entering the portals they are actually scripted and randomized, and your script is simply changing their map but to that of a specific portal index.
Assuming these are scripted portals, find their scripts and create a new script manager method for teleporting. For example, here's mine:
PHP Code:
/**
* A quick and easy way to transfer a user to a different portal.
* This method is intended to be used within the map. It is designed
* to transfer to different portals without changing/reloading the
* user's map entirely to get there. Example: In LudiPQ, upon
* the Box Stage where entering the correct box warps you up and
* wrong box warps you to beginning, this packet is used.
*
* [MENTION=2000183830]para[/MENTION]m nPortal The portal index to send the user to
*/
public void UserTeleport(int nPortal) {
pRunningVM.pTarget.SendPacket(UserLocal.OnTeleport(false, nPortal));
}
This will also require you to have the CUserLocal::OnTeleport packet. You can find it in IDA. Some sources might even have it, and mistakenly call it "dojoTeleport" or something to that effect.
PHP Code:
public static OutPacket OnTeleport(boolean bExclRequest, int nPortal) {
OutPacket oPacket = new OutPacket(LoopbackPacket.UserTeleport, false);
oPacket.Encodeb(bExclRequest);
oPacket.Encode1(nPortal);//6 = dojo up
return oPacket;
}
Then all you would do is call the method for this in your portal script that's being executed. Something like this in Odin:
PHP Code:
function enter(pi) {
pi.userTeleport(1);//your random portal ID here
return true;
}