Ды мне пох че на оффе.
С хп сам(а) написал(а) что работает, а не должно.
Такое ощущение ты вообщемто уже и не хочешь что бы заработало.
Повторяю самое главное это чтобы поступала инфа о о состоянии ЦП, все остальное мона переделать без проблем, а чтобы узнать поступает ли она втавь в скрипте:
Say(IntToStr(MaxCP));
Say(IntToStr(CurCP)); хотя нафиг тя, лучше сам напишу.
Код:
Const
Name='Ник';
Health= 101;
ResCP= 101;
GCP= 5592;//Greater CP Potion
GHP= 1539;//Greater Healing Potion
SHP= 1061;
Var
NSHP, NGCP, NGHP, CharID, OidSHP, OidGHP, OidGCP,
MaxHP, CurHP, MaxCP, CurCP, FirTargID, SecTargID, i, HP: Integer;
TimerHP, TimerCP: TTimer;
PressCTRL, Res, Switch: boolean;
//******************************************************************************
// Вызывается при включении скрипта
//******************************************************************************
procedure Init;
begin
PressCTRL:= False;
Res:= False;
Switch:= False;
FirTargID:= 0;
SecTargID:= 0;
NGCP:= 0;
NGHP:= 0;
NSHP:= 0;
MaxHP:= 1;
MaxCP:= 1;
TimerHP:=TTimer.Create(nil);
TimerHP.OnTimer:=@OnTimerHP;
TimerHP.enabled:= False;
TimerHP.interval:=15000;
TimerCP:=TTimer.Create(nil);
TimerCP.OnTimer:=@OnTimerCP;
TimerCP.Enabled:= False;
TimerCP.Interval:= 1000;
buf:=#$0F;
SendToServerEx(Name);
Say ('Cпам ЦП и ХП выключен');
Say ('ПВП режим не активен');
end;
//******************************************************************************
//******************************************************************************
// Вызывается при выключении скрипта
//******************************************************************************
procedure Free;
begin
TimerHP.Free;
TimerCP.Free;
end;
//******************************************************************************
//******************************************************************************
// Посылаем сообщение, которое видно только в окне бота
//******************************************************************************
Procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClientEx(Name);
end;
//******************************************************************************
//******************************************************************************
// Использование Вещей
//******************************************************************************
Procedure UseItem(OID: Integer);
begin
buf:= #$14;
WriteD(OID);
WriteD(00);
SendToServerEx(Name)
end;
//******************************************************************************
//******************************************************************************
// Востановление ХП
//******************************************************************************
Procedure OnTimerHP(Sender: TObject);
begin
if Switch then begin
UseItem (OidGHP);
Dec (NGHP);
end else begin
UseItem (OidSHP);
Dec (NSHP);
end;
end;
//******************************************************************************
//******************************************************************************
// Востановление ЦП
//******************************************************************************
Procedure OnTimerCP(Sender: TObject);
begin
UseItem (OidGCP);
Dec (NGCP);
end;
//******************************************************************************
//******************************************************************************
// Вызывается при приходе каждого пакета, если скрипт включен
//******************************************************************************
Begin
//****************************************************************************
//****************************************************************************
//Не обрабатываем пустые пакеты
If pck='' then exit;
//****************************************************************************
//****************************************************************************
//****************************************************************************
//****************************************************************************
//Обрабатываем пакеты от сервера
If FromServer and (ConnectName=Name) then begin
//**************************************************************************
//Если от сервака принят пакет UserInfo.
If (pck[1]=#$04) then begin
CharID:= ReadD(18);
i:= 2*(Length(Name))+ 72;
MaxHP:= ReadD(i);
CurHP:= ReadD(i);
MaxCP:= ReadD(length(pck)-49);
CurCP:= ReadD(length(pck)-45);
Say(inttostr(MaxCP));
Say(inttostr(CurCP));
HP:= Round ((MaxHP/100)*Health);
end;
//**************************************************************************
//**************************************************************************
//Если от сервака принят пакет StatusUpdate.
if (pck[1]=#$0E) and (pck[6]=#$04)then begin
CurHP:=ReadD(14);
MaxHP:=ReadD(22);
CurCP:=ReadD(30);
MaxCP:=ReadD(38);
Say(inttostr(MaxCP));
Say(inttostr(CurCP));
end;
//**************************************************************************
//**************************************************************************
//Записываем ObjectID всех нужных предметов
if pck[1]=#$1B then begin
for i:= 0 to round(length(pck)/36) do begin
if (ReadH(i*36+4+8) = GCP) then begin
OidGCP:= ReadD(i*36+8);
NGCP:= ReadH(i*36+4+4+8);
end;
if (ReadH(i*36+4+8) = GHP) then begin
OidGHP:= ReadD(i*36+8);
NGHP:= ReadH(i*36+4+4+8);
end;
if (ReadH(i*36+4+8) = SHP) then begin
OidSHP:= ReadD(i*36+8);
NSHP:= ReadH(i*36+4+4+8);
end;
end;
end;
//**************************************************************************
end;
//****************************************************************************
//****************************************************************************
//****************************************************************************
//****************************************************************************
//Обрабатываем пакеты от клиента
If FromClient and (ConnectName=Name) then begin
//**************************************************************************
//Уменьшеньки счетчика банок при использовании в игре
if (pck[1]= #$14) then begin
case ReadD(2) of
OidGCP: Dec(NGCP);
OidGHP: Dec(NGHP);
OidSHP: Dec(NSHP);
end;
end;
//**************************************************************************
//**************************************************************************
//Авто CTRL
if PressCTRL then begin
If(pck[1]=#$2F) then pck[6]:=#$01;
If (pck[1]= #$04) or (pck[1]= #$0A) then begin
FirTargID:= SecTargID;
SecTargID:= ReadD(2);
if (FirTargID = SecTargID) and (FirTargID<> 0) then pck[1]:=#$0A;
end;
end;
//**************************************************************************
//**************************************************************************
//Управление
if (pck[1]=#$38) and (pck[10]=#$03) then begin
case ReadS(2) of
'234': if Switch then begin
Say ('Врубили маленькие бутылки');
Switch:= False;
end else begin
Say ('Врубили большие бутылки');
UseItem(OidGHP);
Switch:= True;
end;
'123': if Res then begin
Say ('Cпам ЦП и ХП выключен');
TimerHP.Enabled:= False;
TimerCP.Enabled:= False;
Res:= False;
end else begin
Say ('Cпам ЦП и ХП включен');
Res:= True;
end;
end;
pck:='';
exit;
end;
//**************************************************************************
//**************************************************************************
//Активация ПВП режима
if (pck[1]=#$57) then begin
if PressCTRL then begin
PressCTRL:= False;
Say ('ПВП режим не активен');
end else begin
PressCTRL:= True;
Say ('ПВП режим активен');
end;
pck:='';
exit;
end;
//**************************************************************************
//**************************************************************************
//Уменьшеньки счетчика банок при использовании в игре
if (pck[1]= #$14) then
case ReadD(2) of
OidGCP: Dec(NGCP);
OidGHP: Dec(NGHP);
OidSHP: Dec(NSHP);
end;
//**************************************************************************
end;
//****************************************************************************
//****************************************************************************
//****************************************************************************
//****************************************************************************
//Условия начала востановления, запуск вотсановления
//****************************************************************************
//If Res then begin
//**************************************************************************
//Активация востановления ЦП
//if PressCTRL then begin
If (((CurHP+CurCP)/(MaxHP+MaxCP)*100)<= ResCP) then
if (CurCP>0) and (NGCP>0) then begin
if not TimerCP.Enabled then begin
TimerCP.Enabled:= True;
UseItem (OidGCP);
Dec (NGCP);
end;
end;
If (CurCP>=(MaxCP-200)) then
if TimerCP.Enabled then TimerCP.Enabled:= False;
//end;
//**************************************************************************
//**************************************************************************
//Активация востановления ХП
if (not TimerHP.Enabled) then begin
if (CurHP <= HP) and (CurHP>0) then
if Switch then begin
if (NGHP>0) then begin
TimerHP.Enabled:= True;
UseItem (OidGHP);
Dec (NGHP);
end;
end else
if (NSHP>0) then begin
TimerHP.Enabled:= True;
UseItem (OidSHP);
Dec (NSHP);
end;
end else if (CurHP=MaxHP) then TimerHP.Enabled:= False;
//**************************************************************************
//end;
//****************************************************************************
//****************************************************************************
//****************************************************************************
End.
//******************************************************************************