stoneharry

Untitled

Aug 22nd, 2012
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.01 KB | None | 0 0
  1.  
  2. void Player::_CreateTaxi()
  3. {
  4.     m_CurrentTaxiPath = new TaxiPath();
  5. }
  6.  
  7. void Player::_AddPathNode(uint32 mapid, float x, float y, float z, uint32 index)
  8. {
  9.     if(index == 0)
  10.         index = m_CurrentTaxiPath->GetNodeCount();
  11.     TaxiPathNode* tpn = new TaxiPathNode();
  12.     tpn->mapid = mapid;
  13.     tpn->x = x;
  14.     tpn->y = y;
  15.     tpn->z = z;
  16.     m_CurrentTaxiPath->AddPathNode(index, tpn);
  17. }
  18.  
  19. void Player::_StartTaxi(uint32 modelid, uint32 start_node)
  20. {
  21.     int32 mapchangeid = -1;
  22.     float mapchangex = 0.0f, mapchangey = 0.0f, mapchangez = 0.0f;
  23.     uint32 cn = m_taxiMapChangeNode;
  24.  
  25.     m_taxiMapChangeNode = 0;
  26.  
  27.     Dismount();
  28.  
  29.     if( currentvehicle != NULL )
  30.         currentvehicle->EjectPassenger( this );
  31.  
  32.     //also remove morph spells
  33.     if(GetDisplayId() != GetNativeDisplayId())
  34.     {
  35.         RemoveAllAuraType(SPELL_AURA_TRANSFORM);
  36.         RemoveAllAuraType(SPELL_AURA_MOD_SHAPESHIFT);
  37.     }
  38.  
  39.     DismissActivePets();
  40.     summonhandler.RemoveAllSummons();
  41.     SetMount(modelid);
  42.     SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_MOUNTED_TAXI);
  43.     SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_LOCK_PLAYER);
  44.  
  45.     SetTaxiPos();
  46.     SetTaxiState(true);
  47.     m_taxi_ride_time = getMSTime();
  48.  
  49.     //uint32 traveltime = uint32(path->getLength() * TAXI_TRAVEL_SPEED); // 36.7407
  50.     float traveldist = 0;
  51.  
  52.     float lastx = 0, lasty = 0, lastz = 0;
  53.     TaxiPathNode* firstNode = m_CurrentTaxiPath->GetPathNode(start_node);
  54.     uint32 add_time = 0;
  55.  
  56.     if(start_node)
  57.     {
  58.         TaxiPathNode* pn = m_CurrentTaxiPath->GetPathNode(0);
  59.         float dist = 0;
  60.         lastx = pn->x;
  61.         lasty = pn->y;
  62.         lastz = pn->z;
  63.         for(uint32 i = 1; i <= start_node; ++i)
  64.         {
  65.             pn = m_CurrentTaxiPath->GetPathNode(i);
  66.             if(!pn)
  67.             {
  68.                 JumpToEndTaxiNode(m_CurrentTaxiPath);
  69.                 return;
  70.             }
  71.  
  72.             dist += CalcDistance(lastx, lasty, lastz, pn->x, pn->y, pn->z);
  73.             lastx = pn->x;
  74.             lasty = pn->y;
  75.             lastz = pn->z;
  76.         }
  77.         add_time = uint32(dist * TAXI_TRAVEL_SPEED);
  78.         lastx = lasty = lastz = 0;
  79.     }
  80.     size_t endn = m_CurrentTaxiPath->GetNodeCount();
  81.     if(m_taxiPaths.size())
  82.         endn -= 2;
  83.  
  84.     for(uint32 i = start_node; i < endn; ++i)
  85.     {
  86.         TaxiPathNode* pn = m_CurrentTaxiPath->GetPathNode(i);
  87.  
  88.         if(pn->mapid != m_mapId)
  89.         {
  90.             endn = (i - 1);
  91.             m_taxiMapChangeNode = i;
  92.  
  93.             mapchangeid = (int32)pn->mapid;
  94.             mapchangex = pn->x;
  95.             mapchangey = pn->y;
  96.             mapchangez = pn->z;
  97.             break;
  98.         }
  99.  
  100.         if(!lastx || !lasty || !lastz)
  101.         {
  102.             lastx = pn->x;
  103.             lasty = pn->y;
  104.             lastz = pn->z;
  105.         }
  106.         else
  107.         {
  108.             float dist = CalcDistance(lastx, lasty, lastz,
  109.                                       pn->x, pn->y, pn->z);
  110.             traveldist += dist;
  111.             lastx = pn->x;
  112.             lasty = pn->y;
  113.             lastz = pn->z;
  114.         }
  115.     }
  116.  
  117.     uint32 traveltime = uint32(traveldist * TAXI_TRAVEL_SPEED);
  118.  
  119.     if(start_node > endn || (endn - start_node) > 200)
  120.         return;
  121.  
  122.     WorldPacket data(SMSG_MONSTER_MOVE, 38 + ((endn - start_node) * 12));
  123.     data << GetNewGUID();
  124.     data << uint8(0);
  125.     data << firstNode->x << firstNode->y << firstNode->z;
  126.     data << m_taxi_ride_time;
  127.     data << uint8(0);
  128.     data << uint32(0x00003000);
  129.     data << uint32(traveltime);
  130.  
  131.     if(!cn)
  132.         m_taxi_ride_time -= add_time;
  133.  
  134.     data << uint32(endn - start_node);
  135.     for(uint32 i = start_node; i < endn; i++)
  136.     {
  137.         TaxiPathNode* pn = m_CurrentTaxiPath->GetPathNode(i);
  138.         if(!pn)
  139.         {
  140.             JumpToEndTaxiNode(m_CurrentTaxiPath);
  141.             return;
  142.         }
  143.  
  144.         data << pn->x << pn->y << pn->z;
  145.     }
  146.  
  147.     SendMessageToSet(&data, true);
  148.  
  149.     sEventMgr.AddEvent(this, &Player::EventTaxiInterpolate,
  150.                        EVENT_PLAYER_TAXI_INTERPOLATE, 900, 0, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT);
  151.  
  152.     if(mapchangeid < 0)
  153.     {
  154.         TaxiPathNode* pn = m_CurrentTaxiPath->GetPathNode((uint32)m_CurrentTaxiPath->GetNodeCount() - 1);
  155.         sEventMgr.AddEvent(this, &Player::EventDismount, m_CurrentTaxiPath->GetPrice(),
  156.                            pn->x, pn->y, pn->z, EVENT_PLAYER_TAXI_DISMOUNT, traveltime, 1, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT);
  157.     }
  158.     else
  159.     {
  160.         sEventMgr.AddEvent(this, &Player::EventTeleportTaxi, (uint32)mapchangeid, mapchangex, mapchangey, mapchangez, EVENT_PLAYER_TELEPORT, traveltime, 1, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT);
  161.     }
  162. }
Advertisement
Add Comment
Please, Sign In to add comment