Fixed exceptions if a character is removed when an AI character is attacking it

This commit is contained in:
Regalis
2017-04-17 17:59:22 +03:00
parent b24f0877a1
commit 7df4bff249
4 changed files with 17 additions and 16 deletions

View File

@@ -196,23 +196,23 @@ namespace Barotrauma
private void UpdateAttack(float deltaTime)
{
if (selectedAiTarget == null)
if (selectedAiTarget == null || selectedAiTarget.Entity == null || selectedAiTarget.Entity.Removed)
{
state = AiState.None;
return;
}
selectedTargetMemory.Priority -= deltaTime;
Vector2 attackSimPosition = Character.Submarine==null ? ConvertUnits.ToSimUnits(selectedAiTarget.WorldPosition) : selectedAiTarget.SimPosition;
Vector2 attackSimPosition = Character.Submarine == null ? ConvertUnits.ToSimUnits(selectedAiTarget.WorldPosition) : selectedAiTarget.SimPosition;
if (wallAttackPos != Vector2.Zero && targetEntity != null)
{
attackSimPosition = wallAttackPos;
if (selectedAiTarget.Entity != null && Character.Submarine==null && selectedAiTarget.Entity.Submarine != null) attackSimPosition += ConvertUnits.ToSimUnits(selectedAiTarget.Entity.Submarine.Position);
if (selectedAiTarget.Entity != null && Character.Submarine == null && selectedAiTarget.Entity.Submarine != null) attackSimPosition += ConvertUnits.ToSimUnits(selectedAiTarget.Entity.Submarine.Position);
}
if (coolDownTimer>0.0f)
if (coolDownTimer > 0.0f)
{
UpdateCoolDown(attackSimPosition, deltaTime);
return;

View File

@@ -1,11 +1,5 @@
using Lidgren.Network;
using Microsoft.Xna.Framework;
using Barotrauma.Networking;
using Microsoft.Xna.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FarseerPhysics;
namespace Barotrauma
{

View File

@@ -1728,6 +1728,8 @@ namespace Barotrauma
public AttackResult AddDamage(Vector2 worldPosition, DamageType damageType, float amount, float bleedingAmount, float stun, bool playSound, float attackForce = 0.0f)
{
if (Removed) return new AttackResult();
SetStun(stun);
Limb closestLimb = null;

View File

@@ -16,9 +16,13 @@ namespace Barotrauma
private ushort id;
protected AITarget aiTarget;
//protected float soundRange;
//protected float sightRange;
public bool Removed
{
get;
private set;
}
public ushort ID
{
get
@@ -125,6 +129,7 @@ namespace Barotrauma
public virtual void Remove()
{
dictionary.Remove(ID);
Removed = true;
}
public static void DumpIds(int count)