AncientDragon Опубликовано 19 января, 2016 Поделиться Опубликовано 19 января, 2016 9 минут назад, Череп сказал: особенно когда противник маленький гном с ником "Pi или типо того) Ты еще не видел маленьких гномов в вове под эликсиром уменьшения Ссылка на комментарий Поделиться на другие сайты Поделиться
Admin Опубликовано 19 января, 2016 Поделиться Опубликовано 19 января, 2016 Я не понимаю, в чем проблема. Ведь алгоритм работает в точности так, как вы сами мне описали. Он выделяет не ближайшую цель, а все цели по-очереди. Когда я сделал вам адекватный алгоритм, выделяющий ближайшую невыделенную цель (выглядело как переключение между двумя ближайшими), вам же это не понравилось, и стали требовать другое. Описали мне подробно алгоритм, и я вам его воспроизвел. Судя по тому, что пишет автор - алгоритм работает в точности так как должен. Ссылка на комментарий Поделиться на другие сайты Поделиться
Aranar Опубликовано 19 января, 2016 Поделиться Опубликовано 19 января, 2016 17 минуту назад, Череп сказал: особенно когда противник маленький гном с ником "Pi или типо того) Угу, но сейчас мышкой надо выделять цель не по нику, а по фигурке перса и в масс-ПвП это почти жопа, особенно для дистанционных ДД, типа луков. Выкручиваемся, но даже если загнать в толпу танка для целеуказания, то выплывают проблемы описанные ТС-ом. Как игрок, отыгравший за Пала 7+ лет, я его понимаю. А что касается Артемиса, то он просто убог по своей сути, но спасибо ему за 15+ фрагов с его тушки. Падает он очень эротично, убейте и насладитесь этим процессом. 11 минуту назад, Admin сказал: Я не понимаю, в чем проблема. Ведь алгоритм работает в точности так, как вы сами мне описали. Он выделяет не ближайшую цель, а все цели по-очереди. Когда я сделал вам адекватный алгоритм, выделяющий ближайшую невыделенную цель (выглядело как переключение между двумя ближайшими), вам же это не понравилось, и стали требовать другое. Описали мне подробно алгоритм, и я вам его вопроизвел. Судя по тому, что пишет автор - алгоритм работает в точности так как должен. Уважаемый Админ, Вы пытаетесь привести клиент в чувство, спасибо. Но, речь идет о том, что выделение целей должно идти по спирали от ближних к дальним. Я ТС-а понимаю, поскольку как танк и игравший патийным танком, понимаю, что такое функция контроллера в ПвП и в этом поддерживаю ТС-а. Ссылка на комментарий Поделиться на другие сайты Поделиться
Череп Опубликовано 19 января, 2016 Поделиться Опубликовано 19 января, 2016 когда админ читает просьбы игроков-ветерано Ссылка на комментарий Поделиться на другие сайты Поделиться
Wandу Опубликовано 19 января, 2016 Автор Поделиться Опубликовано 19 января, 2016 1 час назад, Admin сказал: Я не понимаю, в чем проблема. Ведь алгоритм работает в точности так, как вы сами мне описали. Он выделяет не ближайшую цель, а все цели по-очереди. Когда я сделал вам адекватный алгоритм, выделяющий ближайшую невыделенную цель (выглядело как переключение между двумя ближайшими), вам же это не понравилось, и стали требовать другое. Описали мне подробно алгоритм, и я вам его воспроизвел. Судя по тому, что пишет автор - алгоритм работает в точности так как должен. алгоритм переборки целей сейчас работает абсолютно верно. все правильно. неправильно пашет другое - нексттаргет после любого действия таргетом кроме собственно нексттаргета в оригинале сбрасывает очередь и заново начинает перебирать от ближнего. новый нексттаргет очередь не сбрасывает это приводит к тому что я показал на видео и описал в 1м посте. сбили таргет? снова от ближнего. отменил эскейпом? снова от ближнего выбрал таргет руками? снова от ближнего Ссылка на комментарий Поделиться на другие сайты Поделиться
Hеllrаiser Опубликовано 19 января, 2016 Поделиться Опубликовано 19 января, 2016 реально,просто нет слов неужели так трудно починить некс таргет Ссылка на комментарий Поделиться на другие сайты Поделиться
Admin Опубликовано 19 января, 2016 Поделиться Опубликовано 19 января, 2016 Т.е. я теперь должен определить понятие "любое действие" и напихать в каждый из сотен пакетов сброс некст таргета? И какая еще спираль, в клиентском некст таргете никаких спиралей и близко нет. Как и в моем. Ссылка на комментарий Поделиться на другие сайты Поделиться
Wandу Опубликовано 19 января, 2016 Автор Поделиться Опубликовано 19 января, 2016 я описал что происходит на практике, а не что вам делать. про "спираль" не понял вообще о чем вы. ну и ИМХО сброс очереди делать отталкиваясь не от тех случаев когда она сбрасывается а от тех когда она сохраняется. из тех тестов что сделал я - любое действие (баф/атака/использование скила/потеря цели/выбор цели кликом мышки) сбивает очередь. сохраняется она если нажимается только нексттаргет и если персонаж просто передвигается. только что чисто случайно нашел зависимость. если клацать нексттаргет с перерывами гдето секунду - каждый раз очередь сбрасывается и постоянно берутся только ближние цели. P.S. и мне кажется всетаки что не очередь сбрасывается как я предпологал ранее, а изначально при одиночных нажатиях некстаргет имеет в 2 раза меньший радиус охвата, и при увеличении скорости его нажатия радиус увеличивается в 2 раза. Ссылка на комментарий Поделиться на другие сайты Поделиться
Admin Опубликовано 19 января, 2016 Поделиться Опубликовано 19 января, 2016 Ну вот видите, вы уже в третий или четвертый раз находите новые подробности работы некст таргета, а потом жалуетесь что я сделал его не так как вам хотелось. Ссылка на комментарий Поделиться на другие сайты Поделиться
Wandу Опубликовано 19 января, 2016 Автор Поделиться Опубликовано 19 января, 2016 ну извиняйте. сутками тестить возможности нет. добавлю - если цель находится далеко от чара при одиночном нексттаргете ее всеравно выбирает видимо если при одиночном нажатии в малом радиусе никого не находит используется большой. Ссылка на комментарий Поделиться на другие сайты Поделиться
Admin Опубликовано 19 января, 2016 Поделиться Опубликовано 19 января, 2016 Изверги. L2Object t = activeChar.getTarget(); L2Character old_target = t != null && t.isCharacter() ? (L2Character) t : null; L2Character new_target = null; GArray<L2Character> all_targets = L2World.getAroundCharacters(activeChar, 400, 200); if(all_targets.isEmpty()) return; GArray<L2Character> targets = new GArray<L2Character>(all_targets.size()); for(L2Character cha : all_targets) if(cha != null && !cha.isAlikeDead() && !cha.isDoor() && !cha.isVehicle() && cha.isAutoAttackable(activeChar)) targets.add(cha); if(targets.isEmpty()) return; if(targets.size() == 1) { new_target = targets.get(0); if(new_target == old_target) // Единственная цель уже выделена return; } else if(old_target == null || activeChar.getDistance3D(old_target) > 400) // Если цели нет, либо она далеко - находим ближайшую { for(L2Character cha : targets) if(old_target != cha && (new_target == null || activeChar.getDistance3D(cha) < activeChar.getDistance3D(new_target))) new_target = cha; } else // Если цель уже была, ищем следующую по списку цель { TreeMap<Double, L2Character> sorted_targets = new TreeMap<Double, L2Character>(); for(L2Character tmp : targets) sorted_targets.put(activeChar.getDistance3D(tmp), tmp); // Сортируем все цели по расстоянию boolean fastClick = System.currentTimeMillis() - activeChar.getLastNextTarget() <= 1500; Double old_key = null; if(fastClick || activeChar.getDistance3D(old_target) <= 200) for(Entry<Double, L2Character> tmp : sorted_targets.entrySet()) if(tmp.getValue() == old_target) { old_key = tmp.getKey(); break; } if(old_key == null) // Кликаем редко, и старая цель была далеко, выбираем ближайшую new_target = sorted_targets.firstEntry().getValue(); else { Double new_key = sorted_targets.higherKey(old_key); // Ищем следующую по списку цель if(new_key == null // Если старая цель была в конце списка, || !fastClick && new_key > 200 && sorted_targets.firstKey() != old_key) // или кликаем редко, а следующая цель слишком далеко и есть цели ближе new_key = sorted_targets.firstKey(); // то берем ближайшую цель new_target = sorted_targets.get(new_key); } } if(new_target != null) { new_target.onAction(activeChar, false); activeChar.setLastNextTarget(); } Применится в r29381. Теперь, цели перебирает не просто в непонятном порядке, а в сортированном по расстоянию порядке. Если кликать чаще чем раз в полторы секунды, то радиус 400, иначе 200 (при условии что есть цели рядом, иначе все равно 400). Если выделить цель дальше 200, подождать полторы секунды и снова нажать - то выберет ближайшую, а если не ждать то следующую дальнюю (если есть). Время в полторы секунды (и расстояние 200) вероятно нужно изменить на другое, но это уже детали. Ссылка на комментарий Поделиться на другие сайты Поделиться
sindikat89 Опубликовано 19 января, 2016 Поделиться Опубликовано 19 января, 2016 2 часа назад, Wandу сказал: ну извиняйте. сутками тестить возможности нет. добавлю - если цель находится далеко от чара при одиночном нексттаргете ее всеравно выбирает видимо если при одиночном нажатии в малом радиусе никого не находит используется большой. проще сделать как было, что б перебирало ближайшие цели и все. если надо из 10 целей выделить какуюто одну (дальнюю или среднею) проще это сделать мышкой. Ссылка на комментарий Поделиться на другие сайты Поделиться
ApxVas84 Опубликовано 20 января, 2016 Поделиться Опубликовано 20 января, 2016 12 часа назад, Admin сказал: Т.е. я теперь должен определить понятие "любое действие" и напихать в каждый из сотен пакетов сброс некст таргета? И какая еще спираль, в клиентском некст таргете никаких спиралей и близко нет. Как и в моем. потому и ныли что не правильно пашет в других серваках некст таргет пашет по спирали, и когда сбрасываешь таргет вся это схема начинает с 0. п.с. это лишь малая часть, по мелочи по мелочи и играть(расслабляться после работы почти не возможно) Ссылка на комментарий Поделиться на другие сайты Поделиться
HawkC4 Опубликовано 20 января, 2016 Поделиться Опубликовано 20 января, 2016 10 час назад, Admin сказал: Изверги Тяжела и неказиста жизнь простого программиста Наличие ТЗ не означает что оно полное. Иногда действительно приходится "по живому" искать недочеты. Ссылка на комментарий Поделиться на другие сайты Поделиться
Kronverk Опубликовано 20 января, 2016 Поделиться Опубликовано 20 января, 2016 Вэндик, ты доведешь Дайма до сердечного приступа Ссылка на комментарий Поделиться на другие сайты Поделиться
Eng11ne Опубликовано 20 января, 2016 Поделиться Опубликовано 20 января, 2016 13 часа назад, sindikat89 сказал: проще сделать как было, что б перебирало ближайшие цели и все. если надо из 10 целей выделить какуюто одну (дальнюю или среднею) проще это сделать мышкой. Я это же имел ввиду, когда отписывался в этой теме) Зачем эти сложности. Ссылка на комментарий Поделиться на другие сайты Поделиться
HawkC4 Опубликовано 20 января, 2016 Поделиться Опубликовано 20 января, 2016 13 часа назад, sindikat89 сказал: проще сделать как было Вопрос не о том, как сделать "проще", а о том, как должно быть. Ссылка на комментарий Поделиться на другие сайты Поделиться
sensus Опубликовано 21 января, 2016 Поделиться Опубликовано 21 января, 2016 а сколько у клиентского таргета радиус? Ссылка на комментарий Поделиться на другие сайты Поделиться
Admin Опубликовано 21 января, 2016 Поделиться Опубликовано 21 января, 2016 7 часов назад, sensus сказал: а сколько у клиентского таргета радиус? 350, у серверного 400. Вероятно сделаю в итоге 150 базовый и 350 при быстром клике. Ссылка на комментарий Поделиться на другие сайты Поделиться
sindikat89 Опубликовано 21 января, 2016 Поделиться Опубликовано 21 января, 2016 В 19.01.2016 at 22:17, Admin сказал: Изверги. L2Object t = activeChar.getTarget(); L2Character old_target = t != null && t.isCharacter() ? (L2Character) t : null; L2Character new_target = null; GArray<L2Character> all_targets = L2World.getAroundCharacters(activeChar, 400, 200); if(all_targets.isEmpty()) return; GArray<L2Character> targets = new GArray<L2Character>(all_targets.size()); for(L2Character cha : all_targets) if(cha != null && !cha.isAlikeDead() && !cha.isDoor() && !cha.isVehicle() && cha.isAutoAttackable(activeChar)) targets.add(cha); if(targets.isEmpty()) return; if(targets.size() == 1) { new_target = targets.get(0); if(new_target == old_target) // Единственная цель уже выделена return; } else if(old_target == null || activeChar.getDistance3D(old_target) > 400) // Если цели нет, либо она далеко - находим ближайшую { for(L2Character cha : targets) if(old_target != cha && (new_target == null || activeChar.getDistance3D(cha) < activeChar.getDistance3D(new_target))) new_target = cha; } else // Если цель уже была, ищем следующую по списку цель { TreeMap<Double, L2Character> sorted_targets = new TreeMap<Double, L2Character>(); for(L2Character tmp : targets) sorted_targets.put(activeChar.getDistance3D(tmp), tmp); // Сортируем все цели по расстоянию boolean fastClick = System.currentTimeMillis() - activeChar.getLastNextTarget() <= 1500; Double old_key = null; if(fastClick || activeChar.getDistance3D(old_target) <= 200) for(Entry<Double, L2Character> tmp : sorted_targets.entrySet()) if(tmp.getValue() == old_target) { old_key = tmp.getKey(); break; } if(old_key == null) // Кликаем редко, и старая цель была далеко, выбираем ближайшую new_target = sorted_targets.firstEntry().getValue(); else { Double new_key = sorted_targets.higherKey(old_key); // Ищем следующую по списку цель if(new_key == null // Если старая цель была в конце списка, || !fastClick && new_key > 200 && sorted_targets.firstKey() != old_key) // или кликаем редко, а следующая цель слишком далеко и есть цели ближе new_key = sorted_targets.firstKey(); // то берем ближайшую цель new_target = sorted_targets.get(new_key); } } if(new_target != null) { new_target.onAction(activeChar, false); activeChar.setLastNextTarget(); } Применится в r29381. Теперь, цели перебирает не просто в непонятном порядке, а в сортированном по расстоянию порядке. Если кликать чаще чем раз в полторы секунды, то радиус 400, иначе 200 (при условии что есть цели рядом, иначе все равно 400). Если выделить цель дальше 200, подождать полторы секунды и снова нажать - то выберет ближайшую, а если не ждать то следующую дальнюю (если есть). Время в полторы секунды (и расстояние 200) вероятно нужно изменить на другое, но это уже детали. эта система работает только для /таргетнекст2 или и для клиентского /таргетнекст? Ссылка на комментарий Поделиться на другие сайты Поделиться
Wandу Опубликовано 21 января, 2016 Автор Поделиться Опубликовано 21 января, 2016 4 часа назад, Admin сказал: 350, у серверного 400. Вероятно сделаю в итоге 150 базовый и 350 при быстром клике. полторы секунды задержки тоже многовато. у клиентского 0,9. округлить ждо секунды и будет отлично. Ссылка на комментарий Поделиться на другие сайты Поделиться
Wandу Опубликовано 21 января, 2016 Автор Поделиться Опубликовано 21 января, 2016 31 минуты назад, Балабас сказал: НОВАЯ обнова новыйе слёзы жесть канеш что сделали с игрой очень жаль(((( как давно ты видел темки с плачем от забаненных за ботоводство/радары? давненько, да? а раньше чутли не каждый день было по несколько. так что польза от нового клиента есть, другое дело что сам клиент взяли кривой за основу. будем надеяться что обновят на новый в скором времени. Ссылка на комментарий Поделиться на другие сайты Поделиться
Admin Опубликовано 22 января, 2016 Поделиться Опубликовано 22 января, 2016 r29385: /targetnext2 выделяет ближайшую цель, если до этого цель была отменена либо выделена вручную. Так же, снижен радиус с 400 до 350, как у клиентского, и уменьшен интервал до 1 секунды. Уже установлено на все сервера, проверяйте через час, после рестарта. Ссылка на комментарий Поделиться на другие сайты Поделиться
Wandу Опубликовано 22 января, 2016 Автор Поделиться Опубликовано 22 января, 2016 сейчас глянем Ссылка на комментарий Поделиться на другие сайты Поделиться
Wandу Опубликовано 22 января, 2016 Автор Поделиться Опубликовано 22 января, 2016 работает идеально. как в пвп так и в пве. спасибо. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Заархивировано
Эта тема находится в архиве и закрыта для дальнейших ответов.