WoW Cerberus аддон Dragonflight/Wrath of the Lich King Classic 2024 скачать
logo
wow addon Cerberus

Cerberus

Версия игры: 10.0.2
Всего загрузок: 238
Обновлено: Nov 21, 2022
Создано: Aug 18, 2017
Скачать CerberusСкачать Предыдущие версии

Предыдущие версии

Название Размер Обновлено Версия игры Загрузок
Cerberus_1.2 release 2.67 KB Nov 21, 2022 10.0.2 22 скачать Cerberus Cerberus_1.2 releaseСкачать
Cerberus_1.1 release 1.72 KB Aug 30, 2017 8.2.0 190 скачать Cerberus Cerberus_1.1 releaseСкачать

Описание

Хочешь карту со своим ником? Discount 10%Оформить ❤️

Описание

Обычно при создании аддона вы должны поместить все свои глобальные функции и переменные в один объект, специфичный для вашего аддона, и это во избежание конфликтов с другими аддонами, которые могут иметь глобальные вещи с теми же именами, что и ваши.

Это все хорошо и хорошо, но у этого есть несколько фонов, которые я не фанат, например, необходимость добавить yourObject.BeforeAnyFunctionDeclaration () или self.beforeAnyVariableCall. Кроме того, ошибка может легко проскользнуть сквозь пальцы, если вы забудете сделать переменную «локальной», когда вы намеревались ее сделать, и т. д.

 

Поэтому я сделал этот инструмент, чтобы сделать его проще! Он в основном делает всю работу за вас.

Cerberus «поймает» все, что вы не объявите локальным, и сохранит его в таблице, специфичной для вашего аддона. И всякий раз, когда вы пытаетесь получить доступ к глобальной переменной или функции, он проверяет, находится ли она в указанной таблице, и возвращает ее вам или возвращает из _G, если у него ее нет (_G-это, если вы не знаете, таблица, в которой хранятся все глобальные данные).

Так что с этим инструментом вам не нужно беспокоиться, просто поместите все ваши предполагаемые глобалы как глобалы, и пусть Цербер вложит их для вас!

 

Как использовать

Этот инструмент в значительной степени является «настройкой и забыванием», однако он требует некоторых инициализаций, а также, по крайней мере, некоторого понимания того, что он делает, если вы хотите иметь возможность использовать его должным образом. (Не волнуйтесь, это очень просто и коротко)

 

Прежде всего, следует поставить Цербера.lua перед любым из ваших файлов в вашем файле toc; но под любым другим файлом библиотеки.

Пример:

Load order

 

Затем в первом загруженном впоследствии файле (в приведенном выше примере это будет файл Options. lua) вам нужно добавить следующую строку в самом верху файла:

g_cerberus.RegisterAddon («YourAddonName»);

Обычно вашего имени аддона должно быть достаточно, но если оно очень общее, вы можете дать там более конкретное, чтобы избежать потенциальных конфликтов (оно не должно быть идентичным вашему фактическому имени аддона, это просто имя для Цербера, чтобы идентифицировать ваш аддон).

И после того, как это будет сделано, вам нужно будет поместить следующую строку а в самый верх каждого из ваших других файлов (а не в тот, где вы добавили предыдущую строку!):

Cerberus_HookThisFile();

(Обратите внимание, что эта вторая функция не проходит через объект g_cerberus, это глобальная функция; я хотел бы заставить их работать одинаково, но из-за того, как она работает, это просто невозможно).

Две вышеупомянутые строки должны быть помещены в глобальную область видимости, и Cerberus не будет работать, если вы добавите их в функцию или что-то еще. Если вы хотите иметь некоторые глобальные переменные, специально предназначенные для объявления на _G, то вы можете поместить их перед вызовом Cerberus_HookThisFile (), но я считаю, что лучше использовать «_G[«YourGlobalVariableName»] = whatever;» вместо этого, поскольку это ясно указывает на ваши намерения .

 

Если ваш аддон использует сохраненные переменные, вам придется «объявить» их Cerberus, предоставив функцию RegisterAddon() таблицу, содержащую все их имена, например:

g_cerberus.RegisterAddon («YourAddonName», {«SavedVariable1», «SavedVariable2″, » Etc» } );

Это скажет Cerberus использовать эти переменные как обычные глобальные (он не будет добавлять их в таблицу Cerberus вашего аддона, всегда проходите непосредственно через _G), поэтому они будут сохранены и загружены правильно. Имена передаваемых переменных должны точно соответствовать именам в вашем файле toc. Пожалуйста, имейте в виду, что имена сохраненных переменных все равно должны быть достаточно конкретными, чтобы избежать конфликтов с другими модами.

Если вы используете библиотеку или инструмент, который обрабатывает ваши сохраненные переменные иначе, чем «обычный», я понятия не имею, как справиться с этим случаем, потому что я их не использую, поэтому вы можете попытаться выяснить, как это сделать самостоятельно (и я был бы признателен Вам за Ваш вклад, чтобы улучшить Cerberus для этих случаев).

 

Если у вас есть аддон, который ведет себя как дополнительный модуль к базовому, и вы хотите, чтобы он использовал то же глобальное пространство, что и указанный базовый аддон, вы можете использовать следующую строку в своем модуле, где вы обычно используете RegisterAddon (), но вместо g_cerberus.RegisterAddon()!

g_cerberus.RegisterAddonModule («YourCoreAddonName», {«SavedVariable3» });

(Имя, заданное здесь в качестве параметра, должно быть таким же, как и имя, используемое с RegisterAddon() в основном аддоне)

Вам не нужно будет повторно регистрировать сохраненные переменные основного аддона, но если у вашего модуля есть собственные сохраненные переменные, вы можете добавить их сюда так же, как и в RegisterAddon().

 

Если по какой-то причине вы хотите получить доступ к глобальной таблице Cerberus вашего аддона, точно так же, как вы получили бы доступ к _G, вы можете сделать это следующим образом:

cerberus_G [«VarOfFuncName»];

(Точно так же, как вы использовали бы _G, но вместо этого с cerberus_G).

 

Как это работает

Этот инструмент использует функцию lua setfenv() всякий раз, когда вы используете Cerberus_HookThisFile () в файле, чтобы изменить среду этого файла с _G на таблицу, содержащуюся в глобальном объекте g_cerberus. Это означает, что для N аддонов, использующих Cerberus, будет создан только один глобальный объект (g_cerberus), и внутри этого объекта будет N таблиц, используемых каждым аддоном. Все аддоны могут иметь функции и переменные с одинаковыми именами, но все равно будут разные версии, используемые только соответствующим аддоном.

Кроме того, всякий раз, когда вы обращаетесь к переменной или функции, которая не была создана вами (хранится на _G, например function print() или что-то еще), он пытается найти ее в cerberus_G, а если она не найдена, то копируется внутри cerberus_G, чтобы избежать косвенного воздействия на часто используемые функции и переменные.

 

Все это означает, что если вы специально не используете «_G[«Something»] = something;», то на _G никогда ничего не будет написано. Все, что вы пишете в глобальной области видимости, будет храниться в вашей таблице Cerberus и предпочтительнее, чем _G. Это позволяет вам безопасно подключать функции и переменные blizzard. Крючок будет использоваться только вашим аддоном (и его модулями) и никем другим (это не включает функции, хранящиеся как члены элементов, таких как фреймы).

Это также означает, однако, что если вы хотите добавить команды Слэша, например, тогда, когда вы обычно объявляете глобальный «SLASH_MYADDON1 = «/myAddon»», теперь вам нужно будет сделать это непосредственно через _G, например: «_G[«SLASH_MYADDON1»] = «/myAddon»».

Аналогичным образом, это то, что Cerberus автоматически делает всякий раз, когда вы используете сохраненные переменные (если вы их зарегистрировали).

(Обратите внимание, если вы не знакомы с _G, что всякий раз, когда вы пытаетесь получить доступ, скажем, к переменной с именем myGlobalVariable, вы должны поместить ее в кавычки «» : _G[«myGlobalVariable»]; то же самое при попытке получить доступ к переменным из вашей таблицы Cerberus: cerberus_G[«myGlobalVariable»]; ).

 

Несовместимость

Я не верю, что он полностью совместим с AceHook. Мне было бы интересно сделать патч совместимости или что-то в этом роде, но я никогда не использовал его сам, и я не смог полностью понять, как он работает, когда смотрел на него.
Поэтому, если вы случайно используете AceHook, мне было бы интересно поговорить с вами о том, для чего вы его используете и как, посмотреть, что можно сделать для этого патча совместимости.

 

Оговорка

Этот инструмент был предназначен для того, чтобы быть простым и маленьким. Я заставил его работать с тем, для чего я его использую, и меня не удивило бы, если бы он не был так полезен в очень сложных и сложных случаях. У меня просто нет достаточного опыта работы с очень огромными, сложными и запутанными аддонами, чтобы сказать, будет ли это работать на 100% в каждом конкретном случае, но я думаю, что это должно быть; единственное, что я знаю, может варьироваться, — это то, насколько это может быть полезно для вашего конкретного случая.

Если у вас возникли какие-либо проблемы при использовании этого приложения, или у вас есть какие-либо вопросы, замечания или предложения, пожалуйста, не стесняйтесь обращаться ко мне или размещать их непосредственно в комментариях! 🙂

Поделиться:

Комментарии

Добавить комментарий