Jump to content
Alloder.pro  about Allods with love 😱
Search In
  • More options...
Find results that contain...
Find results in...

Servers monitoring and the Addons Editor

We present you two legends. All dreams come true.

Servers monitoring The Addons Editor

Digest April

We talk about what was done and updated in the past month. We help keep abreast of events.

Read more

Game tooltips

Tooltips provide a way for 3rd party fansites and extensions to display detailed information on mouseover.

Read more

Сохранение лога боя в текстовый файл.


Guest lomus
 Share

Recommended Posts

Имею: время, скилы и желание сделать оффлайновый либо онлайновый анализатор лога прошедшего боя, с выводом в красивые таблички. (Смотреть ДПС/ХПС, дамажащие скиллы и прочия, прочия).

Не имею: возможности сохранить лог боя в текстовый файл.

Кто-то знает как это можно сделать?

Может где-то в каком-то конфиге есть параметр WriteCombatLog = False?

Link to comment
Share on other sites

Выход есть.

По-первых, насчёт лога боя, загляни в тему [Комбат Лог] События в мире.

Во-вторых, сохранять текстовые данные можно в файл user.cfg (Согласен, неудобно, но других способов пока вроде нет. Хотя, может можно в LOG-файл как-то писать, где-то я про такое слышал, кажется)

Делается это через тот же API, который используется в оригинальных LUA.

Как пример, можешь посмотреть, как пишут в user.cfg аддоны !AstralDBi.pak и !AstralDBs.pak, которые устанавливаются вместе с Astral Updater (программой обновления аддонов).

В-третьих, обязательно прочти инструкцию по созданию аддонов.

Link to comment
Share on other sites

Посмотрел тему, буду пробовать. Проблема в том, что я не очень силен в Lua, хотя с другой стороны одним скриптовым языком больше одним меньше (пишу на питоне, перле и пхп). Не будет ли все дико тормозить, если все данные туда загонять?

При включенных события в мире в комбат лог ведь сыпется огромное количество информации.

Еще я видел тут когда-то тему, где человек давал возможность менять конфигурационные файлы подменой какого-то файла с чексуммами. Никто не пробовал накопать, может быть там есть параметры ведения логов?

Link to comment
Share on other sites

Без аддона на LUA тебе не обойтись никак. Я тоже не силён в LUA, но он очень смахивает на Python, так что проблем с освоением быть не должно. Если что, в интернете полно учебников по LUA.

Тормозить будет, когда user.cfg сильно разрастётся. Поэтому, твоя программа, которая будет собирать из него данные, должна также его чистить.

Чтобы менять конфигурационные файлы, тебе нужно взломать файл game.version. Это делается программой game.ver.truncator, которая лежит в теме AO Tools.

Link to comment
Share on other sites

Я просто сильно надеялся, что такой функционал есть уже в движке, просто отключен в конфигах.

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

С учетом того, что у меня клиент стабильно вылетает каждые пол-часа / час может и не будет тормозить.

И последний вопрос, кто-то может помочь загнать все в user.cfg в любом формате?

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

Link to comment
Share on other sites

Чистить, кстати, можно только тогда, когда игра не запущена. Т.к. во время работы, она блокирует все свои файлы, т.е. пока она запущена, доступа на запись user.cfg НЕ будет.

Link to comment
Share on other sites

Ну это понятно, я имел в виду скрипт на запуск игры. Т.е. чтобы чистить до того как игра запущена.

Link to comment
Share on other sites

Пример записи в 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

Link to comment
Share on other sites

О, огромное спасибо.

Как я понимаю если бы бафов было несколько, то в int_keys_begin data было бы несколько строк, правильно?

Link to comment
Share on other sites

В общем нарыл вот что:

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 )

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

Link to comment
Share on other sites

Обявление глобальной переменой :

-- CONSTANTS

Global( "MyVariable", 0 )

Global( "GlobalSectionName", "SECTION_NAME" )

.

.

.

MyVariable = MyVariable + 1

*)))) я перстал пписчать аддоны для АО *) Но опытом поделюсь с удовольствием

Link to comment
Share on other sites

можете поделиться теми самыми !AstralDBi.pak и !AstralDBs.pak либо рецептом как записывать данные о вещах в файл?

упомянутая прога файлы эти не качает, а взять больше негде(

переписывать со скриншотов слишком утомительно,а баз того что хочется переписать в инетах нет(

Link to comment
Share on other sites

В общем, я пытался изменять то место, которое показалось мне ответственным за вывод логов.

Ничего вообще не происходило, даже когда я просто пытался вывести одну и ту же строку два раза (т.е. просто дублировал существующую строку из кода).

В связи со всем этим возникло несколько вопросов:

1. Что происходит, если в коде скрипта допущена синтаксическая ошибка?

2. Как можно отлаживать скрипты?

3. Как понять, что скрипт хотя-бы запустился?

Буду признателен за любую помощь.

Link to comment
Share on other sites

1. Вопрос очень хороший. Насколько я разобрался (на опыте создания одного простого аддона), если в скрипте есть синтаксическая ошибка, то вместо него будет использоваться оригинальный ниваловский скрипт. Такое у меня случалось, когда я делал AutoAcceptEula. Хотя, когда-то давно, я где-то слышал, что у кого-то скрипт с ошибкой запускался, просто показывал пустое окно (если скрипт отвечает за какое-то окно. Хотя, мой-то тоже отвечает за окно с лицензией). В общем, однозначного ответа у меня нет, пусть лучше ответит кто-нибудь поопытнее меня.

2. Проверять синтаксис можно любым LUA-компилятором. Если скомпилировался, значит синтаксических ошибок нет.

3. Вроде, для проверки, ты всё правильно сделал, продублировав строку. Но скрипт, говоришь, не сработал? Может в нём где-то всё-таки синтаксическая ошибка есть? Или попробуй как-нибудь по-другому, какое-нибудь другое место в скрипте. Скрипт версии 1.0.03, сам по себе, может быть устаревшим, поэтому, какие-то его части могут не работать в современной версии игры. Кстати, есть и хорошая новость, Kosh научился декомпилировать современные скрипты.

EDIT: Хороший LUA-редактор с проверкой синтаксиса (по нажатии Ctrl+Alt+C) - LuaEdit 2010

Link to comment
Share on other sites

Guest Valltron

1. Если в коде скрипта ошибка, то он не грузится и функции этого скрипта не работают. совсем.

3. Соответственно, если работают функции, которые этот скрипт выполняет, значит скрипт загрузился.

2. Смотря что отлаживать. если смотреть что приходит в функцию в параметрах, то скидаваю все в user.cfg если смотреть как та или иная команда работает - то после каждого изменения запускаю игру...

Link to comment
Share on other sites

На счет декомпиляции я уже слышал. Но пока не хочется напрягать человека.

Возможно, это не тот скрипт я правил, а тот что отвечает за вывод в реальные логи (которые наверняка где-то включаются, знать бы где)

Буду дальше рыть, может что-то и найдется.

Link to comment
Share on other sites

Guest Valltron

Да, кстати, сейчас, если я ничего не путаю, скрипты AncestralCombatLog\ScriptCombatLog.lua не используются совсем игрой. поэтому у тя и ничего не изменилось.

В воскресенье я хочу потратить время на аддоны, так что попробую и тебе чтонить нарыть

Link to comment
Share on other sites

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

By using our site you agree to the Terms of Use