Показать сообщение отдельно
Старый 21.01.2008, 10:46   #180
Пользователь
 
Регистрация: 15.11.2007
Сообщений: 67
Сказал Спасибо: 4
Имеет 2 спасибок в 2 сообщенях
boyan
По умолчанию

народ.. не могу что-то понять, в чом косяк.. запуская скрипт, ем банки последовательно, какие надо.. и через некоторое время, скрипт начинает автоматом есть ГЦП банки.. количество ЦП у перса не изменяется..
Самое обидное, что пробывал на бафере(свс) на арене мдт - все отлично было.. собрался мэйном неверных побегать пострелять - такой вот косяк выходит.. а в чом дело - понять не могу..
Код:
const
Name='тут_ник'; //ник перса
var
CurHP,MaxHP,CurCP,MaxCP,CurMP,MaxMp: integer;
CPuse,CPuses,HPuse,MPuse: string;

TimerCP,TimerCPs,TimerHP,TimerMP: TTimer;

procedure Init; //Вызывается при включении скрипта
begin
TimerCP:=TTimer.Create(nil);
TimerCP.OnTimer:=@OnTimerCP;
TimerCP.enabled:=false;
TimerCP.interval:=500; //интервал юзания ГЦП банки

TimerCPs:=TTimer.Create(nil);
TimerCPs.OnTimer:=@OnTimerCPs;
TimerCPs.enabled:=false;
TimerCPs.interval:=500; //интервал юзания ЦП банки

TimerHP:=TTimer.Create(nil);
TimerHP.OnTimer:=@OnTimerHP;
TimerHP.enabled:=false;
TimerHP.interval:=14000; //интервал 14сек, т.к. действие одной бутылки = 15сек ХП бутылка

TimerMP:=TTimer.Create(nil);
TimerMP.OnTimer:=@OnTimerMP;
TimerMP.enabled:=false;
TimerMP.interval:=500; //интервал юзания МП банки
end;

procedure OnTimerCP(Sender: TObject);
begin
buf:=CPuse;
SendToServerEx(Name);
end;

procedure OnTimerCPs(Sender: TObject);
begin
buf:=CPuses;
SendToServerEx(Name);
end;

procedure OnTimerHP(Sender: TObject);
begin
buf:=HPuse;
SendToServerEx(Name);
end;

procedure OnTimerMP(Sender: TObject);
begin
buf:=MPuse;
SendToServerEx(Name);
end;

procedure Free; //Вызывается при выключении скрипта
begin
TimerCP.free;
TimerCPs.free;
TimerHP.free;
TimerMP.free;
HPuse:='';
CPuse:='';
CPuses:='';
MPuse:='';
end;

procedure StatsUpdate;
var
i: integer;
begin
for i:=0 to ReadD(6)-1 do
case pck[i*8+10] of
#$09: CurHP:=ReadD(i*8+14);
#$0A: MaxHP:=ReadD(i*8+14);
#$0B: CurMP:=ReadD(i*8+14);
#$0C: MaxMP:=ReadD(i*8+14);
#$21: CurCP:=ReadD(i*8+14);
#$22: MaxCP:=ReadD(i*8+14);
end;
end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
//пьем сначала ГCP, потом ЦП банку ,потом HP банку, потом МП банку что б запомнить их ID(я решил взять эти пакеты целиком, дабы не усложнять)
if FromClient and (ConnectName=Name) and (pck[1]=#$14) and (CPuse='') then CPuse:=pck;
if FromClient and (ConnectName=Name) and (pck[1]=#$14) and (CPuses='') then CPuses:=pck;
if FromClient and (ConnectName=Name) and (pck[1]=#$14) and (CPuses<>pck) and (HPuse='') then HPuse:=pck;
if FromClient and (ConnectName=Name) and (pck[1]=#$14) and (HPuse<>pck) and (MPuse='') then MPuse:=pck;

if FromServer and (pck[1]=#$0E) and (ConnectName = Name) //считываем значения ЦП, ХП, МП максимальные и на данный момент.
then StatsUpdate;

//если вы используете не грэйтер CP то вместо 200 подставьте кол-во CP сколько восстанавливает 1 банка
if (CurCP<MaxCP-200) and (CPuse<>'') then TimerCP.enabled:=true else TimerCP.enabled:=false;
if (CurCP<MaxCP-50) and (CPuses<>'') then TimerCPs.enabled:=true else TimerCPs.enabled:=false;
if (CurHP<MaxHP) and (HPuse<>'') then TimerHP.enabled:=true else TimerHP.enabled:=false;
if (CurMP<MaxMP) and (MPuse<>'') then TimerMP.enabled:=true else TimerMP.enabled:=false;

//если используем скилы или заклинания добавляем флаг Ctrl, что б не надо было удерживать контрол
if FromClient and (ConnectName=Name) and (pck[1]=#$2F) then pck[6]:=#$01;

//если наводим таргет, повторное нажатие по нему подменивается на атаку, опять же что б не удерживать контрол
//if FromClient and (ConnectName=Name) and (pck[1]=#$04) then pck[1]:=#$0A; //тут закоментил, ибо оно мне не надо.. кому надо, разкоментируете

end.
boyan вне форума   Ответить с цитированием