WhatEver 1 Опубликовано 13 апреля, 2012 (изменено) В этой статье рассказывается о том, как сделать отображение реального онлайна (активных игроков + оффлайн трейдеров) на сервере. Скрытый текстНа данный момент исполнение захватывает только хэндлеры, поэтому для внедрения на свой сервер не требуется перекомпиляция ядра. Внимание! Работа в исходом виде гарантирована только на сервере L2J HighFiveP5! Для других сборок требуется корректировка имен классов и переменных! Открываем Gameserver/data/scripts/handlers/MasterHandler.java любым тектовым редактором (Notepad++ в помощь) и ищем строчки следующего вида: import handlers.voicedcommandhandlers.TvTVoicedInfo; import handlers.voicedcommandhandlers.Wedding; import handlers.voicedcommandhandlers.stats; Или подобные(lля тех, кто немного понимает яву - область импортов). Добавляем ниже них ещё одну строку: import handlers.voicedcommandhandlers.Info; Далее ищем: { // Voiced Command Handlers stats.class, (Config.L2JMOD_ALLOW_WEDDING ? Wedding.class : null), (Config.BANKING_SYSTEM_ENABLED ? Banking.class : null), (Config.TVT_ALLOW_VOICED_COMMAND ? TvTVoicedInfo.class : null), (Config.L2JMOD_CHAT_ADMIN ? ChatAdmin.class : null), (Config.L2JMOD_MULTILANG_ENABLE && Config.L2JMOD_MULTILANG_VOICED_ALLOW ? Lang.class : null), (Config.L2JMOD_DEBUG_VOICE_COMMAND ? Debug.class : null), (Config.L2JMOD_ALLOW_CHANGE_PASSWORD ? ChangePassword.class : null), (Config.L2JMOD_HELLBOUND_STATUS ? Hellbound.class : null), }, Или подобные (область загрузки войсхэндлеров). Добавляем в перечисление наш новый класс: (Config.L2JMOD_HELLBOUND_STATUS ? Hellbound.class : null), Info.class, }, МастерХэндлер обновили... Продолжаем... Создаём файл по такому пути: Gameserver/data/scripts/handlers/voicedcommandhandlers/Info.java Со следующим содержимым: package handlers.voicedcommandhandlers; import com.l2jserver.gameserver.cache.HtmCache; import com.l2jserver.gameserver.handler.IVoicedCommandHandler; import com.l2jserver.gameserver.model.L2World; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage; public class Info implements IVoicedCommandHandler{ private static final String[] VOICED_COMMANDS = { "info" }; private static final String HTML = HtmCache.getInstance().getHtm(null, "data/html/mods/Info.htm"); @Override public boolean useVoicedCommand(String command, L2PcInstance activeChar, String params) { final int All = L2World.getInstance().getAllPlayersCount(); int Traders = 0; for(L2PcInstance ppl : L2World.getInstance().getAllPlayersArray()){ if ((ppl.getClient().isDetached()) && (ppl.getPrivateStoreType() != L2PcInstance.STORE_PRIVATE_NONE) ) Traders++; } final int Active = All - Traders; String htmContent = (!HTML.isEmpty()) ? HTML : HtmCache.getInstance().getHtm(activeChar.getHtmlPrefix(), "data/html/mods/Info.htm"); NpcHtmlMessage npcHtmlMessage = new NpcHtmlMessage(1); npcHtmlMessage.setHtml(htmContent); npcHtmlMessage.replace("%online_active%", Integer.toString(Active) ); npcHtmlMessage.replace("%online_traders%", Integer.toString(Traders) ); npcHtmlMessage.replace("%online_all%", Integer.toString(All) ); activeChar.sendPacket(npcHtmlMessage); return true; } @Override public String[] getVoicedCommandList() { return VOICED_COMMANDS; } } Файл класса создали... Дальше нам нужно создать ХТМЛ-ку, в которой всё и будет создаваться. Создаем файл по такому пути: Gameserver/data/html/mods/Info.htm Его содержимое: <html><body> <title>Информация о сервере</title> <center>Статистика онлайн:</center><br> <table> <tr> <td width=70>Онлайн игроков:</td> <td width=30>%online_active%</td> </tr> <tr> <td width=70>Онлайн торговцев:</td> <td width=30>%online_traders%</td> </tr> <tr> <td width=70>Итого:</td> <td width=30>%online_all%</td> </tr> </table> </body></html> Готово. Заходим в игру и прописываем .info. Откроется HTML-ка со статистикой сервера. © Johnson. Изменено 14 апреля, 2012 пользователем WhatEver Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты