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

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

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

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

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

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

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

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

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

Подробнее

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

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

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


jedbez

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

18 часов назад, snaikev сказал:

ВОПРОС:

как сделать так чтобы аддон принимал и завершал задание столько раз пока закончатся знаки рвения (по квесту берет по 50 знаков рвения)?

Всё что я могу придумать это что то такое, но вообще проблема не только с операторами, но и с формой записи:

["Олег Шпилёв"] = { WHILE { ( Знак Рвения > 49 ) "Обет Рвения" } }

или на алгоритмическом языке это: если Знак Рвения > 49, то "Обет Рвения" (или ["Олег Шпилёв"] = { "Обет Рвения" },)

if Знак Рвения > 49 then "Обет Рвения" (или ["Олег Шпилёв"] = { "Обет Рвения" },)

Такое не прокатит :)

Я специально делал аддон так, чтобы он не мог зацикливаться надолго. Иначе это чревато автоматическим отключением.

А что, знаки рвения теперь падают так часто, что это стало востребовано?

 

В 01.04.2017 в 19:52, narinoa сказал:

А можно еще добавить поддержку AOPanelMod?

Т.е. перенести туда кнопочку?

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

  • Ответов 111
  • Создана
  • Последний ответ

Топ авторов темы

да долго не сдавал много накопилось, можно так сказать. 
 

Аддон AutoSelectDialog

Настройка:
НПС, квесты и названия действий описываются в файле config.txt. Любой пользователь может добавлять и удалять в этом файле всё, что угодно (сохраняя общий формат), настраивая аддон под свои требования.

За один разговор с НПС (т.е. то время, пока открыта панель взаимодействия с НПС со списком квестов и действий) каждый квест, настроенный на автовыбор, аддон принимает и завершает лишь один раз.

["Олег Шпилёв"] = { "Обет Рвения" },

ВОПРОС:

как сделать так чтобы аддон принимал и завершал задание столько раз пока закончатся знаки рвения (по квесту берет по 50 знаков рвения)?

Всё что я могу придумать это что то такое, но вообще проблема не только с операторами, но и с формой записи:

["Олег Шпилёв"] = { WHILE { ( Знак Рвения > 49 ) "Обет Рвения" } }

или на алгоритмическом языке это: если Знак Рвения > 49, то "Обет Рвения" (или ["Олег Шпилёв"] = { "Обет Рвения" },)

if Знак Рвения > 49 then "Обет Рвения" (или ["Олег Шпилёв"] = { "Обет Рвения" },)
 

Я не совсем понимаю что тут написано.

 

Чтобы аддон делал то что тебе нужно - редактируешь его код (обычно самый большой луа файл в аддоне) чтобы он делал то что тебе нужно. В даном случае - при наличии знаков и соблюдении других условий (имя нпрц и наличие квеста) брал и завершал квест.

Скажите, а как в конфиге аддона

AutoSelectDialog

 зациклить квест "Обет Рвения"??? Чтобы он не отходил, подходил, а вырабатывал сразу все знаки рвения. Может есть простая команда в конфигурации?

В конфиге - никак. В конфиге только список квестов редактируется.

 

Конечно можно написать код для взаимодействия в самом файле конфига, но проще в таком случае написать весь аддон с нуля.

ну а ты можешь по быстрому написать вставку в луа, например, чтобы один квест выполнялся постоянно непрерывно. Я все другие квесты удалю из конфига и останется один просто "Обет Рвения" непрерывный. ?

я не смогу сам сделать луа файл и написать аддон, у меня нет баз данных на ссылки внутри файла луа и язык программирования я знаю паскаль и бэйсик, алгоритмический, а тут вроде C++ что ли

Ммм... Не. Луа, кстати, во многом проще многих других языков программирования.

я посмотрел вроде должно быть не так сложно, всё просто должно быть.

надо лишь разобраться в этой части аддона и зациклить все три функции

 

local acceptedOnce
local cached

-- After returning a quest other already finished quests could not disappear
-- from the list, so we can cache the list between calls. But other quests
-- might come to finished state after returning already finished, so after
-- returning a quest we have to continue searching for is there any other
-- quests to finish or otherwise destroy the cache to build a new next time.
function FinishQuest(interactorId)
    local flag = false
    local actions = autoSelectQuests[userMods.FromWString(object.GetName(interactorId))]
    if actions then
        if not cached then
            cached = {}
            local quests = object.GetInteractorQuests(interactorId)
            local imax = quests and GetTableSize(quests.readyToGive) or 0
            for i = 0, imax do
                if quests.readyToAccept then
                    local reward = avatar.GetQuestReward(quests.readyToAccept)
                    local cantReturn = reward and reward.alternativeItems and GetTableSize(reward.alternativeItems) > 1
                    if not cantReturn then
                        local info = avatar.GetQuestInfo(quests.readyToAccept)
                        local name = userMods.FromWString(ExtractWStringFromValuedText(info.name))
                        cached[name] = quests.readyToAccept
                    end
                end
            end
        end
        for j = 1, GetTableSize(actions) do
            local name = actions[j]
            if cached[name] then
                if flag then return flag end
                acceptedOnce[name] = true
                avatar.ReturnQuest(cached[name], nil)
                cached[name] = nil
                flag = true
            end
        end
    end
    cached = nil
    return flag
end

-- After accepting a quest any other available quest could disappear from
-- the list and/or new quests could appear, so we can not cache the list
-- and we have to request the list of available quests every time.
function AcceptQuest(interactorId)
    local actions = autoSelectQuests[userMods.FromWString(object.GetName(interactorId))]
    if actions then
        local quests = object.GetInteractorQuests(interactorId)
        local imax = quests and GetTableSize(quests.readyToGive) or 0
        if imax > 0 then
            local name = {}
            for j = 1, GetTableSize(actions) do
                if not acceptedOnce[ actions[j] ] then
                    for i = 0, imax do
                        if quests.readyToGive then
                            if not name then
                                local info = avatar.GetQuestInfo(quests.readyToGive)
                                name = userMods.FromWString(ExtractWStringFromValuedText(info.name))
                            end
                            if name == actions[j] then
                                acceptedOnce[ name ] = true
                                avatar.AcceptQuest(quests.readyToGive)
                                return true
                            end
                        end
                    end
                end
            end
        end
    end
end

function RunDialog(interactorId)
    local actions = autoSelectDialog[userMods.FromWString(object.GetName(interactorId))]
    if actions then
        for j = 1, GetTableSize(actions) do
            if type(actions[j]) == "function" then
                actions[j]()
            else --if type(actions[j]) == "string" then
                local choices = avatar.GetInteractorNextCues()
                for i = 0, GetTableSize(choices) do
                    if choices and userMods.FromWString(choices.name) == actions[j] then
                        avatar.SelectInteractorCue(i)
                        break
                    end
                end
            end
        end
    end
end

Описание игровых функций можешь найти в доках к игре.

Это по этому адресу? data\Mods\Docs а вы сами то играли хоть раз в аллоды онлайн? Или аддон пишет другой там Jed и hal.dll. Когда они будут дежурить или в сети?

 

Это по этому адресу.

Я играл в аллоды.

Кто пишет аддон - понятия не имею.

я посмотрел, да это очень интересно  data\Mods\Docs . Это может занять много времени на изучение. Легче уже вручную сделать квест хоть потратить неделю ручного труда по нажимании нескольких кнопок. Или попытаться найти простой автокликер на два нажатия левой кнопки мыши. Но мне не надо писать заново аддон, мне лишь немного изменить имеющийся. Это должно занять не так много времени.

Если напишешь аддон - получишь полезный опыт. Если потратишь неделю времени на клики - потеряешь неделю жизни.

  • Судя по всем вся эта цепочка вызывается из движка по событию
    "EVENT_INTERACTION_STARTED", которое вызывает OnInteractionStarted, которое ищет или FinishQuest, или AcceptQuest или RunDialog
     
     
    По идее должно быть событие 
    "EVENT_INTERACTION_FINISHED",
     
    Написал вставку в код.Можешь сказать где ошибка?


    проверил
     
     
  • в общем дело такое
     
     
  •  
    первый раз подходишь всё норм делает
     
     
  • второй раз подходишь делает делает только две функции
     
     
  • а функцию завершить не считывает

aoQm6NfHvRk.jpg

AutoSelectDialog.lua

там ниже этого кода вставка

  if not inProgress then 
OnTalkStarted() 
OnInteractionStarted() 
return 
end

или


elseif not inProgress then 
OnTalkStarted() 
OnInteractionStarted()

но что то всё равно остается всё так как в оригинале

Надо почитать какой ивент самый последний будет
надо бы документацию по API почитать, но сейчас нет времени

да, по идее нужно перезапустить интерактивную часть.
Но изначально она вызывается из движка, а не из луа.
А потом уже через callback дёргается луа функция
 

allods (1).txt

allods (2).txt

Event interaction started приходит когда ты начинаешь диалог с НПЦ.

 

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

Либо можно при наличии достаточного количества предметов после завершения диалога снова открывать диалог с НПЦ.

  • если верить описанию по ссылке, то проверку наличия предметов игра сама сделает, когда квест будет сдаваться. Получить же его можно и без предметов, т.е. после получения цепочка должна прерваться сама
  • В следующий (третий) разговор квест "Обет Рвения" будет только взят, но не засчитается из-за недостатка знаков рвения.

В таком случае нужно после принятия/сдачи квеста не прерывать диалог, а смотреть есть ли что принять/сдать снова. Например можно добавить в функцию еще один параметр, в котором будет храниться уровень рекурсии, и передавать в него число, на один большее текущего уровня, при числе большем нуля - не завершать диалог, и завершать работу функции, а при числе, скажем, 50 - завершать диалог.

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

5 часов назад, snaikev сказал:

да долго не сдавал много накопилось, можно так сказать. 

Пока можно просто прерывать диалог через Esc и запускать его вновь через контекстное действие (клавиша Z).

Можно еще попробовать удалить строки:

acceptedOnce[name] = true

и

acceptedOnce[ name[i] ] = true

Через config.txt это сделать будет сложно, получится вечный цикл.

 

И да, аддон изначально был написан Zeon-ом (он же Jed), потом полностью переписан мной. В итоге от Zeon-а в нем остались только идея и название. На данный момент (вяло) поддерживаю работоспособность. Новых функций не предвидится ввиду отсутствия интереса, времени и идей.

Код открыт. Любой желающий может добавить необходимый функционал и прислать мне. Если код будет написан с сохранением общей стилистики и аккуратности и текущего функционала, то я его готов выложить в виде обновления с отдельными благодарностями. :)

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

БОЛЬШОЕ, ОГРОМНОЕ СПАСИБО=)) Помогло идеально=)) Вы просто боги программирования=))

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

18 часов назад, hal.dll сказал:

Т.е. перенести туда кнопочку?

Если установлен AOpanel, то стандартная кнопка скрывается, а появляется на панели, а если ее нет то показывается стандартна. 

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

  • 2 недели спустя...
В 04.04.2017 в 15:18, narinoa сказал:

Если установлен AOpanel, то стандартная кнопка скрывается, а появляется на панели, а если ее нет то показывается стандартна. 

Так годится?

btn1.png

btn2.png

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

3 часа назад, hal.dll сказал:

Так годится?

Все просто замечательно.

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

Окей, оно все равно не работает :lol: Может быть проблема в том, что у меня AOPanelMod, а у вы делаете интеграцию для простого AOPanel? Я просто не знаю, кто его еще использует, но вроде бы аддоны не интегрируются сразу в обе панели.

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

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

Окей, оно все равно не работает :lol: Может быть проблема в том, что у меня AOPanelMod, а у вы делаете интеграцию для простого AOPanel? Я просто не знаю, кто его еще использует, но вроде бы аддоны не интегрируются сразу в обе панели.

Да, я понял, что не работает. С момента вашего сообщения на предыдущей странице я уже успел забыть, что изначально вы просили под AOPanelMod, более того, забыл о самом факте существования AOPanelMod.:sarcastic:

Да, мой косяк, вечером сегодня займусь.

 

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

Не видит иконки аддона (вкл/выкл). AOPanelMod не использую. Сам аддон работает, диалоги с некоторыми нпс начинает)

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

В 23.04.2017 в 02:35, Псковский сказал:

Не видит иконки аддона (вкл/выкл). 

Кнопку еще можно вызвать с помощью слеш-команды /asd. 

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

  • 1 месяц спустя...

Привет! Спасибо за отличный аддон!

Можно ли сделать так, чтобы при выполнении всех функций окно диалога закрывалось?

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

  • 2 месяца спустя...

Почему может не появляться диалог с НПС, соответственно квесты не берутся и не сдаются автоматически, только если кликнуть самому вручную, для открытия диалога, а дальше все берется/сдается?

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

56 минут назад, zheka8585 сказал:

Почему может не появляться диалог с НПС, соответственно квесты не берутся и не сдаются автоматически, только если кликнуть самому вручную, для открытия диалога, а дальше все берется/сдается?

Как вариант, имени НПС нет в списке autoStartDialog, или оно указано неверно. С остальными НПС всё в порядке при этом?

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

Только что, hal.dll сказал:

Как вариант, имени НПС нет в списке autoStartDialog, или оно указано неверно. С остальными НПС всё в порядке при этом?

Только вчера скачал, поэтому в полной мере не успел поюзать, но с другими НПС пока все норм )

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

  • 1 год спустя...

Что-то случилось с диалогами у профессоров Мефодия и Саранга. Не берет и не завершает ни один урок ни в лиге, ни в империи. Проверила конфиг, все на своих местах как и было... При подходе к профу диалог открывается как и положено, но пункты не берутся. Названия уроков соответствуют написанному. До обновы все работало отлично. Ума не приложу в чем дело (

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

41 минуту назад, asia сказал:

Что-то случилось с диалогами у профессоров Мефодия и Саранга. Не берет и не завершает ни один урок ни в лиге, ни в империи. Проверила конфиг, все на своих местах как и было... При подходе к профу диалог открывается как и положено, но пункты не берутся. Названия уроков соответствуют написанному. До обновы все работало отлично. Ума не приложу в чем дело (

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

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

Нет, это я сразу попробовала. У меня тоже автоквест стоит и я его при каждом входе перезапускаю. Тут что-то другое... Затык именно с профессорами, с остальными неписями все в порядке... Ну, из тех, коими я пользуюсь... Есть довольно сложные диалоги с заданиями, и они выполняются.

Раз сам диалог открывается, значит профессоров аддон узнает, что-то не так в процессе опознания самих квестов. То ли разрабы начудили и скажем вместо русской "е" поставили английскую, то ли еще что...

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

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

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

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

Да, они самые. Вот код на них:

Скрытый текст

-- Ученье    
    ["Саранг Хурум"] = { "Ученье - свет: первый урок", "Ученье - свет: второй урок", "Ученье - свет: третий урок", "Ученье - свет: четвертый урок", "Ученье - свет: пятый урок", "Ученье - свет: шестой урок", "Ученье - свет: седьмой урок", "Ученье - свет: восьмой урок", "Ученье - свет: девятый урок", "Ученье - свет: последний урок"  },
    ["Мефодий Знатоков"] = { "Ученье - свет: первый урок", "Ученье - свет: второй урок", "Ученье - свет: третий урок", "Ученье - свет: четвертый урок", "Ученье - свет: пятый урок", "Ученье - свет: шестой урок", "Ученье - свет: седьмой урок", "Ученье - свет: восьмой урок", "Ученье - свет: девятый урок", "Ученье - свет: последний урок"  },

 

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

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

Да, они самые. Вот код на них:

Просто в квестах не дефис, а длинное тире:

Ученье — свет: первый урок

 

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

Спасибо, мил-человек, выручил! 😍

Блин, как страшно жить! Это же ведь маньяк какой-то орудует... Видимо, хотел изнасиловать меня в темном закоулке, но я там не хожу, и вот он просочился в ряды разрабов АО и решил меня достать оттуда. Единственную на планете, которая пользует этот аддон для учебных квестов... Жесть!

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

  • 1 год спустя...

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

	["Хрюк"] = { ""Злая девка" пошла ко дну! Меня Вонючий Жо прислал!", WAIT, "Вонючий Жо хочет узнать, када ему заплатят остаток.", WAIT, "Жо боится, что заказчик нас кинет!", WAIT, "Он хочет гарантий, никто ж из команды не знает, что это за заказчик..." },

В диалоге именно так "Злая девка"... (

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

Есть три способа решить эту проблему:

1. Экранируем кавычки

"\"Злая девка\" пошла ко дну! Меня Вонючий Жо прислал!"

2. Оборачиваем реплику в одинарные кавычки

'"Злая девка" пошла ко дну! Меня Вонючий Жо прислал!'

3. Используем синтаксис многострочного текста

[["Злая девка" пошла ко дну! Меня Вонючий Жо прислал!]]
Ссылка на комментарий
Поделиться на другие сайты

ВНИМАНИЕ!
Обязательна информация из \Personal\Logs\mods.txt для диагностики ошибки.
Иначе вам не помочь.
В игре включите в Меню → Интерфейс → Общие настройки → Запись ошибок пользовательских дополнений. Затем запустите аддон в игре.
Гость
Ответить в этой теме...

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

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

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

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

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

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

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

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