Перейти к содержанию
Asterios

админ, пожалей наши нервы


Wandу

Рекомендуемые сообщения

9 минут назад, Череп сказал:

особенно когда противник маленький гном с ником "Pi  :lol: или типо того)

Ты еще не видел маленьких гномов в вове под эликсиром уменьшения

Ссылка на комментарий
Поделиться на другие сайты

Я не понимаю, в чем проблема. Ведь алгоритм работает в точности так, как вы сами мне описали. Он выделяет не ближайшую цель, а все цели по-очереди.

Когда я сделал вам адекватный алгоритм, выделяющий ближайшую невыделенную цель (выглядело как переключение между двумя ближайшими), вам же это не понравилось, и стали требовать другое. Описали мне подробно алгоритм, и я вам его воспроизвел. Судя по тому, что пишет автор - алгоритм работает в точности так как должен.

Ссылка на комментарий
Поделиться на другие сайты

17 минуту назад, Череп сказал:

особенно когда противник маленький гном с ником "Pi  :lol: или типо того)

Угу, но сейчас мышкой надо выделять цель не по нику, а по фигурке перса и в масс-ПвП это почти жопа, особенно для дистанционных ДД, типа луков. Выкручиваемся, но даже если загнать в толпу танка для целеуказания, то выплывают проблемы описанные ТС-ом. Как игрок, отыгравший за Пала 7+ лет, я его понимаю.

 

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

11 минуту назад, Admin сказал:

Я не понимаю, в чем проблема. Ведь алгоритм работает в точности так, как вы сами мне описали. Он выделяет не ближайшую цель, а все цели по-очереди.

Когда я сделал вам адекватный алгоритм, выделяющий ближайшую невыделенную цель (выглядело как переключение между двумя ближайшими), вам же это не понравилось, и стали требовать другое. Описали мне подробно алгоритм, и я вам его вопроизвел. Судя по тому, что пишет автор - алгоритм работает в точности так как должен.

Уважаемый Админ, Вы пытаетесь привести клиент в чувство, спасибо. Но, речь идет о том, что выделение целей должно идти по спирали от ближних к дальним. Я ТС-а понимаю, поскольку как танк и игравший патийным танком, понимаю, что такое функция контроллера в ПвП и в этом поддерживаю ТС-а.

Ссылка на комментарий
Поделиться на другие сайты

 

 

когда админ читает просьбы игроков-ветерано

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Admin сказал:

Я не понимаю, в чем проблема. Ведь алгоритм работает в точности так, как вы сами мне описали. Он выделяет не ближайшую цель, а все цели по-очереди.

Когда я сделал вам адекватный алгоритм, выделяющий ближайшую невыделенную цель (выглядело как переключение между двумя ближайшими), вам же это не понравилось, и стали требовать другое. Описали мне подробно алгоритм, и я вам его воспроизвел. Судя по тому, что пишет автор - алгоритм работает в точности так как должен.

 

алгоритм переборки целей сейчас работает абсолютно верно. все правильно.

неправильно пашет другое - нексттаргет после любого действия таргетом кроме собственно нексттаргета в оригинале сбрасывает очередь и заново начинает перебирать от ближнего.

новый нексттаргет очередь не сбрасывает это приводит к тому что я показал на видео и описал в 1м посте.

 

сбили таргет? снова от ближнего.

отменил эскейпом? снова от ближнего

выбрал таргет руками? снова от ближнего
 

Ссылка на комментарий
Поделиться на другие сайты

реально,просто нет слов :lol: :lol: :lol:

неужели так трудно починить некс таргет

Ссылка на комментарий
Поделиться на другие сайты

Т.е. я теперь должен определить понятие "любое действие" и напихать в каждый из сотен пакетов сброс некст таргета?

 

И какая еще спираль, в клиентском некст таргете никаких спиралей и близко нет. Как и в моем.

Ссылка на комментарий
Поделиться на другие сайты

я описал что происходит на практике, а не что вам делать. про "спираль" не понял вообще о чем вы.

 

ну и ИМХО сброс очереди делать отталкиваясь не от тех случаев когда она сбрасывается а от тех когда она сохраняется. 

из тех тестов что сделал я - любое действие (баф/атака/использование скила/потеря цели/выбор цели кликом мышки) сбивает очередь. сохраняется она если нажимается только нексттаргет и если персонаж просто передвигается.

 

 

только что чисто случайно нашел зависимость. если клацать нексттаргет с перерывами гдето секунду - каждый раз очередь сбрасывается и постоянно берутся только ближние цели.

 

 

 

 

P.S. и мне кажется всетаки что не очередь сбрасывается как я предпологал ранее, а изначально при одиночных нажатиях некстаргет имеет в 2 раза меньший радиус охвата, и при увеличении скорости его нажатия радиус увеличивается в 2 раза. 

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

ну извиняйте. сутками тестить возможности нет.

 

 

добавлю - если цель находится далеко от чара при одиночном нексттаргете ее всеравно выбирает

видимо если при одиночном нажатии в малом радиусе никого не находит используется большой.

Ссылка на комментарий
Поделиться на другие сайты

Изверги.

 

		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у сказал:

ну извиняйте. сутками тестить возможности нет.

 

 

добавлю - если цель находится далеко от чара при одиночном нексттаргете ее всеравно выбирает

видимо если при одиночном нажатии в малом радиусе никого не находит используется большой.

проще сделать как было, что б перебирало ближайшие цели и все. если надо из 10 целей выделить какуюто одну (дальнюю или среднею)  проще это сделать мышкой. 

Ссылка на комментарий
Поделиться на другие сайты

12 часа назад, Admin сказал:

Т.е. я теперь должен определить понятие "любое действие" и напихать в каждый из сотен пакетов сброс некст таргета?

 

И какая еще спираль, в клиентском некст таргете никаких спиралей и близко нет. Как и в моем.

потому и ныли что не правильно пашет

в других серваках некст таргет пашет по спирали, и когда сбрасываешь таргет вся это схема начинает с 0.

п.с. это лишь малая часть, по мелочи по мелочи и играть(расслабляться после работы почти не возможно)

Ссылка на комментарий
Поделиться на другие сайты

10 час назад, Admin сказал:

Изверги

Тяжела и неказиста жизнь простого программиста ;)

 

Наличие ТЗ не означает что оно полное. Иногда действительно приходится "по живому" искать недочеты.

Ссылка на комментарий
Поделиться на другие сайты

13 часа назад, sindikat89 сказал:

проще сделать как было, что б перебирало ближайшие цели и все. если надо из 10 целей выделить какуюто одну (дальнюю или среднею)  проще это сделать мышкой. 

Я это же имел ввиду, когда отписывался в этой теме) Зачем эти сложности.

Ссылка на комментарий
Поделиться на другие сайты

13 часа назад, sindikat89 сказал:

проще сделать как было

Вопрос не о том, как сделать "проще", а о том, как должно быть.

Ссылка на комментарий
Поделиться на другие сайты

7 часов назад, sensus сказал:

а сколько у клиентского таргета радиус?

350, у серверного 400. Вероятно сделаю в итоге 150 базовый и 350 при быстром клике.

Ссылка на комментарий
Поделиться на другие сайты

В 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 или и для клиентского /таргетнекст?

Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, Admin сказал:

350, у серверного 400. Вероятно сделаю в итоге 150 базовый и 350 при быстром клике.

полторы секунды задержки тоже многовато. у клиентского 0,9. округлить ждо секунды и будет отлично.

Ссылка на комментарий
Поделиться на другие сайты

31 минуты назад, Балабас сказал:

НОВАЯ обнова новыйе слёзы жесть канеш что сделали с игрой очень жаль((((

как давно ты видел темки с плачем от забаненных за ботоводство/радары? давненько, да? а раньше чутли не каждый день было по несколько.

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

Ссылка на комментарий
Поделиться на другие сайты

r29385: /targetnext2 выделяет ближайшую цель, если до этого цель была отменена либо выделена вручную. Так же, снижен радиус с 400 до 350, как у клиентского, и уменьшен интервал до 1 секунды.

 

Уже установлено на все сервера, проверяйте через час, после рестарта.

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

Заархивировано

Эта тема находится в архиве и закрыта для дальнейших ответов.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...