Files
LuaCsForBarotraumaEP/Barotrauma/BarotraumaClient/ClientSource/Events/Missions/AbandonedOutpostMission.cs
NotAlwaysTrue 59bc21973a OBT/1.2.0(Spring Update)
Sync with Upstream
2026-04-25 13:25:41 +08:00

79 lines
2.8 KiB
C#

using Barotrauma.Extensions;
using Barotrauma.Networking;
namespace Barotrauma
{
partial class AbandonedOutpostMission : Mission
{
public override int State
{
get { return base.State; }
set
{
if (state != value)
{
base.State = value;
if (state == HostagesKilledState && !hostagesKilledMessage.IsNullOrEmpty())
{
CreateMessageBox(string.Empty, hostagesKilledMessage);
}
}
}
}
public override bool DisplayAsCompleted =>
!DisplayAsFailed &&
State > 0 &&
//don't display as completed mid-round if there's NPCs to rescue (mission isn't guaranteed to complete yet)
requireRescue.None();
public override bool DisplayAsFailed => State == HostagesKilledState;
public override void ClientReadInitial(IReadMessage msg)
{
base.ClientReadInitial(msg);
ushort targetItemCount = msg.ReadUInt16();
for (int i = 0; i < targetItemCount; i++)
{
var item = Item.ReadSpawnData(msg);
items.Add(item);
}
byte characterCount = msg.ReadByte();
for (int i = 0; i < characterCount; i++)
{
Character character = Character.ReadSpawnData(msg);
characters.Add(character);
if (msg.ReadBoolean()) { requireKill.Add(character); }
if (msg.ReadBoolean())
{
requireRescue.Add(character);
#if CLIENT
if (allowOrderingRescuees)
{
GameMain.GameSession.CrewManager?.AddCharacterToCrewList(character);
}
#endif
}
ushort itemCount = msg.ReadUInt16();
for (int j = 0; j < itemCount; j++)
{
Item.ReadSpawnData(msg);
}
if (character.AIController is EnemyAIController enemyAi && character.Submarine is Submarine ownSub)
{
enemyAi.SetUnattackableSubmarines(ownSub);
}
}
if (characters.Contains(null))
{
throw new System.Exception("Error in AbandonedOutpostMission.ClientReadInitial: character list contains null (mission: " + Prefab.Identifier + ")");
}
if (characters.Count != characterCount)
{
throw new System.Exception("Error in AbandonedOutpostMission.ClientReadInitial: character count does not match the server count (" + characters + " != " + characters.Count + "mission: " + Prefab.Identifier + ")");
}
}
}
}