Syncinc AICharacter inventories (a husk controlled by the host), clients don't try to read physicsbodyposition messages if the item doesn't have a body, control command works even if the character has spaces in the name

This commit is contained in:
Regalis
2016-07-25 18:42:20 +03:00
parent 2490c0eb9d
commit 6c79a8c568
3 changed files with 13 additions and 3 deletions

View File

@@ -128,6 +128,8 @@ namespace Barotrauma
message.Write(AnimController.RefLimb.SimPosition.Y);
return true;
case NetworkEventType.InventoryUpdate:
return base.FillNetworkData(type, message, data);
default:
#if DEBUG
DebugConsole.ThrowError("AICharacter network event had a wrong type ("+type+")");
@@ -146,6 +148,9 @@ namespace Barotrauma
case NetworkEventType.KillCharacter:
Kill(CauseOfDeath.Damage, true);
return;
case NetworkEventType.InventoryUpdate:
base.ReadNetworkData(type, message, sendingTime, out data);
return;
case NetworkEventType.ImportantEntityUpdate:
Vector2 limbPos = AnimController.RefLimb.SimPosition;

View File

@@ -313,8 +313,8 @@ namespace Barotrauma
case "controlcharacter":
case "control":
if (commands.Length < 2) break;
commands[1] = commands[1].ToLowerInvariant();
Character.Controlled = Character.CharacterList.Find(c => !c.IsNetworkPlayer && c.Name.ToLowerInvariant() == commands[1]);
string name = string.Join(" ", commands.Skip(1)).ToLowerInvariant();
Character.Controlled = Character.CharacterList.Find(c => !c.IsNetworkPlayer && c.Name.ToLowerInvariant() == name);
break;
case "godmode":
if (Submarine.MainSub == null) return;

View File

@@ -1632,7 +1632,12 @@ namespace Barotrauma
if (body != null) body.FillNetworkData(message);
break;
case NetworkEventType.PhysicsBodyPosition:
System.Diagnostics.Debug.Assert(body != null, "Tried to send a PhysicsBodyPosition message for an item that has no physics body");
#if DEBUG
System.Diagnostics.Debug.Assert(body != null, "Tried to send a PhysicsBodyPosition message for an item that has no physics body ("+Name+")");
#else
if (body == null) return;
#endif
body.FillNetworkData(message);
break;
case NetworkEventType.ItemFixed: