PDA

Просмотр полной версии : Скрипт с таймером


Deffol
24.04.2012, 19:29
Привет всем.
Помогите пожалуйста со скриптом. Он простенький, но без таймера у меня не получилось, а в таймере я не пойму как реализовать.

В общем вот скрипт без таймера:

begin
if FromClient and (pck=HStr('B2 00 57 71 FF 00 33 04 3E 04 00 00')) then //Пакет активации
begin
buf:=HStr('CC 00 57 6B FF 77 95 06 00 00');
SendToServer;
buf:=HStr('9A 00 57 59 FF 0C 0D 00 00 01 00 01 00 77 95 06 00 01 00 00 00 00 00 00 00');
SendToServer;
pck:='';
end;

if FromServer and (ReadC(1)=$B7) and (ReadC(14)=$77) and (ReadC(22)=$00) then
begin
buf:=HStr('9A 00 57 59 FF 0C 0D 00 00 02 00 01 00 77 95 06 00 01 00 00 00 00 00 00 00');
SendToServer;
buf:=HStr('B2 00 57 71 FF 00 33 04 3E 04 00 0'); // пакет активации
SendToServer;
end;
end.

В общем пакет активации в 1-м действии ( в начале ) и во 2-м ( в конце ) одинаковый. Но Скрипт не начинает эту цикличность, когда пакет активации посылается через л2пх, скрипт будто его не замечает. Вот как это в таймере реализовать не знаю, знаю только как с часиками, но мне интервалы не нужны, вот и не пойму.

goodvin1709
24.04.2012, 21:29
знаю только как с часиками ???
что за часики? может http://s61.radikal.ru/i173/1204/9b/7a40fb541a2e.jpg это таймер)
Пойми в таймера тоже есть интервал.

Deffol
24.04.2012, 22:01
ты только об этом прочитал? про часики я имел ввиду timer.interval в скрипте и речь идет только о скриптинге. я писал что мне интервалы НЕ нужны, но таймер нужен. Как реализовать такой таймер не могу догнать

Добавлено через 4 минуты
то есть в таймере примерно такой скрипт надо писать через case, но в кейзе последовательность через интервалы, а мне не по интервалу нужна, а по приходу пакета, при чем 1й шаг активируется окончанием 2-го шага. ну в примере скрипта в 1-м посте там видно.

Breadfan
24.04.2012, 22:34
а если просто как-то так:
var
j:integer;
toServ:ttimer;

const
//набор пакетов
p[1]:=HStr('9A 00 57 59 FF 0C 0D 00 00 02 00 01 00 77 95 06 00 01 00 00 00 00 00 00 00');
p[2]:=HStr('B2 00 57 71 FF 00 33 04 3E 04 00 0'); // пакет активации
p[3]:=HStr('CC 00 57 6B FF 77 95 06 00 00');
p[4]:=HStr('9A 00 57 59 FF 0C 0D 00 00 01 00 01 00 77 95 06 00 01 00 00 00 00 00 00 00');

procedure Init;
begin
j:=0;
toServ:=TTimer.Create(nil);
toServ.OnTimer:=@StS;
toServ.enabled:=false;
toServ.interval:=500;
end;

procedure Free;
begin
toServ.enabled:=false;
toServ.free;
end;

procedure StS;
begin
inc(j);
buf:=p[j];
Sendtoserver;
if j:=4 then begin j:=0; toServ.enabled:=false; end;
end;

begin
if FromServer and (ReadC(1)=$B7) and (ReadC(14)=$77) and (ReadC(22)=$00) and not(toServ.enabled) then toServ.enabled:=true;
end. Только порядок набора - расставь сам. я ничерта не понял в описании.