GameServer.java 34 KB

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