mirror of
https://github.com/collinsmith/riiablo.git
synced 2025-07-05 15:58:38 +07:00
Added support for serializing and synchronizing dropped items
Added support for serializing and synchronizing dropped items Picking up items not supported yet -- requires API change Added packet types for DropItem and PickupItem Added ItemP component table and ItemSerializer Added EntityFactory#createItem(Item,float,float) Removed CharStats.BlockFactor from Stat.toblock item property -- should be applied on view stats and base character properties list
This commit is contained in:
@ -45,6 +45,9 @@ 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.engine.server.component.Position;
|
||||
import com.riiablo.item.Item;
|
||||
import com.riiablo.map.Act1MapBuilder;
|
||||
import com.riiablo.map.DS1;
|
||||
import com.riiablo.map.DS1Loader;
|
||||
@ -56,6 +59,7 @@ import com.riiablo.mpq.MPQFileHandleResolver;
|
||||
import com.riiablo.net.packet.d2gs.Connection;
|
||||
import com.riiablo.net.packet.d2gs.D2GSData;
|
||||
import com.riiablo.net.packet.d2gs.Disconnect;
|
||||
import com.riiablo.net.packet.d2gs.DropItem;
|
||||
import com.riiablo.util.DebugUtils;
|
||||
|
||||
import net.mostlyoriginal.api.event.common.EventSystem;
|
||||
@ -369,6 +373,12 @@ public class D2GS extends ApplicationAdapter {
|
||||
case D2GSData.EntitySync:
|
||||
Synchronize(packet);
|
||||
break;
|
||||
case D2GSData.DropItem:
|
||||
DropItem(packet);
|
||||
break;
|
||||
case D2GSData.PickupItem:
|
||||
PickupItem(packet);
|
||||
break;
|
||||
default:
|
||||
Gdx.app.error(TAG, "Unknown packet type: " + packet.data.dataType());
|
||||
}
|
||||
@ -394,9 +404,9 @@ public class D2GS extends ApplicationAdapter {
|
||||
Gdx.app.log(TAG, " " + DebugUtils.toByteArray(cofTransforms));
|
||||
|
||||
ByteBuffer d2sData = connection.d2sAsByteBuffer();
|
||||
D2S d2s = D2S.loadFromBuffer(d2sData);
|
||||
D2S d2s = D2S.loadFromBuffer(d2sData, true);
|
||||
CharData charData = new CharData().setD2S(d2s);
|
||||
Gdx.app.log(TAG, " " + d2s);
|
||||
Gdx.app.log(TAG, " " + d2s.header);
|
||||
|
||||
Vector2 origin = map.find(Map.ID.TOWN_ENTRY_1);
|
||||
if (origin == null) origin = map.find(Map.ID.TOWN_ENTRY_2);
|
||||
@ -480,6 +490,33 @@ public class D2GS extends ApplicationAdapter {
|
||||
sync.sync(entityId, packet.data);
|
||||
}
|
||||
|
||||
private void DropItem(Packet packet) {
|
||||
int entityId = player.get(packet.id, Engine.INVALID_ENTITY);
|
||||
assert entityId != Engine.INVALID_ENTITY;
|
||||
|
||||
DropItem dropItem = (DropItem) packet.data.data(new DropItem());
|
||||
int itemId = dropItem.itemId();
|
||||
|
||||
Item item = null;
|
||||
Player player = world.getMapper(Player.class).get(entityId);
|
||||
CharData charData = player.data;
|
||||
D2S d2s = charData.getD2S();
|
||||
for (Item i : d2s.items.items) {
|
||||
if ((int) i.id == itemId) {
|
||||
item = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
assert item != null;
|
||||
Vector2 position = world.getMapper(Position.class).get(entityId).position;
|
||||
factory.createItem(item, position);
|
||||
}
|
||||
|
||||
private void PickupItem(Packet packet) {
|
||||
|
||||
}
|
||||
|
||||
static String generateClientName() {
|
||||
return String.format("Client-%08X", MathUtils.random(1, Integer.MAX_VALUE - 1));
|
||||
}
|
||||
|
Reference in New Issue
Block a user