Files
LuaCsForBarotraumaEP/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Repairable.cs
NotAlwaysTrue 59bc21973a OBT/1.2.0(Spring Update)
Sync with Upstream
2026-04-25 13:25:41 +08:00

60 lines
2.2 KiB
C#

using Barotrauma.Networking;
namespace Barotrauma.Items.Components
{
partial class Repairable : ItemComponent, IServerSerializable, IClientSerializable
{
private Character prevLoggedFixer;
private FixActions prevLoggedFixAction;
public override void OnMapLoaded()
{
//let the clients know the initial deterioration delay
item.CreateServerEvent(this);
}
public void ServerEventRead(IReadMessage msg, Client c)
{
if (c.Character == null) { return; }
FixActions requestedFixAction = (FixActions)msg.ReadRangedInteger(0, 2);
bool QTESuccess = msg.ReadBoolean();
if (!item.CanClientAccess(c) || !HasRequiredItems(c.Character, addMessage: false)) { return; }
if (requestedFixAction != FixActions.None)
{
if (!c.Character.IsTraitor && requestedFixAction == FixActions.Sabotage)
{
if (GameSettings.CurrentConfig.VerboseLogging)
{
DebugConsole.Log($"Non traitor \"{c.Character.Name}\" attempted to sabotage item.");
}
requestedFixAction = FixActions.Repair;
}
if (CurrentFixer == null || CurrentFixer == c.Character && requestedFixAction != currentFixerAction)
{
StartRepairing(c.Character, requestedFixAction);
item.CreateServerEvent(this);
}
}
else
{
RepairBoost(QTESuccess);
item.CreateServerEvent(this);
}
}
public void ServerEventWrite(IWriteMessage msg, Client c, NetEntityEvent.IData extraData = null)
{
msg.WriteSingle(deteriorationTimer);
msg.WriteSingle(ForceDeteriorationTimer);
msg.WriteSingle(tinkeringDuration);
msg.WriteSingle(tinkeringStrength);
msg.WriteBoolean(tinkeringPowersDevices);
msg.WriteUInt16(CurrentFixer == null ? (ushort)0 : CurrentFixer.ID);
msg.WriteRangedInteger((int)currentFixerAction, 0, 2);
}
}
}