KD87 720 Опубликовано 7 Января 2012 (изменено) 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.: Да, это все минимум для второго патча ТЧ. В чистом ТЧ и на первом патче все немножко по-другому. Изменено 7 Января 2012 пользователем KD87 Поделиться этим сообщением Ссылка на сообщение
KD87 720 Опубликовано 7 Января 2012 xStream, возможно, я не совсем понял код, но вроде как в методе read класса "net_alife_item" нет чтения updposition и updquaternion. Они должны читаться в случае, если num_items ~= 0. Если равно нулю, ни updposition, ни updquaternion нет. Что касается skeleton_flags, abramcumner прав, в acdc упрощено, сейчас приведу логику чтения. Поделиться этим сообщением Ссылка на сообщение
KD87 720 Опубликовано 8 Января 2012 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 при начальном спавне явно не может не быть пустым). При разборе нет-пакетов в игре эти же параметры необязательно будут пустыми или нулевыми. Поделиться этим сообщением Ссылка на сообщение
KD87 720 Опубликовано 14 Января 2012 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(). Что читается в ней, я уже в этой теме "типа" писал. Поделиться этим сообщением Ссылка на сообщение
KD87 720 Опубликовано 14 Января 2012 (изменено) xStream, приведи код, которым пытаешься читать. Изменено 14 Января 2012 пользователем KD87 Поделиться этим сообщением Ссылка на сообщение
KD87 720 Опубликовано 14 Января 2012 (изменено) xStream, но чтение-то заблокировано. Вот тут, например: if prop.name~="skeleton" or not (bit_and(ret.skeleton_flags, 4)==0) then Как это выглядело при включенном чтении? Изменено 14 Января 2012 пользователем KD87 Поделиться этим сообщением Ссылка на сообщение