Перейти к содержанию

Дайджесты за январь-февраль

Обновления гайдов и аддонов

Январь Февраль

Мониторинг серверов и редактор аддонов

Представляем вам две легенды. То, о чем можно было только мечтать, стало реальностью.

Мониторинг серверов Редактор аддонов

Подсказки из игры на вашем сайте

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

Подробнее

Апдейтер аддонов

Представляем вам программу для автообновления аддонов и делимся подробностями.

Подробнее Скачать

Аддон отслеживающий event-ы


DSmmo

Рекомендуемые сообщения

Порой нужно найти нужные ивенты, которые приходят на то или иное действие. Насчитал более 600 ивентов. Вывод параметров приходящих с ивентом получить легко, а вот имя ивента с параметрами увязать не могу. 

Хотелось бы видеть картинку в mods на подобие:

Warning: addon CheckEvents: EVENT_ADDON_LOAD_STATE_CHANGED
Info: addon CheckEvents: loading: true
Info: addon CheckEvents: unloading: false
Info: addon CheckEvents: name: UserAddon/CheckEvents

Часть с параметрами реализовал следующим образом:

local events = { ..., "EVENT_ADDON_LOAD_STATE_CHANGED", ... }
local reaction = {}

for _, event in pairs( events ) do	
	reaction[ event ] = function ( params )
		LogWarning( " _______________ " ) -- Сюда подразумевалось выводить название ивента
		
		if params then
			for key, value in pairs( params ) do
				LogInfo( key, ": ", value )
			end
		end
	end
	
	common.RegisterEventHandler( reaction[ event ], event )
end

А вот с именем как не пробовал получается nil. После выхода из тела цикла естественной переменные цикла чистятся и уже в функциях остаётся пустота. Как это можно победить? Что можно придумать чтобы можно было получать такую информацию?

Кроме создания 600+ отдельных функций не вижу решений... 

Ссылка на комментарий
Поделиться на другие сайты

Не понял зачем это надо.

Так вместо 

LogWarning( " _______________ " ) -- Сюда подразумевалось выводить название ивента

LogInfo(event)

Выведет EVENT_ADDON_LOAD_STATE_CHANGED из массива events

Ссылка на комментарий
Поделиться на другие сайты

Выше дан ответ. Код полностью:

local events = { ..., "EVENT_ADDON_LOAD_STATE_CHANGED", ... }
local reaction = {}

for _, event in ipairs( events ) do	
	reaction[ event ] = function ( params )
		LogWarning(event) -- Сюда подразумевалось выводить название ивента
		
		if params then
			for key, value in pairs( params ) do
				LogInfo( key, ": ", value )
			end
		end
	end
	
	common.RegisterEventHandler( reaction[ event ], event )
end

Могу посоветовать воспользоваться функцией  advtostring() вот отсюда:

Получаем такой код:

local events = { ..., "EVENT_ADDON_LOAD_STATE_CHANGED", ... }
local reaction = {}

for _, event in ipairs( events ) do	
	reaction[ event ] = function ( params )
		LogInfo(event, ": ", advtostring(params))
	end
	
	common.RegisterEventHandler( reaction[ event ], event )
end

Результат будет примерно такой:

Info: addon CheckEvents: EVENT_ADDON_LOAD_STATE_CHANGED: {
	loading = true,
	unloading = false,
	name = 'UserAddon/CheckEvents'
}

 

Ссылка на комментарий
Поделиться на другие сайты

7 часов назад, logg сказал:

Не понял зачем это надо.

Так вместо 


LogWarning( " _______________ " ) -- Сюда подразумевалось выводить название ивента

LogInfo(event)

Выведет EVENT_ADDON_LOAD_STATE_CHANGED из массива events

Циклом создаю функции и помещаю их в массив. Следом подписываю функции на ивенты.

После отработки цикла функции есть и работают, но без переменных цикла, а переменная event, в которой хранится имя ивента и есть переменная цикла.

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, DSmmo сказал:

Никто что ль не знает как можно это решить??

local events = {"EVENT_ADDON_LOAD_STATE_CHANGED",  }
local reaction = {}

for _, event in ipairs( events ) do	
	reaction[ event ] = function ( params )
		LogInfo(event) -- Сюда мы и пишем имя эвента, которое будет выводиться
		
		if params then
			for key, value in pairs( params ) do
				LogInfo( key, ": ", value )
			end
		end
	end
	
	common.RegisterEventHandler( reaction[ event ], event )
end

И в лог, соответственно, пишет:

[23:37:55]Info: addon EventCollecter(0): EVENT_ADDON_LOAD_STATE_CHANGED
[23:37:55]Info: addon EventCollecter(0): debug: false
[23:37:55]Info: addon EventCollecter(0): loading: true
[23:37:55]Info: addon EventCollecter(0): name: UserAddon/EventCollecter
[23:37:55]Info: addon EventCollecter(0): unloading: true
[23:37:56]Info: addon EventCollecter(0): EVENT_SECOND_TIMER
[23:37:56]Info: addon EventCollecter(0): elapsedMs: 1006
[23:37:56]Info: addon EventCollecter(0): timeMs: 1564087076024
[23:37:57]Info: addon EventCollecter(0): EVENT_SECOND_TIMER
[23:37:57]Info: addon EventCollecter(0): elapsedMs: 1014
[23:37:57]Info: addon EventCollecter(0): timeMs: 1564087077038
[23:37:58]Info: addon EventCollecter(0): EVENT_SECOND_TIMER
[23:37:58]Info: addon EventCollecter(0): elapsedMs: 996
[23:37:58]Info: addon EventCollecter(0): timeMs: 1564087078034

Или оно не так должно работать?

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, DSmmo сказал:

Так...

Хм... в чем разница pairs и ipairs??

Ipairs проходит последовательно по индексам (пара индекс - значение ) в числовом порядке,  пока не встретит пару с nil значением ( не числовые ключи наподобие a["one"] он вообще не увидит, и какие-либо числовые после 1-ой пары с nil тоже) 

pairs же проходит по ключам (пара ключ - значение) то есть по всей таблице, но совсем не последовательно

Ссылка на комментарий
Поделиться на другие сайты

Поменял на ipairs - разницы нет... блииин
Версия клиента 4.0 (забыл ранее указать)
видимо мне придётся самому искать решение

Ссылка на комментарий
Поделиться на другие сайты

local events = { ..., "EVENT_ADDON_LOAD_STATE_CHANGED", ... }
local reaction = {}

for _, event in ipairs( events ) do
  	local event = event
	reaction[ event ] = function ( params )
		LogWarning(event)
		
		if params then
			for key, value in pairs( params ) do
				LogInfo( key, ": ", value )
			end
		end
	end
	
	common.RegisterEventHandler( reaction[ event ], event )
end

Lua 5.0.3

Ссылка на комментарий
Поделиться на другие сайты

Пробовал я локально сделать, но пробовал внутри функции... завтра попробую так сделать, отпишу.

Вопрос: разве eventtrack(могу допустить ошибку) в wow не удобная штука? Показывает ивенты и их параметры в реальном времени. Я пытаюсь сделать подобие для аллодов...

Ссылка на комментарий
Поделиться на другие сайты

21 час назад, LEM сказал:

local events = { ..., "EVENT_ADDON_LOAD_STATE_CHANGED", ... }
local reaction = {}

for _, event in ipairs( events ) do
  	local event = event
	reaction[ event ] = function ( params )
		LogWarning(event)
		
		if params then
			for key, value in pairs( params ) do
				LogInfo( key, ": ", value )
			end
		end
	end
	
	common.RegisterEventHandler( reaction[ event ], event )
end

Lua 5.0.3

Работает, спасибо)
Вопрос решен!

Ссылка на комментарий
Поделиться на другие сайты

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...

Важная информация

Пользуясь сайтом, вы принимаете Условия использования