// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ . // ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌· // ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀ // ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌ // ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀ // Magicbane Emulator Project © 2013 - 2022 // www.magicbane.com package engine.net.client.msg; import engine.net.AbstractConnection; import engine.net.ByteBufferReader; import engine.net.ByteBufferWriter; import engine.net.client.Protocol; import engine.objects.*; import java.time.LocalDateTime; public class GuildTreeStatusMsg extends ClientNetMsg { // 2 = manage this asset. 20 = manage entire city private int targetType; private int targetID; private String CityName; private String OwnerName; private String GuildName; private String motto; //motto Length 60 max? private Building treeOfLife; private PlayerCharacter player; private City city; private Zone cityZone; private GuildTag cityGuildTag; private GuildTag cityNationTag; private java.time.LocalDateTime cityDate; private boolean canAccess = false; private byte canBind = 0; private int accessType = 0; /** * This is the general purpose constructor */ public GuildTreeStatusMsg() { super(Protocol.GUILDTREESTATUS); this.targetType = 0; this.targetID = 0; this.OwnerName = ""; this.CityName = ""; this.GuildName = ""; this.cityGuildTag = null; this.cityNationTag = null; } public GuildTreeStatusMsg(Building treeOfLife, PlayerCharacter sourcePlayer) { super(Protocol.GUILDTREESTATUS); this.treeOfLife = treeOfLife; this.player = sourcePlayer; } /** * This constructor is used by NetMsgFactory. It attempts to deserialize the * ByteBuffer into a message. If a BufferUnderflow occurs (based on reading * past the limit) then this constructor Throws that Exception to the * caller. */ public GuildTreeStatusMsg(AbstractConnection origin, ByteBufferReader reader) { super(Protocol.GUILDTREESTATUS, origin, reader); } /** * Deserializes the subclass specific items to the supplied NetMsgWriter. */ @Override protected void _deserialize(ByteBufferReader reader) { targetType = reader.getInt(); targetID = reader.getInt(); for (int i = 0; i < 3; i++) { reader.monitorInt(0, "GuildTreeStatusMSG"); } } public void configure() { this.targetType = treeOfLife.getObjectType().ordinal(); this.targetID = treeOfLife.getObjectUUID(); this.OwnerName = treeOfLife.getOwner() != null ? treeOfLife.getOwnerName() : "Abandoned"; this.CityName = treeOfLife.getCityName(); this.GuildName = treeOfLife.getGuildName(); this.cityGuildTag = treeOfLife.getGuild().getGuildTag(); this.cityNationTag = this.treeOfLife.getGuild().getNation().getGuildTag(); canAccess = this.canModify(); canBind = 0; if (player.getGuild() != null && this.treeOfLife.getGuild() != null && !this.treeOfLife.getGuild().isEmptyGuild() && player.getGuild().getNation() == this.treeOfLife.getGuild().getNation()) canBind = 1; if (this.treeOfLife.getGuild() != null && this.treeOfLife.getGuild().getOwnedCity() == null) accessType = 9; //accessType not 9 not null city if (accessType != 9) if (this.treeOfLife.getGuild().getOwnedCity().isForceRename() && canAccess) accessType = 10; else accessType = 8; cityZone = this.treeOfLife.getParentZone(); city = null; if (cityZone != null) if (cityZone.isPlayerCity) city = City.GetCityFromCache(cityZone.playerCityID); else if (this.treeOfLife != null && this.treeOfLife.getGuild() != null) city = this.treeOfLife.getGuild().getOwnedCity(); if (city == null) CityName = "None"; else CityName = city.getCityName(); if (city == null) cityDate = LocalDateTime.now(); else cityDate = city.established; } private boolean canModify() { return this.player.getGuild() == this.treeOfLife.getGuild() && GuildStatusController.isInnerCouncil(player.getGuildStatus()); } /** * Serializes the subclass specific items from the supplied NetMsgReader. */ @Override protected void _serialize(ByteBufferWriter writer) { writer.putInt(targetType); writer.putInt(targetID); if (canAccess) writer.putInt(accessType); else writer.putInt(9); GuildTag._serializeForDisplay(cityGuildTag, writer); GuildTag._serializeForDisplay(cityNationTag, writer); writer.putString(CityName); writer.putString(GuildName); writer.putString(OwnerName); writer.putLocalDateTime(cityDate); writer.putInt(0); writer.putInt(0); if (city == null) writer.putInt(0); else writer.putInt(city.isOpen() ? 1 : 0); //check mark for open city writer.putInt(0); writer.putInt(0); writer.put(canBind); writer.put((byte) 0); if (canAccess) writer.put((byte) 1); else writer.put((byte) 0); writer.put((byte) 0); writer.putInt(1); writer.putString(city != null ? city.getDescription() : "None"); writer.putInt(0); } public int getTargetID() { return targetID; } }