Нужна помощь и критика каждого. Aion 4.6 java

  • Автор темы Nsd-Дмитий
  • Дата начала
Даже так, тогда я думаю тебе могу в личном сообщении кинуть=) Ну я так понял тебе нужна более стабильная версия сборки? Багов придостаточно. Я многое поменял, что там было. Самое главное, там не работает логика обхода( До сих пор не могу решить её, перепробовал очень много скрипов. Сами писали... Итог нулевой (

 
Ещё раз повторюсь. Я много чего исправил. Мне понравилось, что этот исходняк можно менять как тебе хочется 

 
Если вдруг кто-то может мне помочь с логикой обхода, пожалуйста пишите. Ну  или кто то может продаёт ? Тоже пишите

 
Я тебе уже описывал логику) Нужно просто сесть и сделать. Найти в шаре вряд ли получится.

Попробую объяснить на пальцах
1) Игрок агрит моба
2) мобу присваивается цель "игрок"
3) Перед тем как моб побежит к цели, происходит расчёт координаты куда бежать мобу. Моб не бежит к цели, он бежит к координатам этой цели.
4) Обновление координаты цели происходит каждые 500мс. То есть моб сделав шаг, обновляет координаты куда бежать, захватывая их от цели.
5) Если цель сдвинулась, то моб изменит направление цели.

Вот так это будет выглядеть если цель стоит на месте после агра.
Посмотреть вложение 152

Вот так это выглядит если игрок сдвинулся

Посмотреть вложение 153

Теперь суть обхода.
1) Нужно сделать проверку, что между мобом и целью есть преграда. В коде есть функция, ищи что-нибудь связанное с collision. Можешь в скиллах посмотреть, так как скиллы не могут "бить" через стену.
2) Каждые 0,5 сек, когда происходит обновление координат, нужно их "сохранять". Точнее достаточно сохранять предыдущий шаг.
3) И так же в эти 0,5 секунд делать проверку, если цель за преградой, то не "поворачивать к цели", а бежать дальше, где цель была ещё без преграды.

Схематично примерно так.
Посмотреть вложение 154

Это самый быстрый способ сделать обход)

 
я так понял у меня в скрипе не прописано, при каких условиях моб будет бежать к предыдущей точке? Намекните пожалуйста ,что у меня не так то...Написано ,что при остальных условиях... Вообще запутался...
Посмотреть вложение 155

 
если я не ошибаюсь, то там вообще такого не планировалось.

У тебя есть метод
 

/**
* Move to current target
*/
public void moveToTargetObject() {
if (started.compareAndSet(false, true)) {
destination = Destination.TARGET_OBJECT;
updateLastMove();
moveTask(owner);
}
}


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

 
я про то где он вызывается)
 

public static void targetTooFar(NpcAI2 npcAI) {
Npc npc = npcAI.getOwner();

// switch target if there is more hated creature
if (npc.getGameStats().getLastChangeTargetTimeDelta() > 5) {
Creature mostHated = npc.getAggroList().getMostHated();
if (mostHated != null && !mostHated.getLifeStats().isAlreadyDead() && !npc.isTargeting(mostHated.getObjectId())) {
npcAI.onCreatureEvent(AIEventType.TARGET_CHANGED, mostHated);
return;
}
}
if (!npc.canSee((Creature) npc.getTarget())) {
npcAI.onGeneralEvent(AIEventType.TARGET_GIVEUP);
return;
}
if (checkGiveupDistance(npcAI)) {
npcAI.onGeneralEvent(AIEventType.TARGET_GIVEUP);
return;
}
if (npcAI.isMoveSupported()) {
npc.getMoveController().moveToTargetObject();
return;
}
npcAI.onGeneralEvent(AIEventType.TARGET_GIVEUP);
}




вот тут он вызывается
npc.getMoveController().moveToTargetObject();

добавь суда условие проверки.

 
Назад
Верх