Проблема заключается в том что скрипт на автозаточку от TAMBIK который точит вещи по +1 к вещи не работает на некоторых серверах ИЛ где точки сделаны в 1 ячейку, причем ошибка заключается в том что скрипт пишет что "не найдет предмет для заточки" хотя лежат 2 одинаковых предмета, заточка до максимального уровня работает без проблем...
подскажите кто что думает.
Const
Name='Nickers'; //Имя
interval1=444; //Интервал, сукаMax=250; // Кол-во ячеек в инвентаре
Ench=65; //На скок точить.
EnchItemMax=20; // Макс. Кол-во вещей для точки.//---------------------------------------------Var
ItemEnchList : array [1..EnchItemMax] ofinteger;
ItemBase : array[1..4,1..max] ofinteger; //ItemOID, ItemID, Kol-vo, ItemLvl
ICurOID, SCurOID, min1, ICurID: integer;
i, j, u, y, d, n, o, o1: Word;
min, min2, ItemNum: Byte;
z, L: boolean;
Timer01: TTimer;
num: string;
//=============================================================//procedure Init; //Вызывается при включении скрипта//----------------------------------------------------------begin
n:=0; i:=0; min:=0; min2:=0;
L:=true; z:=true;
o:=1; o1:=1;
for i:=1to EnchItemMax do ItemEnchList[i]:=0;
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=interval1;
buf:=#$0F;
SendToServerEx(Name);
end;
//=============================================================//procedure Free; //Вызывается при выключении скриптаbegin
Timer01.free;
end;
procedure SendMsg2(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);// ID Чата
WriteS('');
WriteS(msg);
SendToClientEx(Name);
end;
procedure OnTimer01(Sender: TObject);
begin//Проверка Энчант лвл'а
ICurID:=ItemEnchList[o1];
if GetItem(ICurOID, 1, 4)>=Ench then ICurOID:=EnchantDone;
z:=false;
if L thenbegin
L:=false;
buf:=#$14;
WriteD(SCurOID);
WriteD(0);
SendToServerEx(Name);
endelsebegin
L:=true;
buf:=#$58;
WriteD(ICurOID);
SendToServerEx(Name);
end;
if GetItem(ICurOID, 1, 4)>min then min:=GetItem(ICurOID, 1, 4);
end;
function EnchantDone : integer;
beginfor u:=1tomaxdoif(ItemBase[2,u]=Getitem(ICurID, 1, 2))and(ItemBase[4,u]<Ench)thenbegin
result:=ItemBase[1,u]; // itemOIDexit;
end;
result:=ItemEnchList[o1];
EnchList;
end;
procedure EnchList;
begin
o1:=o1+1;
ICurOID:=ItemEnchList[o1];
SendMsg2('Точю всё с ID '+IntToStr(GetItem(ICurOID, 1, 2)));
if o1>o thenbegin
Timer01.enabled:=false;
SendMsg2('Типо все.');
end;
end;
procedure CreateItemBase;
var
i, j, ListCount: Word;
beginfor i:=1tomaxdobegin//очищаем масив
ItemBase[1,i]:=0; //OID
ItemBase[2,i]:=0; //ID
ItemBase[3,i]:=0; //kol-vo
ItemBase[4,i]:=0; //lvlend;
j:=4;
ListCount:=ReadH(j);
j:=8;
for i:=1to ListCount dobegin
itemBase[1,i]:=ReadD(j); //OID
itemBase[2,i]:=ReadD(j); //ItemID
itemBase[3,i]:=ReadD(j); //кол-воinc(j,10);
itemBase[4,i]:=ReadH(j);//EnchantLevelinc(j,12);
end;
end;
//......................................//******************************************************************************procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemIDvar
OID, Count, UpdType: integer;
lvl, ListCount, ID, i, ii, j: Word;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2);
j:=4;
for ii:=1to ListCount dobegin
add:=false; //Ели додумался изза чего не добавляет сразу несколько предметов в базу
UpdType:=ReadH(j);
ReadH(j); //ItemType1
OID:=ReadD(j); //ObjectID
ID:=ReadD(j); //ItemID
Count:=ReadD(j); //кол-воinc(j,10);
lvl:=ReadH(j);
case UpdType of1: beginfor i:=1tomaxdobeginif(ItemBase[1,i]=0)and(add=false)thenbegin
ItemBase[1,i]:=OID;
ItemBase[2,i]:=ID;
ItemBase[3,i]:=Count;
ItemBase[4,i]:=lvl;
add:=true;
end;
end;
end;
2: beginfor i:=1tomaxdobeginif ItemBase[1,i]=OID thenbegin
ItemBase[3,i]:=Count;
ItemBase[4,i]:=lvl;
end;
end;
end;
3: beginfor i:=1tomaxdobeginif ItemBase[1,i]=OID thenbegin
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
ItemBase[3,i]:=0;
ItemBase[4,i]:=0;
end;
end;
end;
end;
inc(j,10);
end;
end;
function GetItem(ID, FieldIn, FieldOut : integer) : integer;
var
y : Word;
beginfor y:=1tomaxdoif ItemBase[FieldIn,y]=ID thenbegin
result:=ItemBase[FieldOut,y]; // itemOIDexit;
end;
result:=0;
end;
beginif FromClient and(pck[1]=#$14)and z thenbegin
ItemEnchList[o]:=ReadD(2);
SendMsg2(IntToStr(o)+'. ID '+IntToStr(GetItem(ReadD(2), 1, 2))+' (Запомнен)');
o:=o+1;
end;
if FromClient and(pck[1]=#$58)and z thenBegin
SCurOID:=ItemEnchList[o];
ItemEnchList[o]:=0;
o:=o-1;
ICurOID:=ItemEnchList[1];
Timer01.enabled:=true;
end;
if FromServer and(pck[1]=#$64)and(ReadD(2)=1517)and(min2<>min)thenbegin
min2:=min;
SendMsg2('Лучшая попытка на '+IntToStr(ICurOID)+' пока: +'+IntToStr(min));
end;
if FromServer and(ConnectName=Name)thencase pck[1] of//......................................//Пакет ItemList
#$1B: CreateItemBase; //создание базы предметов//......................................
#$27: InventoryUpdate; //Обновление базыend; //end от case!!!end.
Добавлено через 2 минуты
Вот этот треш - мой скрипт, для серверов без шифрации и со скроллами в 1й ячейке. Если не работает, то я кинул не ту версию скрипта, а правильную я хрен сейчас найду...