опаздываю с ответом, но тем не менее:
вот делал скрипт на контроль откатов (хроники - вроде фрея):
Оффтоп
delphi Код:
const
name='Aola';
var
TimeUse, Skills : TstringList;
MyOID, rtime, i, from_, count_ : integer;
Msc : Ttimer;
skillId_ : string;
procedure Say2(msg:string);
begin
buf:=#$4A; WriteD(0); WriteD(2); WriteS('SysInfo: '); WriteS(msg);
SendToClientEx(name);
end;
procedure Init; //Вызывается при включении скрипта
begin
Skills:=TstringList.Create;
try
Skills.LoadFromFile('settings\SkillsIdEng.ini');
except
Sendmsg('skillId.ini not found!');
exit;
end;
TimeUse:=TStringList.Create;buf:=#$56;WriteD(0);WriteD(0);WriteC(0);
SendToServerEx(name); MyOID:=0; Msc:=TTimer.Create(nil);
Msc.OnTimer:=@Tick; Msc.enabled:=true; Msc.interval:=100; TimeUse:=TstringList.Create;
end;
Procedure Tick;
begin
for i:=0 to TimeUse.Count-1 do begin
from_:=pos('=',TimeUse[i])+1; count_:=Length(TimeUse[i])-from_+1;
skillId_:=(copy(TimeUse[i],1,from_-2)); rtime:=strtoint(copy(TimeUse[i],from_,count_));
if (rtime>100) then begin
rtime:=rtime-100;
TimeUse.Values[skillId_]:=inttostr(rtime);
end;
If (TimeUse.Count<=0) then begin
Sendmsg('Timer off'); Msc.enabled:=false;
end;
end;
end;
procedure Free; //Вызывается при выключении скрипта
begin
Msc.enabled:=false; Msc.free; TimeUse.free;Skills.free;
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
If fromserver then begin
case (pck[1]) of
#$29: begin
if (MyOID=0) then begin MyOID:=ReadD(2); buf:=#$56;WriteD(0);WriteD(0);WriteC(0); SendToServerEx(name);
end;
end;
#$48: begin
Msc.enabled:=false;
if (ReadD(2)=MyOID) then begin
if ((readd(18))>(readd(22))) then begin rtime:=readd(18); end else begin rtime:=readd(22); end;
if (ReadD($0A)<2150)or(ReadD($0A)>2164)then begin
Say2('Use: '+Skills.Values[inttostr(ReadD($0A))]);
TimeUse.Values[inttostr(ReadD(10))]:=inttostr(rtime);
end;
if Not(Msc.enabled) then Msc.enabled:=true;
end;
end;
end;
end;
If fromclient and (connectname=name) then begin
if (pck[1]=#$39) then begin
if ((TimeUse.Values[inttostr(ReadD(2))])<>'') then begin
if (strtoint(TimeUse.Values[inttostr(ReadD(2))])>200)then begin
rtime:=strtoint(TimeUse.Values[inttostr(ReadD(2))]);
Say2(Skills.Values[inttostr(ReadD(2))]+' is not ready, wait '+inttostr(round(rtime/1000))+' seconds');
pck:='';
end;
end;
end;
end;
end.
__________________
На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."
А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
Последний раз редактировалось Breadfan, 11.12.2011 в 08:25.
|