void __cdecl EQSpawnService(bool Broadcast, unsigned int MSG, void *lpData) { switch (MSG) { #define pNewSpawn ((PSPAWNINFO)lpData) case SPAWNSERVICE_ADDSPAWN: if (Update && pNewSpawn->SpawnID != 0 && GetCharInfo()->pSpawn != pNewSpawn) { DebugSpewAlways("MQ2Map::OnAddSpawn(%s)", pNewSpawn->Name); AddSpawn(pNewSpawn); } break; case SPAWNSERVICE_REMOVESPAWN: DebugSpewAlways("MQ2Map::OnRemoveSpawn(%s)", pNewSpawn->Name); if (Update) RemoveSpawn(pNewSpawn); break; #undef pNewSpawn #define pGroundItem ((PGROUNDITEM)lpData) case SPAWNSERVICE_ADDITEM: DebugSpewAlways("MQ2Map::OnAddGroundItem(%d)", pGroundItem->DropID); if (Update) AddGroundItem(pGroundItem); break; case SPAWNSERVICE_REMOVEITEM: DebugSpewAlways("MQ2Map::OnRemoveGroundItem(%d)", pGroundItem->DropID); if (Update) RemoveGroundItem(pGroundItem); break; #undef pGroundItem } }
int GameServer::OnCreate() { int rc = 0; rc = _clientAcceptor.Create(ServerCfg->GetStr("Server", "IP"), ServerCfg->GetInt("Server", "Port"), SESSION_CLIENT, MAX_NUMOF_GAME_CLIENT, 5, 2, MAX_NUMOF_GAME_CLIENT); if (0 != rc) { return rc; } rc = _network.Associate(&_clientAcceptor, true); if (0 != rc) { return rc; } _charManager = new CharacterManager(); _charManager->Init(); _objManager = new ObjectManager(); _objManager->Init(); ServerDB = new Database(); if (!ServerDB->Connect( ServerCfg->GetStr("MySQL", "Host"), ServerCfg->GetStr("MySQL", "Database"), ServerCfg->GetStr("MySQL", "User"), ServerCfg->GetStr("MySQL", "Password"), ServerCfg->GetInt("MySQL", "Port"))) return 2;//ERR_DBSERVER_CONNECT pcTblData = new PCTable(); if (pcTblData->Load("..\\Tables\\table_pc_data.edf") != 0) { Logger::Log("Failed to load PC Table!\n"); return 3;//ERR_LOADTABLE } npcspawnTblData = new SpawnTable(); if (npcspawnTblData->Load("..\\Tables\\spawn_npc_main_world.edf") != 0) { Logger::Log("Failed to load NPC Spawn Table!\n"); return 3;//ERR_LOADTABLE } this->ServerID = ServerCfg->GetInt("Server", "ID"); m_uiSerialID = INVALID_DWORD; Logger::Log("Loading %u NPC Spawns... please wait!\n", npcspawnTblData->GetCount()); for (int i = 1; i < (npcspawnTblData->GetCount() + 1); ++i) { AddSpawn(npcspawnTblData->GetData(i), OBJTYPE_NPC); } Logger::Log("Loaded %u NPC Spawns!\n", npcspawnTblData->GetCount()); ServerDB->ExecuteQuery("CALL `spClearOnline`('%u');", ServerID); return 0; }