PDA

Просмотр полной версии : База инвертаря шоле


dyh9l
29.03.2011, 17:53
помогите, цель скрипта, что я пытаюсь снять с чара все сомы +17, проблема в том, что 1 сом снимается, я удаляю его с массива, но следующий сом он пытается мне засунуть с 0-ым ObjID
Тип: 0x16 (AddTradeItem)
Размер: 13+2
Время прихода: 16:50:15:484
0002 d TradeID: 1 (0x00000001)
0006 d ObjectID: 0 (0x00000000)
000A d Count: 1 (0x00000001)
сам скрипт вот:
const
NameTocher = '~VIP~Dunyaxa' ;
NameOsn = 'eXploidsInMyLife';
max = 80;

var
ItemBasa:array[1..3,1..max] of integer;
ObjectIDosv,Count:integer;

procedure Init;
begin
buf:=#$0F;
SendToServerEx(NameTocher);
end;

procedure ItemPacketList;
var
i:word;
begin
Count:=ReadH(2);
for i:=1 to Count do
begin
ItemBasa[1,i]:=ReadD(i*28+8) ;//ObjectID
ItemBasa[2,i]:=ReadD(i*28+12);//Item ID
ItemBasa[3,i]:=ReadH(i*28+30);//EnchLvl
end;
end;

procedure InvertoryUpdate;
var
i:word;
begin
SendMsg('Начинаю процедуру InvertoryUpdate');
if (ReadH(4)=3) then
begin
SendMsg('Предмет удаляется');
for i:=1 to Count do
begin
SendMsg('Циклим в поисках нужного ObjectID');
if ItemBasa[1,i]=ReadD(8) then
begin
SendMsg('ObjectID найден в массиве и обнулился');
ItemBasa[1,i]:=0;
ItemBasa[2,i]:=0;
ItemBasa[3,i]:=0;
end;
end;
end;

end;

procedure CharInfo;
begin
if (ReadS(22)=NameOsn) then ObjectIDosv:=ReadD(18);
end;

procedure TradeOk;
begin
if (ReadD(2)=ObjectIDosv) then
begin
buf:=#$44;
WriteD(1);
SendToServerEx(NameTocher);
end;
end;

procedure zabiray;
begin
buf:=#$16;
WriteD(1);
WriteD(GetItem(5643,17));
WriteD(1);
SendToServerEx(NameTocher);
end;

function GetItem(item:integer; lvl:integer) : integer;
var
i : integer;
begin
for i:=1 to max do
begin
if ItemBasa[1,i]<>0 then
if (ItemBasa[2,i]=item) and (ItemBasa[3,i]=lvl) then
begin
result:=ItemBasa[1,i];
exit;
end;
end;
end;

begin

if (connectname=NameTocher) and (fromserver) then
case pck[1] of
#$1B: ItemPacketList;
#$27: InvertoryUpdate;
#$03: CharInfo;
#$5E: TradeOk;
end;
if (connectname=NameOsn) and (fromclient) then
case pck[1] of
#$38: if (ReadS(2)='1') then zabiray;
end;

end.

wimax
30.03.2011, 05:17
все соммы в масив потом создаешь очередность и забераеш сомы из масива по 1 яб так зделол

Nickers
05.04.2011, 15:55
dyh9l, Сам скрипт только глазами просмотрел...
Но на словах нужно искать в пакете инвентари апдейт СОМ, смотреть Энчант лвл и если он +17 то заносить в базу, потом составлять пакет (Обжект Ид можно взять от туда же) и выкладывать этот сом... Если скрипт будет работать вместе с АвтоЕнчантом, то пакет буит приходить после заточки и этот скрипт буит его скидывать) Но это в теории...

vahes
09.04.2011, 23:19
могу ошибатьcя, но думаю что ошибка сдесь

ItemBasa[1,i]:=ReadD(i*28+8) ;//ObjectID
ItemBasa[2,i]:=ReadD(i*28+12);//Item ID
ItemBasa[3,i]:=ReadH(i*28+30);//EnchLvl

формирование масива происходит со 2го итема, мое предложение

ItemBasa[1,i]:=ReadD((i-1)*28+8) ;//ObjectID
ItemBasa[2,i]:=ReadD((i-1)*28+12);//Item ID
ItemBasa[3,i]:=ReadH((i-1)*28+30);//EnchLvl