Перейти к контенту

Язык Lua. Общие вопросы программирования


Malandrinus

Рекомендуемые сообщения

xStream, спасибо за скрипты. Однако, не могу не отметить ряд неточностей в скрипте разбора нет-пакета.

1. class "net_alife_item_weapon_shotgun"

ammo_ids - не u8. Это комплексный тип, представляющий собой таблицу из однобайтных значений. Таблице предшествует байт, в котором хранится размер этой таблицы. В терминах acdc это l8u8v или С/С (по data_packet.pm)

2. class "net_alife_item_weapon_magazined_w_gl"

параметр grenade_mode идет первым в пакете (если отбросить пакет cse_abstract, который в любом случае первый)

3. class "net_respawn"

параметр initialized называется spawned_obj и представляет собой сложный тип l8u16v (в терминах acdc)

 

Может, еще что-то есть, это бросилось в глаза.

P.S.: Да, это все минимум для второго патча ТЧ. В чистом ТЧ и на первом патче все немножко по-другому.

Изменено пользователем KD87

Поделиться этим сообщением


Ссылка на сообщение

xStream, возможно, я не совсем понял код, но вроде как в методе read класса "net_alife_item" нет чтения updposition и updquaternion. Они должны читаться в случае, если num_items ~= 0. Если равно нулю, ни updposition, ни updquaternion нет.

Что касается skeleton_flags, abramcumner прав, в acdc упрощено, сейчас приведу логику чтения.

Поделиться этим сообщением


Ссылка на сообщение

xStream, со skeleton_flags такая ситуация - если у этого флага выставлен третий бит, далее из пакета читаются следующие параметры:

bones_mask - u64

root_bone - u16

ph_angular_velosity (видимо) - vector

ph_linear_velosity (видимо) - vector

bone_count - u16

Для каждой кости из bone_count читаются ph_position (q8v3), ph_rotation (q8v4) и enabled (u8).

 

Вообще, надо сказать, acdc - лишь базовое руководство для написания парсера нет-пакетов. В секциях из all.spawn много параметров, имеющих сложный тип. При этом часть параметров всегда пустые или нулевые, поскольку при начальном спавне обратное не имеет смысла (например, spawned_obj из se_respawn при начальном спавне явно не может не быть пустым). При разборе нет-пакетов в игре эти же параметры необязательно будут пустыми или нулевыми.

Поделиться этим сообщением


Ссылка на сообщение

xStream, часть пакета, свазанная со skeleton_flags - именно в STATE части. Вот кусок псевдокода из CSE_PHSkeleton::STATE_Read:

  NET_Packet::r_stringZ(tNetPacket, &v4->startup_animation);
  NET_Packet::r(tNetPacket, &v3->_flags, 1u);
  NET_Packet::r(tNetPacket, &v3->source_id, 2u);
  if ( v3->_flags.flags & 4 )
    v3->vfptr->data_load(v3, tNetPacket);

Идет вызов виртуальной функции, в конечном счете вызывается SPHBonesData::net_Load(). Что читается в ней, я уже в этой теме "типа" писал.

Поделиться этим сообщением


Ссылка на сообщение
xStream, приведи код, которым пытаешься читать. Изменено пользователем KD87

Поделиться этим сообщением


Ссылка на сообщение

xStream, но чтение-то заблокировано. Вот тут, например:

if prop.name~="skeleton" or not (bit_and(ret.skeleton_flags, 4)==0) then

Как это выглядело при включенном чтении?

Изменено пользователем KD87

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...