Форум Властелин Колец Онлайн™  

Вернуться   Форум Властелин Колец Онлайн™ > База знаний > Плагины (LUA скрипты)


Ответ
 
Опции темы Опции просмотра
  #1  
Старый 21.08.2013, 13:37
Аватар для PulseDiver
PulseDiver PulseDiver вне форума
Рыцарь Гондора
За отличную работу в преддверии Рохана За отличную работу в преддверии Хельмовой Пади Переживший конец света 
 
Регистрация: 15.06.2009
Адрес: Калининград
Сообщений: 10,445
Post Как линковать скалируемые предметы в чат?

Начну сначала.
В базе клиента есть предметы, они имеют свой ID.
LUA позволяет линковать в чат данные предметы (аналог игрового Ctrl ПКМ) - это можно увидеть, например, в плагине Справочная.

Также в базе клиента есть предметы, которые имеют скалируемые характеристики, т.е статы, величина которых зависит от уровня персонажа.

Раньше почти весь рейдовый лут имел постоянный уровень. Сейчас все меняется.
На данный момент особое внимание привлекает лут из инстансов Update 9.
Все предметы из кластеров Дол Гулдура и Эребора имеют скалируемые характеристики, и в базе клиента они хранятся со статами 75 лвл.

Пример:
1. Так выглядит предмет в базе клиента (статы примерно 75 лвл), т.е таким мы можем его линковать в чаты из плагина:


2. Так выглядит предмет в сумке игрока 85 лвл, получившего его, т.е таким мы можем его линковать в чаты, только если владеем им:


Как видим, теперь просто так не линкануть предметы в чат из базы клиента на каповый лвл (на данный момент - 85 лвл)

Итак, что мы имеем.
1. Тема на глобал форуме - [Ссылки могут видеть только зарегистрированные пользователи. ]
тут обсуждается парсинг предметов из чата с помощью лотро-LUA
даны основные выкладки по алгоритму дешифрования raw данных из строки чата.

2. LUA-инструменты для этого:
[Ссылки могут видеть только зарегистрированные пользователи. ]

Что нужно нам?
Нам нужны программисты LUA, да и любой желающий, кто смыслит в этом, помочь написать код обратного преобразования линка в чат предмета на основе известного ID этого предмета с учетого уровня (на данный момент нужен 85 лвл).

Для чего все это нужно?
Это нужно, как минимум, по трем причинам - мне, для составления web-лутлиста (многие хотят видеть лутлист на родном языке и сразу же после установки апдейта), Ворожею для функционала игрового плагина, для наших разведчиков на глобал сервере бетатестеров Bullroarer. Вы же хотите иметь информацию о новых предметах сразу горяченькими для кап лвл?!
Мб еще пригодится кому.

Обсуждаем тут.
Заранее спасибо всем за помощь.
__________________
Мирквуд - Эсельсиор | Brandywine - Vinya Mar, Evos | Arkenstone - Expendables (creeps)
[Ссылки могут видеть только зарегистрированные пользователи. ]
Ответить с цитированием
  #2  
Старый 21.08.2013, 13:42
Аватар для Osmiya
Osmiya Osmiya вне форума
Страж Лориена
Переживший конец света 
 
Регистрация: 21.05.2013
Адрес: Мирквуд
Сообщений: 3,597
Post Как линковать скалируемые предметы в чат?

Может я излишне прямолинейна, но что мешает тупо собрать скрины лута на 85 лвл с параметрами?
__________________
Встретимся в Нарбарре
Ответить с цитированием
  #3  
Старый 21.08.2013, 13:52
Аватар для PulseDiver
PulseDiver PulseDiver вне форума
Рыцарь Гондора
За отличную работу в преддверии Рохана За отличную работу в преддверии Хельмовой Пади Переживший конец света 
 
Регистрация: 15.06.2009
Адрес: Калининград
Сообщений: 10,445
Post Как линковать скалируемые предметы в чат?

Цитата:
Сообщение от Osmiya Посмотреть сообщение
Может я излишне прямолинейна, но что мешает тупо собрать скрины лута на 85 лвл с параметрами?
собрать скрины - не проблема
U9 - состоит из 8 инстансов, в каждом в среднем по 10-12 предметов, в рейде - больше.

грядет U10
там будут кластеры ТА, ОД и Эребора, предметов будет в разы больше.
полностью руссифицировать лутлист займет не меньше месяца-двух.
поверьте, даже просто наделать скриншотиков занимает время.
это касается web-версии.

плагин Справочная лишается части вкусного функционала

Добавлено через 3 минуты

информация о уровне предмета зашита в строке передачи. нужно ее просто немного подправить, чтобы получить предмет на 85 лвл.

да, и просьба не флудить, тема специфичная и создана не в Таверне.
__________________
Мирквуд - Эсельсиор | Brandywine - Vinya Mar, Evos | Arkenstone - Expendables (creeps)
[Ссылки могут видеть только зарегистрированные пользователи. ]
Ответить с цитированием
  #4  
Старый 21.08.2013, 15:32
Аватар для PulseDiver
PulseDiver PulseDiver вне форума
Рыцарь Гондора
За отличную работу в преддверии Рохана За отличную работу в преддверии Хельмовой Пади Переживший конец света 
 
Регистрация: 15.06.2009
Адрес: Калининград
Сообщений: 10,445
Post Как линковать скалируемые предметы в чат?

немного чужих мыслей, общий перевод алгоритма с глобала:

Цитата:
Берется utf и преобразуется в массив байтов, этот массив преобразуется в hex с помощью суммы и умножения 4-х соседних байтов.
Из hex вытягивается данные (уровни, имена и пр.).

К этому нужно всего лишь прикрутить изменение нужных значений (например, уровня), преобразовать обратно в utf и запихнуть в ярылк.
При этом хорошо бы понять, какие данные действительно нужны для работы ярлыка (т.е. что можно занулить).
описание hex-кодов после преобразования ([Ссылки могут видеть только зарегистрированные пользователи. ]

Код:

First, on all items, whether LIs or not, we find (in order):
- 8 bytes: instance item ID
- 4 bytes: generic item ID
If the item is a LI:
- 1 byte indicating whether the item has a custom name (value = 1 if custom name, 0 otherwise)
- if item has a custom name:
- 1 byte indicating the number of characters in the name
- the name of the item as a sequence of characters in UTF-16 (2 bytes per character)
- if item does not have a custom name:
- 2*4 bytes, I assume at least one ID to a localizable resource
- 4 bytes: unknown meaning, never seen anything but a value of 1
- 2 bytes: unknown meaning, never seen anything but a value of 1
- 4 bytes: the ID to a LI title
- 1 byte: unknown/unused
- 1 byte: number of legacies
- n legacies, for each:
- 4 bytes: ID of the legacy
- 4 bytes: rank of the legacy
- 1 byte: unknown/unused
- 1 byte: number of relics
- n relics, for each:
- 4 bytes: ID the relic
- 4 bytes: type of the relic (value of 1 to 4 for gem/setting/rune/crafted, didn't write down which is which)
- 4 bytes: number of additional stats (stats of 2h LIs)
- n * 4 bytes: IDs to stats
- 4 bytes: legendary points spent
- 4 bytes: legendary points left
- 4 bytes: DPS rank if a weapon, or 0
- 4 bytes: Rank of the primary LI legacy (Tactical Damage Rating, Tactical Healing Rating, Shield Use, etc) or 0 if a weapon
- 4 bytes: ID to the primary LI legacy or 0 if a weapon
- 4 bytes: 0x100010EF always
On both regular items and LIs:
- 1 byte: unknown/unused
- 1 byte: number of element in the top level array as described in my previous posts
(...)
Possible fields in the secondary array and their meaning:
- 0x10000E20 : "Crafted by" data, followed with:
- 1 byte: unknown/unused
- 1 byte: number of characters in the name of crafter
- the name of the item as a sequence of characters in UTF-16 (2 bytes per character)
- 4 bytes: unknown, always seem to be the same (0 ? 1 ?)
- 2 bytes: unknown, always seem to be the same (0 ? 1 ?)
- 0x10000884 : Crafting name of the item, same structure as above
- 0x10000AC1 8 bytes : "bound" ID of the player to which the item is bound, or a special ID for bound to account
- 0x10001D5F 4 bytes : Level of the LI (value between 1 - 70)
- 0x100031A4 4 bytes : rank of the primary LI legacy (redundant with prior info)
- 0x100026BC: list of legacies (on unbound identified items, apparently)
- 4 bytes: number of legacies
- n * 2*4 bytes: 0x100026BD ID of legacy (redundant with prior info)
- 0x100000C4 4 bytes : item level as displayed to players (eg: 85)
- 0x10000669 4 bytes : the 'real' item level (currently up to 110 or so)
- 0x10004996 4 bytes : number of upgrades (crystals)
- 0x1000132C 4 bytes : durability (as in: current value, not the max)
- 0x10000835 4 bytes : worth of an item in coppers
- 0x10000E7B 4 bytes : quantity (for stacks)
- 0x0000034E 4 bytes : storage info (haven't really paid much attention to specifics, possible to identify bag slots)
- 0x10001042 4 bytes : second value of dps range in floating point (IEEE 754). First value can seemingly be computed as 3/5 of that (and of course, average hit = 4/5, so DPS = value * 4/5 / weapon swing delay)
- 0x10000ACD 4 bytes : unknown
- 0x100038A7 1 byte : unknown, always seems 0
- 0x10000AC2 1 byte : unknown, always seems 0
__________________
Мирквуд - Эсельсиор | Brandywine - Vinya Mar, Evos | Arkenstone - Expendables (creeps)
[Ссылки могут видеть только зарегистрированные пользователи. ]
Ответить с цитированием
  #5  
Старый 24.08.2013, 23:03
Аватар для Equendil
Equendil Equendil вне форума
Путник
Переживший конец света 
 
Регистрация: 23.05.2013
Сообщений: 7
Post Как линковать скалируемые предметы в чат?

Hello folks, I'll reply in English as I can't write in Russian and automatic translation isn't exactly great. Sorry about that.

The basic process would be:

1) Encode an item as described in the previous post and associated thread, with the following data:
- its generic ID
- a fake instance ID (can't be completely null, I've been using 0x0316000300000000 so far, but that includes an identifier (0x16?) to the snowbourn server, which would have to be changed for your server, I've not built a list of those yet)
- Either its level (eg: 85), or its 'real' level

2) Compress that data (with zlib). There are no zlib compression implementations in pure lua out there however. I wrote a crude implementation for my LIP plugin, it does the trick, but I haven't released it yet.

3) Add the size of the resulting zlib data (four bytes) before the compressed data

4) Encode it all using Turbine's UNICODE scheme. I wrote some code to do that and it's available on lotro-interface (TurbineUTF8Binary.Encode() ) [Ссылки могут видеть только зарегистрированные пользователи. ]

5) Encapsulate the encoded data within "<ExamineItemInstance:ItemInfo:[data]>name<\ExamineItemInstance>"

6) Set it to an alias quickslot to output in a channel (eg: "/say <ExamineItemInstance:ItemInfo:[data]>name<\ExamineItemInstance>". Can't output anything directly with lua, someone has to click a quickslot.

I have *no* idea however if it would work as wanted with scalable items, the level info might well be ignored entirely and the items still display at level 75 or whatever is their base level.

Anyway, it's quite a complex hack, I wrote all the code necessary to link Legendary Items and that works, but I haven't tried scalable items (legendary items are not level scaled). I'll give it a go, but I'm very busy at the moment, so it'll take some time until I can work on pet projects again.
Ответить с цитированием
  #6  
Старый 24.08.2013, 23:22
Аватар для PulseDiver
PulseDiver PulseDiver вне форума
Рыцарь Гондора
За отличную работу в преддверии Рохана За отличную работу в преддверии Хельмовой Пади Переживший конец света 
 
Регистрация: 15.06.2009
Адрес: Калининград
Сообщений: 10,445
Post Как линковать скалируемые предметы в чат?

Thanks, Equendil
__________________
Мирквуд - Эсельсиор | Brandywine - Vinya Mar, Evos | Arkenstone - Expendables (creeps)
[Ссылки могут видеть только зарегистрированные пользователи. ]
Ответить с цитированием
  #7  
Старый 24.08.2013, 23:28
Аватар для chirick86
chirick86 chirick86 вне форума
Щит Миробеля
За создание журнала Переживший конец света 
 
Регистрация: 17.08.2011
Адрес: Санкт-Петербург
Сообщений: 1,694
Post Как линковать скалируемые предметы в чат?

Ого. Прям гордость берет когда такие люди заглядывают =)
__________________
Raert - ON, Ruert - ON
Anor
Ответить с цитированием
  #8  
Старый 25.08.2013, 00:07
Аватар для Pirskap
Pirskap Pirskap вне форума
Гроза Ангмара
Переживший конец света 
 
Регистрация: 12.09.2009
Сообщений: 542
Post Как линковать скалируемые предметы в чат?

Thank you, Equendil.

[Ссылки могут видеть только зарегистрированные пользователи. ]

Плагин для использования библиотеки Equendil'а.
Линковать нужно в простой чат.
Формирование в обратную сторону сделаю позже (может быть). Можете сами заняться
Ответить с цитированием
  #9  
Старый 25.08.2013, 11:06
Аватар для bopozhej
bopozhej bopozhej вне форума
Щит Миробеля
За помощь локализаторам За отличную работу в преддверии Хельмовой Пади Переживший конец света 
 
Регистрация: 23.01.2009
Адрес: Гдетотамское царство
Сообщений: 1,882
Post Как линковать скалируемые предметы в чат?

Круто! Спасиб за инфу!
Формирование в обратную сторону сделаю позже (может быть). Можете сами заняться
Нуу, лично я с этим буду очень долго ковыряться - с кодированием/раскодированием как и сжатием/раскрытием я не работал ещё ни разу .
Ответить с цитированием
  #10  
Старый 25.08.2013, 11:50
Аватар для Pirskap
Pirskap Pirskap вне форума
Гроза Ангмара
Переживший конец света 
 
Регистрация: 12.09.2009
Сообщений: 542
Post Как линковать скалируемые предметы в чат?

Цитата:
Сообщение от bopozhej Посмотреть сообщение
Круто! Спасиб за инфу!
Формирование в обратную сторону сделаю позже (может быть). Можете сами заняться
Нуу, лично я с этим буду очень долго ковыряться - с кодированием/раскодированием как и сжатием/раскрытием я не работал ещё ни разу .
Как в справочной сделано линкование вещей?
Ответить с цитированием
Ответ

Закладки


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

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

Быстрый переход


Текущее время: 05:38. Часовой пояс GMT +3.