раньше конечно все юзали такое но сейчас новые хроники,новая защита ну я тебе дам скрипт на точку вчера сам проверял)
PHP код:
const
myname=''; //<<== пишем свой НИК
max=80; //<<== колличество ячеек в рюкзаке
enchantResult=16; //<<== на сколько точить
encSafe=3; //<<== на сколько безопасно точить
var
BaseItems:array[1..max,1..10] of integer;
EncItems:array[1..10] of integer;
Timer01,Timer02: TTimer;
mytext:string;
x,textID,vsego:integer;
enchantID,enchantObjectID:integer;
ItemOID,objectOID,selectObjectID,itemID:integer;
skrolObjectID,bskrolObjectID,skrolAmount,bskrolAmount,skrolID,bskrolID,skrolOID,bskrolOID:integer;
enchantLevel:word;
start,startenchant:Boolean;
//---
procedure SendMsg2(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClientEx(myname);
end;
//...
procedure ItemList;
var
i, j, k: integer;
ListSize: integer;
begin
j:=4; //пропускаем дo ListSize
ListSize:=ReadH(j);
for i:=1 to ListSize do
if (i<=ListSize) then begin
BaseItems[i,1]:=ReadH(j); //ItemType1- 1:одето броня. 0:бижа. 4:в рюкзаке
BaseItems[i,2]:=ReadD(j); //ObjectID
BaseItems[i,3]:=ReadD(j); //ItemID
BaseItems[i,4]:=ReadD(j); //LocationSlot
BaseItems[i,5]:=ReadD(j); // q Amount:
j:=j+4; // q Amount:
BaseItems[i,6]:=ReadH(j); //ItemType2
BaseItems[i,7]:=ReadH(j); // CustomType1
BaseItems[i,8]:=ReadH(j); //isEquipped:
BaseItems[i,9]:=ReadD(j); //BodyPart
BaseItems[i,10]:=ReadH(j); //EnchantLevel
//SendMsg2( ' List; ItemID------- : '+IntToStr(BaseItems[i,3])+'' );
inc(j,30);// ФИНАЛ
end else for k:=1 to 10 do BaseItems[i,k]:=0; // забиваем нулями
if (0<ItemID) then objectOID:=GetObjectID(ItemID);//находим по ItemID предмет с ObjectID
end;
//===
//находим ItemID по ObjectID предмета
function GetItemID(enchantObjectID:integer) : integer;
var
i : integer;
begin
for i:=1 to max do
if (BaseItems[i,2]=selectObjectID) then begin
itemID:=BaseItems[i,3];
SendMsg2 ('- ID предмета для Заточки:'+IntToStr(itemID)+' ');
start:=true;
exit;
end;
end;
//===
//находим enchantID предмета по ItemID для заточки
function GetObjectID(itemID:integer) : integer;
var
i :integer;
begin
enchantLevel:=0;
vsego:=0;
for i:=1 to max do
if (BaseItems[i,3]=itemID) and (BaseItems[i,10]< enchantResult) then begin
vsego:=vsego+1;
EncItems[vsego]:=i;
if (vsego = 1) then begin
enchantLevel:=BaseItems[i,10];
enchantID:=BaseItems[i,2];
end;
if (vsego > 1) and (BaseItems[i,10] < enchantLevel) then begin
enchantLevel:=BaseItems[i,10];
enchantID:=BaseItems[i,2];
end;
end;
//SendMsg2( '- В Ы Б Р А Н предмет для Заточки');
//SendMsg2( '- ObjID предмета='+IntToStr(enchantID)+' ');
//SendMsg2( '- точим предмет до: '+IntToStr(enchantResult)+' ' );
SendMsg2( '- предметов для заточки: '+IntToStr(vsego)+' ' );
SendMsg2( '- минимально заточен на: '+IntToStr(enchantLevel)+' ' );
x:=1;
if startenchant then begin
Timer01.enabled:=true;
end else begin
SendMsg2( '- cоцдействие ДА для старта' );
end;
end;
//===
procedure OnTimer01(Sender: TObject);
begin
case x of
1:begin
buf:=#$19;
if enchantLevel < encSafe then begin
WriteD(skrolObjectID); //простая заточка
end else begin
WriteD(bskrolObjectID);//блессед заточка
end;
WriteD(0);
SendToServerEx(myname);
inc(x);
end;
2:begin
buf:=hstr('D04C00');
WriteD(enchantID);
SendToServerEx(myname);
Timer02.enabled:=true;
x:=0;
Timer01.enabled:=false;
end;
end;
end;
//---
procedure OnTimer02(Sender: TObject);
begin
buf:=#$5F;
WriteD(enchantID);
WriteD(0);
SendToServerEx(myname);
Timer02.enabled:=false;
SendMsg2( '- Т О Ч И М предмет: '+IntToStr(enchantID)+' ' );
end;
//----------------------------------------------------------------------------------- start
procedure Init;
begin
itemID:=0;
enchantID:=0;
enchantLevel:=0;
start:=false;
startenchant:=false;
skrolObjectID:=0;
bskrolObjectID:=0;
enchantObjectID:=0;
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=500; //<<== время выбора свитка и предмета
Timer02:=TTimer.Create(nil);
Timer02.OnTimer:=@OnTimer02;
Timer02.enabled:=false;
Timer02.interval:=2800; //<<== время между заточкой
SendMsg2( '- ***** скрипт включился *****' );
SendMsg2( '- ник: '+myname+', ячеек инвентаря: '+IntToStr(max)+' ' );
SendMsg2( '- будем точить до '+IntToStr(enchantResult)+' ' );
SendMsg2( '- выберите обычную заточку ' );
x:=0;
end;
procedure Free;
begin
Timer01.free;
Timer02.free;
end;
//=========================
procedure RequestActionUse;
begin
case ReadD(2) of
24:begin
startenchant:=true;
x:=1;
Timer01.enabled:=true;
SendMsg2( '- П О Е Х А Л И -' );
SendMsg2( '- соцдействие НЕТ для остановки' );
buf:=hstr('14');
SendToServerEx(myname);
pck:='';
exit;
end;
25:begin
start:=false;
startenchant:=false;
Timer01.enabled:=false;
Timer02.enabled:=false;
SendMsg2( '- С Т О П -' );
SendMsg2( '- cоцдействие ДА для старта' );
pck:='';
exit;
end;
end;
end;
//=========
begin
if FromServer and (pck[1]=#$11) then ItemList;
if FromClient then
case pck[1] of
#$56:RequestActionUse;
#$19:if skrolObjectID = 0 then begin
skrolObjectID:=ReadD(2);
SendMsg2( '- ObjID обычного свитка: '+IntToStr(skrolObjectID)+'' );
SendMsg2( '- выберите блессед заточку' );
buf:=hstr('14');
SendToServerEx(myname);
end else if bskrolObjectID = 0 then begin
bskrolObjectID:=ReadD(2);
SendMsg2( '- ObjID блессед свитка: '+IntToStr(bskrolObjectID)+'' );
SendMsg2( '- заточите нужный предмет' );
buf:=hstr('14');
SendToServerEx(myname);
end;
#$D0:if ReadH(2)=76 then begin
selectObjectID:=ReadD(4);
end;
#$5F:begin
enchantObjectID:=ReadD(2);
ItemOID:=GetItemID(enchantObjectID);//находим по ObjectID предмет с ItemID
end;
end;
end.
p.s скрипт тамбика ему отдельное спасибо =)