Guest User

Untitled

a guest
Jul 16th, 2015
348
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.23 KB | None | 0 0
  1. void Object::BuildMovementUpdate(ByteBuffer * data, uint8 updateFlags) const
  2. {
  3.     *data << uint8(updateFlags);                            // update flags
  4.  
  5.     // 0x20
  6.     if (updateFlags & UPDATEFLAG_LIVING)
  7.     {
  8.         Unit *unit = ((Unit*)this);
  9.  
  10.         if (GetTypeId() == TYPEID_PLAYER)
  11.         {
  12.             Player *player = ((Player*)unit);
  13.             if(player->GetTransport())
  14.                 player->m_movementInfo.AddMovementFlag(MOVEFLAG_ONTRANSPORT);
  15.             else
  16.                 player->m_movementInfo.RemoveMovementFlag(MOVEFLAG_ONTRANSPORT);
  17.         }
  18.  
  19.         if (unit->IsStopped() && unit->m_movementInfo.HasMovementFlag(MOVEFLAG_SPLINE_ENABLED))
  20.             unit->m_movementInfo.RemoveMovementFlag(MovementFlags(MOVEFLAG_SPLINE_ENABLED|MOVEFLAG_FORWARD));
  21.  
  22.         // Update movement info time
  23.         unit->m_movementInfo.UpdateTime(WorldTimer::getMSTime());
  24.         // Write movement info
  25.         unit->m_movementInfo.Write(*data);
  26.  
  27.         // Unit speeds
  28.         *data << float(unit->GetSpeed(MOVE_WALK));
  29.         *data << float(unit->GetSpeed(MOVE_RUN));
  30.         *data << float(unit->GetSpeed(MOVE_RUN_BACK));
  31.         *data << float(unit->GetSpeed(MOVE_SWIM));
  32.         *data << float(unit->GetSpeed(MOVE_SWIM_BACK));
  33.         *data << float(unit->GetSpeed(MOVE_FLIGHT));
  34.         *data << float(unit->GetSpeed(MOVE_FLIGHT_BACK));
  35.         *data << float(unit->GetSpeed(MOVE_TURN_RATE));
  36.  
  37.         // 0x08000000
  38.         if (unit->m_movementInfo.GetMovementFlags() & MOVEFLAG_SPLINE_ENABLED)
  39.             Movement::PacketBuilder::WriteCreate(*unit->movespline, *data);
  40.     }
  41.     // 0x40
  42.     else if (updateFlags & UPDATEFLAG_HAS_POSITION)
  43.     {
  44.         // 0x02
  45.         if (updateFlags & UPDATEFLAG_TRANSPORT && ((GameObject*)this)->GetGoType() == GAMEOBJECT_TYPE_MO_TRANSPORT)
  46.         {
  47.             *data << float(0);
  48.             *data << float(0);
  49.             *data << float(0);
  50.             *data << float(((WorldObject*)this)->GetOrientation());
  51.         }
  52.         else
  53.         {
  54.             *data << float(((WorldObject*)this)->GetPositionX());
  55.             *data << float(((WorldObject*)this)->GetPositionY());
  56.             *data << float(((WorldObject*)this)->GetPositionZ());
  57.             *data << float(((WorldObject*)this)->GetOrientation());
  58.         }
  59.     }
  60.  
  61.     // 0x8
  62.     if (updateFlags & UPDATEFLAG_LOWGUID)
  63.     {
  64.         switch (GetTypeId())
  65.         {
  66.             case TYPEID_OBJECT:
  67.             case TYPEID_ITEM:
  68.             case TYPEID_CONTAINER:
  69.             case TYPEID_GAMEOBJECT:
  70.             case TYPEID_DYNAMICOBJECT:
  71.             case TYPEID_CORPSE:
  72.                 *data << uint32(GetGUIDLow());              // GetGUIDLow()
  73.                 break;
  74.             case TYPEID_UNIT:
  75.                 *data << uint32(0x0000000B);                // unk, can be 0xB or 0xC
  76.                 break;
  77.             case TYPEID_PLAYER:
  78.                 if(updateFlags & UPDATEFLAG_SELF)
  79.                     *data << uint32(0x00000015);            // unk, can be 0x15 or 0x22
  80.                 else
  81.                     *data << uint32(0x00000008);            // unk, can be 0x7 or 0x8
  82.                 break;
  83.             default:
  84.                 *data << uint32(0x00000000);                // unk
  85.                 break;
  86.         }
  87.     }
  88.  
  89.     // 0x10
  90.     if (updateFlags & UPDATEFLAG_HIGHGUID)
  91.     {
  92.         switch(GetTypeId())
  93.         {
  94.             case TYPEID_OBJECT:
  95.             case TYPEID_ITEM:
  96.             case TYPEID_CONTAINER:
  97.             case TYPEID_GAMEOBJECT:
  98.             case TYPEID_DYNAMICOBJECT:
  99.             case TYPEID_CORPSE:
  100.                 *data << uint32(GetObjectGuid().GetHigh()); // GetGUIDHigh()
  101.                 break;
  102.             default:
  103.                 *data << uint32(0x00000000);                // unk
  104.                 break;
  105.         }
  106.     }
  107.  
  108.     // 0x4
  109.     if (updateFlags & UPDATEFLAG_HAS_ATTACKING_TARGET)       // packed guid (current target guid)
  110.     {
  111.         if (((Unit*)this)->getVictim())
  112.             *data << ((Unit*)this)->getVictim()->GetPackGUID();
  113.         else
  114.             data->appendPackGUID(0);
  115.     }
  116.  
  117.     // 0x2
  118.     if (updateFlags & UPDATEFLAG_TRANSPORT)
  119.     {
  120.         *data << uint32(WorldTimer::getMSTime());                       // ms time
  121.     }
  122. }
Advertisement
Add Comment
Please, Sign In to add comment