Помогите вернуть к жизни плагин refineAuto.pl на заточку.

Дополнения к OpenKore, расширяющиее её функциональность, называются плагинами.

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

vasa666
Энтузиаст
Сообщения: 103
Зарегистрирован: Вт июн 19, 2007 8:58 pm
Откуда: Москва
Контактная информация:

Помогите вернуть к жизни плагин refineAuto.pl на заточку.

Сообщение vasa666 »

Был вот такой плагин: http://forums.openkore.com/viewtopic.php?f=34&t=54

refineAuto.pl

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

# refineAuto.pl
#
# Automated Mass Refining
# version 0.0.1
# Openkore 2.0.0

package refineAuto;

use strict;
use Plugins;
use Globals;
use AI;
use Log;
use Actor::Item;
use Network::Send;
use Misc;

# Config keys used:
# refineAuto         enable/disable auto refining
# refineAuto_npc         refiner npc
# refineAuto_distance      distence to stand from npc
# refineAuto_maxRefine      maximum refining rate
# refineAuto_npc_steps      npc talking sequence when refining
# refineAuto_equip      equipment name that will be refined, without +
# refineAuto_useMagnifier   enable item identification with magnifier
# refineAuto_material      materials needed to refine
# refineAuto_minZenny      minimum amount of zenny needed to refine
# refineAuto_getAutoAdjust   automatically adjusts getAuto
# refineAuto_incremental   when incremental refining should start
# refineAuto_dcWhenDone      disconnect if resources are depleted

Plugins::register('autorefine', 'automatic refining', \&unload_callback);
my $plugin_hook = Plugins::addHook("AI_pre", \&autorefine);

sub autorefine {
   # Initiate autorefine, AI must be idle
   if ($config{'refineAuto'} && AI::isIdle) {
      AI::queue('refineAuto');
      Log::message "refineAuto initiated\n";
   } elsif (AI::is('refineAuto')) {
      my $args = AI::args;

      if (!$args->{npc}) {
         $args->{npc} = {};
         main::getNPCInfo($config{refineAuto_npc},
                $args->{npc});
      }
      # Move to NPC if needed
      elsif (($field{name} ne $args->{npc}{map})
         || ((Utils::distance($args->{npc}{pos}, $char->{pos_to})
             > $config{refineAuto_distance}))) {
            
         Log::message "Calculating refineAuto route to: " .
                 "$maps_lut{$args->{npc}{map}.'.rsw'}" .
                 "($args->{npc}{map}): " .
                 "$args->{npc}{pos}{x}, " .
                 "$args->{npc}{pos}{y}\n", "route";
         main::ai_route($args->{npc}{map}, $args->{npc}{pos}{x},
                   $args->{npc}{pos}{y},
                   distFromGoal =>
                         $config{refineAuto_distance});
      } else {
      # We arrived at refiner
         
         # Check arguments for incremental refining
         # If refineAuto_incremental is invalid or not specified
         # Set refineAuto_incremental to maxRefine

         if (!($config{refineAuto_incremental} > 0
               && $config{refineAuto_incremental}
                  < $config{refineAuto_maxRefine})) {
            
            $config{refineAuto_incremental} =
               $config{refineAuto_maxRefine};
         }
         
         # Equipped and ready to refine
         if ($args->{equip}) {
            refine_item($args);
         }
         
         # Check if we have all the requirements
         elsif (check_requirements($args)) {
            equip_item($args);
         }
      }
   }
}

sub refine_item {
   my $args = shift;

   Log::message "Trying to refine $args->{equip}{name}\n";

   if ($args->{refine} < $config{refineAuto_incremental}) {
      main::ai_talkNPC($args->{npc}{pos}{x}, $args->{npc}{pos}{y},
             $config{refineAuto_npc_steps});
      Log::message "Refining $args->{equip}{name}\n";
      $args->{equip} = undef;
      $args->{refine} = undef;
   }
}

sub equip_item {
   my $args = shift;
   my $i;
   my $item;
   my $type;
   my $refine;

   $args->{equip} = undef;
   $args->{refine} = undef;

   for ($i = 0; $i < @{$char->{inventory}}; $i++) {
      $item = $char->{inventory}[$i];
      next unless $item && %{$item};

      $type = $item->{type};
      # Check if it is an equipment, refer to tables/itemtypes.txt
      if ($type == 4 || $type == 5 || $type == 11 || $type == 8
       || $type == 9) {
          # Check if it is the right equipment
         if ($item->{name} =~
             m/(\Q$config{refineAuto_equip}\E)/) {
            
            Log::message "Trying to equip $1\n";
            # Check its current refine rate
            $refine = $item->{name} =~ m/^\+(\d)/ ? $1 : 0;
            if ($refine < $config{refineAuto_incremental}) {
               identify_item($item);
               
               # If this doesn't work, just sendEquip
               $item->equip;

               $args->{equip} = $item;
               $args->{refine} = $refine;
               
               Log::message "Item equipped\n";
               return;
            }
         }
      }
   }
}

# Assumes proper configuration
sub identify_item {
   my $item = shift;
   
   # Check if the item is already Identified
   if ($item->{identified}) {
      return;
   }
}

sub check_requirements {
   my $args = shift;
   
   $args->{retry} = 0 unless defined $args->{retry};
   $args->{getPlus} = 0 unless defined $args->{getPlus};
   
   # Item shortage after 3 retries
   if ($args->{retry} > 3) {
      if ($config{refineAuto_incremental} > 0
          && $config{refineAuto_incremental}
             < $config{refineAuto_maxRefine}) {
             $args->{retry} = 0;
             $config{refineAuto_incremental} += 1;
      } else {
         done_refine();
      }
   }
   
   # Automatic getAuto adjustment, only done when storage auto failed
   if ($config{refineAuto_getAutoAdjust} == 1 && $args->{retry} > 1
       && $args->{getPlus} < $config{refineAuto_incremental}) {
      # Look for getAuto index to adjust
      my $i = 0;
      my $done = 0;
      while ($config{"getAuto_$i"} ne "") {
         if ($config{"getAuto_$i"} =~
            m/(\Q$config{refineAuto_equip}\E)/) {
            
            my $prefix = ($args->{getPlus} == 0) ?
                    "" : "+$args->{getPlus} ";
               
            $config{"getAuto_$i"} = $prefix .
                  $config{refineAuto_equip};
            Log::message 'getAuto adjusted\n';
            $args->{getPlus} += 1;
            $args->{retry} = 0;
            $done = 1;
         }
         last if $done;
         $i++;
      }
   }
   
   # Check for config
   if ($config{refineAuto_equip}
       && $config{refineAuto_material}
       && $config{refineAuto_minZenny}) {
          my $material = Actor::Item::get($config{refineAuto_material}, 0, 1);
      my $equip = undef;
      my $want_magnifier = undef;
      my $plus;
      
      # Check for equipment, starting from +0 to max
      for ($plus = 0;
           $plus < $config{refineAuto_incremental}; $plus++) {
         my $prefix = ($plus == 0) ? "" : "+$plus ";
         $equip = Actor::Item::get($prefix .
                  $config{refineAuto_equip}, 0, 0);
         last if defined $equip;
      }
      
      if ($config{refineAuto_useMagnifier}) {
         if (!defined Actor::Item::get("Magnifier", 0, 1)) {
            $want_magnifier = 1;
         }
      } elsif ($char->{skills}{MC_IDENTIFY}{lv} != 1) {
         Log::message "No Identify skill, magnifier is needed";
         $config{refineAuto_useMagnifier} = 1;
         return 0;
      }
      
      if (defined $material
          && defined $equip
          && $char->{zenny} >= $config{refineAuto_minZenny}
          && !$want_magnifier) {
             $args->{retry} = 0;
             return 1;
      } elsif ($char->{zenny} < $config{refineAuto_minZenny}) {
         done_refine();
      } elsif ($args->{retry} > 0 && !defined $material) {
         done_refine();
      } else {
         if ($config{refineAuto_visitStorage} != 0) {
            AI::queue("storageAuto");
         }
         $args->{retry} += 1;
      }


   } else {
      Log::message "Incomplete configuration for refineAuto\n";
   }
   return 0;   
}

sub done_refine {
   if ($config{refineAuto_dcWhenDone}) {
      Misc::quit();
   } else {
      AI::dequeue();
   }
}

sub unload_callback {
}

return 1;


config.txt

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


refineAuto 1
refineAuto_npc alberta_in 28 58
refineAuto_distance 5
refineAuto_maxRefine 7
refineAuto_npc_steps r5 r0 r0
refineAuto_equip Boots [1]
refineAuto_material Elunium
refineAuto_minZenny 2000
refineAuto_incremental 4
refineAuto_getAutoAdjust 0
refineAuto_dcWhenDone 0
refineAuto_visitStorage 0
Который видимо забросили и под последнии версии не настраивали... Хотя сам плагин на заточку довольно удобный.. в отличии от других, тут реализована ещё и идентификация предметов.
Сейчас бот выдаёт такую ошибку:

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

Сообщение об ошибке:
Плагин содержит синтаксическую  ошибку:
Global symbol "%field" requires explicit package name at
BOT/тралала_тутадрес/refineAuto.pl line 49
Кто ни будь может вдохнуть в него новую жизнь?))
ivano
Энтузиаст
Сообщения: 74
Зарегистрирован: Чт ноя 20, 2008 8:19 am

Re: Помогите вернуть к жизни плагин refineAuto.pl на заточку.

Сообщение ivano »

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

Re: Помогите вернуть к жизни плагин refineAuto.pl на заточку.

Сообщение EternalHarvest »

openkore.com - Porting plugins
vasa666
Энтузиаст
Сообщения: 103
Зарегистрирован: Вт июн 19, 2007 8:58 pm
Откуда: Москва
Контактная информация:

Re: Помогите вернуть к жизни плагин refineAuto.pl на заточку.

Сообщение vasa666 »

EternalHarvest писал(а):openkore.com - Porting plugins
Спасибо...

запись в 49-й строке исправил.. на это:

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

      elsif (($field->{name} ne $args->{npc}{map})
вроде плагин загружается.. но всёравно не работает((

пишесто постоянно:
refineAuto initiated
refineAuto initiated
refineAuto initiated
refineAuto initiated


ктоинть из профи. помогите( наверняка же пару символов подправить и всё.
Ну незнаю я програмирования :( хелп!

Скилл разпознования итема у БСа не видет... лупы не использует(( ну и соответсвенно вообще не точит..
Аватара пользователя
AndreyLun
Грамотный
Сообщения: 280
Зарегистрирован: Пн фев 05, 2007 5:55 pm

Re: Помогите вернуть к жизни плагин refineAuto.pl на заточку.

Сообщение AndreyLun »

Скил Идентификация, расходный лут, экипировку по русски надеюсь пишешь? :)
vasa666
Энтузиаст
Сообщения: 103
Зарегистрирован: Вт июн 19, 2007 8:58 pm
Откуда: Москва
Контактная информация:

Re: Помогите вернуть к жизни плагин refineAuto.pl на заточку.

Сообщение vasa666 »

зачем? 0_о там же на англ и лут и касты... и экипировка....
если ты про то что правильно ли я это пишу.. то вот)

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

refineAuto 1
refineAuto_npc prt_in 63 60
refineAuto_distance 5
refineAuto_maxRefine 6
refineAuto_npc_steps лалала-тут бараз с НПЦ
refineAuto_equip Muffler [1]
#refineAuto_useMagnifier 1
refineAuto_material Elunium
refineAuto_minZenny 2000
refineAuto_incremental 4
refineAuto_getAutoAdjust 0
refineAuto_dcWhenDone 0
refineAuto_visitStorage 0
Аватара пользователя
AndreyLun
Грамотный
Сообщения: 280
Зарегистрирован: Пн фев 05, 2007 5:55 pm

Re: Помогите вернуть к жизни плагин refineAuto.pl на заточку.

Сообщение AndreyLun »

Плагин видит английский Elunium и Muffler [1] у тебя в инвентаре?
Локализация на английском у тебя?
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: Помогите вернуть к жизни плагин refineAuto.pl на заточку.

Сообщение EternalHarvest »

Надо писать так, как предметы отображаются в OpenKore.
vasa666
Энтузиаст
Сообщения: 103
Зарегистрирован: Вт июн 19, 2007 8:58 pm
Откуда: Москва
Контактная информация:

Re: Помогите вернуть к жизни плагин refineAuto.pl на заточку.

Сообщение vasa666 »

ну само сабой так и пишу))
даж спецально проверял их написание)) тупа из коры копировал))
и название скила в плагине проверил.. "MC_IDENTIFY"
ivano
Энтузиаст
Сообщения: 74
Зарегистрирован: Чт ноя 20, 2008 8:19 am

Re: Помогите вернуть к жизни плагин refineAuto.pl на заточку.

Сообщение ivano »

Сервер какой?
vasa666
Энтузиаст
Сообщения: 103
Зарегистрирован: Вт июн 19, 2007 8:58 pm
Откуда: Москва
Контактная информация:

Re: Помогите вернуть к жизни плагин refineAuto.pl на заточку.

Сообщение vasa666 »

да причём тут сервак то?) как это влияет на одевание шмота, его распознование и т.д.?) все другие плагины работают на ура... этот нехочет..

Добавлено спустя 3 минуты 13 секунд:
Кто ни будь из разбирающихся в них моет его протестить? Если он у вас заработает без внесения изменений в плагин под какуенить последнюю SVN то я признаю что я нуб и пайду ковырять конфиги и т.д. А если нужны изменения в самом плагине, то у спеца это займёт минут 15..
я в программировании несилён..
Если сделаете, то у народа будет нормальная "точилка" и вам будет много респекта и уважухи)
vasa666
Энтузиаст
Сообщения: 103
Зарегистрирован: Вт июн 19, 2007 8:58 pm
Откуда: Москва
Контактная информация:

Re: Помогите вернуть к жизни плагин refineAuto.pl на заточку.

Сообщение vasa666 »

Ну помогите вернуть его к жизни! :sorry:
vasa666
Энтузиаст
Сообщения: 103
Зарегистрирован: Вт июн 19, 2007 8:58 pm
Откуда: Москва
Контактная информация:

Re: Помогите вернуть к жизни плагин refineAuto.pl на заточку.

Сообщение vasa666 »

Пока что понял, это заменить это:

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

   for ($i = 0; $i < @{$char->{inventory}}; $i++) {
      $item = $char->{inventory}[$i];
      next unless $item && %{$item};

на вот это:

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

    foreach my $item (@{$char->inventory->getItems()}) {

а вот как правильно заменить это:

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

      elsif (($field{name} ne $args->{npc}{map})

толи так:

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

      elsif (($field->name ne $args->{npc}{map})
или так:

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

      elsif (($::field{'name'} ne $args->{npc}{map})

а может так:

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

      elsif (($field->{name} ne $args->{npc}{map})
Я незнаю!...
Может всётаки кто ни будь решится помочь с этим? Ибо я незнаю не синтаксиса, не методов построения всего это, не уж темболее тонкостей что и как изменилсь в новых версиях опенкоры.

Если есть желающие помочь, готов предоставить бота с настроеным конфигом, серверс и т.д. а так же с чаром и лутом для испытаний.
Ответить