mirror of
https://github.com/collinsmith/riiablo.git
synced 2025-02-21 20:18:14 +07:00
Added support to D2GS for a majority of ItemManager functions
Added support to D2GS for a majority of ItemManager functions GroundToCursor remains unimplemented in this commit due to entity creation
This commit is contained in:
parent
8f437ab037
commit
edb6de8df9
@ -8,8 +8,6 @@ import com.riiablo.save.ItemController;
|
||||
|
||||
import net.mostlyoriginal.api.system.core.PassiveSystem;
|
||||
|
||||
// sends item events
|
||||
// receives item events and applies changes
|
||||
public class ClientItemManager extends PassiveSystem implements ItemController {
|
||||
private static final String TAG = "ClientItemManager";
|
||||
|
||||
|
@ -11,15 +11,14 @@ import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.math.Vector2;
|
||||
import com.badlogic.gdx.net.Socket;
|
||||
import com.badlogic.gdx.physics.box2d.Body;
|
||||
import com.riiablo.save.CharData;
|
||||
import com.riiablo.Riiablo;
|
||||
import com.riiablo.save.D2S;
|
||||
import com.riiablo.codec.excel.MonStats;
|
||||
import com.riiablo.codec.util.BitStream;
|
||||
import com.riiablo.engine.Dirty;
|
||||
import com.riiablo.engine.Engine;
|
||||
import com.riiablo.engine.EntityFactory;
|
||||
import com.riiablo.engine.server.CofManager;
|
||||
import com.riiablo.engine.server.ItemManager;
|
||||
import com.riiablo.engine.server.component.Angle;
|
||||
import com.riiablo.engine.server.component.Box2DBody;
|
||||
import com.riiablo.engine.server.component.Class;
|
||||
@ -34,23 +33,36 @@ import com.riiablo.engine.server.component.Velocity;
|
||||
import com.riiablo.item.Item;
|
||||
import com.riiablo.map.Map;
|
||||
import com.riiablo.net.packet.d2gs.AngleP;
|
||||
import com.riiablo.net.packet.d2gs.BeltToCursor;
|
||||
import com.riiablo.net.packet.d2gs.BodyToCursor;
|
||||
import com.riiablo.net.packet.d2gs.ClassP;
|
||||
import com.riiablo.net.packet.d2gs.CofAlphasP;
|
||||
import com.riiablo.net.packet.d2gs.CofComponentsP;
|
||||
import com.riiablo.net.packet.d2gs.CofTransformsP;
|
||||
import com.riiablo.net.packet.d2gs.ComponentP;
|
||||
import com.riiablo.net.packet.d2gs.Connection;
|
||||
import com.riiablo.net.packet.d2gs.CursorToBelt;
|
||||
import com.riiablo.net.packet.d2gs.CursorToBody;
|
||||
import com.riiablo.net.packet.d2gs.CursorToGround;
|
||||
import com.riiablo.net.packet.d2gs.CursorToStore;
|
||||
import com.riiablo.net.packet.d2gs.D2GS;
|
||||
import com.riiablo.net.packet.d2gs.D2GSData;
|
||||
import com.riiablo.net.packet.d2gs.DS1ObjectWrapperP;
|
||||
import com.riiablo.net.packet.d2gs.Disconnect;
|
||||
import com.riiablo.net.packet.d2gs.EntitySync;
|
||||
import com.riiablo.net.packet.d2gs.GroundToCursor;
|
||||
import com.riiablo.net.packet.d2gs.ItemP;
|
||||
import com.riiablo.net.packet.d2gs.MonsterP;
|
||||
import com.riiablo.net.packet.d2gs.PlayerP;
|
||||
import com.riiablo.net.packet.d2gs.PositionP;
|
||||
import com.riiablo.net.packet.d2gs.StoreToCursor;
|
||||
import com.riiablo.net.packet.d2gs.SwapBeltItem;
|
||||
import com.riiablo.net.packet.d2gs.SwapBodyItem;
|
||||
import com.riiablo.net.packet.d2gs.SwapStoreItem;
|
||||
import com.riiablo.net.packet.d2gs.VelocityP;
|
||||
import com.riiablo.net.packet.d2gs.WarpP;
|
||||
import com.riiablo.save.CharData;
|
||||
import com.riiablo.save.D2S;
|
||||
import com.riiablo.util.ArrayUtils;
|
||||
import com.riiablo.util.BufferUtils;
|
||||
import com.riiablo.util.DebugUtils;
|
||||
@ -84,6 +96,7 @@ public class ClientNetworkReceiver extends IntervalSystem {
|
||||
|
||||
protected CofManager cofs;
|
||||
protected NetworkIdManager syncIds;
|
||||
protected ItemManager items;
|
||||
|
||||
@Wire(name="client.socket")
|
||||
protected Socket socket;
|
||||
@ -140,6 +153,39 @@ public class ClientNetworkReceiver extends IntervalSystem {
|
||||
case D2GSData.EntitySync:
|
||||
Synchronize(packet);
|
||||
break;
|
||||
case D2GSData.GroundToCursor:
|
||||
GroundToCursor(packet);
|
||||
break;
|
||||
case D2GSData.CursorToGround:
|
||||
CursorToGround(packet);
|
||||
break;
|
||||
case D2GSData.StoreToCursor:
|
||||
StoreToCursor(packet);
|
||||
break;
|
||||
case D2GSData.CursorToStore:
|
||||
CursorToStore(packet);
|
||||
break;
|
||||
case D2GSData.SwapStoreItem:
|
||||
SwapStoreItem(packet);
|
||||
break;
|
||||
case D2GSData.BodyToCursor:
|
||||
BodyToCursor(packet);
|
||||
break;
|
||||
case D2GSData.CursorToBody:
|
||||
CursorToBody(packet);
|
||||
break;
|
||||
case D2GSData.SwapBodyItem:
|
||||
SwapBodyItem(packet);
|
||||
break;
|
||||
case D2GSData.BeltToCursor:
|
||||
BeltToCursor(packet);
|
||||
break;
|
||||
case D2GSData.CursorToBelt:
|
||||
CursorToBelt(packet);
|
||||
break;
|
||||
case D2GSData.SwapBeltItem:
|
||||
SwapBeltItem(packet);
|
||||
break;
|
||||
default:
|
||||
Gdx.app.error(TAG, "Unknown packet type: " + packet.dataType());
|
||||
}
|
||||
@ -364,4 +410,59 @@ public class ClientNetworkReceiver extends IntervalSystem {
|
||||
cofs.updateTransform(entityId, tFlags);
|
||||
cofs.updateAlpha(entityId, aFlags);
|
||||
}
|
||||
|
||||
private void GroundToCursor(D2GS packet) {
|
||||
GroundToCursor groundToCursor = (GroundToCursor) packet.data(new GroundToCursor());
|
||||
items.groundToCursor(Riiablo.game.player, groundToCursor.itemId());
|
||||
}
|
||||
|
||||
private void CursorToGround(D2GS packet) {
|
||||
CursorToGround cursorToGround = (CursorToGround) packet.data(new CursorToGround());
|
||||
items.cursorToGround(Riiablo.game.player);
|
||||
}
|
||||
|
||||
private void StoreToCursor(D2GS packet) {
|
||||
StoreToCursor storeToCursor = (StoreToCursor) packet.data(new StoreToCursor());
|
||||
items.storeToCursor(Riiablo.game.player, storeToCursor.itemId());
|
||||
}
|
||||
|
||||
private void CursorToStore(D2GS packet) {
|
||||
CursorToStore cursorToStore = (CursorToStore) packet.data(new CursorToStore());
|
||||
items.cursorToStore(Riiablo.game.player, cursorToStore.storeLoc(), cursorToStore.x(), cursorToStore.y());
|
||||
}
|
||||
|
||||
private void SwapStoreItem(D2GS packet) {
|
||||
SwapStoreItem swapStoreItem = (SwapStoreItem) packet.data(new SwapStoreItem());
|
||||
items.swapStoreItem(Riiablo.game.player, swapStoreItem.itemId(), swapStoreItem.storeLoc(), swapStoreItem.x(), swapStoreItem.y());
|
||||
}
|
||||
|
||||
private void BodyToCursor(D2GS packet) {
|
||||
BodyToCursor bodyToCursor = (BodyToCursor) packet.data(new BodyToCursor());
|
||||
items.bodyToCursor(Riiablo.game.player, bodyToCursor.bodyLoc(), bodyToCursor.merc());
|
||||
}
|
||||
|
||||
private void CursorToBody(D2GS packet) {
|
||||
CursorToBody cursorToBody = (CursorToBody) packet.data(new CursorToBody());
|
||||
items.cursorToBody(Riiablo.game.player, cursorToBody.bodyLoc(), cursorToBody.merc());
|
||||
}
|
||||
|
||||
private void SwapBodyItem(D2GS packet) {
|
||||
SwapBodyItem swapBodyItem = (SwapBodyItem) packet.data(new SwapBodyItem());
|
||||
items.swapBodyItem(Riiablo.game.player, swapBodyItem.bodyLoc(), swapBodyItem.merc());
|
||||
}
|
||||
|
||||
private void BeltToCursor(D2GS packet) {
|
||||
BeltToCursor beltToCursor = (BeltToCursor) packet.data(new BeltToCursor());
|
||||
items.beltToCursor(Riiablo.game.player, beltToCursor.itemId());
|
||||
}
|
||||
|
||||
private void CursorToBelt(D2GS packet) {
|
||||
CursorToBelt cursorToBelt = (CursorToBelt) packet.data(new CursorToBelt());
|
||||
items.cursorToBelt(Riiablo.game.player, cursorToBelt.x(), cursorToBelt.y());
|
||||
}
|
||||
|
||||
private void SwapBeltItem(D2GS packet) {
|
||||
SwapBeltItem swapBeltItem = (SwapBeltItem) packet.data(new SwapBeltItem());
|
||||
items.swapBeltItem(Riiablo.game.player, swapBeltItem.itemId());
|
||||
}
|
||||
}
|
||||
|
@ -16,7 +16,6 @@ import com.riiablo.net.packet.d2gs.CursorToGround;
|
||||
import com.riiablo.net.packet.d2gs.CursorToStore;
|
||||
import com.riiablo.net.packet.d2gs.D2GS;
|
||||
import com.riiablo.net.packet.d2gs.D2GSData;
|
||||
import com.riiablo.net.packet.d2gs.GroundToCursor;
|
||||
import com.riiablo.net.packet.d2gs.StoreToCursor;
|
||||
import com.riiablo.net.packet.d2gs.SwapBeltItem;
|
||||
import com.riiablo.net.packet.d2gs.SwapBodyItem;
|
||||
@ -51,9 +50,10 @@ public class NetworkedClientItemManager extends ClientItemManager {
|
||||
|
||||
@Override
|
||||
public void groundToCursor(Item item) {
|
||||
FlatBufferBuilder builder = obtainBuilder();
|
||||
int dataOffset = GroundToCursor.createGroundToCursor(builder, 0);
|
||||
wrapAndSend(builder, D2GSData.GroundToCursor, dataOffset);
|
||||
// TODO: implement
|
||||
// FlatBufferBuilder builder = obtainBuilder();
|
||||
// int dataOffset = GroundToCursor.createGroundToCursor(builder, 0);
|
||||
// wrapAndSend(builder, D2GSData.GroundToCursor, dataOffset);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -55,10 +55,20 @@ import com.riiablo.map.DT1Loader;
|
||||
import com.riiablo.map.Map;
|
||||
import com.riiablo.map.MapManager;
|
||||
import com.riiablo.mpq.MPQFileHandleResolver;
|
||||
import com.riiablo.net.packet.d2gs.BeltToCursor;
|
||||
import com.riiablo.net.packet.d2gs.BodyToCursor;
|
||||
import com.riiablo.net.packet.d2gs.Connection;
|
||||
import com.riiablo.net.packet.d2gs.CursorToBelt;
|
||||
import com.riiablo.net.packet.d2gs.CursorToBody;
|
||||
import com.riiablo.net.packet.d2gs.CursorToGround;
|
||||
import com.riiablo.net.packet.d2gs.CursorToStore;
|
||||
import com.riiablo.net.packet.d2gs.D2GSData;
|
||||
import com.riiablo.net.packet.d2gs.Disconnect;
|
||||
import com.riiablo.net.packet.d2gs.DropItem;
|
||||
import com.riiablo.net.packet.d2gs.StoreToCursor;
|
||||
import com.riiablo.net.packet.d2gs.SwapBeltItem;
|
||||
import com.riiablo.net.packet.d2gs.SwapBodyItem;
|
||||
import com.riiablo.net.packet.d2gs.SwapStoreItem;
|
||||
import com.riiablo.save.CharData;
|
||||
import com.riiablo.util.DebugUtils;
|
||||
|
||||
@ -168,6 +178,7 @@ public class D2GS extends ApplicationAdapter {
|
||||
Map map;
|
||||
|
||||
EntityFactory factory;
|
||||
ItemManager itemManager;
|
||||
MapManager mapManager;
|
||||
NetworkSynchronizer sync;
|
||||
|
||||
@ -232,6 +243,7 @@ public class D2GS extends ApplicationAdapter {
|
||||
map.finishLoading();
|
||||
|
||||
factory = new ServerEntityFactory();
|
||||
itemManager = new ItemManager();
|
||||
mapManager = new MapManager();
|
||||
sync = new NetworkSynchronizer();
|
||||
WorldConfigurationBuilder builder = new WorldConfigurationBuilder()
|
||||
@ -239,7 +251,7 @@ public class D2GS extends ApplicationAdapter {
|
||||
.with(new ServerNetworkIdManager())
|
||||
.with(new SerializationManager())
|
||||
.with(mapManager)
|
||||
.with(new ItemManager())
|
||||
.with(itemManager)
|
||||
.with(new CofManager())
|
||||
.with(new ObjectInitializer())
|
||||
.with(new ObjectInteractor(), new WarpInteractor(), new ItemInteractor())
|
||||
@ -543,37 +555,104 @@ public class D2GS extends ApplicationAdapter {
|
||||
|
||||
}
|
||||
|
||||
private int getPlayerEntityId(Packet packet) {
|
||||
int entityId = player.get(packet.id, Engine.INVALID_ENTITY);
|
||||
assert entityId != Engine.INVALID_ENTITY;
|
||||
return entityId;
|
||||
}
|
||||
|
||||
private void GroundToCursor(Packet packet) {
|
||||
// TODO: implement
|
||||
}
|
||||
|
||||
private void CursorToGround(Packet packet) {
|
||||
int entityId = getPlayerEntityId(packet);
|
||||
CursorToGround cursorToGround = (CursorToGround) packet.data.data(new CursorToGround());
|
||||
itemManager.cursorToGround(entityId);
|
||||
|
||||
packet.id = (1 << packet.id);
|
||||
outPackets.offer(packet);
|
||||
}
|
||||
|
||||
private void StoreToCursor(Packet packet) {
|
||||
int entityId = getPlayerEntityId(packet);
|
||||
StoreToCursor storeToCursor = (StoreToCursor) packet.data.data(new StoreToCursor());
|
||||
itemManager.storeToCursor(entityId, storeToCursor.itemId());
|
||||
|
||||
packet.id = (1 << packet.id);
|
||||
outPackets.offer(packet);
|
||||
}
|
||||
|
||||
private void CursorToStore(Packet packet) {
|
||||
int entityId = getPlayerEntityId(packet);
|
||||
CursorToStore cursorToStore = (CursorToStore) packet.data.data(new CursorToStore());
|
||||
itemManager.cursorToStore(entityId, cursorToStore.storeLoc(), cursorToStore.x(), cursorToStore.y());
|
||||
|
||||
packet.id = (1 << packet.id);
|
||||
outPackets.offer(packet);
|
||||
}
|
||||
|
||||
private void SwapStoreItem(Packet packet) {
|
||||
int entityId = getPlayerEntityId(packet);
|
||||
SwapStoreItem swapStoreItem = (SwapStoreItem) packet.data.data(new SwapStoreItem());
|
||||
itemManager.swapStoreItem(entityId, swapStoreItem.itemId(), swapStoreItem.storeLoc(), swapStoreItem.x(), swapStoreItem.y());
|
||||
|
||||
packet.id = (1 << packet.id);
|
||||
outPackets.offer(packet);
|
||||
}
|
||||
|
||||
private void BodyToCursor(Packet packet) {
|
||||
int entityId = getPlayerEntityId(packet);
|
||||
BodyToCursor bodyToCursor = (BodyToCursor) packet.data.data(new BodyToCursor());
|
||||
itemManager.bodyToCursor(entityId, bodyToCursor.bodyLoc(), bodyToCursor.merc());
|
||||
|
||||
packet.id = (1 << packet.id);
|
||||
outPackets.offer(packet);
|
||||
}
|
||||
|
||||
private void CursorToBody(Packet packet) {
|
||||
int entityId = getPlayerEntityId(packet);
|
||||
CursorToBody cursorToBody = (CursorToBody) packet.data.data(new CursorToBody());
|
||||
itemManager.cursorToBody(entityId, cursorToBody.bodyLoc(), cursorToBody.merc());
|
||||
|
||||
packet.id = (1 << packet.id);
|
||||
outPackets.offer(packet);
|
||||
}
|
||||
|
||||
private void SwapBodyItem(Packet packet) {
|
||||
int entityId = getPlayerEntityId(packet);
|
||||
SwapBodyItem swapBodyItem = (SwapBodyItem) packet.data.data(new SwapBodyItem());
|
||||
itemManager.swapBodyItem(entityId, swapBodyItem.bodyLoc(), swapBodyItem.merc());
|
||||
|
||||
packet.id = (1 << packet.id);
|
||||
outPackets.offer(packet);
|
||||
}
|
||||
|
||||
private void BeltToCursor(Packet packet) {
|
||||
int entityId = getPlayerEntityId(packet);
|
||||
BeltToCursor beltToCursor = (BeltToCursor) packet.data.data(new BeltToCursor());
|
||||
itemManager.beltToCursor(entityId, beltToCursor.itemId());
|
||||
|
||||
packet.id = (1 << packet.id);
|
||||
outPackets.offer(packet);
|
||||
}
|
||||
|
||||
private void CursorToBelt(Packet packet) {
|
||||
int entityId = getPlayerEntityId(packet);
|
||||
CursorToBelt cursorToBelt = (CursorToBelt) packet.data.data(new CursorToBelt());
|
||||
itemManager.cursorToBelt(entityId, cursorToBelt.x(), cursorToBelt.y());
|
||||
|
||||
packet.id = (1 << packet.id);
|
||||
outPackets.offer(packet);
|
||||
}
|
||||
|
||||
private void SwapBeltItem(Packet packet) {
|
||||
int entityId = getPlayerEntityId(packet);
|
||||
SwapBeltItem swapBeltItem = (SwapBeltItem) packet.data.data(new SwapBeltItem());
|
||||
itemManager.swapBeltItem(entityId, swapBeltItem.itemId());
|
||||
|
||||
packet.id = (1 << packet.id);
|
||||
outPackets.offer(packet);
|
||||
}
|
||||
|
||||
static String generateClientName() {
|
||||
|
Loading…
Reference in New Issue
Block a user