Показать сообщение отдельно
Старый 02.09.2012, 17:44   #44
Местный
 
Аватар для kpa9pt
 
Регистрация: 13.01.2010
Сообщений: 159
Сказал Спасибо: 18
Имеет 30 спасибок в 23 сообщенях
kpa9pt имеет немного плохого в прошлом
По умолчанию

Шаг 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)=NPC2idthen
    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+70then
            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+70then
            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+70then
            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+70then
            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+70then
            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+70then
            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+70then
            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+70then
            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
kpa9pt вне форума   Ответить с цитированием
За это сообщение kpa9pt нажился 3 спасибками от: