PDA

Просмотр полной версии : Таймер, пакеты с задержкой


Despair
05.05.2011, 06:47
Здраствуйте кодеры)
Сразу скажу - я очередной нуб в етом деле, желающий добиться от вас помощи)
Что требуеться:

Отправлять разные пакеты (разное количество, например 10 разных пакетов) с возможностью установки разной задержки между каждым в цыкле)

Чесно скажу, пытался найти решение моей проблемы, находил похожие темки, но исправить в одиночку не в состоянии)
Даже с таймером не могу разобраться и понять как он работает)

Думал надо описать процедуру, суть которой - пауза выполнения скрипта на n миллисекунд, и юзать ету процедуру между отправками пакетов, но нет)

Надеюсь увидеть здесь код програмки) работающей по следующему принцыпу:

buf:=('пакет номер 1');
Senttoserverex('имя перса');
ЗАДЕРЖКА 1 ('миллисекунды');

buf:=('пакет номер 2');
Senttoserverex('имя перса');
ЗАДЕРЖКА 2 ('миллисекунды');

buf:=('пакет номер х');
Senttoserverex('имя перса');
ЗАДЕРЖКА х ('миллисекунды');

И все ето в цыкле при запуске скрипта)

Заранее спасибо)

NLObP
05.05.2011, 18:27
Senttoserverex('имя перса');

Сделай примерно так

const
Name='NLObP'; //Вписать сюда имя чара

procedure Init; //Вызывается при включении скрипта
begin
UseForConnectName:=Name;
end;

//......................................
//послать сообщение в чат
//use: SendMessage(msg);
procedure SendMessage(msg:string); //отправка системных сообщений клиенту
begin
buf:=#$4A; //4A=CreatureSay:d(ObjectID)d(TextType)s(CharName)s( Text)
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClient
end;


Воспользуйся поиском и найди посылку пакетов с помощью таймера (http://coderx.ru/showpost.php?p=149439&postcount=9).

Рандомную задержку там сделай так

//рандомное время задержки между улучшениями
timer.interval:=1000+round(random()*1000); //время задержки

Despair
05.05.2011, 19:57
Спасибо) буду разбираццо)

dyh9l
05.05.2011, 20:02
NLObP, какая честь :)
Но стоит ли детям учится по моим скриптам? ведь это быдлокод чистой воды :)
p.s: мне так говорят

Despair
05.05.2011, 21:11
dyh9l, если не затруднит, распишы что делает каждая строчка) ;)

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.

dyh9l
05.05.2011, 21:18
dyh9l, если не затруднит, распишы что делает каждая строчка) ;)

const // константы
name = ''; //сама константа что где в скрипте написано name там будет ''
var
timer:TTimer; // Объясняю скрипту что timer это таймер)
TimerStep:byte; // Даю TimerStep числовое значение от 0 до 256 для шага таймеру
procedure Init; //Процедура при включении скрипта
begin
TimerStep:=1; //Стартовать таймеру с 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: //1 шаг
begin
timer.interval:=1000; //таймер интервад 1 сек
buf:=Hstr('D0 0F 00 D3 04 00 00 91 01 00 00'); //пакет
SendToServerEx(name); //на какое соединение отправить
// SendMsg('1'); //СендМсг функция которая пишет в лог пх всякую дрянь)
Inc(TimerStep); //Увеличиваем шаг, иначе говоря переходим на другое действие
end;
2: //2 шаг
begin
buf:=Hstr('D0 0F 00 D3 04 00 00 92 01 00 00');
SendToServerEx(name);
// SendMsg('2');
Inc(TimerStep);
end;
3: //3 шаг
begin
buf:=Hstr('D0 00 00 00 00 00');
SendToServerEx(name);
// SendMsg('3');
TimerStep:=1; //Переходим сново к шагу 1
timer.interval:=6*60000; //60000 мс = 1 минута
end;
end;
end;


begin

end.

вот

Despair
05.05.2011, 23:52
Спасибо ребятки огромное ^_^

Deffol
19.06.2011, 20:57
подниму тему, так как эта тема про таймер, хочу спросить: как сделать 2 условия активации таймера?

SeregaZ
19.06.2011, 22:47
добавляй в те условия включение таймера и все.
timer.enabled:=true;

выключение соответственно
timer.enabled:=false;

ну и сброс счетчика еще, если у тебя был счетчик таймера.