void TaxiPath::SendMoveForTime(PlayerPointer riding, PlayerPointer to, uint32 time) { if (!time) return; float length; uint32 mapid = riding->GetMapId(); if( mapid == m_map1 ) length = m_length1; else length = m_length2; float traveled_len = (time/(length * TAXI_TRAVEL_SPEED))*length; uint32 len = 0; float x = 0,y = 0,z = 0; if (!m_pathNodes.size()) return; std::map<uint32, TaxiPathNode*>::iterator itr; itr = m_pathNodes.begin(); float nx; float ny; float nz; bool set = false; uint32 nodecounter = 1; while (itr != m_pathNodes.end()) { if( itr->second->mapid != mapid ) { itr++; nodecounter++; continue; } if(!set) { nx = itr->second->x; ny = itr->second->y; nz = itr->second->z; set = true; continue; } len = (uint32)sqrt((itr->second->x - nx)*(itr->second->x - nx) + (itr->second->y - ny)*(itr->second->y - ny) + (itr->second->z - nz)*(itr->second->z - nz)); if (len >= traveled_len) { x = (itr->second->x - nx)*(traveled_len/len) + nx; y = (itr->second->y - ny)*(traveled_len/len) + ny; z = (itr->second->z - nz)*(traveled_len/len) + nz; break; } else { traveled_len -= len; } nx = itr->second->x; ny = itr->second->y; nz = itr->second->z; itr++; } if (itr == m_pathNodes.end()) return; WorldPacket * data = new WorldPacket(SMSG_MONSTER_MOVE, 2000); size_t pos; *data << riding->GetNewGUID(); *data << uint8(0); *data << riding->GetPositionX( ) << riding->GetPositionY( ) << riding->GetPositionZ( ); *data << getMSTime(); *data << uint8( 0 ); *data << uint32( MONSTER_MOVE_FLAG_FLY ); *data << uint32( uint32((length * TAXI_TRAVEL_SPEED) - time)); *data << uint32( nodecounter ); pos = data->wpos(); *data << nx << ny << nz; while (itr != m_pathNodes.end()) { TaxiPathNode *pn = itr->second; if( pn->mapid != mapid ) break; *data << pn->x << pn->y << pn->z; ++itr; ++nodecounter; } *(uint32*)&(data->contents()[pos]) = nodecounter; to->delayedPackets.add(data); /* if (!time) return; float traveled_len = (time/(getLength() * TAXI_TRAVEL_SPEED))*getLength();; uint32 len = 0, count = 0; float x = 0,y = 0,z = 0; if (!m_pathNodes.size()) return; std::map<uint32, TaxiPathNode*>::iterator itr; itr = m_pathNodes.begin(); float nx = itr->second->x; float ny = itr->second->y; float nz = itr->second->z; itr++; while (itr != m_pathNodes.end()) { len = (uint32)sqrt((itr->second->x - nx)*(itr->second->x - nx) + (itr->second->y - ny)*(itr->second->y - ny) + (itr->second->z - nz)*(itr->second->z - nz)); if (len > traveled_len) { x = (itr->second->x - nx)*(traveled_len/len) + nx; y = (itr->second->y - ny)*(traveled_len/len) + ny; z = (itr->second->z - nz)*(traveled_len/len) + nz; break; } else { traveled_len -= len; } nx = itr->second->x; ny = itr->second->y; nz = itr->second->z; itr++; count++; } if (itr == m_pathNodes.end()) return; WorldPacket * data = new WorldPacket(SMSG_MONSTER_MOVE, 2000); *data << riding->GetNewGUID(); *data << riding->GetPositionX( ) << riding->GetPositionY( ) << riding->GetPositionZ( ); *data << getMSTime(); *data << uint8( 0 ); *data << uint32( MONSTER_MOVE_FLAG_FLY ); *data << uint32( uint32((getLength() * TAXI_TRAVEL_SPEED) - time)); *data << uint32( GetNodeCount() - count ); *data << nx << ny << nz; while (itr != m_pathNodes.end()) { TaxiPathNode *pn = itr->second; *data << pn->x << pn->y << pn->z; itr++; } //to->GetSession()->SendPacket(&data); to->delayedPackets.add(data);*/ }