- Хроники
- Chaotic Throne: High Five
- Сборка
- Свое, на базе L2GW
Всем привет.
Сначала суть:
Сборка Java.
Портировал я как-то давно себе ПТС ИИ. Код перенесен на JAVA структурно без изменений из декомпила ХФ ai.obj
Сейчас провожу у себя ЗБТ и столкнулся с некоторой проблемой.
У корейцев, есть два основных вида проверки и переключения статуса квеста. Буду писать псевдокодом, чтобы было более понятно, в чем суть проблемы.
Пример: Для переключения квеста с 1 на 2 этап, нужно 10 итемов с ИД 9999. В рюкзаке 9 итемов, убиваем моба. У моба обработчик:
Вариант кода 1.
Вариант кода 2.
Оба варианта встречаются в ИИ примерно поровну. Первый вариант чаще в новых ИИ, от ГФ и выше, а второй преимущественно в старых.
Методы в коде вызываются одинаковые. Скорее всего, во втором варианте заложена задержка на передачу инфы туда обратно между NpcServer и Server,
но из-за этого, если я у себя на яве, обрабатываю вызов giveItem в том же потоке, то получаю ситуацию, когда у меня моб закрывает квест на 9 итемах, т.к условие выполняется. Если я выношу обработчик giveItem в отдельный поток, то иногда возникают ситуации, когда мобы выдают лишние итемы, т.е у чара получается 11/10 итемов, а т.к в тех же скриптах проверки в условиях по большей части не >=, а ==, то такие квесты не получится сдать.
Кто-то сталкивался с подобным? Править скрипты очень не хочу, т.к с датапаком ПТС работаю нативно и очень бы не хотелось его править.
Есть идеи, как это можно обойти?
Сначала суть:
Сборка Java.
Портировал я как-то давно себе ПТС ИИ. Код перенесен на JAVA структурно без изменений из декомпила ХФ ai.obj
Сейчас провожу у себя ЗБТ и столкнулся с некоторой проблемой.
У корейцев, есть два основных вида проверки и переключения статуса квеста. Буду писать псевдокодом, чтобы было более понятно, в чем суть проблемы.
Пример: Для переключения квеста с 1 на 2 этап, нужно 10 итемов с ИД 9999. В рюкзаке 9 итемов, убиваем моба. У моба обработчик:
Вариант кода 1.
Код:
if (getItemCount(9999) == 9){
giveItem(9999, 1);
changeQuestState(2);
}
Вариант кода 2.
Код:
giveItem(9999, 1);
if(getItemCount(9999) >= 9){
changeQuestState(2);
}
Оба варианта встречаются в ИИ примерно поровну. Первый вариант чаще в новых ИИ, от ГФ и выше, а второй преимущественно в старых.
Методы в коде вызываются одинаковые. Скорее всего, во втором варианте заложена задержка на передачу инфы туда обратно между NpcServer и Server,
но из-за этого, если я у себя на яве, обрабатываю вызов giveItem в том же потоке, то получаю ситуацию, когда у меня моб закрывает квест на 9 итемах, т.к условие выполняется. Если я выношу обработчик giveItem в отдельный поток, то иногда возникают ситуации, когда мобы выдают лишние итемы, т.е у чара получается 11/10 итемов, а т.к в тех же скриптах проверки в условиях по большей части не >=, а ==, то такие квесты не получится сдать.
Кто-то сталкивался с подобным? Править скрипты очень не хочу, т.к с датапаком ПТС работаю нативно и очень бы не хотелось его править.
Есть идеи, как это можно обойти?