7dbfbfd4eb
commit cd504791ebda32f7e9d79ec2ac726058e83b5bf1 Author: Joonas Rikkonen <poe.regalis@gmail.com> Date: Sun Feb 3 20:03:46 2019 +0200 Additional server logging for steam auth & desync kicks commit 6efece5e42502c1cdba89d4f4cc91398402f2b25 Author: Joonas Rikkonen <poe.regalis@gmail.com> Date: Sun Feb 3 19:46:51 2019 +0200 Fixed server failing to sync clients who join the server after a character has been removed during the round (e.g. eaten, turned into a husk). commit 482c9f87ec715119ad9ad420f25003ac92e666b9 Author: Joonas Rikkonen <poe.regalis@gmail.com> Date: Sun Feb 3 19:37:00 2019 +0200 Fixed server-side error messages when clients attempt to use a fabricator. Happened because the server tried to set the required time -text on the fabricator interface based on the controlled character instead of the character using the fabricator. commit 0a21304ee43935364de131d8aba09da8f51e6a47 Author: Joonas Rikkonen <poe.regalis@gmail.com> Date: Sun Feb 3 17:30:39 2019 +0200 Fixed AI crew occasionally going outside to fix leaks commit 78fa9382490f3b8d63c2ced9b31551fddf937703 Author: Joonas Rikkonen <poe.regalis@gmail.com> Date: Sun Feb 3 16:47:09 2019 +0200 Changed coilgun ammo box category from Machine to Equipment (no machine tab in the store menu, caused errors when trying to find a tab button style) commit 73f4374938a69bbeb9e5c0177bcd2b632fc33c8f Author: Joonas Rikkonen <poe.regalis@gmail.com> Date: Sun Feb 3 16:14:56 2019 +0200 Fixed humanhusk not spawning when a husk-infected human dies. commit 080b04d6d046a3c7659942a0a72a3f1a0aa33f4d Author: Joonas Rikkonen <poe.regalis@gmail.com> Date: Sun Feb 3 15:57:18 2019 +0200 Made coilgun ammo boxes fabricable and purchaseable, coilgun bolts can't be crafted, alien flares can't be purchased. Closes #1027 commit edd46655a853880e03c2f9a32abd92b6429a6c8e Author: Joonas Rikkonen <poe.regalis@gmail.com> Date: Sun Feb 3 15:48:39 2019 +0200 Removed auxiliorizine from the chemical shipment mission (auxiliorizine doesn't exist anymore). commit c19620e1f507b2bda398ab4b8ab8cd7d3ea5af23 Author: Joonas Rikkonen <poe.regalis@gmail.com> Date: Sun Feb 3 15:46:26 2019 +0200 Removed duplicate line from loading screen tips. Closes #1032 commit e7df25130bfc76c16a08e86d3d42b16eab7cb21d Author: ezjamsen <ezjames.fi@gmail.com> Date: Sun Feb 3 13:01:19 2019 +0200 Halved moloch speeds temporarily until a full balance of enemies is done.
121 lines
4.0 KiB
C#
121 lines
4.0 KiB
C#
using Barotrauma.Items.Components;
|
|
using FarseerPhysics;
|
|
using Microsoft.Xna.Framework;
|
|
using System;
|
|
|
|
namespace Barotrauma
|
|
{
|
|
class AIObjectiveFixLeak : AIObjective
|
|
{
|
|
private readonly Gap leak;
|
|
|
|
private bool pathUnreachable;
|
|
|
|
public Gap Leak
|
|
{
|
|
get { return leak; }
|
|
}
|
|
|
|
public AIObjectiveFixLeak(Gap leak, Character character)
|
|
: base (character, "")
|
|
{
|
|
this.leak = leak;
|
|
}
|
|
|
|
public override bool IsCompleted()
|
|
{
|
|
return leak.Open <= 0.0f || leak.Removed || pathUnreachable;
|
|
}
|
|
|
|
public override float GetPriority(AIObjectiveManager objectiveManager)
|
|
{
|
|
if (leak.Open == 0.0f) { return 0.0f; }
|
|
if (pathUnreachable) { return 0.0f; }
|
|
|
|
float leakSize = (leak.IsHorizontal ? leak.Rect.Height : leak.Rect.Width) * Math.Max(leak.Open, 0.1f);
|
|
|
|
float dist = Vector2.DistanceSquared(character.SimPosition, leak.SimPosition);
|
|
dist = Math.Max(dist / 100.0f, 1.0f);
|
|
return Math.Min(leakSize / dist, 40.0f);
|
|
}
|
|
|
|
public override bool IsDuplicate(AIObjective otherObjective)
|
|
{
|
|
AIObjectiveFixLeak fixLeak = otherObjective as AIObjectiveFixLeak;
|
|
if (fixLeak == null) return false;
|
|
return fixLeak.leak == leak;
|
|
}
|
|
|
|
protected override void Act(float deltaTime)
|
|
{
|
|
var weldingTool = character.Inventory.FindItemByTag("weldingtool");
|
|
|
|
if (weldingTool == null)
|
|
{
|
|
AddSubObjective(new AIObjectiveGetItem(character, "weldingtool", true));
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
var containedItems = weldingTool.ContainedItems;
|
|
if (containedItems == null) return;
|
|
|
|
var fuelTank = Array.Find(containedItems, i => i.HasTag("weldingfueltank") && i.Condition > 0.0f);
|
|
if (fuelTank == null)
|
|
{
|
|
AddSubObjective(new AIObjectiveContainItem(character, "weldingfueltank", weldingTool.GetComponent<ItemContainer>()));
|
|
return;
|
|
}
|
|
}
|
|
|
|
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
if (repairTool == null) { return; }
|
|
|
|
Vector2 standPosition = GetStandPosition();
|
|
|
|
Vector2 gapDiff = leak.WorldPosition - character.WorldPosition;
|
|
|
|
if (!character.AnimController.InWater && character.AnimController is HumanoidAnimController &&
|
|
Math.Abs(gapDiff.X) < 100.0f && gapDiff.Y < 0.0f && gapDiff.Y > -150.0f)
|
|
{
|
|
((HumanoidAnimController)character.AnimController).Crouching = true;
|
|
}
|
|
|
|
if (Math.Abs(gapDiff.X) > 100.0f || Math.Abs(gapDiff.Y) > 150.0f)
|
|
{
|
|
var gotoObjective = new AIObjectiveGoTo(ConvertUnits.ToSimUnits(standPosition), character);
|
|
if (!gotoObjective.IsCompleted())
|
|
{
|
|
pathUnreachable = !gotoObjective.CanBeCompleted;
|
|
if (!pathUnreachable)
|
|
{
|
|
AddSubObjective(gotoObjective);
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
|
|
AddSubObjective(new AIObjectiveOperateItem(repairTool, character, "", true, leak));
|
|
}
|
|
|
|
private Vector2 GetStandPosition()
|
|
{
|
|
Vector2 standPos = leak.Position;
|
|
var hull = leak.FlowTargetHull;
|
|
|
|
if (hull == null) return standPos;
|
|
|
|
if (leak.IsHorizontal)
|
|
{
|
|
standPos += Vector2.UnitX * Math.Sign(hull.Position.X - leak.Position.X) * leak.Rect.Width;
|
|
}
|
|
else
|
|
{
|
|
standPos += Vector2.UnitY * Math.Sign(hull.Position.Y - leak.Position.Y) * leak.Rect.Height;
|
|
}
|
|
|
|
return standPos;
|
|
}
|
|
}
|
|
}
|