int main(int argc, char** argv) { #ifdef WIN32 #ifdef WIN32_WORLD_SERVERONLY if(!EQC::Common::IsRunningOnWindowsServer()) { cout << "EQC Zone Server requires to be running on a Server Platform." << endl; exit(0); } #endif #endif #ifdef _DEBUG _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); #endif if (argc != 5) { cerr << "Usage: zone zone_name address port worldaddress" << endl; exit(0); } char* zone_name = argv[1]; char* address = argv[2]; int32 port = atoi(argv[3]); char* worldaddress = argv[4]; if (strlen(address) <= 0) { cerr << "Invalid address" << endl; exit(0); } if (port <= 0) { cerr << "Bad port specified" << endl; exit(0); } if (strlen(worldaddress) <= 0) { cerr << "Invalid worldaddress" << endl; exit(0); } if (signal(SIGINT, CatchSignal) == SIG_ERR) { cerr << "Could not set signal handler" << endl; return 0; } net.SaveInfo(address, port, worldaddress); #ifdef EQC_SHAREDMEMORY // -Cofruben: Load Shared Memory EQC::Common::PrintF(CP_SHAREDMEMORY, "Loading Shared Memory Core..."); SharedMemory::Load(); EQC::Common::PrintF(CP_GENERIC, "Done.\n"); #else EQC::Common::PrintF(CP_ZONESERVER, "Loading items...\n"); Database::Instance()->LoadItems(); #endif EQC::Common::PrintF(CP_SPELL, "Loading SP DAT...\n"); spells_handler.LoadSpells(SPDat_Location); EQC::Common::PrintF(CP_ZONESERVER, "Loading guild and guild ranks...\n"); zgm.LoadGuilds(); EQC::Common::PrintF(CP_ZONESERVER, "Loading faction data...\n"); Database::Instance()->LoadFactionData(); EQC::Common::PrintF(CP_ZONESERVER, "Loading faction lists...\n"); Database::Instance()->LoadNPCFactionLists(); EQC::Common::PrintF(CP_ZONESERVER, "Loading Corpse decay Timers...\n"); Database::Instance()->GetDecayTimes(npcCorpseDecayTimes); if (!worldserver.Init()) { cerr << "InitWorldServer failed" << endl; } //Yeahlight: Static zone support if(strcmp(zone_name, ".") == 0) { EQC::Common::PrintF(CP_ZONESERVER, "Entering sleep mode.\n"); } else if(!Zone::Bootup(zone_name)) { EQC::Common::PrintF(CP_ZONESERVER, "%s boot FAILED!\n", zone_name); } else { EQC::Common::PrintF(CP_ZONESERVER, "%s boot was successful.\n", zone_name); } Timer InterserverTimer(INTERSERVER_TIMER); // does MySQL pings and auto-reconnect net.StartProcessLoop(); MNetLoop.lock(); while(RunLoops) { Timer::SetCurrentTime(); if (ZoneLoaded) { net.ListenNewClients(); client_list.SendPacketQueues(); } if (InterserverTimer.Check()) { InterserverTimer.Start(); Database::Instance()->PingMySQL(); entity_list.UpdateWho(); } MNetLoop.unlock(); Sleep(1); MNetLoop.lock(); } MNetLoop.unlock(); if (zone != 0) Zone::Shutdown(true); while (WorldLoopRunning || ProcessLoopRunning) { Sleep(1); } #ifdef EQC_SHAREDMEMORY // -Cofruben: Unload Shared Memory. SharedMemory::Unload(); #endif return 0; }