4epT
28.05.2008, 19:21
Во первых всё нагло содрано отсюда (https://ro-fan.ru/viewtopic.php?t=5247), за что огромное спасибо Kissa2k.
Итак, мы решили написать макро для продажи варпов. Скажем так не самый лучший способ быстро получить много зеней, но это интересно, не правда ли?
Начнём, в этой теме я расскажу о своём макро и о том как на его можно модифицировать. Итак, настраиваем control/config.txt:
#Координаты где будет стоять наш продавец
lockMap prontera
lockMap_x 95
lockMap_y 65
#Для работы макро нужно выставить так
dealAuto 0
#и так
sitAuto_idle 0
Настройка config.txt закончена, теперь для работы моего макро нам понадобиться сделать небольшой хак исходников openkore:
1. Открываем файл src/Network/Receive.pm с помощью редактора Notepad++ или на худой конец Word Pad'ом (но не блокнотом, это важно)
2. Ищем там строчку:
my $amount = formatNumber($args->{amount});
и меняем её на такую
my $amount = $args->{amount};
3. Сохраняем. Готово!
Теперь сам макрос:
#Продажа варпа за деньги.
automacro createChatFirst {
console /Your Coordinates: /
location prontera 95 65 #Тут те же координаты что и в директиве lockMap в config.txt
delay 5
call {
do chat create "Айс - 5k" 2 0 pa55w0rd #Название и пароль чата
}
}
automacro createChatAfterWarp {
console /You opened Warp Portal on/
delay 5
call {
do chat create "Айс - 5k" 2 0 pa55w0rd #Название и пароль чата
}
}
automacro detectDeal {
console /Requests a Deal/
location prontera 95 65 #Тут те же координаты что и в директиве lockMap в config.txt
timeout 15
call acceptDeal
}
automacro detectZeny {
console /added (\d+) z to Deal/
timeout 15
call checkZeny
}
automacro detectFailedWarp {
console /(Casting failed: Requirement|Skill Warp Portal failed)/
call warp
}
macro acceptDeal {
pause @random ("0", "1", "2")
do deal
do deal
}
macro checkZeny {
if ($.lastMatch1 >= 5000) goto sell #Сколько зеней просим за варп?
do deal no
stop
:sell
pause 2
do deal
do chat leave
call warp
}
macro warp {
$x = @eval($::char->{pos}{x})
$y = @eval($::char->{pos}{y})
do deal
do sl 27 @eval($x + @random ("-2", "-1", "1", "2")) @eval($y + @random ("-2", "-1", "0", "1", "2"))
pause 2
do warp 1 #Номер варпа, который мы будем открывать.
}
Работает это примерно так:
когда наш бот подключается - он ставит чат и ждёт пока ему не кинут сделку, потом он смотрит сколько зеней положили в дил, если достаточно, то подтверждает сделку, выходит из чата и кастует варп (если варп не получился, например скастовался в место где кто-то стоит, то он его перекастовывает), после удачного открытия варпа - все повторяется по кругу.
Что-то стоит добавить:
- проверку на гемстоны
- автоматический сбор гемстонов из хранилища кафры
- сделать возможность продажи нескольких варпов одновременно.
Кстате найдено несколько багов:
1. Если запросить сделку у бота и тут же ее отменить, а потом сразу же еще раз кинуть то бот залипнет, из-за таймаута на обработку события предложения сделки.. т.е. если еще раз кинуть ему сделку, то мы увидим что якобы персонаж уже занят сделкой..
С другой стороны без таймаута нельзя, так как сделку могут кинуть тогда когда он уже открывает варп, т.е. тоже угроза залипания.. Хелп плз
2. Если боту флудить в приват сообщениями вроде "Requests a Deal", то он тоже будет залипать, так как сработает условие console //... как сделать так чтобы автомакрос запускался только при виде сообщения в консоли, а не скажем в паблик или приват чате? Плз, хелп
за обновлениями и дополнениями следить тут (http://rofan.ru/viewtopic.php?t=5247)
Итак, мы решили написать макро для продажи варпов. Скажем так не самый лучший способ быстро получить много зеней, но это интересно, не правда ли?
Начнём, в этой теме я расскажу о своём макро и о том как на его можно модифицировать. Итак, настраиваем control/config.txt:
#Координаты где будет стоять наш продавец
lockMap prontera
lockMap_x 95
lockMap_y 65
#Для работы макро нужно выставить так
dealAuto 0
#и так
sitAuto_idle 0
Настройка config.txt закончена, теперь для работы моего макро нам понадобиться сделать небольшой хак исходников openkore:
1. Открываем файл src/Network/Receive.pm с помощью редактора Notepad++ или на худой конец Word Pad'ом (но не блокнотом, это важно)
2. Ищем там строчку:
my $amount = formatNumber($args->{amount});
и меняем её на такую
my $amount = $args->{amount};
3. Сохраняем. Готово!
Теперь сам макрос:
#Продажа варпа за деньги.
automacro createChatFirst {
console /Your Coordinates: /
location prontera 95 65 #Тут те же координаты что и в директиве lockMap в config.txt
delay 5
call {
do chat create "Айс - 5k" 2 0 pa55w0rd #Название и пароль чата
}
}
automacro createChatAfterWarp {
console /You opened Warp Portal on/
delay 5
call {
do chat create "Айс - 5k" 2 0 pa55w0rd #Название и пароль чата
}
}
automacro detectDeal {
console /Requests a Deal/
location prontera 95 65 #Тут те же координаты что и в директиве lockMap в config.txt
timeout 15
call acceptDeal
}
automacro detectZeny {
console /added (\d+) z to Deal/
timeout 15
call checkZeny
}
automacro detectFailedWarp {
console /(Casting failed: Requirement|Skill Warp Portal failed)/
call warp
}
macro acceptDeal {
pause @random ("0", "1", "2")
do deal
do deal
}
macro checkZeny {
if ($.lastMatch1 >= 5000) goto sell #Сколько зеней просим за варп?
do deal no
stop
:sell
pause 2
do deal
do chat leave
call warp
}
macro warp {
$x = @eval($::char->{pos}{x})
$y = @eval($::char->{pos}{y})
do deal
do sl 27 @eval($x + @random ("-2", "-1", "1", "2")) @eval($y + @random ("-2", "-1", "0", "1", "2"))
pause 2
do warp 1 #Номер варпа, который мы будем открывать.
}
Работает это примерно так:
когда наш бот подключается - он ставит чат и ждёт пока ему не кинут сделку, потом он смотрит сколько зеней положили в дил, если достаточно, то подтверждает сделку, выходит из чата и кастует варп (если варп не получился, например скастовался в место где кто-то стоит, то он его перекастовывает), после удачного открытия варпа - все повторяется по кругу.
Что-то стоит добавить:
- проверку на гемстоны
- автоматический сбор гемстонов из хранилища кафры
- сделать возможность продажи нескольких варпов одновременно.
Кстате найдено несколько багов:
1. Если запросить сделку у бота и тут же ее отменить, а потом сразу же еще раз кинуть то бот залипнет, из-за таймаута на обработку события предложения сделки.. т.е. если еще раз кинуть ему сделку, то мы увидим что якобы персонаж уже занят сделкой..
С другой стороны без таймаута нельзя, так как сделку могут кинуть тогда когда он уже открывает варп, т.е. тоже угроза залипания.. Хелп плз
2. Если боту флудить в приват сообщениями вроде "Requests a Deal", то он тоже будет залипать, так как сработает условие console //... как сделать так чтобы автомакрос запускался только при виде сообщения в консоли, а не скажем в паблик или приват чате? Плз, хелп
за обновлениями и дополнениями следить тут (http://rofan.ru/viewtopic.php?t=5247)