Не регулируеться радиус обзора, не работает clientSight

Общие вопросы по OpenKore обсуждаются здесь. Можно сказать, что это - основной раздел форума.
Возник вопрос? Вам сюда.

Модератор: 4epT

Правила форума
Все вопросы по OK не касающиеся плагинов и макросов публикуются в этом разделе.
Перед тем как что то писать, пожалуйста, удостоверьтесь что данная тема не поднималась, вы полностью изучили мануалы по конфигурационным файлам бота и не нашли там решения.
Аватара пользователя
NyaNya
Начинающий
Сообщения: 22
Зарегистрирован: Пт июн 12, 2009 9:30 pm
Контактная информация:

Не регулируеться радиус обзора, не работает clientSight

Сообщение NyaNya »

clientSight не влияет на радиус обзора бота.
Может быть ктото сталкивался с такой проблемой?
Пробовал играться с removeActorWithDistance но установка этого значения приводит к тому что большая часть мобов становиться Unknown (кроме одного - 2х)....

версия бота 207SVN6622

Код: Выделить всё

master_version 20
version 20
serverType 8_4
private 1
serverEncoding Russian
Последний раз редактировалось NyaNya Ср июн 24, 2009 5:03 pm, всего редактировалось 1 раз.
Изображение
Keanor
Энтузиаст
Сообщения: 85
Зарегистрирован: Чт дек 11, 2008 9:45 am
Сервер RO:: raggame
Откуда: Нижний Новгород
Контактная информация:

Re: Не регулируеться радиус обзора, не работает clientSight

Сообщение Keanor »

А из клиента больше чем на 50 клеток мобов видно? Я играл на пиратках, мапа крутится хоть до конца, но мобов видно тока которые рядом))
Аватара пользователя
NyaNya
Начинающий
Сообщения: 22
Зарегистрирован: Пт июн 12, 2009 9:30 pm
Контактная информация:

Re: Не регулируеться радиус обзора, не работает clientSight

Сообщение NyaNya »

В самом клиенте мобы исчезают раньше чем кончается видимость карты, но кора все равно видит всех, в радиусе обзора(.
И должен сказать это доставляет кучу хлопот... И я даже не знаю на что грешить, толи баги в самом клиенте, то ли несовместимость с каким то софтом на компе(хотя я пробовал с минимумом запущенных процессов и эфект оставался тот же), то ли это нездоровые пакеты от сервера(хотя по логике на clientSight это влиять не должно)
Изображение
someuser
Начинающий
Сообщения: 18
Зарегистрирован: Ср июн 24, 2009 4:11 pm
Сервер RO:: euRO

Re: Не регулируеться радиус обзора, не работает clientSight

Сообщение someuser »

на кактусе что ли такая штука?
а это не кэширование корой?
Аватара пользователя
NyaNya
Начинающий
Сообщения: 22
Зарегистрирован: Пт июн 12, 2009 9:30 pm
Контактная информация:

Re: Не регулируеться радиус обзора, не работает clientSight

Сообщение NyaNya »

а это не кэширование корой?
Если речь об этом то включение выключение ничего неменяет

Код: Выделить всё

cachePlayerNames 1
на кактусе что ли такая штука?
Не совсем понял вопрос :(
Изображение
Аватара пользователя
Aib0
Бывалый
Сообщения: 961
Зарегистрирован: Чт ноя 16, 2006 12:50 am
Контактная информация:

Re: Не регулируеться радиус обзора, не работает clientSight

Сообщение Aib0 »

эм... тоже не совсем понял вопрос. Кора видит 1-в-1 то же, что и клиент, т.к. данные обу окружающих мобах и итемах присылает сервер на основе своих настроек о дальности видения, а не настроек бота или клиента
Wtf is "OpenKore"?

"What we're dealing with here is a total lack of respect for the law"
Аватара пользователя
NyaNya
Начинающий
Сообщения: 22
Зарегистрирован: Пт июн 12, 2009 9:30 pm
Контактная информация:

Re: Не регулируеться радиус обзора, не работает clientSight

Сообщение NyaNya »

Из вики.
clientSight [<число>] v.1.9.0 Если этот выбор будет установлен, то Кор будет игнорировать актеров (например монстры, NPCs, и т.д.), чье расстояние от Вас больше или равно указанному числу блоков. Если не определено то Openkore принимает ценность по умолчанию 15.
В англ версии написано что опция введена для защиты от проверок на бота, когда боту сервер посылает команды из за зоны видимости. Но в боевых условиях она тоже очень полезна, например вот когда на пиратском сервере установлен такой нездоровый обзор.

Добавлено спустя 6 часов 20 минут 12 секунд:
Нашел в сорцах следующие
Misc.pm

Код: Выделить всё

# Remove actors with a distance greater than clientSight. Some private servers (notably Freya) use
		# a technique where they send actor_exists packets with ridiculous distances in order to automatically
		# ban bots. By removingthose actors, we eliminate that possibility and emulate the client more closely.
		if (defined $actor->{pos_to} && (my $block_dist = blockDistance($char->{pos_to}, $actor->{pos_to})) >= ($config{clientSight} || 16)) {
			debug "Removed actor at $actor->{pos_to}{x} $actor->{pos_to}{y} (distance: $block_dist)\n";
			shift @{$queue};
			next;
		}
прописал в конфиге

Код: Выделить всё

debug 1
debugPacket_unparsed 1
debugPacket_received 1
debugPacket_ro_sent 1
debugPacket_sent 1
debugPacket_exclude 1
debugPacket_include 1
debugPacket_include_dumpMethod 1
debugDomains 1

clientSight 5
Но ничего подобного вроде - "Removed actor at ..." в консоли не заметил...

Я в перле ммм.. не особо разбираюсь но код, по идее правильный, а вот почему оно не работает непонятно...
Изображение
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: Не регулируеться радиус обзора, не работает clientSight

Сообщение EternalHarvest »

У меня blockDistance кое-где (АИ хомов) глючило, и возвращало всегда 0. При подстановке вычислений вместо вызова - становилось нормально. Возможно тут тоже такой баг, возможно и нет.

Posted after 3 minutes 41 second:
Вставь перед тем кодом что-нибудь вроде этого, чтоб проверить:

Код: Выделить всё

      if (defined $actor->{pos_to} && (my $block_dist = blockDistance($char->{pos_to}, $actor->{pos_to})) == 0) {
         message "blockDistance == 0\n";
      }
Аватара пользователя
NyaNya
Начинающий
Сообщения: 22
Зарегистрирован: Пт июн 12, 2009 9:30 pm
Контактная информация:

Re: Не регулируеться радиус обзора, не работает clientSight

Сообщение NyaNya »

Почему то мне кажется что эта функция вообще не вызывается... приведя код к такому виду не какой реакции в консоли не наблюдаеться...

Код: Выделить всё

sub processNameRequestQueue {
	my ($queue, $actorList, $foo) = @_;

	while (@{$queue}) {
		my $ID = $queue->[0];
		my $actor = $actorList->getByID($ID);

		# Some private servers ban you if you request info for an object with
		# GM Perfect Hide status
		if (!$actor || defined($actor->{name}) || $actor->{statuses}{"GM Perfect Hide"}) {
			shift @{$queue};
			next;
		}

		# Remove actors with a distance greater than clientSight. Some private servers (notably Freya) use
		# a technique where they send actor_exists packets with ridiculous distances in order to automatically
		# ban bots. By removingthose actors, we eliminate that possibility and emulate the client more closely.
		if (defined $actor->{pos_to} && (my $block_dist = blockDistance($char->{pos_to}, $actor->{pos_to})) >= ($config{clientSight} || 16)) {
			debug "Removed actor at $actor->{pos_to}{x} $actor->{pos_to}{y} (distance: $block_dist)n";
			shift @{$queue};
			message("Removed actorn", "info");
			next;
		}
		message("not Removed actorn", "info");
		$messageSender->sendGetPlayerInfo($ID);
		$actor = shift @{$queue};
		push @{$queue}, $actor if ($actor);
		last;
	}
}
Добавлено спустя 4 минуты 13 секунд:
Похоже она вызывается только в CoreLogic.pm

Код: Выделить всё

sub processGetPlayerInfo {
	if (timeOut($timeout{ai_getInfo})) {
		processNameRequestQueue(\@unknownPlayers, $playersList);
		processNameRequestQueue(\@unknownNPCs, $npcsList);
Изображение
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Re: Не регулируеться радиус обзора, не работает clientSight

Сообщение kLabMouse »

NyaNya
Аха. Там она поломана, ибо были проблемы.
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: Не регулируеться радиус обзора, не работает clientSight

Сообщение EternalHarvest »

kLabMouse писал(а):Там она поломана, ибо были проблемы.
Что именно поломано? И какие были проблемы, можно поподробнее?
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Re: Не регулируеться радиус обзора, не работает clientSight

Сообщение kLabMouse »

EternalHarvest
Если фильтровать акторов на уровне пакетов, то происходят проблемы.
Обзор должен в точности совпадать с серверным.
Аватара пользователя
NyaNya
Начинающий
Сообщения: 22
Зарегистрирован: Пт июн 12, 2009 9:30 pm
Контактная информация:

Re: Не регулируеться радиус обзора, не работает clientSight

Сообщение NyaNya »

Попытался зделать вот так

Код: Выделить всё

sub processGetPlayerInfo {
	if (timeOut($timeout{ai_getInfo})) {
		processNameRequestQueue(\@unknownPlayers, $playersList);
		processNameRequestQueue(\@unknownNPCs, $npcsList);

################################################################################
[b]		foreach (keys %monsters) {
			if (distance($char->{pos_to}, $monsters{$_}{pos_to}) > ($config{clientSight}|| 16)) {
				$monstersList->remove($monsters{$_});
				last;
			}
		}[/b]
################################################################################

		foreach (keys %monsters) {
			if ($monsters{$_}{'name'} =~ /Unknown/) {
				$messageSender->sendGetPlayerInfo($_);
				last;
			}
			if ($monsters{$_}{'name_given'} =~ /Unknown/) {
				$messageSender->sendGetPlayerInfo($_);
				last;
			}
		}
		foreach (keys %pets) {
			if ($pets{$_}{'name_given'} =~ /Unknown/) {
				$messageSender->sendGetPlayerInfo($_);
				last;
			}
		}
		$timeout{ai_getInfo}{time} = time;
	}
}
Но эффект почти такой же как и от removeActorWithDistance... глючно и неюзабельно...
Изображение
Аватара пользователя
NyaNya
Начинающий
Сообщения: 22
Зарегистрирован: Пт июн 12, 2009 9:30 pm
Контактная информация:

Re: Не регулируеться радиус обзора, не работает clientSight

Сообщение NyaNya »

kLabMouse писал(а):EternalHarvest
Если фильтровать акторов на уровне пакетов, то происходят проблемы.
Обзор должен в точности совпадать с серверным.
А не могли бы вы указать как это дело выглядело раньше не сломанное)
Честно говоря вспоминая старые версии коры... проблем там не замечал... и работала кора гораздо лутше без залипаний и постоянных кенот калкулейт зе роут...
Изображение
Аватара пользователя
NyaNya
Начинающий
Сообщения: 22
Зарегистрирован: Пт июн 12, 2009 9:30 pm
Контактная информация:

Re: Не регулируеться радиус обзора, не работает clientSight

Сообщение NyaNya »

Частично решение было найдено тут https://ro-fan.ru/viewtopic.php?f=8&t=7965
Продублирую еще и здесь.
файл corelogic.pm
функция sub processAutoAttack

Код: Выделить всё

		### Step 1: Generate a list of all monsters that we are allowed to attack. ###
			my @aggressives;
			my @partyMonsters;
			my @cleanMonsters;

			# List aggressive monsters
			@aggressives = ai_getAggressives(1) if ($config{'attackAuto'} && $attackOnRoute);

			# There are two types of non-aggressive monsters. We generate two lists:
			foreach (@monstersID) {
				next if (!$_ || !checkMonsterCleanness($_));
				my $monster = $monsters{$_};
				# Ignore ignored monsters in mon_control.txt
				if (my $control = mon_control($monster->{name},$monster->{nameID})) {
					next if ( ($control->{attack_auto} ne "" && $control->{attack_auto} <= 0)
						|| ($control->{attack_lvl} ne "" && $control->{attack_lvl} > $char->{lv})
						|| ($control->{attack_jlvl} ne "" && $control->{attack_jlvl} > $char->{lv_job})
						|| ($control->{attack_hp}  ne "" && $control->{attack_hp} > $char->{hp})
						|| ($control->{attack_sp}  ne "" && $control->{attack_sp} > $char->{sp})
						|| ($control->{attack_auto} == 3 && ($monster->{dmgToYou} || $monster->{missedYou} || $monster->{dmgFromYou}))
						);
				}
				my $pos = calcPosition($monster);

############################################################################################
				# Ignore monsters with a distance greater than attack_MaxDistanceToBeginAttack.##########
############################################################################################
				if (distance(calcPosition($char), $pos) >= ($config{attack_MaxDistanceToBeginAttack} || 35)) {
				next;
				}
Добавленные строки

Код: Выделить всё

############################################################################################
				# Ignore monsters with a distance greater than attack_MaxDistanceToBeginAttack.##########
############################################################################################
				if (distance(calcPosition($char), $pos) >= ($config{attack_MaxDistanceToBeginAttack} || 35)) {
				next;
				}
Ну и в конфиге необходимо прописать

Код: Выделить всё

attack_MaxDistanceToBeginAttack 20
Кора не будет атаковать мобов находящихся на растоянии больше чем указанно в attack_MaxDistanceToBeginAttack либо если значение не установлено 35.

Так бот работает гораздо лучше... и практически не ошибается.
Изображение
Ответить