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

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

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

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

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

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

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

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

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

Подробнее

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

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

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

snaikev

Пользователь
  • Постов

    4
  • Зарегистрирован

  • Посещение

Посетители профиля

454 просмотра профиля

Достижения snaikev

Новичок

Новичок (1/14)

  • Первая неделя позади
  • Один месяц спустя
  • Год с нами

Последние значки

  1. БОЛЬШОЕ, ОГРОМНОЕ СПАСИБО=)) Помогло идеально=)) Вы просто боги программирования=))
  2. да долго не сдавал много накопилось, можно так сказать. snaikev Беседа создана: 18 часов назад · Жалоба Аддон AutoSelectDialog Настройка:НПС, квесты и названия действий описываются в файле config.txt. Любой пользователь может добавлять и удалять в этом файле всё, что угодно (сохраняя общий формат), настраивая аддон под свои требования. За один разговор с НПС (т.е. то время, пока открыта панель взаимодействия с НПС со списком квестов и действий) каждый квест, настроенный на автовыбор, аддон принимает и завершает лишь один раз. ["Олег Шпилёв"] = { "Обет Рвения" }, ВОПРОС: как сделать так чтобы аддон принимал и завершал задание столько раз пока закончатся знаки рвения (по квесту берет по 50 знаков рвения)? Всё что я могу придумать это что то такое, но вообще проблема не только с операторами, но и с формой записи: ["Олег Шпилёв"] = { WHILE { ( Знак Рвения > 49 ) "Обет Рвения" } } или на алгоритмическом языке это: если Знак Рвения > 49, то "Обет Рвения" (или ["Олег Шпилёв"] = { "Обет Рвения" },) if Знак Рвения > 49 then "Обет Рвения" (или ["Олег Шпилёв"] = { "Обет Рвения" },) Цитата Setras Ответил: 18 часов назад · Жалоба Я не совсем понимаю что тут написано. Чтобы аддон делал то что тебе нужно - редактируешь его код (обычно самый большой луа файл в аддоне) чтобы он делал то что тебе нужно. В даном случае - при наличии знаков и соблюдении других условий (имя нпрц и наличие квеста) брал и завершал квест. Цитата snaikev Ответил: 18 часов назад · Жалоба Скажите, а как в конфиге аддона AutoSelectDialog зациклить квест "Обет Рвения"??? Чтобы он не отходил, подходил, а вырабатывал сразу все знаки рвения. Может есть простая команда в конфигурации? Цитата Setras Ответил: 18 часов назад · Жалоба В конфиге - никак. В конфиге только список квестов редактируется. Конечно можно написать код для взаимодействия в самом файле конфига, но проще в таком случае написать весь аддон с нуля. Цитата snaikev Ответил: 18 часов назад · Жалоба ну а ты можешь по быстрому написать вставку в луа, например, чтобы один квест выполнялся постоянно непрерывно. Я все другие квесты удалю из конфига и останется один просто "Обет Рвения" непрерывный. ? Цитата snaikev Ответил: 18 часов назад · Жалоба я не смогу сам сделать луа файл и написать аддон, у меня нет баз данных на ссылки внутри файла луа и язык программирования я знаю паскаль и бэйсик, алгоритмический, а тут вроде C++ что ли Цитата Setras Ответил: 16 часов назад · Жалоба Ммм... Не. Луа, кстати, во многом проще многих других языков программирования. Цитата snaikev Ответил: 16 часов назад · Жалоба я посмотрел вроде должно быть не так сложно, всё просто должно быть. надо лишь разобраться в этой части аддона и зациклить все три функции 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 Цитата Setras Ответил: 16 часов назад · Жалоба Описание игровых функций можешь найти в доках к игре. Цитата snaikev Ответил: 16 часов назад · Жалоба Это по этому адресу? data\Mods\Docs а вы сами то играли хоть раз в аллоды онлайн? Или аддон пишет другой там Jed и hal.dll. Когда они будут дежурить или в сети? Цитата Setras Ответил: 15 часов назад · Жалоба Это по этому адресу. Я играл в аллоды. Кто пишет аддон - понятия не имею. Цитата snaikev Ответил: 15 часов назад · Жалоба я посмотрел, да это очень интересно data\Mods\Docs . Это может занять много времени на изучение. Легче уже вручную сделать квест хоть потратить неделю ручного труда по нажимании нескольких кнопок. Или попытаться найти простой автокликер на два нажатия левой кнопки мыши. Но мне не надо писать заново аддон, мне лишь немного изменить имеющийся. Это должно занять не так много времени. Цитата Setras Ответил: 15 часов назад · Жалоба Если напишешь аддон - получишь полезный опыт. Если потратишь неделю времени на клики - потеряешь неделю жизни. Цитата snaikev Ответил: 6 часов назад · Жалоба Судя по всем вся эта цепочка вызывается из движка по событию "EVENT_INTERACTION_STARTED", которое вызывает OnInteractionStarted, которое ищет или FinishQuest, или AcceptQuest или RunDialog По идее должно быть событие "EVENT_INTERACTION_FINISHED", Написал вставку в код.Можешь сказать где ошибка? проверил в общем дело такое первый раз подходишь всё норм делает второй раз подходишь делает делает только две функции а функцию завершить не считывает AutoSelectDialog.lua Цитата snaikev Ответил: 5 часов назад · Жалоба там ниже этого кода вставка if not inProgress then OnTalkStarted() OnInteractionStarted() return end или elseif not inProgress then OnTalkStarted() OnInteractionStarted() но что то всё равно остается всё так как в оригинале Надо почитать какой ивент самый последний будет надо бы документацию по API почитать, но сейчас нет времени да, по идее нужно перезапустить интерактивную часть.Но изначально она вызывается из движка, а не из луа.А потом уже через callback дёргается луа функция allods (1).txt allods (2).txt Цитата Setras Ответил: 5 часов назад · Жалоба Event interaction started приходит когда ты начинаешь диалог с НПЦ. Я не знаю как сейчас работает сдача и прием квеста, но по-моему это можно делать в одном диалоге. Т.е. вместо того чтобы завершить диалог, нужно снова выполнить функцию по поиску нужного квеста, возможно рекурсивно. Цитата Setras Ответил: 5 часов назад · Жалоба Либо можно при наличии достаточного количества предметов после завершения диалога снова открывать диалог с НПЦ. Цитата snaikev Ответил: 4 часа назад · Жалоба если верить описанию по ссылке, то проверку наличия предметов игра сама сделает, когда квест будет сдаваться. Получить же его можно и без предметов, т.е. после получения цепочка должна прерваться сама В следующий (третий) разговор квест "Обет Рвения" будет только взят, но не засчитается из-за недостатка знаков рвения. Цитата Setras Ответил: 4 часа назад · Жалоба В таком случае нужно после принятия/сдачи квеста не прерывать диалог, а смотреть есть ли что принять/сдать снова. Например можно добавить в функцию еще один параметр, в котором будет храниться уровень рекурсии, и передавать в него число, на один большее текущего уровня, при числе большем нуля - не завершать диалог, и завершать работу функции, а при числе, скажем, 50 - завершать диалог.
  3. Аддон AutoSelectDialog Настройка:НПС, квесты и названия действий описываются в файле config.txt. Любой пользователь может добавлять и удалять в этом файле всё, что угодно (сохраняя общий формат), настраивая аддон под свои требования. За один разговор с НПС (т.е. то время, пока открыта панель взаимодействия с НПС со списком квестов и действий) каждый квест, настроенный на автовыбор, аддон принимает и завершает лишь один раз. ["Олег Шпилёв"] = { "Обет Рвения" }, ВОПРОС: как сделать так чтобы аддон принимал и завершал задание столько раз пока закончатся знаки рвения (по квесту берет по 50 знаков рвения)? Всё что я могу придумать это что то такое, но вообще проблема не только с операторами, но и с формой записи: ["Олег Шпилёв"] = { WHILE { ( Знак Рвения > 49 ) "Обет Рвения" } } или на алгоритмическом языке это: если Знак Рвения > 49, то "Обет Рвения" (или ["Олег Шпилёв"] = { "Обет Рвения" },) if Знак Рвения > 49 then "Обет Рвения" (или ["Олег Шпилёв"] = { "Обет Рвения" },)
  4. Скажите, а как в конфиге аддона AutoSelectDialog зациклить квест "Обет Рвения"??? Чтобы он не отходил, подходил, а вырабатывал сразу все знаки рвения. Может есть простая команда в конфигурации?
×
×
  • Создать...

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

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