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,36 +705,31 @@ 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) // no interaction occurred
{ return false;
_beingWelded = true; }
if(await toolSystem.UseTool(eventArgs.Using, eventArgs.User, Owner, 3f, 3f, _weldingQuality, () => CanWeldShut))
{
// just in case
if (!CanWeldShut)
{
return false;
}
_beingWelded = false; _beingWelded = true;
IsWeldedShut = !IsWeldedShut;
return true; // perform a do-after delay
} var result = await toolSystem.UseTool(eventArgs.Using, eventArgs.User, Owner, 3f, 3f, _weldingQuality, () => CanWeldShut);
_beingWelded = false;
} // if successful, toggle the weld-status (while also ensuring that it can still be welded shut after the delay)
} if (result)
else IsWeldedShut = CanWeldShut && !IsWeldedShut;
{
_beingWelded = false; _beingWelded = false;
} return true;
return false;
} }
/// <summary> /// <summary>