CODE:
# 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;
#############################################################
Add this on your Config.txt
refineAuto 1
refineAuto_npc ein_in01 24 87
refineAuto_distance 5
refineAuto_maxRefine 9
refineAuto_npc_steps c r4 r1 d9 c r0 c c r0 c c n
refineAuto_equip Muffler [1]
refineAuto_material Elunium
refineAuto_minZenny 14000
refineAuto_incremental 4
refineAuto_getAutoAdjust 0
refineAuto_dcWhenDone 0
refineAuto_visitStorage 0
Just Edit your Server on Servers.txt
Downlaod Link : http://www.megaupload.com/?d=XFAHVZTT
do i have to edit the codes?coz im getting a syntax error on line 49 said that %field requires a package sort of like that.. wats that suppose to mean?sry noob here
ReplyDeletebtw, is this applicable in XileRO today?im kinda applying this in that game,, again, does the code need to be edit or thats just it?coz i dont know which is which that im going to edit out....plz help thnxx
ReplyDelete