Fix tool do-after return values (#5764)

This commit is contained in:
Leon Friedrich
2021-12-14 02:31:40 +13:00
committed by GitHub
parent f04bd5996f
commit 5a4c08ccdf

View File

@@ -705,37 +705,32 @@ namespace Content.Server.Doors.Components
{ {
Close(); Close();
} }
return true;
} }
// regardless of whether this action actually succeeded, it generated a do-after bar. So prevent other
// interactions from happening afterwards by returning true.
return true;
} }
// for welding doors // for welding doors
if (CanWeldShut && _entMan.TryGetComponent(tool.Owner, out WelderComponent? welder) && welder.Lit) if (_beingWelded || !CanWeldShut || !_entMan.TryGetComponent(tool.Owner, out WelderComponent? welder) || !welder.Lit)
{
if(!_beingWelded)
{
_beingWelded = true;
if(await toolSystem.UseTool(eventArgs.Using, eventArgs.User, Owner, 3f, 3f, _weldingQuality, () => CanWeldShut))
{
// just in case
if (!CanWeldShut)
{ {
// no interaction occurred
return false; return false;
} }
_beingWelded = true;
// perform a do-after delay
var result = await toolSystem.UseTool(eventArgs.Using, eventArgs.User, Owner, 3f, 3f, _weldingQuality, () => CanWeldShut);
// if successful, toggle the weld-status (while also ensuring that it can still be welded shut after the delay)
if (result)
IsWeldedShut = CanWeldShut && !IsWeldedShut;
_beingWelded = false; _beingWelded = false;
IsWeldedShut = !IsWeldedShut;
return true; return true;
} }
_beingWelded = false;
}
}
else
{
_beingWelded = false;
}
return false;
}
/// <summary> /// <summary>
/// Creates the corresponding door electronics board on the door. /// Creates the corresponding door electronics board on the door.