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