НПЦ / Incomplete NPC info found in npcs.txt

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

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

Правила форума
Все вопросы по OK не касающиеся плагинов и макросов публикуются в этом разделе.
Перед тем как что то писать, пожалуйста, удостоверьтесь что данная тема не поднималась, вы полностью изучили мануалы по конфигурационным файлам бота и не нашли там решения.
Sauron
Грамотный
Сообщения: 435
Зарегистрирован: Ср ноя 29, 2006 3:24 pm

Сообщение Sauron »

ппц.. вообще-то sellAuto - это команда автопродажи (при чем 0 - не использовать) .. а у тебя топ темы - покупка стрел у нпц.. у меня скоро крыша от ваших перлов слетит..
от РО до шестой палаты - один шаг...
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Сообщение 4epT »

Sauron, не глупи..
в конфиге ставим "sellAuto 0" чтобы бот ничего сам не продавал, а продавал только тогда когда мы ему телеграфируем "do autosell"
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
Sauron
Грамотный
Сообщения: 435
Зарегистрирован: Ср ноя 29, 2006 3:24 pm

Сообщение Sauron »

а я про первый пост темы говорю.. никакого отношения к sellAuto не имеет..
от РО до шестой палаты - один шаг...
amba
Начинающий
Сообщения: 46
Зарегистрирован: Сб окт 06, 2007 6:04 pm

Сообщение amba »

почитал топик ) но так и не увидел ответа на вопрос как избавиться от ошибки, может все таки кто нить че нить с этим сделает. или скажет как избавиться.
Делай что можешь, случиться что должно.
Изображение
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Было бы неплохо точно идентифицировать ошибку. Т.е., посмотреть, что "видит" Кора. Само это сообщение об ошибке вызывается из модуля /src/Misc.pm. (Ну, это может любой найти обычным поиском по файлам).

Вот как это выглядит:

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

# fill in a hash of NPC information either based on location ("map x y")
sub getNPCInfo {
	my $id = shift;           <----- id на входе? зачем? О_о что за id?
	my $return_hash = shift; <--- что за хэш, тоже непонятно.

	undef %{$return_hash}; 

	my ($map, $x, $y) = split(/ +/, $id, 3); <-- это просто строка разрезается на 3 отдельных элемента - карта, х, у;

	$$return_hash{map} = $map;
	$$return_hash{pos}{x} = $x;
	$$return_hash{pos}{y} = $y;

	if (defined($$return_hash{map}) && defined($$return_hash{pos}{x}) && defined($$return_hash{pos}{y})) {
		$$return_hash{ok} = 1;
	} else {
		error T("Incomplete NPC info found in npcs.txt\n");
	}
}
Но как это трактовать, я не знаю.

Добавлено спустя 3 минуты 28 секунд:

Я так понимаю, эта процедура должна возвращать ссылку на элемент хэша, "актера" (actor) рядом с персонажем. Т.е. мы засылаем ей вопрос - "верни плз идентификатор нпц, который находится где-то рядом со мной, вот в таких-то координатах". После этого другой модуль, используя идентификатор нпц, будет с ним "разговаривать". Однако, в нужных координатах почему-то никто не находится.

Стоит посмотреть список npc, стоя в той же точке, что и Кора при покупке; командой nl ? Ы?

Добавлено спустя 6 минут 47 секунд:

Сама эта процедура вызывается в нескольких местах из /src/AI/CoreLogic.pm. Примерно вот так выглядит вызов:

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

		if (!$config{storageAuto_useChatCommand}) {
			# Stop if the specified NPC is invalid
			$args->{npc} = {};
			getNPCInfo($config{'storageAuto_npc'}, $args->{npc});
			if (!defined($args->{npc}{ok})) {
				$args->{done} = 1;
				return;
			}
	...
Добавлено спустя 17 минут 18 секунд:

Ага, кое-что проясняется. Вот нашел в архиве ОК 1.6.1, там наша процедура выглядела так:

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

# fill in a hash of NPC information either base on ID or location ("map x y")
sub getNPCInfo {
	my $id = shift;
	my $return_hash = shift;

	undef %{$return_hash};
	
	if ($id =~ /^\d+$/) {
		if (%{$npcs_lut{$id}}) {
			$$return_hash{id} = $id;
			$$return_hash{map} = $npcs_lut{$id}{map};
			$$return_hash{pos}{x} = $npcs_lut{$id}{pos}{x};
			$$return_hash{pos}{y} = $npcs_lut{$id}{pos}{y};		
		}
	}
	else {
		my ($map, $x, $y) = split(/ +/, $id, 3);
		
		$$return_hash{map} = $map;
		$$return_hash{pos}{x} = $x;
		$$return_hash{pos}{y} = $y;
	}
	
	if (defined($$return_hash{map}) && defined($$return_hash{pos}{x}) && defined($$return_hash{pos}{y})) {
		$$return_hash{ok} = 1;
	} else {
		error "Incomplete NPC info or ID not found in npcs.txt\n";
	}
}
Разница в том, что можно было обратиться к НПЦ по IDу, т.к. еще не была введена строгость насчет обращения только с использованием координат.

Счас попробую найти вариант еще древнее...


* * *

В оригинальной Kore этой процедуры не было совсем, но npcs.txt был.
Посмотрим, как он обрабатываеццо...

* * *

Хм. В оригинале это было просто, как палка. Все обращения к нпц из конфига шли только по IDу. Существовал хэш %npcs_lut, в который просто добавлялись все встреченные НПЦ. Т.е., в конфиге было написано: "подойти к нпц c ID 48943209243" - и Кора просто открывала эту табличку, читала из нее название карты и координаты (встреченного ранее нпц), и шла к этой точке - т.е. с точностью до наоборот с тем, как работает ОК сейчас. Соответственно, если нужного IDа старая Кора не знала, она просто говорила Unknown ID (?), и выкидывала действие из очереди команд (?). Стало быть, надо рыть дальше, в юные годы OpenKore...

* * *

Ага, в старой ОК, то же самое. Просто сообщение об ошибке не такое, как сейчас:
error "Incomplete NPC info or ID not found in npcs.txt\n";
Ну я тогда хз. :o

Добавлено спустя 7 минут 36 секунд:

Т.е., поясняю, это сообщение об ошибке ОШИБОЧНОЕ.
В оригинале оно было так, еще раз:
Ошибка: или "Incomplete NPC info", или "ID not found in npcs.txt".
Ну так вот, мужики перестали искать координаты по IDу,
а и теперь ищут только ID по координатам, и но криво обрезали сообщение об ошибке.
Сейчас оно должно звучать так:
"Incomplete NPC info", и всё. IMHO, так.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
amba
Начинающий
Сообщения: 46
Зарегистрирован: Сб окт 06, 2007 6:04 pm

Сообщение amba »

Кстати выполнил макро автоселл руками, он все сделал и после этого ошибка пропала ), вообще шаманство :)
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

amba
Предполагаю, что это нечто лаго-подобное. Ну, например... Подбежал, данные о нпц еще не успели приехать (?!?!?), кора смотрит: "хопа, а нпц-то нет?" - "ошибка, г-да товарищи!".
Хе-хе. А ну как паузу воткнуть перед вызовом getNPCInfo? Только там такая пауза нужна... не обычный sleep, а чтобы main loop крутился.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Ответить