uint32 Transporter::AddNPCPassenger(uint32 tguid, uint32 entry, float x, float y, float z, float o, uint32 anim) { MapMgr* map = GetMapMgr(); CreatureProperties const* creature_properties = sMySQLStore.getCreatureProperties(entry); if (creature_properties == nullptr || map == nullptr) return 0; #if VERSION_STRING != Cata float transporter_x = obj_movement_info.transport_data.relativePosition.x + x; float transporter_y = obj_movement_info.transport_data.relativePosition.y + y; float transporter_z = obj_movement_info.transport_data.relativePosition.z + z; #else float transporter_x = obj_movement_info.getTransportPosition()->x + x; float transporter_y = obj_movement_info.getTransportPosition()->y + y; float transporter_z = obj_movement_info.getTransportPosition()->z + z; #endif Creature* pCreature = map->CreateCreature(entry); pCreature->Create(map->GetMapId(), transporter_x, transporter_y, transporter_z, (std::atan2(transporter_x, transporter_y) + float(M_PI)) + o); pCreature->Load(creature_properties, transporter_x, transporter_y, transporter_z, (std::atan2(transporter_x, transporter_y) + float(M_PI)) + o); pCreature->AddToWorld(map); pCreature->SetUnitMovementFlags(MOVEFLAG_TRANSPORT); #if VERSION_STRING != Cata pCreature->obj_movement_info.transport_data.relativePosition.x = x; pCreature->obj_movement_info.transport_data.relativePosition.y = y; pCreature->obj_movement_info.transport_data.relativePosition.z = z; pCreature->obj_movement_info.transport_data.relativePosition.o = o; pCreature->obj_movement_info.transport_data.transportGuid = getGuid(); #else pCreature->obj_movement_info.setTransportData(getGuid(), x, y, z, o, 0, 0); #endif pCreature->m_transportData.transportGuid = this->getGuid(); pCreature->m_transportData.relativePosition.x = x; pCreature->m_transportData.relativePosition.y = y; pCreature->m_transportData.relativePosition.z = z; pCreature->m_transportData.relativePosition.o = o; if (anim) pCreature->setUInt32Value(UNIT_NPC_EMOTESTATE, anim); if (creature_properties->NPCFLags) pCreature->setUInt32Value(UNIT_NPC_FLAGS, creature_properties->NPCFLags); m_creatureSetMutex.Acquire(); m_NPCPassengerSet.insert(pCreature); m_creatureSetMutex.Release(); if (tguid == 0) { ++currenttguid; tguid = currenttguid; } else currenttguid = std::max(tguid, currenttguid); return tguid; }
Creature* Transporter::AddNPCPassengerInInstance(uint32 entry, float x, float y, float z, float o, uint32 /*anim*/) { MapMgr* map = GetMapMgr(); CreatureProperties const* creature_properties = sMySQLStore.getCreatureProperties(entry); if (creature_properties == nullptr || map == nullptr) return nullptr; #if VERSION_STRING != Cata float transporter_x = obj_movement_info.transport_data.relativePosition.x + x; float transporter_y = obj_movement_info.transport_data.relativePosition.y + y; float transporter_z = obj_movement_info.transport_data.relativePosition.z + z; #else float transporter_x = obj_movement_info.getTransportPosition()->x + x; float transporter_y = obj_movement_info.getTransportPosition()->y + y; float transporter_z = obj_movement_info.getTransportPosition()->z + z; #endif Creature* pCreature = map->CreateCreature(entry); pCreature->Create(map->GetMapId(), transporter_x, transporter_y, transporter_z, (std::atan2(transporter_x, transporter_y) + float(M_PI)) + o); pCreature->Load(creature_properties, transporter_x, transporter_y, transporter_z, (std::atan2(transporter_x, transporter_y) + float(M_PI)) + o); pCreature->AddToWorld(map); pCreature->SetUnitMovementFlags(MOVEFLAG_TRANSPORT); #if VERSION_STRING != Cata pCreature->obj_movement_info.transport_data.relativePosition.x = x; pCreature->obj_movement_info.transport_data.relativePosition.y = y; pCreature->obj_movement_info.transport_data.relativePosition.z = z; pCreature->obj_movement_info.transport_data.relativePosition.o = o; pCreature->obj_movement_info.transport_data.transportGuid = getGuid(); #else pCreature->obj_movement_info.setTransportData(getGuid(), x, y, z, o, 0, 0); #endif pCreature->m_transportData.transportGuid = this->getGuid(); pCreature->m_transportData.relativePosition.x = x; pCreature->m_transportData.relativePosition.y = y; pCreature->m_transportData.relativePosition.z = z; pCreature->m_transportData.relativePosition.o = o; m_creatureSetMutex.Acquire(); m_NPCPassengerSet.insert(pCreature); m_creatureSetMutex.Release(); return pCreature; }