Wall damage syncing, inventory serialization methods
This commit is contained in:
@@ -68,7 +68,7 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Inventory
|
class Inventory : IServerSerializable, IClientSerializable
|
||||||
{
|
{
|
||||||
public static InventorySlot draggingSlot;
|
public static InventorySlot draggingSlot;
|
||||||
public static Item draggingItem;
|
public static Item draggingItem;
|
||||||
@@ -77,8 +77,6 @@ namespace Barotrauma
|
|||||||
|
|
||||||
public readonly Entity Owner;
|
public readonly Entity Owner;
|
||||||
|
|
||||||
protected float lastUpdate;
|
|
||||||
|
|
||||||
private int slotsPerRow;
|
private int slotsPerRow;
|
||||||
|
|
||||||
public int SlotsPerRow
|
public int SlotsPerRow
|
||||||
@@ -526,5 +524,94 @@ namespace Barotrauma
|
|||||||
item.Sprite.Draw(spriteBatch, new Vector2(rect.X + rect.Width / 2, rect.Y + rect.Height / 2), item.Color);
|
item.Sprite.Draw(spriteBatch, new Vector2(rect.X + rect.Width / 2, rect.Y + rect.Height / 2), item.Color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ClientWrite(Lidgren.Network.NetBuffer msg, object[] extraData = null)
|
||||||
|
{
|
||||||
|
ServerWrite(msg, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ServerRead(Lidgren.Network.NetIncomingMessage msg, Barotrauma.Networking.Client c)
|
||||||
|
{
|
||||||
|
List<Item> prevItems = new List<Item>(Items);
|
||||||
|
ushort[] newItemIDs = new ushort[capacity];
|
||||||
|
|
||||||
|
for (int i = 0; i < capacity; i++)
|
||||||
|
{
|
||||||
|
newItemIDs[i] = msg.ReadUInt16();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c == null || c.Character == null || !c.Character.CanAccessInventory(this))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < capacity; i++)
|
||||||
|
{
|
||||||
|
if (newItemIDs[i] == 0)
|
||||||
|
{
|
||||||
|
if (Items[i] != null) Items[i].Drop();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var item = Entity.FindEntityByID(newItemIDs[i]) as Item;
|
||||||
|
if (item == null) continue;
|
||||||
|
|
||||||
|
if (GameMain.Server != null)
|
||||||
|
{
|
||||||
|
if (!c.Character.CanAccessItem(item)) continue;
|
||||||
|
}
|
||||||
|
TryPutItem(item, i, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (Item item in Items)
|
||||||
|
{
|
||||||
|
if (item == null) continue;
|
||||||
|
if (!prevItems.Contains(item))
|
||||||
|
{
|
||||||
|
GameServer.Log(c.Character + " placed " + item.Name + " in " + Owner, Color.Orange);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach (Item item in prevItems)
|
||||||
|
{
|
||||||
|
if (item == null) continue;
|
||||||
|
if (!Items.Contains(item))
|
||||||
|
{
|
||||||
|
GameServer.Log(c.Character + " removed " + item.Name + " from " + Owner.ToString(), Color.Orange);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ServerWrite(Lidgren.Network.NetBuffer msg, Barotrauma.Networking.Client c, object[] extraData = null)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < capacity; i++)
|
||||||
|
{
|
||||||
|
msg.Write((ushort)(Items[i] == null ? 0 : Items[i].ID));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ClientRead(Lidgren.Network.NetIncomingMessage msg, float sendingTime)
|
||||||
|
{
|
||||||
|
ushort[] newItemIDs = new ushort[capacity];
|
||||||
|
|
||||||
|
for (int i = 0; i < capacity; i++)
|
||||||
|
{
|
||||||
|
newItemIDs[i] = msg.ReadUInt16();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < capacity; i++)
|
||||||
|
{
|
||||||
|
if (newItemIDs[i] == 0)
|
||||||
|
{
|
||||||
|
if (Items[i] != null) Items[i].Drop();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var item = Entity.FindEntityByID(newItemIDs[i]) as Item;
|
||||||
|
if (item == null) continue;
|
||||||
|
|
||||||
|
TryPutItem(item, i, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -733,10 +733,10 @@ namespace Barotrauma
|
|||||||
|
|
||||||
if (!MathUtils.IsValid(damage)) return;
|
if (!MathUtils.IsValid(damage)) return;
|
||||||
|
|
||||||
//if (damage != sections[sectionIndex].damage && Math.Abs(sections[sectionIndex].lastSentDamage - damage) > 5.0f)
|
if (GameMain.Server != null && damage != sections[sectionIndex].damage)
|
||||||
//{
|
{
|
||||||
// sections[sectionIndex].lastSentDamage = damage;
|
GameMain.Server.CreateEntityEvent(this);
|
||||||
//}
|
}
|
||||||
|
|
||||||
if (damage < prefab.MaxHealth*0.5f)
|
if (damage < prefab.MaxHealth*0.5f)
|
||||||
{
|
{
|
||||||
@@ -852,8 +852,6 @@ namespace Barotrauma
|
|||||||
for (int i = 0; i < sections.Length; i++)
|
for (int i = 0; i < sections.Length; i++)
|
||||||
{
|
{
|
||||||
msg.WriteRangedSingle(sections[i].damage / Health, 0.0f, 1.0f, 8);
|
msg.WriteRangedSingle(sections[i].damage / Health, 0.0f, 1.0f, 8);
|
||||||
|
|
||||||
//sections[i].lastSentDamage = sections[i].damage;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user