Пока я вот, что придумал: ( там пакеты пока просто посылка в чат, так проще проверять скрипт )
Оффтоп
delphi Код:
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 минут
в общем я нашел ошибку и сделал так:
Оффтоп
delphi Код:
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 - которая будет показывать на каком шаге находится выполнение. Навроде
delphi Код:
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
и по завершению квеста вырубить таймер:
Оффтоп
delphi Код:
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.
Так намного легче...но вот как сделать, чтоб после завершения квеста и собственно выключения таймера, скрипт сдал заказ и купил заного и такой цикл?