Well, first you need to mod a little your macro plugin:
- Go to Macro plugin file, and open the file Automacro.pm. you gotta search for this script:
Then change it to this:
Code: Select all
# checks for monster, credits to illusionist sub checkMonster { my $monsterList = $_[0]; foreach (@monstersID) { next unless defined $_; if (existsInList($monsterList, $monsters{$_}->{name})) { my $pos = calcPosition($monsters{$_}); my $val = sprintf("%d %d %s", $pos->{x}, $pos->{y}, $field->name); $varStack{".lastMonster"} = $monsters{$_}->{name}; $varStack{".lastMonsterPos"} = $val; return 1 } } return 0 }
Code: Select all
sub checkMonster { my ($monsterList, $mondist) = $_[0] =~ /^(.*),\s(\d+)\s*$/; return 0 if ($mondist < 1); foreach (@monstersID) { next unless defined $_; if (existsInList($monsterList, $monsters{$_}->{name})) { my $mypos = calcPosition($char); my $pos = calcPosition($monsters{$_}); my $dist = sprintf("%.0f", distance($mypos, $pos)); my $val = sprintf("%d %d %s", $pos->{x}, $pos->{y}, $field->name); $varStack{".lastMonster"} = $monsters{$_}->{name}; $varStack{".lastMonsterPos"} = $val; $varStack{".lastMonsterDist"} = $dist; $varStack{".lastMonsterID"} = $monsters{$_}->{binID}; return $dist <= $mondist ?1:0 } } return 0 }
- Now open the file Utilities.pm in the same folder and find this code (is at the top):
You gotta to add the word getmonsterID, like in here:
Code: Select all
our @EXPORT_OK = qw(ai_isIdle q4rx between cmpr match getArgs refreshGlobal getnpcID getPlayerID getVenderID getItemIDs getItemPrice getInventoryIDs getStorageIDs getSoldOut getInventoryAmount getCartAmount getShopAmount getStorageAmount getVendAmount getRandom getRandomRange getConfig getWord callMacro getArgFromList getListLenght);
In the same file, you gotta find this code too:Code: Select all
our @EXPORT_OK = qw(ai_isIdle q4rx between cmpr match getArgs refreshGlobal getnpcID getmonsterID getPlayerID
And ADD after it (look: add, not overwrite) the following one:Code: Select all
# get player array index sub getPlayerID { foreach my $pl (@{$playersList->getItems()}) { return $pl->{binID} if $pl->name eq $_[0] } return -1 }
Code: Select all
sub getmonsterID { my ($name, $pool) = @_; for (my $id = 0; $id < @{$pool}; $id++) { next unless $$pool[$id]; next unless $monsters{$$pool[$id]}->{name}; if ($monsters{$$pool[$id]}->{name} eq $name) {return $id} } return -1 }
- Next step is open the file Parser.pm and look for the following part (it's at the top too):
You gotta add again the word getmonsterID like here:
Code: Select all
use Macro::Utilities qw(refreshGlobal getnpcID getItemIDs getItemPrice getStorageIDs getInventoryIDs getPlayerID getVenderID getRandom getRandomRange getInventoryAmount getCartAmount getShopAmount getStorageAmount getVendAmount getConfig getWord q4rx getArgFromList getListLenght);
On the same file, look for this code:Code: Select all
use Macro::Utilities qw(refreshGlobal getnpcID getmonsterID getItemIDs getStorageIDs getInventoryIDs
Here you gotta add the following line after the part it's showed:Code: Select all
while (($kw, $targ) = parseKw($cmd)) { $ret = "_%_"; # first parse _then_ substitute. slower but more safe $arg = subvars($targ); if ($kw eq 'npc') {$ret = getnpcID($arg)}
So it should look like this:Code: Select all
elsif ($kw eq 'monster') {$ret = getmonsterID($arg, $::monstersID)}
Code: Select all
while (($kw, $targ) = parseKw($cmd)) { $ret = "_%_"; # first parse _then_ substitute. slower but more safe $arg = subvars($targ); if ($kw eq 'npc') {$ret = getnpcID($arg)} elsif ($kw eq 'monster') {$ret = getmonsterID($arg, $::monstersID)}
- And FINALLY go to Data.pm and look for this part:
And just add
Code: Select all
our $macroKeywords = "npc" . "|" . "cart" . "|" . "inventory" . "|" . "store" . "|" . "storage" . "|" . "player" . "|" .
So it will look like this:Code: Select all
"monster" . "|" .
Code: Select all
our $macroKeywords = "npc" . "|" . "cart" . "|" . "inventory" . "|" . "store" . "|" . "storage" . "|" . "player" . "|" . "monster" . "|" .
Code: Select all
automacro avoid {
map moc_fild12
monster Picky,Super Picky,PecoPeco's Egg,Drops, 12
#Notice the coma space and number 12 above? This avoid automacro only trigger if any of the monster list
#distance is equal or less than the number given.
timeout 5
exclusive 1
set Move 10
#set Move to how many distance per trigger you want it to move.
call check
}
macro check {
[
$mon = $.lastMonster
$monID = $.lastMonsterID
$dist = $.lastMonsterDist
$monPos = $.lastMonsterPos
$map = $.map
$myPos = $.pos
$myPosX = @arg ("$myPos", 1)
$myPosY = @arg ("$myPos", 2)
$monPosX = @arg ("$monPos", 1)
$monPosY = @arg ("$monPos", 2)
$map = $.map
do eval message T("Macro Avoid: $::Macro::Data::varStack{mon} \($::Macro::Data::varStack{monID}\)\n"), "teleport"; message T("Monster Dist\= $::Macro::Data::varStack{dist} \, Monster Loc\: \($::Macro::Data::varStack{monPosX},$::Macro::Data::varStack{monPosY}\) Map\= $::Macro::Data::varStack{map}\n"), "teleport";
]
do as
if ($myPosX > $monPosX) goto east
if ($myPosX < $monPosX) goto west
:X0
if ($myPosY < $monPosY) goto X0south
if ($myPosY > $monPosY) goto X0north
log We have the same co-ord to the Monster
do @random ("east", "west", "south", "north") $Move
log Move Random
stop
:X0south
log Monster Loc: North X-axis0
do south $Move
log Move South
stop
:X0north
log Monster Loc: South X-axis0
do north $Move
log Move North
stop
:east
if ($myPosY < $monPosY) goto eastSouth
if ($myPosY > $monPosY) goto eastNorth
:Y0east
log Monster Loc: West Y-axis0
do east $Move
log Move East
stop
:eastSouth
log Monster Loc: NorthWest
do southeast $Move
log Move South East
stop
:eastNorth
log Monster Loc: SouthWest
do northeast $Move
log Move North East
stop
:west
if ($myPosY < $monPosY) goto westSouth
if ($myPosY > $monPosY) goto westNorth
:Y0west
log Monster Loc: East Y-axis0
do west $Move
log Move West
stop
:westSouth
log Monster Loc: NorthEast
do southwest $Move
log Move South West
stop
:westNorth
log Monster Loc: SouthEast
do northwest $Move
log Move North West
stop
}
I got this from old forums, here -> http://bibian.ath.cx/openkore/viewtopic ... et&start=0
I hope this helps, though I did nothing, all the credits to the people who worked on that post.