v0.2: iteminventory sync bugfix, meleeweapon "reload time", spears can be picked even if they're stuck inside a wall, tutorial bugfixes, "submarine godmode", removed round duration, drag character sync, reliable structure damage messages, job assignment bugfixes, some extra sounds
This commit is contained in:
@@ -131,7 +131,9 @@ namespace Barotrauma
|
||||
|
||||
public override void ReadNetworkData(NetworkEventType type, NetIncomingMessage message)
|
||||
{
|
||||
if (type == NetworkEventType.KillCharacter)
|
||||
Enabled = true;
|
||||
|
||||
if (type == NetworkEventType.KillCharacter)
|
||||
{
|
||||
Kill(true);
|
||||
return;
|
||||
|
||||
@@ -112,7 +112,7 @@ namespace Barotrauma
|
||||
{
|
||||
get
|
||||
{
|
||||
return SpeciesName;
|
||||
return (info != null && !string.IsNullOrWhiteSpace(info.Name)) ? info.Name : SpeciesName;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -604,20 +604,30 @@ namespace Barotrauma
|
||||
return closestCharacter;
|
||||
}
|
||||
|
||||
private void ToggleSelectedCharacter(Character selected)
|
||||
private void SelectCharacter(Character character, bool createNetworkEvent = true)
|
||||
{
|
||||
if (selectedCharacter != null)
|
||||
{
|
||||
foreach (Limb limb in selectedCharacter.AnimController.Limbs)
|
||||
{
|
||||
limb.pullJoint.Enabled = false;
|
||||
}
|
||||
selectedCharacter = null;
|
||||
}
|
||||
else
|
||||
if (character == null) return;
|
||||
|
||||
selectedCharacter = character;
|
||||
|
||||
if (createNetworkEvent)
|
||||
new NetworkEvent(NetworkEventType.SelectCharacter, ID, true, selectedCharacter.ID);
|
||||
|
||||
}
|
||||
|
||||
private void DeselectCharacter(bool createNetworkEvent = true)
|
||||
{
|
||||
if (selectedCharacter == null) return;
|
||||
|
||||
foreach (Limb limb in selectedCharacter.AnimController.Limbs)
|
||||
{
|
||||
selectedCharacter = selected;
|
||||
limb.pullJoint.Enabled = false;
|
||||
}
|
||||
|
||||
selectedCharacter = null;
|
||||
|
||||
if (createNetworkEvent)
|
||||
new NetworkEvent(NetworkEventType.SelectCharacter, ID, true, -1);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -724,7 +734,7 @@ namespace Barotrauma
|
||||
if (Vector2.Distance(selectedCharacter.SimPosition, SimPosition) > 2.0f ||
|
||||
(!selectedCharacter.isDead && selectedCharacter.Stun <= 0.0f))
|
||||
{
|
||||
ToggleSelectedCharacter(selectedCharacter);
|
||||
DeselectCharacter();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -732,12 +742,12 @@ namespace Barotrauma
|
||||
{
|
||||
if (selectedCharacter != null)
|
||||
{
|
||||
ToggleSelectedCharacter(selectedCharacter);
|
||||
DeselectCharacter();
|
||||
}
|
||||
else if (closestCharacter != null && closestCharacter.IsHumanoid &&
|
||||
(closestCharacter.isDead || closestCharacter.AnimController.StunTimer > 0.0f))
|
||||
{
|
||||
selectedCharacter = closestCharacter;
|
||||
SelectCharacter(closestCharacter);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1081,6 +1091,11 @@ namespace Barotrauma
|
||||
message.Write((int)data);
|
||||
return;
|
||||
}
|
||||
else if (type== NetworkEventType.SelectCharacter)
|
||||
{
|
||||
message.Write((int)data);
|
||||
return;
|
||||
}
|
||||
else if (type == NetworkEventType.KillCharacter)
|
||||
{
|
||||
return;
|
||||
@@ -1177,6 +1192,20 @@ namespace Barotrauma
|
||||
|
||||
return;
|
||||
}
|
||||
else if (type == NetworkEventType.SelectCharacter)
|
||||
{
|
||||
int characterId = message.ReadInt32();
|
||||
if (characterId==-1)
|
||||
{
|
||||
DeselectCharacter(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
Character character = FindEntityByID(characterId) as Character;
|
||||
if (character != null) SelectCharacter(character, false);
|
||||
}
|
||||
return;
|
||||
}
|
||||
else if (type == NetworkEventType.KillCharacter)
|
||||
{
|
||||
Kill(true);
|
||||
|
||||
@@ -18,6 +18,8 @@ namespace Barotrauma
|
||||
private TargetType targetTypes;
|
||||
private string[] targetNames;
|
||||
|
||||
private List<RelatedItem> requiredItems;
|
||||
|
||||
public string[] propertyNames;
|
||||
private object[] propertyEffects;
|
||||
|
||||
@@ -62,10 +64,11 @@ namespace Barotrauma
|
||||
|
||||
protected StatusEffect(XElement element)
|
||||
{
|
||||
requiredItems = new List<RelatedItem>();
|
||||
|
||||
IEnumerable<XAttribute> attributes = element.Attributes();
|
||||
List<XAttribute> propertyAttributes = new List<XAttribute>();
|
||||
|
||||
|
||||
|
||||
foreach (XAttribute attribute in attributes)
|
||||
{
|
||||
switch (attribute.Name.ToString())
|
||||
@@ -140,6 +143,14 @@ namespace Barotrauma
|
||||
case "explosion":
|
||||
explosion = new Explosion(subElement);
|
||||
break;
|
||||
case "requireditem":
|
||||
case "requireditems":
|
||||
RelatedItem newRequiredItem = RelatedItem.Load(subElement);
|
||||
|
||||
if (newRequiredItem == null) continue;
|
||||
|
||||
requiredItems.Add(newRequiredItem);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -156,19 +167,42 @@ namespace Barotrauma
|
||||
// if (this.type == type) Apply(deltaTime, character, item);
|
||||
//}
|
||||
|
||||
private bool HasRequiredItems(Entity entity)
|
||||
{
|
||||
if (requiredItems == null) return true;
|
||||
foreach (RelatedItem requiredItem in requiredItems)
|
||||
{
|
||||
Item item = entity as Item;
|
||||
if (item != null)
|
||||
{
|
||||
if (!requiredItem.CheckRequirements(null, item)) return false;
|
||||
}
|
||||
Character character = entity as Character;
|
||||
if (character != null)
|
||||
{
|
||||
if (!requiredItem.CheckRequirements(character, null)) return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public virtual void Apply(ActionType type, float deltaTime, Entity entity, IPropertyObject target)
|
||||
{
|
||||
if (this.type != type || !HasRequiredItems(entity)) return;
|
||||
|
||||
if (targetNames != null && !targetNames.Contains(target.Name)) return;
|
||||
|
||||
List<IPropertyObject> targets = new List<IPropertyObject>();
|
||||
targets.Add(target);
|
||||
|
||||
if (this.type == type) Apply(deltaTime, entity, targets);
|
||||
Apply(deltaTime, entity, targets);
|
||||
}
|
||||
|
||||
public virtual void Apply(ActionType type, float deltaTime, Entity entity, List<IPropertyObject> targets)
|
||||
{
|
||||
if (this.type == type) Apply(deltaTime, entity, targets);
|
||||
if (this.type != type || !HasRequiredItems(entity)) return;
|
||||
|
||||
Apply(deltaTime, entity, targets);
|
||||
}
|
||||
|
||||
protected virtual void Apply(float deltaTime, Entity entity, List<IPropertyObject> targets)
|
||||
|
||||
Reference in New Issue
Block a user