Просмотр полной версии : Помогите прикрутить таймер.
Всем доброе утро. Давно хотелось написать скрипт, который бы отправлял 3 пакета с задержкой между каждым 1 секунда, и скрипт повторял ето делать каждые 6 минут. Нашел пример скрипта, который будет отправлять пакеты каждые 1 сек, но нужно прикрутить таймер, который бы приводил скрипт в действие каждые 6 минут. Особо благодарен всем, кто хотябы попытается помоч. Вот пример.
const
nik='ник';
var
timer : TTimer;
packet:array of string;
i,j:integer;
procedure OnTimer(Sender: TObject);
begin
for i:=1 to 999 do begin //сколько раз отправлять пакеты
for j:=1 to length(packet) do begin
buf:=packet[j];
sendtoserverex(nik);
end;
end;
end;
procedure Init;
begin
packet[1]:=Hstr('D0 0F 00 D3 04 00 00 91 01 00 00'); // 1 пакет
packet[2]:=Hstr('D0 0F 00 D3 04 00 00 92 01 00 00'); // 2 пакет
packet[3]:=Hstr('D0 00 00 00 00 00'); // 3 пакет.
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=1000; //время задержки между отправкой пакетов.
j:=1;
i:=1;
end;
procedure Free;
begin
timer.free;
end;
begin
end.
Эх... вот создаешь темы, создаешь...
Вот способ с 2мя таймерами:
(Как в 1 уложить хз это думать головой нада)
const
Name='Nickers'; //Ник
N=3; //Сколько раз послать пакет
var
timer, timer2 : TTimer;
j:integer;
procedure OnTimer(Sender: TObject);
begin
buf:= ; //Сюда пакет по типу: "buf:=#$FF#$01#$00#$00#$00;"
SendToServerEx(Name);
inc(j);
if j=N then
begin
timer.enabled:=false;
timer2.enabled:=true;
j:=0;
end;
end;
procedure OnTimer2(Sender: TObject);
begin
timer1.enabled:=true;
timer2.enabled:=false;
end;
procedure Init;
begin
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=true;
timer.interval:=1000; //1 сек
timer2:=TTimer.Create(nil);
timer2.OnTimer:=@OnTimer2;
timer2.enabled:=false;
timer2.interval:=6000; //6 сек
j:=0;
end;
procedure Free;
begin
timer.free;
timer2.free;
end;
begin
end.
Как-то так... Не проверял, ошибки не исключены...
(Прошу выложить способ с 1м таймером, мне будет интересно разобрать)
По вопросам скриптописания добро пожаловать в соответствующую >>>темку (http://goo.gl/jUjfj)<<< (У меня в подписи)
Хорошо. Спасибо большое, но как сделать чтобы он отправлял не 1 пакет а 3?
const
Name='Nickers'; //Ник
N=3; //Сколько раз послать пакет
var
timer, timer2 : TTimer;
packet:array[1..N] of string;
j:integer;
procedure OnTimer(Sender: TObject);
begin
inc(j);
buf:=packet[j];
SendToServerEx(Name);
if j=N then
begin
timer.enabled:=false;
timer2.enabled:=true;
j:=0;
end;
end;
procedure OnTimer2(Sender: TObject);
begin
timer1.enabled:=true;
timer2.enabled:=false;
end;
procedure Init;
begin
packet[1]:=Hstr('D0 0F 00 D3 04 00 00 91 01 00 00'); // 1 пакет
packet[2]:=Hstr('D0 0F 00 D3 04 00 00 92 01 00 00'); // 2 пакет
packet[3]:=Hstr('D0 00 00 00 00 00'); // 3 пакет.
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=true;
timer.interval:=1000; //1 сек
timer2:=TTimer.Create(nil);
timer2.OnTimer:=@OnTimer2;
timer2.enabled:=false;
timer2.interval:=6000; //6 сек
j:=0;
end;
procedure Free;
begin
timer.free;
timer2.free;
end;
begin
end.
Вот думаю так тебе нада(При запуске):
ждет секунду, Посылает пакет(1), ждет секунду, ПАКЕТ(2), секунда, Пакет(3), 6 секунд (Повтор)
Спасибо большое:)
Добавлено через 26 минут
Извини, но ругается на этот участок кода
procedure OnTimer2(Sender: TObject);
begin
timer1.enabled:=true;
timer2.enabled:=false;
end
Добавлено через 3 минуты
Починил, у тебя в коде в первом случае timer=true а тут timer1=true. стер единичку и все заработало :) Но теперь он отпарвляет ети пакеты лиш 1 раз, а через заданное время во втором таймере он не отпарвляет.
Да на счет 1 я лажанул =)))
Попробуй так? А то я хз в чем ошибка)) (Напиши саму ошибку...)
const
Name='Nickers'; //Ник
N=3; //Сколько раз послать пакет
var
timer, timer2 : TTimer;
packet:array[1..N] of string;
j:integer;
procedure OnTimer(Sender: TObject);
begin
timer2.enabled:=false;
inc(j);
buf:=packet[j];
SendToServerEx(Name);
if j=N then
begin
timer2.enabled:=true;
j:=0;
timer.enabled:=false;
end;
end;
procedure OnTimer2(Sender: TObject);
begin
timer.enabled:=true;
end;
procedure Init;
begin
packet[1]:=Hstr('D0 0F 00 D3 04 00 00 91 01 00 00'); // 1 пакет
packet[2]:=Hstr('D0 0F 00 D3 04 00 00 92 01 00 00'); // 2 пакет
packet[3]:=Hstr('D0 00 00 00 00 00'); // 3 пакет.
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=true;
timer.interval:=1000; //1 сек
timer2:=TTimer.Create(nil);
timer2.OnTimer:=@OnTimer2;
timer2.enabled:=false;
timer2.interval:=6000; //6 сек
j:=0;
end;
procedure Free;
begin
timer.free;
timer2.free;
end;
begin
end.
Тоже самое, отсылает 3 пакета 1 раз и больше не отсылает как задано во втором таймере.
timer2:=TTimer.Create(nil);
timer2.OnTimer:=@OnTimer2;
timer2.enabled:=false;
timer2.interval:=15000; //15 сек
j:=0;
Добавлено через 4 минуты
а нет, все работает.. спасибо)) только отсылает он не через 15 секунд как я указал, а рандомно както :((
Добавлено через 2 минуты
указал отсылать с задержкой между пакетами 1.5 сек и повторять эту процедуру каждые 15 сек. он повторил её через 1 - 1.5 минуты.
afonbka, Хм эта странно)) Когда тестируешь нада по меньше числа указывать)) Ну мб ща кто-нить зайдет и напишет нам как написать в 1 таймер и чтоб без погрешности)))
думаю как то так
const
name = '';
var
timer:TTimer;
TimerStep:byte;
procedure Init;
begin
TimerStep:=1;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=true;
timer.interval:=1000; //время задержки между отправкой пакетов.
end;
procedure Free;
begin
timer.free;
end;
procedure OnTimer;
begin
case TimerStep of
1:
begin
timer.interval:=1000;
buf:=Hstr('D0 0F 00 D3 04 00 00 91 01 00 00');
SendToServerEx(name);
// SendMsg('1');
Inc(TimerStep);
end;
2:
begin
buf:=Hstr('D0 0F 00 D3 04 00 00 92 01 00 00');
SendToServerEx(name);
// SendMsg('2');
Inc(TimerStep);
end;
3:
begin
buf:=Hstr('D0 00 00 00 00 00');
SendToServerEx(name);
// SendMsg('3');
TimerStep:=1;
timer.interval:=6*60000; //60000 мс = 1 минута
end;
end;
end;
begin
end.
p.s: вам веть фобос писал статью, как сделать таймер с несколькими пакетами
Та я тож думал что так нада было сделать)))
timer.interval:=360000;
А так можно и без Кейса))
Спасибо спасибо. Все четко как по маслу работает :)) Спасибо еще раз..
норм. дансы сонги 6 минут на сервере. кидает пати каждые 364 сек и бд свс варк принимают и бафают :)
рад что смог помочь))
Та я тож думал что так нада было сделать)))
А так можно и без Кейса))
не понял)
Ну я про то что прост итервал меняешь и фсио (Никогда так не делал(прост не пробывал))
VLADOS_vdv
13.04.2012, 18:57
У меня такой вопрос. как зделать чтоб вот этот, делал тоже самое только на ВСЕ ники чаров которые забиты в l2phx, без указания.
const
Name='Nickers'; //Ник
N=3; //Сколько раз послать пакет
var
timer, timer2 : TTimer;
packet:array[1..N] of string;
j:integer;
procedure OnTimer(Sender: TObject);
begin
timer2.enabled:=false;
inc(j);
buf:=packet[j];
SendToServerEx(Name);
if j=N then
begin
timer2.enabled:=true;
j:=0;
timer.enabled:=false;
end;
end;
procedure OnTimer2(Sender: TObject);
begin
timer.enabled:=true;
end;
procedure Init;
begin
packet[1]:=Hstr('D0 0F 00 D3 04 00 00 91 01 00 00'); // 1 пакет
packet[2]:=Hstr('D0 0F 00 D3 04 00 00 92 01 00 00'); // 2 пакет
packet[3]:=Hstr('D0 00 00 00 00 00'); // 3 пакет.
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=true;
timer.interval:=1000; //1 сек
timer2:=TTimer.Create(nil);
timer2.OnTimer:=@OnTimer2;
timer2.enabled:=false;
timer2.interval:=6000; //6 сек
j:=0;
end;
procedure Free;
begin
timer.free;
timer2.free;
end;
begin
end.
как зделать чтоб вот этот, делал тоже самое только на ВСЕ ники чаров которые забиты в l2phx, без указания
Использовать команду SendToServer вместо SendToServerEx
VLADOS_vdv
17.04.2012, 22:05
const
Name='Nickers'; //Ник
N=3; //Сколько раз послать пакет
А вот этопросто удалить?
Name='Nickers'; //Ник
Это уже не требуется.
vBulletin® v3.6.11, Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot