/*
* Copyright (C) 2004-2015 L2J Server
*
* This file is part of L2J Server.
*
* L2J Server is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* L2J Server is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
package com.l2jserver.gameserver.network.serverpackets;
import java.util.List;
import com.l2jserver.gameserver.model.ActionKey;
import com.l2jserver.gameserver.model.UIKeysSettings;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
/**
* @author mrTJO
*/
public class ExUISetting extends L2GameServerPacket
{
private final UIKeysSettings _uiSettings;
private int buffsize, categories;
public ExUISetting(L2PcInstance player)
{
_uiSettings = player.getUISettings();
calcSize();
}
private void calcSize()
{
int size = 16; // initial header and footer
int category = 0;
int numKeyCt = _uiSettings.getKeys().size();
for (int i = 0; i < numKeyCt; i++)
{
size++;
if (_uiSettings.getCategories().containsKey(category))
{
List catElList1 = _uiSettings.getCategories().get(category);
size = size + catElList1.size();
}
category++;
size++;
if (_uiSettings.getCategories().containsKey(category))
{
List catElList2 = _uiSettings.getCategories().get(category);
size = size + catElList2.size();
}
category++;
size = size + 4;
if (_uiSettings.getKeys().containsKey(i))
{
List keyElList = _uiSettings.getKeys().get(i);
size = size + (keyElList.size() * 20);
}
}
buffsize = size;
categories = category;
}
@Override
protected void writeImpl()
{
writeC(0xFE);
writeH(0x70);
writeD(buffsize);
writeD(categories);
int category = 0;
int numKeyCt = _uiSettings.getKeys().size();
writeD(numKeyCt);
for (int i = 0; i < numKeyCt; i++)
{
if (_uiSettings.getCategories().containsKey(category))
{
List catElList1 = _uiSettings.getCategories().get(category);
writeC(catElList1.size());
for (int cmd : catElList1)
{
writeC(cmd);
}
}
else
{
writeC(0x00);
}
category++;
if (_uiSettings.getCategories().containsKey(category))
{
List catElList2 = _uiSettings.getCategories().get(category);
writeC(catElList2.size());
for (int cmd : catElList2)
{
writeC(cmd);
}
}
else
{
writeC(0x00);
}
category++;
if (_uiSettings.getKeys().containsKey(i))
{
List keyElList = _uiSettings.getKeys().get(i);
writeD(keyElList.size());
for (ActionKey akey : keyElList)
{
writeD(akey.getCommandId());
writeD(akey.getKeyId());
writeD(akey.getToogleKey1());
writeD(akey.getToogleKey2());
writeD(akey.getShowStatus());
}
}
else
{
writeD(0x00);
}
}
writeD(0x11);
writeD(0x10);
}
}