BaseItems: array[1..maxitems, 1..12] of integer; - не круто. 12 интеджеров у вещи, а используются по ходу только 4 это раз, а во-вторых массив не динамический, что тоже не круто. В-третьих что-то не видно добавления итема через ИнвентарьАпдейт, стоит просто 1: obj:=0;, дальше я так понял его просто ищут в инвентаре по oid'у, не находят и... всё?
А зачем динамический если больше maxitems вещей не может быть.
Все что не используется можно легко убрать.
При obj:=0 ищется первая не занятая ячейка массива и ей присваивается новый обжект ид и все остальное.
const
Name='OldMen';
offset=68;
var
Inventory:arrayofvariant;
procedure Init; //Вызывается при включении скриптаbegin
buf:=#$14;
SendToServerEx(Name);
SetLength(Inventory,0);
end;
procedure Free; //Вызывается при выключении скриптаbeginend;
procedure ItemList;
var
i:integer;
v:variant;
beginSetLength(Inventory,0);
if ReadH(4)<1thenexit;
for i:=0to ReadH(4)-1dobegin
v:=[0,1,2];
v[0]:=ReadD(i*offset+6); //0 - OID
v[1]:=ReadD(i*offset+10); //1 - ItemID
v[2]:=ReadQ(i*offset+18); //2 - CountSetLength(Inventory,length(Inventory)+1);
Inventory[length(Inventory)-1]:=v;
end;
end;
procedure InventoryUpdate;
var
i,j:integer;
v:variant;
beginif ReadH(2)<1thenexit;
for i:=0to ReadH(2)-1dobegin
v:=[0,1,2];
v[0]:=ReadD(i*offset+6);
v[1]:=ReadD(i*offset+10);
v[2]:=ReadQ(i*offset+18);
case ReadH(i*offset+4)of1: beginSetLength(Inventory,length(Inventory)+1);
Inventory[length(Inventory)-1]:=v;
end;
2: begin
j:=FindItemByParams(v,0);
if j=-1thenexit;
Inventory[j]:=v;
end;
3: begin
j:=FindItemByParams(v,0);
if j=-1thenexit;
if(j<>length(Inventory)-1)then Inventory[j]:=Inventory[length(Inventory)-1];
SetLength(Inventory,length(Inventory)-1);
end;
end;
end;
end;
function FindItemByParams(v:variant;p:byte) : integer;
var
i:integer;
tempv:variant;
begin
result:=-1;
for i:=0tolength(Inventory)-1dobegin
tempv:=Inventory[i];
if tempv[p]=v[p] thenbegin
result:=i;
exit;
end;
end;
end;
function Say2 : boolean;
var
i:integer;
v:variant;
begin
result:=true;
case ReadS(2)of'how': CreatureSay('Всего вещей '+inttostr(length(Inventory)));
'say all' :
for i:=0tolength(Inventory)-1dobegin
v:=Inventory[i];
CreatureSay(IntToStr(i+1)+'. OID='+inttostr(v[0])+'; ItemID='+inttostr(v[1])+'; Count='+inttostr(v[2]));
end;
else result:=false;
end;
if result then pck:='';
end;
procedure CreatureSay(s:string);
begin
buf:=#$4A;
WriteMask('ddss',[0,3,'Инфо',s]);
SendToClientEx(Name);
end;
//основная часть скрипта//вызывается при приходе каждого пакета если скрипт включенbeginif FromServer and(ConnectName=Name)thencase pck[1] of
#$11: ItemList;
#$21: InventoryUpdate;
end;
if FromClient and(ConnectName=Name)thencase pck[1] of
#$49: Say2;
end;
end.
__________________ Начало.
За это сообщение supernewbie нажился 4 спасибками от:
Добавлено через 2 часа 15 минут dyh9l, Мы чет встали... Че ща по скрипту нада делать? Я прост хз с чего начать)) Ты тамбика курнул?
Добавлено через 13 минут
У меня у самого проблема... Гдет нашел скрипт на Аргументацию для ленивых под Грацию, нада переделать под С6
Я так понял афтор специально поместил все сборки пакетов в 1 скрипт... Как они меняются с версиями? Брать ини из ПХ и все подгонять? оО Чет их дахрена...
Мне нужно в бота добавить функцию,что бы в случай смерти он нажимал "в деревню",как я понял,нужно поймать пакет который производит данное действие,далее вставить его в скрип.Только вот какой пакет и куда его вставлять понятия не имею Оффтоп
Всем привет! Мене хотелось бы знать.. вот я хачу что б при нажатии на какую нить кнопку(к примеру F4 прям в игре) и что б програмка l2phx отправила пакеты
как можно сделать такой скрипт
и ещё хачу что б пакеты отправлялись с паузай ну скажем с 0.2сек