ИнформацияЭта библиотека предназначена для разработчиков аддонов и не может использоваться отдельно. Она требует дополнительных изменений в исходном коде аддонов.
Библиотека была создана для решения проблемы доступа к закрытым функциям из небезопасного кода. Начиная с версии 2.0, она также предоставляет новую функцию — подменю. В версии 3.0 появилась ещё одна новая функция — разделитель.
Элементы управления, созданные из дополнительного кода, помечаются как «небезопасные» или «скомпрометированные». Функции, которые не вызывают проблем с такими элементами управления, работают отлично, например, функции из аддонов «Показать на карте», «Ссылка в чате» или «Помощь». Однако функции, помеченные как «защищённые», такие как «UseItem», «InitiateDestroy» или «PickupInventoryItem», вызывают ошибку.
До версии ESO 2.0.13, если аддон предлагал полное пользовательское контекстное меню без встроенных пунктов меню, и это меню отображалось первым после загрузки пользовательского интерфейса, то элементы управления первого пункта меню были ненадёжными. Это могло привести к ошибке «Использование» в инвентаре. Начиная с версии 2.0.13 ZOS предварительно выделяет 10 «безопасных» пунктов меню, но это только снижает вероятность возникновения проблемы, но не устраняет её полностью. В настоящее время количество предварительно выделенных элементов управления равно 30. Хотя запуск с этой проблемой с AddMenuItem всё ещё возможен, но слоты действий инвентаря всё ещё не любят пункты пользовательского меню.
Чтобы избежать появления сообщения об ошибке, элементы управления встроенными пунктами меню и дополнительными пунктами меню должны быть строго разделены. Это то, что делает AddCustomMenuItem в этой библиотеке. Он использует собственный пул элементов управления, которые выглядят точно так же. Это может показаться странным, но это работает.
Я не использую частные функции. Почему я должен использовать эту библиотеку? Проблема не в вас, а во встроенном коде, который повторно использует элементы управления, созданные вашим дополнением в AddMenuItem.
Если вы хотите использовать эту библиотеку, то после включения её в манифест дополнения, выполните текстовый поиск глобальной функции AddMenuItem и замените её на AddCustomMenuItem. Однако будьте осторожны при использовании функции «Заменить всё» над всеми файлами, чтобы не заменить AddMenuItem самой библиотеки CustomMenu.