From 0901c03b7455f0c71733b4fc1da29eb3ada9f1b6 Mon Sep 17 00:00:00 2001 From: FatBoy-DOTC Date: Thu, 12 Sep 2024 19:47:42 -0500 Subject: [PATCH] can teleport to owned mines --- .../client/handlers/MerchantMsgHandler.java | 102 +++++++++++------- src/engine/objects/Mine.java | 48 ++++----- 2 files changed, 86 insertions(+), 64 deletions(-) diff --git a/src/engine/net/client/handlers/MerchantMsgHandler.java b/src/engine/net/client/handlers/MerchantMsgHandler.java index 137b1c2a..dd2916bc 100644 --- a/src/engine/net/client/handlers/MerchantMsgHandler.java +++ b/src/engine/net/client/handlers/MerchantMsgHandler.java @@ -274,60 +274,84 @@ public class MerchantMsgHandler extends AbstractClientMsgHandler { } } - if (targetCity == null) - return; - - //verify level required to teleport or repledge + if (targetCity == null){ + Mine mineTele = null; + for(Mine mine : Mine.getMinesToTeleportTo(player)){ + 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 (isTeleport) { - if (player.getLevel() < toGuild.getTeleportMin() || player.getLevel() > toGuild.getTeleportMax()) + if (toGuild != null) + if (isTeleport) { + if (player.getLevel() < toGuild.getTeleportMin() || player.getLevel() > toGuild.getTeleportMax()) + return; + } else if (player.getLevel() < toGuild.getRepledgeMin() || player.getLevel() > toGuild.getRepledgeMax()) 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) - joinedGuild = GuildManager.joinGuild(player, targetCity.getGuild(), targetCity.getObjectUUID(), GuildHistoryType.JOIN); + if (!isTeleport) + joinedGuild = GuildManager.joinGuild(player, targetCity.getGuild(), targetCity.getObjectUUID(), GuildHistoryType.JOIN); - int time; + int time; - if (!isTeleport) //repledge - time = MBServerStatics.REPLEDGE_TIME_IN_SECONDS; - else - time = MBServerStatics.TELEPORT_TIME_IN_SECONDS; + if (!isTeleport) //repledge + time = MBServerStatics.REPLEDGE_TIME_IN_SECONDS; + else + time = MBServerStatics.TELEPORT_TIME_IN_SECONDS; - //resend message - msg.setTeleportTime(time); + //resend message + msg.setTeleportTime(time); - if ((!isTeleport && joinedGuild) || (isTeleport)) { + if ((!isTeleport && joinedGuild) || (isTeleport)) { - dispatch = Dispatch.borrow(player, msg); - DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY); - } + dispatch = Dispatch.borrow(player, msg); + DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY); + } - //teleport player to city + //teleport player to city - Vector3fImmutable teleportLoc; + Vector3fImmutable teleportLoc; - if (targetCity.getTOL().getRank() == 8) - teleportLoc = targetCity.getTOL().getStuckLocation(); - else - teleportLoc = Vector3fImmutable.getRandomPointOnCircle(targetCity.getTOL().getLoc(), MBServerStatics.TREE_TELEPORT_RADIUS); - - if (time > 0) { - //TODO add timer to teleport - TeleportJob tj = new TeleportJob(player, npc, teleportLoc, origin, true); - JobScheduler.getInstance().scheduleJob(tj, time * 1000); - } else if (joinedGuild) { - player.teleport(teleportLoc); - player.setSafeMode(); + if (targetCity.getTOL().getRank() == 8) + teleportLoc = targetCity.getTOL().getStuckLocation(); + else + teleportLoc = Vector3fImmutable.getRandomPointOnCircle(targetCity.getTOL().getLoc(), MBServerStatics.TREE_TELEPORT_RADIUS); + + if (time > 0) { + //TODO add timer to teleport + TeleportJob tj = new TeleportJob(player, npc, teleportLoc, origin, true); + JobScheduler.getInstance().scheduleJob(tj, time * 1000); + } else if (joinedGuild) { + player.teleport(teleportLoc); + player.setSafeMode(); + } } + + } private static PowersBase getPowerforHermit(NPC npc) { diff --git a/src/engine/objects/Mine.java b/src/engine/objects/Mine.java index e9afd3ef..dd55ce7f 100644 --- a/src/engine/objects/Mine.java +++ b/src/engine/objects/Mine.java @@ -673,8 +673,11 @@ public class Mine extends AbstractGameObject { _playerMemory.removeAll(toRemove); } public static Building getTower(Mine mine){ - - return null; + Building tower = BuildingManager.getBuildingFromCache(mine.buildingID); + if(tower != null) + return tower; + else + return null; } public static void serializeForClientMsgTeleport(Mine mine, ByteBufferWriter writer) { AbstractCharacter guildRuler; @@ -685,17 +688,18 @@ public class Mine extends AbstractGameObject { // Cities aren't a mine without a TOL. Time to early exit. // No need to spam the log here as non-existant TOL's are indicated // during bootstrap routines. + Building tower = Mine.getTower(mine); + if (tower == null) { - if (Mine.getTower(mine) == null) { - - Logger.error("NULL TOL FOR " + mine.zoneName + " mine"); + Logger.error("NULL TOWER FOR " + mine.zoneName + " mine"); + return; } // Assign mine owner - if (Mine.getTower(mine) != null && Mine.getTower(mine).getOwner() != null) - guildRuler = Mine.getTower(mine).getOwner(); + if (tower.getOwner() != null) + guildRuler = tower.getOwner(); else guildRuler = null; @@ -712,7 +716,7 @@ public class Mine extends AbstractGameObject { // Begin Serialzing soverign guild data writer.putInt(mine.getObjectType().ordinal()); writer.putInt(mine.getObjectUUID()); - writer.putString(Mine.getTower(mine).getName()); + writer.putString(mine.zoneName + " Mine"); writer.putInt(rulingGuild.getObjectType().ordinal()); writer.putInt(rulingGuild.getObjectUUID()); @@ -767,11 +771,8 @@ public class Mine extends AbstractGameObject { else writer.putString(rulingNation.getName()); - if(Mine.getTower(mine) != null) { - writer.putInt(Mine.getTower(mine).getRank()); - } else{ - writer.putInt(1); - } + writer.putInt(1); + writer.putInt(0xFFFFFFFF); writer.putInt(0); @@ -781,20 +782,17 @@ public class Mine extends AbstractGameObject { else writer.putString(Guild.GetGL(rulingNation).getFirstName() + ' ' + Guild.GetGL(rulingNation).getLastName()); - writer.putLocalDateTime(LocalDateTime.now()); -// writer.put((byte) mine.established.getDayOfMonth()); -// writer.put((byte) mine.established.minusMonths(1).getMonth().getValue()); -// writer.putInt((int) years); -// writer.put((byte) hours); -// writer.put((byte) minutes); -// writer.put((byte) seconds); - - writer.putFloat(Mine.getTower(mine).loc.x); - writer.putFloat(Mine.getTower(mine).loc.y); - writer.putFloat(Mine.getTower(mine).loc.z); - + if(tower != null) { + writer.putFloat(tower.loc.x); + writer.putFloat(tower.loc.y); + writer.putFloat(tower.loc.z); + } else{ + writer.putFloat(0); + writer.putFloat(0); + writer.putFloat(0); + } writer.putInt(0); writer.put((byte) 1);