Bot Guides and Installation

June 12, 2012

Safest Auto Bot Buying Macro [autotrade.pl]


Instructions:

In your Control Folder create:
autotrade.txt

this is where you can put your item name/s and their price/s

syntax: [item name] [price]

example:
Blue Herb 10000 (no comma)

Then, in your config.txt locate dealAuto and set it to 0 and then add tradeAuto 1

tradeAuto 1
dealAuto 0

Finally for the autotrade.pl codes
• Paste the codes below in your notepad and save it as autotrade.pl and put it inside your Bot Folder.

-----------------------------------------------------------------------
package autoTrade;


#ported from messykorexp by Joseph
#original code by systeman


use strict;
use Globals;
use Log qw(message warning error debug);
use AI;
use Misc;
use Network::Send;
use Utils;


Plugins::register('autoTrade', 'automated chat room dealing', \&Unload);
my $hook1 = Plugins::addHook('AI_pre', \&call);
my $hook2 = Plugins::addHook('parseMsg/pre', \&packet);


# load table file
our %trade_lut;
my $file = "$Settings::control_folder/autotrade.txt";
my $cfID = Settings::addConfigFile($file, \%trade_lut, \&FileParsers::parseDataFile_lc);
Settings::load($cfID);
undef $file;


sub Unload {
Plugins::delHook('AI_pre', $hook1);
Plugins::delHook('parseMsg/pre', $hook2);
Settings::delConfigFile($cfID);
}


my $dealTrade;
my $dealFinalize;
my $tradeDealAddItem;
my $itemAddTimeout;


# TIMEOUTS: you can change these if you want


# time to wait for them to add items before cancelling?
my $itemWaitTime = 10;
# time to wait before accepting deal request?
my $dealAcceptTime = 2;
# time to wait before adding zeny once they finalize their item choices?
my $zenyAddDelay = 2;


sub packet {
my $hookName = shift;
my $args = shift;
my $switch = $args->{switch};
my $msg = $args->{msg};


if ($switch eq "00E9") {
my $amount = unpack("L1", substr($msg, 2,4));
my $ID = unpack("S1", substr($msg, 6,2));
if ($ID > 0) {
# they added an item, so reset the timeout
$tradeDealAddItem = 1;
}
}
if ($switch eq "01F4") {
#deal request, wait before accepting
$itemAddTimeout = time;
}
if ($switch eq "00E5" || $switch eq "01F4") {
#deal request, wait before accepting
$itemAddTimeout = time;
}
if ($switch eq "00EC") {
my $type = unpack("C1", substr($msg, 2, 1));
if ($type == 1) {
#they finalize their item selections
$itemAddTimeout = time;
}
}
}


sub call {
AUTOTRADE: {
if (AI::is("","tradeAuto", "deal") && $config{tradeAuto} && $char->{skills}{NV_BASIC}{lv} > 4) {
if (AI::action ne "tradeAuto" && AI::action ne "deal" && $::currentChatRoom ne "") {
message "Begin auto-trade mode.\n", "autoTrade";
if ($config{dealAuto}) {
$config{dealAuto} = 0;
Misc::configModify("dealAuto", $config{dealAuto});
}
AI::queue("tradeAuto");
}


last AUTOTRADE if !AI::is("tradeAuto","deal");


if (Utils::timeOut($itemAddTimeout,$dealAcceptTime) && $::incomingDeal{name} && !$::currentDeal{name}) {
Network::Send::sendDealAccept(\$remote_socket);
undef $dealFinalize;
undef $dealTrade;
$itemAddTimeout = time;
message "Sent deal accept, begin trading\n", "autoTrade";
}
last AUTOTRADE if (!$::currentDeal{name});
if (!Utils::timeOut($itemAddTimeout,$itemWaitTime) && $tradeDealAddItem) {
$itemAddTimeout = time;
undef $tradeDealAddItem;
}
if (($::currentDeal{other_finalize} && Utils::timeOut($itemAddTimeout,$zenyAddDelay)) || Utils::timeOut($itemAddTimeout,$itemWaitTime)) {
if ($::currentDeal{other} eq ()) {
message "Other person didn't add any items, cancelling...\n", "autoTrade";
Network::Send::sendCurrentDealCancel(\$remote_socket);
$itemAddTimeout = time;
} elsif (!$dealFinalize) {
my $sumvalue;


my @currentDealOther;
foreach (keys %{$::currentDeal{other}}) {
push @currentDealOther, $_;
}
my $max = @currentDealOther;
for (my $i = 0;$i < $max;$i++) {
my $found = 0;
my $ID = $currentDealOther[$i];
my $name = lc main::itemName($::currentDeal{other}{$ID});
if (defined $trade_lut{$name}) {
message "Add ".$trade_lut{$name}."z x $::currentDeal{other}{$ID}{amount} to deal\n", "autoTrade";
$sumvalue += ($::currentDeal{other}{$ID}{amount} * $trade_lut{$name});
} else {
message "Other person added item which is not in buy list, cancelling...\n", "autoTrade";
Network::Send::sendCurrentDealCancel(\$remote_socket);
last AUTOTRADE;
}
}
message "Trading $sumvalue zeny and confirming\n", "autoTrade";
Network::Send::sendDealAddItem(\$remote_socket, 0, $sumvalue);
sleep(0.5);
Network::Send::sendDealFinalize(\$remote_socket);
$dealFinalize = 1;
$itemAddTimeout = time;
}


}
if ($::currentDeal{you_finalize} && Utils::timeOut($itemAddTimeout,$itemWaitTime)) {
message "Other person didn't accept the final trade, cancelling...\n", "autoTrade";
Network::Send::sendCurrentDealCancel(\$remote_socket);
$itemAddTimeout = time;
}
if (!$dealTrade && $::currentDeal{you_finalize} && $::currentDeal{other_finalize}) {
message "Accepting final trade\n", "autoTrade";
Network::Send::sendDealTrade(\$remote_socket);
$dealTrade = 1;
}
}
}
}


return 1;
----------------------------------END----------------------------------


For Autopub Macro, just paste this codes in your macros.txt and make sure you set sitAuto_idle 1 in your config.txt for the trigger.


automacro autopub{
console /You are sitting./
location prontera 113 41 - You can adjust
exclusive 1
call {
do chat create "Your Pub TITLE" 2 0 13131
pause 1
do reload macro
}