Сообщений: 175
Тем: 42
Зарегистрирован: Nov 2010
Репутация:
57
Здравствуйте.
Понадобностью, надо отключить загрузку скриптов на уровне ядра.
Сборка l2p Epilogue.
Ни как не могу найти нужный поток Scripts.getInstance().load(true) - что-то вроде этого.
Подскажите, пожалуйста, где даёт команду на загрузку скриптов.
Сообщений: 566
Тем: 6
Зарегистрирован: Feb 2010
Репутация:
4,513
в файле GameServer.java строка Scripts.getInstance();
Сообщений: 175
Тем: 42
Зарегистрирован: Nov 2010
Репутация:
57
ExLite Написал:в файле GameServer.java строка Scripts.getInstance();
К сожалению, не то=) Эх, если бы это все так очевидно было, то писать бы сюда и смысла не было.
Сообщений: 566
Тем: 6
Зарегистрирован: Feb 2010
Репутация:
4,513
значит Scripts.getInstance().init()
Сообщений: 175
Тем: 42
Зарегистрирован: Nov 2010
Репутация:
57
ExLite Написал:значит Scripts.getInstance().init() К сожалению, тоже не то.
Для упращенки:
public GameServer() throws Exception
PHP код: <?php
public GameServer() throws Exception
{
Server.gameServer = this;
_serverStarted = time();
_log.finest("used mem:" + MemoryWatchDog.getMemUsedMb());
Strings.reload();
IdFactory _idFactory = IdFactory.getInstance();
if(!_idFactory.isInitialized())
{
_log.severe("Could not read object IDs from DB. Please Check Your Data.");
throw new Exception("Could not initialize the ID factory");
}
ThreadPoolManager.getInstance();
if(Config.DEADLOCKCHECK_INTERVAL > 0)
new DeadlockDetector().start();
CrestCache.load();
// start game time control early
GameTimeController.getInstance();
// keep the references of Singletons to prevent garbage collection
CharNameTable.getInstance();
AuctionManager.getInstance();
ClanTable.getInstance();
FakePlayersTable.getInstance();
SkillTable.getInstance();
PetSkillsTable.getInstance();
_itemTable = ItemTable.getInstance();
if(!_itemTable.isInitialized())
{
_log.severe("Could not find the >Items files. Please Check Your Data.");
throw new Exception("Could not initialize the item table");
}
ArmorSetsTable _armorSetsTable = ArmorSetsTable.getInstance();
if(!_armorSetsTable.isInitialized())
{
_log.severe("Could not find the ArmorSets files. Please Check Your Data.");
throw new Exception("Could not initialize the armorSets table");
}
events = new Events();
TradeController.getInstance();
RecipeController.getInstance();
SkillTreeTable.getInstance();
SkillSpellbookTable.getInstance();
CharTemplateTable.getInstance();
NpcTable.getInstance();
if(!NpcTable.isInitialized())
{
_log.severe("Could not find the extraced files. Please Check Your Data.");
throw new Exception("Could not initialize the npc table");
}
HennaTable _hennaTable = HennaTable.getInstance();
if(!_hennaTable.isInitialized())
throw new Exception("Could not initialize the Henna Table");
HennaTreeTable.getInstance();
if(!_hennaTable.isInitialized())
throw new Exception("Could not initialize the Henna Tree Table");
LevelUpTable.getInstance();
GeoEngine.loadGeo();
DoorTable.getInstance();
UnderGroundColliseumManager.getInstance();
TownManager.getInstance();
CastleManager.getInstance();
CastleSiegeManager.load();
FortressManager.getInstance();
FortressSiegeManager.load();
ClanHallManager.getInstance();
ClanHallSiegeManager.load();
TerritorySiege.load();
CastleManorManager.getInstance();
SpawnTable.getInstance();
RaidBossSpawnManager.getInstance();
DimensionalRiftManager.getInstance();
InstancedZoneManager.getInstance();
Announcements.getInstance();
LotteryManager.getInstance();
MapRegion.getInstance();
AugmentationData.getInstance();
PlayerMessageStack.getInstance();
if(Config.AUTODESTROY_ITEM_AFTER > 0)
ItemsAutoDestroy.getInstance();
MonsterRace.getInstance();
StaticObjectsTable.getInstance();
SevenSigns _sevenSignsEngine = SevenSigns.getInstance();
SevenSignsFestival.getInstance();
_sevenSignsEngine.updateFestivalScore();
AutoSpawnHandler _autoSpawnHandler = AutoSpawnHandler.getInstance();
_log.config("AutoSpawnHandler: Loaded " + _autoSpawnHandler.size() + " handlers in total.");
AutoChatHandler _autoChatHandler = AutoChatHandler.getInstance();
_log.config("AutoChatHandler: Loaded " + _autoChatHandler.size() + " handlers in total.");
_sevenSignsEngine.spawnSevenSignsNPC();
if(Config.ENABLE_OLYMPIAD)
{
Olympiad.load();
Hero.getInstance();
}
CursedWeaponsManager.getInstance();
if(!Config.ALLOW_WEDDING)
{
CoupleManager.getInstance();
_log.config("CoupleManager initialized");
}
ItemHandler _itemHandler = ItemHandler.getInstance();
_log.config("ItemHandler: Loaded " + _itemHandler.size() + " handlers.");
AdminCommandHandler _adminCommandHandler = AdminCommandHandler.getInstance();
_log.config("AdminCommandHandler: Loaded " + _adminCommandHandler.size() + " handlers.");
UserCommandHandler _userCommandHandler = UserCommandHandler.getInstance();
_log.config("UserCommandHandler: Loaded " + _userCommandHandler.size() + " handlers.");
VoicedCommandHandler _voicedCommandHandler = VoicedCommandHandler.getInstance();
_log.config("VoicedCommandHandler: Loaded " + _voicedCommandHandler.size() + " handlers.");
TaskManager.getInstance();
MercTicketManager.getInstance();
L2VehicleManager.getInstance();
AirShipDocksTable.getInstance();
Shutdown _shutdownHandler = Shutdown.getInstance();
Runtime.getRuntime().addShutdownHook(_shutdownHandler);
try
{
// Colosseum doors
DoorTable.getInstance().getDoor(24190001).openMe();
DoorTable.getInstance().getDoor(24190002).openMe();
DoorTable.getInstance().getDoor(24190003).openMe();
DoorTable.getInstance().getDoor(24190004).openMe();
// TOI doors
DoorTable.getInstance().getDoor(23180001).openMe();
DoorTable.getInstance().getDoor(23180002).openMe();
DoorTable.getInstance().getDoor(23180003).openMe();
DoorTable.getInstance().getDoor(23180004).openMe();
DoorTable.getInstance().getDoor(23180005).openMe();
DoorTable.getInstance().getDoor(23180006).openMe();
// Эти двери, похоже выполняют декоративную функцию,
// находятся во Frozen Labyrinth над мостом по пути к снежной королеве.
DoorTable.getInstance().getDoor(23140001).openMe();
DoorTable.getInstance().getDoor(23140002).openMe();
DoorTable.getInstance().checkAutoOpen();
}
catch(NullPointerException e)
{
_log.warning("Doors table does not contain the right door info. Update doors.");
e.printStackTrace();
}
_log.config("IdFactory: Free ObjectID's remaining: " + IdFactory.getInstance().size());
TeleportTable.getInstance();
PartyRoomManager.getInstance();
new File("./log/game").mkdirs();
int restartTime = 0;
int restartAt = 0;
// Время запланированного на определенное время суток рестарта
if(Config.RESTART_AT_TIME > -1)
{
Calendar calendarRestartAt = Calendar.getInstance();
calendarRestartAt.set(Calendar.HOUR_OF_DAY, Config.RESTART_AT_TIME);
calendarRestartAt.set(Calendar.MINUTE, 0);
// Если запланированное время уже прошло, то берем +24 часа
if(calendarRestartAt.getTimeInMillis() < System.currentTimeMillis())
calendarRestartAt.add(Calendar.HOUR_OF_DAY, 24);
restartAt = (int) (calendarRestartAt.getTimeInMillis() - System.currentTimeMillis()) / 1000;
}
// Время регулярного рестарта (через определенное время)
restartTime = Config.RESTART_TIME * 60 * 60;
// Проверяем какой рестарт раньше, регулярный или запланированный
if(restartTime < restartAt && restartTime > 0 || restartTime > restartAt && restartAt == 0)
Shutdown.getInstance().setAutoRestart(restartTime);
else if(restartAt > 0)
Shutdown.getInstance().setAutoRestart(restartAt);
MailParcelController.getInstance();
_log.info("GameServer Started");
_log.config("Maximum Numbers of Connected Players: " + Config.MAXIMUM_ONLINE_USERS);
Stat.init();
if(Config.RRD_ENABLED)
{
_log.config("Initializing RRD");
RRDTools.init();
}
else
_log.config("RRD Disabled");
if(Config.PROTECT_ENABLE && Config.PROTECT_GS_ENABLE_HWID_BANS)
HWID.reloadBannedHWIDs();
if(Config.PROTECT_ENABLE && Config.PROTECT_GS_ENABLE_HWID_BONUS)
HWID.reloadBonusHWIDs();
MMOSocket.getInstance();
LSConnection.getInstance().start();
SelectorThread.setAntiFlood(Config.ANTIFLOOD_ENABLE);
SelectorThread.setAntiFloodSocketsConf(Config.MAX_UNHANDLED_SOCKETS_PER_IP, Config.UNHANDLED_SOCKET_MIN_TTL);
L2GamePacketHandler gph = new L2GamePacketHandler();
SelectorConfig<L2GameClient> sc = new SelectorConfig<L2GameClient>(gph);
sc.setMaxSendPerPass(30);
sc.setSelectorSleepTime(1);
SelectorThread.setGlobalReadLock(Config.PORTS_GAME.length > 1);
_selectorThreads = new SelectorThread[Config.PORTS_GAME.length];
for(int i = 0; i < Config.PORTS_GAME.length; i++)
{
_selectorThreads[i] = new SelectorThread<L2GameClient>(sc, gph, gph, gph, null);
_selectorThreads[i].openServerSocket(null, Config.PORTS_GAME[i]);
_selectorThreads[i].start();
}
if(Config.WEB_SERVER_DELAY > 0)
ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new WebServer(), 5000, Config.WEB_SERVER_DELAY);
if(Config.SERVICES_OFFLINE_TRADE_RESTORE_AFTER_RESTART)
// Это довольно тяжелая задача поэтому пусть идет отдельным тридом
new Thread(new Runnable(){
@Override
public void run()
{
if(Config.SERVICES_OFFLINE_TRADE_SECONDS_TO_KICK > 0)
{
int min_offline_restore = (int) (System.currentTimeMillis() / 1000 - Config.SERVICES_OFFLINE_TRADE_SECONDS_TO_KICK);
mysql.set("DELETE FROM character_variables WHERE `name` = 'offline' AND `value` < " + min_offline_restore);
}
mysql.set("DELETE FROM character_variables WHERE `name` = 'offline' AND `obj_id` IN (SELECT `obj_id` FROM `characters` WHERE `accessLevel` < 0)");
ThreadConnection con = null;
FiltredPreparedStatement st = null;
ResultSet rs = null;
try
{
GArray<Object> logins = mysql.get_array(L2DatabaseFactory.getInstanceLogin(), "SELECT `login` FROM `accounts` WHERE `access_level` < 0");
if(logins.size() > 0)
{
con = L2DatabaseFactory.getInstance().getConnection();
st = con.prepareStatement("DELETE FROM character_variables WHERE `name` = 'offline' AND `obj_id` IN (SELECT `obj_id` FROM `characters` WHERE `account_name`=?)");
for(Object login : logins)
{
st.setString(1, (String) login);
st.executeUpdate();
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
DatabaseUtils.closeDatabaseCSR(con, st, rs);
}
GArray<HashMap<String, Object>> list = mysql.getAll("SELECT `obj_id`, `value`, (SELECT `account_name` FROM `characters` WHERE `characters`.`obj_Id` = `character_variables`.`obj_id` LIMIT 1) AS `account_name` FROM `character_variables` WHERE name LIKE 'offline'");
for(HashMap<String, Object> e : list)
{
L2GameClient client = new L2GameClient(new MMOConnection<L2GameClient>(null), true);
client.setCharSelection((Integer) e.get("obj_id"));
L2Player p = client.loadCharFromDisk(0);
if(p == null || p.isDead())
continue;
client.setLoginName((String) e.get("account_name") == null ? "OfflineTrader_" + p.getName() : (String) e.get("account_name"));
client.OnOfflineTrade();
p.restoreBonus();
p.spawnMe();
p.updateTerritories();
p.setOnlineStatus(true);
p.setOfflineMode(true);
p.setConnected(false);
p.setNameColor(Config.SERVICES_OFFLINE_TRADE_NAME_COLOR);
p.restoreEffects();
p.restoreDisableSkills();
p.broadcastUserInfo(true);
if(p.getClan() != null && p.getClan().getClanMember(p.getObjectId()) != null)
p.getClan().getClanMember(p.getObjectId()).setPlayerInstance(p);
if(Config.SERVICES_OFFLINE_TRADE_SECONDS_TO_KICK > 0)
p.startKickTask((Config.SERVICES_OFFLINE_TRADE_SECONDS_TO_KICK + Integer.parseInt(e.get("value").toString())) * 1000L - System.currentTimeMillis());
}
_log.info("Restored " + list.size() + " offline traders");
}
}).start();
}
Сообщений: 5,863
Тем: 105
Зарегистрирован: Sep 2010
Репутация:
13,014
Трейс сделайте, скорее всего из дочернего вызывается.
Сообщений: 566
Тем: 6
Зарегистрирован: Feb 2010
Репутация:
4,513
Из l2p/extensions/scripts/Scripts.java
[src=java]public void shutdown()
{
for(ScriptObject go : GameServer.scriptsObjects.values())
{
try
{
go.invokeMethod("onShutdown");
}
catch(Exception f)
{
f.printStackTrace();
}
}
GameServer.scriptsObjects.clear();
}[/src]
в ГС c scriptsObjects только:
[src=java]
import l2p.extensions.scripts.ScriptObject;
public static FastMap<String, ScriptObject> scriptsObjects = new FastMap<String, ScriptObject>().setShared(true);[/src]
Сообщений: 175
Тем: 42
Зарегистрирован: Nov 2010
Репутация:
57
12-27-2012, 04:24 PM
(Сообщение последний раз редактировалось: 12-27-2012, 05:44 PM niko42.)
Zubastic Написал:Трейс сделайте, скорее всего из дочернего вызывается.
Простите - глупый ворпос, а как это в IDEA сделать?+)
Добавлено через 31 минуту
ExLite Написал:Из l2p/extensions/scripts/Scripts.java
[src=java]public void shutdown()
{
for(ScriptObject go : GameServer.scriptsObjects.values())
{
try
{
go.invokeMethod("onShutdown");
}
catch(Exception f)
{
f.printStackTrace();
}
}
GameServer.scriptsObjects.clear();
}[/src]
в ГС c scriptsObjects только:
[src=java]
import l2p.extensions.scripts.ScriptObject;
public static FastMap<String, ScriptObject> scriptsObjects = new FastMap<String, ScriptObject>().setShared(true);[/src]
Мы удаляем из памяти скрипты. Но, что-то я не вижу их загрузку.
Добавлено через 1 час 20 минут
Разобрался и пришел в ужас (надеюсь, что это не так)
Зачем 7 раз загружать скрипты в память?
Сообщений: 5,670
Тем: 145
Зарегистрирован: Nov 2008
Репутация:
33,771
niko42, он не 7 раз грузит, смотрите метод getInstance() если он null, то загрузит, в обратном случае вернёт уже список скриптов.
Сообщений: 608
Тем: 5
Зарегистрирован: Feb 2009
Репутация:
2,171
niko42 Написал:Зачем 7 раз загружать скрипты в память? чтоб наверняка загрузилось :ed:
|