Transporter* ObjectMgr::LoadTransportInInstance(MapMgr *instance, uint32 goEntry, uint32 period) { auto gameobject_info = sMySQLStore.getGameObjectProperties(goEntry); if (gameobject_info == nullptr) { LOG_ERROR("Transport ID:%u, will not be loaded, gameobject_properties missing", goEntry); return NULL; } if (gameobject_info->type != GAMEOBJECT_TYPE_MO_TRANSPORT) { LOG_ERROR("Transport ID:%u, Name: %s, will not be loaded, gameobject_properties type wrong", goEntry, gameobject_info->name.c_str()); return NULL; } std::set<uint32> mapsUsed; Transporter* t = new Transporter((uint64)HIGHGUID_TYPE_TRANSPORTER << 32 | goEntry); // Generate waypoints if (!t->GenerateWaypoints(gameobject_info->mo_transport.taxi_path_id)) { LOG_ERROR("Transport ID:%u, Name: %s, failed to create waypoints", gameobject_info->entry, gameobject_info->name.c_str()); delete t; return NULL; } // Create Transporter if (!t->Create(goEntry, period)) { delete t; return NULL; } m_Transporters.insert(t); m_TransportersByInstanceIdMap[instance->GetInstanceID()].insert(t); AddTransport(t); // AddObject To World t->AddToWorld(instance); // correct incorrect instance id's t->SetInstanceID(instance->GetInstanceID()); t->SetMapId(t->GetMapId()); t->BuildStartMovePacket(instance); t->BuildStopMovePacket(instance); t->m_WayPoints.clear(); // Make transport stopped at server-side, movement will be handled by scripts LogDetail("Transport Handler : Spawned Transport Entry %u, map %u, instance id %u", goEntry, t->GetMapId(), t->GetInstanceID()); return t; }
void ObjectMgr::LoadTransporters() { #ifdef CLUSTERING return; #endif //!!!!!!!!!!!!! CATA !!!!!!!!!!! // this seems to deadlock maps, disabling it until properly implemented return; //!!!!!!!!!!!!! CATA !!!!!!!!!!! Log.Notice("ObjectMgr", "Loading Transports..."); QueryResult * QR = WorldDatabase.Query("SELECT entry FROM gameobject_names WHERE type = %u", GAMEOBJECT_TYPE_MO_TRANSPORT); if(!QR) return; int32 total = QR->GetRowCount(); do { uint32 entry = QR->Fetch()[0].GetUInt32(); //never do this ! // Transporter * pTransporter = new Transporter((uint64)HIGHGUID_TYPE_TRANSPORTER<<32 | entry); //wtf ? uint32 lowguid = objmgr.GenerateLowGuid( HIGHGUID_TYPE_TRANSPORTER ); Transporter * pTransporter = new Transporter(((uint64)HIGHGUID_TYPE_TRANSPORTER<<32) | lowguid); if(!pTransporter->CreateAsTransporter(entry, "")) { sLog.outDebug("Transporter %d failed creation for some reason.", entry); delete pTransporter; pTransporter = NULL; }else { AddTransport(pTransporter); QueryResult * result2 = WorldDatabase.Query("SELECT * FROM transport_creatures WHERE transport_entry = %u", entry); if(result2) { do { pTransporter->AddNPC(result2->Fetch()[1].GetUInt32(), result2->Fetch()[2].GetFloat(), result2->Fetch()[3].GetFloat(), result2->Fetch()[4].GetFloat(), result2->Fetch()[5].GetFloat()); } while (result2->NextRow()); delete result2; result2 = NULL; } } } while(QR->NextRow()); delete QR; QR = NULL; }
/** VirtualFS constructor * * Sets the subsystems name and file it was loaded from (The filename of the DLL module) * Obtains a ptr to Fusions Module Database */ VirtualFS::VirtualFS() { object_name = "VirtualFS Version 2.0 <*****@*****.**>"; object_filename = "libVFS.dll"; m_moduledb = fusion->GetModuleDB(); m_tempdir = NULL; // Add all the built in formats, pure text and pure binary are defaults AddPlugin(CreateTextPlugin); AddPlugin(CreateBinaryPlugin); // Setup all the built in transports AddTransport(CreateFileTransport); }
void ObjectMgr::LoadTransporters() { #ifdef CLUSTERING return; #endif Log.Notice("ObjectMgr", "Loading Transports..."); QueryResult * QR = WorldDatabase.Query("SELECT entry FROM gameobject_names WHERE type = %u", GAMEOBJECT_TYPE_MO_TRANSPORT); if(!QR) return; int64 total = QR->GetRowCount(); TransportersCount = total; uint32 entry = NULL; Transporter* pTransporter = NULL; do { entry = QR->Fetch()[0].GetUInt32(); pTransporter = new Transporter((uint64)HIGHGUID_TYPE_TRANSPORTER<<32 | entry); pTransporter->Init(); if(!pTransporter->CreateAsTransporter(entry, "")) { Log.Warning("ObjectMgr","Skipped invalid transporterid %d.", entry); pTransporter->Destruct(); pTransporter = NULL; } else { AddTransport(pTransporter); QueryResult * result2 = WorldDatabase.Query("SELECT * FROM transport_creatures WHERE transport_entry = %u", entry); if(result2) { do { pTransporter->AddNPC(result2->Fetch()[1].GetUInt32(), result2->Fetch()[2].GetFloat(), result2->Fetch()[3].GetFloat(), result2->Fetch()[4].GetFloat(), result2->Fetch()[5].GetFloat()); } while (result2->NextRow()); delete result2; } } } while(QR->NextRow()); delete QR; }
void ObjectMgr::LoadTransporters() { #ifdef CLUSTERING return; #endif Log.Notice("ObjectMgr", "Loading Transports..."); QueryResult * QR = WorldDatabase.Query("SELECT * FROM transport_data"); if (!QR) return; int64 total = QR->GetRowCount(); TransportersCount = total; do { uint32 entry = QR->Fetch()[0].GetUInt32(); int32 period = QR->Fetch()[2].GetInt32(); Transporter * pTransporter = new Transporter((uint64)HIGHGUID_TYPE_TRANSPORTER << 32 | entry); if (!pTransporter->CreateAsTransporter(entry, "", period)) { sLog.outError("Transporter %s failed creation for some reason.", QR->Fetch()[1].GetString()); delete pTransporter; } else { AddTransport(pTransporter); QueryResult * result2 = WorldDatabase.Query("SELECT * FROM transport_creatures WHERE transport_entry = %u", entry); if (result2) { do { pTransporter->AddNPC(result2->Fetch()[1].GetUInt32(), result2->Fetch()[2].GetFloat(), result2->Fetch()[3].GetFloat(), result2->Fetch()[4].GetFloat(), result2->Fetch()[5].GetFloat()); } while (result2->NextRow()); delete result2; } } } while (QR->NextRow()); delete QR; }
void ObjectMgr::LoadTransporters() { Log.Notice("TransporterHandler", "Start loading transport_data"); { const char* loadAllTransportData = "SELECT entry, name, period FROM transport_data"; QueryResult* result = WorldDatabase.Query(loadAllTransportData); if (!result) { Log.Error("TransporterHandler", "Query failed: %s", loadAllTransportData); return; } uint32 count = 0; do { Field* field = result->Fetch(); TransporterDataQueryResult dbResult; dbResult.entry = field[0].GetUInt32(); dbResult.name = field[1].GetString(); dbResult.period = field[2].GetUInt32(); GameObjectInfo* goInfo = GameObjectNameStorage.LookupEntry(dbResult.entry); if (goInfo == nullptr) { Log.Error("TransporterHandler", "Transporter gameobject %u not available in GameObjectNameStorage!", dbResult.entry); continue; } Transporter* pTransporter = new Transporter((uint64)HIGHGUID_TYPE_TRANSPORTER << 32 | dbResult.entry); pTransporter->SetInfo(goInfo); if (!pTransporter->CreateAsTransporter(dbResult.entry, "", dbResult.period)) { Log.Error("TransporterHandler", "Transporter %s failed creation for some reason.", dbResult.name.c_str()); delete pTransporter; } else { Log.Debug("TransporterHandler", "%s, Entry: %u, Period: %u loaded", dbResult.name.c_str(), dbResult.entry, dbResult.period); AddTransport(pTransporter); ++count; } } while (result->NextRow()); delete result; Log.Success("TransporterHandler", "%u transporters loaded from table transporter_data", count); } Log.Notice("TransporterHandler", "Start loading transport_creatures"); { const char* loadTransportPassengers = "SELECT transport_entry, creature_entry, position_x, position_y, position_z, orientation FROM transport_creatures"; bool success = false; QueryResult* result = WorldDatabase.Query(&success, loadTransportPassengers); if (!success) { Log.Error("TransporterHandler", "Query failed: %s", loadTransportPassengers); return; } uint32 count = 0; if (result) { do { Field* field = result->Fetch(); uint32 transport_entry = field[0].GetUInt32(); uint32 creature_entry = field[1].GetUInt32(); auto transporter = GetTransporterByEntry(transport_entry); if (transporter == nullptr) { Log.Error("TransporterHandler", "Could not find transporter %u for transport_creatures entry %u", transport_entry, creature_entry); continue; } TransporterCreaturesQueryResult dbResult; dbResult.transport_entry = field[0].GetUInt32(); dbResult.creature_entry = field[1].GetUInt32(); dbResult.position_x = field[2].GetFloat(); dbResult.position_y = field[3].GetFloat(); dbResult.position_z = field[4].GetFloat(); dbResult.orientation = field[5].GetFloat(); transporter->creature_transport_data.push_back(dbResult); transporter->AddNPC(dbResult.creature_entry, dbResult.position_x, dbResult.position_y, dbResult.position_z, dbResult.orientation); ++count; } while (result->NextRow()); delete result; Log.Success("TransporterHandler", "%u transport passengers from table transport_creatures loaded.", count); } } }
void VirtualFS::LoadPlugin(VFSTransport::transport_t t, VFSPlugin::plugin_t p, VFSFilter::filter_t f) { AddTransport(t); AddPlugin(p); AddFilter(f); }
void ObjectMgr::LoadTransports() { LogNotice("TransportHandler : Start creating transports..."); { uint32_t createCount = 0; for (auto it : sMySQLStore._transportDataStore) { GameObjectProperties const* gameobject_info = sMySQLStore.getGameObjectProperties(it.first); std::set<uint32> mapsUsed; Transporter* pTransporter = new Transporter((uint64)HIGHGUID_TYPE_TRANSPORTER << 32 | it.first); if (pTransporter->GenerateWaypoints(gameobject_info->mo_transport.taxi_path_id) == false) { LOG_ERROR("Transport entry: %u, failed to create waypoints", it.first); delete pTransporter; continue; } if (pTransporter->Create(it.first, it.second.period) == false) { delete pTransporter; continue; } pTransporter->AddToWorld(); m_Transporters.insert(pTransporter); AddTransport(pTransporter); for (std::set<uint32>::const_iterator i = mapsUsed.begin(); i != mapsUsed.end(); ++i) { m_TransportersByMap[*i].insert(pTransporter); } ++createCount; } LogDetail("Transporter Handler : Created %u transports", createCount); } LogNotice("TransportHandler : Start populating transports with creatures..."); { for (auto it : sMySQLStore._transportCreaturesStore) { for (ObjectMgr::TransporterSet::iterator itr = m_Transporters.begin(); itr != m_Transporters.end(); ++itr) { if ((*itr)->getEntry() == it.second.transportEntry) { TransportSpawn spawn{ it.second.guid, it.second.entry, it.second.transportEntry, it.second.transportOffsetX, it.second.transportOffsetY, it.second.transportOffsetZ, it.second.transportOffsetO, it.second.animation }; (*itr)->AddCreature(spawn); break; } } } for (auto transport : m_Transporters) { transport->RespawnCreaturePassengers(); } } }
bool BattlegroundSA::ResetObjs() { for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(itr->first)) SendTransportsRemove(player); uint32 atF = BG_SA_Factions[Attackers]; uint32 defF = BG_SA_Factions[Attackers ? TEAM_ALLIANCE : TEAM_HORDE]; for (uint8 i = 0; i < BG_SA_MAXOBJ; i++) DelObject(i); for (uint8 i = 0; i < BG_SA_MAXNPC; i++) DelCreature(i); for (uint8 i = BG_SA_MAXNPC; i < BG_SA_MAXNPC + BG_SA_MAX_GY; i++) DelCreature(i); for (uint8 i = 0; i < 6; i++) GateStatus[i] = BG_SA_GATE_OK; for (uint8 i = 0; i <= BG_SA_PORTAL_DEFFENDER_RED; i++) { if (!AddObject(i, BG_SA_ObjEntries[i], BG_SA_ObjSpawnlocs[i][0], BG_SA_ObjSpawnlocs[i][1], BG_SA_ObjSpawnlocs[i][2], BG_SA_ObjSpawnlocs[i][3], 0, 0, 0, 0, RESPAWN_ONE_DAY)) return false; } for (uint8 i = BG_SA_BOAT_ONE; i <= BG_SA_BOAT_TWO; i++) { uint32 boatid = 0; switch (i) { case BG_SA_BOAT_ONE: boatid = Attackers ? BG_SA_BOAT_ONE_H : BG_SA_BOAT_ONE_A; break; case BG_SA_BOAT_TWO: boatid = Attackers ? BG_SA_BOAT_TWO_H : BG_SA_BOAT_TWO_A; break; default: break; } if (!AddTransport(i, boatid, BG_SA_ObjSpawnlocs[i][0], BG_SA_ObjSpawnlocs[i][1], BG_SA_ObjSpawnlocs[i][2]+(Attackers ? -3.750f: 0), BG_SA_ObjSpawnlocs[i][3], 0, 0, 0, 0, RESPAWN_ONE_DAY)) return false; } for (uint8 i = BG_SA_SIGIL_1; i <= BG_SA_LEFT_FLAGPOLE; i++) { if (!AddObject(i, BG_SA_ObjEntries[i], BG_SA_ObjSpawnlocs[i][0], BG_SA_ObjSpawnlocs[i][1], BG_SA_ObjSpawnlocs[i][2], BG_SA_ObjSpawnlocs[i][3], 0, 0, 0, 0, RESPAWN_ONE_DAY)) return false; } // MAD props for Kiper for discovering those values - 4 hours of his work. GetBGObject(BG_SA_BOAT_ONE)->UpdateRotationFields(1.0f, 0.0002f); GetBGObject(BG_SA_BOAT_TWO)->UpdateRotationFields(1.0f, 0.00001f); SpawnBGObject(BG_SA_BOAT_ONE, RESPAWN_IMMEDIATELY); SpawnBGObject(BG_SA_BOAT_TWO, RESPAWN_IMMEDIATELY); //Cannons and demolishers - NPCs are spawned //By capturing GYs. for (uint8 i = 0; i < BG_SA_DEMOLISHER_5; i++) { if (!AddCreature(BG_SA_NpcEntries[i], i, (Attackers == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE), BG_SA_NpcSpawnlocs[i][0], BG_SA_NpcSpawnlocs[i][1], BG_SA_NpcSpawnlocs[i][2], BG_SA_NpcSpawnlocs[i][3], 600)) return false; } OverrideGunFaction(); DemolisherStartState(true); for (uint8 i = 0; i <= BG_SA_PORTAL_DEFFENDER_RED; i++) { SpawnBGObject(i, RESPAWN_IMMEDIATELY); GetBGObject(i)->SetUInt32Value(GAMEOBJECT_FIELD_FACTION_TEMPLATE, defF); } GetBGObject(BG_SA_TITAN_RELIC)->SetUInt32Value(GAMEOBJECT_FIELD_FACTION_TEMPLATE, atF); GetBGObject(BG_SA_TITAN_RELIC)->Refresh(); for (uint8 i = 0; i <= 5; i++) GateStatus[i] = BG_SA_GATE_OK; TotalTime = 0; ShipsStarted = false; //Graveyards for (uint8 i = 0; i < BG_SA_MAX_GY; i++) { WorldSafeLocsEntry const* sg = NULL; sg = sWorldSafeLocsStore.LookupEntry(BG_SA_GYEntries[i]); if (!sg) { TC_LOG_ERROR("bg.battleground", "SOTA: Can't find GY entry %u", BG_SA_GYEntries[i]); return false; } if (i == BG_SA_BEACH_GY) { GraveyardStatus[i] = Attackers; AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], ((Attackers == TEAM_HORDE)? HORDE : ALLIANCE)); } else { GraveyardStatus[i] = ((Attackers == TEAM_HORDE)? TEAM_ALLIANCE : TEAM_HORDE); if (!AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], ((Attackers == TEAM_HORDE)? ALLIANCE : HORDE))) TC_LOG_ERROR("bg.battleground", "SOTA: couldn't spawn GY: %u", i); } } //GY capture points for (uint8 i = BG_SA_CENTRAL_FLAG; i <= BG_SA_LEFT_FLAG; i++) { AddObject(i, (BG_SA_ObjEntries[i] - (Attackers == TEAM_ALLIANCE ? 1 : 0)), BG_SA_ObjSpawnlocs[i][0], BG_SA_ObjSpawnlocs[i][1], BG_SA_ObjSpawnlocs[i][2], BG_SA_ObjSpawnlocs[i][3], 0, 0, 0, 0, RESPAWN_ONE_DAY); GetBGObject(i)->SetUInt32Value(GAMEOBJECT_FIELD_FACTION_TEMPLATE, atF); } for (uint8 i = BG_SA_BOMB; i < BG_SA_MAXOBJ; i++) { AddObject(i, BG_SA_ObjEntries[BG_SA_BOMB], BG_SA_ObjSpawnlocs[i][0], BG_SA_ObjSpawnlocs[i][1], BG_SA_ObjSpawnlocs[i][2], BG_SA_ObjSpawnlocs[i][3], 0, 0, 0, 0, RESPAWN_ONE_DAY); GetBGObject(i)->SetUInt32Value(GAMEOBJECT_FIELD_FACTION_TEMPLATE, atF); } //Player may enter BEFORE we set up BG - lets update his worldstates anyway... UpdateWorldState(BG_SA_RIGHT_GY_HORDE, GraveyardStatus[BG_SA_RIGHT_CAPTURABLE_GY] == TEAM_HORDE ? 1 : 0); UpdateWorldState(BG_SA_LEFT_GY_HORDE, GraveyardStatus[BG_SA_LEFT_CAPTURABLE_GY] == TEAM_HORDE ? 1 : 0); UpdateWorldState(BG_SA_CENTER_GY_HORDE, GraveyardStatus[BG_SA_CENTRAL_CAPTURABLE_GY] == TEAM_HORDE ? 1 : 0); UpdateWorldState(BG_SA_RIGHT_GY_ALLIANCE, GraveyardStatus[BG_SA_RIGHT_CAPTURABLE_GY] == TEAM_ALLIANCE ? 1 : 0); UpdateWorldState(BG_SA_LEFT_GY_ALLIANCE, GraveyardStatus[BG_SA_LEFT_CAPTURABLE_GY] == TEAM_ALLIANCE ? 1 : 0); UpdateWorldState(BG_SA_CENTER_GY_ALLIANCE, GraveyardStatus[BG_SA_CENTRAL_CAPTURABLE_GY] == TEAM_ALLIANCE ? 1 : 0); if (Attackers == TEAM_ALLIANCE) { UpdateWorldState(BG_SA_ALLY_ATTACKS, 1); UpdateWorldState(BG_SA_HORDE_ATTACKS, 0); UpdateWorldState(BG_SA_RIGHT_ATT_TOKEN_ALL, 1); UpdateWorldState(BG_SA_LEFT_ATT_TOKEN_ALL, 1); UpdateWorldState(BG_SA_RIGHT_ATT_TOKEN_HRD, 0); UpdateWorldState(BG_SA_LEFT_ATT_TOKEN_HRD, 0); UpdateWorldState(BG_SA_HORDE_DEFENCE_TOKEN, 1); UpdateWorldState(BG_SA_ALLIANCE_DEFENCE_TOKEN, 0); } else { UpdateWorldState(BG_SA_HORDE_ATTACKS, 1); UpdateWorldState(BG_SA_ALLY_ATTACKS, 0); UpdateWorldState(BG_SA_RIGHT_ATT_TOKEN_ALL, 0); UpdateWorldState(BG_SA_LEFT_ATT_TOKEN_ALL, 0); UpdateWorldState(BG_SA_RIGHT_ATT_TOKEN_HRD, 1); UpdateWorldState(BG_SA_LEFT_ATT_TOKEN_HRD, 1); UpdateWorldState(BG_SA_HORDE_DEFENCE_TOKEN, 0); UpdateWorldState(BG_SA_ALLIANCE_DEFENCE_TOKEN, 1); } UpdateWorldState(BG_SA_PURPLE_GATEWS, 1); UpdateWorldState(BG_SA_RED_GATEWS, 1); UpdateWorldState(BG_SA_BLUE_GATEWS, 1); UpdateWorldState(BG_SA_GREEN_GATEWS, 1); UpdateWorldState(BG_SA_YELLOW_GATEWS, 1); UpdateWorldState(BG_SA_ANCIENT_GATEWS, 1); for (int i = BG_SA_BOAT_ONE; i <= BG_SA_BOAT_TWO; i++) for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(itr->first)) SendTransportInit(player); // set status manually so preparation is cast correctly in 2nd round too SetStatus(STATUS_WAIT_JOIN); TeleportPlayers(); return true; }