mirror of
https://github.com/collinsmith/riiablo.git
synced 2025-02-21 20:18:14 +07:00
Added D2S serialization to Connection packet
This commit is contained in:
parent
cf180ee496
commit
65e58e8bbe
@ -2,10 +2,11 @@
|
||||
|
||||
package com.riiablo.net.packet.d2gs;
|
||||
|
||||
import java.nio.*;
|
||||
import java.lang.*;
|
||||
import java.util.*;
|
||||
import com.google.flatbuffers.*;
|
||||
import com.google.flatbuffers.FlatBufferBuilder;
|
||||
import com.google.flatbuffers.Table;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class Connection extends Table {
|
||||
@ -30,7 +31,11 @@ public final class Connection extends Table {
|
||||
public int cofAlphasLength() { int o = __offset(12); return o != 0 ? __vector_len(o) : 0; }
|
||||
public ByteBuffer cofAlphasAsByteBuffer() { return __vector_as_bytebuffer(12, 4); }
|
||||
public ByteBuffer cofAlphasInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 12, 4); }
|
||||
public int entityId() { int o = __offset(14); return o != 0 ? bb.getInt(o + bb_pos) : 0; }
|
||||
public int d2s(int j) { int o = __offset(14); return o != 0 ? bb.get(__vector(o) + j * 1) & 0xFF : 0; }
|
||||
public int d2sLength() { int o = __offset(14); return o != 0 ? __vector_len(o) : 0; }
|
||||
public ByteBuffer d2sAsByteBuffer() { return __vector_as_bytebuffer(14, 1); }
|
||||
public ByteBuffer d2sInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 14, 1); }
|
||||
public int entityId() { int o = __offset(16); return o != 0 ? bb.getInt(o + bb_pos) : 0; }
|
||||
|
||||
public static int createConnection(FlatBufferBuilder builder,
|
||||
int charClass,
|
||||
@ -38,9 +43,11 @@ public final class Connection extends Table {
|
||||
int cofComponentsOffset,
|
||||
int cofTransformsOffset,
|
||||
int cofAlphasOffset,
|
||||
int d2sOffset,
|
||||
int entityId) {
|
||||
builder.startObject(6);
|
||||
builder.startObject(7);
|
||||
Connection.addEntityId(builder, entityId);
|
||||
Connection.addD2s(builder, d2sOffset);
|
||||
Connection.addCofAlphas(builder, cofAlphasOffset);
|
||||
Connection.addCofTransforms(builder, cofTransformsOffset);
|
||||
Connection.addCofComponents(builder, cofComponentsOffset);
|
||||
@ -49,7 +56,7 @@ public final class Connection extends Table {
|
||||
return Connection.endConnection(builder);
|
||||
}
|
||||
|
||||
public static void startConnection(FlatBufferBuilder builder) { builder.startObject(6); }
|
||||
public static void startConnection(FlatBufferBuilder builder) { builder.startObject(7); }
|
||||
public static void addCharClass(FlatBufferBuilder builder, int charClass) { builder.addByte(0, (byte)charClass, (byte)0); }
|
||||
public static void addCharName(FlatBufferBuilder builder, int charNameOffset) { builder.addOffset(1, charNameOffset, 0); }
|
||||
public static void addCofComponents(FlatBufferBuilder builder, int cofComponentsOffset) { builder.addOffset(2, cofComponentsOffset, 0); }
|
||||
@ -61,7 +68,10 @@ public final class Connection extends Table {
|
||||
public static void addCofAlphas(FlatBufferBuilder builder, int cofAlphasOffset) { builder.addOffset(4, cofAlphasOffset, 0); }
|
||||
public static int createCofAlphasVector(FlatBufferBuilder builder, float[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) builder.addFloat(data[i]); return builder.endVector(); }
|
||||
public static void startCofAlphasVector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); }
|
||||
public static void addEntityId(FlatBufferBuilder builder, int entityId) { builder.addInt(5, entityId, 0); }
|
||||
public static void addD2s(FlatBufferBuilder builder, int d2sOffset) { builder.addOffset(5, d2sOffset, 0); }
|
||||
public static int createD2sVector(FlatBufferBuilder builder, byte[] data) { builder.startVector(1, data.length, 1); for (int i = data.length - 1; i >= 0; i--) builder.addByte(data[i]); return builder.endVector(); }
|
||||
public static void startD2sVector(FlatBufferBuilder builder, int numElems) { builder.startVector(1, numElems, 1); }
|
||||
public static void addEntityId(FlatBufferBuilder builder, int entityId) { builder.addInt(6, entityId, 0); }
|
||||
public static int endConnection(FlatBufferBuilder builder) {
|
||||
int o = builder.endObject();
|
||||
return o;
|
||||
|
@ -125,6 +125,15 @@ public class D2S {
|
||||
return new D2S(file, header);
|
||||
}
|
||||
|
||||
public static D2S loadFromBuffer(ByteBuffer buffer) {
|
||||
buffer.order(ByteOrder.LITTLE_ENDIAN);
|
||||
Header header = Header.obtain(buffer);
|
||||
if (DEBUG_HEADER) Gdx.app.debug(TAG, header.toString());
|
||||
if (header.magicNumber != MAGIC_NUMBER) throw new GdxRuntimeException("Magic number doesn't match " + String.format("0x%08X", MAGIC_NUMBER) + ": " + String.format("0x%08X", header.magicNumber));
|
||||
if (header.version != VERSION_110) throw new GdxRuntimeException("Unsupported D2S version: " + header.version + " -- Only supports " + header.getVersionString(VERSION_110));
|
||||
return new D2S(null, header);
|
||||
}
|
||||
|
||||
public static class Header {
|
||||
static final int SIZE = 0x14F;
|
||||
|
||||
|
@ -11,6 +11,7 @@ import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.math.Vector2;
|
||||
import com.badlogic.gdx.net.Socket;
|
||||
import com.riiablo.Riiablo;
|
||||
import com.riiablo.codec.D2S;
|
||||
import com.riiablo.engine.server.component.Angle;
|
||||
import com.riiablo.engine.server.component.CofAlphas;
|
||||
import com.riiablo.engine.server.component.CofComponents;
|
||||
@ -74,8 +75,10 @@ public class ClientNetworkSyncronizer extends IntervalSystem {
|
||||
init = true;
|
||||
|
||||
try {
|
||||
D2S d2s = Riiablo.charData.getD2S();
|
||||
|
||||
FlatBufferBuilder builder = new FlatBufferBuilder();
|
||||
int charNameOffset = builder.createString(Riiablo.charData.getD2S().header.name);
|
||||
int charNameOffset = builder.createString(d2s.header.name);
|
||||
|
||||
int entityId = Riiablo.game.player;
|
||||
int[] component = mCofComponents.get(entityId).component;
|
||||
@ -89,12 +92,15 @@ public class ClientNetworkSyncronizer extends IntervalSystem {
|
||||
byte[] transforms = mCofTransforms.get(entityId).transform;
|
||||
int transformsOffset = Connection.createCofTransformsVector(builder, transforms);
|
||||
|
||||
int d2sOffset = Connection.createD2sVector(builder, d2s.file.readBytes());
|
||||
|
||||
Connection.startConnection(builder);
|
||||
Connection.addCharClass(builder, Riiablo.charData.getD2S().header.charClass);
|
||||
Connection.addCharClass(builder, d2s.header.charClass);
|
||||
Connection.addCharName(builder, charNameOffset);
|
||||
Connection.addCofComponents(builder, componentsOffset);
|
||||
Connection.addCofAlphas(builder, alphasOffset);
|
||||
Connection.addCofTransforms(builder, transformsOffset);
|
||||
Connection.addD2s(builder, d2sOffset);
|
||||
int connectionOffset = Connection.endConnection(builder);
|
||||
int offset = D2GS.createD2GS(builder, D2GSData.Connection, connectionOffset);
|
||||
D2GS.finishSizePrefixedD2GSBuffer(builder, offset);
|
||||
|
@ -7,6 +7,7 @@ table Connection {
|
||||
cofComponents:[uint8];
|
||||
cofTransforms:[uint8];
|
||||
cofAlphas:[float32];
|
||||
d2s:[ubyte];
|
||||
|
||||
// response
|
||||
entityId:int32;
|
||||
|
@ -28,6 +28,7 @@ import com.riiablo.Riiablo;
|
||||
import com.riiablo.audio.ServerAudio;
|
||||
import com.riiablo.codec.Animation;
|
||||
import com.riiablo.codec.D2;
|
||||
import com.riiablo.codec.D2S;
|
||||
import com.riiablo.codec.StringTBLs;
|
||||
import com.riiablo.engine.Engine;
|
||||
import com.riiablo.engine.EntityFactory;
|
||||
@ -44,7 +45,6 @@ import com.riiablo.engine.server.ServerNetworkIdManager;
|
||||
import com.riiablo.engine.server.VelocityAdder;
|
||||
import com.riiablo.engine.server.WarpInteractor;
|
||||
import com.riiablo.engine.server.component.Networked;
|
||||
import com.riiablo.engine.server.component.Player;
|
||||
import com.riiablo.map.Act1MapBuilder;
|
||||
import com.riiablo.map.DS1;
|
||||
import com.riiablo.map.DS1Loader;
|
||||
@ -392,10 +392,15 @@ public class D2GS extends ApplicationAdapter {
|
||||
connection.cofTransformsAsByteBuffer().get(cofTransforms);
|
||||
Gdx.app.log(TAG, " " + DebugUtils.toByteArray(cofTransforms));
|
||||
|
||||
ByteBuffer d2sData = connection.d2sAsByteBuffer();
|
||||
D2S d2s = D2S.loadFromBuffer(d2sData);
|
||||
CharData charData = new CharData().setD2S(d2s);
|
||||
Gdx.app.log(TAG, " " + d2s);
|
||||
|
||||
Vector2 origin = map.find(Map.ID.TOWN_ENTRY_1);
|
||||
if (origin == null) origin = map.find(Map.ID.TOWN_ENTRY_2);
|
||||
if (origin == null) origin = map.find(Map.ID.TP_LOCATION);
|
||||
int entityId = factory.createPlayer(charName, charClass, origin.x, origin.y);
|
||||
int entityId = factory.createPlayer(charData, origin);
|
||||
player.put(packet.id, entityId);
|
||||
Gdx.app.log(TAG, " entityId=" + entityId);
|
||||
|
||||
@ -410,7 +415,6 @@ public class D2GS extends ApplicationAdapter {
|
||||
|
||||
Synchronize(packet.id, entityId);
|
||||
|
||||
CharData charData = world.getMapper(Player.class).get(entityId).data;
|
||||
BroadcastConnect(packet.id, connection, charData, entityId);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user