// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ . // ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌· // ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀ // ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌ // ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀ // Magicbane Emulator Project © 2013 - 2022 // www.magicbane.com package engine.net.client.msg; import engine.Enum.GameObjectType; import engine.gameManager.DbManager; import engine.net.AbstractConnection; import engine.net.ByteBufferReader; import engine.net.ByteBufferWriter; import engine.net.client.ClientConnection; import engine.net.client.Protocol; import engine.objects.*; import java.util.ArrayList; import java.util.HashMap; import java.util.concurrent.ConcurrentHashMap; public class OpenFriendsCondemnListMsg extends ClientNetMsg { private int messageType; private ArrayList characterList; private int buildingType; private int buildingID; private int playerType; private int playerID; private int guildID; private int inviteType; private ConcurrentHashMapfriends; private int removeFriendType; private int removeFriendID; private boolean reverseKOS; //TODO Rename this for to fit ReverseKOS/Activate/deactive Condemned. private ConcurrentHashMap guildCondemned; private int nationID; public OpenFriendsCondemnListMsg(int messageType,ConcurrentHashMapfriends) { super(Protocol.OPENFRIENDSCONDEMNLIST); this.messageType = messageType; this.friends = friends; } public OpenFriendsCondemnListMsg(int messageType,ConcurrentHashMap guildCondemned ,boolean reverse) { super(Protocol.OPENFRIENDSCONDEMNLIST); this.messageType = messageType; this.guildCondemned = guildCondemned; this.reverseKOS = reverse; } // clone public OpenFriendsCondemnListMsg(OpenFriendsCondemnListMsg openFriendsCondemnListMsg) { super(Protocol.OPENFRIENDSCONDEMNLIST); this.messageType = openFriendsCondemnListMsg.messageType; this.guildCondemned = openFriendsCondemnListMsg.guildCondemned; this.reverseKOS = openFriendsCondemnListMsg.reverseKOS; this.playerType = openFriendsCondemnListMsg.playerType; this.playerID = openFriendsCondemnListMsg.playerID; this.inviteType = openFriendsCondemnListMsg.inviteType; this.removeFriendID = openFriendsCondemnListMsg.removeFriendID; this.removeFriendType = openFriendsCondemnListMsg.removeFriendType; this.reverseKOS = openFriendsCondemnListMsg.reverseKOS; this.nationID = openFriendsCondemnListMsg.nationID; this.buildingType = openFriendsCondemnListMsg.buildingType; this.buildingID = openFriendsCondemnListMsg.buildingID; this.friends = openFriendsCondemnListMsg.friends; this.characterList = openFriendsCondemnListMsg.characterList; } public void configure() { // Pre-Cache all players and guild targets if (characterList == null) return; for (Integer uuid : characterList) { PlayerCharacter player = (PlayerCharacter) DbManager.getObject(GameObjectType.PlayerCharacter, uuid); if (player == null) continue; Guild guild = player.getGuild(); if (guild == null) continue; } } public void configureHeraldry(PlayerCharacter player){ } /** * 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 OpenFriendsCondemnListMsg(AbstractConnection origin, ByteBufferReader reader) { super(Protocol.OPENFRIENDSCONDEMNLIST, origin, reader); // openFriendsCondemnList =1239809615 characterList = new ArrayList<>(); } /** * Serializes the subclass specific items to the supplied NetMsgWriter. */ @Override protected void _serialize(ByteBufferWriter writer) { writer.putInt(this.messageType); if (this.messageType == 2){ this.showHeraldy(writer); return; } if (this.messageType == 4){ this.writeAddHealrdy(writer); return; } if (this.messageType == 26){ showBuildingFriends(writer); return; } if (this.messageType == 12){ this.showCondemnList(writer); return; } if (this.messageType == 15){ this.removeCondemned(writer); return; } if (this.messageType == 17){ this.handleActivateCondemned(writer); return; } writer.putInt(0); writer.putInt(this.characterList.size()); writer.putInt(this.characterList.size()); for (Integer uuid : characterList) { PlayerCharacter player = (PlayerCharacter) DbManager.getObject(GameObjectType.PlayerCharacter, uuid); if (player == null) continue; writer.put((byte) 1); writer.putInt(0); writer.putInt(0); writer.putInt(1); writer.putInt(GameObjectType.PlayerCharacter.ordinal()); writer.putInt(player.getObjectUUID()); Guild guild = player.getGuild(); Guild nation = null; if (guild != null) { writer.putInt(guild.getObjectType().ordinal()); writer.putInt(guild.getObjectUUID()); nation = guild.getNation(); if (nation != null) { writer.putInt(nation.getObjectType().ordinal()); writer.putInt(nation.getObjectUUID()); } else { writer.putInt(0); writer.putInt(0); } } else { for (int i=0;i<4;i++) writer.putInt(0); } writer.putShort((short)0); writer.put((byte)0); writer.putString(player.getFirstName()); if (guild != null) { GuildTag._serializeForDisplay(guild.getGuildTag(),writer); } else { writer.putInt(16); writer.putInt(16); writer.putInt(16); writer.putInt(0); writer.putInt(0); } if (nation != null) { GuildTag._serializeForDisplay(nation.getGuildTag(),writer); } else { writer.putInt(16); writer.putInt(16); writer.putInt(16); writer.putInt(0); writer.putInt(0); } if (guild != null) writer.putString(guild.getName()); else writer.putString("[No Guild]"); if (nation != null) writer.putString(nation.getName()); else writer.putString("[No Nation]"); writer.putInt(0); } } private void readHandleToItem(ByteBufferReader reader){ reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); //object Type; reader.getInt(); //objectID; reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); } private void writeHandleToItem(ByteBufferWriter writer){ } private void removeCondemned(ByteBufferWriter writer){ writer.putInt(0); writer.putInt(playerType); writer.putInt(playerID); writer.putInt(0); writer.putInt(0); writer.putInt(0); writer.putInt(0); writer.putInt(0); writer.putInt(0); writer.putInt(removeFriendType); writer.putInt(removeFriendID); writer.putInt(buildingType); writer.putInt(buildingID); writer.putInt(0); writer.putInt(0); writer.putShort((short) 0); } /** * Deserializes the subclass specific items from the supplied NetMsgReader. */ @Override protected void _deserialize(ByteBufferReader reader) { this.messageType = reader.getInt(); //25 on open of friends list // 28 friends list // 11 open condemned list // 14 Open condemned selection of (indivual, guild, nation) if (this.messageType == 1){ this.viewHealrdy(reader); return; } if (this.messageType == 4){ this.readAddHealrdy(reader); return; } if (this.messageType == 6){ this.readRemoveHeraldry(reader); return; } if (this.messageType == 11){ this.ackBuildingFriends(reader); reader.get(); return; } if (this.messageType == 14){ this.addGuildCondemn(reader); return; } if (this.messageType == 15){ this.removeFriendList(reader); reader.get(); return; } if (this.messageType == 17){ this.handleActivateCondemned(reader); return; } if (this.messageType == 18){ this.handleCondemnErrant(reader); return; } if (this.messageType == 19){ this.handleKOS(reader); return; } if (this.messageType == 23){ this.readHandleToItem(reader); return; } if (this.messageType == 28){ addFriendsList(reader); return; } if (this.messageType == 30){ removeFriendList(reader); return; } if (this.messageType == 25){ ackBuildingFriends(reader); return; } reader.getInt(); int size = reader.getInt(); reader.getInt(); //size again for (int i=0;i heraldryMap = Heraldry.HeraldyMap.get(player.getObjectUUID()); //send empty list if no heraldry if (heraldryMap == null || heraldryMap.isEmpty()){ writer.putInt(0); return; } writer.putInt(heraldryMap.size()); for (int characterID : heraldryMap.keySet()){ AbstractCharacter heraldryCharacter = null; int characterType = heraldryMap.get(characterID); if (characterType == GameObjectType.PlayerCharacter.ordinal()) heraldryCharacter = PlayerCharacter.getFromCache(characterID); else if (characterType == GameObjectType.NPC.ordinal()) heraldryCharacter = NPC.getFromCache(characterID); else if (characterType == GameObjectType.Mob.ordinal()) heraldryCharacter = Mob.getFromCache(characterID); if (heraldryCharacter == null) this.showNullHeraldryCharacter(writer); else{ writer.put((byte)1); writer.putInt(heraldryCharacter.getObjectType().ordinal()); writer.putInt(heraldryCharacter.getObjectUUID()); writer.putInt(9); writer.putInt(heraldryCharacter.getObjectType().ordinal()); writer.putInt(heraldryCharacter.getObjectUUID()); if (heraldryCharacter.getGuild() != null) { writer.putInt(heraldryCharacter.getGuild().getObjectType().ordinal()); writer.putInt(heraldryCharacter.getGuild().getObjectUUID()); if (!heraldryCharacter.getGuild().getNation().isErrant()) { writer.putInt(heraldryCharacter.getGuild().getNation().getObjectType().ordinal()); writer.putInt(heraldryCharacter.getGuild().getNation().getObjectUUID()); }else{ writer.putInt(0); writer.putInt(0); } }else{ writer.putLong(0); writer.putLong(0); } writer.putShort((short)0); writer.put((byte)0); writer.putString(heraldryCharacter.getName()); if (heraldryCharacter.getGuild() != null) GuildTag._serializeForDisplay(heraldryCharacter.getGuild().getGuildTag(),writer); else{ writer.putInt(16); writer.putInt(16); writer.putInt(16); writer.putInt(0); writer.putInt(0); } writer.putInt(16); writer.putInt(16); writer.putInt(16); writer.putInt(0); writer.putInt(0); if (heraldryCharacter.getGuild() == null){ writer.putString("Errant"); writer.putString("Errant"); } else{ writer.putString(heraldryCharacter.getGuild().getName()); if (heraldryCharacter.getGuild().getNation() == null) writer.putString("Errant"); else writer.putString(heraldryCharacter.getGuild().getNation().getName()); } writer.putInt(0); } } } private void readAddHealrdy(ByteBufferReader reader){ reader.getInt(); reader.getInt(); this.playerType = reader.getInt(); //player object type; this.playerID = reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); } private void writeAddHealrdy(ByteBufferWriter writer){ writer.putInt(0); writer.putInt(0); writer.putInt(this.playerType); //player object type; writer.putInt(this.playerID); writer.putInt(0); writer.putInt(0); writer.putInt(0); writer.putInt(0); writer.putInt(0); writer.putInt(0); writer.putInt(0); writer.putInt(0); writer.putInt(0); writer.putInt(0); writer.putInt(0); } public int getMessageType() { return this.messageType; } public ArrayList getList() { return this.characterList; } public void setMessageType(int value) { this.messageType = value; } public void setList(ArrayList value) { this.characterList = value; } public void updateMsg(int messageType, ArrayList list) { this.messageType = messageType; this.characterList = list; this.configure(); } public int getInviteType() { return inviteType; } public int getPlayerType() { return playerType; } public void setPlayerType(int playerType) { this.playerType = playerType; } public int getPlayerID() { return playerID; } public void setPlayerID(int playerID) { this.playerID = playerID; } public int getGuildID() { return guildID; } public int getNationID() { return nationID; } public void setGuildID(int guildID) { this.guildID = guildID; } public int getBuildingID() { return buildingID; } public void setBuildingID(int buildingID) { this.buildingID = buildingID; } public boolean isReverseKOS() { return reverseKOS; } public void setReverseKOS(boolean reverseKOS) { this.reverseKOS = reverseKOS; } private void showNullHeraldryCharacter(ByteBufferWriter writer){ writer.put((byte)1); writer.putInt(0); writer.putInt(0); writer.putInt(6); writer.putInt(0); writer.putInt(0); writer.putLong(0); writer.putLong(0); writer.putShort((short)0); writer.put((byte)0); writer.putInt(0); writer.putInt(16); writer.putInt(16); writer.putInt(16); writer.putInt(0); writer.putInt(0); writer.putInt(16); writer.putInt(16); writer.putInt(16); writer.putInt(0); writer.putInt(0); writer.putInt(0); writer.putInt(0); writer.putInt(0); } }