Я использую World of Warcraft API. И я хочу найти EventMessageFilter
. Я могу сделать это, позвонив
ChatFrame_GetMessageEventFilters("event")
И для этого мне нужно передать событие чата, в моем случае CHAT_MSG_WHISPER_INFORM
.
Итак, согласно API, расположенному по адресу
http://wowprogramming.com/docs/api/ChatFrame_GetMessageEventFilters
Эта функция вернет таблицу. Поэтому я назвал таблицу и попытался распечатать ее содержимое с помощью этого кода.
local myNewTable = filterTable = ChatFrame_GetMessageEventFilters("CHAT_MSG_WHISPER_INFORM")
for i in pairs(myNewTable) do
print(asd[i])
end
И это затем распечатывает что-то вроде
function: 00000312498vn27842934c4
Я проверил с
type(asd[i])
И это действительно функция. Но как я могу получить его содержимое? Как мне с этим справиться?
2 ответа
Я хочу найти EventMessageFilter
Можете ли вы уточнить? Чей фильтр вы ищете и что собираетесь с ним делать?
это действительно функция.
Это то, что делает этот API: возвращает список функций, которые зарегистрированы как фильтры для определенного типа сообщения (через ChatFrame_AddMessageEventFilter
).
Но как я могу получить его содержимое?
Вы не можете. WoW API не предлагает никаких средств для декомпиляции функций.
Если вы намерены самостоятельно фильтровать сообщения чата, вам вообще не нужно вызывать эту функцию. Просто вызовите ChatFrame_AddMessageEventFilter
, чтобы добавить свой фильтр.
Поэтому мне удалось решить мою проблему, удалив текущие фильтры, которые были установлены другим дополнением, а затем просто добавив свой собственный фильтр. Как заметил Мад. GMEF должен был возвращать функции. Теперь я вижу, как это имеет смысл. Но теперь я сделал код для удаления функций. Если вы хотите повторно добавить их позже, просто сохраните их в переменной, пока не закончите, но я не буду включать это в свой ответ. Я также чувствую, что мой ответ наполовину не по теме. Но чтобы ответить на мой собственный вопрос. Предполагается, что он возвращает функции, и вы не можете видеть содержимое этих функций. Это код, который я использовал для удаления функций, добавленных другим дополнением.
function rekkFilters()
local myFilters = ChatFrame_GetMessageEventFilters("CHAT_MSG_WHISPER_INFORM")
for i in pairs(myFilters) do
ChatFrame_RemoveMessageEventFilter("CHAT_MSG_WHISPER_INFORM", myFilters[i])
end
end
local myFilters = ChatFrame_GetMessageEventFilters("CHAT_MSG_WHISPER_INFORM")
rekkFilters()
local myFilters = ChatFrame_GetMessageEventFilters("CHAT_MSG_WHISPER_INFORM")
if myFilters[1] ~= nil then
rekkFilters()
end
Похожие вопросы
Новые вопросы
function
Функция (также называемая процедурой, методом, подпрограммой, подпрограммой или макросом) — это часть кода, предназначенная для выполнения одной конкретной задачи. Используйте этот тег для вопросов, которые конкретно связаны с созданием или вызовом функций. Чтобы получить помощь в реализации функции для выполнения задачи, используйте вместо нее [алгоритм] или тег для конкретной задачи. Создавая функцию, логику можно изолировать и вызывать многократно.
ChatFrame_AddMessageEventFilter
(имя события, функция)? Вы вызывалиChatFrame_GetMessageEventFilters
до и после добавления фильтра, чтобы увидеть, что список фильтров увеличился на один? Можете ли вы найти свой фильтр в списке фильтров? Если он есть, проверили ли вы, что он вызывается (например, print('xxx'))? Пробовали ли вы всегда возвращать true, чтобы вообще можно было фильтровать сообщения? Вы зарегистрировались, чтобы получить это событие в первую очередь (черезRegisterEvent
)? Так далее и тому подобное. Это проблема, которую вам нужно решить.