GameServer.java 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698
  1. /*
  2. * This program is free software; you can redistribute it and/or modify
  3. * it under the terms of the GNU General Public License as published by
  4. * the Free Software Foundation; either version 2, or (at your option)
  5. * any later version.
  6. *
  7. * This program is distributed in the hope that it will be useful,
  8. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. * GNU General Public License for more details.
  11. *
  12. * You should have received a copy of the GNU General Public License
  13. * along with this program; if not, write to the Free Software
  14. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  15. * 02111-1307, USA.
  16. *
  17. * http://www.gnu.org/copyleft/gpl.html
  18. */
  19. package net.sf.l2j.gameserver;
  20. import java.io.File;
  21. import java.io.FileInputStream;
  22. import java.io.InputStream;
  23. import java.util.Calendar;
  24. import java.util.logging.Level;
  25. import java.util.logging.LogManager;
  26. import java.util.logging.Logger;
  27. import net.sf.l2j.Config;
  28. import net.sf.l2j.L2DatabaseFactory;
  29. import net.sf.l2j.Server;
  30. import net.sf.l2j.gameserver.cache.CrestCache;
  31. import net.sf.l2j.gameserver.cache.HtmCache;
  32. import net.sf.l2j.gameserver.communitybbs.Manager.ForumsBBSManager;
  33. import net.sf.l2j.gameserver.datatables.ArmorSetsTable;
  34. import net.sf.l2j.gameserver.datatables.AugmentationData;
  35. import net.sf.l2j.gameserver.datatables.CharNameTable;
  36. import net.sf.l2j.gameserver.datatables.CharTemplateTable;
  37. import net.sf.l2j.gameserver.datatables.ClanTable;
  38. import net.sf.l2j.gameserver.datatables.DoorTable;
  39. import net.sf.l2j.gameserver.datatables.EventDroplist;
  40. import net.sf.l2j.gameserver.datatables.ExtractableItemsData;
  41. import net.sf.l2j.gameserver.datatables.FishTable;
  42. import net.sf.l2j.gameserver.datatables.HelperBuffTable;
  43. import net.sf.l2j.gameserver.datatables.HennaTable;
  44. import net.sf.l2j.gameserver.datatables.HennaTreeTable;
  45. import net.sf.l2j.gameserver.datatables.HeroSkillTable;
  46. import net.sf.l2j.gameserver.datatables.ItemTable;
  47. import net.sf.l2j.gameserver.datatables.LevelUpData;
  48. import net.sf.l2j.gameserver.datatables.MapRegionTable;
  49. import net.sf.l2j.gameserver.datatables.NobleSkillTable;
  50. import net.sf.l2j.gameserver.datatables.NpcTable;
  51. import net.sf.l2j.gameserver.datatables.NpcWalkerRoutesTable;
  52. import net.sf.l2j.gameserver.datatables.SkillSpellbookTable;
  53. import net.sf.l2j.gameserver.datatables.SkillTable;
  54. import net.sf.l2j.gameserver.datatables.SkillTreeTable;
  55. import net.sf.l2j.gameserver.datatables.SpawnTable;
  56. import net.sf.l2j.gameserver.datatables.StaticObjects;
  57. import net.sf.l2j.gameserver.datatables.SummonItemsData;
  58. import net.sf.l2j.gameserver.datatables.TeleportLocationTable;
  59. import net.sf.l2j.gameserver.datatables.ZoneData;
  60. import net.sf.l2j.gameserver.geoeditorcon.GeoEditorListener;
  61. import net.sf.l2j.gameserver.handler.AdminCommandHandler;
  62. import net.sf.l2j.gameserver.handler.ItemHandler;
  63. import net.sf.l2j.gameserver.handler.SkillHandler;
  64. import net.sf.l2j.gameserver.handler.UserCommandHandler;
  65. import net.sf.l2j.gameserver.handler.VoicedCommandHandler;
  66. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminAdmin;
  67. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminAnnouncements;
  68. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminBBS;
  69. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminBan;
  70. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminBanChat;
  71. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminCache;
  72. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminChangeAccessLevel;
  73. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminCreateItem;
  74. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminCursedWeapons;
  75. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminDelete;
  76. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminDoorControl;
  77. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminEditChar;
  78. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminEditNpc;
  79. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminEffects;
  80. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminEnchant;
  81. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminEventEngine;
  82. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminExpSp;
  83. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminFightCalculator;
  84. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminGeoEditor;
  85. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminGeodata;
  86. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminGm;
  87. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminGmChat;
  88. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminHeal;
  89. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminHelpPage;
  90. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminInvul;
  91. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminKick;
  92. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminKill;
  93. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminLevel;
  94. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminLogin;
  95. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminMammon;
  96. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminManor;
  97. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminMenu;
  98. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminMobGroup;
  99. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminMonsterRace;
  100. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminPForge;
  101. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminPathNode;
  102. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminPetition;
  103. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminPledge;
  104. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminPolymorph;
  105. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminQuest;
  106. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminRepairChar;
  107. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminRes;
  108. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminRideWyvern;
  109. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminShop;
  110. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminShutdown;
  111. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminSiege;
  112. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminSkill;
  113. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminSpawn;
  114. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminTarget;
  115. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminTeleport;
  116. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminTest;
  117. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminTvTEvent;
  118. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminUnblockIp;
  119. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminZone;
  120. import net.sf.l2j.gameserver.handler.itemhandlers.BeastSoulShot;
  121. import net.sf.l2j.gameserver.handler.itemhandlers.BeastSpice;
  122. import net.sf.l2j.gameserver.handler.itemhandlers.BeastSpiritShot;
  123. import net.sf.l2j.gameserver.handler.itemhandlers.BlessedSpiritShot;
  124. import net.sf.l2j.gameserver.handler.itemhandlers.Book;
  125. import net.sf.l2j.gameserver.handler.itemhandlers.CharChangePotions;
  126. import net.sf.l2j.gameserver.handler.itemhandlers.ChestKey;
  127. import net.sf.l2j.gameserver.handler.itemhandlers.CrystalCarol;
  128. import net.sf.l2j.gameserver.handler.itemhandlers.EnchantScrolls;
  129. import net.sf.l2j.gameserver.handler.itemhandlers.EnergyStone;
  130. import net.sf.l2j.gameserver.handler.itemhandlers.ExtractableItems;
  131. import net.sf.l2j.gameserver.handler.itemhandlers.Firework;
  132. import net.sf.l2j.gameserver.handler.itemhandlers.FishShots;
  133. import net.sf.l2j.gameserver.handler.itemhandlers.Harvester;
  134. import net.sf.l2j.gameserver.handler.itemhandlers.MercTicket;
  135. import net.sf.l2j.gameserver.handler.itemhandlers.MysteryPotion;
  136. import net.sf.l2j.gameserver.handler.itemhandlers.PaganKeys;
  137. import net.sf.l2j.gameserver.handler.itemhandlers.Potions;
  138. import net.sf.l2j.gameserver.handler.itemhandlers.Recipes;
  139. import net.sf.l2j.gameserver.handler.itemhandlers.Remedy;
  140. import net.sf.l2j.gameserver.handler.itemhandlers.RollingDice;
  141. import net.sf.l2j.gameserver.handler.itemhandlers.ScrollOfEscape;
  142. import net.sf.l2j.gameserver.handler.itemhandlers.ScrollOfResurrection;
  143. import net.sf.l2j.gameserver.handler.itemhandlers.Scrolls;
  144. import net.sf.l2j.gameserver.handler.itemhandlers.Seed;
  145. import net.sf.l2j.gameserver.handler.itemhandlers.SevenSignsRecord;
  146. import net.sf.l2j.gameserver.handler.itemhandlers.SoulCrystals;
  147. import net.sf.l2j.gameserver.handler.itemhandlers.SoulShots;
  148. import net.sf.l2j.gameserver.handler.itemhandlers.SpecialXMas;
  149. import net.sf.l2j.gameserver.handler.itemhandlers.SpiritShot;
  150. import net.sf.l2j.gameserver.handler.itemhandlers.SummonItems;
  151. import net.sf.l2j.gameserver.handler.itemhandlers.Maps;
  152. import net.sf.l2j.gameserver.handler.skillhandlers.BalanceLife;
  153. import net.sf.l2j.gameserver.handler.skillhandlers.BeastFeed;
  154. import net.sf.l2j.gameserver.handler.skillhandlers.Blow;
  155. import net.sf.l2j.gameserver.handler.skillhandlers.Charge;
  156. import net.sf.l2j.gameserver.handler.skillhandlers.CombatPointHeal;
  157. import net.sf.l2j.gameserver.handler.skillhandlers.Continuous;
  158. import net.sf.l2j.gameserver.handler.skillhandlers.CpDam;
  159. import net.sf.l2j.gameserver.handler.skillhandlers.Craft;
  160. import net.sf.l2j.gameserver.handler.skillhandlers.DeluxeKey;
  161. import net.sf.l2j.gameserver.handler.skillhandlers.Disablers;
  162. import net.sf.l2j.gameserver.handler.skillhandlers.DrainSoul;
  163. import net.sf.l2j.gameserver.handler.skillhandlers.Fishing;
  164. import net.sf.l2j.gameserver.handler.skillhandlers.FishingSkill;
  165. import net.sf.l2j.gameserver.handler.skillhandlers.GetPlayer;
  166. import net.sf.l2j.gameserver.handler.skillhandlers.Harvest;
  167. import net.sf.l2j.gameserver.handler.skillhandlers.Heal;
  168. import net.sf.l2j.gameserver.handler.skillhandlers.ManaHeal;
  169. import net.sf.l2j.gameserver.handler.skillhandlers.Manadam;
  170. import net.sf.l2j.gameserver.handler.skillhandlers.Mdam;
  171. import net.sf.l2j.gameserver.handler.skillhandlers.Pdam;
  172. import net.sf.l2j.gameserver.handler.skillhandlers.Recall;
  173. import net.sf.l2j.gameserver.handler.skillhandlers.Resurrect;
  174. import net.sf.l2j.gameserver.handler.skillhandlers.SiegeFlag;
  175. import net.sf.l2j.gameserver.handler.skillhandlers.Signets;
  176. import net.sf.l2j.gameserver.handler.skillhandlers.Sow;
  177. import net.sf.l2j.gameserver.handler.skillhandlers.Spoil;
  178. import net.sf.l2j.gameserver.handler.skillhandlers.StrSiegeAssault;
  179. import net.sf.l2j.gameserver.handler.skillhandlers.SummonFriend;
  180. import net.sf.l2j.gameserver.handler.skillhandlers.SummonTreasureKey;
  181. import net.sf.l2j.gameserver.handler.skillhandlers.Sweep;
  182. import net.sf.l2j.gameserver.handler.skillhandlers.TakeCastle;
  183. import net.sf.l2j.gameserver.handler.skillhandlers.Unlock;
  184. import net.sf.l2j.gameserver.handler.usercommandhandlers.ChannelDelete;
  185. import net.sf.l2j.gameserver.handler.usercommandhandlers.ChannelLeave;
  186. import net.sf.l2j.gameserver.handler.usercommandhandlers.ChannelListUpdate;
  187. import net.sf.l2j.gameserver.handler.usercommandhandlers.ClanPenalty;
  188. import net.sf.l2j.gameserver.handler.usercommandhandlers.ClanWarsList;
  189. import net.sf.l2j.gameserver.handler.usercommandhandlers.DisMount;
  190. import net.sf.l2j.gameserver.handler.usercommandhandlers.Escape;
  191. import net.sf.l2j.gameserver.handler.usercommandhandlers.Loc;
  192. import net.sf.l2j.gameserver.handler.usercommandhandlers.Mount;
  193. import net.sf.l2j.gameserver.handler.usercommandhandlers.OlympiadStat;
  194. import net.sf.l2j.gameserver.handler.usercommandhandlers.PartyInfo;
  195. import net.sf.l2j.gameserver.handler.usercommandhandlers.Time;
  196. import net.sf.l2j.gameserver.handler.voicedcommandhandlers.Wedding;
  197. import net.sf.l2j.gameserver.handler.voicedcommandhandlers.stats;
  198. import net.sf.l2j.gameserver.idfactory.IdFactory;
  199. import net.sf.l2j.gameserver.instancemanager.AuctionManager;
  200. import net.sf.l2j.gameserver.instancemanager.BoatManager;
  201. import net.sf.l2j.gameserver.instancemanager.CastleManager;
  202. import net.sf.l2j.gameserver.instancemanager.CastleManorManager;
  203. import net.sf.l2j.gameserver.instancemanager.ClanHallManager;
  204. import net.sf.l2j.gameserver.instancemanager.CoupleManager;
  205. import net.sf.l2j.gameserver.instancemanager.CursedWeaponsManager;
  206. import net.sf.l2j.gameserver.instancemanager.DayNightSpawnManager;
  207. import net.sf.l2j.gameserver.instancemanager.DimensionalRiftManager;
  208. import net.sf.l2j.gameserver.instancemanager.ItemsOnGroundManager;
  209. import net.sf.l2j.gameserver.instancemanager.MercTicketManager;
  210. import net.sf.l2j.gameserver.instancemanager.PetitionManager;
  211. import net.sf.l2j.gameserver.instancemanager.QuestManager;
  212. import net.sf.l2j.gameserver.instancemanager.RaidBossSpawnManager;
  213. import net.sf.l2j.gameserver.instancemanager.SiegeManager;
  214. import net.sf.l2j.gameserver.model.AutoChatHandler;
  215. import net.sf.l2j.gameserver.model.AutoSpawnHandler;
  216. import net.sf.l2j.gameserver.model.L2Manor;
  217. import net.sf.l2j.gameserver.model.L2PetDataTable;
  218. import net.sf.l2j.gameserver.model.L2World;
  219. import net.sf.l2j.gameserver.model.entity.Hero;
  220. import net.sf.l2j.gameserver.model.entity.TvTManager;
  221. import net.sf.l2j.gameserver.network.L2GameClient;
  222. import net.sf.l2j.gameserver.network.L2GamePacketHandler;
  223. import net.sf.l2j.gameserver.pathfinding.geonodes.GeoPathFinding;
  224. import net.sf.l2j.gameserver.script.faenor.FaenorScriptEngine;
  225. import net.sf.l2j.gameserver.taskmanager.TaskManager;
  226. import net.sf.l2j.gameserver.util.DynamicExtension;
  227. import net.sf.l2j.gameserver.util.FloodProtector;
  228. import net.sf.l2j.status.Status;
  229. import com.l2jserver.mmocore.network.SelectorServerConfig;
  230. import com.l2jserver.mmocore.network.SelectorThread;
  231. /**
  232. * This class ...
  233. *
  234. * @version $Revision: 1.29.2.15.2.19 $ $Date: 2005/04/05 19:41:23 $
  235. */
  236. public class GameServer
  237. {
  238. private static final Logger _log = Logger.getLogger(GameServer.class.getName());
  239. private final SelectorThread<L2GameClient> _selectorThread;
  240. private final SkillTable _skillTable;
  241. private final ItemTable _itemTable;
  242. private final NpcTable _npcTable;
  243. private final HennaTable _hennaTable;
  244. private final IdFactory _idFactory;
  245. public static GameServer gameServer;
  246. private static ClanHallManager _cHManager;
  247. private final ItemHandler _itemHandler;
  248. private final SkillHandler _skillHandler;
  249. private final AdminCommandHandler _adminCommandHandler;
  250. private final Shutdown _shutdownHandler;
  251. private final UserCommandHandler _userCommandHandler;
  252. private final VoicedCommandHandler _voicedCommandHandler;
  253. private final DoorTable _doorTable;
  254. private final SevenSigns _sevenSignsEngine;
  255. private final AutoChatHandler _autoChatHandler;
  256. private final AutoSpawnHandler _autoSpawnHandler;
  257. private LoginServerThread _loginThread;
  258. private final HelperBuffTable _helperBuffTable;
  259. private static Status _statusServer;
  260. @SuppressWarnings("unused")
  261. private final ThreadPoolManager _threadpools;
  262. public static final Calendar dateTimeServerStarted = Calendar.getInstance();
  263. public long getUsedMemoryMB()
  264. {
  265. return (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory())/1048576; // 1024 * 1024 = 1048576;
  266. }
  267. public SelectorThread<L2GameClient> getSelectorThread()
  268. {
  269. return _selectorThread;
  270. }
  271. public ClanHallManager getCHManager(){
  272. return _cHManager;
  273. }
  274. public GameServer() throws Exception
  275. {
  276. gameServer = this;
  277. _log.finest("used mem:" + getUsedMemoryMB()+"MB" );
  278. if (Config.SERVER_VERSION != null)
  279. {
  280. _log.info("L2J Server Version: "+Config.SERVER_VERSION);
  281. }
  282. if (Config.DATAPACK_VERSION != null)
  283. {
  284. _log.info("L2J Datapack Version: "+Config.DATAPACK_VERSION);
  285. }
  286. _idFactory = IdFactory.getInstance();
  287. if (!_idFactory.isInitialized())
  288. {
  289. _log.severe("Could not read object IDs from DB. Please Check Your Data.");
  290. throw new Exception("Could not initialize the ID factory");
  291. }
  292. _threadpools = ThreadPoolManager.getInstance();
  293. new File(Config.DATAPACK_ROOT, "data/clans").mkdirs();
  294. new File(Config.DATAPACK_ROOT, "data/crests").mkdirs();
  295. new File("pathnode").mkdirs();
  296. // start game time control early
  297. GameTimeController.getInstance();
  298. // keep the references of Singletons to prevent garbage collection
  299. CharNameTable.getInstance();
  300. _itemTable = ItemTable.getInstance();
  301. if (!_itemTable.isInitialized())
  302. {
  303. _log.severe("Could not find the extraced files. Please Check Your Data.");
  304. throw new Exception("Could not initialize the item table");
  305. }
  306. ExtractableItemsData.getInstance();
  307. SummonItemsData.getInstance();
  308. TradeController.getInstance();
  309. _skillTable = SkillTable.getInstance();
  310. if (!_skillTable.isInitialized())
  311. {
  312. _log.severe("Could not find the extraced files. Please Check Your Data.");
  313. throw new Exception("Could not initialize the skill table");
  314. }
  315. // L2EMU_ADD by Rayan. L2J - BigBro
  316. //if(Config.ALLOW_NPC_WALKERS)
  317. NpcWalkerRoutesTable.getInstance().load();
  318. //L2EMU_ADD by Rayan. L2J - BigBro
  319. RecipeController.getInstance();
  320. SkillTreeTable.getInstance();
  321. ArmorSetsTable.getInstance();
  322. FishTable.getInstance();
  323. SkillSpellbookTable.getInstance();
  324. CharTemplateTable.getInstance();
  325. NobleSkillTable.getInstance();
  326. HeroSkillTable.getInstance();
  327. //Call to load caches
  328. HtmCache.getInstance();
  329. CrestCache.getInstance();
  330. ClanTable.getInstance();
  331. _npcTable = NpcTable.getInstance();
  332. if (!_npcTable.isInitialized())
  333. {
  334. _log.severe("Could not find the extraced files. Please Check Your Data.");
  335. throw new Exception("Could not initialize the npc table");
  336. }
  337. _hennaTable = HennaTable.getInstance();
  338. if (!_hennaTable.isInitialized())
  339. {
  340. throw new Exception("Could not initialize the Henna Table");
  341. }
  342. HennaTreeTable.getInstance();
  343. if (!_hennaTable.isInitialized())
  344. {
  345. throw new Exception("Could not initialize the Henna Tree Table");
  346. }
  347. _helperBuffTable = HelperBuffTable.getInstance();
  348. if (!_helperBuffTable.isInitialized())
  349. {
  350. throw new Exception("Could not initialize the Helper Buff Table");
  351. }
  352. GeoData.getInstance();
  353. if (Config.GEODATA == 2)
  354. GeoPathFinding.getInstance();
  355. // Load clan hall data before zone data
  356. _cHManager = ClanHallManager.getInstance();
  357. CastleManager.getInstance();
  358. SiegeManager.getInstance();
  359. TeleportLocationTable.getInstance();
  360. LevelUpData.getInstance();
  361. L2World.getInstance();
  362. ZoneData.getInstance();
  363. SpawnTable.getInstance();
  364. RaidBossSpawnManager.getInstance();
  365. DayNightSpawnManager.getInstance().notifyChangeMode();
  366. DimensionalRiftManager.getInstance();
  367. Announcements.getInstance();
  368. MapRegionTable.getInstance();
  369. EventDroplist.getInstance();
  370. /** Load Manor data */
  371. L2Manor.getInstance();
  372. /** Load Manager */
  373. AuctionManager.getInstance();
  374. BoatManager.getInstance();
  375. CastleManorManager.getInstance();
  376. MercTicketManager.getInstance();
  377. //PartyCommandManager.getInstance();
  378. PetitionManager.getInstance();
  379. QuestManager.getInstance();
  380. AugmentationData.getInstance();
  381. if (Config.SAVE_DROPPED_ITEM)
  382. ItemsOnGroundManager.getInstance();
  383. if (Config.AUTODESTROY_ITEM_AFTER > 0 || Config.HERB_AUTO_DESTROY_TIME > 0)
  384. ItemsAutoDestroy.getInstance();
  385. MonsterRace.getInstance();
  386. _doorTable = DoorTable.getInstance();
  387. _doorTable.parseData();
  388. StaticObjects.getInstance();
  389. _sevenSignsEngine = SevenSigns.getInstance();
  390. SevenSignsFestival.getInstance();
  391. _autoSpawnHandler = AutoSpawnHandler.getInstance();
  392. _autoChatHandler = AutoChatHandler.getInstance();
  393. // Spawn the Orators/Preachers if in the Seal Validation period.
  394. _sevenSignsEngine.spawnSevenSignsNPC();
  395. Olympiad.getInstance();
  396. Hero.getInstance();
  397. FaenorScriptEngine.getInstance();
  398. // Init of a cursed weapon manager
  399. CursedWeaponsManager.getInstance();
  400. _log.config("AutoChatHandler: Loaded " + _autoChatHandler.size() + " handlers in total.");
  401. _log.config("AutoSpawnHandler: Loaded " + _autoSpawnHandler.size() + " handlers in total.");
  402. _itemHandler = ItemHandler.getInstance();
  403. _itemHandler.registerItemHandler(new ScrollOfEscape());
  404. _itemHandler.registerItemHandler(new ScrollOfResurrection());
  405. _itemHandler.registerItemHandler(new SoulShots());
  406. _itemHandler.registerItemHandler(new SpiritShot());
  407. _itemHandler.registerItemHandler(new BlessedSpiritShot());
  408. _itemHandler.registerItemHandler(new BeastSoulShot());
  409. _itemHandler.registerItemHandler(new BeastSpiritShot());
  410. _itemHandler.registerItemHandler(new ChestKey());
  411. _itemHandler.registerItemHandler(new PaganKeys());
  412. _itemHandler.registerItemHandler(new Maps());
  413. _itemHandler.registerItemHandler(new Potions());
  414. _itemHandler.registerItemHandler(new Recipes());
  415. _itemHandler.registerItemHandler(new RollingDice());
  416. _itemHandler.registerItemHandler(new MysteryPotion());
  417. _itemHandler.registerItemHandler(new EnchantScrolls());
  418. _itemHandler.registerItemHandler(new EnergyStone());
  419. _itemHandler.registerItemHandler(new Book());
  420. _itemHandler.registerItemHandler(new Remedy());
  421. _itemHandler.registerItemHandler(new Scrolls());
  422. _itemHandler.registerItemHandler(new CrystalCarol());
  423. _itemHandler.registerItemHandler(new SoulCrystals());
  424. _itemHandler.registerItemHandler(new SevenSignsRecord());
  425. _itemHandler.registerItemHandler(new CharChangePotions());
  426. _itemHandler.registerItemHandler(new Firework());
  427. _itemHandler.registerItemHandler(new Seed());
  428. _itemHandler.registerItemHandler(new Harvester());
  429. _itemHandler.registerItemHandler(new MercTicket());
  430. _itemHandler.registerItemHandler(new FishShots());
  431. _itemHandler.registerItemHandler(new ExtractableItems());
  432. _itemHandler.registerItemHandler(new SpecialXMas());
  433. _itemHandler.registerItemHandler(new SummonItems());
  434. _itemHandler.registerItemHandler(new BeastSpice());
  435. _log.config("ItemHandler: Loaded " + _itemHandler.size() + " handlers.");
  436. _skillHandler = SkillHandler.getInstance();
  437. _skillHandler.registerSkillHandler(new Blow());
  438. _skillHandler.registerSkillHandler(new Pdam());
  439. _skillHandler.registerSkillHandler(new Mdam());
  440. _skillHandler.registerSkillHandler(new CpDam());
  441. _skillHandler.registerSkillHandler(new Manadam());
  442. _skillHandler.registerSkillHandler(new Heal());
  443. _skillHandler.registerSkillHandler(new CombatPointHeal());
  444. _skillHandler.registerSkillHandler(new ManaHeal());
  445. _skillHandler.registerSkillHandler(new BalanceLife());
  446. _skillHandler.registerSkillHandler(new Charge());
  447. _skillHandler.registerSkillHandler(new Continuous());
  448. _skillHandler.registerSkillHandler(new Resurrect());
  449. _skillHandler.registerSkillHandler(new Spoil());
  450. _skillHandler.registerSkillHandler(new Sweep());
  451. _skillHandler.registerSkillHandler(new StrSiegeAssault());
  452. _skillHandler.registerSkillHandler(new SummonFriend());
  453. _skillHandler.registerSkillHandler(new SummonTreasureKey());
  454. _skillHandler.registerSkillHandler(new Disablers());
  455. _skillHandler.registerSkillHandler(new Recall());
  456. _skillHandler.registerSkillHandler(new SiegeFlag());
  457. _skillHandler.registerSkillHandler(new TakeCastle());
  458. _skillHandler.registerSkillHandler(new Unlock());
  459. _skillHandler.registerSkillHandler(new DrainSoul());
  460. _skillHandler.registerSkillHandler(new Craft());
  461. _skillHandler.registerSkillHandler(new Fishing());
  462. _skillHandler.registerSkillHandler(new FishingSkill());
  463. _skillHandler.registerSkillHandler(new BeastFeed());
  464. _skillHandler.registerSkillHandler(new DeluxeKey());
  465. _skillHandler.registerSkillHandler(new Sow());
  466. _skillHandler.registerSkillHandler(new Harvest());
  467. _skillHandler.registerSkillHandler(new Signets());
  468. _skillHandler.registerSkillHandler(new GetPlayer());
  469. _log.config("SkillHandler: Loaded " + _skillHandler.size() + " handlers.");
  470. _adminCommandHandler = AdminCommandHandler.getInstance();
  471. _adminCommandHandler.registerAdminCommandHandler(new AdminAdmin());
  472. _adminCommandHandler.registerAdminCommandHandler(new AdminInvul());
  473. _adminCommandHandler.registerAdminCommandHandler(new AdminDelete());
  474. _adminCommandHandler.registerAdminCommandHandler(new AdminKill());
  475. _adminCommandHandler.registerAdminCommandHandler(new AdminTarget());
  476. _adminCommandHandler.registerAdminCommandHandler(new AdminShop());
  477. _adminCommandHandler.registerAdminCommandHandler(new AdminAnnouncements());
  478. _adminCommandHandler.registerAdminCommandHandler(new AdminCreateItem());
  479. _adminCommandHandler.registerAdminCommandHandler(new AdminHeal());
  480. _adminCommandHandler.registerAdminCommandHandler(new AdminHelpPage());
  481. _adminCommandHandler.registerAdminCommandHandler(new AdminShutdown());
  482. _adminCommandHandler.registerAdminCommandHandler(new AdminSpawn());
  483. _adminCommandHandler.registerAdminCommandHandler(new AdminSkill());
  484. _adminCommandHandler.registerAdminCommandHandler(new AdminExpSp());
  485. _adminCommandHandler.registerAdminCommandHandler(new AdminEventEngine());
  486. _adminCommandHandler.registerAdminCommandHandler(new AdminGmChat());
  487. _adminCommandHandler.registerAdminCommandHandler(new AdminEditChar());
  488. _adminCommandHandler.registerAdminCommandHandler(new AdminGm());
  489. _adminCommandHandler.registerAdminCommandHandler(new AdminTeleport());
  490. _adminCommandHandler.registerAdminCommandHandler(new AdminRepairChar());
  491. _adminCommandHandler.registerAdminCommandHandler(new AdminChangeAccessLevel());
  492. _adminCommandHandler.registerAdminCommandHandler(new AdminBan());
  493. _adminCommandHandler.registerAdminCommandHandler(new AdminPolymorph());
  494. _adminCommandHandler.registerAdminCommandHandler(new AdminBanChat());
  495. _adminCommandHandler.registerAdminCommandHandler(new AdminKick());
  496. _adminCommandHandler.registerAdminCommandHandler(new AdminMonsterRace());
  497. _adminCommandHandler.registerAdminCommandHandler(new AdminEditNpc());
  498. _adminCommandHandler.registerAdminCommandHandler(new AdminFightCalculator());
  499. _adminCommandHandler.registerAdminCommandHandler(new AdminMenu());
  500. _adminCommandHandler.registerAdminCommandHandler(new AdminSiege());
  501. _adminCommandHandler.registerAdminCommandHandler(new AdminPathNode());
  502. _adminCommandHandler.registerAdminCommandHandler(new AdminPetition());
  503. _adminCommandHandler.registerAdminCommandHandler(new AdminPForge());
  504. _adminCommandHandler.registerAdminCommandHandler(new AdminBBS());
  505. _adminCommandHandler.registerAdminCommandHandler(new AdminEffects());
  506. _adminCommandHandler.registerAdminCommandHandler(new AdminDoorControl());
  507. _adminCommandHandler.registerAdminCommandHandler(new AdminTest());
  508. _adminCommandHandler.registerAdminCommandHandler(new AdminEnchant());
  509. _adminCommandHandler.registerAdminCommandHandler(new AdminMobGroup());
  510. _adminCommandHandler.registerAdminCommandHandler(new AdminRes());
  511. _adminCommandHandler.registerAdminCommandHandler(new AdminMammon());
  512. _adminCommandHandler.registerAdminCommandHandler(new AdminUnblockIp());
  513. _adminCommandHandler.registerAdminCommandHandler(new AdminPledge());
  514. _adminCommandHandler.registerAdminCommandHandler(new AdminRideWyvern());
  515. _adminCommandHandler.registerAdminCommandHandler(new AdminLogin());
  516. _adminCommandHandler.registerAdminCommandHandler(new AdminCache());
  517. _adminCommandHandler.registerAdminCommandHandler(new AdminLevel());
  518. _adminCommandHandler.registerAdminCommandHandler(new AdminQuest());
  519. _adminCommandHandler.registerAdminCommandHandler(new AdminZone());
  520. _adminCommandHandler.registerAdminCommandHandler(new AdminCursedWeapons());
  521. _adminCommandHandler.registerAdminCommandHandler(new AdminGeodata());
  522. _adminCommandHandler.registerAdminCommandHandler(new AdminGeoEditor());
  523. _adminCommandHandler.registerAdminCommandHandler(new AdminManor());
  524. _adminCommandHandler.registerAdminCommandHandler(new AdminTvTEvent());
  525. //_adminCommandHandler.registerAdminCommandHandler(new AdminRadar());
  526. _log.config("AdminCommandHandler: Loaded " + _adminCommandHandler.size() + " handlers.");
  527. _userCommandHandler = UserCommandHandler.getInstance();
  528. _userCommandHandler.registerUserCommandHandler(new ClanPenalty());
  529. _userCommandHandler.registerUserCommandHandler(new ClanWarsList());
  530. _userCommandHandler.registerUserCommandHandler(new DisMount());
  531. _userCommandHandler.registerUserCommandHandler(new Escape());
  532. _userCommandHandler.registerUserCommandHandler(new Loc());
  533. _userCommandHandler.registerUserCommandHandler(new Mount());
  534. _userCommandHandler.registerUserCommandHandler(new PartyInfo());
  535. _userCommandHandler.registerUserCommandHandler(new Time());
  536. _userCommandHandler.registerUserCommandHandler(new OlympiadStat());
  537. _userCommandHandler.registerUserCommandHandler(new ChannelLeave());
  538. _userCommandHandler.registerUserCommandHandler(new ChannelDelete());
  539. _userCommandHandler.registerUserCommandHandler(new ChannelListUpdate());
  540. _log.config("UserCommandHandler: Loaded " + _userCommandHandler.size() + " handlers.");
  541. _voicedCommandHandler = VoicedCommandHandler.getInstance();
  542. _voicedCommandHandler.registerVoicedCommandHandler(new stats());
  543. if(Config.L2JMOD_ALLOW_WEDDING)
  544. _voicedCommandHandler.registerVoicedCommandHandler(new Wedding());
  545. _log.config("VoicedCommandHandler: Loaded " + _voicedCommandHandler.size() + " handlers.");
  546. if(Config.L2JMOD_ALLOW_WEDDING)
  547. CoupleManager.getInstance();
  548. TaskManager.getInstance();
  549. GmListTable.getInstance();
  550. // read pet stats from db
  551. L2PetDataTable.getInstance().loadPetsData();
  552. Universe.getInstance();
  553. if (Config.ACCEPT_GEOEDITOR_CONN)
  554. GeoEditorListener.getInstance();
  555. _shutdownHandler = Shutdown.getInstance();
  556. Runtime.getRuntime().addShutdownHook(_shutdownHandler);
  557. try
  558. {
  559. _doorTable.getDoor(24190001).openMe();
  560. _doorTable.getDoor(24190002).openMe();
  561. _doorTable.getDoor(24190003).openMe();
  562. _doorTable.getDoor(24190004).openMe();
  563. _doorTable.getDoor(23180001).openMe();
  564. _doorTable.getDoor(23180002).openMe();
  565. _doorTable.getDoor(23180003).openMe();
  566. _doorTable.getDoor(23180004).openMe();
  567. _doorTable.getDoor(23180005).openMe();
  568. _doorTable.getDoor(23180006).openMe();
  569. _doorTable.checkAutoOpen();
  570. }
  571. catch (NullPointerException e)
  572. {
  573. _log.warning("There is errors in your Door.csv file. Update door.csv");
  574. if (Config.DEBUG)
  575. e.printStackTrace();
  576. }
  577. ForumsBBSManager.getInstance();
  578. _log.config("IdFactory: Free ObjectID's remaining: " + IdFactory.getInstance().size());
  579. // initialize the dynamic extension loader
  580. try {
  581. DynamicExtension.getInstance();
  582. } catch (Exception ex) {
  583. _log.log(Level.WARNING, "DynamicExtension could not be loaded and initialized", ex);
  584. }
  585. FloodProtector.getInstance();
  586. TvTManager.getInstance();
  587. System.gc();
  588. // maxMemory is the upper limit the jvm can use, totalMemory the size of the current allocation pool, freeMemory the unused memory in the allocation pool
  589. long freeMem = (Runtime.getRuntime().maxMemory()-Runtime.getRuntime().totalMemory()+Runtime.getRuntime().freeMemory()) / 1048576; // 1024 * 1024 = 1048576;
  590. long totalMem = Runtime.getRuntime().maxMemory() / 1048576;
  591. _log.info("GameServer Started, free memory "+freeMem+" Mb of "+totalMem+" Mb");
  592. _loginThread = LoginServerThread.getInstance();
  593. _loginThread.start();
  594. SelectorServerConfig ssc = new SelectorServerConfig(Config.PORT_GAME);
  595. L2GamePacketHandler gph = new L2GamePacketHandler();
  596. _selectorThread = new SelectorThread<L2GameClient>(ssc, gph, gph, gph);
  597. _selectorThread.openServerSocket();
  598. _selectorThread.start();
  599. _log.config("Maximum Numbers of Connected Players: " + Config.MAXIMUM_ONLINE_USERS);
  600. }
  601. public static void main(String[] args) throws Exception
  602. {
  603. Server.serverMode = Server.MODE_GAMESERVER;
  604. // Local Constants
  605. final String LOG_FOLDER = "log"; // Name of folder for log file
  606. final String LOG_NAME = "./log.cfg"; // Name of log file
  607. /*** Main ***/
  608. // Create log folder
  609. File logFolder = new File(Config.DATAPACK_ROOT, LOG_FOLDER);
  610. logFolder.mkdir();
  611. // Create input stream for log file -- or store file data into memory
  612. InputStream is = new FileInputStream(new File(LOG_NAME));
  613. LogManager.getLogManager().readConfiguration(is);
  614. is.close();
  615. // Initialize config
  616. Config.load();
  617. L2DatabaseFactory.getInstance();
  618. gameServer = new GameServer();
  619. if ( Config.IS_TELNET_ENABLED ) {
  620. _statusServer = new Status(Server.serverMode);
  621. _statusServer.start();
  622. }
  623. else {
  624. System.out.println("Telnet server is currently disabled.");
  625. }
  626. }
  627. }