GameServer.java 36 KB

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