When you do %obj.schedule() make it %obj.bfgSchedule = %obj.schedule() so when you go to cancel it in your OnUnMount function you can just do cancel(%obj.bfgSchedule);
What you're doing currently is starting a schedule and canceling it immediately after.
Also for schedule usage the way it works is in two ways, either on an object or not on one.
schedule(ms, id, function, params);
%obj.schedule(ms, obj::function, params);
So if you want to kill a player
%player.schedule(20, "kill");
Not player.kill, it assumes you're doing it to the object already.