Скриптинг Форум посвещенный созданию скриптов для L2PacketHack
08.02.2010, 00:40
#621
Пользователь
Регистрация: 03.09.2009
Сообщений: 63
Сказал Спасибо: 19
Имеет 5 спасибок в 3 сообщенях
Пробуй, только отпишись! я сам нубась в это м деле
begin
if fromserver and (ConnectName='Здесь свое имя') then
begin
case pck[1] of
#$16 : if (ReadD(10)=57) or (ReadD(10)=2508) then
begin
pck:='';
end;
#$05 : if (ReadD(10)=57) or (ReadD(10)=2508) then
begin
pck:='';
end;
end;
end;
end.
За это сообщение tiranosaur нажился спасибкой от:
08.02.2010, 00:53
#622
Рыцарь
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
xeno , попробуй вот так
delphi Код:
procedure Init; //Вызывается при включении скрипта
begin
end ;
procedure Free; //Вызывается при выключении скрипта
begin
end ;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if FromServer then
begin
case pck[1 ] of
#$05 : //пакет 05=SpawnItem
begin
case pck[10 ] of //по смещению 10 находится ItemID
17 , 57 , 1341 ..1345 : pck:='' ; //дропаем стрелы, адену, деревянные и т.д. стрелы
end ;
end ;
#$16 : //пакет 16=DropItem
begin
case pck[6 ] of //по смещению 06 находится ItemID
17 , 57 , 1341 ..1345 : pck:='' ; //дропаем стрелы, адену, деревянные и т.д. стрелы
end ;
end ;
end ;
end ;
end .
За это сообщение NLObP нажился 2 спасибками от:
08.02.2010, 01:01
#623
Пользователь
Регистрация: 03.09.2009
Сообщений: 63
Сказал Спасибо: 19
Имеет 5 спасибок в 3 сообщенях
А мой не покатит?
08.02.2010, 01:21
#624
Рыцарь
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
Цитата:
Сообщение от
tiranosaur
А мой не покатит?
Будет работать. Только мой вариант, ИМХО, побыстрее. У тебя по два раза считывает из ячеек значение ItemID. Да и развить мой вариант по удалению других предметов проще.
Последний раз редактировалось NLObP, 08.02.2010 в 01:23 .
08.02.2010, 02:32
#625
Новичок
Регистрация: 23.01.2010
Сообщений: 7
Сказал Спасибо: 3
Имеет 0 спасибок в 0 сообщенях
tiranosaur ,
NLObP ,
спасибо ребят.
кстати разве в этой часте скрипта
Код:
case pck[10] of
17, 57, 1341..1345: pck:='';
ид итемов надо прописывать не в хексе?
да точно
Последний раз редактировалось xeno, 08.02.2010 в 02:51 .
Причина: добавлено
08.02.2010, 17:39
#626
Пользователь
Регистрация: 03.09.2009
Сообщений: 63
Сказал Спасибо: 19
Имеет 5 спасибок в 3 сообщенях
Подскажите где ошибка пжл. сервер грация
delphi Код:
const
NickName = '3ayp' ;
HPMedium = 95 ;
HPBottleID = 1061 ; //1061=Healing Potion;
DrinkDelay = 14 ;
InvRazmer = 79 ;
var
MyX, MyY,MyZ : integer ;
MyID, MyHP, MyMaxHP: integer ;
MyMP, MyMaxMP : integer ;
HPlevelProcent : integer ;
CurrentInvRazmer : integer ;
TargetID : integer ;
time1: integer ;
Inventory: array[0 ..InvRazmer , 0 ..9 ] of integer ;
HPBottleObjID: integer ;
HpBottleCount: integer ;
procedure Init; //Вызывается при включении скрипта
begin
MyID:= 0 ;
MyX:= 0 ;
MyY:= 0 ;
MyZ:= 0 ;
MyID:= 0 ;
MyHP:= 0 ;
MyMaxHP:= 0 ;
MyMP:= 0 ;
MyMaxMP:= 0 ;
TargetID:=0 ;
time1:=1 ;
buf:= #$14 ;
SendToServerEx( NickName) ;
end ;
function Wait( var tick: integer ;Timewait: Integer ) : Boolean ; // сквозная проверка без остановки скрипта (c)dmitry501, modifed by Sh00rGo
var
t: integer ;
begin
result:=false ;
t:=Round ( Time *86400 ) ;
if t>( tick+Timewait) then begin
if tick>0 then result:=true ;
tick:=t;
end ;
end ;
procedure UseItemID( ItemID:integer ) ; //Использовать предмет с заданным ItemID
var
ObjItemID : integer ;
begin
ObjItemID:= GetInv( ItemID,2 ,1 ) ;
if ObjItemID = -1 then exit ;
buf:=#$19 ;
WriteD( ObjItemID) ;
WriteD( 0 ) ;
SendToServerEx( NickName) ;;
end ;
procedure InventoryCreate;
var
i,k, offset : integer ;
begin
offset:= 76 ;
CurrentInvRazmer:=ReadH( 4 ) ;
for i:=0 to InvRazmer do
if i < CurrentInvRazmer then begin
Inventory[i,0 ]:=ReadH( i*( 28 +offset) +6 ) ; // itemType1
Inventory[i,1 ]:=ReadD( i*( 28 +offset) +8 ) ; // ObjectId
Inventory[i,2 ]:=ReadD( i*( 28 +offset) +12 ) ; // ItemID
Inventory[i,3 ]:=ReadD( i*( 28 +offset) +16 ) ; // count
Inventory[i,4 ]:=ReadH( i*( 28 +offset) +20 ) ; // itemType2
Inventory[i,5 ]:=ReadH( i*( 28 +offset) +22 ) ; // CustType1
Inventory[i,6 ]:=ReadH( i*( 28 +offset) +24 ) ; // isEquipped
Inventory[i,7 ]:=ReadD( i*( 28 +offset) +26 ) ; // BodyPart
Inventory[i,8 ]:=ReadH( i*( 28 +offset) +30 ) ; // EnchantLevel
Inventory[i,9 ]:=ReadH( i*( 28 +offset) +32 ) ; // CustType2
end else
for k:=0 to 9 do Inventory[i,k]:=0 ; // забиваем нулями
end ;
procedure InventoryUpdate;
var
i,j,k, offset: integer ;
begin
offset:= 82 ;
for j:=0 to ( ReadH( 2 ) -1 ) do
begin
case pck[j*offset+4 ] of
#$01 : k:=0 ; // add item, запишет на пустую ячейку
#$02 : k:=ReadD( j*offset+8 ) ; // mod item
#$03 : begin // remove item, обнулит ячейки удаленного предмета
k:=ReadD( j*offset+8 ) ;
for i:=0 to InvRazmer do if ( Inventory[i,1 ]=k) then
begin
for k:=0 to 9 do Inventory[i,k]:=0 ;
exit ;
end ;
end ;
end ;
for i:=0 to InvRazmer do if ( Inventory[i,1 ]=k) then
begin
Inventory[i,0 ]:=ReadH( j*offset+6 ) ; // itemType1
Inventory[i,1 ]:=ReadD( j*offset+8 ) ; // ObjectId
Inventory[i,2 ]:=ReadD( j*offset+12 ) ; // ItemID
Inventory[i,3 ]:=ReadD( j*offset+20 ) ; // count
Inventory[i,4 ]:=ReadH( j*offset+24 ) ; // itemType2
Inventory[i,5 ]:=ReadH( j*offset+26 ) ; // CustType1
Inventory[i,6 ]:=ReadH( j*offset+28 ) ; // isEquipped
Inventory[i,7 ]:=ReadD( j*offset+30 ) ; // BodyPart
Inventory[i,8 ]:=ReadH( j*offset+34 ) ; // EnchantLevel
Inventory[i,9 ]:=ReadH( j*offset+36 ) ; // CustType2
break ;
end ;
end ;
end ;
Последний раз редактировалось NLObP, 09.02.2010 в 00:32 .
08.02.2010, 17:39
#627
Пользователь
Регистрация: 03.09.2009
Сообщений: 63
Сказал Спасибо: 19
Имеет 5 спасибок в 3 сообщенях
delphi Код:
function GetInv( obj,up,down:integer ) : integer ; // up и down не проверяются
var // 0-itemType1, 1-ObjectId, 2-ItemID, 3-count, 4-itemType2, 5-CustType1, 6-isEquipped, 7-BodyPart, 8-EnchantLevel, 9-CustType2
i: integer ;
begin
for i:=0 to CurrentInvRazmer do if ( Inventory[i,up]=obj) then
begin
Result:=Inventory[i,down];
exit ;
end ;
Result:=-1 ;
end ;
procedure UseItemObjID( ItemObjID:integer ) ; //Использовать предмет с заданным ItemID
begin
buf:=#$19 ;
WriteD( ItemObjID) ;
WriteD( 0 ) ;
SendToServerEx( NickName) ;;
end ;
procedure UserInfo; // обновление донных о себе
var
i:word ;
begin
MyID:=ReadD( 18 ) ;
MyX:=ReadD( 2 ) ;
MyY:=ReadD( 6 ) ;
MyZ:=ReadD( 10 ) ;
i:=22 ;
ReadS( i) ;
i:=i+48 ;
MyMaxHP:=ReadD( i) ;
MyHP:=ReadD( i) ;
MyMaxMP:=ReadD( i) ; // чисто информативно
MyMP:=ReadD( i) ;
end ;
procedure StatusUpdate; // обновление данных о себе
var
i:integer ;
begin
for i:=0 to ReadD( 6 ) -1 do
case pck[i*8 +10 ] of
#$09 : MyHP:=ReadD( i*8 +14 ) ;
#$0A: MyMaxHP:=ReadD( i*8 +14 ) ;
#$0B: MyMP:=ReadD( i*8 +14 ) ;
#$0C: MyMaxMP:=ReadD( i*8 +14 ) ;
end ;
if MyMaxHP > 0 then HPlevelProcent:= Round ( ( MyMaxHP/100 ) *HPlevelProcent) ;
end ;
procedure DrinkBottle; // пьем бутылки и следим за их количеством
begin
if ( HPBottleCount > 0 ) and ( HPBottleObjID > 0 ) then
begin
UseItemObjID( HPBottleObjID) ;
UseItemID( HPBottleID) ;
dec ( HPBottleCount) ;
end ;
end ;
begin // Далее обработка входящих пакетов
if pck = '' then exit ;
if ( ConnectName = NickName) and FromServer then
case pck[1 ] of
#$32 : if ReadS( 22 ) = NickName then UserInfo;
#$18 : if MyID=ReadD( 2 ) then // StatusUpdate:h(ObjectID)d(Attributes)
begin
StatusUpdate;
if ( MyHP > 0 ) and ( MyHP < HPlevelProcent) then if Wait( time1, DrinkDelay) then DrinkBottle; // пьем бутылки с интервалом в 19 сек
if ( MyHP > 0 ) and ( MyHP > HPlevelProcent) then time1:=1 ;
end ;
#$11 : begin
InventoryCreate; // Инвентарь
if HPBottleID <> 0 then
begin
HPBottleObjID:= getinv( HPBottleID, 2 ,1 ) ;
HPBottleCount:= getinv( HPBottleID, 2 ,3 ) ;
end ;
end ;
#$21 : begin
InventoryUpdate;
if HPBottleID <> 0 then
begin
HPBottleObjID:= getinv( HPBottleID, 2 ,1 ) ;
HPBottleCount:= getinv( HPBottleID, 2 ,3 ) ;
end ;
end ;
end ;
end .
//nlobp: заключайте код в теги [ HIGHLIGHT = "delphi" ][ / HIGHLIGHT ] (самая правая решетка, параметр delphi)
Последний раз редактировалось NLObP, 09.02.2010 в 00:34 .
09.02.2010, 00:31
#628
Рыцарь
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
tiranosaur , заремь строку
PS: проверяйте код в редакторе скриптов пакетхака, строки с ошибками он покажет.
Последний раз редактировалось NLObP, 09.02.2010 в 00:36 .
За это сообщение NLObP нажился спасибкой от:
09.02.2010, 03:18
#629
Пользователь
Регистрация: 03.09.2009
Сообщений: 63
Сказал Спасибо: 19
Имеет 5 спасибок в 3 сообщенях
Дык закоменчена она а скрипт не хилит((( Я просто хочу написать автохил минимального размера. но что-то даже это пока не идет. Помочь может кто?
11.02.2010, 18:16
#630
Новичок
Регистрация: 23.01.2010
Сообщений: 7
Сказал Спасибо: 3
Имеет 0 спасибок в 0 сообщенях
Код:
begin
if FromServer then
begin
case pck[1] of
#$05 : //пакет 05=SpawnItem
begin
case pck[10] of //по смещению 10 находится ItemID
17, 57, 1341..1345: pck:=''; //дропаем стрелы, адену, деревянные и т.д. стрелы
end;
end;
#$16 : //пакет 16=DropItem
begin
case pck[6] of //по смещению 06 находится ItemID
17, 57, 1341..1345: pck:=''; //дропаем стрелы, адену, деревянные и т.д. стрелы
end;
end;
end;
end;
end.
в общем сегодня выдался день потестить скрипты.
у
NLObP , сразу заметил что итемид в пакетах дропитем и спавнитем перепутаны местами, но самая печаль, то что скрипт выдает ошибку
Could not convert variant of type (String) into type (Double).
скрипт
tiranosaur , вообще не блочил пакеты, хотя поидее он должен работать.
Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
Часовой пояс GMT +4, время: 03:35 .
vBulletin style designed by
MSC Team .
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод:
zCarot
Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!