//Moves the actor to the new zone if exists. No packets are sent nor position changed. Merged zone is removed. public void DoSeamlessZoneChange(Player player, uint destinationZoneId) { Area oldZone; if (player.zone != null) { oldZone = player.zone; oldZone.RemoveActorFromZone(player); } //Add player to new zone and update Zone newZone = GetZone(destinationZoneId); //This server does not contain that zoneId if (newZone == null) { return; } newZone.AddActorToZone(player); player.zone = newZone; player.zoneId = destinationZoneId; player.zone2 = null; player.zoneId2 = 0; player.SendSeamlessZoneInPackets(); player.SendMessage(0x20, "", "Doing Seamless Zone Change"); LuaEngine.GetInstance().CallLuaFunction(player, newZone, "onZoneIn", true); }
//Adds a second zone to pull actors from. Used for an improved seamless zone change. public void MergeZones(Player player, uint mergedZoneId) { //Add player to new zone and update Zone mergedZone = GetZone(mergedZoneId); //This server does not contain that zoneId if (mergedZone == null) { return; } mergedZone.AddActorToZone(player); player.zone2 = mergedZone; player.zoneId2 = mergedZone.actorId; player.SendMessage(0x20, "", "Merging Zones"); LuaEngine.GetInstance().CallLuaFunction(player, mergedZone, "onZoneIn", true); }