Helios packet changes.
This commit is contained in:
parent
ec431e9d3f
commit
aaa51582d7
@ -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:
|
||||
|
@ -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());
|
||||
|
@ -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()
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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());
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -75,6 +75,8 @@ public class ListPartyWaiting implements IClientOutgoingPacket
|
||||
packet.writeS(member.getName());
|
||||
}
|
||||
}
|
||||
packet.writeD(0);
|
||||
packet.writeD(0);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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());
|
||||
|
Loading…
Reference in New Issue
Block a user