Guest lomus Posted January 14, 2010 Share Posted January 14, 2010 Имею: время, скилы и желание сделать оффлайновый либо онлайновый анализатор лога прошедшего боя, с выводом в красивые таблички. (Смотреть ДПС/ХПС, дамажащие скиллы и прочия, прочия). Не имею: возможности сохранить лог боя в текстовый файл. Кто-то знает как это можно сделать? Может где-то в каком-то конфиге есть параметр WriteCombatLog = False? Quote Link to comment Share on other sites More sharing options...
SLA Posted January 15, 2010 Share Posted January 15, 2010 Выход есть. По-первых, насчёт лога боя, загляни в тему [Комбат Лог] События в мире. Во-вторых, сохранять текстовые данные можно в файл user.cfg (Согласен, неудобно, но других способов пока вроде нет. Хотя, может можно в LOG-файл как-то писать, где-то я про такое слышал, кажется) Делается это через тот же API, который используется в оригинальных LUA. Как пример, можешь посмотреть, как пишут в user.cfg аддоны !AstralDBi.pak и !AstralDBs.pak, которые устанавливаются вместе с Astral Updater (программой обновления аддонов). В-третьих, обязательно прочти инструкцию по созданию аддонов. Quote Link to comment Share on other sites More sharing options...
Guest lomus Posted January 15, 2010 Share Posted January 15, 2010 Посмотрел тему, буду пробовать. Проблема в том, что я не очень силен в Lua, хотя с другой стороны одним скриптовым языком больше одним меньше (пишу на питоне, перле и пхп). Не будет ли все дико тормозить, если все данные туда загонять? При включенных события в мире в комбат лог ведь сыпется огромное количество информации. Еще я видел тут когда-то тему, где человек давал возможность менять конфигурационные файлы подменой какого-то файла с чексуммами. Никто не пробовал накопать, может быть там есть параметры ведения логов? Quote Link to comment Share on other sites More sharing options...
SLA Posted January 15, 2010 Share Posted January 15, 2010 Без аддона на LUA тебе не обойтись никак. Я тоже не силён в LUA, но он очень смахивает на Python, так что проблем с освоением быть не должно. Если что, в интернете полно учебников по LUA. Тормозить будет, когда user.cfg сильно разрастётся. Поэтому, твоя программа, которая будет собирать из него данные, должна также его чистить. Чтобы менять конфигурационные файлы, тебе нужно взломать файл game.version. Это делается программой game.ver.truncator, которая лежит в теме AO Tools. Quote Link to comment Share on other sites More sharing options...
Guest lomus Posted January 15, 2010 Share Posted January 15, 2010 Я просто сильно надеялся, что такой функционал есть уже в движке, просто отключен в конфигах. Ладно, в принципе как писать данные понятно, а чистить я думаю можно при каждом старте игры, надо просто сделать небольшой скриптик на запуск, который будет перекидывать собранные данные из предыдущей сессии куда-то мне в папочку логов. С учетом того, что у меня клиент стабильно вылетает каждые пол-часа / час может и не будет тормозить. И последний вопрос, кто-то может помочь загнать все в user.cfg в любом формате? Подойдет даже в текстовом, уж дальше я бы разобрался, конечно, я наверное и сам смогу просто это займет больше времени. Quote Link to comment Share on other sites More sharing options...
SLA Posted January 15, 2010 Share Posted January 15, 2010 Чистить, кстати, можно только тогда, когда игра не запущена. Т.к. во время работы, она блокирует все свои файлы, т.е. пока она запущена, доступа на запись user.cfg НЕ будет. Quote Link to comment Share on other sites More sharing options...
Guest lomus Posted January 15, 2010 Share Posted January 15, 2010 Ну это понятно, я имел в виду скрипт на запуск игры. Т.е. чтобы чистить до того как игра запущена. Quote Link to comment Share on other sites More sharing options...
DarkMaster Posted January 15, 2010 Share Posted January 15, 2010 Пример записи в user.cfg Code: function WriteAllTargetBuffInfoToCfg() local Target = avatar.GetTarget() if Target then local buff_count = unit.GetBuffCount( Target ) local buff local section = {} if buff_count > 0 then for i = 0, buff_count - 1 do buff = unit.GetBuff( Target, i ) section = buff.debugName end end common.SetGlobalConfigSection( "TARGET_BUFF_LIBRARY", section ) end end Пример того что он туда запишет Code: table_begin ScriptLocal_TARGET_BUFF_LIBRARY table_begin data int_keys_begin data 0 = l"Mechanics/Spells/Paladin/HolyStrike/Buff01.xdb" int_keys_end data table_end data remote_version = -1 table_end ScriptLocal_TARGET_BUFF_LIBRARY Quote Link to comment Share on other sites More sharing options...
Guest lomus Posted January 15, 2010 Share Posted January 15, 2010 О, огромное спасибо. Как я понимаю если бы бафов было несколько, то в int_keys_begin data было бы несколько строк, правильно? Quote Link to comment Share on other sites More sharing options...
Guest lomus Posted January 15, 2010 Share Posted January 15, 2010 В общем нарыл вот что: Ingame\AncestralCombatLog\ScriptCombatLog.lua Похоже именно тут обрабатывается вывод данных в комбат лог. Есть вот такая функция: function AddNewText( valuedText, flag ) { ... } Вот кто подскажет, как глобально определить какую-то переменную, по умолчанию допустим равную нулю и секцию? Чтобы можно было в этой функции вписать: section [log_line] = {} section [log_line].text = valuedText section [log_line].flag = flag log_line = log_line + 1 common.SetGlobalConfigSection( "COMBAT_LOG_TEXTS", section ) Это просто для теста, что попал в нужное место. Там есть отдельные хэндлеры на все события боя, по уму естественно надо сохранять оттуда, но если сохранить тут то все будет просто и наглядно. Quote Link to comment Share on other sites More sharing options...
DarkMaster Posted January 17, 2010 Share Posted January 17, 2010 Обявление глобальной переменой : -- CONSTANTS Global( "MyVariable", 0 ) Global( "GlobalSectionName", "SECTION_NAME" ) . . . MyVariable = MyVariable + 1 *)))) я перстал пписчать аддоны для АО *) Но опытом поделюсь с удовольствием Quote Link to comment Share on other sites More sharing options...
Denai Posted January 19, 2010 Share Posted January 19, 2010 можете поделиться теми самыми !AstralDBi.pak и !AstralDBs.pak либо рецептом как записывать данные о вещах в файл? упомянутая прога файлы эти не качает, а взять больше негде( переписывать со скриншотов слишком утомительно,а баз того что хочется переписать в инетах нет( Quote Link to comment Share on other sites More sharing options...
Guest lomus Posted January 22, 2010 Share Posted January 22, 2010 В общем, я пытался изменять то место, которое показалось мне ответственным за вывод логов. Ничего вообще не происходило, даже когда я просто пытался вывести одну и ту же строку два раза (т.е. просто дублировал существующую строку из кода). В связи со всем этим возникло несколько вопросов: 1. Что происходит, если в коде скрипта допущена синтаксическая ошибка? 2. Как можно отлаживать скрипты? 3. Как понять, что скрипт хотя-бы запустился? Буду признателен за любую помощь. Quote Link to comment Share on other sites More sharing options...
SLA Posted January 22, 2010 Share Posted January 22, 2010 1. Вопрос очень хороший. Насколько я разобрался (на опыте создания одного простого аддона), если в скрипте есть синтаксическая ошибка, то вместо него будет использоваться оригинальный ниваловский скрипт. Такое у меня случалось, когда я делал AutoAcceptEula. Хотя, когда-то давно, я где-то слышал, что у кого-то скрипт с ошибкой запускался, просто показывал пустое окно (если скрипт отвечает за какое-то окно. Хотя, мой-то тоже отвечает за окно с лицензией). В общем, однозначного ответа у меня нет, пусть лучше ответит кто-нибудь поопытнее меня. 2. Проверять синтаксис можно любым LUA-компилятором. Если скомпилировался, значит синтаксических ошибок нет. 3. Вроде, для проверки, ты всё правильно сделал, продублировав строку. Но скрипт, говоришь, не сработал? Может в нём где-то всё-таки синтаксическая ошибка есть? Или попробуй как-нибудь по-другому, какое-нибудь другое место в скрипте. Скрипт версии 1.0.03, сам по себе, может быть устаревшим, поэтому, какие-то его части могут не работать в современной версии игры. Кстати, есть и хорошая новость, Kosh научился декомпилировать современные скрипты. EDIT: Хороший LUA-редактор с проверкой синтаксиса (по нажатии Ctrl+Alt+C) - LuaEdit 2010 Quote Link to comment Share on other sites More sharing options...
Guest Valltron Posted January 22, 2010 Share Posted January 22, 2010 1. Если в коде скрипта ошибка, то он не грузится и функции этого скрипта не работают. совсем. 3. Соответственно, если работают функции, которые этот скрипт выполняет, значит скрипт загрузился. 2. Смотря что отлаживать. если смотреть что приходит в функцию в параметрах, то скидаваю все в user.cfg если смотреть как та или иная команда работает - то после каждого изменения запускаю игру... Quote Link to comment Share on other sites More sharing options...
Guest lomus Posted January 22, 2010 Share Posted January 22, 2010 На счет декомпиляции я уже слышал. Но пока не хочется напрягать человека. Возможно, это не тот скрипт я правил, а тот что отвечает за вывод в реальные логи (которые наверняка где-то включаются, знать бы где) Буду дальше рыть, может что-то и найдется. Quote Link to comment Share on other sites More sharing options...
Guest Valltron Posted January 22, 2010 Share Posted January 22, 2010 Да, кстати, сейчас, если я ничего не путаю, скрипты AncestralCombatLog\ScriptCombatLog.lua не используются совсем игрой. поэтому у тя и ничего не изменилось. В воскресенье я хочу потратить время на аддоны, так что попробую и тебе чтонить нарыть Quote Link to comment Share on other sites More sharing options...
Recommended Posts