From 8a382416a92550e04ef0ebaf94fa0a4f0dfd1c21 Mon Sep 17 00:00:00 2001 From: wixoa Date: Mon, 4 May 2026 20:29:11 -0400 Subject: [PATCH] Proc overrides inherit `waitfor = FALSE` --- DMCompiler/DM/DMCodeTree.Procs.cs | 6 ++++-- OpenDreamRuntime/ServerVerbSystem.cs | 2 +- OpenDreamRuntime/WalkManager.cs | 8 ++++---- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/DMCompiler/DM/DMCodeTree.Procs.cs b/DMCompiler/DM/DMCodeTree.Procs.cs index e90322eed1..935b8ba679 100644 --- a/DMCompiler/DM/DMCodeTree.Procs.cs +++ b/DMCompiler/DM/DMCodeTree.Procs.cs @@ -37,8 +37,10 @@ public bool TryDefineProc(DMCompiler compiler) { var procs = dmObject.GetProcs(procDef.Name); if (procs != null) { var parent = compiler.DMObjectTree.AllProcs[procs[0]]; - proc.IsVerb = parent.IsVerb; - if (proc.IsVerb) { + if (parent.Attributes.HasFlag(ProcAttributes.DisableWaitfor)) + proc.Attributes |= ProcAttributes.DisableWaitfor; + if (parent.IsVerb) { + proc.IsVerb = true; proc.VerbName = parent.VerbName; proc.VerbCategory = parent.VerbCategory; proc.VerbDesc = parent.VerbDesc; diff --git a/OpenDreamRuntime/ServerVerbSystem.cs b/OpenDreamRuntime/ServerVerbSystem.cs index dd1ddad3d8..2f20c0681d 100644 --- a/OpenDreamRuntime/ServerVerbSystem.cs +++ b/OpenDreamRuntime/ServerVerbSystem.cs @@ -179,7 +179,7 @@ private void OnRepeatVerbStop(UnregisterRepeatVerbEvent msg, EntitySessionEventA } } - private void RunVerb(DreamProc verb, string name, DreamObject? src, DreamConnection usr, params DreamValue[] arguments) { + private void RunVerb(DreamProc verb, string name, DreamObject src, DreamConnection usr, params DreamValue[] arguments) { using var _ = Profiler.BeginZone("DM Execution", color: (uint)Color.LightPink.ToArgb()); DreamThread.Run($"Execute {name} by {usr.Session!.Name}", async state => { diff --git a/OpenDreamRuntime/WalkManager.cs b/OpenDreamRuntime/WalkManager.cs index ca372e6adf..6c84982194 100644 --- a/OpenDreamRuntime/WalkManager.cs +++ b/OpenDreamRuntime/WalkManager.cs @@ -48,7 +48,7 @@ public void StartWalk(DreamObjectMovable movable, int dir, int lag, int speed) { break; DreamObjectTurf? newLoc = DreamProcNativeHelpers.GetStep(_atomManager, _dreamMapManager, movable, (AtomDirection)dir); - await state.Call(moveProc, movable, null, new(newLoc), new(dir)); + await state.CallNoWait(moveProc, movable, null, new(newLoc), new(dir)); } return DreamValue.Null; @@ -75,7 +75,7 @@ public void StartWalkRand(DreamObjectMovable movable, int lag, int speed) { // T break; var dir = DreamProcNativeHelpers.GetRandomDirection(_dreamManager); DreamObjectTurf? newLoc = DreamProcNativeHelpers.GetStep(_atomManager, _dreamMapManager, movable, dir); - await state.Call(moveProc, movable, null, new(newLoc), new((int)dir)); + await state.CallNoWait(moveProc, movable, null, new(newLoc), new((int)dir)); } return DreamValue.Null; @@ -106,7 +106,7 @@ public void StartWalkTowards(DreamObjectMovable movable, DreamObjectAtom target, continue; DreamObjectTurf? newLoc = DreamProcNativeHelpers.GetStep(_atomManager, _dreamMapManager, movable, dir); - await state.Call(moveProc, movable, null, new(newLoc), new((int)dir)); + await state.CallNoWait(moveProc, movable, null, new(newLoc), new((int)dir)); } return DreamValue.Null; @@ -141,7 +141,7 @@ public void StartWalkTo(DreamObjectMovable movable, DreamObjectAtom target, int var dir = enumerator.Current; var newLoc = DreamProcNativeHelpers.GetStep(_atomManager, _dreamMapManager, movable, dir); - await state.Call(moveProc, movable, null, new(newLoc), new((int)dir)); + await state.CallNoWait(moveProc, movable, null, new(newLoc), new((int)dir)); } return DreamValue.Null;