Mass Sweeper

QQRa1nQQ

Путник
Пользователь
Сообщения
11
Розыгрыши
0
Репутация
0
Реакции
0
Баллы
4
Сборка Lucera есть исходники
Есть скил масс свип он работает только когда хоть 1 из мертвых мобов в таргете.
А нужно сделать что бы юн юзался без таргета.
Кто сможет помочь и сколько это будет стоить?
 
Надо просто ввести новый тип таргета, который будет пробегаться именно по мертвым мобам вокруг самого игрока.
TARGET_AURA не прокатит, т.к. он наоборот берет только живые цели.
Но можно именно его взять за основу, обозвать например как TARGET_AURA_CORPSE и в коде отбора целей просто поменять проверку "мертв/не мертв" на противоположную.
Ну или может есть банально параметр для скиллов явно задающий какого вида цели брать - мертвые или живые. Просто с люцерой не работал и хз как там с этим.
 
Тоже не знаю как там в люцере, но массовые скилы обычно указываются через targetType - self (для описания радиуса вокруг самого персонажа),affectRange,affectScope -
POINT_BLANK (например),affectObject - нужно создать свой фильтр для мертвых мобов
 
ну с закосом под птс выборку целей стали относительно недавно в эмулях делать большей частью, а во всяких старых сборках обычно за тип подборки чисто targetType отвечает и все, без всяких аффект скоупов и всего такого. Максимум еще какие-то доп параметры для скилла вводят что учитваются при подборе.

З.Ы. У самого тоже до сих пор за методы подбора целей targetType отвечает - понимаю что давно бы надо переписать на связку target_type/affect_scope/affect_object, чтобы сократить количество разных таргет тайпов и добавить гибкости в подборе целей, но все никак руки не доходят - уж очень масштабная переделка предстоит и все никак не до нее...
 
Можно сделать костылем(смысла в красоте нет ради 1 себя). Взять радиус скила и найти всех кто рядом с игроком по его координатам и сделать сортировку isDead, а дальше уже совсем все просто. Тебе вполне хватит без красоты чисто насладится эфектом
 
Не знаю как конкретно на Lucera, их исходников не видел
но сталкивался с этим на RUSaCis 3.5
Вдруг там что-то похоже.
Есть файл для этого типа скила TargetAreaCorpseMob.java
и в нем метод meetCastConditions который определяет при каких условиях использовать скилл

будет такое
if (skill.getSkillType() == SkillType.SWEEP && !(target instanceof Monster))
{
caster.sendPacket(SystemMessageId.SWEEPER_FAILED_TARGET_NOT_SPOILED);
return false;
}

в моем случае помогло что я просто убрал это условие, возможно в твоем случае нужно будет добавить чтобы когда skill.getSkillType() == SkillType.SWEEP не возвращало false в нужном месте.
 

в 405 акисе мас свип и метод ЭреаКорпсМобс не работали, так как некорректно был прописан. вероятно на нем Руакис и сделан, без исправления косяка.
 
А как не костылем? По мне как раз то что вы описали и является базовым решением. Ну можно добавить affect всего и вся, но в принципе все начинается с того что нужно определить мертвых мобов в определенном радиусе или квадрате.
 
По нормальному мне кажется лучше найти квадрат где находится игрок и по нему найти нужных мобов. А в первом варианте придется перебирать квадраты или всех мобов по их дистанции к игроку. А в идеале повешать на моба издателя на такой случай и оповещать игрока вообще без поиска.
 
Вроде перебирать не много нужно, у скилла всетаки есть радиус. Если например сохранять мобов куда-то нужно будет решать обратную задачу, что-бы очистить или перестать сохранять такие данные. Но я в принципе согласен с тем что если будет много мертвых тушек вокруг то тут будет много просчетов, по крайней мере с L2J . Можно например использовать spatial grid по типу R-tree или KD-tree / QuadTree что сделает такие просчеты намного быстрее. Но в разработках на Яве я такого не видел пока.
 
QuadTree смысла практически нет. В L2 играет не много народу нагрузки смешные наверное есть какие-то загруженные сервера но это единицы.
Я как то для теста запускал 400-600 ботов с разными настройками на полуживом мобиусе и вообще не ощутил проблем, хотя бои были довольно массовые. А железка у меня даже рядом не серверная
 
Я тоже согласен. Но вы до этого говорили что проблематично перебирать цели по дистанции вокруг. А тут говорите что вдруг это не проблематично? Так в чем же дело? Давайте остановимся на том что ничего не нужно улучшать. Тогда и не нужно оптимизировать поиск убитых мобов. Просто взять и посмотреть по дистанции что к чему.
 
Я говорил о костыле берем всех мобов в мире и перебираем с O ( n ) — Линейной скоростью. А так согласен улучшать пока ничего не нужно оно того не стоит
 
Каких вы ботов использовали для тестирования? Мне на свой сервер бы поставить и посмотреть что будет.

Линейная скорость это тоже неплого. У Acis или Brawery все распределенно по маленьким регионам (кстати похоже на QuadTree) a у L2J есть knownlist, что в принципе поможет с выбором целей по линейной скорости. A какая может быть альтернатива?
 
Обычно это называют линейной сложностью) А первый коммент про решение с сортировкой по isDead, вообще на самом деле фильтрация а не сортировка
 
Угу. Спасибо за добавление я даже внимания не обратил на это
 
зачем всех то? о_О
Уж я хз как в люцере, но думаю даже там весь мир разделен на достаточно малые регионы, в каждом из которых хранится список объектов внутри него.
Так что достаточно пройтись по этим спискам текущего и прилегающих регионов, собрав все подходящие по критериям цели.

З.Ы. если бы на каст каждого массового скилла приходилось перебирать все существующие объекты в мире в поисках подходящих по условиям, то это был бы трындец - сервер бы загнулся уже при мизерном онлайне, когда игроки бы активно что-то массовое кастовали
 
Последнее редактирование:
-
 
Последнее редактирование:
Данный сайт использует cookie. Вы должны принять их для продолжения использования. Узнать больше…