PDA

Просмотр полной версии : Задержка между отправкой


KPOT^^
02.05.2010, 23:39
Здрасти всем. У меня такая проблема: на сервере где я играю стоит защита от флуда пакетами. При отправки нескольких пакетов из раздела "Посылка" отправляется только первый пакет. Таким образом в моем случае невозможно нормально сдать манор, приходиться забивать несколько пакетов на отправку ставить "автоматическое отправление по таймеру" и быстро удалять один за другим пакеты когда началась сдача манора. Всвязи с этим очень хотелось бы получить помошь в написании скрипта на отправку пакетов с задержкой.
Так как я к сожалению не знаю язык написания скриптов то могу только предположить как будет выглядить скрипт.

начало

отправка пакета
задержка

отправка пакета 1
задержка

.....
....

в начало.

Хотелось бы что бы скрипт отправлял пакеты с задержкой и при окончание начинал все заного.

Очень разчитываю на вашу помощь.

J-Fobos
03.05.2010, 00:14
Используйте таймер
http://coderx.ru/showpost.php?p=30293&postcount=404

Vilson
03.05.2010, 00:27
Правильную ссылку уже дали, от себя немного дополню:

procedure onTimerItemSelect(Sender: TObject);
begin
case TimerCycle of
1:begin
отправка пакета 1;
Inc(TimerCycle);
Exit;
end;
2:begin
отправка пакета 2;
Inc(TimerCycle);
Exit;
end;
3:begin
отправка пакета 3;
Inc(TimerCycle);
Exit;
end;
end;
end;


Это если интервал между пактами нужен одинаковый и пакетов несколько и разных.

KPOT^^
03.05.2010, 00:52
Это если интервал между пактами нужен одинаковый и пакетов несколько и разных.
Абсолютно верно.

procedure Init;
begin
Timer01:=TTimer.Create(nil); //выделяем памать и т.п.
Timer01.OnTimer:=@OnTimer01; //привязываем процедуру к событию
Timer01.enabled:=true; //начальное положение включен(true)/выключен(false)
Timer01.interval:=500; //интервал(в милисекундах) как часто таймер срабатывает
end;
procedure onTimerItemSelect(Sender: TObject);
begin
case TimerCycle of
1:begin
buf:=hstr('1');
SendToServer;
Inc(TimerCycle);
Exit;
end;
2:begin
buf:=hstr('2');
SendToServer;
Inc(TimerCycle);
Exit;
end;
3:begin
buf:=hstr('3');
SendToServer;
Inc(TimerCycle);
Exit;
end;
end;
end;


Ругается на конец скрипта, пишет "Ошибка 'BEGIN' expected"

J-Fobos
03.05.2010, 01:00
Ошибки:
1) Не объявлена переменная TimerCycle
2) Не задано начальное значение переменной TimerCycle
3) Отсутствует главный блок begin end
4) После последнего end нету точки
5) Процедура onTimerItemSelect не привязана к таймеру
6) Нету процедуры Timer01.Free; при выключении скрипта (не знаю обязательная ли она, надо уточнить у алекстим)

PS: пока писал где ошиблись вы уже отредактировали свой пост :)

KPOT^^
03.05.2010, 01:14
Ошибки:
1) Не объявлена переменная TimerCycle
2) Не задано начальное значение переменной TimerCycle
3) Отсутствует главный блок begin end
4) После последнего end нету точки
5) Процедура onTimerItemSelect не привязана к таймеру
6) Нету процедуры Timer01.Free; при выключении скрипта (не знаю обязательная ли она, надо уточнить у алекстим)

PS: пока писал где ошиблись вы уже отредактировали свой пост :)
Извините конечно но я ничего не понял :) Я в этом полный новичек и пока носом не ткнеш не пойму...

J-Fobos
03.05.2010, 01:23
Разве что ткнуть носом в учебник :)
http://coderx.ru/showpost.php?p=46&postcount=1

KPOT^^
03.05.2010, 01:41
Это нужно тогда во всем с нуля разбиратся а это времени не 10 минут нужно, а я только попросил написать скрипт умеющих это делать людей :) мне кажется он не должен много времени у них занять :)

J-Fobos
03.05.2010, 01:48
На форуме запрещено просить готовые скрипты, а в первом посте вы просили только помощи. Скрипт что вам нужен можно за 3 минуты написать, но я такая сволочь что не дам готового скрипта :)

KPOT^^
03.05.2010, 10:18
Начало уже положено, еше несколько подсказок и может сам допетрю как и чего (хотя сомневаюсь) :)

Fer123
03.05.2010, 15:01
var kernel32:integer;

procedure Init; //Вызывается при включении скрипта
begin
kernel32 := loadLibrary('kernel32.dll');
CallFunction(kernel32,'Sleep',1,[5000]); //Задержка на 5000 мсек
end;

begin

end.

Интересно как будет вести себя эта функция. Не будет ли тормозит обработку новых пакетов как Delay()?

J-Fobos
03.05.2010, 15:31
var kernel32:integer;

procedure Init; //Вызывается при включении скрипта
begin
kernel32 := loadLibrary('kernel32.dll');
CallFunction(kernel32,'Sleep',1,[5000]); //Задержка на 5000 мсек
end;

begin

end.

Интересно как будет вести себя эта функция. Не будет ли тормозит обработку новых пакетов как Delay()?
проверил, также как Delay приостанавливает обработку.

Xen
03.05.2010, 16:24
Да, delay и sleep в дельфи ПОЛНОСТЬЮ останавливает ("замораживает") работу приложения на данный временной промежуток

Интересно в скриптах хлапа потоки можно юзать?)

J-Fobos
05.05.2010, 22:30
Да, delay и sleep в дельфи ПОЛНОСТЬЮ останавливает ("замораживает") работу приложения на данный временной промежуток

Интересно в скриптах хлапа потоки можно юзать?)
Потоки можно юзать и ПХ, их можно без проблем реализовать в плагинах. :)