Скриптинг Форум посвещенный созданию скриптов для L2PacketHack
30.12.2010, 10:04
#11
Местный
Регистрация: 23.11.2009
Сообщений: 574
Сказал Спасибо: 134
Имеет 117 спасибок в 82 сообщенях
Гдет ж был скрипт под ПХ через создание базы инвентаря...
На форуме поиск не помог...
Вот он (Из ПХ своего взял):
delphi Код:
Const
IDofItem='58' ;
Name='Nickers' ;
Max =80 ;
var
ItemBase : array[1 ..4 ,1 ..max ] of integer ; //ItemOID, ItemID, Kol-vo, ItemLvl
timer:TTimer; IDindex:boolean ;
p,p1,p2,x,y,z,i,f:integer ;
procedure Init; //Вызывается при включении скрипта
begin
timer:=TTimer.Create ( nil ) ;
timer.OnTimer :=@OnTimer;
timer.enabled :=false ;
timer.interval :=1000 ; //время задержки
buf:=#$0F;
SendToServerEx( Name) ;
end ;
procedure CreateItemBase;
var
i, j, ListCount: integer ;
begin
for i:=1 to max do begin
//очищаем масив
ItemBase[1 ,i]:=0 ; //OID
ItemBase[2 ,i]:=0 ; //ID
ItemBase[3 ,i]:=0 ; //kol-vo
ItemBase[4 ,i]:=0 ; //lvl
end ;
j:=4 ;
ListCount:=ReadH( j) ;
j:=8 ;
for i:=1 to ListCount do begin
itemBase[1 ,i]:=ReadD( j) ; //OID
itemBase[2 ,i]:=ReadD( j) ; //ItemID
itemBase[3 ,i]:=ReadD( j) ; //кол-во
inc ( j,10 ) ;
itemBase[4 ,i]:=ReadH( j) ;//EnchantLevel
inc ( j,12 ) ;
end ;
end ;
//......................................
//******************************************************************************
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
var
i, ii, j, OID, ID, Count, ListCount, UpdType, lvl: integer ;
add : boolean ;
begin
add:=false ;
ListCount:=ReadH( 2 ) ;
j:=4 ;
for ii:=1 to ListCount do begin
add:=false ; //Ели додумался изза чего не добавляет сразу несколько предметов в базу
UpdType:=ReadH( j) ;
ReadH( j) ; //ItemType1
OID:=ReadD( j) ; //ObjectID
ID:=ReadD( j) ; //ItemID
Count:=ReadD( j) ; //кол-во
inc ( j,10 ) ;
lvl:=ReadH( j) ;
case UpdType of
1 : begin
for i:=1 to max do begin
if ( ItemBase[1 ,i]=0 ) and ( add=false ) then begin
ItemBase[1 ,i]:=OID;
ItemBase[2 ,i]:=ID;
ItemBase[3 ,i]:=Count;
ItemBase[4 ,i]:=lvl;
add:=true ;
end ;
end ;
end ;
2 : begin
for i:=1 to max do begin
if ItemBase[1 ,i]=OID then begin
ItemBase[3 ,i]:=Count;
ItemBase[4 ,i]:=lvl;
end ;
end ;
end ;
3 : begin
for i:=1 to max do begin
if ItemBase[1 ,i]=OID then begin
ItemBase[1 ,i]:=0 ;
ItemBase[2 ,i]:=0 ;
ItemBase[3 ,i]:=0 ;
ItemBase[4 ,i]:=0 ;
end ;
end ;
end ;
end ;
inc ( j,10 ) ;
end ;
end ;
function GetItem( ID, FieldIn, FieldOut : integer ) : integer ;
var
i : integer ;
begin
for i:=1 to max do
if ItemBase[FieldIn,i]=ID then begin
result:=ItemBase[FieldOut,i]; // itemOID
exit ;
end ;
result:=0 ;
end ;
procedure OnTimer( Sender: TObject ) ;
begin
if GetItem( 57 ,2 ,3 ) >2000000000 then //57 - ID Аденки...
begin
buf:= Сюда пакетег) ( На Юз скилла)
SendToServer;
end ;
end ;
begin
if FromServer and ( ConnectName=Name) then
case pck[1 ] of
//......................................
//Пакет ItemList
#$1B: CreateItemBase; //создание базы предметов
//......................................
#$27 : InventoryUpdate; //Обновление базы
end ; //end от case!!!
end .
Добавлено через 24 минуты
Вроде так... Ток нужен пакет на юз скилла Клиент->Сервер Чтобы отправную часть доделать... (Процедура ОнТаймер)
Последний раз редактировалось Nickers, 30.12.2010 в 10:04 .
Причина: Добавлено сообщение
За это сообщение Nickers нажился спасибкой от:
30.12.2010, 11:06
#12
Местный
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
да нахрен тут массив то, если одна адена нужна)
__________________
Н а ч а л о .
30.12.2010, 13:58
#13
Местный
Регистрация: 23.11.2009
Сообщений: 574
Сказал Спасибо: 134
Имеет 117 спасибок в 82 сообщенях
Хз)) Можно облегчить)) Но мне влом))
Прост процедуры Создания и Обновления ставим с условием занесения "Если
ID =
57 "(Если кусок пакета принадлежит Аденке) и чтоб заносилось не в Матрицу, а просто в массив из 2х-3х переменных(Ну там
ID ,
OID и
Count )... Я могу сделать, но влом))
Перебор
i Через
For или
Until прыжок = отступу байтов (От
ID 1го итема в пакете до
ID 2го и т.д.) И в цикле проверка на if ReadD(i)==ID, Если да то заносим данные
delphi Код:
//Пример Записи в 1о мерный массив:
//Если Нашли Адену, считываем все Данные с нее... j вычисляется из i (-4 наверн)...
Adena[1 ]:=Read ( j) ;
inc ( j,4 ) ;
Adena[2 ]:=Read ( j) ;
inc ( j,4 ) ;
Adena[3 ]:=Read ( j) ;
Последний раз редактировалось Nickers, 30.12.2010 в 14:15 .
30.12.2010, 14:11
#14
Местный
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
нече не понял о чем ты, нормальные люди делают так:
delphi Код:
for i:=0 to ReadH( 4 ) -1 do
if ReadD( i*offset+12 ) =57 then
begin
//OIDadena:=ReadD(i*offset+8);
Countadena:=ReadD( i*offset+16 ) ;
exit ;
end ;
где offset - размер блока для вещи, для ил щас скажу скока...
36 офсет для ИЛа
__________________
Н а ч а л о .
Последний раз редактировалось supernewbie, 30.12.2010 в 14:49 .
30.12.2010, 14:26
#15
Местный
Регистрация: 23.11.2009
Сообщений: 574
Сказал Спасибо: 134
Имеет 117 спасибок в 82 сообщенях
Ну дык я примерно это и описывал)) Только у меня не переменные а Массив переменных Adena[1] это ID, 2 - OID, 3- Count)) Офф сет у меня прост через Inc'и =)
Массив то как раз и не двумерный, потому что адена тока одна))
Весь массив принадлежит адене и ее хар-кам...
Последний раз редактировалось Nickers, 30.12.2010 в 14:38 .
30.12.2010, 14:49
#16
Местный
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
какие тут впринципе нужны характеристики кроме количества, хм
__________________
Н а ч а л о .
31.12.2010, 02:40
#17
Местный
Регистрация: 11.06.2010
Сообщений: 644
Сказал Спасибо: 119
Имеет 85 спасибок в 77 сообщенях
Nickers , я бы с ним не спорил
__________________
31.12.2010, 16:05
#18
Местный
Регистрация: 23.11.2009
Сообщений: 574
Сказал Спасибо: 134
Имеет 117 спасибок в 82 сообщенях
Цитата:
Ну дык я примерно это и описывал)) Только у меня не переменные а Массив переменных Adena[1] это ID, 2 - OID, 3- Count)) Офф сет у меня прост через Inc'и =)
Я и не спорил, что мой вариант лучше или что-то типо того...
Прост объяснил то, как у меня было (В голове, а он не понял)
Прост и так нормально...
(Мне нравятся массивы =Р и когда подробная инфа тоже =РРРР)
Последний раз редактировалось Nickers, 31.12.2010 в 16:07 .
20.01.2012, 18:47
#19
Пользователь
Регистрация: 18.09.2011
Сообщений: 88
Сказал Спасибо: 59
Имеет 2 спасибок в 2 сообщенях
Да тут всё намного проще)заходиш в пх жмёш вкладку просмотр,юзаеш этот скил В Л2и он появиться логе в пх там будет requestmagicskilluse.жмёш правой кнопкой по нему будет отправить в посылки,потом во вкладке посылка"жмёш на часики и чтоб отправлял каждые 5 ссек и готово)должен понять что я написал хД
Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
Часовой пояс GMT +4, время: 17:08 .
vBulletin style designed by
MSC Team .
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод:
zCarot
Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!