snaikev
-
Постов
4 -
Зарегистрирован
-
Посещение
Тип контента
Загрузки
Форумы
Статьи и объявления
Гардероб
Маунты
Сообщения Allods Team
Трекер ошибок
Магазин
Галерея
Сообщения, опубликованные snaikev
-
-
да долго не сдавал много накопилось, можно так сказать.
Аддон 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
endfunction 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 . Это может занять много времени на изучение. Легче уже вручную сделать квест хоть потратить неделю ручного труда по нажимании нескольких кнопок. Или попытаться найти простой автокликер на два нажатия левой кнопки мыши. Но мне не надо писать заново аддон, мне лишь немного изменить имеющийся. Это должно занять не так много времени.
Если напишешь аддон - получишь полезный опыт. Если потратишь неделю времени на клики - потеряешь неделю жизни.
-
Судя по всем вся эта цепочка вызывается из движка по событию
"EVENT_INTERACTION_STARTED", которое вызывает OnInteractionStarted, которое ищет или FinishQuest, или AcceptQuest или RunDialogПо идее должно быть событиеНаписал вставку в код.Можешь сказать где ошибка?
"EVENT_INTERACTION_FINISHED",
проверил -
в общем дело такое
-
первый раз подходишь всё норм делает
-
второй раз подходишь делает делает только две функции
-
а функцию завершить не считывает
там ниже этого кода вставка
if not inProgress then
OnTalkStarted()
OnInteractionStarted()
return
end
или
elseif not inProgress then
OnTalkStarted()
OnInteractionStarted()
но что то всё равно остается всё так как в оригинале
Надо почитать какой ивент самый последний будет
надо бы документацию по API почитать, но сейчас нет времени
да, по идее нужно перезапустить интерактивную часть.
Но изначально она вызывается из движка, а не из луа.
А потом уже через callback дёргается луа функция
Event interaction started приходит когда ты начинаешь диалог с НПЦ.
Я не знаю как сейчас работает сдача и прием квеста, но по-моему это можно делать в одном диалоге. Т.е. вместо того чтобы завершить диалог, нужно снова выполнить функцию по поиску нужного квеста, возможно рекурсивно.
Либо можно при наличии достаточного количества предметов после завершения диалога снова открывать диалог с НПЦ.
-
если верить описанию по ссылке, то проверку наличия предметов игра сама сделает, когда квест будет сдаваться. Получить же его можно и без предметов, т.е. после получения цепочка должна прерваться сама
-
В следующий (третий) разговор квест "Обет Рвения" будет только взят, но не засчитается из-за недостатка знаков рвения.
В таком случае нужно после принятия/сдачи квеста не прерывать диалог, а смотреть есть ли что принять/сдать снова. Например можно добавить в функцию еще один параметр, в котором будет храниться уровень рекурсии, и передавать в него число, на один большее текущего уровня, при числе большем нуля - не завершать диалог, и завершать работу функции, а при числе, скажем, 50 - завершать диалог.
-
-
Аддон AutoSelectDialog
Настройка:
НПС, квесты и названия действий описываются в файле config.txt. Любой пользователь может добавлять и удалять в этом файле всё, что угодно (сохраняя общий формат), настраивая аддон под свои требования.
За один разговор с НПС (т.е. то время, пока открыта панель взаимодействия с НПС со списком квестов и действий) каждый квест, настроенный на автовыбор, аддон принимает и завершает лишь один раз.
["Олег Шпилёв"] = { "Обет Рвения" },
ВОПРОС:
как сделать так чтобы аддон принимал и завершал задание столько раз пока закончатся знаки рвения (по квесту берет по 50 знаков рвения)?
Всё что я могу придумать это что то такое, но вообще проблема не только с операторами, но и с формой записи:
["Олег Шпилёв"] = { WHILE { ( Знак Рвения > 49 ) "Обет Рвения" } }
или на алгоритмическом языке это: если Знак Рвения > 49, то "Обет Рвения" (или ["Олег Шпилёв"] = { "Обет Рвения" },)
if Знак Рвения > 49 then "Обет Рвения" (или ["Олег Шпилёв"] = { "Обет Рвения" },) -
Скажите, а как в конфиге аддона
AutoSelectDialog
зациклить квест "Обет Рвения"??? Чтобы он не отходил, подходил, а вырабатывал сразу все знаки рвения. Может есть простая команда в конфигурации?
AutoSelectDialog
в Техподдержка
Опубликовано
БОЛЬШОЕ, ОГРОМНОЕ СПАСИБО=)) Помогло идеально=)) Вы просто боги программирования=))