Имя в скрипте определяется автоматически, вводить его не требуется.
Скрипт освобождает инвентарь от хлама, сбрасывая в варехаус стопковые предметы
которые уже имеются на складе и в инвентаре.
К примеру на складе лежит 142 Animal Bone и в инвентаре 18 Animal Bone,
Скрипт просматривает склад и инвентарь, и выявляет что Animal Bone имеется там и там,
потом, собрав в список все подобные предметы перекидывает их на склад, избавляя
вас от нудной работы по отчистке инвентаря.
Скрипт так же работает со складом клана.
1) Подойти в варехаус к начальнику склада
2) Выбрать "Забрать вещи с личного склада"
(при этом скрипт запомнит все предметы на складе, и появится
сообщение в чате "Вещи на складе запомнены")
3) Выбрать "Положить вещи на хранение"
(скрипт запомнит все предметы в инвентаре, и появится
сообщение в чате "Вещи в инвентаре запомнены")
4) Ввести в пати чат цифры 777, скрипт начнет составлять список вещей которые
имеются в инвентаре и на складе, в итоге перекинет хлам из инвентаря на склад,
появится сообщение в чате о кол-ве перенесенных предметов и о том что все готово.
Код
//Автор ATMS_DIFKS
var
ListItems,ListCount:integer;
Items:array[1..200] of integer;
Count:array[1..200] of integer;
Items2:array[1..200] of integer;
Count2:array[1..200] of integer;
ObjectId:array[1..200] of integer;
find:array[1..200] of integer;
findC:array[1..200] of integer;
findO:array[1..200] of integer;
i,i2,n,m,n2,m2,i3,i4,fn:integer;
name:string;
procedure Init; //Вызывается при включении скрипта
begin
end;
procedure Free; //Вызывается при выключении скрипта
begin
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(2); //тип сообщения 1 шаут 2 приват 10 аноним обьявление и тд
WriteS(''); //ник от кого
WriteS(msc);
SendToClientEX(name);
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if fromserver and (pck[1]=#$42) then
begin
name := ConnectName;
SendMsc('Имя в скрипте определяется автоматически, вы: '+name);
ListItems := ReadH(8); n:=-16;
for i:=1 to 200 do begin Items[i]:=0; Count[i]:=0; end;
for i:=1 to ListItems do
begin
n:=n+32; m:=n-4;
Items[i]:=ReadD(m+4);
Count[i]:=ReadD(m+8);
// SendMsc(inttostr(i)+') '+inttostr(Items[i])+' = '+inttostr(m+4)+' C='+inttostr(Count[i]));
end;
SendMsc('Вещи на складе запомнены');
end;
if fromserver and (pck[1]=#$41) then
begin
name := ConnectName;
SendMsc('Имя в скрипте определяется автоматически, вы: '+name);
ListCount := ReadH(8); n2:=-16;
//SendMsc(inttostr(ListCount));
for i2:=1 to 200 do begin Items2[i2]:=0; Count2[i2]:=0; end;
for i2:=1 to ListCount do
begin
n2:=n2+32; m2:=n2-4;
Items2[i2]:=ReadD(m2+4);
Count2[i2]:=ReadD(m2+8);
ObjectId[i2]:=ReadD(m2+22+4);
// SendMsc(inttostr(i2)+') '+inttostr(Items2[i2])+' = '+inttostr(m2)+' C='+inttostr(Count2[i2])+' OID='+inttostr(ObjectId[i2]));
end;
SendMsc('Вещи в инвентаре запомнены');
end;
If fromclient and (pck=hstr('38 37 00 37 00 37 00 00 00 03 00 00 00')) and (ConnectName=name) then
begin
pck:=''; fn:=0;
SendMsc('start');
for i4:=1 to 200 do
begin
for i3:=1 to 200 do
begin
if Items[i3] = Items2[i4] then
begin
if Count[i3] > 1 then
begin
fn:=fn+1;
find[fn]:=Items[i3];
findC[fn]:=Count2[i4];
findO[fn]:=ObjectId[i4];
end;
end;
end;
end;
{ for i:=1 to 200 do
begin
if i <= fn then SendMsc(inttostr(i)+') id='+inttostr(find[i])+' c='+inttostr(findC[i])+' o='+inttostr(findO[i]));
end;
}
if fn > 0 then
begin
buf:=#$31;
WriteD(fn);
for i:=1 to fn do
begin
WriteD(findO[i]);
WriteD(findC[i]);
end;
SendToServerEX(name);
SendMsc('Готово, '+inttostr(fn)+' тип предметов было отправлено на склад.');
fn:=0;
end else SendMsc('Чистка скрипта не требуется');
end;
end.