mirror of
https://github.com/Rogiel/l2jserver2
synced 2025-12-08 08:23:11 +00:00
Fixed cryptography issue preventing connection to the game
Signed-off-by: Rogiel <rogiel@rogiel.com>
This commit is contained in:
@@ -18,7 +18,7 @@ package com.l2jserver;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Module;
|
||||
import com.l2jserver.db.dao.DAOModuleMySQL5;
|
||||
import com.l2jserver.db.dao.MySQL5DAOModule;
|
||||
import com.l2jserver.model.id.factory.IDFactoryModule;
|
||||
import com.l2jserver.service.ServiceModule;
|
||||
|
||||
@@ -32,6 +32,6 @@ public class GameServerModule extends AbstractModule {
|
||||
protected void configure() {
|
||||
install(new ServiceModule());
|
||||
install(new IDFactoryModule());
|
||||
install(new DAOModuleMySQL5());
|
||||
install(new MySQL5DAOModule());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
*/
|
||||
package com.l2jserver.game.net;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* Manages the cryptography key used to write/read packets. This class also
|
||||
* updates the key once data has been sent/received.
|
||||
@@ -77,6 +79,6 @@ public class Lineage2CryptographyKey {
|
||||
}
|
||||
|
||||
public Lineage2CryptographyKey copy() {
|
||||
return new Lineage2CryptographyKey(key);
|
||||
return new Lineage2CryptographyKey(Arrays.copyOf(key, key.length));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,12 +54,12 @@ public class Lineage2Encrypter extends OneToOneEncoder {
|
||||
|
||||
final int offset = buffer.readerIndex() + 2; // skip header
|
||||
final int size = buffer.readableBytes() - 2;
|
||||
int temp = 0;
|
||||
int temp = 0, temp2 = 0;
|
||||
synchronized (key) {
|
||||
for (int i = 0; i < size; i++) {
|
||||
int temp2 = buffer.getByte(offset + i) & 0xFF;
|
||||
buffer.setByte(offset + i, (byte) (temp2 ^ key.get(i) ^ temp));
|
||||
temp = temp2;
|
||||
temp2 = buffer.getByte(offset + i) & 0xFF;
|
||||
temp = temp2 ^ key.get(i) ^ temp;
|
||||
buffer.setByte(offset + i, (byte) temp);
|
||||
}
|
||||
key.update(size);
|
||||
}
|
||||
|
||||
@@ -61,10 +61,10 @@ public class Lineage2PacketWriter extends OneToOneEncoder {
|
||||
final ChannelBuffer buffer = ChannelBuffers.dynamicBuffer(
|
||||
ByteOrder.LITTLE_ENDIAN, 10);
|
||||
final ServerPacket packet = (ServerPacket) msg;
|
||||
buffer.writeShort(0x0000);
|
||||
buffer.writeShort(0);
|
||||
buffer.writeByte(packet.getOpcode()); // packet opcode
|
||||
packet.write(null, buffer);
|
||||
|
||||
packet.write(connection, buffer);
|
||||
|
||||
log.debug("Writing message {}", ChannelBuffers.hexDump(buffer));
|
||||
|
||||
return buffer;
|
||||
|
||||
@@ -25,7 +25,7 @@ import com.l2jserver.db.dao.CharacterDAO;
|
||||
import com.l2jserver.game.net.Lineage2Connection;
|
||||
import com.l2jserver.game.net.Lineage2Session;
|
||||
import com.l2jserver.game.net.packet.AbstractClientPacket;
|
||||
import com.l2jserver.game.net.packet.server.CharacterEnterWorldPacket;
|
||||
import com.l2jserver.game.net.packet.server.CharacterSelectionListPacket;
|
||||
import com.l2jserver.model.id.AccountID;
|
||||
import com.l2jserver.model.id.factory.AccountIDFactory;
|
||||
import com.l2jserver.model.world.L2Character;
|
||||
@@ -86,10 +86,10 @@ public class AuthLoginPacket extends AbstractClientPacket {
|
||||
loginKey1, loginKey2));
|
||||
|
||||
final List<L2Character> chars = characterDao.selectByAccount(accountId);
|
||||
// conn.write(CharacterSelectionListPacket.fromL2Session(
|
||||
// conn.getSession(), chars.toArray(new L2Character[0])));
|
||||
conn.setCharacterID(chars.get(0).getID());
|
||||
conn.write(new CharacterEnterWorldPacket(chars.get(0), playKey1));
|
||||
conn.write(CharacterSelectionListPacket.fromL2Session(
|
||||
conn.getSession(), chars.get(0)));
|
||||
// conn.setCharacterID(chars.get(0).getID());
|
||||
// conn.write(new CharacterEnterWorldPacket(chars.get(0), playKey1));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -48,7 +48,6 @@ import com.l2jserver.game.net.Lineage2Session;
|
||||
import com.l2jserver.game.net.packet.AbstractServerPacket;
|
||||
import com.l2jserver.model.world.Item;
|
||||
import com.l2jserver.model.world.L2Character;
|
||||
import com.l2jserver.model.world.actor.ActorExperience;
|
||||
import com.l2jserver.model.world.character.CharacterInventory.InventoryPaperdoll;
|
||||
import com.l2jserver.util.BufferUtils;
|
||||
|
||||
@@ -100,7 +99,7 @@ public class CharacterSelectionListPacket extends AbstractServerPacket {
|
||||
// Can prevent players from creating new characters (if 0);
|
||||
// if 1 the client will ask if chars may be created
|
||||
// (RequestCharacterTemplatesPacket) Response: (CharacterTemplatePacket)
|
||||
buffer.writeInt(0x07); // max chars
|
||||
buffer.writeInt(7); // max chars
|
||||
buffer.writeByte(0x00);
|
||||
|
||||
// int i = 0;
|
||||
@@ -116,7 +115,7 @@ public class CharacterSelectionListPacket extends AbstractServerPacket {
|
||||
// }
|
||||
buffer.writeInt(0x00); // ??
|
||||
|
||||
buffer.writeInt(0x01); // sex
|
||||
buffer.writeInt(character.getSex().option); // sex
|
||||
buffer.writeInt(character.getRace().id); // race
|
||||
|
||||
// if (character.getClassId() == character.getBaseClassId())
|
||||
@@ -125,7 +124,7 @@ public class CharacterSelectionListPacket extends AbstractServerPacket {
|
||||
// else
|
||||
// buffer.writeInt(character.getBaseClassId());
|
||||
|
||||
buffer.writeInt(0x01); // active ??
|
||||
buffer.writeInt(1); // active ??
|
||||
|
||||
buffer.writeInt(-71338); // x
|
||||
buffer.writeInt(258271); // y
|
||||
@@ -134,9 +133,9 @@ public class CharacterSelectionListPacket extends AbstractServerPacket {
|
||||
buffer.writeDouble(20); // hp cur
|
||||
buffer.writeDouble(20); // mp cur
|
||||
|
||||
buffer.writeInt(0x00); // sp
|
||||
buffer.writeLong(ActorExperience.LEVEL_1.experience); // exp
|
||||
buffer.writeInt(ActorExperience.LEVEL_1.level); // level
|
||||
buffer.writeInt(320); // sp
|
||||
buffer.writeLong(4640); // exp
|
||||
buffer.writeInt(5); // level
|
||||
|
||||
buffer.writeInt(0x00); // karma
|
||||
buffer.writeInt(0x00); // pk
|
||||
@@ -181,10 +180,10 @@ public class CharacterSelectionListPacket extends AbstractServerPacket {
|
||||
|
||||
// hair style
|
||||
// buffer.writeInt(character.getAppearance().getHairStyle().option);
|
||||
buffer.writeInt(0x02);
|
||||
buffer.writeInt(0x00);
|
||||
// hair color
|
||||
// buffer.writeInt(character.getAppearance().getHairColor().option);
|
||||
buffer.writeInt(0x03);
|
||||
buffer.writeInt(0x00);
|
||||
// face
|
||||
// buffer.writeInt(character.getAppearance().getFace().option);
|
||||
buffer.writeInt(0x00);
|
||||
@@ -194,7 +193,7 @@ public class CharacterSelectionListPacket extends AbstractServerPacket {
|
||||
|
||||
buffer.writeInt(0x0); // seconds left before delete
|
||||
buffer.writeInt(character.getCharacterClass().id); // class
|
||||
buffer.writeInt(0x01); // c3 auto-select char
|
||||
buffer.writeInt(1); // c3 auto-select char
|
||||
|
||||
buffer.writeByte(0x00); // enchant effect
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver.model.world.actor;
|
||||
package com.l2jserver.model.world.actor.event;
|
||||
|
||||
import com.l2jserver.model.world.capability.Actor;
|
||||
import com.l2jserver.service.game.world.event.WorldEvent;
|
||||
@@ -14,7 +14,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver.model.world.actor;
|
||||
package com.l2jserver.model.world.actor.event;
|
||||
|
||||
import com.l2jserver.model.world.capability.Actor;
|
||||
import com.l2jserver.service.game.world.event.WorldListener;
|
||||
@@ -19,9 +19,9 @@ package com.l2jserver.model.world.capability;
|
||||
import com.l2jserver.model.id.object.ActorID;
|
||||
import com.l2jserver.model.world.AbstractObject;
|
||||
import com.l2jserver.model.world.actor.ActorEffects;
|
||||
import com.l2jserver.model.world.actor.ActorEvent;
|
||||
import com.l2jserver.model.world.actor.ActorListener;
|
||||
import com.l2jserver.model.world.actor.ActorSkillContainer;
|
||||
import com.l2jserver.model.world.actor.event.ActorEvent;
|
||||
import com.l2jserver.model.world.actor.event.ActorListener;
|
||||
|
||||
/**
|
||||
* Defines an {@link AbstractObject} that defines an Actor (NPC, player, pet,
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
package com.l2jserver.model.world.player.event;
|
||||
|
||||
import com.l2jserver.model.world.Player;
|
||||
import com.l2jserver.model.world.actor.ActorEvent;
|
||||
import com.l2jserver.model.world.actor.event.ActorEvent;
|
||||
|
||||
/**
|
||||
* Base event for {@link Player} objects
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
*/
|
||||
package com.l2jserver.model.world.player.event;
|
||||
|
||||
import com.l2jserver.model.world.actor.ActorEvent;
|
||||
import com.l2jserver.model.world.actor.ActorListener;
|
||||
import com.l2jserver.model.world.actor.event.ActorEvent;
|
||||
import com.l2jserver.model.world.actor.event.ActorListener;
|
||||
import com.l2jserver.service.game.world.event.WorldEvent;
|
||||
import com.l2jserver.service.game.world.event.WorldListener;
|
||||
|
||||
|
||||
@@ -24,5 +24,5 @@ import com.l2jserver.service.Service;
|
||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||
*/
|
||||
public interface GMService extends Service {
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -58,6 +58,6 @@ public class BufferUtils {
|
||||
buffer.writeChar(str.charAt(i));
|
||||
}
|
||||
}
|
||||
buffer.writeChar('\000');
|
||||
buffer.writeShort(0);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user