Helios packet changes.

This commit is contained in:
MobiusDev 2017-01-20 09:38:44 +00:00
parent ec431e9d3f
commit aaa51582d7
23 changed files with 177 additions and 150 deletions

View File

@ -88,8 +88,8 @@ MaximumOnlineUsers = 2000
# Numbers of protocol revisions that server allows to connect.
# Delimiter is ;
# WARNING: <u><b><font color="red">Changing the protocol revision may result in incompatible communication and many errors in game!</font></b></u>
# Infinite Odyssey Underground: 28
AllowedProtocolRevisions = 28
# Helios: 64
AllowedProtocolRevisions = 64
# Displays server type next to the server name on character selection.
# Notes:

View File

@ -79,7 +79,9 @@ public class LoginServerThread extends Thread
protected static final Logger LOGGER = Logger.getLogger(LoginServerThread.class.getName());
protected static final Logger ACCOUNTING_LOGGER = Logger.getLogger("accounting");
/** @see com.l2jmobius.loginserver.L2LoginServer#PROTOCOL_REV */
/**
* @see com.l2jmobius.loginserver.L2LoginServer#PROTOCOL_REV
*/
private static final int REVISION = 0x0106;
private final String _hostname;
private final int _port;
@ -310,6 +312,7 @@ public class LoginServerThread extends Thread
sendPacket(pig);
wcToRemove.gameClient.setConnectionState(ConnectionState.AUTHENTICATED);
wcToRemove.gameClient.setSessionId(wcToRemove.session);
wcToRemove.gameClient.sendPacket(LoginFail.LOGIN_SUCCESS);
final CharSelectionInfo cl = new CharSelectionInfo(wcToRemove.account, wcToRemove.gameClient.getSessionId().playOkID1);
wcToRemove.gameClient.sendPacket(cl);
wcToRemove.gameClient.setCharSelection(cl.getCharInfo());

View File

@ -270,6 +270,7 @@ import com.l2jmobius.gameserver.network.serverpackets.EtcStatusUpdate;
import com.l2jmobius.gameserver.network.serverpackets.ExAbnormalStatusUpdateFromTarget;
import com.l2jmobius.gameserver.network.serverpackets.ExAdenaInvenCount;
import com.l2jmobius.gameserver.network.serverpackets.ExAutoSoulShot;
import com.l2jmobius.gameserver.network.serverpackets.ExBrPremiumState;
import com.l2jmobius.gameserver.network.serverpackets.ExDuelUpdateUserInfo;
import com.l2jmobius.gameserver.network.serverpackets.ExGetBookMarkInfoPacket;
import com.l2jmobius.gameserver.network.serverpackets.ExGetOnAirShip;
@ -12864,6 +12865,7 @@ public final class L2PcInstance extends L2Playable
public void setPremiumStatus(boolean premiumStatus)
{
_premiumStatus = premiumStatus;
sendPacket(new ExBrPremiumState(this));
}
public boolean hasPremiumStatus()

View File

@ -334,30 +334,46 @@ public enum ExIncomingPackets implements IIncomingPackets<L2GameClient>
REQUEST_NEW_ENCHANT_REMOVE_TWO(0xF7, RequestNewEnchantRemoveTwo::new, ConnectionState.IN_GAME),
REQUEST_NEW_ENCHANT_CLOSE(0xF8, RequestNewEnchantClose::new, ConnectionState.IN_GAME),
REQUEST_NEW_ENCHANT_TRY(0xF9, RequestNewEnchantTry::new, ConnectionState.IN_GAME),
EX_SEND_SELECTED_QUEST_ZONE_ID(0xFE, ExSendSelectedQuestZoneID::new, ConnectionState.IN_GAME),
REQUEST_ALCHEMY_SKILL_LIST(0xFF, RequestAlchemySkillList::new, ConnectionState.IN_GAME),
REQUEST_ALCHEMY_TRY_MIX_CUBE(0x100, RequestAlchemyTryMixCube::new, ConnectionState.IN_GAME),
REQUEST_ALCHEMY_CONVERSION(0x101, RequestAlchemyConversion::new, ConnectionState.IN_GAME),
SEND_EXECUTED_UI_EVENTS_COUNT(0x102, null, ConnectionState.IN_GAME),
EX_SEND_CLIENT_INI(0x103, null, ConnectionState.IN_GAME),
REQUEST_EX_AUTO_FISH(0x104, ExRequestAutoFish::new, ConnectionState.IN_GAME),
REQUEST_VIP_ATTENDANCE_ITEM_LIST(0x105, null, ConnectionState.IN_GAME),
REQUEST_VIP_ATTENDANCE_CHECK(0x106, null, ConnectionState.IN_GAME),
REQUEST_ITEM_ENSOUL(0x107, RequestItemEnsoul::new, ConnectionState.IN_GAME),
REQUEST_VIP_PRODUCT_LIST(0x108, null, ConnectionState.IN_GAME),
REQUEST_VIP_LUCKY_GAME_INFO(0x109, null, ConnectionState.IN_GAME),
REQUEST_VIP_LUCKY_GAME_ITEM_LIST(0x10A, null, ConnectionState.IN_GAME),
REQUEST_VIP_LUCKY_GAME_BONUS(0x10B, null, ConnectionState.IN_GAME),
EXREQUEST_VIPINFO(0x10C, null, ConnectionState.IN_GAME),
REQUEST_CAPTCHA_ANSWER(0x10D, null, ConnectionState.IN_GAME),
REQUEST_REFRESH_CAPTCHA_IMAGE(0x10E, null, ConnectionState.IN_GAME),
REQUEST_TODO_LIST(0x10F, RequestTodoList::new, ConnectionState.IN_GAME),
REQUEST_TODO_LIST_HTML(0x110, null, ConnectionState.IN_GAME),
REQUEST_ONE_DAY_REWARD_RECEIVE(0x111, RequestOneDayRewardReceive::new, ConnectionState.IN_GAME),
REQUEST_PLEDGE_BONUS_OPEN(0x112, RequestPledgeBonusOpen::new, ConnectionState.IN_GAME),
REQUEST_PLEDGE_BONUS_REWARD_LIST(0x113, RequestPledgeBonusRewardList::new, ConnectionState.IN_GAME),
REQUEST_PLEDGE_BONUS_REWARD(0x114, RequestPledgeBonusReward::new, ConnectionState.IN_GAME),
REQUEST_SSO_AUTHN_TOKEN(0x115, null, ConnectionState.IN_GAME);
EX_SEND_SELECTED_QUEST_ZONE_ID(0xFF, ExSendSelectedQuestZoneID::new, ConnectionState.IN_GAME),
REQUEST_ALCHEMY_SKILL_LIST(0x100, RequestAlchemySkillList::new, ConnectionState.IN_GAME),
REQUEST_ALCHEMY_TRY_MIX_CUBE(0x101, RequestAlchemyTryMixCube::new, ConnectionState.IN_GAME),
REQUEST_ALCHEMY_CONVERSION(0x102, RequestAlchemyConversion::new, ConnectionState.IN_GAME),
SEND_EXECUTED_UI_EVENTS_COUNT(0x103, null, ConnectionState.IN_GAME),
EX_SEND_CLIENT_INI(0x104, null, ConnectionState.AUTHENTICATED),
REQUEST_EX_AUTO_FISH(0x105, ExRequestAutoFish::new, ConnectionState.IN_GAME),
REQUEST_VIP_ATTENDANCE_ITEM_LIST(0x106, null, ConnectionState.IN_GAME),
REQUEST_VIP_ATTENDANCE_CHECK(0x107, null, ConnectionState.IN_GAME),
REQUEST_ITEM_ENSOUL(0x108, RequestItemEnsoul::new, ConnectionState.IN_GAME),
REQUEST_CASTLE_WAR_SEASON_REWARD(0x109, null, ConnectionState.IN_GAME),
REQUEST_VIP_PRODUCT_LIST(0x10A, null, ConnectionState.IN_GAME),
REQUEST_VIP_LUCKY_GAME_INFO(0x10B, null, ConnectionState.IN_GAME),
REQUEST_VIP_LUCKY_GAME_ITEM_LIST(0x10C, null, ConnectionState.IN_GAME),
REQUEST_VIP_LUCKY_GAME_BONUS(0x10D, null, ConnectionState.IN_GAME),
EX_REQUEST_VIP_INFO(0x10E, null, ConnectionState.IN_GAME),
REQUEST_CAPTCHA_ANSWER(0x10F, null, ConnectionState.IN_GAME),
REQUEST_REFRESH_CAPTCHA_IMAGE(0x110, null, ConnectionState.IN_GAME),
REQUEST_PLEDGE_SIGN_IN_FOR_OPEN_JOINING_METHOD(0x111, null, ConnectionState.IN_GAME),
EX_REQUEST_MATCH_ARENA(0x112, null, ConnectionState.IN_GAME),
EX_CONFIRM_MATCH_ARENA(0x113, null, ConnectionState.IN_GAME),
EX_CANCEL_MATCH_ARENA(0x114, null, ConnectionState.IN_GAME),
EX_CHANGE_CLASS_ARENA(0x115, null, ConnectionState.IN_GAME),
EX_CONFIRM_CLASS_ARENA(0x116, null, ConnectionState.IN_GAME),
// TODO: Check Helios updates
REQUEST_USER_FACTION_INFO(0x119, null, ConnectionState.IN_GAME),
EX_EXIT_ARENA(0x11A, null, ConnectionState.IN_GAME),
REQUEST_EVENT_BALTHUS_TOKEN(0x11B, null, ConnectionState.IN_GAME),
REQUEST_PARTY_MATCHING_HISTORY(0x11C, null, ConnectionState.IN_GAME),
REQUEST_TODO_LIST(0x11D, RequestTodoList::new, ConnectionState.IN_GAME),
REQUEST_TODO_LIST_HTML(0x11E, null, ConnectionState.IN_GAME),
REQUEST_ONE_DAY_REWARD_RECEIVE(0x11F, RequestOneDayRewardReceive::new, ConnectionState.IN_GAME),
REQUEST_QUEUE_TICKET(0x120, null, ConnectionState.IN_GAME),
REQUEST_PLEDGE_BONUS_OPEN(0x121, RequestPledgeBonusOpen::new, ConnectionState.IN_GAME),
REQUEST_PLEDGE_BONUS_REWARD_LIST(0x122, RequestPledgeBonusRewardList::new, ConnectionState.IN_GAME),
REQUEST_PLEDGE_BONUS_REWARD(0x123, RequestPledgeBonusReward::new, ConnectionState.IN_GAME),
REQUEST_SSO_AUTHN_TOKEN(0x124, null, ConnectionState.IN_GAME),
REQUEST_QUEUE_TICKET_LOGIN(0x125, null, ConnectionState.IN_GAME),
REQUEST_BLOCK_MEMO_INFO(0x126, null, ConnectionState.IN_GAME),
REQUEST_TRY_EN_SOUL_EXTRACTION(0x127, null, ConnectionState.IN_GAME);
public static final ExIncomingPackets[] PACKET_ARRAY;

View File

@ -650,38 +650,70 @@ public enum OutgoingPackets
EX_ENCHANT_TWO_REMOVE_FAIL(0xFE, 0x16F),
EX_ENCHANT_SUCESS(0xFE, 0x170),
EX_ENCHANT_FAIL(0xFE, 0x171),
EX_ACCOUNT_ATTENDANCE_INFO(0xFE, 0x172),
EX_WORLD_CHAT_CNT(0xFE, 0x173),
EX_ALCHEMY_SKILL_LIST(0xFE, 0x174),
EX_TRY_MIX_CUBE(0xFE, 0x175),
EX_ALCHEMY_CONVERSION(0xFE, 0x176),
EX_BEAUTY_ITEM_LIST(0xFE, 0x177),
EX_RECEIVE_CLIENT_INI(0xFE, 0x178),
EX_AUTO_FISH_AVAILABLE(0xFE, 0x179),
EX_CHANNEL_CHAT_ENTER_WORLD(0xFE, 0x17A),
EX_CHANNEL_CHAT_PLEGE_INFO(0xFE, 0x17B),
EX_VIP_ATTENDANCE_ITEM_LIST(0xFE, 0x17C),
EX_CONFIRM_VIP_ATTENDANCE_CHECK(0xFE, 0x17D),
EX_SHOW_ENSOUL_WINDOW(0xFE, 0x17E),
EX_ENSOUL_RESULT(0xFE, 0x17F),
RECIVE_VIP_PRODUCT_LIST(0xFE, 0x180),
RECIVE_VIP_LUCKY_GAME_INFO(0xFE, 0x181),
RECIVE_VIP_LUCKY_GAME_ITEM_LIST(0xFE, 0x182),
RECIVE_VIP_LUCKY_GAME_RESULT(0xFE, 0x183),
RECIVE_VIP_INFO(0xFE, 0x184),
RECIVE_VIP_INFO_REMAIN_TIME(0xFE, 0x185),
RECEIVE_VIP_BOT_CAPTCHA_IMAGE(0xFE, 0x186),
RECEIVE_VIP_BOT_CAPTCHA_ANSWER_RESULT(0xFE, 0x187),
EX_ONE_DAY_RECEIVE_REWARD_LIST(0xFE, 0x188),
EX_CONNECTED_TIME_AND_GETTABLE_REWARD(0xFE, 0x189),
EX_TODO_LIST_RECOMMAND(0xFE, 0x18A),
EX_TODO_LIST_INZONE(0xFE, 0x18B),
EX_TODO_LIST_HTML(0xFE, 0x18C),
EX_PLEDGE_BONUS_OPEN(0xFE, 0x18D),
EX_PLEDGE_BONUS_LIST(0xFE, 0x18E),
EX_PLEDGE_BONUS_MARK_RESET(0xFE, 0x18F),
EX_PLEDGE_BONUS_UPDATE(0xFE, 0x190),
EX_SSO_AUTH_TOKEN(0xFE, 0x191);
EX_ACCOUNT_ATTENDANCE_INFO(0xFE, 0x174),
EX_WORLD_CHAT_CNT(0xFE, 0x175),
EX_ALCHEMY_SKILL_LIST(0xFE, 0x176),
EX_TRY_MIX_CUBE(0xFE, 0x177),
EX_ALCHEMY_CONVERSION(0xFE, 0x178),
EX_BEAUTY_ITEM_LIST(0xFE, 0x179),
EX_RECEIVE_CLIENT_INI(0xFE, 0x17A),
EX_AUTO_FISH_AVAILABLE(0xFE, 0x17B),
EX_CHANNEL_CHAT_ENTER_WORLD(0xFE, 0x17C),
EX_CHANNEL_CHAT_PLEGE_INFO(0xFE, 0x17D),
EX_VIP_ATTENDANCE_ITEM_LIST(0xFE, 0x17E),
EX_CONFIRM_VIP_ATTENDANCE_CHECK(0xFE, 0x17F),
EX_SHOW_ENSOUL_WINDOW(0xFE, 0x180),
EX_ENSOUL_RESULT(0xFE, 0x181),
EX_MULTISELL_RESULT(0xFE, 0x182),
EX_CASTLE_WAR_SEASON_RESULT(0xFE, 0x183),
EX_CASTLE_WAR_SEASON_REWARD(0xFE, 0x184),
RECIVE_VIP_PRODUCT_LIST(0xFE, 0x185),
RECIVE_VIP_LUCKY_GAME_INFO(0xFE, 0x186),
RECIVE_VIP_LUCKY_GAME_ITEM_LIST(0xFE, 0x187),
RECIVE_VIP_LUCKY_GAME_RESULT(0xFE, 0x188),
RECIVE_VIP_INFO(0xFE, 0x189),
RECIVE_VIP_INFO_REMAIN_TIME(0xFE, 0x18A),
RECEIVE_VIP_BOT_CAPTCHA_IMAGE(0xFE, 0x18B),
RECEIVE_VIP_BOT_CAPTCHA_ANSWER_RESULT(0xFE, 0x18C),
EX_PLEDGE_SINGIN_FOR_OPEN_JOINING_METHOD(0xFE, 0x18D),
EX_REQUEST_MATCH_ARENA(0xFE, 0x18E),
EX_COMPLETE_MATCH_ARENA(0xFE, 0x18F),
EX_CONFIRM_MATCH_ARENA(0xFE, 0x190),
EX_CANCEL_MATCH_ARENA(0xFE, 0x191),
EX_START_CHOOSE_CLASS_ARENA(0xFE, 0x192),
EX_CHANGE_CLASS_ARENA(0xFE, 0x193),
EX_CONFIRM_CLASS_ARENA(0xFE, 0x194),
EX_START_BATTLE_READY_ARENA(0xFE, 0x195),
EX_BATTLE_READY_ARENA(0xFE, 0x196),
EX_DECO_NPC_INFO(0xFE, 0x197),
EX_DECO_NPC_SET(0xFE, 0x198),
EX_FACTION_INFO(0xFE, 0x199),
EX_BATTLE_RESULT_ARENA(0xFE, 0x19A),
EX_CLOSING_ARENA(0xFE, 0x19B),
EX_CLOSED_ARENA(0xFE, 0x19C),
EX_DIE_IN_ARENA(0xFE, 0x19D),
EX_ARENA_DASHBOARD(0xFE, 0x19E),
EX_ARENA_UPDATE_EQUIP_SLOT(0xFE, 0x19F),
EX_ARENA_KILL_INFO(0xFE, 0x1A0),
EX_EXIT_ARENA(0xFE, 0x1A1),
EX_BALTHUS_EVENT(0xFE, 0x1A2),
EX_BALTHUS_EVENT_JACKPOT_USER(0xFE, 0x1A3),
EX_PARTY_MATCHING_ROOM_HISTORY(0xFE, 0x1A4),
EX_AI_CONTENT_UI_EVENT(0xFE, 0x1A5),
EX_ONE_DAY_RECEIVE_REWARD_LIST(0xFE, 0x1A7),
EX_CONNECTED_TIME_AND_GETTABLE_REWARD(0xFE, 0x1A8),
EX_TODO_LIST_RECOMMAND(0xFE, 0x1A9),
EX_TODO_LIST_INZONE(0xFE, 0x1AA),
EX_TODO_LIST_HTML(0xFE, 0x1AB),
EX_QUEUE_TICKET(0xFE, 0x1AC),
EX_PLEDGE_BONUS_OPEN(0xFE, 0x1AD),
EX_PLEDGE_BONUS_LIST(0xFE, 0x1AE),
EX_PLEDGE_BONUS_MARK_RESET(0xFE, 0x1AF),
EX_PLEDGE_BONUS_UPDATE(0xFE, 0x1B0),
EX_SSO_AUTH_TOKEN(0xFE, 0x1B1),
EX_QUEUE_TICKET_LOGIN(0xFE, 0x1B2),
EX_ENSOUL_EXTRACTION_SHOW(0xFE, 0x1B3),
EX_ENSOUL_EXTRACTION_RESULT(0xFE, 0x1B4);
private final int _id1;
private final int _id2;

View File

@ -41,7 +41,7 @@ public final class RequestMakeMacro implements IClientIncomingPacket
final String _name = packet.readS();
final String _desc = packet.readS();
final String _acronym = packet.readS();
final int icon = packet.readC();
final int icon = packet.readD();
int count = packet.readC();
if (count > MAX_MACRO_LENGTH)
{

View File

@ -29,6 +29,7 @@ public class RequestTutorialQuestionMark implements IClientIncomingPacket
@Override
public boolean read(L2GameClient client, PacketReader packet)
{
packet.readC(); // index ?
_number = packet.readD();
return true;
}

View File

@ -62,22 +62,6 @@ public abstract class AbstractItemPacket extends AbstractMaskPacket<ItemListType
writeItem(packet, new ItemInfo(item));
}
protected void writeTradeItem(PacketWriter packet, TradeItem item)
{
packet.writeH(item.getItem().getType1());
packet.writeD(item.getObjectId()); // ObjectId
packet.writeD(item.getItem().getDisplayId()); // ItemId
packet.writeQ(item.getCount()); // Quantity
packet.writeC(item.getItem().getType2()); // Item Type 2 : 00-weapon, 01-shield/armor, 02-ring/earring/necklace, 03-questitem, 04-adena, 05-item
packet.writeC(item.getCustomType1()); // Filler (always 0)
packet.writeQ(item.getItem().getBodyPart()); // Slot : 0006-lr.ear, 0008-neck, 0030-lr.finger, 0040-head, 0100-l.hand, 0200-gloves, 0400-chest, 0800-pants, 1000-feet, 4000-r.hand, 8000-r.hand
packet.writeC(item.getEnchant()); // Enchant level (pet level shown in control item)
packet.writeC(0x00); // TODO : Find me
packet.writeH(0x00); // Equipped : 00-No, 01-yes
packet.writeH(item.getCustomType2());
writeItemElementalAndEnchant(packet, new ItemInfo(item));
}
protected void writeItem(PacketWriter packet, ItemInfo item)
{
final int mask = calculateMask(item);
@ -219,29 +203,4 @@ public abstract class AbstractItemPacket extends AbstractMaskPacket<ItemListType
packet.writeH(0x00);
}
}
protected void writeCommissionItem(PacketWriter packet, ItemInfo item)
{
packet.writeD(0); // Always 0
packet.writeD(item.getItem().getId());
packet.writeQ(item.getCount());
packet.writeH(item.getItem().getType2());
packet.writeQ(item.getItem().getBodyPart());
packet.writeC(item.getEnchant());
packet.writeC(0x00); // TODO: Find me
packet.writeH(item.getCustomType2());
writeItemElementalAndEnchant(packet, item);
packet.writeD(item.getVisualId());
packet.writeC(item.getSoulCrystalOptions().size()); // Size of regular soul crystal options.
for (EnsoulOption option : item.getSoulCrystalOptions())
{
packet.writeD(option.getId()); // Regular Soul Crystal Ability ID.
}
packet.writeC(item.getSoulCrystalSpecialOptions().size()); // Size of special soul crystal options.
for (EnsoulOption option : item.getSoulCrystalSpecialOptions())
{
packet.writeD(option.getId()); // Special Soul Crystal Ability ID.
}
}
}

View File

@ -172,11 +172,12 @@ public class CharSelectionInfo implements IClientOutgoingPacket
packet.writeD(charInfoPackage.getPaperdollItemVisualId(slot));
}
packet.writeD(0x00); // ??
packet.writeD(0x00); // ??
packet.writeD(0x00); // ??
packet.writeC(0x00); // Armor Enchant
packet.writeC(0x00); // Weapon Enchant
packet.writeD(0x00);
packet.writeH(0x00);
packet.writeH(0x00);
packet.writeH(0x00);
packet.writeH(0x00);
packet.writeH(0x00);
packet.writeD(charInfoPackage.getHairStyle());
packet.writeD(charInfoPackage.getHairColor());

View File

@ -52,6 +52,7 @@ public class ExHeroList implements IClientOutgoingPacket
packet.writeS(hero.getString(Hero.ALLY_NAME, ""));
packet.writeD(hero.getInt(Hero.ALLY_CREST, 0));
packet.writeD(hero.getInt(Hero.COUNT));
packet.writeD(0x00);
}
return true;
}

View File

@ -51,14 +51,14 @@ public final class GMHennaInfo implements IClientOutgoingPacket
{
OutgoingPackets.GMHENNA_INFO.writeId(packet);
packet.writeD(_activeChar.getHennaValue(BaseStats.INT)); // equip INT
packet.writeD(_activeChar.getHennaValue(BaseStats.STR)); // equip STR
packet.writeD(_activeChar.getHennaValue(BaseStats.CON)); // equip CON
packet.writeD(_activeChar.getHennaValue(BaseStats.MEN)); // equip MEN
packet.writeD(_activeChar.getHennaValue(BaseStats.DEX)); // equip DEX
packet.writeD(_activeChar.getHennaValue(BaseStats.WIT)); // equip WIT
packet.writeD(_activeChar.getHennaValue(BaseStats.LUC)); // equip LUC
packet.writeD(_activeChar.getHennaValue(BaseStats.CHA)); // equip CHA
packet.writeH(_activeChar.getHennaValue(BaseStats.INT)); // equip INT
packet.writeH(_activeChar.getHennaValue(BaseStats.STR)); // equip STR
packet.writeH(_activeChar.getHennaValue(BaseStats.CON)); // equip CON
packet.writeH(_activeChar.getHennaValue(BaseStats.MEN)); // equip MEN
packet.writeH(_activeChar.getHennaValue(BaseStats.DEX)); // equip DEX
packet.writeH(_activeChar.getHennaValue(BaseStats.WIT)); // equip WIT
packet.writeH(_activeChar.getHennaValue(BaseStats.LUC)); // equip LUC
packet.writeH(_activeChar.getHennaValue(BaseStats.CHA)); // equip CHA
packet.writeD(3); // Slots
packet.writeD(_hennas.size()); // Size
for (L2Henna henna : _hennas)

View File

@ -51,14 +51,14 @@ public final class HennaInfo implements IClientOutgoingPacket
{
OutgoingPackets.HENNA_INFO.writeId(packet);
packet.writeD(_activeChar.getHennaValue(BaseStats.INT)); // equip INT
packet.writeD(_activeChar.getHennaValue(BaseStats.STR)); // equip STR
packet.writeD(_activeChar.getHennaValue(BaseStats.CON)); // equip CON
packet.writeD(_activeChar.getHennaValue(BaseStats.MEN)); // equip MEN
packet.writeD(_activeChar.getHennaValue(BaseStats.DEX)); // equip DEX
packet.writeD(_activeChar.getHennaValue(BaseStats.WIT)); // equip WIT
packet.writeD(_activeChar.getHennaValue(BaseStats.LUC)); // equip LUC
packet.writeD(_activeChar.getHennaValue(BaseStats.CHA)); // equip CHA
packet.writeH(_activeChar.getHennaValue(BaseStats.INT)); // equip INT
packet.writeH(_activeChar.getHennaValue(BaseStats.STR)); // equip STR
packet.writeH(_activeChar.getHennaValue(BaseStats.CON)); // equip CON
packet.writeH(_activeChar.getHennaValue(BaseStats.MEN)); // equip MEN
packet.writeH(_activeChar.getHennaValue(BaseStats.DEX)); // equip DEX
packet.writeH(_activeChar.getHennaValue(BaseStats.WIT)); // equip WIT
packet.writeH(_activeChar.getHennaValue(BaseStats.LUC)); // equip LUC
packet.writeH(_activeChar.getHennaValue(BaseStats.CHA)); // equip CHA
packet.writeD(3 - _activeChar.getHennaEmptySlots()); // Slots
packet.writeD(_hennas.size()); // Size
for (L2Henna henna : _hennas)

View File

@ -48,21 +48,21 @@ public class HennaItemDrawInfo implements IClientOutgoingPacket
packet.writeD(_henna.isAllowedClass(_activeChar.getClassId()) ? 0x01 : 0x00); // able to draw or not 0 is false and 1 is true
packet.writeQ(_activeChar.getAdena());
packet.writeD(_activeChar.getINT()); // current INT
packet.writeD(_activeChar.getINT() + _activeChar.getHennaValue(BaseStats.INT)); // equip INT
packet.writeH(_activeChar.getINT() + _activeChar.getHennaValue(BaseStats.INT)); // equip INT
packet.writeD(_activeChar.getSTR()); // current STR
packet.writeD(_activeChar.getSTR() + _activeChar.getHennaValue(BaseStats.STR)); // equip STR
packet.writeH(_activeChar.getSTR() + _activeChar.getHennaValue(BaseStats.STR)); // equip STR
packet.writeD(_activeChar.getCON()); // current CON
packet.writeD(_activeChar.getCON() + _activeChar.getHennaValue(BaseStats.CON)); // equip CON
packet.writeH(_activeChar.getCON() + _activeChar.getHennaValue(BaseStats.CON)); // equip CON
packet.writeD(_activeChar.getMEN()); // current MEN
packet.writeD(_activeChar.getMEN() + _activeChar.getHennaValue(BaseStats.MEN)); // equip MEN
packet.writeH(_activeChar.getMEN() + _activeChar.getHennaValue(BaseStats.MEN)); // equip MEN
packet.writeD(_activeChar.getDEX()); // current DEX
packet.writeD(_activeChar.getDEX() + _activeChar.getHennaValue(BaseStats.DEX)); // equip DEX
packet.writeH(_activeChar.getDEX() + _activeChar.getHennaValue(BaseStats.DEX)); // equip DEX
packet.writeD(_activeChar.getWIT()); // current WIT
packet.writeD(_activeChar.getWIT() + _activeChar.getHennaValue(BaseStats.WIT)); // equip WIT
packet.writeH(_activeChar.getWIT() + _activeChar.getHennaValue(BaseStats.WIT)); // equip WIT
packet.writeD(_activeChar.getLUC()); // current LUC
packet.writeD(_activeChar.getLUC() + _activeChar.getHennaValue(BaseStats.LUC)); // equip LUC
packet.writeH(_activeChar.getLUC() + _activeChar.getHennaValue(BaseStats.LUC)); // equip LUC
packet.writeD(_activeChar.getCHA()); // current CHA
packet.writeD(_activeChar.getCHA() + _activeChar.getHennaValue(BaseStats.CHA)); // equip CHA
packet.writeH(_activeChar.getCHA() + _activeChar.getHennaValue(BaseStats.CHA)); // equip CHA
packet.writeD(0x00); // TODO: Find me!
return true;
}

View File

@ -48,21 +48,21 @@ public final class HennaItemRemoveInfo implements IClientOutgoingPacket
packet.writeD(_henna.isAllowedClass(_activeChar.getClassId()) ? 0x01 : 0x00); // able to remove or not
packet.writeQ(_activeChar.getAdena());
packet.writeD(_activeChar.getINT()); // current INT
packet.writeD(_activeChar.getINT() - _activeChar.getHennaValue(BaseStats.INT)); // equip INT
packet.writeH(_activeChar.getINT() - _activeChar.getHennaValue(BaseStats.INT)); // equip INT
packet.writeD(_activeChar.getSTR()); // current STR
packet.writeD(_activeChar.getSTR() - _activeChar.getHennaValue(BaseStats.STR)); // equip STR
packet.writeH(_activeChar.getSTR() - _activeChar.getHennaValue(BaseStats.STR)); // equip STR
packet.writeD(_activeChar.getCON()); // current CON
packet.writeD(_activeChar.getCON() - _activeChar.getHennaValue(BaseStats.CON)); // equip CON
packet.writeH(_activeChar.getCON() - _activeChar.getHennaValue(BaseStats.CON)); // equip CON
packet.writeD(_activeChar.getMEN()); // current MEN
packet.writeD(_activeChar.getMEN() - _activeChar.getHennaValue(BaseStats.MEN)); // equip MEN
packet.writeH(_activeChar.getMEN() - _activeChar.getHennaValue(BaseStats.MEN)); // equip MEN
packet.writeD(_activeChar.getDEX()); // current DEX
packet.writeD(_activeChar.getDEX() - _activeChar.getHennaValue(BaseStats.DEX)); // equip DEX
packet.writeH(_activeChar.getDEX() - _activeChar.getHennaValue(BaseStats.DEX)); // equip DEX
packet.writeD(_activeChar.getWIT()); // current WIT
packet.writeD(_activeChar.getWIT() - _activeChar.getHennaValue(BaseStats.WIT)); // equip WIT
packet.writeH(_activeChar.getWIT() - _activeChar.getHennaValue(BaseStats.WIT)); // equip WIT
packet.writeD(_activeChar.getLUC()); // current LUC
packet.writeD(_activeChar.getLUC() - _activeChar.getHennaValue(BaseStats.LUC)); // equip LUC
packet.writeH(_activeChar.getLUC() - _activeChar.getHennaValue(BaseStats.LUC)); // equip LUC
packet.writeD(_activeChar.getCHA()); // current CHA
packet.writeD(_activeChar.getCHA() - _activeChar.getHennaValue(BaseStats.CHA)); // equip CHA
packet.writeH(_activeChar.getCHA() - _activeChar.getHennaValue(BaseStats.CHA)); // equip CHA
packet.writeD(0x00);
return true;
}

View File

@ -75,6 +75,8 @@ public class ListPartyWaiting implements IClientOutgoingPacket
packet.writeS(member.getName());
}
}
packet.writeD(0);
packet.writeD(0);
return true;
}
}

View File

@ -21,7 +21,6 @@ import com.l2jmobius.gameserver.network.OutgoingPackets;
public class LoginFail implements IClientOutgoingPacket
{
// TODO: Enum
public static final int NO_TEXT = 0;
public static final int SYSTEM_ERROR_LOGIN_LATER = 1;
public static final int PASSWORD_DOES_NOT_MATCH_THIS_ACCOUNT = 2;
@ -34,13 +33,20 @@ public class LoginFail implements IClientOutgoingPacket
public static final int ACCESS_FAILED_TRY_LATER4 = 9;
public static final int ACCESS_FAILED_TRY_LATER5 = 10;
private final int _reason;
public static final LoginFail LOGIN_SUCCESS = new LoginFail(-1, NO_TEXT);
private final int _reason;
private final int _success;
/**
* @param reason
*/
public LoginFail(int reason)
{
_success = 0;
_reason = reason;
}
public LoginFail(int success, int reason)
{
_success = success;
_reason = reason;
}
@ -49,6 +55,7 @@ public class LoginFail implements IClientOutgoingPacket
{
OutgoingPackets.LOGIN_FAIL.writeId(packet);
packet.writeD(_success);
packet.writeD(_reason);
return true;
}

View File

@ -54,6 +54,7 @@ public final class MultiSellList implements IClientOutgoingPacket
{
OutgoingPackets.MULTI_SELL_LIST.writeId(packet);
packet.writeC(0x00);
packet.writeD(_list.getListId()); // list id
packet.writeC(0x00); // GOD Unknown
packet.writeD(1 + (_index / PAGE_SIZE)); // page started from 1
@ -61,6 +62,7 @@ public final class MultiSellList implements IClientOutgoingPacket
packet.writeD(PAGE_SIZE); // size of pages
packet.writeD(_size); // list length
packet.writeC(_list.isNewMultisell() ? 0x01 : 0x00); // new multisell window
packet.writeD(0x20); // Always 32 oO
Entry ent;
while (_size-- > 0)

View File

@ -51,7 +51,7 @@ public class SendMacroList implements IClientOutgoingPacket
packet.writeS(_macro.getName()); // Macro Name
packet.writeS(_macro.getDescr()); // Desc
packet.writeS(_macro.getAcronym()); // acronym
packet.writeC(_macro.getIcon()); // icon
packet.writeD(_macro.getIcon()); // icon
packet.writeC(_macro.getCommands().size()); // count

View File

@ -37,7 +37,7 @@ public final class TradeOtherAdd extends AbstractItemPacket
{
OutgoingPackets.TRADE_OTHER_ADD.writeId(packet);
packet.writeH(1); // item count
writeTradeItem(packet, _item);
writeItem(packet, _item);
return true;
}
}

View File

@ -37,7 +37,7 @@ public final class TradeOwnAdd extends AbstractItemPacket
{
OutgoingPackets.TRADE_OWN_ADD.writeId(packet);
packet.writeH(1); // items added count
writeTradeItem(packet, _item);
writeItem(packet, _item);
return true;
}
}

View File

@ -27,12 +27,11 @@ import com.l2jmobius.gameserver.network.OutgoingPackets;
public class TradeUpdate extends AbstractItemPacket
{
private final TradeItem _item;
private final long _newCount;
public TradeUpdate(L2PcInstance player, TradeItem item)
{
_item = item;
_newCount = player.getInventory().getItemByObjectId(item.getObjectId()).getCount() - item.getCount();
_item.setCount(player.getInventory().getItemByObjectId(item.getObjectId()).getCount() - item.getCount());
}
@Override
@ -41,8 +40,8 @@ public class TradeUpdate extends AbstractItemPacket
OutgoingPackets.TRADE_UPDATE.writeId(packet);
packet.writeH(1);
packet.writeH((_newCount > 0) && _item.getItem().isStackable() ? 3 : 2);
writeTradeItem(packet, _item);
packet.writeH((_item.getCount() > 0) && _item.getItem().isStackable() ? 3 : 2);
writeItem(packet, _item);
return true;
}
}

View File

@ -33,6 +33,7 @@ public final class TutorialShowQuestionMark implements IClientOutgoingPacket
{
OutgoingPackets.TUTORIAL_SHOW_QUESTION_MARK.writeId(packet);
packet.writeC(0x01); // Number of mark, most likely ?
packet.writeD(_markId);
return true;
}

View File

@ -45,6 +45,7 @@ public class ExOneDayReceiveRewardList implements IClientOutgoingPacket
{
OutgoingPackets.EX_ONE_DAY_RECEIVE_REWARD_LIST.writeId(packet);
packet.writeC(0x23);
packet.writeD(_player.getClassId().getId());
packet.writeD(LocalDate.now().getDayOfWeek().ordinal()); // Day of week
packet.writeD(_rewards.size());