Inheritance: HookEventArgs
        private void OnStatusChanged(object sender, StatusEventArgs args)
        {
            Debugger.WriteLine($"Changed status for property {EnumHelper.GetName(args.Tag)}");
            Debugger.WriteLine(
            $"Called maid: {args.CallerMaid.Param.status.first_name} {args.CallerMaid.Param.status.last_name}");

            if (!IsMaidLoaded(args.CallerMaid))
            {
                Debugger.WriteLine(LogLevel.Error, "Maid not in the list! Aborting!");
                return;
            }

            MaidInfo maid = GetMaidInfo(args.CallerMaid);

            if (maid.IsLocked(args.Tag))
            {
                Debugger.WriteLine(LogLevel.Info, "Value locked! Aborting changes...");
                args.BlockAssignment = true;
                return;
            }

            if (SelectedMaid != null && SelectedMaid.Maid != maid.Maid)
            {
                Debugger.WriteLine(LogLevel.Warning, "Selected maids are different!");
                return;
            }

            if (!valueUpdateQueue[currentQueue].ContainsKey(args.Tag))
            {
                Debugger.WriteLine(LogLevel.Info, "Adding to update queue");
                valueUpdateQueue[currentQueue].Add(args.Tag, () => maid.UpdateField(args.Tag));
            }
            else
            {
                Debugger.WriteLine(
                LogLevel.Warning,
                $"Already in update queue {currentQueue}! Queue length: {valueUpdateQueue[currentQueue].Count}");
            }
        }
        public static bool OnStatusChanged(int tag, ref Maid currentMaid)
        {
            StatusEventArgs args = new StatusEventArgs
            {
                Tag = (MaidChangeType) tag,
                CallerMaid = currentMaid,
                BlockAssignment = false
            };

            StatusChanged?.Invoke(args);

            return args.BlockAssignment;
        }