// • ▌ ▄ ·.  ▄▄▄·  ▄▄ • ▪   ▄▄· ▄▄▄▄·  ▄▄▄·  ▐▄▄▄  ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀  █▪▀▀▀ ▀  ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀  ▀  ▀ ▀▀  █▪ ▀▀▀
//      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<Integer> characterList;
	private int buildingType;
	private int buildingID;
	
	private int playerType;
	private int playerID;
	private int guildID;
	private int inviteType;
	private ConcurrentHashMap<Integer,BuildingFriends>friends;
	private int removeFriendType;
	private int removeFriendID;
	private boolean reverseKOS; //TODO Rename this for to fit ReverseKOS/Activate/deactive Condemned.
	private ConcurrentHashMap<Integer,Condemned> guildCondemned;
	private int nationID;

	public OpenFriendsCondemnListMsg(int messageType,ConcurrentHashMap<Integer,BuildingFriends>friends) {
		super(Protocol.OPENFRIENDSCONDEMNLIST);
		this.messageType = messageType;
		this.friends = friends;
		
	}
	
	public OpenFriendsCondemnListMsg(int messageType,ConcurrentHashMap<Integer,Condemned> 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<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.getFriendType()){
			case 2:
                PlayerCharacter playerCharacter = (PlayerCharacter) DbManager.getObject(engine.Enum.GameObjectType.PlayerCharacter, condemned.getPlayerUID());


				guild = playerCharacter.getGuild();
				writer.putInt(GameObjectType.PlayerCharacter.ordinal());
				writer.putInt(condemned.getPlayerUID());
				writer.putInt(condemned.getFriendType());
				writer.putInt(GameObjectType.PlayerCharacter.ordinal());
				writer.putInt(condemned.getPlayerUID());
				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.isActive() ?(byte)1:(byte)0);
				writer.put((byte)0);
				writer.put(condemned.isActive() ?(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.getGuildUID());
				writer.putInt(GameObjectType.Guild.ordinal());
				writer.putInt(condemned.getGuildUID());
				writer.putInt(condemned.getFriendType());
				writer.putLong(0);
				writer.putInt(GameObjectType.Guild.ordinal());
				writer.putInt(condemned.getGuildUID());
				writer.putLong(0);
				writer.put((byte)0);
				writer.put(condemned.isActive() ?(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.getGuildUID());
				writer.putInt(GameObjectType.Guild.ordinal());
				writer.putInt(condemned.getGuildUID());
				writer.putInt(condemned.getFriendType());
				writer.putLong(0);
				writer.putLong(0);
				writer.putInt(GameObjectType.Guild.ordinal());
				writer.putInt(condemned.getGuildUID());
				writer.put((byte)0);
				writer.put((byte)0);
				writer.put(condemned.isActive() ?(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.getPlayerUID());
				guild = Guild.getGuild(friend.getGuildUID());
			if (friend.getFriendType() == 7){
				if (pc != null)
				name = pc.getCombinedName();
			}
			
			else if (guild != null)
				name = guild.getName();
			writer.put((byte)1);
			if (friend.getFriendType() == 7){
				writer.putInt(GameObjectType.PlayerCharacter.ordinal());
				writer.putInt(friend.getPlayerUID());
			}else{
				writer.putInt(GameObjectType.Guild.ordinal());
				writer.putInt(friend.getGuildUID());
			}
			writer.putInt(friend.getFriendType());
			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<Integer,Integer> 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 ArrayList<Integer> getList() {
		return this.characterList;
	}

	public void setMessageType(int value) {
		this.messageType = value;
	}

	public void setList(ArrayList<Integer> value) {
		this.characterList = value;
	}

	public void updateMsg(int messageType, ArrayList<Integer> 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);
	
	}
}