bugtraq:about - если вы нашли ошибку в OpenKore, то...

BugTraq: обнаруженные ошибки и обсуждение их устранения.

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

Аватара пользователя
[GM]#05
Профессионал
Сообщения: 593
Зарегистрирован: Пт фев 09, 2007 8:44 pm
Сервер RO:: rRO

Re: bugtraq:about - если вы нашли ошибку в OpenKore, то...

Сообщение [GM]#05 »

Если перед всеми блоками автозакупки стоит пустой блок либо блок с пустым npc, то автозакупка не срабатывает при отсутствии расходки.
Собственно вот(блок автозакупки):

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

while (1) {
	last if (!$config{"buyAuto_$i"} || !$config{"buyAuto_$i"."_npc"});
Выходит из цикла если встречает такой блок, а т.к. такой блок первый, то и следовательно вышли и думаем, закупаться ненадо.
Поэтому у меня и были проблемы с автозакупкой...

__
(pJ: проверить!)
Последний раз редактировалось [GM]#05 Пт дек 12, 2008 7:23 pm, всего редактировалось 1 раз.
Аватара пользователя
Click
Разработчик
Сообщения: 1564
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Re: bugtraq:about - если вы нашли ошибку в OpenKore, то...

Сообщение Click »

и как решить? если добавитьпроверку на наличие второго блока, то у кого то будет два первых пустых :) идеи?
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Re: bugtraq:about - если вы нашли ошибку в OpenKore, то...

Сообщение kLabMouse »

Click
Просто Игнорировать пустые блоки.
Аватара пользователя
[GM]#05
Профессионал
Сообщения: 593
Зарегистрирован: Пт фев 09, 2007 8:44 pm
Сервер RO:: rRO

Re: bugtraq:about - если вы нашли ошибку в OpenKore, то...

Сообщение [GM]#05 »

(pJ: проверить!)
Сейчас еще раз проверил:
Оставляю пустой блок который есть изначально в конфиге для примера.
Ниже пишу свой блок. Автозакупка не срабатывает. Удаляю пустой блок, reload conf, убил моба пошел закупился.
Да и по коду видно, что в этом цикле задается переменная отвечающая нужно идти закупиться или не нужно, а при встрече пустого блока или блока без npc он даже не доходит до задания этой переменной и выходит из цикла сразу же, и всегда думает что закупаться ненадо.
Аватара пользователя
Click
Разработчик
Сообщения: 1564
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Re: bugtraq:about - если вы нашли ошибку в OpenKore, то...

Сообщение Click »

kLabMouse писал(а):Click
Просто Игнорировать пустые блоки.
как это сделать, совместив с

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

while (1) {
   last if (!$config{"buyAuto_$i"} || !$config{"buyAuto_$i"."_npc"});
или вообще передумать логику? :Search:
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Re: bugtraq:about - если вы нашли ошибку в OpenKore, то...

Сообщение kLabMouse »

Click
Думаю немного передумать логику.
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Re: bugtraq:about - если вы нашли ошибку в OpenKore, то...

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

удалил бред "Tycoon'а" :evil:
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: bugtraq:about - если вы нашли ошибку в OpenKore, то...

Сообщение EternalHarvest »

Макро-плагин неправильно обрабатывает строчки вида
@rand (1, 10) @rand (1, 10)
подставляя во все места одно и то же число.

Фикс:
Macro::Parser::parseCmd

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

+		my $randomized = 0;
		if ($kw eq 'npc')           {$ret = getnpcID($arg)}
		elsif ($kw eq 'cart')       {($ret) = getItemIDs($arg, $::cart{'inventory'})}
		elsif ($kw eq 'Cart')       {$ret = join ',', getItemIDs($arg, $::cart{'inventory'})}
		elsif ($kw eq 'inventory')  {($ret) = getInventoryIDs($arg)}
		elsif ($kw eq 'Inventory')  {$ret = join ',', getInventoryIDs($arg)}
		elsif ($kw eq 'store')      {($ret) = getItemIDs($arg, \@::storeList)}
		elsif ($kw eq 'storage')    {($ret) = getStorageIDs($arg)}
		elsif ($kw eq 'Storage')    {$ret = join ',', getStorageIDs($arg)}
		elsif ($kw eq 'player')     {$ret = getPlayerID($arg)}
		elsif ($kw eq 'vender')     {$ret = getVenderID($arg)}
-		elsif ($kw eq 'random')     {$ret = getRandom($arg)}
+		elsif ($kw eq 'random')     {$ret = getRandom($arg); $randomized = 1}
-		elsif ($kw eq 'rand')       {$ret = getRandomRange($arg)}
+		elsif ($kw eq 'rand')       {$ret = getRandomRange($arg); $randomized = 1}
		elsif ($kw eq 'invamount')  {$ret = getInventoryAmount($arg)}
		elsif ($kw eq 'cartamount') {$ret = getCartAmount($arg)}
		elsif ($kw eq 'shopamount') {$ret = getShopAmount($arg)}
		elsif ($kw eq 'storamount') {$ret = getStorageAmount($arg)}
		elsif ($kw eq 'config')     {$ret = getConfig($arg)}
		elsif ($kw eq 'arg')        {$ret = getWord($arg)}
		elsif ($kw eq 'eval')       {$ret = eval($arg)}
		return unless defined $ret;
		return $cmd if $ret eq '_%_';
		$targ = q4rx $targ;
+		unless ($randomized) {
			$cmd =~ s/\@$kw\s*\(\s*$targ\s*\)/$ret/g
+		} else {
+			$cmd =~ s/\@$kw\s*\(\s*$targ\s*\)/$ret/
+		}
Аватара пользователя
Click
Разработчик
Сообщения: 1564
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Re: bugtraq:about - если вы нашли ошибку в OpenKore, то...

Сообщение Click »

это ты в какой свн?

Добавлено спустя 2 минуты 18 секунд:
а если мы у плеера два раза будет спрашивать чтонить в одной стоке, то он тоже будет выдавать одинаково?

Добавлено спустя 7 минут 23 секунды:
Re: bugtraq:about - если?ы нашли ошибку??p????то?.
ну? общем?уть,?сли?прашиваем одно и тоже?есколько?аз в одной строке?то?ам выдаст?динаковый?езультат?значит?огда надо?делать?бщее решение?ля?сех?
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: bugtraq:about - если вы нашли ошибку в OpenKore, то...

Сообщение EternalHarvest »

Click писал(а):а если мы у плеера два раза будет спрашивать чтонить в одной стоке, то он тоже будет выдавать одинаково?
Сейчас заменяются все одинаковые вхождения @конструкций одним махом.
Click писал(а):ну? общем?уть,?сли?прашиваем одно и тоже?есколько?аз в одной строке?то?ам выдаст?динаковый?езультат?значит?огда надо?делать?бщее решение?ля?сех?
Не для всех, у всего кроме @rand и @random оно и должно выдавать одинаково (пока парсится одна строчка макроса, окружение и конфиг не меняется).
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: bugtraq:about - если вы нашли ошибку в OpenKore, то...

Сообщение EternalHarvest »

При использовании команды guild leave (а также видимо request, ally, break, kick) выдаётся "You are not in a guild".

Фикс:
&src::Commands::cmdGuild

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

-	} elsif (!defined $char->{guild}) {
+	} elsif (!%guild) {
		error T("You are not in a guild.n");
Добавлено спустя 2 минуты 52 секунды:
Хм... %guild определено, даже если гильдии нет. Так что надо что-то другое.
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Re: bugtraq:about - если вы нашли ошибку в OpenKore, то...

Сообщение kLabMouse »

EternalHarvest
может значение проверять?
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: bugtraq:about - если вы нашли ошибку в OpenKore, то...

Сообщение EternalHarvest »

Проверки типа

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

!defined $guild{ID}
!$guild{ID}
!defined $char->{guildID}
не катят...
Аватара пользователя
Click
Разработчик
Сообщения: 1564
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Re: bugtraq:about - если вы нашли ошибку в OpenKore, то...

Сообщение Click »

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

+      unless ($randomized) {
         $cmd =~ s/\@$kw\s*\(\s*$targ\s*\)/$ret/g
+      } else {
+         $cmd =~ s/\@$kw\s*\(\s*$targ\s*\)/$ret/
+      }
/$ret/g что значит g на конце и почему её нету во второй строке?
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: bugtraq:about - если вы нашли ошибку в OpenKore, то...

Сообщение EternalHarvest »

Click писал(а):

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

+      unless ($randomized) {
         $cmd =~ s/\@$kw\s*\(\s*$targ\s*\)/$ret/g
+      } else {
+         $cmd =~ s/\@$kw\s*\(\s*$targ\s*\)/$ret/
+      }
/$ret/g что значит g на конце и почему её нету во второй строке?
g - заменить всё
Я писал же тут где-то, что там был за баг.
Во второй строке не надо, потому что иначе неправильно обрабатываются строки вида "@rand (1, 2) @rand (1, 2)" - заменяет всё сразу одним результатом.
Ответить