Release 1.9.7.0 - Summer Update 2025

This commit is contained in:
Regalis11
2025-06-17 16:38:11 +03:00
parent 22227f13e5
commit ea5a2bc693
297 changed files with 7344 additions and 2421 deletions
@@ -1,4 +1,4 @@
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework;
using System.Collections.Generic;
using System.Linq;
@@ -30,6 +30,9 @@ namespace Barotrauma
[Serialize(120.0f, IsPropertySaveable.Yes, description: "How long it takes for the NPC to \"cool down\" (stop attacking).")]
public float CoolDown { get; set; }
[Serialize(true, IsPropertySaveable.Yes, description: "The event actions reset when a GoTo action makes the event jump to a different point. Should the NPC revert back to a normal state when the event resets?")]
public bool AbandonOnReset { get; set; }
private bool isFinished = false;
@@ -81,7 +84,7 @@ namespace Barotrauma
public override void Reset()
{
if (affectedNpcs != null)
if (affectedNpcs != null && AbandonOnReset)
{
foreach (var npc in affectedNpcs)
{
@@ -1,4 +1,4 @@
namespace Barotrauma
namespace Barotrauma
{
/// <summary>
/// Makes a specific character invulnerable to damage and unable to die.
@@ -36,13 +36,21 @@ namespace Barotrauma
{
if (target != null && target is Character character)
{
if (UpdateAfflictions)
if (Enabled)
{
character.CharacterHealth.Unkillable = Enabled;
if (UpdateAfflictions)
{
character.CharacterHealth.Unkillable = true;
}
else
{
character.GodMode = true;
}
}
else
{
character.GodMode = Enabled;
character.CharacterHealth.Unkillable = false;
character.GodMode = false;
}
}
}
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -14,7 +14,10 @@ namespace Barotrauma
[Serialize(true, IsPropertySaveable.Yes, description: "Should the NPC start or stop waiting?")]
public bool Wait { get; set; }
[Serialize(true, IsPropertySaveable.Yes, description: "The event actions reset when a GoTo action makes the event jump to a different point. Should the NPC stop waiting when the event resets?")]
public bool AbandonOnReset { get; set; }
[Serialize(AIObjectiveManager.MaxObjectivePriority, IsPropertySaveable.Yes, description: "AI priority for the action. Uses 100 by default, which is the absolute maximum for any objectives, " +
"meaning nothing can be prioritized over it, including the emergency objectives, such as find safety and combat." +
"Setting the priority to 70 would function like a regular order, but with the highest priority." +
@@ -76,7 +79,7 @@ namespace Barotrauma
public override void Reset()
{
if (affectedNpcs != null)
if (affectedNpcs != null && AbandonOnReset)
{
foreach (var npc in affectedNpcs)
{
@@ -367,7 +367,7 @@ namespace Barotrauma
SpawnType? spawnPointType = null;
if (!ignoreSpawnPointType) { spawnPointType = SpawnPointType; }
return GetSpawnPos(SpawnLocation, spawnPointType, targetModuleTags, SpawnPointTag.ToEnumerable(), requireTaggedSpawnPoint: RequireSpawnPointTag, allowInPlayerView: AllowInPlayerView);
return GetSpawnPos(SpawnLocation, spawnPointType, targetModuleTags, SpawnPointTag.IsEmpty ? null : SpawnPointTag.ToEnumerable(), requireTaggedSpawnPoint: RequireSpawnPointTag, allowInPlayerView: AllowInPlayerView);
}
private static bool IsValidSubmarineType(SpawnLocationType spawnLocation, Submarine submarine)
@@ -422,12 +422,32 @@ namespace Barotrauma
}
if (spawnpointTags != null && spawnpointTags.Any())
{
var spawnPoints = potentialSpawnPoints.Where(wp => spawnpointTags.Any(tag => wp.Tags.Contains(tag) && wp.ConnectedDoor == null && wp.IsTraversable));
if (requireTaggedSpawnPoint || spawnPoints.Any())
var spawnPointsWithTag = potentialSpawnPoints.Where(wp => spawnpointTags.Any(tag => wp.Tags.Contains(tag) && wp.ConnectedDoor == null && wp.IsTraversable));
if (requireTaggedSpawnPoint || spawnPointsWithTag.Any())
{
potentialSpawnPoints = spawnPoints.ToList();
potentialSpawnPoints = spawnPointsWithTag.ToList();
}
else
{
//no spawnpoints with the tag we want -> choose something with no tags
TryGetSpawnPointsWithNoTag();
}
}
else
{
//if no tags are specified, prefer a spawnpoint with no tags, i.e. prefer a "generic" spawnpoint instead of some special one like a jail spawnpoint
TryGetSpawnPointsWithNoTag();
}
void TryGetSpawnPointsWithNoTag()
{
var spawnPointsWithNoTag = potentialSpawnPoints.Where(wp => wp.Tags.None());
if (spawnPointsWithNoTag.Any())
{
potentialSpawnPoints = spawnPointsWithNoTag.ToList();
}
}
if (potentialSpawnPoints.None())
{
if (requireTaggedSpawnPoint && spawnpointTags != null && spawnpointTags.Any())