mirror of
				https://bitbucket.org/Ioncannon/project-meteor-server.git
				synced 2025-05-20 08:26:59 -04:00 
			
		
		
		
	Added functions to allow for an improved seamless zone change. Player can now pull actors from two zones when performing a seamless zone change to give a improved feel.
This commit is contained in:
		| @@ -324,7 +324,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 z.SpawnAllActors(true); | ||||
|         } | ||||
|  | ||||
|         //Moves the actor to the new zone if exists. No packets are sent nor position changed. | ||||
|         //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; | ||||
| @@ -344,6 +344,30 @@ namespace FFXIVClassic_Map_Server | ||||
|  | ||||
|             newZone.AddActorToZone(player); | ||||
|  | ||||
|             player.zone = newZone; | ||||
|             player.zoneId = destinationZoneId; | ||||
|  | ||||
|             player.zone2 = null; | ||||
|             player.zoneId2 = 0; | ||||
|  | ||||
|             LuaEngine.OnZoneIn(player); | ||||
|         } | ||||
|  | ||||
|         //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; | ||||
|  | ||||
|             LuaEngine.OnZoneIn(player); | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -25,8 +25,9 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|         public ushort moveState, oldMoveState; | ||||
|         public float[] moveSpeeds = new float[5]; | ||||
|  | ||||
|         public uint zoneId; | ||||
|         public uint zoneId, zoneId2; | ||||
|         public Area zone = null; | ||||
|         public Area zone2 = null; | ||||
|         public bool isZoning = false; | ||||
|  | ||||
|         public bool spawnedFirstTime = false; | ||||
|   | ||||
| @@ -1245,9 +1245,15 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|         public void SendInstanceUpdate() | ||||
|         { | ||||
|             | ||||
|             //Update Instance | ||||
|             playerSession.UpdateInstance(zone.GetActorsAroundActor(this, 50));             | ||||
|          | ||||
|             //Update Instance | ||||
|  | ||||
|             List<Actor> aroundMe = new List<Actor>(); | ||||
|  | ||||
|             aroundMe.AddRange(zone.GetActorsAroundActor(this, 50)); | ||||
|             if (zone2 != null) | ||||
|                 aroundMe.AddRange(zone2.GetActorsAroundActor(this, 50)); | ||||
|             playerSession.UpdateInstance(aroundMe); | ||||
|  | ||||
|         } | ||||
|  | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user