Просмотр полной версии : Таймер, пакеты с задержкой
Здраствуйте кодеры)
Сразу скажу - я очередной нуб в етом деле, желающий добиться от вас помощи)
Что требуеться:
Отправлять разные пакеты (разное количество, например 10 разных пакетов) с возможностью установки разной задержки между каждым в цыкле)
Чесно скажу, пытался найти решение моей проблемы, находил похожие темки, но исправить в одиночку не в состоянии)
Даже с таймером не могу разобраться и понять как он работает)
Думал надо описать процедуру, суть которой - пауза выполнения скрипта на n миллисекунд, и юзать ету процедуру между отправками пакетов, но нет)
Надеюсь увидеть здесь код програмки) работающей по следующему принцыпу:
buf:=('пакет номер 1');
Senttoserverex('имя перса');
ЗАДЕРЖКА 1 ('миллисекунды');
buf:=('пакет номер 2');
Senttoserverex('имя перса');
ЗАДЕРЖКА 2 ('миллисекунды');
buf:=('пакет номер х');
Senttoserverex('имя перса');
ЗАДЕРЖКА х ('миллисекунды');
И все ето в цыкле при запуске скрипта)
Заранее спасибо)
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); //время задержки
Спасибо) буду разбираццо)
NLObP, какая честь :)
Но стоит ли детям учится по моим скриптам? ведь это быдлокод чистой воды :)
p.s: мне так говорят
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, если не затруднит, распишы что делает каждая строчка) ;)
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.
вот
Спасибо ребятки огромное ^_^
подниму тему, так как эта тема про таймер, хочу спросить: как сделать 2 условия активации таймера?
добавляй в те условия включение таймера и все.
timer.enabled:=true;
выключение соответственно
timer.enabled:=false;
ну и сброс счетчика еще, если у тебя был счетчик таймера.
vBulletin® v3.6.11, Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot