Показать сообщение отдельно
Старый 30.08.2008, 14:27   #32
Новичок
 
Регистрация: 18.08.2008
Сообщений: 3
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
MIhei пока неопределено
По умолчанию

Цитата:
Сообщение от xkor Посмотреть сообщение
дык надо и пакет о сдаче манора сохранять в разные переменные )
вобщем вот мои исправления скрипта чтоб здавать могло до 11 клиентов одновременно:
delphi Код:
//by VORON //СКРИПТ АВТОМАТИЧЕСКОЙ СДАЧИ МАНОРА //использование: скрипт запускается за несколько минут до объявления об олимпиаде //при получении системного сообщения об ее начале засекается системное время и вычисляется время //сдачи манора, также активируется таймер с интервалом ХХХ МС для контроля системного времени. //после этого пытаемся сдать свои всходы- вручную. при этом мы получим ошибку что- //манор система: выключена в данный момент. но при етом пакет на сдачу манора- скрипт запомнит в //память для дальнейшего использования. через заданное время скрипт отправит 10 раз запомненный //пакет с интервалом 0,3сек. //проверено что: если манор сдастся примерно на 4-й раз (4-й повтор пакета) то остальные 6 повторов //сервер принимает без ошибок, хотя в инвенторе отсутствуют нужные всходы- сервер на это не ругается //const //   Name='GManor';  //ник перса var PaketManora: array[0..10] of string; //Пакет на сдачу манора, который мы отправим серваку зараннее с помощью клиента // и запомним его для того чтобы вручную не формировать его кодом. //важно что оправлять его нужно после после объявления об олимпиаде. //так как в пакете манора используются ИД сессии, которые изменяются //каждый ровный час. timer1: TTimer; //таймер контролирующий системное время StartTime: array[0..10] of TDateTime; EndTime: array[0..10] of TDateTime; x: array[0..10] of integer; procedure Init; //Вызывается при включении скрипта begin timer1:=TTimer.Create(nil); timer1.OnTimer:=@OnTimer; // timer1.enabled:=false; // таймер по умолчанию выключен timer1.interval:=400; // через каждые 0,4сек будем засекать контрольное время сдачи манора x[ConnectID]:=0; end; procedure Free; //Вызывается при выключении скрипта begin timer1.Free; //освобождаем занимаемую память таймером end; //вызывается при срабатывании таймера procedure OnTimer(Sender: TObject); begin //если наступило время сдавать манор и скрипт пока еще не отправил 30 попыток его сдать то if (time >= EndTime[ConnectID]) and (x[ConnectID]<30) then begin //пишем сами себе в чат - что "ПОПЫТКА" buf:=hstr('4A AB F6 A0 48 02 00 00 00 2D 00 3E 00 56 00 4F 00 52 00 4F 00 4E 00 37 00 00 00 3F 04 3E 04 3F 04 4B 04 42 04 3A 04 30 04 20 00 41 04 34 04 30 04 42 04 4C 04 00 00'); SendToClient; // отправляем пакет на сдачу манора. buf:=PaketManora[ConnectID]; SendToServer; //счетчик попыток x[ConnectID]:=x[ConnectID]+1; end; end; begin //если перехвачен пакет на сдачу манора то if FromClient and {(ConnectName=Name) and} (pck[1]=#$D0) and (pck[2]=#$09) and (pck[3]=#$00) then begin //запоминаем его полностью PaketManora[ConnectID]:=pck; end; //если получен пакет об начале олимпиады то if FromServer and {(ConnectName=Name) and} (pck[1]=#$64) and (pck[2]=#$69) and (pck[3]=#$06) then begin //засекаем текущее время StartTime[ConnectID]:=time; //вычисляем время сдачи манора (прибавляем нужное время которое нужно засеч после получения сообщения об илимпиаде) EndTime[ConnectID]:=StartTime[ConnectID] + EncodeTime(0,5,49,0); // изменяем и корректируем ето число в формате (ЧЧ,ММ,СС,МС) //активируем таймер timer1.enabled:=true; //а ето- отправка сам себе сообщения о том что ВРЕМЯ ПОШЛО buf:=hstr('4A AB F6 A0 48 02 00 00 00 2D 00 3E 00 56 00 4F 00 52 00 4F 00 4E 00 37 00 00 00 32 04 40 04 35 04 3C 04 4F 04 20 00 3F 04 3E 04 48 04 3B 04 3E 04 00 00'); SendToClient; end; end.
тока я его не проверял, могут быть небольшие ляпы
Цитата:
Сообщение от xkor Посмотреть сообщение
дык надо и пакет о сдаче манора сохранять в разные переменные )
вобщем вот мои исправления скрипта чтоб здавать могло до 11 клиентов одновременно:

delphi Код:
//by VORON
//СКРИПТ АВТОМАТИЧЕСКОЙ СДАЧИ МАНОРА
//использование: скрипт запускается за несколько минут до объявления об олимпиаде
//при получении системного сообщения об ее начале засекается системное время и вычисляется время
//сдачи манора, также активируется таймер с интервалом ХХХ МС для контроля системного времени.
//после этого пытаемся сдать свои всходы- вручную. при этом мы получим ошибку что-
//манор система: выключена в данный момент. но при етом пакет на сдачу манора- скрипт запомнит в
//память для дальнейшего использования. через заданное время скрипт отправит 10 раз запомненный
//пакет с интервалом 0,3сек.
//проверено что: если манор сдастся примерно на 4-й раз (4-й повтор пакета) то остальные 6 повторов
//сервер принимает без ошибок, хотя в инвенторе отсутствуют нужные всходы- сервер на это не ругается

//const
// Name='GManor'; //ник перса

var
PaketManora: array[0..10] of string; //Пакет на сдачу манора, который мы отправим серваку зараннее с помощью клиента
// и запомним его для того чтобы вручную не формировать его кодом.
//важно что оправлять его нужно после после объявления об олимпиаде.
//так как в пакете манора используются ИД сессии, которые изменяются
//каждый ровный час.

timer1: TTimer; //таймер контролирующий системное время

StartTime: array[0..10] of TDateTime;
EndTime: array[0..10] of TDateTime;


x: array[0..10] of integer;

procedure Init; //Вызывается при включении скрипта
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer; //
timer1.enabled:=false; // таймер по умолчанию выключен
timer1.interval:=400; // через каждые 0,4сек будем засекать контрольное время сдачи манора

x[ConnectID]:=0;
end;

procedure Free; //Вызывается при выключении скрипта
begin
timer1.Free; //освобождаем занимаемую память таймером
end;

//вызывается при срабатывании таймера
procedure OnTimer(Sender: TObject);
begin
//если наступило время сдавать манор и скрипт пока еще не отправил 30 попыток его сдать то
if (time >= EndTime[ConnectID]) and (x[ConnectID]<30) then
begin
//пишем сами себе в чат - что "ПОПЫТКА"
buf:=hstr('4A AB F6 A0 48 02 00 00 00 2D 00 3E 00 56 00 4F 00 52 00 4F 00 4E 00 37 00 00 00 3F 04 3E 04 3F 04 4B 04 42 04 3A 04 30 04 20 00 41 04 34 04 30 04 42 04 4C 04 00 00');
SendToClient;
// отправляем пакет на сдачу манора.
buf:=PaketManora[ConnectID];
SendToServer;
//счетчик попыток
x[ConnectID]:=x[ConnectID]+1;
end;
end;


begin

//если перехвачен пакет на сдачу манора то
if FromClient and {(ConnectName=Name) and} (pck[1]=#$D0) and (pck[2]=#$09) and (pck[3]=#$00) then
begin
//запоминаем его полностью
PaketManora[ConnectID]:=pck;
end;

//если получен пакет об начале олимпиады то
if FromServer and {(ConnectName=Name) and} (pck[1]=#$64) and (pck[2]=#$69) and (pck[3]=#$06) then
begin
//засекаем текущее время
StartTime[ConnectID]:=time;
//вычисляем время сдачи манора (прибавляем нужное время которое нужно засеч после получения сообщения об илимпиаде)
EndTime[ConnectID]:=StartTime[ConnectID] + EncodeTime(0,5,49,0); // изменяем и корректируем ето число в формате (ЧЧ,ММ,СС,МС)
//активируем таймер
timer1.enabled:=true;
//а ето- отправка сам себе сообщения о том что ВРЕМЯ ПОШЛО
buf:=hstr('4A AB F6 A0 48 02 00 00 00 2D 00 3E 00 56 00 4F 00 52 00 4F 00 4E 00 37 00 00 00 32 04 40 04 35 04 3C 04 4F 04 20 00 3F 04 3E 04 48 04 3B 04 3E 04 00 00');
SendToClient;
end;

end.тока я его не проверял, могут быть небольшие ляпы
Здравствуйте
Я так понял что этот скрипт запоминает и отправляет несколько пакетов серверу на сдачу манора?
И его можно использовать при сдаче манора одним пером в разные города?
Если я не прав поправте пожалуйста и обьясните как это можно реализовать.
MIhei вне форума   Ответить с цитированием