mirror of
https://github.com/Rogiel/l2jserver2
synced 2025-12-10 09:22:49 +00:00
@@ -25,6 +25,7 @@ import com.l2jserver.game.net.codec.Lineage2Encrypter;
|
||||
import com.l2jserver.game.net.codec.Lineage2PacketReader;
|
||||
import com.l2jserver.game.net.codec.Lineage2PacketWriter;
|
||||
import com.l2jserver.game.net.packet.ServerPacket;
|
||||
import com.l2jserver.model.id.object.CharacterID;
|
||||
import com.l2jserver.model.world.L2Character;
|
||||
|
||||
/**
|
||||
@@ -41,7 +42,7 @@ public class Lineage2Connection {
|
||||
/**
|
||||
* The character object
|
||||
*/
|
||||
private L2Character character;
|
||||
private CharacterID characterID;
|
||||
/**
|
||||
* The Lineage 2 session
|
||||
*/
|
||||
@@ -80,22 +81,29 @@ public class Lineage2Connection {
|
||||
* @return the character
|
||||
*/
|
||||
public boolean hasCharacter() {
|
||||
return character != null;
|
||||
return characterID != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the character ID
|
||||
*/
|
||||
public CharacterID getCharacterID() {
|
||||
return characterID;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the character
|
||||
*/
|
||||
public L2Character getCharacter() {
|
||||
return character;
|
||||
return characterID.getObject();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param character
|
||||
* the character to set
|
||||
* @param characterID
|
||||
* the character ID to set
|
||||
*/
|
||||
public void setCharacter(L2Character character) {
|
||||
this.character = character;
|
||||
public void setCharacterID(CharacterID characterID) {
|
||||
this.characterID = characterID;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -16,10 +16,6 @@
|
||||
*/
|
||||
package com.l2jserver.game.net;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import com.l2jserver.util.BlowFishKeygen;
|
||||
|
||||
/**
|
||||
* Manages the cryptography key used to write/read packets. This class also
|
||||
* updates the key once data has been sent/received.
|
||||
@@ -42,16 +38,6 @@ public class Lineage2CryptographyKey implements Cloneable {
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Crates a new random key
|
||||
*
|
||||
* @return the random created key
|
||||
*/
|
||||
public static Lineage2CryptographyKey createRandomKey() {
|
||||
return new Lineage2CryptographyKey(Arrays.copyOf(
|
||||
BlowFishKeygen.getRandomKey(), 16));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the key
|
||||
*/
|
||||
|
||||
@@ -32,6 +32,7 @@ import com.l2jserver.game.net.codec.Lineage2FrameEncoder;
|
||||
import com.l2jserver.game.net.codec.Lineage2PacketReader;
|
||||
import com.l2jserver.game.net.codec.Lineage2PacketWriter;
|
||||
import com.l2jserver.game.net.handler.Lineage2PacketHandler;
|
||||
import com.l2jserver.service.network.NettyNetworkService;
|
||||
|
||||
/**
|
||||
* This class creates a new instance of {@link ChannelPipeline} and attaches all
|
||||
@@ -44,10 +45,16 @@ public class Lineage2PipelineFactory implements ChannelPipelineFactory {
|
||||
* The Google Guice {@link Injector}.
|
||||
*/
|
||||
private final Injector injector;
|
||||
/**
|
||||
* The {@link NettyNetworkService}
|
||||
*/
|
||||
private final NettyNetworkService nettyNetworkService;
|
||||
|
||||
@Inject
|
||||
public Lineage2PipelineFactory(Injector injector) {
|
||||
public Lineage2PipelineFactory(Injector injector,
|
||||
NettyNetworkService nettyNetworkService) {
|
||||
this.injector = injector;
|
||||
this.nettyNetworkService = nettyNetworkService;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -73,7 +80,7 @@ public class Lineage2PipelineFactory implements ChannelPipelineFactory {
|
||||
pipeline.addLast("logger", new LoggingHandler(InternalLogLevel.DEBUG,
|
||||
true));
|
||||
|
||||
pipeline.addLast("packet.handler", new Lineage2PacketHandler());
|
||||
pipeline.addLast("packet.handler", new Lineage2PacketHandler(nettyNetworkService));
|
||||
|
||||
return pipeline;
|
||||
}
|
||||
|
||||
@@ -72,11 +72,9 @@ public class Lineage2Decrypter extends OneToOneDecoder {
|
||||
*
|
||||
* @return the generated key
|
||||
*/
|
||||
public Lineage2CryptographyKey enable() {
|
||||
Lineage2CryptographyKey key = Lineage2CryptographyKey.createRandomKey();
|
||||
public void enable(Lineage2CryptographyKey key) {
|
||||
this.setKey(key);
|
||||
this.setEnabled(true);
|
||||
return key;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -23,6 +23,7 @@ import org.jboss.netty.channel.SimpleChannelHandler;
|
||||
|
||||
import com.l2jserver.game.net.Lineage2Connection;
|
||||
import com.l2jserver.game.net.packet.ClientPacket;
|
||||
import com.l2jserver.service.network.NettyNetworkService;
|
||||
|
||||
/**
|
||||
* This handler dispatches the {@link ClientPacket#process(Lineage2Connection)}
|
||||
@@ -32,17 +33,27 @@ import com.l2jserver.game.net.packet.ClientPacket;
|
||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||
*/
|
||||
public class Lineage2PacketHandler extends SimpleChannelHandler {
|
||||
/**
|
||||
* The {@link NettyNetworkService}
|
||||
*/
|
||||
private final NettyNetworkService nettyNetworkService;
|
||||
/**
|
||||
* The Lineage 2 connection
|
||||
*/
|
||||
private Lineage2Connection connection;
|
||||
|
||||
public Lineage2PacketHandler(NettyNetworkService nettyNetworkService) {
|
||||
this.nettyNetworkService = nettyNetworkService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e)
|
||||
throws Exception {
|
||||
connection = new Lineage2Connection(e.getChannel());
|
||||
connection.getPacketWriter().setConnection(connection);
|
||||
|
||||
nettyNetworkService.register(connection);
|
||||
|
||||
super.channelOpen(ctx, e);
|
||||
}
|
||||
|
||||
@@ -62,4 +73,10 @@ public class Lineage2PacketHandler extends SimpleChannelHandler {
|
||||
throws Exception {
|
||||
super.writeRequested(ctx, e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void channelDisconnected(ChannelHandlerContext ctx,
|
||||
ChannelStateEvent e) throws Exception {
|
||||
nettyNetworkService.unregister(connection);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,12 +39,24 @@ import com.l2jserver.util.BufferUtils;
|
||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||
*/
|
||||
public class AuthLoginPacket extends AbstractClientPacket {
|
||||
/**
|
||||
* The packet OPCODE
|
||||
*/
|
||||
public static final int OPCODE = 0x2b;
|
||||
|
||||
/**
|
||||
* The {@link CharacterDAO} implementation
|
||||
*/
|
||||
private final CharacterDAO characterDao;
|
||||
/**
|
||||
* The {@link AccountID} factory
|
||||
*/
|
||||
private final AccountIDFactory accountIdFactory;
|
||||
|
||||
// packet
|
||||
/**
|
||||
* User account name
|
||||
*/
|
||||
private String loginName;
|
||||
private int playKey1;
|
||||
private int playKey2;
|
||||
|
||||
@@ -37,6 +37,7 @@ import com.l2jserver.model.world.L2Character;
|
||||
import com.l2jserver.model.world.character.CharacterAppearance.CharacterFace;
|
||||
import com.l2jserver.model.world.character.CharacterAppearance.CharacterHairColor;
|
||||
import com.l2jserver.model.world.character.CharacterAppearance.CharacterHairStyle;
|
||||
import com.l2jserver.model.world.character.CharacterClass;
|
||||
import com.l2jserver.util.BufferUtils;
|
||||
|
||||
/**
|
||||
@@ -46,6 +47,9 @@ import com.l2jserver.util.BufferUtils;
|
||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||
*/
|
||||
public class CharacterCreatePacket extends AbstractClientPacket {
|
||||
/**
|
||||
* The packet OPCODE
|
||||
*/
|
||||
public static final int OPCODE = 0x0c;
|
||||
|
||||
/**
|
||||
@@ -55,25 +59,79 @@ public class CharacterCreatePacket extends AbstractClientPacket {
|
||||
.getLogger(CharacterCreatePacket.class);
|
||||
|
||||
// services and daos
|
||||
/**
|
||||
* The {@link CharacterDAO} implementation
|
||||
*/
|
||||
private final CharacterDAO characterDao;
|
||||
/**
|
||||
* The {@link CharacterID} factory
|
||||
*/
|
||||
private final CharacterIDFactory characterIdFactory;
|
||||
/**
|
||||
* The {@link CharacterTemplateID} factory
|
||||
*/
|
||||
private final CharacterTemplateIDFactory characterTemplateIdFactory;
|
||||
|
||||
// packet
|
||||
/**
|
||||
* The name of the new character
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* The race of the new character
|
||||
*/
|
||||
private Race race;
|
||||
/**
|
||||
* The sex of the new character
|
||||
*/
|
||||
private Sex sex;
|
||||
private int classId;
|
||||
/**
|
||||
* The class of the new character
|
||||
*/
|
||||
private CharacterClass characterClass;
|
||||
|
||||
/**
|
||||
* The new character intelligence. Note that this is ignored and the
|
||||
* template value is used.
|
||||
*/
|
||||
private int intelligence;
|
||||
/**
|
||||
* The new character intelligence. Note that this is ignored and the
|
||||
* template value is used.
|
||||
*/
|
||||
private int strength;
|
||||
/**
|
||||
* The new character strength. Note that this is ignored and the template
|
||||
* value is used.
|
||||
*/
|
||||
private int concentration;
|
||||
/**
|
||||
* The new character concentration. Note that this is ignored and the
|
||||
* template value is used.
|
||||
*/
|
||||
private int mentality;
|
||||
/**
|
||||
* The new character mentality. Note that this is ignored and the template
|
||||
* value is used.
|
||||
*/
|
||||
private int dexterity;
|
||||
/**
|
||||
* The new character dexterity. Note that this is ignored and the template
|
||||
* value is used.
|
||||
*/
|
||||
private int witness;
|
||||
|
||||
/**
|
||||
* The new character hair style
|
||||
*/
|
||||
private CharacterHairStyle hairStyle;
|
||||
/**
|
||||
* The new character hair color
|
||||
*/
|
||||
private CharacterHairColor hairColor;
|
||||
/**
|
||||
* The new character face
|
||||
*/
|
||||
private CharacterFace face;
|
||||
|
||||
@Inject
|
||||
@@ -90,7 +148,7 @@ public class CharacterCreatePacket extends AbstractClientPacket {
|
||||
name = BufferUtils.readString(buffer);
|
||||
race = Race.fromOption(buffer.readInt());
|
||||
sex = Sex.fromOption(buffer.readInt());
|
||||
classId = buffer.readInt();
|
||||
characterClass = CharacterClass.fromID(buffer.readInt());
|
||||
|
||||
intelligence = buffer.readInt();
|
||||
strength = buffer.readInt();
|
||||
@@ -106,8 +164,8 @@ public class CharacterCreatePacket extends AbstractClientPacket {
|
||||
|
||||
@Override
|
||||
public void process(final Lineage2Connection conn) {
|
||||
log.debug("Creating a new character, race={}, sex={}, classid={}",
|
||||
new Object[] { race, sex, classId });
|
||||
log.debug("Creating a new character, race={}, sex={}, class={}",
|
||||
new Object[] { race, sex, characterClass });
|
||||
if ((name.length() < 1) || (name.length() > 16)) {
|
||||
log.debug("Character name length invalid: {}. Aborting.", name);
|
||||
conn.write(new CharacterCreateFailPacket(
|
||||
@@ -135,7 +193,7 @@ public class CharacterCreatePacket extends AbstractClientPacket {
|
||||
|
||||
// create template id and lookup for the template instance
|
||||
final CharacterTemplateID templateId = characterTemplateIdFactory
|
||||
.createID(classId);
|
||||
.createID(characterClass.id);
|
||||
final CharacterTemplate template = templateId.getTemplate();
|
||||
log.debug("Creating character with template {}", template);
|
||||
|
||||
@@ -239,18 +297,18 @@ public class CharacterCreatePacket extends AbstractClientPacket {
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the classId
|
||||
* @return the character class
|
||||
*/
|
||||
public int getClassId() {
|
||||
return classId;
|
||||
public CharacterClass getCharacterClass() {
|
||||
return characterClass;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param classId
|
||||
* the classId to set
|
||||
* @param characterClass
|
||||
* the character class
|
||||
*/
|
||||
public void setClassId(int classId) {
|
||||
this.classId = classId;
|
||||
public void setClassId(CharacterClass characterClass) {
|
||||
this.characterClass = characterClass;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -29,6 +29,9 @@ import com.l2jserver.game.net.packet.server.InventoryPacket;
|
||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||
*/
|
||||
public class EnterWorld extends AbstractClientPacket {
|
||||
/**
|
||||
* The packet OPCODE
|
||||
*/
|
||||
public static final int OPCODE = 0x11;
|
||||
|
||||
@Override
|
||||
|
||||
@@ -30,6 +30,9 @@ import com.l2jserver.game.net.packet.AbstractClientPacket;
|
||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||
*/
|
||||
public class LogoutPacket extends AbstractClientPacket {
|
||||
/**
|
||||
* The packet OPCODE
|
||||
*/
|
||||
public static final int OPCODE = 0x00;
|
||||
|
||||
/**
|
||||
|
||||
@@ -22,12 +22,14 @@ import org.jboss.netty.channel.ChannelFutureListener;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.l2jserver.L2JConstants;
|
||||
import com.l2jserver.game.ProtocolVersion;
|
||||
import com.l2jserver.game.net.Lineage2Connection;
|
||||
import com.l2jserver.game.net.Lineage2CryptographyKey;
|
||||
import com.l2jserver.game.net.packet.AbstractClientPacket;
|
||||
import com.l2jserver.game.net.packet.server.KeyPacket;
|
||||
import com.l2jserver.service.blowfish.BlowfishKeygenService;
|
||||
|
||||
/**
|
||||
* In this packet the client is informing its protocol version. It is possible
|
||||
@@ -38,6 +40,9 @@ import com.l2jserver.game.net.packet.server.KeyPacket;
|
||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||
*/
|
||||
public class ProtocolVersionPacket extends AbstractClientPacket {
|
||||
/**
|
||||
* The packet OPCODE
|
||||
*/
|
||||
public static final int OPCODE = 0x0e;
|
||||
|
||||
/**
|
||||
@@ -46,9 +51,24 @@ public class ProtocolVersionPacket extends AbstractClientPacket {
|
||||
private final Logger log = LoggerFactory
|
||||
.getLogger(ProtocolVersionPacket.class);
|
||||
|
||||
// services
|
||||
/**
|
||||
* The {@link BlowfishKeygenService} implementation. Use to generate
|
||||
* cryptography keys.
|
||||
*/
|
||||
private final BlowfishKeygenService keygen;
|
||||
|
||||
// packet
|
||||
/**
|
||||
* The client version of the protocol
|
||||
*/
|
||||
private ProtocolVersion version;
|
||||
|
||||
@Inject
|
||||
public ProtocolVersionPacket(BlowfishKeygenService keygen) {
|
||||
this.keygen = keygen;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(Lineage2Connection conn, ChannelBuffer buffer) {
|
||||
this.version = ProtocolVersion.fromVersion((int) buffer
|
||||
@@ -58,7 +78,10 @@ public class ProtocolVersionPacket extends AbstractClientPacket {
|
||||
@Override
|
||||
public void process(final Lineage2Connection conn) {
|
||||
// generate a new key
|
||||
final Lineage2CryptographyKey inKey = conn.getDecrypter().enable();
|
||||
final Lineage2CryptographyKey inKey = new Lineage2CryptographyKey(
|
||||
keygen.generate());
|
||||
|
||||
conn.getDecrypter().enable(inKey);
|
||||
final Lineage2CryptographyKey outKey = inKey.clone();
|
||||
log.debug("Decrypter has been enabled");
|
||||
|
||||
|
||||
@@ -37,8 +37,14 @@ import com.l2jserver.model.world.character.CharacterClass;
|
||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||
*/
|
||||
public class RequestCharacterTemplatesPacket extends AbstractClientPacket {
|
||||
/**
|
||||
* The packet OPCODE
|
||||
*/
|
||||
public static final int OPCODE = 0x13;
|
||||
|
||||
/**
|
||||
* List of {@link CharacterClass} templates sent to the client
|
||||
*/
|
||||
public static final CharacterClass[] TEMPLATE_CLASSES = {
|
||||
CharacterClass.HUMAN_FIGHTER, CharacterClass.HUMAN_MYSTIC,
|
||||
CharacterClass.ELVEN_FIGHTER, CharacterClass.ELVEN_MYSTIC,
|
||||
@@ -53,6 +59,9 @@ public class RequestCharacterTemplatesPacket extends AbstractClientPacket {
|
||||
private static final Logger log = LoggerFactory
|
||||
.getLogger(RequestCharacterTemplatesPacket.class);
|
||||
|
||||
/**
|
||||
* The {@link CharacterTemplateID} factory
|
||||
*/
|
||||
private final CharacterTemplateIDFactory idFactory;
|
||||
|
||||
@Inject
|
||||
|
||||
@@ -34,9 +34,18 @@ import com.l2jserver.model.world.L2Character;
|
||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||
*/
|
||||
public class RequestGotoLobby extends AbstractClientPacket {
|
||||
/**
|
||||
* The packet OPCODE1
|
||||
*/
|
||||
public static final int OPCODE1 = 0xd0;
|
||||
/**
|
||||
* The packet OPCODE2
|
||||
*/
|
||||
public static final int OPCODE2 = 0x36;
|
||||
|
||||
/**
|
||||
* The {@link CharacterDAO} implementation
|
||||
*/
|
||||
private final CharacterDAO characterDao;
|
||||
|
||||
@Inject
|
||||
|
||||
@@ -22,13 +22,18 @@ import com.l2jserver.game.net.Lineage2Connection;
|
||||
import com.l2jserver.game.net.packet.AbstractClientPacket;
|
||||
|
||||
/**
|
||||
* The client is requesting a logout. Currently, when this packet is received
|
||||
* the connection is immediately closed.
|
||||
* The client is requesting a the key mappings.
|
||||
*
|
||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||
*/
|
||||
public class RequestKeyMapping extends AbstractClientPacket {
|
||||
/**
|
||||
* The packet OPCODE1
|
||||
*/
|
||||
public static final int OPCODE1 = 0xd0;
|
||||
/**
|
||||
* The packet OPCODE2
|
||||
*/
|
||||
public static final int OPCODE2 = 0x21;
|
||||
|
||||
@Override
|
||||
|
||||
@@ -23,13 +23,18 @@ import com.l2jserver.game.net.packet.AbstractClientPacket;
|
||||
import com.l2jserver.game.net.packet.server.ManorListPacket;
|
||||
|
||||
/**
|
||||
* The client is requesting a logout. Currently, when this packet is received
|
||||
* the connection is immediately closed.
|
||||
* The client is requesting the manor list.
|
||||
*
|
||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||
*/
|
||||
public class RequestManorList extends AbstractClientPacket {
|
||||
/**
|
||||
* The packet OPCODE1
|
||||
*/
|
||||
public static final int OPCODE1 = 0xd0;
|
||||
/**
|
||||
* The packet OPCODE2
|
||||
*/
|
||||
public static final int OPCODE2 = 0x01;
|
||||
|
||||
@Override
|
||||
|
||||
@@ -28,8 +28,14 @@ import com.l2jserver.game.net.packet.AbstractServerPacket;
|
||||
* @see Reason
|
||||
*/
|
||||
public class CharacterCreateFailPacket extends AbstractServerPacket {
|
||||
/**
|
||||
* The packet OPCODE
|
||||
*/
|
||||
public static final int OPCODE = 0x10;
|
||||
|
||||
/**
|
||||
* The character creation failure reason
|
||||
*/
|
||||
private Reason reason;
|
||||
|
||||
/**
|
||||
@@ -72,9 +78,12 @@ public class CharacterCreateFailPacket extends AbstractServerPacket {
|
||||
*/
|
||||
REASON_CHOOSE_ANOTHER_SVR(0x06);
|
||||
|
||||
/**
|
||||
* The error code id
|
||||
*/
|
||||
public final int id;
|
||||
|
||||
private Reason(int id) {
|
||||
Reason(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,8 +27,14 @@ import com.l2jserver.game.net.packet.AbstractServerPacket;
|
||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||
*/
|
||||
public class CharacterCreateOkPacket extends AbstractServerPacket {
|
||||
/**
|
||||
* The packet OPCODE
|
||||
*/
|
||||
public static final int OPCODE = 0x0f;
|
||||
|
||||
/**
|
||||
* The packet shared instance
|
||||
*/
|
||||
public static final CharacterCreateOkPacket INSTANCE = new CharacterCreateOkPacket();
|
||||
|
||||
public CharacterCreateOkPacket() {
|
||||
|
||||
@@ -30,11 +30,28 @@ import com.l2jserver.util.BufferUtils;
|
||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||
*/
|
||||
public class CharacterEnterWorldPacket extends AbstractServerPacket {
|
||||
/**
|
||||
* The packet OPCODE
|
||||
*/
|
||||
public static final int OPCODE = 0x0b;
|
||||
|
||||
/**
|
||||
* The entering character
|
||||
*/
|
||||
private final L2Character character;
|
||||
/**
|
||||
* The session ID
|
||||
*/
|
||||
private final int sessionId;
|
||||
|
||||
/**
|
||||
* Creates a new instance
|
||||
*
|
||||
* @param character
|
||||
* the character
|
||||
* @param sessionId
|
||||
* the session id
|
||||
*/
|
||||
public CharacterEnterWorldPacket(L2Character character, int sessionId) {
|
||||
super(OPCODE);
|
||||
this.character = character;
|
||||
|
||||
@@ -32,11 +32,23 @@ import com.l2jserver.util.BufferUtils;
|
||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||
*/
|
||||
public class CharacterSelectionListPacket extends AbstractServerPacket {
|
||||
/**
|
||||
* The packet OPCODE
|
||||
*/
|
||||
public static final int OPCODE = 0x09;
|
||||
|
||||
/**
|
||||
* The account username
|
||||
*/
|
||||
private final String loginName;
|
||||
/**
|
||||
* The session ID
|
||||
*/
|
||||
private final int sessionId;
|
||||
// private int lastCharacterId;
|
||||
/**
|
||||
* The list of character to be displayed
|
||||
*/
|
||||
private final L2Character[] characters;
|
||||
|
||||
public CharacterSelectionListPacket(String loginName, int sessionId,
|
||||
|
||||
@@ -28,8 +28,14 @@ import com.l2jserver.model.template.CharacterTemplate;
|
||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||
*/
|
||||
public class CharacterTemplatePacket extends AbstractServerPacket {
|
||||
/**
|
||||
* The packet OPCODE
|
||||
*/
|
||||
public static final int OPCODE = 0x0d;
|
||||
|
||||
/**
|
||||
* The character template list
|
||||
*/
|
||||
private CharacterTemplate[] templates;
|
||||
|
||||
public CharacterTemplatePacket(CharacterTemplate... templates) {
|
||||
|
||||
@@ -30,11 +30,17 @@ import com.l2jserver.model.world.character.CharacterInventory;
|
||||
*/
|
||||
public class InventoryPacket extends AbstractServerPacket {
|
||||
/**
|
||||
* Message OPCODE
|
||||
* The packet OPCODE
|
||||
*/
|
||||
public static final int OPCODE = 0x11;
|
||||
|
||||
/**
|
||||
* The character inventory
|
||||
*/
|
||||
private CharacterInventory inventory;
|
||||
/**
|
||||
* Whether or not to open the inventory window
|
||||
*/
|
||||
private boolean showWindow = false;
|
||||
|
||||
public InventoryPacket(CharacterInventory inventory) {
|
||||
|
||||
@@ -32,7 +32,7 @@ import com.l2jserver.game.net.packet.AbstractServerPacket;
|
||||
*/
|
||||
public class KeyPacket extends AbstractServerPacket {
|
||||
/**
|
||||
* Message OPCODE
|
||||
* The packet OPCODE
|
||||
*/
|
||||
public static final int OPCODE = 0x2e;
|
||||
|
||||
|
||||
@@ -29,10 +29,13 @@ import com.l2jserver.util.BufferUtils;
|
||||
*/
|
||||
public class ManorListPacket extends AbstractServerPacket {
|
||||
/**
|
||||
* Message OPCODE
|
||||
* The packet OPCODE
|
||||
*/
|
||||
public static final int OPCODE = 0xfe;
|
||||
|
||||
/**
|
||||
* List of manors to be sent
|
||||
*/
|
||||
private String[] manors;
|
||||
|
||||
public ManorListPacket(String... manors) {
|
||||
|
||||
@@ -29,10 +29,13 @@ import com.l2jserver.util.BufferUtils;
|
||||
*/
|
||||
public class UserInformationPacket extends AbstractServerPacket {
|
||||
/**
|
||||
* Message OPCODE
|
||||
* The packet OPCODE
|
||||
*/
|
||||
public static final int OPCODE = 0xfe;
|
||||
|
||||
/**
|
||||
* TODO
|
||||
*/
|
||||
private String[] manors;
|
||||
|
||||
public UserInformationPacket(String... manors) {
|
||||
|
||||
Reference in New Issue
Block a user