Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * This program is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program. If not, see <http://www.gnu.org/licenses/>.
- */
- package net.sf.l2j.gameserver;
- import com.lameguard.LameGuard;
- import java.io.File;
- import java.io.IOException;
- import java.net.InetAddress;
- import java.net.UnknownHostException;
- import java.util.Calendar;
- import net.sf.l2j.commons.config.Config;
- import net.sf.l2j.commons.db.DatabaseFactory;
- import net.sf.l2j.commons.nio.SelectorConfig;
- import net.sf.l2j.commons.nio.SelectorThread;
- import net.sf.l2j.commons.type.Server;
- import net.sf.l2j.commons.util.DatabaseOptimizer;
- import net.sf.l2j.commons.util.DeadLockDetector;
- import net.sf.l2j.commons.util.IPv4Filter;
- import net.sf.l2j.commons.util.L2TopDeamon;
- import net.sf.l2j.commons.util.MMOTopDeamon;
- import net.sf.l2j.commons.util.Util;
- import net.sf.l2j.commons.util.security.AntiAfk;
- import net.sf.l2j.commons.util.security.AntiBot;
- import net.sf.l2j.gameserver.ai.L2AttackableAIScript;
- import net.sf.l2j.gameserver.cache.CrestCache;
- import net.sf.l2j.gameserver.cache.HtmCache;
- import net.sf.l2j.gameserver.communitybbs.Manager.ForumsBBSManager;
- import net.sf.l2j.gameserver.datatables.AccessLevels;
- import net.sf.l2j.gameserver.datatables.AdminCommandAccessRights;
- import net.sf.l2j.gameserver.datatables.ArmorSetsTable;
- import net.sf.l2j.gameserver.datatables.AugmentationData;
- import net.sf.l2j.gameserver.datatables.BookmarkTable;
- import net.sf.l2j.gameserver.datatables.BuyListTable;
- import net.sf.l2j.gameserver.datatables.CharNameTable;
- import net.sf.l2j.gameserver.datatables.CharTemplateTable;
- import net.sf.l2j.gameserver.datatables.ClanTable;
- import net.sf.l2j.gameserver.datatables.DoorTable;
- import net.sf.l2j.gameserver.datatables.FishTable;
- import net.sf.l2j.gameserver.datatables.GmListTable;
- import net.sf.l2j.gameserver.datatables.HelperBuffTable;
- import net.sf.l2j.gameserver.datatables.HennaTable;
- import net.sf.l2j.gameserver.datatables.HerbDropTable;
- import net.sf.l2j.gameserver.datatables.ItemTable;
- import net.sf.l2j.gameserver.datatables.MapRegionTable;
- import net.sf.l2j.gameserver.datatables.MultisellData;
- import net.sf.l2j.gameserver.datatables.NpcTable;
- import net.sf.l2j.gameserver.datatables.NpcWalkerRoutesTable;
- import net.sf.l2j.gameserver.datatables.OfflineTradersTable;
- import net.sf.l2j.gameserver.datatables.PetDataTable;
- import net.sf.l2j.gameserver.datatables.RecipeTable;
- import net.sf.l2j.gameserver.datatables.SkillTable;
- import net.sf.l2j.gameserver.datatables.SkillTreeTable;
- import net.sf.l2j.gameserver.datatables.SoulCrystalsTable;
- import net.sf.l2j.gameserver.datatables.SpawnTable;
- import net.sf.l2j.gameserver.datatables.SpellbookTable;
- import net.sf.l2j.gameserver.datatables.StaticObjects;
- import net.sf.l2j.gameserver.datatables.SummonItemsData;
- import net.sf.l2j.gameserver.datatables.TeleportLocationTable;
- import net.sf.l2j.gameserver.handler.HandlerLoader;
- import net.sf.l2j.gameserver.handler.admin.AdminCommandHandler;
- import net.sf.l2j.gameserver.handler.auto.AutoAnnouncementHandler;
- import net.sf.l2j.gameserver.handler.chat.ChatHandler;
- import net.sf.l2j.gameserver.handler.item.ItemHandler;
- import net.sf.l2j.gameserver.handler.skill.SkillHandler;
- import net.sf.l2j.gameserver.handler.user.UserCommandHandler;
- import net.sf.l2j.gameserver.handler.voiced.VoicedCommandHandler;
- import net.sf.l2j.gameserver.idfactory.IdFactory;
- import net.sf.l2j.gameserver.instancemanager.AuctionManager;
- import net.sf.l2j.gameserver.instancemanager.AutoSpawnManager;
- import net.sf.l2j.gameserver.instancemanager.BoatManager;
- import net.sf.l2j.gameserver.instancemanager.CastleManager;
- import net.sf.l2j.gameserver.instancemanager.CastleManorManager;
- import net.sf.l2j.gameserver.instancemanager.ClanHallManager;
- import net.sf.l2j.gameserver.instancemanager.CoupleManager;
- import net.sf.l2j.gameserver.instancemanager.CursedWeaponsManager;
- import net.sf.l2j.gameserver.instancemanager.DayNightSpawnManager;
- import net.sf.l2j.gameserver.instancemanager.DimensionalRiftManager;
- import net.sf.l2j.gameserver.instancemanager.FishingChampionshipManager;
- import net.sf.l2j.gameserver.instancemanager.FourSepulchersManager;
- import net.sf.l2j.gameserver.instancemanager.GrandBossManager;
- import net.sf.l2j.gameserver.instancemanager.ItemsOnGroundManager;
- import net.sf.l2j.gameserver.instancemanager.MercTicketManager;
- import net.sf.l2j.gameserver.instancemanager.MovieMakerManager;
- import net.sf.l2j.gameserver.instancemanager.PetitionManager;
- import net.sf.l2j.gameserver.instancemanager.PremiumManager;
- import net.sf.l2j.gameserver.instancemanager.QuestManager;
- import net.sf.l2j.gameserver.instancemanager.RaidBossPointsManager;
- import net.sf.l2j.gameserver.instancemanager.RaidBossSpawnManager;
- import net.sf.l2j.gameserver.instancemanager.SevenSigns;
- import net.sf.l2j.gameserver.instancemanager.SevenSignsFestival;
- import net.sf.l2j.gameserver.instancemanager.SiegeManager;
- import net.sf.l2j.gameserver.instancemanager.SiegeReward;
- import net.sf.l2j.gameserver.instancemanager.ZoneManager;
- import net.sf.l2j.gameserver.instancemanager.games.MonsterRace;
- import net.sf.l2j.gameserver.model.L2Manor;
- import net.sf.l2j.gameserver.model.L2World;
- import net.sf.l2j.gameserver.model.entity.Hero;
- import net.sf.l2j.gameserver.model.entity.events.EventManager;
- import net.sf.l2j.gameserver.model.entity.medals.EventMedals;
- import net.sf.l2j.gameserver.model.entity.pcbang.PcPoint;
- import net.sf.l2j.gameserver.model.entity.pcbang.ServerOnline;
- import net.sf.l2j.gameserver.model.olympiad.Olympiad;
- import net.sf.l2j.gameserver.model.olympiad.OlympiadGameManager;
- import net.sf.l2j.gameserver.model.partymatching.PartyMatchRoomList;
- import net.sf.l2j.gameserver.model.partymatching.PartyMatchWaitingList;
- import net.sf.l2j.gameserver.network.L2GameClient;
- import net.sf.l2j.gameserver.network.L2GamePacketHandler;
- import net.sf.l2j.gameserver.network.components.Message;
- import net.sf.l2j.gameserver.pathfinding.PathFinding;
- import net.sf.l2j.gameserver.scripting.L2ScriptEngineManager;
- import net.sf.l2j.gameserver.scripting.L2ScriptLoader;
- import net.sf.l2j.gameserver.taskmanager.ItemsAutoDestroyTaskManager;
- import net.sf.l2j.gameserver.taskmanager.KnownListUpdateTaskManager;
- import net.sf.l2j.gameserver.taskmanager.TaskManager;
- import net.sf.l2j.gameserver.taskmanager.tasks.TaskPremium;
- import net.sf.l2j.gameserver.xmlfactory.XMLDocumentFactory;
- import net.sf.l2j.protection.CatsGuard;
- import net.sf.l2j.protection.ProtectionProperties;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- public class GameServer
- {
- private static final Logger _log = LoggerFactory.getLogger(GameServer.class.getName());
- private final SelectorThread<L2GameClient> _selectorThread;
- private final L2GamePacketHandler _gamePacketHandler;
- private final DeadLockDetector _deadDetectThread;
- public static GameServer gameServer;
- private final LoginServerThread _loginThread;
- public static final Calendar dateTimeServerStarted = Calendar.getInstance();
- long serverLoadStart = System.currentTimeMillis();
- public long getUsedMemoryMB()
- {
- return (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1048576; // 1024 * 1024 = 1048576;
- }
- public SelectorThread<L2GameClient> getSelectorThread()
- {
- return _selectorThread;
- }
- public GameServer() throws Throwable
- {
- gameServer = this;
- IdFactory.getInstance();
- ThreadPoolManager.getInstance();
- new File("./data/crests").mkdirs();
- Util.printSection("World");
- GameTimeController.getInstance();
- L2World.getInstance();
- MapRegionTable.getInstance();
- Announcements.getInstance();
- BookmarkTable.getInstance();
- Util.printSection("Skills");
- SkillTable.getInstance();
- SkillTreeTable.getInstance();
- Util.printSection("Items");
- if (Config.PREMIUM_ITEM_ENABLED)
- {
- PremiumManager.getInstance();
- }
- ItemTable.getInstance();
- SummonItemsData.getInstance();
- BuyListTable.getInstance();
- MultisellData.getInstance();
- RecipeTable.getInstance();
- ArmorSetsTable.getInstance();
- FishTable.getInstance();
- SpellbookTable.getInstance();
- SoulCrystalsTable.load();
- Util.printSection("Augments");
- AugmentationData.getInstance();
- Util.printSection("Characters");
- AccessLevels.getInstance();
- AdminCommandAccessRights.getInstance();
- CharTemplateTable.getInstance();
- CharNameTable.getInstance();
- GmListTable.getInstance();
- RaidBossPointsManager.getInstance();
- Util.printSection("Community server");
- if (Config.ENABLE_COMMUNITY_BOARD)
- {
- ForumsBBSManager.getInstance().initRoot();
- }
- else
- {
- _log.info("Community server is disabled.");
- }
- Util.printSection("Cache");
- HtmCache.getInstance();
- Message.getInstance();
- CrestCache.load();
- TeleportLocationTable.getInstance();
- PartyMatchWaitingList.getInstance();
- PartyMatchRoomList.getInstance();
- PetitionManager.getInstance();
- HennaTable.getInstance();
- HelperBuffTable.getInstance();
- CursedWeaponsManager.getInstance();
- Util.printSection("Clans");
- ClanTable.getInstance();
- AuctionManager.getInstance();
- ClanHallManager.getInstance();
- Util.printSection("Geodata");
- GeoData.getInstance();
- if (Config.GEODATA == 2)
- {
- PathFinding.getInstance();
- }
- Util.printSection("World Bosses");
- GrandBossManager.getInstance();
- Util.printSection("Zones");
- ZoneManager.getInstance();
- GrandBossManager.getInstance().initZones();
- Util.printSection("Castles");
- CastleManager.getInstance().load();
- Util.printSection("Seven Signs");
- SevenSigns.getInstance().spawnSevenSignsNPC();
- SevenSignsFestival.getInstance();
- Util.printSection("Sieges");
- SiegeManager.getInstance();
- SiegeManager.getSieges();
- SiegeReward.getInstance();
- MercTicketManager.getInstance();
- Util.printSection("Manor Manager");
- CastleManorManager.getInstance();
- L2Manor.getInstance();
- Util.printSection("NPCs");
- HerbDropTable.getInstance();
- PetDataTable.getInstance();
- NpcTable.getInstance();
- NpcWalkerRoutesTable.getInstance();
- DoorTable.getInstance();
- StaticObjects.load();
- SpawnTable.getInstance();
- RaidBossSpawnManager.getInstance();
- DayNightSpawnManager.getInstance().trim().notifyChangeMode();
- DimensionalRiftManager.getInstance();
- Util.printSection("Olympiads & Heroes");
- OlympiadGameManager.getInstance();
- Olympiad.getInstance();
- Hero.getInstance();
- Util.printSection("Four Sepulchers");
- FourSepulchersManager.getInstance().init();
- Util.printSection("Quests & Scripts");
- QuestManager.getInstance();
- BoatManager.getInstance();
- L2AttackableAIScript.init();
- if (!Config.ALT_DEV_NO_SCRIPTS)
- {
- L2ScriptLoader.init(); // init compiled scripts loader
- try
- {
- File scripts = new File("./data/scripts.cfg");
- L2ScriptEngineManager.getInstance().executeScriptList(scripts);
- }
- catch (IOException ioe)
- {
- _log.error("Failed loading scripts.cfg, no script going to be loaded");
- }
- QuestManager.getInstance().report();
- }
- else
- {
- _log.info("QuestManager: Skipping scripts.");
- }
- Util.printSection("Handlers");
- HandlerLoader.init();
- _log.info("AdminCommandHandler: Loaded " + AdminCommandHandler.getInstance().size() + " handlers.");
- _log.info("AutoSpawnHandler: Loaded " + AutoSpawnManager.getInstance().size() + " handlers.");
- _log.info("AutoAnnouncementHandler: Loaded " + AutoAnnouncementHandler.getInstance().size() + " handlers.");
- _log.info("ChatHandler: Loaded " + ChatHandler.getInstance().size() + " handlers.");
- _log.info("ItemHandler: Loaded " + ItemHandler.getInstance().size() + " handlers.");
- _log.info("SkillHandler: Loaded " + SkillHandler.getInstance().size() + " handlers.");
- _log.info("UserCommandHandler: Loaded " + UserCommandHandler.getInstance().size() + " handlers.");
- _log.info("VoicedCommandHandler: Loaded " + VoicedCommandHandler.getInstance().size() + " handlers.");
- if (Config.SAVE_DROPPED_ITEM)
- {
- ItemsOnGroundManager.getInstance();
- }
- if (Config.ITEM_AUTO_DESTROY_TIME > 0 || Config.HERB_AUTO_DESTROY_TIME > 0)
- {
- ItemsAutoDestroyTaskManager.getInstance();
- }
- if (Config.PREMIUM_ITEM_ENABLED)
- {
- TaskPremium.getInstance();
- }
- Util.printSection("Monster Derby Track");
- MonsterRace.getInstance();
- Util.printSection("Guard System");
- CatsGuard.getInstance();
- if (!CatsGuard.getInstance().isEnabled())
- {
- try
- {
- Class<?> clazz = Class.forName("com.lameguard.LameGuard");
- if (clazz != null)
- {
- File f = new File("./lameguard/lameguard.properties");
- if (f.exists())
- {
- Util.printSection("LameGuard");
- LameGuard.main(new String[]
- {
- "net.sf.l2j.protection.LameStub"
- });
- }
- }
- }
- catch (Exception ignored)
- {
- }
- }
- if (Config.ALLOW_SEQURITY_QUE)
- {
- AntiBot.getInstance();
- }
- if (Config.ALLOW_ANTI_AFK)
- {
- AntiAfk.getInstance();
- }
- Util.printSection("Events");
- EventManager.getInstance();
- EventMedals.startEvent();
- if (Config.ALLOW_WEDDING)
- {
- CoupleManager.getInstance();
- }
- if (Config.ALT_FISH_CHAMPIONSHIP_ENABLED)
- {
- FishingChampionshipManager.getInstance();
- }
- if (Config.PCB_ENABLE)
- {
- ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(PcPoint.getInstance(), Config.PCB_INTERVAL * 1000, Config.PCB_INTERVAL * 1000);
- }
- else if (Config.PCB_WINDOW_ONLINE)
- {
- ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(ServerOnline.getInstance(), Config.PCB_LIKE_WINDOW_ONLINE_RATE * 1000, Config.PCB_LIKE_WINDOW_ONLINE_RATE * 1000);
- }
- if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS)
- {
- OfflineTradersTable.restoreOfflineTraders();
- }
- L2TopDeamon.getInstance();
- MMOTopDeamon.getInstance();
- Util.printSection("System");
- TaskManager.getInstance();
- Runtime.getRuntime().addShutdownHook(Shutdown.getInstance());
- ForumsBBSManager.getInstance();
- _log.info("IdFactory: Free ObjectIDs remaining: " + IdFactory.getInstance().size());
- KnownListUpdateTaskManager.getInstance();
- MovieMakerManager.getInstance();
- if (Config.DEADLOCK_DETECTOR)
- {
- _log.info("Deadlock detector is enabled. Timer: " + Config.DEADLOCK_CHECK_INTERVAL + "s.");
- _deadDetectThread = new DeadLockDetector();
- _deadDetectThread.setDaemon(true);
- _deadDetectThread.start();
- }
- else
- {
- _log.info("Deadlock detector is disabled.");
- _deadDetectThread = null;
- }
- System.gc();
- long usedMem = (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1048576;
- long totalMem = Runtime.getRuntime().maxMemory() / 1048576;
- _log.info("Gameserver have started, used memory: " + usedMem + " / " + totalMem + " Mo.");
- Util.printSection("Info");
- _log.info("Maximum allowed players: " + Config.MAXIMUM_ONLINE_USERS);
- _log.info("Server loaded in " + (System.currentTimeMillis() - serverLoadStart) / 1000 + " seconds");
- Util.printSection("Login");
- _loginThread = LoginServerThread.getInstance();
- _loginThread.start();
- final SelectorConfig sc = new SelectorConfig();
- sc.MAX_READ_PER_PASS = Config.MMO_MAX_READ_PER_PASS;
- sc.MAX_SEND_PER_PASS = Config.MMO_MAX_SEND_PER_PASS;
- sc.SLEEP_TIME = Config.MMO_SELECTOR_SLEEP_TIME;
- sc.HELPER_BUFFER_COUNT = Config.MMO_HELPER_BUFFER_COUNT;
- _gamePacketHandler = new L2GamePacketHandler();
- _selectorThread = new SelectorThread<>(sc, _gamePacketHandler, _gamePacketHandler, _gamePacketHandler, new IPv4Filter());
- InetAddress bindAddress = null;
- if (!Config.GAMESERVER_HOSTNAME.equals("*"))
- {
- try
- {
- bindAddress = InetAddress.getByName(Config.GAMESERVER_HOSTNAME);
- }
- catch (UnknownHostException e1)
- {
- _log.warn("WARNING: The GameServer bind address is invalid, using all available IPs. Reason: " + e1.getMessage(), e1);
- }
- }
- try
- {
- _selectorThread.openServerSocket(bindAddress, Config.PORT_GAME);
- }
- catch (IOException e)
- {
- _log.warn("FATAL: Failed to open server socket. Reason: " + e.getMessage(), e);
- System.exit(1);
- }
- _selectorThread.start();
- }
- public static void main(String[] args) throws Throwable
- {
- Server.serverMode = Server.MODE_GAMESERVER;
- final String LOG_FOLDER = "./log"; // Name of folder for log file
- // Create log folder
- File logFolder = new File(LOG_FOLDER);
- logFolder.mkdir();
- Util.printSection("Fatum");
- // Initialize config
- Config.load();
- ProtectionProperties.init();
- // Factories
- XMLDocumentFactory.getInstance();
- DatabaseFactory.getInstance();
- DatabaseOptimizer.getInstance();
- gameServer = new GameServer();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement