Вернуться   CoderX :: Forums > Lineage II > L2PacketHack > Разработка
Войти через OpenID

Разработка Раздел для совместной разработки/доработки программы

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 18.08.2008, 03:42   #1
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию Кусочек l2phx4

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

Итак что же имеется на данный момент:
* только вкладка Просмотр, на первой есть только не связанные с кодом элементы управления, так что туда даже не суйтесь...
* на этой вкладке в верхней панеле работает только кнопка загрузки лога пакетов и меню выбора скрипта разбора пакета
* пока нет расцветки пакетов и не работает фильтр

Вобщем работает собсно только загрузка лога от предыдущих версий пакетхака, отображение списка пакетов и разбор выбранного пакета.

Ключевая особенность нового разборщика это разбор скриптом, тоесть на смену packets.ini пришли скрипты, за щёт этого немного подрос размер файла, но зато сильно возросли возможности разбора.

Скрипт разбора пишется на Паскале с помощью следующих функций:
delphi Код:
// задаёт имя пакета procedure SetName(const text: string);  // возвращает и выводит в поле разбора число типа Byte function b(const name: string): Byte;  // возвращает и выводит в поле разбора число типа Cardinal function d(const name: string): Cardinal;  // возвращает и выводит в поле разбора число типа Integer function i(const name: string): Integer;  // возвращает и выводит в поле разбора число типа Word function h(const name: string): Word;  // возвращает и выводит в поле разбора число типа Double function f(const name: string): Double;  // возвращает и выводит в поле разбора число типа Int64 function i64(const name: string): Int64;  // возвращает и выводит в поле разбора в шестнадцатиричном виде число типа Byte function bh(const name: string): Byte;  // возвращает и выводит в поле разбора в шестнадцатиричном виде число типа Cardinal function dh(const name: string): Cardinal;  // возвращает и выводит в поле разбора в шестнадцатиричном виде число типа Integer function ih(const name: string): Integer;  // возвращает и выводит в поле разбора в шестнадцатиричном виде число типа Word function hh(const name: string): Word;  // возвращает и выводит в поле разбора Hex строку массива байт function ba(const name: string; const size: Integer): string;  // возвращает и выводит в поле разбора число типа Cardinal  // и добавляет соответствующую результату строку из файла filename function df(const name, filename: string): Cardinal;  // возвращает и выводит в поле разбора Unicode строку function s(const name: string): string;  // пропускает заданное число байт в пакете function z(const size: Integer): Integer;

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

Кстати одно замечание, для формирования списка пакетов каждый пакет прогоняется через скрипт без вывода в поле разбора, за счёт этого список имён формируется не мгновенно, у меня лог весом в мегабайт разбирается гдето за 3 секунды.


История преверсий:
0.3:
+ раскраска пакетов с возможностью менять цвета
+ при перемещении курсора в поле разбора выделяется кусок пакета соответствующий этой строке

0.2:
! ещё увеличена скорость формирования списка пакетов
+ работают фильтры, правда они пока не сохраняются

0.1:
+ кнопочка перезагрузки скрипта парсинга
+ увеличена скорость формирования списка пакетов
+ добавлено завершение разбора пакета при достижении его конца
! увеличил поле Description с 15 до 20 символов
Миниатюры
Нажмите на изображение для увеличения
Название: screen2.png
Просмотров: 2091
Размер:	92.0 Кб
ID:	112  
Вложения
Тип файла: rar l2phx4_viewer_0.3.rar (586.8 Кб, 526 просмотров)
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился 5 спасибками от:
Старый 18.08.2008, 05:10   #2
Местный
 
Регистрация: 11.10.2007
Сообщений: 144
Сказал Спасибо: 44
Имеет 7 спасибок в 7 сообщенях
Amorality
По умолчанию

Впечатляет
Опен Сорс проект ?
Amorality вне форума   Ответить с цитированием
Старый 18.08.2008, 05:22   #3
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Не хватает функции разделитель для повторов
[Начало блока 1/10]
[Конец блока 1/10]
Строку ошибки в pakets.ini (по старому) пишет только при загрузке программы. Если потом править инишку, то просто окошко с ошибкой и парсинг больше не возможен, перезагружать программу надо.

Если Description длинный то сбивает всю красоту.
На цикле, что-то колбасит, 'Count' повторяет в каждой итерации и по этому глючит.
Код:
    $13: begin
      SetName('CharSelectInfo')
      for for1:=1 to d('Count') do begin
        s('Name');
        dh('CharID');
        s('LoginName');
        dh('SessionID');
        dh('ClanID');
        d('d');
        d('Sex');
        d('Race');
        df('ClassID',cid_fl);
        d('active');
        d('X');
        d('Y');
        d('Z');
        f('cur_HP');
        f('cur_MP');
        d('SP');
        d('Exp');
        d('Level');
        d('Karma');
        d('d');
        d('d');
        d('d');
        d('d');
        d('d');
        d('d');
        d('d');
        d('d');
        d('d');
        d('Under');
        d('Rear');
        d('Lear');
        d('Neck');
        d('RFinger');
        d('LFinger');
        d('Head');
        d('RHand');
        d('LHand');
        d('Gloves');
        d('Chest');
        d('Legs');
        d('Feet');
        d('Back');
        d('LRHand');
        d('Hair');
        d('Under');
        d('Rear');
        d('Lear');
        d('Neck');
        d('RFingerc');
        d('LFingerc');
        d('Head');
        d('RHand');
        d('LHand');
        d('Gloves');
        d('Chest');
        d('Legs');
        d('Feet');
        d('Back');
        d('LRHand');
        d('Hair');
        d('HairStyle');
        d('HairColor');
        d('Face');
        f('Max_HP');
        f('Max_MP');
        d('DELdays');
        df('ClassID',cid_fl);
        d('autSel');
        b('EnchEffect');
      end;
    end;
Добавлено через 46 секунд
Цитата:
Сообщение от Amorality Посмотреть сообщение
Опен Сорс проект ?
Врядли. =)

Буквы на иконках может белыми сделать? Плохо видно.
Еще нолик добавь в смещении байтов в дампе пакетов, красивее смотрится:
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни



Последний раз редактировалось NLObP, 18.08.2008 в 05:35. Причина: Добавлено сообщение
NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился спасибкой от:
Старый 18.08.2008, 06:20   #4
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

NLObP, бляя в этом скриптовом движке порог цикла вычисляется при каждой итерации, так что чтобы цаклы норм работали вместо
for for1:=1 to d('Count') do begin
придётся писать
for for1:=d('Count') downto 1 do begin

остальные замеченные тобой недороботки устранил и обновил файл...

Добавлено через 40 секунд
Цитата:
Сообщение от Amorality Посмотреть сообщение
Впечатляет
Опен Сорс проект ?
посмотрим ближе к релизу что получиться
__________________
Я здесь практически не появляюсь!, Skype - ikskor

Последний раз редактировалось xkor, 18.08.2008 в 06:20. Причина: Добавлено сообщение
xkor вне форума   Ответить с цитированием
Старый 18.08.2008, 13:07   #5
Гость
 
Сообщений: n/a
Подмигивание

а почему не слепить
function b(const name: string): Byte;
с
function bh(const name: string): Byte;
вот так
function b(const name: string,hex: bool = false): Byte;
  Ответить с цитированием
Старый 18.08.2008, 16:29   #6
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Jes, потому что скриптовый движек не поддерживает параметры по умолчанию сцуко.., эт во первых, а во вторых так короче)
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился 2 спасибками от:
Старый 18.08.2008, 21:54   #7
Гость
 
Сообщений: n/a
По умолчанию

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

так разве не проще?
  Ответить с цитированием
Старый 18.08.2008, 22:49   #8
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

предлагаеш вшивать разбор в прогамму чтобы юзеры менять не могли?
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 18.08.2008, 23:23   #9
Гость
 
Сообщений: n/a
Стрелка

почему "пусть не меняют"?
да пусть меняют - просто сделать загрузку из файла
а стандарт файла пусть будет аля на базе общепринятого
или если уже начал изобретать новый велосипед - то придумай лутший
на базе мого и существующего и еще каких нить

пс: мой позволяет именование полей,дефолты полей,множественное вложение итераций и свитчи для форматов пакетов также масивы и выравнивания и вариантное использование внутренного интерфейса
  Ответить с цитированием
Старый 18.08.2008, 23:36   #10
Гость
 
Сообщений: n/a
По умолчанию

свитч
g.Add(wxT("c{cmd=0x45}d{count=#}(d{type=1:1,2:2,3: 3,4:3,5:3,-1:3}d{slot}d{Id}(l:1d{=1}d{=-1}ddww l:2d{level}cd{=1} l:3d{=1}))"),wxT("s45_ShortCutInit"));
1:1,2:2,3:3,4:3,5:3,-1:3 = значение:метка перехода
l:3 метка номер 3
вложеный цикл
g.Add(wxT("c{cmd=0xd0}d{listId}d{page}d{finished}d {onpage=0x28}d{entrycount=#}(d{EntryId}ddc{=1}w{pr odcount=#}w{itemcount=#<}(w{pItemId}dw{ptype2}d{pc ount}w{penchant}dd)(w{iItemId}w{itype2}d{icount}w{ ienchant}dd))"),wxT("sd0_MultiSellList"));
prodcount=# счетчик циклов
  Ответить с цитированием
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Разработка



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

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


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

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

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