Вернуться   CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг
Войти через OpenID

Скриптинг Форум посвещенный созданию скриптов для L2PacketHack

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 27.08.2012, 00:39   #41
Местный
 
Аватар для kpa9pt
 
Регистрация: 13.01.2010
Сообщений: 159
Сказал Спасибо: 18
Имеет 30 спасибок в 23 сообщенях
kpa9pt имеет немного плохого в прошлом
По умолчанию

Цитата:
Сообщение от dyh9l Посмотреть сообщение
kpa9pt, один хер, те кому они были бы полезны, не смогут разобраться как их юзать, а тот кто сможет - сам напишет
Лан, завтра мб напишу статью сюда про скрипт заточки выложу куски и всё по шагам разберу, всёравно там мало кому такой нужен будет скрипт, мало кто точит б щиты покупая в люксоре их и доставая из вх точки в видде 5к штук)
kpa9pt вне форума   Ответить с цитированием
За это сообщение kpa9pt нажился спасибкой от:
Старый 28.08.2012, 23:13   #42
Местный
 
Аватар для Pinko
 
Регистрация: 31.05.2011
Сообщений: 130
Сказал Спасибо: 287
Имеет 23 спасибок в 22 сообщенях
Pinko пока неопределено
По умолчанию

МОЖНО достать из ВОЗДУХА
хи се sXAXAs
__________________
Никого нельзя ничему научить,
но всему можно научиться

народная мудрость

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

Итак как обещал скрипт пошагово на авто заточку Щитов Б грейда из люксора.

З.Ы.: Писал довольно давно и не выйдет очень красиво в (духе здесь и сейчас) написать описание.
З.Ы2.: Тогда я относился скептически к объявлению переменных в процедуре и поэтому там с ними просто дикий "анал карнавал".
З.Ы3.: Сейчас я понимаю что скрипт можно было бы написать намного проще красивее и лучше но переписывать уже поздно поэтому то что есть:


Писать буду в стиле с чего начать и как продолжить.

Шаг 1.

Нужно записать процедуру для отправки пакета заточки щита, чтобы дальше в циклах обработки её вызывать. Вот она:


PHP код:
procedure UseItem(ItemID:integer);
    
begin
        buf
:=#$19;
        
Writed(ItemID);
        
Writed(0);
        
SendToServerEx(name);
    
end;

procedure Enchant(Id:integer);
    
begin
        buf
:=#$D0;
        
Writeh(76);
        
Writed(Id);
        
SendToServerEx(name);    
    
end;

procedure Ench(ID:integer);
    
begin
        buf
:=#$5F;
        
Writed(ID);
        
Writed(0);
        
SendToServerEx(name);
    
end
Три шага заточки: юзнуть точку, выбрать щит и заточить.

Шаг 2.

Итак, вещь точится и теперь дальше нужно как-то отслеживать уровень её заточки чтобы знать когда остановиться.
А также кол-во заточек в инвентаре т.к. мой несчастный гном сразу 5к не мог взять , был дикий перевес и я периодически доставал их из WareHouse.
Это видно в пакете Itemlist или в пакете InventaryUpdate - пишем их процедуры которые будут вызываться всякий раз как приходит их пакет.


PHP код:
procedure Itemlist;
begin
j
:=0;
Itemlist:=readh(4);
list1:=6;                                        
for 
i:=1 to Itemlist do
    
begin
        reading
:=false;                           
        if (
Readd(list1+4)=ItemforEnchIDthen
            begin
                Items
[1,j]:=Readd(list1);//OID
                
Items[2,j]:=Readh(list1+26);//Enchlvl    
                
inc(j);
                
reading:=true;                           
            
end;                             
        if (
Readd(list1+4)=Scrollthen
            begin
                ScrollID
:=Readd(list1);
                
ScrollCount:=Readd(list1+8);
                
reading:=true;   
            
end;
            if 
reading then
            begin                                        
        inc
(list1,64);
        
end
        
else
        
begin
         inc
(list1,68);
        
end;      
    
end;                        
end
PHP код:
procedure InventaryUpdate;
begin
j
:=0;
Itemlist2:=Readh(2);
list2:=6;
for 
v:=1 to Itemlist2 do
    
begin
        recording2
:=false;
        for 
j:=0 to 96 do
        
begin                                
        list2
:=6+(v-1)*70;                                
        if (
Items[1,j]=Readd(list2)) then                           
            begin
                
case Readh(list2-6of
                    1
://Add
                        
begin
                        
                        end
;
                    
2://Mode
                        
begin
                            Items
[2,j]:=Readh(list2+26);
                        
end;
                    
3://Dell
                        
begin
                            Items
[1,j]:=0;
                            
Items[2,j]:=0;
                        
end;
                
end;
                
recording2:=true;    
            
end
            
else
            
begin
                
            end
;
        
end;                                
        if (
Readd(list2-4)=ScrollIDthen
            begin
                
case Readh(list2-6of
                    1
://Add
                        
begin
                        
                        end
;
                    
2://Mode
                        
begin
                            ScrollCount
:=readd(list2+8);                                                
                        
end;
                    
3://Dell
                        
begin
                            ScrollID
:=0;
                            
ScrollCount:=0;
                            
                        
end;
                
end;
                
recording2:=true;
            
end;                               
        
list2:=6+(v-1)*70;                                          
    
end;
end

Последний раз редактировалось kpa9pt, 02.09.2012 в 17:46.
kpa9pt вне форума   Ответить с цитированием
За это сообщение kpa9pt нажился 2 спасибками от:
Старый 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 спасибками от:
Старый 02.09.2012, 17:44   #45
Местный
 
Аватар для kpa9pt
 
Регистрация: 13.01.2010
Сообщений: 159
Сказал Спасибо: 18
Имеет 30 спасибок в 23 сообщенях
kpa9pt имеет немного плохого в прошлом
По умолчанию

Шаг 5.

Ну и наконец процедура для того чтобы это дело всё точилось и он соображал когда надо бежать за точками или щитами

PHP код:
procedure OnTimerEnch(Sender:Tobject);
    
begin
        
for jj:=0 to (lvlENCHANT-1) do
        
begin
        
for ii:=0 to 96 do
            
begin
                
if (Items[2,ii]=jj) and (Items[1,ii]<>0) and (Scrollid<>0) and (ScrollCount<>0)   then
                    begin
                        UseItem
(ScrollID);
                        
Enchant(Items[1,ii]);
                        
Ench(Items[1,ii]);
                        exit;    
                    
end;
            
end;            
        
end;
        if (
Scrollcount=0then
            begin
                wantscroll
;
            
end;
        if (
jj=(lvlENCHANT-1)) and (ii=96) and not fromwh then
            begin                
                goWH
;    
            
end;
        if (
jj=(lvlENCHANT-1)) and (ii=96) and fromwh then
            begin
                gofromWH
;    
            
end;
    
end
P.S.: Скрипт запускается по OldSchool соц действиями, написал вроде бы всё что надо было. Кто жаждет разобраться пишите вопросы сюда.
P.S.: Скрипт писался на rpg-club на хрониках GF или HF уже не помню.
kpa9pt вне форума   Ответить с цитированием
За это сообщение kpa9pt нажился 2 спасибками от:
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг


Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 20:34.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!