PDA

Просмотр полной версии : Проблема со скриптом


lSiml
21.08.2011, 23:00
Проблема заключается в том что скрипт на автозаточку от TAMBIK который точит вещи по +1 к вещи не работает на некоторых серверах ИЛ где точки сделаны в 1 ячейку, причем ошибка заключается в том что скрипт пишет что "не найдет предмет для заточки" хотя лежат 2 одинаковых предмета, заточка до максимального уровня работает без проблем...
подскажите кто что думает.

Pinko
22.08.2011, 19:46
не работает на некоторых серверах ИЛ где точки сделаны в 1 ячейку,
ТАМ РОБИТ А ТАМ НЕ?????????????????
ОТВЕТ МОЖ СКРИПТ ПОД СВОЙ СЕРВ НАСТРОИТЬ

Nickers
23.08.2011, 18:45
http://coderx.ru/showthread.php?t=8594
Вот полезная тема по данному вопросу.

Добавлено через 7 минут
Const
Name='Nickers'; //Имя
interval1=444; //Интервал, сука
Max=250; // Кол-во ячеек в инвентаре
Ench=65; //На скок точить.
EnchItemMax=20; // Макс. Кол-во вещей для точки.
//---------------------------------------------
Var
ItemEnchList : array [1..EnchItemMax] of integer;
ItemBase : array[1..4,1..max] of integer; //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:=1 to EnchItemMax do ItemEnchList:=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 then begin
L:=false;
buf:=#$14;
WriteD(SCurOID);
WriteD(0);
SendToServerEx(Name);
end
else
begin
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;
begin
for u:=1 to max do
if (ItemBase[2,u]=Getitem(ICurID, 1, 2)) and (ItemBase[4,u]<Ench) then begin
result:=ItemBase[1,u]; // itemOID
exit;
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 then
begin
Timer01.enabled:=false;
SendMsg2('Типо все.');
end;
end;

procedure CreateItemBase;
var
i, j, ListCount: Word;
begin
for i:=1 to max do begin
//очищаем масив
ItemBase[1,i]:=0; //OID
ItemBase[2,i]:=0; //ID
ItemBase[3,i]:=0; //kol-vo
ItemBase[4,i]:=0; //lvl
end;
j:=4;
ListCount:=ReadH(j);
j:=8;
for i:=1 to ListCount do begin
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);//EnchantLevel
inc(j,12);
end;
end;
//......................................
//************************************************** ****************************
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
var
OID, Count, UpdType: integer;
lvl, ListCount, ID, i, ii, j: Word;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2);
j:=4;
for ii:=1 to ListCount do begin
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 of
1: begin
for i:=1 to max do begin
if (ItemBase[1,i]=0) and (add=false) then begin
ItemBase[1,i]:=OID;
ItemBase[2,i]:=ID;
ItemBase[3,i]:=Count;
ItemBase[4,i]:=lvl;
add:=true;
end;
end;
end;
2: begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
ItemBase[3,i]:=Count;
ItemBase[4,i]:=lvl;
end;
end;
end;
3: begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
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;
begin
for y:=1 to max do
if ItemBase[FieldIn,y]=ID then begin
result:=ItemBase[FieldOut,y]; // itemOID
exit;
end;
result:=0;
end;

begin

if FromClient and (pck[1]=#$14) and z then
begin
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 then
Begin
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) then
begin
min2:=min;
SendMsg2('Лучшая попытка на '+IntToStr(ICurOID)+' пока: +'+IntToStr(min));
end;

if FromServer and (ConnectName=Name) then
case pck[1] of
//......................................
//Пакет ItemList
#$1B: CreateItemBase; //создание базы предметов
//......................................
#$27: InventoryUpdate; //Обновление базы
end; //end от case!!!

end.

[I]Добавлено через 2 минуты
Вот этот треш - мой скрипт, для серверов без шифрации и со скроллами в 1й ячейке. Если не работает, то я кинул не ту версию скрипта, а правильную я хрен сейчас найду...

EmL
27.08.2011, 17:26
хех ну тут ответ 1) переделывать епт)

Nickers
29.08.2011, 02:48
Мой скрипт для C6, ибо там нет грязных камаелей!!! \Ё