@@ -383,23 +383,30 @@ std::string LuaEntitySAO::getClientInitializationData(u16 protocol_version)
383
383
writeF1000 (os, m_yaw);
384
384
writeS16 (os, m_hp);
385
385
386
- writeU8 (os, 4 + m_bone_position. size () + m_attachment_child_ids. size ()); // number of messages stuffed in here
387
- os<< serializeLongString (getPropertyPacket ()); // message 1
388
- os<< serializeLongString (gob_cmd_update_armor_groups (m_armor_groups)); // 2
389
- os<< serializeLongString (gob_cmd_update_animation (
386
+ std::ostringstream msg_os (std::ios::binary);
387
+ msg_os << serializeLongString (getPropertyPacket ()); // message 1
388
+ msg_os << serializeLongString (gob_cmd_update_armor_groups (m_armor_groups)); // 2
389
+ msg_os << serializeLongString (gob_cmd_update_animation (
390
390
m_animation_range, m_animation_speed, m_animation_blend, m_animation_loop)); // 3
391
391
for (UNORDERED_MAP<std::string, core::vector2d<v3f> >::const_iterator
392
392
ii = m_bone_position.begin (); ii != m_bone_position.end (); ++ii) {
393
- os << serializeLongString (gob_cmd_update_bone_position ((*ii).first ,
393
+ msg_os << serializeLongString (gob_cmd_update_bone_position ((*ii).first ,
394
394
(*ii).second .X , (*ii).second .Y )); // m_bone_position.size
395
395
}
396
- os<<serializeLongString (gob_cmd_update_attachment (m_attachment_parent_id, m_attachment_bone, m_attachment_position, m_attachment_rotation)); // 4
396
+ msg_os << serializeLongString (gob_cmd_update_attachment (m_attachment_parent_id,
397
+ m_attachment_bone, m_attachment_position, m_attachment_rotation)); // 4
398
+ int message_count = 4 + m_bone_position.size ();
397
399
for (UNORDERED_SET<int >::const_iterator ii = m_attachment_child_ids.begin ();
398
400
(ii != m_attachment_child_ids.end ()); ++ii) {
399
401
if (ServerActiveObject *obj = m_env->getActiveObject (*ii)) {
400
- os << serializeLongString (gob_cmd_update_infant (*ii, obj->getSendType (), obj->getClientInitializationData (protocol_version)));
402
+ message_count++;
403
+ msg_os << serializeLongString (gob_cmd_update_infant (*ii, obj->getSendType (),
404
+ obj->getClientInitializationData (protocol_version)));
401
405
}
402
406
}
407
+
408
+ writeU8 (os, message_count);
409
+ os.write (msg_os.str ().c_str (), msg_os.str ().size ());
403
410
}
404
411
else
405
412
{
@@ -865,26 +872,35 @@ std::string PlayerSAO::getClientInitializationData(u16 protocol_version)
865
872
writeF1000 (os, m_yaw);
866
873
writeS16 (os, getHP ());
867
874
868
- writeU8 (os, 6 + m_bone_position. size () + m_attachment_child_ids. size ()); // number of messages stuffed in here
869
- os<< serializeLongString (getPropertyPacket ()); // message 1
870
- os<< serializeLongString (gob_cmd_update_armor_groups (m_armor_groups)); // 2
871
- os<< serializeLongString (gob_cmd_update_animation (
875
+ std::ostringstream msg_os (std::ios::binary);
876
+ msg_os << serializeLongString (getPropertyPacket ()); // message 1
877
+ msg_os << serializeLongString (gob_cmd_update_armor_groups (m_armor_groups)); // 2
878
+ msg_os << serializeLongString (gob_cmd_update_animation (
872
879
m_animation_range, m_animation_speed, m_animation_blend, m_animation_loop)); // 3
873
880
for (UNORDERED_MAP<std::string, core::vector2d<v3f> >::const_iterator
874
881
ii = m_bone_position.begin (); ii != m_bone_position.end (); ++ii) {
875
- os<<serializeLongString (gob_cmd_update_bone_position ((*ii).first , (*ii).second .X , (*ii).second .Y )); // m_bone_position.size
882
+ msg_os << serializeLongString (gob_cmd_update_bone_position ((*ii).first ,
883
+ (*ii).second .X , (*ii).second .Y )); // m_bone_position.size
876
884
}
877
- os<<serializeLongString (gob_cmd_update_attachment (m_attachment_parent_id, m_attachment_bone, m_attachment_position, m_attachment_rotation)); // 4
878
- os<<serializeLongString (gob_cmd_update_physics_override (m_physics_override_speed,
885
+ msg_os << serializeLongString (gob_cmd_update_attachment (m_attachment_parent_id,
886
+ m_attachment_bone, m_attachment_position, m_attachment_rotation)); // 4
887
+ msg_os << serializeLongString (gob_cmd_update_physics_override (m_physics_override_speed,
879
888
m_physics_override_jump, m_physics_override_gravity, m_physics_override_sneak,
880
889
m_physics_override_sneak_glitch)); // 5
881
- os << serializeLongString (gob_cmd_update_nametag_attributes (m_prop.nametag_color )); // 6 (GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES) : Deprecated, for backwards compatibility only.
890
+ // (GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES) : Deprecated, for backwards compatibility only.
891
+ msg_os << serializeLongString (gob_cmd_update_nametag_attributes (m_prop.nametag_color )); // 6
892
+ int message_count = 6 + m_bone_position.size ();
882
893
for (UNORDERED_SET<int >::const_iterator ii = m_attachment_child_ids.begin ();
883
894
ii != m_attachment_child_ids.end (); ++ii) {
884
895
if (ServerActiveObject *obj = m_env->getActiveObject (*ii)) {
885
- os << serializeLongString (gob_cmd_update_infant (*ii, obj->getSendType (), obj->getClientInitializationData (protocol_version)));
896
+ message_count++;
897
+ msg_os << serializeLongString (gob_cmd_update_infant (*ii, obj->getSendType (),
898
+ obj->getClientInitializationData (protocol_version)));
886
899
}
887
900
}
901
+
902
+ writeU8 (os, message_count);
903
+ os.write (msg_os.str ().c_str (), msg_os.str ().size ());
888
904
}
889
905
else
890
906
{
0 commit comments