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); }