Docking system can no longer forcibly open welded doors. (#12149)
* Docking system can no longer forcibly open welded doors. * bolt the doors after trying to open them * more door logic
This commit is contained in:
@@ -352,26 +352,28 @@ namespace Content.Server.Shuttles.Systems
|
|||||||
dockB.DockJoint = joint;
|
dockB.DockJoint = joint;
|
||||||
dockB.DockJointId = joint.ID;
|
dockB.DockJointId = joint.ID;
|
||||||
|
|
||||||
|
if (TryComp(dockA.Owner, out DoorComponent? doorA))
|
||||||
|
{
|
||||||
|
if (_doorSystem.TryOpen(doorA.Owner, doorA))
|
||||||
|
{
|
||||||
|
doorA.ChangeAirtight = false;
|
||||||
if (TryComp<AirlockComponent>(dockA.Owner, out var airlockA))
|
if (TryComp<AirlockComponent>(dockA.Owner, out var airlockA))
|
||||||
{
|
{
|
||||||
airlockA.SetBoltsWithAudio(true);
|
airlockA.SetBoltsWithAudio(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TryComp<AirlockComponent>(dockB.Owner, out var airlockB))
|
|
||||||
{
|
|
||||||
airlockB.SetBoltsWithAudio(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TryComp(dockA.Owner, out DoorComponent? doorA))
|
|
||||||
{
|
|
||||||
doorA.ChangeAirtight = false;
|
|
||||||
_doorSystem.StartOpening(doorA.Owner, doorA);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TryComp(dockB.Owner, out DoorComponent? doorB))
|
if (TryComp(dockB.Owner, out DoorComponent? doorB))
|
||||||
|
{
|
||||||
|
if (_doorSystem.TryOpen(doorB.Owner, doorB))
|
||||||
{
|
{
|
||||||
doorB.ChangeAirtight = false;
|
doorB.ChangeAirtight = false;
|
||||||
_doorSystem.StartOpening(doorB.Owner, doorB);
|
if (TryComp<AirlockComponent>(dockB.Owner, out var airlockB))
|
||||||
|
{
|
||||||
|
airlockB.SetBoltsWithAudio(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_pathfinding.TryCreatePortal(dockAXform.Coordinates, dockBXform.Coordinates, out var handle))
|
if (_pathfinding.TryCreatePortal(dockAXform.Coordinates, dockBXform.Coordinates, out var handle))
|
||||||
@@ -463,15 +465,19 @@ namespace Content.Server.Shuttles.Systems
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (TryComp(dock.Owner, out DoorComponent? doorA))
|
if (TryComp(dock.Owner, out DoorComponent? doorA))
|
||||||
|
{
|
||||||
|
if (_doorSystem.TryClose(doorA.Owner, doorA))
|
||||||
{
|
{
|
||||||
doorA.ChangeAirtight = true;
|
doorA.ChangeAirtight = true;
|
||||||
_doorSystem.TryClose(doorA.Owner, doorA);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TryComp(dock.DockedWith, out DoorComponent? doorB))
|
if (TryComp(dock.DockedWith, out DoorComponent? doorB))
|
||||||
|
{
|
||||||
|
if (_doorSystem.TryClose(doorB.Owner, doorB))
|
||||||
{
|
{
|
||||||
doorB.ChangeAirtight = true;
|
doorB.ChangeAirtight = true;
|
||||||
_doorSystem.TryClose(doorB.Owner, doorB);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LifeStage(dock.Owner) < EntityLifeStage.Terminating)
|
if (LifeStage(dock.Owner) < EntityLifeStage.Terminating)
|
||||||
|
|||||||
@@ -316,6 +316,11 @@ public abstract class SharedDoorSystem : EntitySystem
|
|||||||
if (!Resolve(uid, ref door))
|
if (!Resolve(uid, ref door))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
// since both closing/closed and welded are door states, we need to prevent 'closing'
|
||||||
|
// a welded door or else there will be weird state bugs
|
||||||
|
if (door.State == DoorState.Welded)
|
||||||
|
return false;
|
||||||
|
|
||||||
var ev = new BeforeDoorClosedEvent(door.PerformCollisionCheck);
|
var ev = new BeforeDoorClosedEvent(door.PerformCollisionCheck);
|
||||||
RaiseLocalEvent(uid, ev, false);
|
RaiseLocalEvent(uid, ev, false);
|
||||||
if (ev.Cancelled)
|
if (ev.Cancelled)
|
||||||
|
|||||||
Reference in New Issue
Block a user