// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ . // ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌· // ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀ // ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌ // ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀ // 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 ConcurrentHashMap friends; 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, ConcurrentHashMap friends) { 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; } /** * 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<>(); } 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) { } /** * 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 < size; i++) { reader.get(); reader.getInt(); //0 reader.getInt(); //0 reader.getInt(); //1 reader.getInt(); //Player Type int ID = reader.getInt(); //Player ID reader.getLong(); //Guild ID reader.getLong(); //Nation ID reader.getShort(); reader.get(); reader.getString(); //name for (int j = 0; j < 10; j++)////////The problem is in here its stops here!!!! reader.getInt(); //Guild and Nation tags reader.getString(); //guild name reader.getString(); //nation name reader.getInt(); this.characterList.add(ID); } } private void readRemoveHeraldry(ByteBufferReader reader) { reader.getInt(); reader.getInt(); reader.getInt(); this.playerType = reader.getInt(); this.playerID = reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); } private void handleActivateCondemned(ByteBufferReader reader) { reader.getInt(); this.removeFriendType = reader.getInt(); this.removeFriendID = reader.getInt(); reader.getInt(); this.buildingID = reader.getInt(); this.reverseKOS = reader.get() == 1 ? true : false; reader.getInt(); reader.getInt(); reader.get(); } private void handleCondemnErrant(ByteBufferReader reader) { reader.getInt(); this.removeFriendType = reader.getInt(); this.removeFriendID = reader.getInt(); reader.getInt(); this.buildingID = reader.getInt(); this.reverseKOS = reader.get() == 1 ? true : false; reader.getInt(); reader.getInt(); reader.get(); } private void handleActivateCondemned(ByteBufferWriter writer) { writer.putInt(0); writer.putInt(removeFriendType); writer.putInt(removeFriendID); writer.putInt(GameObjectType.Building.ordinal()); writer.putInt(buildingID); writer.put(reverseKOS ? (byte) 1 : (byte) 0); writer.putInt(0); writer.putInt(0); writer.put((byte) 0); } @Override protected int getPowerOfTwoBufferSize() { // Larger size for historically larger opcodes return 12; } private void addGuildCondemn(ByteBufferReader reader) { reader.getInt(); this.inviteType = reader.getInt(); reader.getInt(); this.playerID = reader.getInt(); reader.getInt(); this.guildID = reader.getInt(); reader.getInt(); this.nationID = reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); this.buildingID = reader.getInt(); reader.getLong(); reader.getShort(); } private void addFriendsList(ByteBufferReader reader) { reader.getInt(); this.inviteType = reader.getInt(); //7 individual, 8 guild, 9 guild IC this.playerType = reader.getInt(); this.playerID = reader.getInt(); reader.getInt(); this.guildID = reader.getInt(); reader.getLong(); //Nation, do we need this? reader.getLong(); reader.getLong(); reader.getLong(); reader.getInt(); this.buildingType = reader.getInt(); this.buildingID = reader.getInt(); reader.getInt(); reader.getInt(); reader.get(); } private void handleKOS(ByteBufferReader reader) { reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); this.buildingID = reader.getInt(); reader.get(); byte reverse = reader.get(); this.reverseKOS = reverse == 1 ? true : false; reader.getInt(); reader.getInt(); } private void removeFriendList(ByteBufferReader reader) { reader.getInt(); this.playerType = reader.getInt(); this.playerID = reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); reader.getInt(); this.removeFriendType = reader.getInt(); this.removeFriendID = reader.getInt(); this.buildingType = reader.getInt(); this.buildingID = reader.getInt(); reader.getInt(); reader.getInt(); reader.get(); } public int getRemoveFriendID() { return removeFriendID; } private void showCondemnList(ByteBufferWriter writer) { String name = ""; PlayerCharacter pc = null; Guild guild = null; writer.putInt(0); writer.putInt(0); writer.putInt(0); writer.putInt(0); writer.putInt(0); writer.put((byte) 0); writer.put(reverseKOS ? (byte) 1 : 0); //Reverse? int listSize = this.guildCondemned.size(); writer.putInt(listSize); writer.putInt(listSize); for (Condemned condemned : this.guildCondemned.values()) { writer.put((byte) 1); switch (condemned.friendType) { case 2: PlayerCharacter playerCharacter = (PlayerCharacter) DbManager.getObject(engine.Enum.GameObjectType.PlayerCharacter, condemned.playerUID); guild = playerCharacter.getGuild(); writer.putInt(GameObjectType.PlayerCharacter.ordinal()); writer.putInt(condemned.playerUID); writer.putInt(condemned.friendType); writer.putInt(GameObjectType.PlayerCharacter.ordinal()); writer.putInt(condemned.playerUID); writer.putInt(0); writer.putInt(0); writer.putInt(GameObjectType.Guild.ordinal()); if (guild != null) writer.putInt(guild.getObjectUUID()); else writer.putInt(0); writer.put(condemned.active ? (byte) 1 : (byte) 0); writer.put((byte) 0); writer.put(condemned.active ? (byte) 1 : (byte) 0); if (playerCharacter != null) writer.putString(playerCharacter.getFirstName()); else writer.putInt(0); GuildTag._serializeForDisplay(GuildTag.ERRANT, writer); if (guild != null) GuildTag._serializeForDisplay(guild.getGuildTag(), writer); else { GuildTag._serializeForDisplay(GuildTag.ERRANT, writer); } break; case 4: guild = Guild.getGuild(condemned.guildUID); writer.putInt(GameObjectType.Guild.ordinal()); writer.putInt(condemned.guildUID); writer.putInt(condemned.friendType); writer.putLong(0); writer.putInt(GameObjectType.Guild.ordinal()); writer.putInt(condemned.guildUID); writer.putLong(0); writer.put((byte) 0); writer.put(condemned.active ? (byte) 1 : (byte) 0); writer.put((byte) 0); if (guild != null) writer.putString(guild.getName()); else writer.putInt(0); if (guild != null) GuildTag._serializeForDisplay(guild.getGuildTag(), writer); else GuildTag._serializeForDisplay(GuildTag.ERRANT, writer); GuildTag._serializeForDisplay(GuildTag.ERRANT, writer); break; case 5: guild = Guild.getGuild(condemned.guildUID); writer.putInt(GameObjectType.Guild.ordinal()); writer.putInt(condemned.guildUID); writer.putInt(condemned.friendType); writer.putLong(0); writer.putLong(0); writer.putInt(GameObjectType.Guild.ordinal()); writer.putInt(condemned.guildUID); writer.put((byte) 0); writer.put((byte) 0); writer.put(condemned.active ? (byte) 1 : (byte) 0); if (guild != null) writer.putString(guild.getName()); else writer.putInt(0); GuildTag._serializeForDisplay(GuildTag.ERRANT, writer); if (guild != null) GuildTag._serializeForDisplay(guild.getGuildTag(), writer); else { GuildTag._serializeForDisplay(GuildTag.ERRANT, writer); } break; } writer.putInt(0); writer.putInt(0); writer.putInt(0); } } private void showBuildingFriends(ByteBufferWriter writer) { String name = ""; PlayerCharacter pc = null; Guild guild = null; writer.putInt(0); writer.putInt(0); writer.putInt(0); writer.putInt(0); writer.putInt(0); writer.put((byte) 0); int listSize = this.friends.size(); writer.putInt(listSize); writer.putInt(listSize); for (BuildingFriends friend : this.friends.values()) { pc = PlayerCharacter.getFromCache(friend.playerUID); guild = Guild.getGuild(friend.guildUID); if (friend.friendType == 7) { if (pc != null) name = pc.getCombinedName(); } else if (guild != null) name = guild.getName(); writer.put((byte) 1); if (friend.friendType == 7) { writer.putInt(GameObjectType.PlayerCharacter.ordinal()); writer.putInt(friend.playerUID); } else { writer.putInt(GameObjectType.Guild.ordinal()); writer.putInt(friend.guildUID); } writer.putInt(friend.friendType); writer.putInt(0); writer.putInt(0); if (guild != null) { writer.putInt(guild.getObjectType().ordinal()); writer.putInt(guild.getObjectUUID()); if (!guild.getNation().isEmptyGuild()) { writer.putInt(guild.getNation().getObjectType().ordinal()); writer.putInt(guild.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(name); if (guild != null) GuildTag._serializeForDisplay(guild.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); writer.putInt(0); writer.putInt(0); writer.putInt(0); } } private void ackBuildingFriends(ByteBufferReader reader) { reader.getInt(); reader.getInt(); reader.getInt(); this.buildingType = reader.getInt(); this.buildingID = reader.getInt(); reader.getInt(); reader.getInt(); reader.get(); } private void viewHealrdy(ByteBufferReader reader) { reader.getInt(); reader.getInt(); reader.getInt(); } private void showHeraldy(ByteBufferWriter writer) { PlayerCharacter player = ((ClientConnection) this.getOrigin()).getPlayerCharacter(); writer.putInt(0); //error pop up msg writer.putInt(0); // writer.putInt(0); HashMap 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().isEmptyGuild()) { 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 void setMessageType(int value) { this.messageType = value; } public ArrayList getList() { return this.characterList; } 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 void setGuildID(int guildID) { this.guildID = guildID; } public int getNationID() { return nationID; } 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); } }