v0.12.0.2

This commit is contained in:
Joonas Rikkonen
2021-02-10 17:08:21 +02:00
parent 5c80a59bdd
commit 694cdfee7b
353 changed files with 12897 additions and 5028 deletions
@@ -209,11 +209,11 @@ namespace Barotrauma.Networking
case ChatMessageType.Order:
if (receiver != null && !receiver.IsDead)
{
var receiverItem = receiver.Inventory?.Items.FirstOrDefault(i => i?.GetComponent<WifiComponent>() != null);
var receiverItem = receiver.Inventory?.AllItems.FirstOrDefault(i => i.GetComponent<WifiComponent>() != null);
//character doesn't have a radio -> don't send
if (receiverItem == null || !receiver.HasEquippedItem(receiverItem)) { return spokenMsg; }
var senderItem = sender.Inventory?.Items.FirstOrDefault(i => i?.GetComponent<WifiComponent>() != null);
var senderItem = sender.Inventory?.AllItems.FirstOrDefault(i => i.GetComponent<WifiComponent>() != null);
if (senderItem == null || !sender.HasEquippedItem(senderItem)) { return spokenMsg; }
var receiverRadio = receiverItem.GetComponent<WifiComponent>();
@@ -253,7 +253,7 @@ namespace Barotrauma.Networking
{
radio = null;
if (sender?.Inventory == null || sender.Removed) { return false; }
radio = sender.Inventory.Items.FirstOrDefault(i => i?.GetComponent<WifiComponent>() != null)?.GetComponent<WifiComponent>();
radio = sender.Inventory.AllItems.FirstOrDefault(i => i.GetComponent<WifiComponent>() != null)?.GetComponent<WifiComponent>();
if (radio?.Item == null) { return false; }
return sender.HasEquippedItem(radio.Item) && radio.CanTransmit();
}
@@ -20,7 +20,9 @@ namespace Barotrauma.Networking
public string PreferredJob;
public Character.TeamType TeamID;
public CharacterTeamType TeamID;
public CharacterTeamType PreferredTeam;
private Character character;
public Character Character
@@ -27,6 +27,7 @@ namespace Barotrauma
public readonly float Condition;
public bool SpawnIfInventoryFull = true;
public bool IgnoreLimbSlots = false;
private readonly Action<Item> onSpawned;
@@ -64,13 +65,27 @@ namespace Barotrauma
Item spawnedItem;
if (Inventory?.Owner != null)
{
if (!SpawnIfInventoryFull && !Inventory.Items.Any(it => it == null))
if (!SpawnIfInventoryFull && !Inventory.CanBePut(Prefab))
{
return null;
}
spawnedItem = new Item(Prefab, Vector2.Zero, null);
spawnedItem = new Item(Prefab, Vector2.Zero, null)
{
Condition = Condition
};
if (!Inventory.Owner.Removed && !Inventory.TryPutItem(spawnedItem, null, spawnedItem.AllowedSlots))
{
if (IgnoreLimbSlots)
{
for (int i = 0; i < Inventory.Capacity; i++)
{
if (Inventory.GetItemAt(i) == null)
{
Inventory.ForceToSlot(spawnedItem, i);
break;
}
}
}
spawnedItem.SetTransform(FarseerPhysics.ConvertUnits.ToSimUnits(Inventory.Owner?.WorldPosition ?? Vector2.Zero), spawnedItem.body?.Rotation ?? 0.0f, findNewHull: false);
}
}
@@ -244,7 +259,7 @@ namespace Barotrauma
spawnQueue.Enqueue(new ItemSpawnInfo(itemPrefab, position, sub, onSpawned, condition));
}
public void AddToSpawnQueue(ItemPrefab itemPrefab, Inventory inventory, float? condition = null, Action<Item> onSpawned = null, bool spawnIfInventoryFull = true)
public void AddToSpawnQueue(ItemPrefab itemPrefab, Inventory inventory, float? condition = null, Action<Item> onSpawned = null, bool spawnIfInventoryFull = true, bool ignoreLimbSlots = false)
{
if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient) { return; }
if (itemPrefab == null)
@@ -254,7 +269,11 @@ namespace Barotrauma
GameAnalyticsManager.AddErrorEventOnce("EntitySpawner.AddToSpawnQueue3:ItemPrefabNull", GameAnalyticsSDK.Net.EGAErrorSeverity.Error, errorMsg);
return;
}
spawnQueue.Enqueue(new ItemSpawnInfo(itemPrefab, inventory, onSpawned, condition) { SpawnIfInventoryFull = spawnIfInventoryFull });
spawnQueue.Enqueue(new ItemSpawnInfo(itemPrefab, inventory, onSpawned, condition)
{
SpawnIfInventoryFull = spawnIfInventoryFull,
IgnoreLimbSlots = ignoreLimbSlots
});
}
public void AddToSpawnQueue(string speciesName, Vector2 worldPosition, Action<Character> onSpawn = null)
@@ -308,7 +327,7 @@ namespace Barotrauma
if (removeQueue.Contains(item) || item.Removed) { return; }
removeQueue.Enqueue(item);
var containedItems = item.OwnInventory?.Items;
var containedItems = item.OwnInventory?.AllItems;
if (containedItems == null) { return; }
foreach (Item containedItem in containedItems)
{
@@ -335,6 +354,11 @@ namespace Barotrauma
return spawnQueue.Count(s => predicate(s));
}
public bool IsInRemoveQueue(Entity entity)
{
return removeQueue.Contains(entity);
}
public void Update()
{
if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient) { return; }
@@ -36,7 +36,7 @@ namespace Barotrauma
[Serialize(0.1f, true)]
public float StructureDamageKarmaDecrease { get; set; }
[Serialize(30.0f, true)]
[Serialize(15.0f, true)]
public float MaxStructureDamageKarmaDecreasePerSecond { get; set; }
[Serialize(0.03f, true)]
@@ -44,7 +44,8 @@ namespace Barotrauma.Networking
continue;
}
if (msg.LengthBytes + tempBuffer.LengthBytes + tempEventBuffer.LengthBytes > MaxEventBufferLength)
if (eventCount > 0 &&
msg.LengthBytes + tempBuffer.LengthBytes + tempEventBuffer.LengthBytes > MaxEventBufferLength)
{
//no more room in this packet
break;
@@ -226,13 +226,13 @@ namespace Barotrauma.Networking
public bool CanUseRadio(Character sender)
{
if (sender == null) return false;
if (sender == null) { return false; }
var radio = sender.Inventory.Items.FirstOrDefault(i => i != null && i.GetComponent<WifiComponent>() != null);
if (radio == null || !sender.HasEquippedItem(radio)) return false;
var radio = sender.Inventory.AllItems.FirstOrDefault(i => i.GetComponent<WifiComponent>() != null);
if (radio == null || !sender.HasEquippedItem(radio)) { return false; }
var radioComponent = radio.GetComponent<WifiComponent>();
if (radioComponent == null) return false;
if (radioComponent == null) { return false; }
return radioComponent.HasRequiredContainedItems(sender, addMessage: false);
}
@@ -79,7 +79,7 @@ namespace Barotrauma.Networking
}
foreach (WifiComponent wifiComponent in wifiComponents)
{
wifiComponent.TeamID = Character.TeamType.FriendlyNPC;
wifiComponent.TeamID = CharacterTeamType.FriendlyNPC;
}
ResetShuttle();
@@ -222,7 +222,7 @@ namespace Barotrauma.Networking
foreach (Item item in Item.ItemList)
{
if (item.Submarine != RespawnShuttle) continue;
if (item.Submarine != RespawnShuttle) { continue; }
//remove respawn items that have been left in the shuttle
if (respawnItems.Contains(item))
@@ -239,6 +239,19 @@ namespace Barotrauma.Networking
{
powerContainer.Charge = powerContainer.Capacity;
}
var door = item.GetComponent<Door>();
if (door != null) { door.Stuck = 0.0f; }
var steering = item.GetComponent<Steering>();
if (steering != null)
{
steering.MaintainPos = true;
steering.AutoPilot = true;
#if SERVER
steering.UnsentChanges = true;
#endif
}
}
foreach (Structure wall in Structure.WallList)
@@ -269,9 +282,8 @@ namespace Barotrauma.Networking
Spawner.AddToRemoveQueue(c);
if (c.Inventory != null)
{
foreach (Item item in c.Inventory.Items)
foreach (Item item in c.Inventory.AllItems)
{
if (item == null) continue;
Spawner.AddToRemoveQueue(item);
}
}