Шаг 3.
Дальше допустим у нас закончились щиты или заточки, тогда надо писать процедуры на покупку щитов и доставание заточек и там же скидывание готовых на нужный уровень (например на 7) на склад.
Итак первое это будто мы уже около нпс люксора.
PHP код:
procedure Shield;
begin
buf:=#$1F;
Writed(NPC2id);
Writed(MyX);
Writed(MyY);
Writed(MyZ);
Writec(0);
SendToServerEx(name);
buf:=#$1F;
Writed(NPC2id);
Writed(MyX);
Writed(MyY);
Writed(MyZ);
Writec(0);
SendToServerEx(name);
end;
И второе это то когда мы у WareHouse Keeper или как его там.
PHP код:
procedure WH;
begin
buf:=#$1F;
Writed(NPCid);
Writed(MyX);
Writed(MyY);
Writed(MyZ);
Writec(0);
SendToServerEx(name);
buf:=#$1F;
Writed(NPCid);
Writed(MyX);
Writed(MyY);
Writed(MyZ);
Writec(0);
SendToServerEx(name);
firstnpc:=true;
end;
Ну это всеголиш начало диалогов с этими NPC. Сам процес покупки щитов или складывания их на клад происходит когда приходит пакет "HTML от нпс".
Вот его обработка:
PHP код:
procedure HTML;
begin
If (Readd(2)=NPCid) and firstnpc then
begin
buf:=#$22;
Writes('pochi001a.htm');
SendToServerEx(name);
firstnpc:=false;
end;
If (Readd(2)=NPCid) and npcscroll then
begin
buf:=#$22;
Writes('pochi001a.htm');
SendToServerEx(name);
npcscroll:=false;
end;
if (Readd(2)=NPCid) and (ReadS(6)='<html><body>Warehouse Keeper Pochi:<br><center><a action="bypass -h deposit">Deposit an item. (Private Warehouse)</a><br><a action="bypass -h withdraw">Withdraw an item. (Private Warehouse)</a><br><br><a action="link pochi001.htm">Return</a></center><br><br>Смотритель Склада Почи:<br><center><a action="bypass -h deposit">Сдать предмет на хранение. (Личный Склад)</a><br><a action="bypass -h withdraw">Забрать предмет. (Личный Склад)</a><br><br><a action="link pochi001.htm">Вернуться</a></center></body></html>') then
begin
if scrollcount<>0 then
begin
buf:=#$23;
WriteS('deposit');
SendToServerEx(name);
end
else
begin
buf:=#$23;
WriteS('withdraw');
SendToServerEx(name);
end;
end;
If (Readd(2)=NPC2id) then
begin
for n:=1 to 40 do
begin
buf:=#$B0;
Writed(2);
Writed(13);
Writeq(1);
writeh(0);
Writed(0);
Writed(0);
Writeh(65534);
writeh(0);
writeh(0);
writeh(0);
writeh(0);
writeh(0);
writeh(0);
writeh(0);
sendToServerEx(name);
end;
fromwh:=false;
buf:=#$14;
sendtoserverex(name);
end;
pck:='';
buf:=#$14;
SendToServerEx(name);
end;
Самые глазастые увидят, что щиты тут не убираются и заточки не берутся из вх. Да это так это происходит когда приходят два пакета соответственно на массив вещей что у тебя есть, чтобы скинуть их, и на массив вещей которые на складе, чтобы от туда что-то взять.
Вот две процедуры обработки, где скидываются вещи и берутся:
PHP код:
procedure put;
begin
j:=0;
Itemlist3:=readh(12);
list3:=14;
MaxGoodItems:=0;
for o:=1 to Itemlist3 do
begin
if (lvlENCHANT=Readd(list3+30)) then
begin
GoodItems[j]:=Readd(list3+68);
inc(j);
inc(MaxgoodItems);
end;
list3:=14+o*72
end;
TimerToGO.enabled:=true;
pck:='';
buf:=#$14;
sendtoserverex(name);
end;
procedure output;
begin
Itemlist4:=Readh(12);
List4:=14;
for l:=1 to Itemlist4 do
begin
if (Scroll=Readd(list4+4)) then
begin
ScrollOID:=Readd(list4+68);
//exit;
end;
inc(list4,72);
end;
TimerToGO2.enabled:=true;
pck:='';
buf:=#$14;
sendtoserverex(name);
end;
Опять таки, тут не всё, остальное в двух таймерах интервалов 5 сек:
PHP код:
procedure OnTimerToGO(Sender:Tobject);
begin
WHput;
TimerToGo.enabled:=false;
buf:=#$14;
sendtoserverex(name);
end;
procedure OnTimerToGO2(Sender:Tobject);
begin
WHoutput;
TimerToGo2.enabled:=false;
buf:=#$14;
sendtoserverex(name);
end;
Ну и наконец:
PHP код:
procedure WHput;
begin
if GoodItems[0]<>0 then
begin
buf:=#$3B;
Writed(MaxGoodItems);
for b:=0 to (MaxGoodItems-1) do
begin
Writed(GoodItems[b]);
Writed(1);
Writed(0);
end;
SendToserverEx(name);
end;
buf:=#$56;
Writed(33);
Writed(0);
Writec(0);
SendToserverEx(name);
gofromWH;
fromwh:=true;
end;
procedure WHoutput;
begin
if Scrollcount=0 then
begin
buf:=#$3C;
Writed(1);
Writed(ScrollOID);
Writed(400);
Writed(0);
SendToServerEx(name);
end;
gofromwh;
end;
Шаг 4.
Напишем процедуры перемещения от склада к нпс люксора и наоборот.
З.Ы.: Написаны они ужасно))
PHP код:
procedure goWH;
begin
buf:=#$14;
SendToServerEx(name);
if (Loc1x-70<MyX) and (MyX<Loc1x+70) and (Loc1y-70<Myy) and (Myy<Loc1y+70) and (Loc1z-70<Myz) and (Myz<Loc1z+70) then
begin
MoveBackwardToLocation(Loc2x,loc2y,loc2z);
end;
if (Loc2x-70<MyX) and (MyX<Loc2x+70) and (Loc2y-70<Myy) and (Myy<Loc2y+70) and (Loc2z-70<Myz) and (Myz<Loc2z+70) then
begin
MoveBackwardToLocation(loc3x,loc3y,loc3z);
end;
if (Loc3x-70<MyX) and (MyX<Loc3x+70) and (Loc3y-70<Myy) and (Myy<Loc3y+70) and (Loc3z-70<Myz) and (Myz<Loc3z+70) then
begin
MoveBackwardToLocation(loc4x,loc4y,loc4z);
end;
if (Loc4x-70<MyX) and (MyX<Loc4x+70) and (Loc4y-70<Myy) and (Myy<Loc4y+70) and (Loc4z-70<Myz) and (Myz<Loc4z+70) then
begin
WH;
end;
end;
procedure gofromWH;
begin
buf:=#$14;
SendToServerEx(name);
if (Loc4x-70<MyX) and (MyX<Loc4x+70) and (Loc4y-70<Myy) and (Myy<Loc4y+70) and (Loc4z-70<Myz) and (Myz<Loc4z+70) then
begin
MoveBackwardToLocation(loc3x,loc3y,loc3z);
end;
if (Loc3x-70<MyX) and (MyX<Loc3x+70) and (Loc3y-70<Myy) and (Myy<Loc3y+70) and (Loc3z-70<Myz) and (Myz<Loc3z+70) then
begin
MoveBackwardToLocation(loc2x,loc2y,loc2z);
end;
if (Loc2x-70<MyX) and (MyX<Loc2x+70) and (Loc2y-70<Myy) and (Myy<Loc2y+70) and (Loc2z-70<Myz) and (Myz<Loc2z+70) then
begin
MoveBackwardToLocation(loc1x,loc1y,loc1z);
end;
if (Loc1x-70<MyX) and (MyX<Loc1x+70) and (Loc1y-70<Myy) and (Myy<Loc1y+70) and (Loc1z-70<Myz) and (Myz<Loc1z+70) then
begin
Shield;
end;
end;
procedure MoveBackwardToLocation(x:integer;y:integer;z:integer);
begin
buf:=#$0F;
WriteD(x);
WriteD(y);
WriteD(z);
Writed(MyX);
Writed(MyY);
Writed(MyZ);
Writed(1);
SendToServerEx(name);
end;