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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 19.06.2009, 01:18   #1
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Работа с инвентарем в Грации

У кого какие идеи как модифицировать функцию работы с пакетом ItemList и ItemListUpdate
В свете того, что количество предметов стало 8 байт?
Взято из исходников L2Jserver:
Код:
Тип: 0x11 (ItemList)
Размер: 3205+2
Время прихода: 12:25:14:515
0002 h  ShowWindow: 0 (0x0000)
0004 h  ItemCount: 50 (0x0032)
              [Начало повторяющегося блока 1/50]
0006 h  ItemTypeID: 4 (0x0004)
0008 d  ObjectID: 271856921 (0x10343519)
0012 d  ItemID: Руда Духов ID:3031 (0x0BD7) (0x00000BD7)
0016 d  LocationSlot: 0 (0x00000000)
0020 q  Amount: 565
0028 h  ItemType2: 5 (0x0005)
0030 h  CustomType1: 0 (0x0000)
0032 h  isEquipped: 0 (0x0000)
0034 d  BodyPart: 0 (0x00000000)
0038 h  EnchantLevel: 0 (0x0000)
0040 h  CustType2: 0 (0x0000)
0042 h  AugmentationData: 0 (0x0000)
0044 h  AugmentationData: 0 (0x0000)
0046 d  Mana: -1 (0xFFFFFFFF)
0050 h  AttackElement: 65534 (0xFFFE)
0052 h  AttackElementPower: 0 (0x0000)
0054 h  FireDefElementPower: 0 (0x0000)
0056 h  WaterDefElementPower: 0 (0x0000)
0058 h  WindDefElementPower: 0 (0x0000)
0060 h  EarthDefElementPower: 0 (0x0000)
0062 h  HolyDefElementPower: 0 (0x0000)
0064 h  UnholyDefElementPower: 0 (0x0000)
0066 d  RemainingTime: -1 (0xFFFFFFFF)
              [Конец повторяющегося блока  1/50]
              [Начало повторяющегося блока 2/50]
0070 h  ItemTypeID: 4 (0x0004)
0072 d  ObjectID: 269019733 (0x1008EA55)
0076 d  ItemID: Зелье Возмездия ID:4680 (0x1248) (0x00001248)
0080 d  LocationSlot: 1 (0x00000001)
0084 q  Amount: 5
0092 h  ItemType2: 5 (0x0005)
0094 h  CustomType1: 0 (0x0000)
0096 h  isEquipped: 0 (0x0000)
0098 d  BodyPart: 0 (0x00000000)
0102 h  EnchantLevel: 0 (0x0000)
0104 h  CustType2: 0 (0x0000)
0106 h  AugmentationData: 0 (0x0000)
0108 h  AugmentationData: 0 (0x0000)
0110 d  Mana: -1 (0xFFFFFFFF)
0114 h  AttackElement: 65534 (0xFFFE)
0116 h  AttackElementPower: 0 (0x0000)
0118 h  FireDefElementPower: 0 (0x0000)
0120 h  WaterDefElementPower: 0 (0x0000)
0122 h  WindDefElementPower: 0 (0x0000)
0124 h  EarthDefElementPower: 0 (0x0000)
0126 h  HolyDefElementPower: 0 (0x0000)
0128 h  UnholyDefElementPower: 0 (0x0000)
0130 d  RemainingTime: -1 (0xFFFFFFFF)
              [Конец повторяющегося блока  2/50]

Теперь так не прокатывает:
delphi Код:
var   BaseItems:  array[1..maxitems, 1..12] of integer//все предметы в инвентаре procedure ItemList; {Создаем базу Items} var   i, j, k: integer;   ListCount: integer; begin   j:=4; //смещение для ListCount   ListCount:=ReadH(j); //количество итемов не должно превышать max!   for i:=1 to maxitems do   begin     if (i<=ListCount) then     begin       BaseItems[i,1]:=ReadH(j)//ItemType1       BaseItems[i,2]:=ReadD(j)//ObjectID       BaseItems[i,3]:=ReadD(j)//ItemID       BaseItems[i,4]:=ReadD(j)//LocationSlot       BaseItems[i,5]:=ReadD(j)//Count       BaseItems[i,6]:=ReadH(j)//ItemType2       BaseItems[i,7]:=ReadH(j)//CustomType1       BaseItems[i,8]:=ReadH(j)//isEquipped       BaseItems[i,9]:=ReadD(j)//BodyPart       BaseItems[i,10]:=ReadH(j); //EnchantLevel       BaseItems[i,11]:=ReadH(j); //CustType2       BaseItems[i,12]:=ReadD(j); //AugmentationID       inc(j,40);     end else       for k:=1 to 12 do BaseItems[i,k]:=0; // забиваем нулями   end; end; //.............................................................................. procedure InventoryUpdate; //пакет 21, Создает базу ObjectID по ItemID var   i, ii, j, k, ListCount, UpdType : integer;   ItemType1, ObjectID, ItemID, LocationSlot, Count, ItemType2, CustomType1,   isEquipped, BodyPart, EnchantLevel, CustType2, AugmentationID :integer;   additem : boolean; begin   additem:=true;   ListCount:=ReadH(2); //количество итемов   //debugmsg('ListCount='+inttostr(ListCount));   j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален   for i:=1 to ListCount do   begin     UpdType:=ReadH(j);     ItemType1:=ReadH(j);     ObjectID:=ReadD(j);     ItemID:=ReadD(j);     LocationSlot:=ReadD(j);     Count:=ReadD(j);     ItemType2:=ReadH(j);     CustomType1:=ReadH(j);     isEquipped:=ReadH(j);     BodyPart:=ReadD(j);     EnchantLevel:=ReadH(j);     CustType2:=ReadH(j);     AugmentationID:=ReadD(j);     case UpdType of       1: k:=0;         //добавлен новый предмет       2: k:=ObjectID; //изменен предмет в инвентаре       3: begin       //удален         for ii:=1 to maxitems do           if (BaseItems[ii,2]=ObjectID) then           begin             for k:=1 to 12 do BaseItems[ii,k]:=0;             break;           end;       end;     end;     for ii:=1 to maxitems do     begin       if (BaseItems[ii,2]=k) then       begin         BaseItems[ii,1]:=ItemType1;         //BaseItems[ii,2]:=ObjectID;         BaseItems[ii,3]:=ItemID;         BaseItems[ii,4]:=LocationSlot;         BaseItems[ii,5]:=Count;         BaseItems[ii,6]:=ItemType2;         BaseItems[ii,7]:=CustomType1;         BaseItems[ii,8]:=isEquipped;         BaseItems[ii,9]:=BodyPart;         BaseItems[ii,10]:=EnchantLevel;         BaseItems[ii,11]:=CustType2;         BaseItems[ii,12]:=AugmentationID;         break;       end;     end;     inc(j,38);   end; end; function GetItem(ID, FieldIn, FieldOut : integer): integer; {GetInv(по чему будем искать, номер того по чему будем искать, номер того что надо найти) где:   ID - искомый код;   FieldIn - по какому полю ищем;   FieldOut - какое поле возвращаем; 1=ItemType1; 2=ObjectID;3=ItemID;4=LocationSlot;5=Count;6=ItemType2;7=CustomType1; 8=isEquipped;9=BodyPart;10=EnchantLevel;11=CustType2;12=AugmentationID; ex1: GetInv(6408,2,1) - вернет ObjectID свадебного платья, если онное лежит в                         инвентаре, иначе вернет -1 ex2: GetInv(6408,2,8) - вернет уровень заточки первого попавшегося в инвентаре                         свадебного платья, если свадебного платья нет, то вернет -1 } var   i: integer; begin   for i:=1 to maxitems do     if (BaseItems[i,FieldIn]=ID) then begin       Result:=BaseItems[i,FieldOut];       exit;     end;   Result:=-1; end;

Добавлено через 1 минуту
Код:
11=ItemList:h(ShowWindow)h(ItemCount:Loop.01.0023)h(ItemTypeID)d(ObjectID)d(ItemID:Get.Func01)d(LocationSlot)q(Amount)h(ItemType2)h(CustomType1)h(isEquipped)d(BodyPart)h(EnchantLevel)h(CustType2)h(AugmentationData)h(AugmentationData)d(Mana)h(AttackElement)h(AttackElementPower)h(FireDefElementPower)h(WaterDefElementPower)h(WindDefElementPower)h(EarthDefElementPower)h(HolyDefElementPower)h(UnholyDefElementPower)d(RemainingTime)
Код:
21=InventoryUpdate:h(Count:Loop.1.0023)h(UpdateType:01-add,02-modify,03-remove)h(ItemType1)d(ObjectID)d(ItemID:Get.Func01)d(LocationSlot)q(Quantity)h(ItemType2)h(CustomType1)h(Equipped)d(BodyPart)h(EnchantLevel)h(CustType2)d(AugmentationBonus)d(Mana)h(AttackElement)h(AttackElementPower)h(FireDefElementPower)h(WaterDefElementPower)h(WindDefElementPower)h(EarthDefElementPower)h(HolyDefElementPower)h(UnholyDefElementPower)d(RemainingTime)
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни



Последний раз редактировалось NLObP, 19.06.2009 в 01:18. Причина: Добавлено сообщение
NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился спасибкой от:
Старый 19.06.2009, 01:20   #2
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

дописать readq writeq. int64 хули..
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
Старый 19.06.2009, 01:24   #3
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

alexteam, а массив предметов какой делать?
Код:
BaseItems:  array[1..maxitems, 1..12] of integer;
Добавлено через 1 минуту
Цитата:
Сообщение от alexteam Посмотреть сообщение
дописать readq writeq. int64
ReadF сейчас есть, это не оно?
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни



Последний раз редактировалось NLObP, 19.06.2009 в 01:25. Причина: Добавлено сообщение
NLObP вне форума   Ответить с цитированием
Старый 19.06.2009, 12:34   #4
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

эм... в фс нет int64... тяжкий случай...
прийдеться разбор, хранение и управление инвентарем реализовывать в плагине...
и управлять онным с скрипта.
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
Старый 19.06.2009, 13:27   #5
Местный
 
Регистрация: 05.11.2008
Сообщений: 168
Сказал Спасибо: 35
Имеет 139 спасибок в 66 сообщенях
Fer123 пока неопределено
По умолчанию

Может Double или variant. По крайней мере у меня с вариантом получилось. Присвоил и вывел максимальное число int64 9223372036854775807

Последний раз редактировалось Fer123, 19.06.2009 в 13:45.
Fer123 вне форума   Ответить с цитированием
Старый 19.06.2009, 14:29   #6
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Fer123, для количества отдельный массив завести или весь массив делать double? Как лучше?

Добавлено через 2 минуты
Цитата:
Сообщение от alexteam Посмотреть сообщение
прийдеться разбор, хранение и управление инвентарем реализовывать в плагине...
и управлять онным с скрипта.
Мне кажеться надо уже на плагины совсем переходить, без скриптов, всё время какие-то ограничения.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни



Последний раз редактировалось NLObP, 19.06.2009 в 14:29. Причина: Добавлено сообщение
NLObP вне форума   Ответить с цитированием
Старый 19.06.2009, 14:43   #7
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

Fer123, Double = 32bit. с ним врядли чтото получится если учесть что у нас 64битная переменная.


NLObP, в принципе так и должно быть.
плагин должен расширять скриптовый движек и управляться с скрипта
(под управлением я понимаю задания индефикаторов/офсетов для пакетов на которые реагирует плагин, его настройка, запуск и останов такового.)
в принципе ничего ОСОБОАРХИсложного в плагинах вообще нет.
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
Старый 19.06.2009, 14:45   #8
Местный
 
Регистрация: 05.11.2008
Сообщений: 168
Сказал Спасибо: 35
Имеет 139 спасибок в 66 сообщенях
Fer123 пока неопределено
По умолчанию

NLObP, лучше весь массив variant а не double
alexteam, а что на счет variant у меня ведь получилось присвоить max int64?
Fer123 вне форума   Ответить с цитированием
Старый 19.06.2009, 14:48   #9
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

Fer123, варианту все равно. вариант = любой тип. его вообще можно использовать везде %)
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
Старый 19.06.2009, 14:50   #10
Местный
 
Регистрация: 05.11.2008
Сообщений: 168
Сказал Спасибо: 35
Имеет 139 спасибок в 66 сообщенях
Fer123 пока неопределено
По умолчанию

Ну так получается нет проблем и не надо плугин писать...
+ если variant = любой тип, то можно будет без проблем вывести например в форму без всяких inttostr()...

Последний раз редактировалось Fer123, 19.06.2009 в 14:57.
Fer123 вне форума   Ответить с цитированием
Ответ

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



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

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


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

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

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