private void OnPreconditionEval(Object p_sender, EventArgs p_args)
        {
            PreconditionEvaluateArgs preconditionEvaluateArgs = p_args as PreconditionEvaluateArgs;

            if (preconditionEvaluateArgs == null)
            {
                return;
            }
            if (preconditionEvaluateArgs.Passed || preconditionEvaluateArgs.Cancelled)
            {
                return;
            }
            String  text = String.Empty;
            Boolean flag = false;
            Int32   num  = 0;
            PartyCheckPrecondition partyCheckPrecondition = p_sender as PartyCheckPrecondition;

            if (partyCheckPrecondition != null && partyCheckPrecondition.Decision == EPreconditionDecision.NONE && partyCheckPrecondition.RequiredTokenID > 0)
            {
                flag = true;
                num  = partyCheckPrecondition.RequiredTokenID;
            }
            Boolean  flag2    = false;
            Boolean  flag3    = false;
            Boolean  flag4    = false;
            Position position = LegacyLogic.Instance.WorldManager.Party.Position;
            GridSlot slot     = LegacyLogic.Instance.MapLoader.Grid.GetSlot(position);
            IEnumerable <InteractiveObject> interactiveObjectIterator = slot.GetInteractiveObjectIterator();

            foreach (InteractiveObject interactiveObject in interactiveObjectIterator)
            {
                if (interactiveObject is Door || interactiveObject is Container || interactiveObject is Lever)
                {
                    if (interactiveObject != m_lastInteractiveObject)
                    {
                        if (interactiveObject is Door)
                        {
                            Door door = (Door)interactiveObject;
                            if (flag && m_lastInteractiveObject == door)
                            {
                                flag3 = true;
                                break;
                            }
                            if (door.State == EInteractiveObjectState.DOOR_OPEN || !door.Enabled)
                            {
                                flag3 = true;
                                break;
                            }
                            foreach (SpawnCommand spawnCommand in interactiveObject.Commands)
                            {
                                if (spawnCommand.Precondition != "NONE" && !spawnCommand.Precondition.Contains("SECRET_CHALLENGE") && !spawnCommand.Precondition.Contains("PLAIN"))
                                {
                                    String[] array = spawnCommand.Precondition.Split(new Char[]
                                    {
                                        ','
                                    });
                                    if (array[4] == String.Empty)
                                    {
                                        Int32 num2 = 0;
                                        if (array[5] != String.Empty && Int32.TryParse(array[5], out num2) && num2 > 0 && num2 != num)
                                        {
                                            flag4 = true;
                                            break;
                                        }
                                        if (flag && (m_lastInteractiveObject == null || m_lastInteractiveObject != door))
                                        {
                                            m_lastInteractiveObject = door;
                                        }
                                        flag2 = true;
                                        break;
                                    }
                                }
                            }
                            text = LocaManager.GetText("DOOR_KEY_FAIL_TEXT");
                        }
                        else if (interactiveObject is Container)
                        {
                            if (interactiveObject.State == EInteractiveObjectState.CONTAINER_OPENED)
                            {
                                flag3 = true;
                                break;
                            }
                            foreach (SpawnCommand spawnCommand2 in interactiveObject.Commands)
                            {
                                if (spawnCommand2.Type == EInteraction.OPEN_CONTAINER && spawnCommand2.Precondition != "NONE" && partyCheckPrecondition.RequiredTokenID > 0)
                                {
                                    String[] array2 = spawnCommand2.Precondition.Split(new Char[]
                                    {
                                        ','
                                    });
                                    if (array2[4] == String.Empty)
                                    {
                                        Int32 num3 = 0;
                                        if (array2[5] != String.Empty && Int32.TryParse(array2[5], out num3) && num3 > 0 && num3 != num)
                                        {
                                            flag4 = true;
                                            break;
                                        }
                                    }
                                    text  = LocaManager.GetText("CHEST_KEY_FAIL_TEXT");
                                    flag3 = false;
                                    flag2 = true;
                                    flag4 = false;
                                    m_lastInteractiveObject = interactiveObject;
                                    break;
                                }
                            }
                            if (!String.IsNullOrEmpty(text) || flag4)
                            {
                                break;
                            }
                        }
                        else if (interactiveObject is Lever)
                        {
                            if (interactiveObject.State == EInteractiveObjectState.LEVER_DOWN)
                            {
                                flag3 = true;
                                break;
                            }
                            foreach (SpawnCommand spawnCommand3 in interactiveObject.Commands)
                            {
                                if ((spawnCommand3.Type == EInteraction.LEVER_DOWN || spawnCommand3.Type == EInteraction.LEVER_UP) && spawnCommand3.Precondition != "NONE" && partyCheckPrecondition.RequiredTokenID > 0)
                                {
                                    String[] array3 = spawnCommand3.Precondition.Split(new Char[]
                                    {
                                        ','
                                    });
                                    if (array3[4] == String.Empty)
                                    {
                                        Int32 num4 = 0;
                                        if (array3[5] != String.Empty && Int32.TryParse(array3[5], out num4) && num4 > 0 && num4 != num)
                                        {
                                            flag4 = true;
                                            break;
                                        }
                                    }
                                    text  = LocaManager.GetText("LEVER_GEAR_FAIL_TEXT");
                                    flag3 = false;
                                    flag2 = true;
                                    flag4 = false;
                                    m_lastInteractiveObject = interactiveObject;
                                    break;
                                }
                            }
                            if (!String.IsNullOrEmpty(text) || flag4)
                            {
                                break;
                            }
                        }
                    }
                }
            }
            if (flag3)
            {
                return;
            }
            if (!flag2)
            {
                return;
            }
            if (flag4)
            {
                return;
            }
            if (String.IsNullOrEmpty(text))
            {
                return;
            }
            if (m_lastInteractiveObject != null)
            {
                LegacyLogic.Instance.EventManager.RegisterEvent(EEventType.MOVE_ENTITY, new EventHandler(OnMoveEntity));
                InputManager.RegisterHotkeyEvent(EHotkeyType.INTERACT, new EventHandler <HotkeyEventArgs>(OnInteractHotkeyPressed));
            }
            GameMessage item = new GameMessage(text);

            m_importantMessages.Enqueue(item);
        }