|  |  | @ -274,60 +274,84 @@ public class MerchantMsgHandler extends AbstractClientMsgHandler { | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (targetCity == null) |  |  |  |         if (targetCity == null){ | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             return; |  |  |  |             Mine mineTele = null; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |             for(Mine mine : Mine.getMinesToTeleportTo(player)){ | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         //verify level required to teleport or repledge
 |  |  |  |                 if(mine.getObjectUUID() == msg.getCityID()){ | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     mineTele = mine; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             if(mineTele == null){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 return; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             }else { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 int time = MBServerStatics.TELEPORT_TIME_IN_SECONDS; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 msg.setTeleportTime(time); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 Building tower = Mine.getTower(mineTele); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 if (tower == null) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     return; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 Vector3fImmutable teleportLoc = Vector3fImmutable.getRandomPointOnCircle(tower.getLoc(), 10); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 if (time > 0) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     //TODO add timer to teleport
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     TeleportJob tj = new TeleportJob(player, npc, teleportLoc, origin, true); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     JobScheduler.getInstance().scheduleJob(tj, time * 1000); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         }else{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             //finish porting to a city
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             //verify level required to teleport or repledge
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         Guild toGuild = targetCity.getGuild(); |  |  |  |             Guild toGuild = targetCity.getGuild(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (toGuild != null) |  |  |  |             if (toGuild != null) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             if (isTeleport) { |  |  |  |                 if (isTeleport) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                 if (player.getLevel() < toGuild.getTeleportMin() || player.getLevel() > toGuild.getTeleportMax()) |  |  |  |                     if (player.getLevel() < toGuild.getTeleportMin() || player.getLevel() > toGuild.getTeleportMax()) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                         return; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 } else if (player.getLevel() < toGuild.getRepledgeMin() || player.getLevel() > toGuild.getRepledgeMax()) | 
			
		
	
		
		
			
				
					
					|  |  |  |                     return; |  |  |  |                     return; | 
			
		
	
		
		
			
				
					
					|  |  |  |             } else if (player.getLevel() < toGuild.getRepledgeMin() || player.getLevel() > toGuild.getRepledgeMax()) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                 return; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         boolean joinedGuild = false; |  |  |  |             boolean joinedGuild = false; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         //if repledge, reguild the player
 |  |  |  |             //if repledge, reguild the player
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (!isTeleport) |  |  |  |             if (!isTeleport) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             joinedGuild = GuildManager.joinGuild(player, targetCity.getGuild(), targetCity.getObjectUUID(), GuildHistoryType.JOIN); |  |  |  |                 joinedGuild = GuildManager.joinGuild(player, targetCity.getGuild(), targetCity.getObjectUUID(), GuildHistoryType.JOIN); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         int time; |  |  |  |             int time; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (!isTeleport) //repledge
 |  |  |  |             if (!isTeleport) //repledge
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             time = MBServerStatics.REPLEDGE_TIME_IN_SECONDS; |  |  |  |                 time = MBServerStatics.REPLEDGE_TIME_IN_SECONDS; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         else |  |  |  |             else | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             time = MBServerStatics.TELEPORT_TIME_IN_SECONDS; |  |  |  |                 time = MBServerStatics.TELEPORT_TIME_IN_SECONDS; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         //resend message
 |  |  |  |             //resend message
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         msg.setTeleportTime(time); |  |  |  |             msg.setTeleportTime(time); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if ((!isTeleport && joinedGuild) || (isTeleport)) { |  |  |  |             if ((!isTeleport && joinedGuild) || (isTeleport)) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             dispatch = Dispatch.borrow(player, msg); |  |  |  |                 dispatch = Dispatch.borrow(player, msg); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY); |  |  |  |                 DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |             } | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         //teleport player to city
 |  |  |  |             //teleport player to city
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         Vector3fImmutable teleportLoc; |  |  |  |             Vector3fImmutable teleportLoc; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (targetCity.getTOL().getRank() == 8) |  |  |  |             if (targetCity.getTOL().getRank() == 8) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             teleportLoc = targetCity.getTOL().getStuckLocation(); |  |  |  |                 teleportLoc = targetCity.getTOL().getStuckLocation(); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         else |  |  |  |             else | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             teleportLoc = Vector3fImmutable.getRandomPointOnCircle(targetCity.getTOL().getLoc(), MBServerStatics.TREE_TELEPORT_RADIUS); |  |  |  |                 teleportLoc = Vector3fImmutable.getRandomPointOnCircle(targetCity.getTOL().getLoc(), MBServerStatics.TREE_TELEPORT_RADIUS); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         if (time > 0) { |  |  |  |             if (time > 0) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             //TODO add timer to teleport
 |  |  |  |                 //TODO add timer to teleport
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             TeleportJob tj = new TeleportJob(player, npc, teleportLoc, origin, true); |  |  |  |                 TeleportJob tj = new TeleportJob(player, npc, teleportLoc, origin, true); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             JobScheduler.getInstance().scheduleJob(tj, time * 1000); |  |  |  |                 JobScheduler.getInstance().scheduleJob(tj, time * 1000); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         } else if (joinedGuild) { |  |  |  |             } else if (joinedGuild) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             player.teleport(teleportLoc); |  |  |  |                 player.teleport(teleportLoc); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             player.setSafeMode(); |  |  |  |                 player.setSafeMode(); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     private static PowersBase getPowerforHermit(NPC npc) { |  |  |  |     private static PowersBase getPowerforHermit(NPC npc) { | 
			
		
	
	
		
		
			
				
					|  |  | 
 |