PDA

Просмотр полной версии : Скрипт для автоматизации..


Deffol
06.06.2011, 04:29
Привет всем, вот хочу написать скрипт на автоматизацию выполнения квеста с крафтом, в общем игра айон, но это не важно!
я хочу сделать, чтоб посылался автоматически пакет на взятие квеста, потом в окне крафта посылал пакет на крафт нужных вещей сколько надо раз ,например 9, после этого сдавал квест, потом опять брал и по такому циклу! но там крафт идет несколько секунд, и пока он идет другой пакет на крафт следующего итема послать нельзя!
Пакет на крафт одинаковый, на сдачу и взятия квеста разные...
у меня голова немного варит в этом деле, но просто хочу спросить можно ли это реализовать и прошу от вас толчок в правильном направлении, что нужно в скрипте, а я уже сам реализую если возможно...

Link
06.06.2011, 04:38
а исполльзвать сз бота религия не позволяет?

Deffol
06.06.2011, 06:10
я ботами не пользовался ниразу....я всегда скрипты писал.
вот я словил уже нужные пакеты, в общем в принципе я смогу реализовать таймер...
Но у меня проблема с крафтом будет, каждый раз время крафта разное, а я хотел бы поймать пакет синий который показывает, что крафт закончен и после него сразу бы начинался другой...
Но я не знаю какой пакет ловить, там когда крафт заканчивается в чат посылается инфа об обновлении миссии, думал может этот использовать, но пробовал ловить синии пакеты и отсылать, чтоб найти тот самый, думал если отошлю, то в инфе появится надпись, но не появилось, вот подскажите с этим пожалуйста, как мне поступить?

Добавлено через 55 минут
в общем после крафта идут около 5 синих пакетов, я выбрал самый простой и решил, что после его посылки "#$16 SendToClient"
Будет запрос на пакет типа #$E3 SendToServer
......
хочу, чтоб скрипт начинался с посылки слова в чат например "/го" ('B9 57 76 00 2F 00 33 04 3E 04 00 00')
ну вот наглядно:
begin
if FromClient and (pck=Hstr('B9 57 76 00 2F 00 33 04 3E 04 00 00')
then
begin
buf:=HStr('9C 57 5B D3 01 00 00 EA 03 01 00 04 00 0F 19 00 00 00 00');
SendToServer;
pck:='';
после должен идти крафт #$E3, до синиго пакета #$16 ,потом опять #$E3
И так 9 раз....
Потом сдача квеста....
вот не могу придумать, как сделать, я с таким еще не имел дело.
можете подсказать как именно реализовать, посылку пакета #$E3 9 раз подряд, потом бы шел пакет на сдачу квеста, потом принятие и по циклу?

wimax
06.06.2011, 06:34
Deffol, используй таймер

Deffol
06.06.2011, 09:13
Пока я вот, что придумал: ( там пакеты пока просто посылка в чат, так проще проверять скрипт )

const
interval = 1500;
var
Timer:TTimer;
PlayerID:integer;


procedure Init;
begin
Timer:=TTimer.Create(nil);
Timer.OnTimer:=@OnTimer;
Timer.enabled:=false;
Timer.interval:=interval;
PlayerID:= $0019CE0C;
end;

procedure Free;
begin
Timer.free;
end;

procedure OnTimer(Sender: TObject);
begin
//крафт
buf:=HStr('B9 57 76 00 2F 00 3A 04 40 04 30 04 44 04 42 04 00 00');
SendToServerEx(ConnectName);
end;

begin
//ввод команды в чат
if FromClient and (pck=HStr('B9 57 76 00 2F 00 33 04 3E 04 00 00 ')) then
begin
//замена команды на покупку заказа
buf:=HStr('B9 57 76 00 2F 00 1F 04 3E 04 3A 04 43 04 3F 04 3A 04 30 04 00 00');
SendToServer;
pck:='';
begin
Timer.enabled:=true;

begin
if FromClient and (pck[1]=#$9E) then
Timer.enabled:=false;
end;
end;
end;
end.

Там в конце таймер выключается, когда я должен пробежать, но я бегу, а таймер работает, то есть идет посылка в чат, как бы дальше крафт идет, мне нужно его выключить по приходу пакета, что я не так сделал?

//Breadfan: тут каша из бегин\эндов. Проверка с отключением таймера - находится внутри проверки на старт - не выполнится оно.

Добавлено через 38 минут
в общем я нашел ошибку и сделал так:

const
interval = 1;
var
Timer:TTimer;
PlayerID:integer;


procedure Init;
begin
Timer:=TTimer.Create(nil);
Timer.OnTimer:=@OnTimer;
Timer.enabled:=false;
Timer.interval:=interval;
PlayerID:= $0019CE0C;
end;

procedure Free;
begin
Timer.free;
end;

procedure OnTimer(Sender: TObject);
begin
//крафт
Timer.interval:=1500;
buf:=HStr('B9 57 76 00 2F 00 3A 04 40 04 30 04 44 04 42 04 00 00');
SendToServerEx(ConnectName);
end;

begin
//ввод команды в чат
if FromClient and (pck=HStr('B9 57 76 00 2F 00 33 04 3E 04 00 00 ')) then
begin
//замена команды на покупку заказа
buf:=HStr('B9 57 76 00 2F 00 1F 04 3E 04 3A 04 43 04 3F 04 3A 04 30 04 00 00');
SendToServerEx(ConnectName);
pck:='';
Timer.enabled:=true;
end;

begin
if FromClient and (pck[1]=#$9E) then
Timer.enabled:=false;
end;
end.

Теперь при посылке в чат "/го" посылается пакет на покупку заказа, затем включается таймер и сразу идет крафт. После того как крафт закончится, посылается пакет который объявляет о том, что вешь скрафтилась и таймер останавливается....
Подскажите, как сделать именно, чтоб крафтилось 9 раз, а потом сдавался квест, и сразу покупался?
Но еще момент, надо чтоб пакет на крафт после того как начал посылаться после покупки миссии, сразу останавливался, и начался бы только тогда, когда прийдет пакет который объявляет, что крафт закончен.
я не могу придумать...подскажите что нибудь

//Breadfan: в таймере введи переменную step - которая будет показывать на каком шаге находится выполнение. Навроде
step:=0;
.......
procedure OnTimer(Sender: TObject);
begin
//крафт
step:=step+1;
Timer.interval:=1500;
buf:=HStr('B9 57 76 00 2F 00 3A 04 40 04 30 04 44 04 42 04 00 00');
SendToServerEx(ConnectName);
Timer.enabled:=false;
if step=9 then (сдать квест, сбросить step);
end;и в основной части добавь проверку прихода "крафт окончен" - при срабатывании - Timer.enabled:=true;

Добавлено через 36 минут
в общем я запутался и решил поставить в таймере интервал крафта на 1500
и по завершению квеста вырубить таймер:

const
interval = 1;
var
Timer:TTimer;
PlayerID:integer;


procedure Init;
begin
Timer:=TTimer.Create(nil);
Timer.OnTimer:=@OnTimer;
Timer.enabled:=false;
Timer.interval:=interval;
PlayerID:= $0019CE0C;
end;

procedure Free;
begin
Timer.free;
end;

procedure OnTimer(Sender: TObject);
begin
Timer.interval:=1500;
//крафт
buf:=HStr('B9 57 76 00 2F 00 3A 04 40 04 30 04 44 04 42 04 00 00');
SendToServerEx(ConnectName);
end;

begin
//ввод команды в чат
if FromClient and (pck=HStr('B9 57 76 00 2F 00 33 04 3E 04 00 00 ')) then
begin
//замена команды на покупку заказа
buf:=HStr('B9 57 76 00 2F 00 1F 04 3E 04 3A 04 43 04 3F 04 3A 04 30 04 00 00');
SendToServerEx(ConnectName);
pck:='';
Timer.enabled:=true;
end;

begin
//Пакет завершения квеста
if FromClient and (pck=Hstr('B9 57 76 00 41 04 42 04 3E 04 3F 04 00 00')) then
Timer.enabled:=false;
end;
end.
Так намного легче...но вот как сделать, чтоб после завершения квеста и собственно выключения таймера, скрипт сдал заказ и купил заного и такой цикл?

Breadfan
06.06.2011, 09:23
в блоке добавь нужное
if FromClient and (pck=Hstr('B9 57 76 00 41 04 42 04 3E 04 3F 04 00 00')) then
Timer.enabled:=false;//отключил таймер
////сдаешь че там нужно
///берешь заново
///запускаешь таймер вновь.
end;

Почему привязка отключения таймера - к клиенту, а не к ответу сервера?

Deffol
06.06.2011, 10:14
Почему привязка отключения таймера - к клиенту, а не к ответу сервера?
ну это я просто со словами в чате эксперементирую :) чтоб при всех в храме если, что не закосячить пакетами...а то не поймут...

Добавлено через 18 минут
Breadfan, вот сделал так:
begin
//Пакет завершения квеста
if FromClient and (pck=Hstr('B9 57 76 00 41 04 42 04 3E 04 3F 04 00 00')) then
Timer.enabled:=false;
buf:=Hstr('B9 57 76 00 41 04 34 04 30 04 47 04 30 04 00 00');
SendToServerex(connectname);
buf:=HStr('B9 57 76 00 2F 00 1F 04 3E 04 3A 04 43 04 3F 04 3A 04 30 04 00 00');
SendToServerEx(connectname);
Timer.enabled:=true;
end;
end.

Начинают спамиться пакеты только на покупку и сдачу с минимальным интервалом времени

Добавлено через 20 минут
не могу ничего придумать, пытался сделать вспомогательный скрипт, на то, чтоб после пакета завершения квеста, посылал сдачу кв и покупку, так выкидывает из игры....не знаю, что и делать

Breadfan
06.06.2011, 10:23
Примерно так попробуй:
var
Timer:TTimer;
PlayerID:integer;
step : integer;
procedure Init;
begin
step:=0;
Timer:=TTimer.Create(nil);
Timer.OnTimer:=@OnTimer;
Timer.enabled:=false;
Timer.interval:=1500;
PlayerID:= $0019CE0C;
end;

procedure Free;
begin
Timer.free;
end;

procedure OnTimer(Sender: TObject);
begin
//заказ
if (step=0) then buf:=HStr('заказ');
//крафт
if (step>0) and (step<10) then buf:=HStr('крафт');
if (step>9) then buf:=Hstr('сдача');
SendToServer;
step:=step+1;
if step>11 then step:=0;
end;

begin
//ввод команды в чат
if FromClient and (pck=HStr('команда на старт от клиента')) then begin
//замена команды на покупку заказа
pck:='';
Timer.enabled:=true;
end;
//Пакет завершения квеста
if FromClient and (pck=Hstr('команда от клиента на остановку сего действа')) then begin
Timer.enabled:=false;step:=0;
end;
end.