GameServer.java 36 KB

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