Files
LuaCsForBarotraumaEP/Barotrauma/BarotraumaServer/ServerSource/GameSession/CrewManager.cs
Juan Pablo Arce 3f2c843247 Unstable v0.19.3.0
2022-09-02 15:10:56 -03:00

68 lines
2.5 KiB
C#

using Barotrauma.Networking;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
namespace Barotrauma
{
partial class CrewManager
{
partial void CreateRandomConversation()
{
List<Character> availableSpeakers = Character.CharacterList.FindAll(c =>
c.AIController is HumanAIController &&
!c.IsDead &&
c.SpeechImpediment <= 100.0f);
foreach (Client client in GameMain.Server.ConnectedClients)
{
if (client.Character != null) availableSpeakers.Remove(client.Character);
}
pendingConversationLines.AddRange(NPCConversation.CreateRandom(availableSpeakers));
}
/// <summary>
/// Saves bots in multiplayer
/// </summary>
public XElement SaveMultiplayer(XElement parentElement)
{
var element = new XElement("bots", new XAttribute("hasbots", HasBots));
foreach (CharacterInfo info in characterInfos)
{
if (Level.Loaded != null)
{
if (!info.IsNewHire && (info.Character == null || info.Character.IsDead)) { continue; }
}
XElement characterElement = info.Save(element);
if (info.InventoryData != null) { characterElement.Add(info.InventoryData); }
if (info.HealthData != null) { characterElement.Add(info.HealthData); }
if (info.OrderData != null) { characterElement.Add(info.OrderData); }
}
parentElement?.Add(element);
return element;
}
public void ServerWriteActiveOrders(IWriteMessage msg)
{
ushort count = (ushort)ActiveOrders.Count(o => o.Order != null && !o.FadeOutTime.HasValue);
msg.WriteUInt16(count);
if (count > 0)
{
foreach (var activeOrder in ActiveOrders)
{
if (!(activeOrder?.Order is Order order) || activeOrder.FadeOutTime.HasValue) { continue; }
OrderChatMessage.WriteOrder(msg, order, null, isNewOrder: true);
bool hasOrderGiver = order.OrderGiver != null;
msg.WriteBoolean(hasOrderGiver);
if (hasOrderGiver)
{
msg.WriteUInt16(order.OrderGiver.ID);
}
}
}
}
}
}