public void ChangeToonWorld(GameClient client, int WorldID, Vector3D Pos)
{
Hero hero = client.Player.Hero;
World newworld = null;
//don't use getworld() here as that'd create a new empty world anyway
foreach (var x in _worlds)
if (x.WorldID == WorldID)
newworld = x;
World currentworld = null;
//don't use getworld() here as that'd create a new empty world anyway
foreach (var x in _worlds)
if (x.WorldID == hero.WorldId)
currentworld = x;
if (newworld == null || currentworld==null) return; //don't go to a world we don't have in the universe
currentworld.DestroyWorld(hero);
hero.WorldId = newworld.WorldID;
hero.CurrentWorldSNO = newworld.WorldSNO;
hero.Position.X = Pos.X;
hero.Position.Y = Pos.Y;
hero.Position.Z = Pos.Z;
newworld.Reveal(hero);
client.SendMessage(new ACDWorldPositionMessage
{
Id = 0x3f,
Field0 = 0x789E00E2,
Field1 = new WorldLocationMessageData
{
Field0 = 1.43f,
Field1 = new PRTransform
{
Field0 = new Quaternion
{
Amount = 0.05940768f,
Axis = new Vector3D
{
X = 0f,
Y = 0f,
Z = 0.9982339f,
}
},
ReferencePoint = hero.Position,
},
Field2 = newworld.WorldID,
}
});
client.FlushOutgoingBuffer();
client.SendMessage(new PlayerWarpedMessage()
{
Id = 0x0B1,
Field0 = 9,
Field1 = 0f,
});
client.PacketId += 40 * 2;
client.SendMessage(new DWordDataMessage()
{
Id = 0x89,
Field0 = client.PacketId,
});
client.FlushOutgoingBuffer();
}