Зацикливание бота / на покупке

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

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

Правила форума
Все вопросы по OK не касающиеся плагинов и макросов публикуются в этом разделе.
Перед тем как что то писать, пожалуйста, удостоверьтесь что данная тема не поднималась, вы полностью изучили мануалы по конфигурационным файлам бота и не нашли там решения.
qwesty
Энтузиаст
Сообщения: 97
Зарегистрирован: Чт сен 20, 2007 4:31 am
Откуда: СПб
Контактная информация:

Зацикливание бота / на покупке

Сообщение qwesty »

В общем, не могу понять, что может привести к подобному поведению бота: он идет на lockMap, убивает одного моба потом делает autoSell, autoStorage и все повторяется.
В конфиге задан вес распродажи 48%, никакие (авто)макросы не запущены.
Причем появилась проблема совершенно неожиданно: ничего в конфиге не менял О.о

Пока вылечил запретив автоматическую распродажу, разгрузку и вставив автомакрос, но это не вариант.

Добавлено спустя 1 час 45 минут 18 секунд:

Прошу прощения, не заметил эту тему viewtopic.php?t=2942 :oops:
Но отключать автопродажу, IMHO, не решение
По-поводу конфликтов конфига с items_control не знаю, вроде раз 10 уже проверял
Вот что в конфиге

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

buyAuto Meat {
	label Meat
	npc prontera 64 125
	distance 5
	minAmount 0
	maxAmount 50
	zeny > 2500
}

buyAuto Red Potion {
	label RedPot
	npc prontera 64 125
	distance 5
	minAmount 0
	maxAmount 50
	zeny > 1000000 // почему-то disabled не срабатывало, соответственно таким образом запрещаю покупать
}

buyAuto Fly Wing {
	label FlyWing
	npc prt_fild05 290 221
	distance 5
	minAmount 0
	maxAmount 10
	zeny > 600
}

buyAuto Butterfly Wing {
	label ButWing
	npc prt_fild05 290 221
	distance 5
	minAmount 0
	maxAmount 2
	zeny > 700
}
items_control

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

all 0 0 1
#Карты и редкие вещи кладем в Кафру и вот что с расходниками
Butterfly Wing 10 1 0
Fly Wing 100 1 0
Meat 50 1 0
Red Potion 50 1 0
Monster's Feed 30 1 0
Concentration Potion 99 1 0
Awakening Potion 99 1 0
Ведро
Энтузиаст
Сообщения: 71
Зарегистрирован: Вс июл 29, 2007 9:19 pm

Сообщение Ведро »

+1, появилось это после 19 числа, т.е. обновления на офе...
чтож делать-то а?
--------------------
- Готово, мастер!
- Что готово?
- Сломал!

Самые эффективные законы всегда работают по принципу:
"... окурок, брошенный мимо урны, засовывается нарушителю в задницу!"

админ имеет все возможные права, ряд невозможных и два невероятных
Lims
Нууууп
Сообщения: 723
Зарегистрирован: Чт ноя 09, 2006 7:55 pm

Сообщение Lims »

Ведро
это было всегда. обновление ни как не повлияло.
qwesty
дай денег боту чтобы он мог полностью все закупить
qwesty
Энтузиаст
Сообщения: 97
Зарегистрирован: Чт сен 20, 2007 4:31 am
Откуда: СПб
Контактная информация:

Сообщение qwesty »

Lims
Меня интересует почему он начал это делать без видимых причин (файл конфига не изменялся). Денег давать не хочу, т.к. это "автономный" макрос прокачки. Кроме того, у него и так все закуплено, в наличии 27 мяса, 10 крыльев и 2 уха, так что пока закупаться не должен.
aka sllh
QWESTY TEAM
qwesty
Энтузиаст
Сообщения: 97
Зарегистрирован: Чт сен 20, 2007 4:31 am
Откуда: СПб
Контактная информация:

Сообщение qwesty »

В общем я хз совсем, вот что происходит каждый раз

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

You are now in the game
Your Coordinates: 267, 355
Calculating random route to: Prontera Field(prt_fild07): 160, 172
Calculating auto-storage route to: Prontera Field(prt_fild05): 290, 224
ai print
------ AI Sequence ---------------------
0: skill_use {skillHandle=>'NV_FIRSTAID',giveup=>{timeout=>'1',time=>'1190552504'},
ret=>'',waitBeforeUse=>{timeout=>'',time=>'1190552504'},
lv=>'1',y=>'',target=>'P...',maxCastTime=>
{timeout=>'',time=>'1190552504'},minCastTime=>{timeout=>'',time=>'1190552504'},
tag=>'',prefix=>'useSelf_skill_1'}

1: route 

2: storageAuto {forcedByBuy=>'1',npc=>{ok=>'1',map=>'prt_fild05',pos=>{y=>'224',x=>'290'}}}

3: route 

------ AI Sequences --------------------
Lims
Нууууп
Сообщения: 723
Зарегистрирован: Чт ноя 09, 2006 7:55 pm

Сообщение Lims »

qwesty
вот потому я и забил на свой автомакрос свордовый. покупка бажная шописдец.
buyAuto Red Potion {
label RedPot
npc prontera 64 125
distance 5
minAmount 0
maxAmount 50
zeny > 1000000 // почему-то disabled не срабатывало, соответственно таким образом запрещаю покупать
}
нифига это не запрещает. ему надо красных потов купить. и пока он их не купит он будет так бегать.
попробуй из этого блока стереть ему npc
qwesty
Энтузиаст
Сообщения: 97
Зарегистрирован: Чт сен 20, 2007 4:31 am
Откуда: СПб
Контактная информация:

Сообщение qwesty »

Lims
Спасибо огромное!! помогло :Yahoo!:

Хотя странно, такое же условие стояло на мясо, он не пытался так делать, но все равно еще раз большое спасибо )

Добавлено спустя 1 час 2 минуты 21 секунду:

Возник еще один вопрос, продолжение первого =)
Итак, допустим, что у бота закончилось мясо, в конфиге
buyAuto Meat {
label Meat
npc prontera 64 125
distance 5
minAmount 0
maxAmount 50
zeny > 2500
}
Если денег не хватает, то он начинает бегать туда-сюда, как уже было, тогда я попробовал удалить zeny > 2500, в этом случае он пытается купить именно 50 мяса, но поскольку денег не хватает, то все повторяется =) Существует ли возможность указать боту, чтобы затаривался он на все деньги что есть? Вроде посмотрел весь мануал, но похожего не нашел, может плохо смотрел =( Или все же прийдется писать макрос, который просто будет запрещать/разрешать ему ходить скупаться?
aka sllh
QWESTY TEAM
qwesty
Энтузиаст
Сообщения: 97
Зарегистрирован: Чт сен 20, 2007 4:31 am
Откуда: СПб
Контактная информация:

Сообщение qwesty »

В общем, не найдя нужного мне условия, решил немного расковырять Кору =) Сделал следующее: в параметре zeny теперь указывается не то, сколько зенек надо иметь, чтобы сработал автобай, а стоимость предмета, все остальное остается без изменений. Для того, чтобы это начало работать, нужно подправить файл src\AI\CoreLogic.pm
Ищем ф-ию processAutoBuy
Ищем в ней строчку

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

next if ($config{"buyAuto_$i"."_zeny"} && !inRange($char->{zenny}, $config{"buyAuto_$i"."_zeny"}));
и удаляем ее
Потом ищем

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

if ($args->{invIndex} ne "") {
# this item is in the inventory already, get what we need
	$messageSender->sendBuy($args->{itemID}, $config{"buyAuto_$args->{index}"."_maxAmount"} - $char->inventory->get($args->{invIndex})->{amount});
} else {
		# get the full amount
		$messageSender->sendBuy($args->{itemID}, $config{"buyAuto_$args->{index}"."_maxAmount"});
	}
И заменяем на

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

	my $ritemsCount = $char->{zenny}/$config{"buyAuto_$args->{index}"."_zeny"};
my $itemsCount = $config{"buyAuto_$args->{index}"."_maxAmount"} - $char->inventory->get($args->{invIndex})->{amount};
if ($ritemsCount >= $itemsCount) {
	$messageSender->sendBuy($args->{itemID}, $itemsCount);
} else  {
		$messageSender->sendBuy($args->{itemID}, $ritemsCount);
	}
Теперь, чтобы бот покупал, например мясо либо maxAmount штук, либо столько, на сколько у него хватает денег, достаточно задать в конфиге

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

buyAuto Meat {
	label Meat
	npc prontera 64 125
	distance 5
	minAmount 0
	maxAmount 50
	zeny 50}
Добавлено спустя 32 минуты 54 секунды:

В принципе, стало понятно, почему не работает флаг disabled: он просто не проверяется, можно, конечно, добавить код проверки, но IMHO, безсмысленно т.к. есть возможность задать npc none
Lims
Нууууп
Сообщения: 723
Зарегистрирован: Чт ноя 09, 2006 7:55 pm

Сообщение Lims »

qwesty
если задать Npc none то блоки покупки которые идут ниже где не указан нпц могут не проверяться(у меня так было)
такчто если есть возможность, то прикрути disabled
dvdc
Бывалый
Сообщения: 556
Зарегистрирован: Вс ноя 05, 2006 1:43 pm
Контактная информация:

Сообщение dvdc »

qwesty
отличный код, спасибо. работает шикарно :)
одно только вот смущает... пусть параметр zeny всё-таки относится к количеству денег, для срабатывания автозакупки...
а вот для того, чтобы бот покупал, например мясо либо maxAmount штук, либо столько, на сколько у него хватает денег, предлагаю ввести переменную price ;-)
тогда не запутаешься в конфиге
qwesty
Энтузиаст
Сообщения: 97
Зарегистрирован: Чт сен 20, 2007 4:31 am
Откуда: СПб
Контактная информация:

Сообщение qwesty »

dvdc
Я просто сделал под личные нужды =) ИМХО, бесполезно срабатывание на деньги, т.к. он все равно будет по maxAmount'у покупать )
Ну и фикс дизейбла в такой интерпритации: в той же ф-ии ищем

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

for (my $i = 0; exists $config{"buyAuto_$i"}; $i++) {
	next if (!$config{"buyAuto_$i"});
И заменяем next if на

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

next if (!$config{"buyAuto_$i"} || $config{"buyAuto_$i"."_zeny"} eq "" || !$config{"buyAuto_$i"."_zeny"} || $config{"buyAuto_$i"."_disabled"} == 1 || $char->{zenny} <  $config{"buyAuto_$i"."_zeny"});
Если в Zeny будет 0 или none, то этот блок никогда не сработает.

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

Всмысле, disabled теперь тоже работает =) Просто для корректного вычисления в Zeny желательно указывать реальную себестоимость предмета =)
aka sllh
QWESTY TEAM
dvdc
Бывалый
Сообщения: 556
Зарегистрирован: Вс ноя 05, 2006 1:43 pm
Контактная информация:

Сообщение dvdc »

qwesty
отлично! )
теперь нормально всё работает, и не выскакивает постоянно бесючие Incomplete NPC )))

СПА-СИ-БО ! )

p.s. эх, знать бы мне перл... ан нет ведь, только php почти в совершенстве... и c++ немножко )
qwesty
Энтузиаст
Сообщения: 97
Зарегистрирован: Чт сен 20, 2007 4:31 am
Откуда: СПб
Контактная информация:

Сообщение qwesty »

dvdc, не за что =)
ЗЫЖ Я перл "знаю" с сегодняшней ночи :D
dvdc
Бывалый
Сообщения: 556
Зарегистрирован: Вс ноя 05, 2006 1:43 pm
Контактная информация:

Сообщение dvdc »

забавно...

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

buyAuto Red Potion {
	label RedPot
	npc [где-то продавец всё-таки есть ;) ]
	distance 5
	minAmount 0
	maxAmount 50
	zeny 50
}
по идее бот должен бегать к нпц затариваться красными потами, но случается интересная ерунда: когда красные поты кончаются бот садится и сидит, регенит хп, хотя по идее он должен сломя голову бежать autosell'ить и autobuy'ить )
items_control.txt : Red Potion 50 1 0

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

кстати, поты он почему-то покупает в два захода. сначала 28, потом 22... видимо ему религия не позволяет сразу 50 взять )

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

мне как-то не хочется делать автомакрос inventory Red Potions < 1...
итак уже макрос большой )
qwesty
Энтузиаст
Сообщения: 97
Зарегистрирован: Чт сен 20, 2007 4:31 am
Откуда: СПб
Контактная информация:

Сообщение qwesty »

Мм.. странно, у меня целый день все боты бегают как заведенные =)
А что с баблом творится? По-идее, после того как отрегенится, должен бежать, разве что у тебя денег меньше 50 зени

Добавлено спустя 1 минуту 32 секунды:
кстати, поты он почему-то покупает в два захода. сначала 28, потом 22... видимо ему религия не позволяет сразу 50 взять )
Угу, но сейча сил разбирать нет =)) Видимо где-то с условиями намутил )
aka sllh
QWESTY TEAM
Ответить