//fires after a delay. if randomized is set to true, it'll occur at some point between now and the delay. Note that you should make this delay relatively small.
        public OneOffTimeReaction(TimeReactionBase doProc, byte delay, bool randomized = false)
        {
            onProc = doProc ?? throw new ArgumentNullException(nameof(doProc));

            procTime = GameDateTime.HoursFromNow(randomized ? (byte)Utils.Rand(delay) : delay);
        }
        //fires immediately.
        public OneOffTimeReaction(TimeReactionBase doProc)
        {
            onProc = doProc ?? throw new ArgumentNullException(nameof(doProc));

            procTime = GameDateTime.Now;
        }