GameServer.java 34 KB

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