Сервис представляет собой голосовую команду, после ввода которой открывается меню, в котором вы должны выбрать требующуюся опцию.
Вы можете выбрать, по какому компоненту ПК будет выполнена привязка (CPU/HDD/BIOS) или комбинировать их.
Для установки данного модуля требуется исходный код сервера.
Скрытый текст
* требуется наличие LameGuard
* требуется наличие исходного кода OverWorld или оверподобный
Установка:
1)идём в Исходники\gameserver\src\main\java\l2p\gameserver\handler\voicecommands\impl
2)создаём текстовый документ и переименовываем его в Security.java и вставляем код для тех кому лень скачиваем файл и закидываем сюда Исходники\gameserver\src\main\java\l2p\gameserver\handler\voicecommands\impl
скачать
Скрытый текст
package l2p.gameserver.handler.voicecommands.impl;
import l2p.gameserver.Config;
import l2p.gameserver.handler.voicecommands.IVoicedCommandHandler;
import l2p.gameserver.model.Player;
import l2p.gameserver.loginservercon.LoginServerCommunication;
import l2p.gameserver.lock.gspackets.ChangeAllowedHwid;
import l2p.gameserver.lock.gspackets.ChangeAllowedIp;
import l2p.gameserver.serverpackets.NpcHtmlMessage;
public class Security implements IVoicedCommandHandler
{
private String[] _commandList = { "lock", "unlock", "lockIp", "lockHwid", "unlockIp", "unlockHwid" };
@Override
public boolean useVoicedCommand(String command, Player activeChar, String target)
{
if(command.equalsIgnoreCase("lock"))
{
NpcHtmlMessage html = new NpcHtmlMessage(activeChar.getObjectId());
html.setFile("command/lock/lock.htm");
html.replace("%ip_block%", IpBlockStatus());
html.replace("%hwid_block%", HwidBlockStatus());
html.replace("%hwid_val%", HwidBlockBy());
html.replace("%curIP%", activeChar.getIP());
activeChar.sendPacket(html);
return true;
}
else if(command.equalsIgnoreCase("lockIp"))
{
if(!Config.ALLOW_IP_LOCK)
return true;
AuthServerCommunication.getInstance().sendPacket(new ChangeAllowedIp(activeChar.getAccountName(), activeChar.getIP()));
NpcHtmlMessage html = new NpcHtmlMessage(activeChar.getObjectId());
html.setFile("command/lock/lock_ip.htm");
html.replace("%curIP%", activeChar.getIP());
activeChar.sendPacket(html);
return true;
}
else if(command.equalsIgnoreCase("lockHwid"))
{
if(!Config.ALLOW_HWID_LOCK)
return true;
AuthServerCommunication.getInstance().sendPacket(new ChangeAllowedHwid(activeChar.getAccountName(), activeChar.getNetConnection().getHWID()));
NpcHtmlMessage html = new NpcHtmlMessage(activeChar.getObjectId());
html.setFile("command/lock/lock_hwid.htm");
activeChar.sendPacket(html);
return true;
}
else if(command.equalsIgnoreCase("unlockIp"))
{
AuthServerCommunication.getInstance().sendPacket(new ChangeAllowedIp(activeChar.getAccountName(), ""));
NpcHtmlMessage html = new NpcHtmlMessage(activeChar.getObjectId());
html.setFile("command/lock/unlock_ip.htm");
html.replace("%curIP", activeChar.getIP());
activeChar.sendPacket(html);
return true;
}
else if(command.equalsIgnoreCase("unlockHwid"))
{
AuthServerCommunication.getInstance().sendPacket(new ChangeAllowedHwid(activeChar.getAccountName(), ""));
NpcHtmlMessage html = new NpcHtmlMessage(activeChar.getObjectId());
html.setFile("command/lock/unlock_hwid.htm");
activeChar.sendPacket(html);
return true;
}
return true;
}
private String IpBlockStatus()
{
if(Config.ALLOW_IP_LOCK)
return "Разрешено";
else
return "Запрещено";
}
private String HwidBlockStatus()
{
if(Config.ALLOW_HWID_LOCK)
return "Разрешено";
return "Запрещено";
}
private String HwidBlockBy()
{
String result = "(CPU/HDD)";
switch(Config.HWID_LOCK_MASK)
{
case 2:
result = "(HDD)";
break;
case 4:
result = "(BIOS)";
break;
case 6:
result = "(BIOS/HDD)";
break;
case 8:
result = "(CPU)";
break;
case 10:
result = "(CPU/HDD)";
break;
case 12:
result = "(CPU/BIOS)";
break;
case 14:
result = "(CPU/HDD/BIOS)";
break;
case 1:
case 3:
case 5:
case 7:
case 9:
case 11:
case 13:
default:
result = "(unknown)";
}
return result;
}
@Override
public String[] getVoicedCommandList()
{
return _commandList;
}
}
3)идём Исходники\gameserver\src\main\java\l2p\gameserver\handler\voicecommands открываем VoicedCommandHandler.java нажимаем сtrl+a и удаляем и вставляем это
Скрытый текст
package l2p.gameserver.handler.voicecommands;
import java.util.HashMap;
import java.util.Map;
import l2p.commons.data.xml.AbstractHolder;
import l2p.gameserver.handler.voicecommands.impl.Cfg;
import l2p.gameserver.handler.voicecommands.impl.Debug;
import l2p.gameserver.handler.voicecommands.impl.Hellbound;
import l2p.gameserver.handler.voicecommands.impl.Help;
import l2p.gameserver.handler.voicecommands.impl.Offline;
import l2p.gameserver.handler.voicecommands.impl.Repair;
import l2p.gameserver.handler.voicecommands.impl.ServerInfo;
import l2p.gameserver.handler.voicecommands.impl.Wedding;
import l2p.gameserver.handler.voicecommands.impl.WhoAmI;
import l2p.gameserver.handler.voicecommands.impl.Security;
public class VoicedCommandHandler extends AbstractHolder
{
private static final VoicedCommandHandler _instance = new VoicedCommandHandler();
public static VoicedCommandHandler getInstance()
{
return _instance;
}
private Map<String, IVoicedCommandHandler> _datatable = new HashMap<String, IVoicedCommandHandler>();
private VoicedCommandHandler()
{
registerVoicedCommandHandler(new Help());
registerVoicedCommandHandler(new Hellbound());
registerVoicedCommandHandler(new Cfg());
registerVoicedCommandHandler(new Offline());
registerVoicedCommandHandler(new Repair());
registerVoicedCommandHandler(new ServerInfo());
registerVoicedCommandHandler(new Wedding());
registerVoicedCommandHandler(new WhoAmI());
registerVoicedCommandHandler(new Debug());
registerVoicedCommandHandler(new Security());
}
public void registerVoicedCommandHandler(IVoicedCommandHandler handler)
{
String[] ids = handler.getVoicedCommandList();
for(String element : ids)
_datatable.put(element, handler);
}
public IVoicedCommandHandler getVoicedCommandHandler(String voicedCommand)
{
String command = voicedCommand;
if(voicedCommand.indexOf(" ") != -1)
command = voicedCommand.substring(0, voicedCommand.indexOf(" "));
return _datatable.get(command);
}
@Override
public int size()
{
return _datatable.size();
}
@Override
public void clear()
{
_datatable.clear();
}
}
4)скачиваем архив lock и извлекаем его в Исходники\gameserver\src\main\java\l2p\gameserver скачать
5)идём в Исходники\gameserver\src\main\java\l2p\gameserver\network и открываем GameClient
и видим вот эти импорты
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
вставляем ниже них
тут же находим код он находится в самом низу
Скрытый текст
@Override
public String toString()
{
return _state + " IP: " + getIpAddr() + (_login == null ? "" : " Account: " + _login) + (_activeChar == null ? "" : " Player : " + _activeChar);
и выше него вставляем
Скрытый текст
@SuppressWarnings("deprecation")
public void checkHwid(String allowedHwid)
{
if((!allowedHwid.equalsIgnoreCase("")) && (getHWID() != null) && (!HWID.isEquals(Utils.asByteArray(getHWID()), Utils.asByteArray(allowedHwid), Config.HWID_LOCK_MASK)))
closeNow(false);
}
тут же удаляем в самой последней строчке вот этот знак
Скрытый текст
}
и вставляем вот это
Скрытый текст
private String hwid;
private int instances;
private int patch;
private boolean isProtected;
public String getHWID() {
return hwid;
}
public int getInstanceCount() {
return instances;
}
public int getPatchVersion() {
return patch;
}
public boolean isProtected() {
return isProtected;
}
public void setHWID(String hwid) {
this.hwid = hwid;
}
public void setInstanceCount(int instances) {
this.instances = instances;
}
public void setPatchVersion(int patch) {
this.patch = patch;
}
public void setProtected(boolean isProtected) {
this.isProtected = isProtected;
}
}
6)идём сюда Исходники\gameserver\src\main\java\l2p\gameserver и открываем Config.java
вставляем
Скрытый текст
//
//Lock
//
public static boolean ALLOW_IP_LOCK;
public static boolean ALLOW_HWID_LOCK;
public static int HWID_LOCK_MASK;
это можно вставить сразу после
public static final String GM_ACCESS_FILES_DIR = "config/GMAccess.d/";
потом ищем вот эту строчку public static void loadServerConfig()
выше этой строки вставляем GAME_SERVER_LOGIN_HOST = serverSettings.getProperty("LoginHost", "127.0.0.1");
7)идём сюда Исходники\dist\gameserver\config\default
и открываем server.properties и в самый низ вставляем вот это
Скрытый текст
# ---------------------------------------------------------------------------#
# Сервис привязки аккаунта к IP и Hwid
# ---------------------------------------------------------------------------#
# Разрешить игрокам привязывать аккаунт к IP
# Привязка осуществляется с помощью команды .lock
# По умолчанию: True
AllowLockIP = true
# Разрешить игрокам привязывать аккаунт к HWid
# Работает только в случае когда стоит LameGuard
# Привязка осуществляется с помощью команды .lock
# По умолчанию: True
AllowLockHwid = true
# Битовая маска привязки аккаунта по HWid
# 2 - HDD
# 4 - BIOS
# 8 - CPU
# Пример: HWIDBan = 10 (привязка по HWID будет считатся только по HDD и CPU)
# Пример: HWIDBan = 14 (привязка по HWID будет считатся по HDD, CPU и BIOS)
HwidLockMask = 14
# ---------------------------------------------------------------------------#
скачиваем скачать идём сюда Исходники\dist\gameserver\data\html-ru\command
и извлекаем архив
9)скачиваем библиотеку Скачать
lameguard и кладём её вод сюда Исходники\lib
10)прописываем в батнике GameServer:
com.LameGuard.LameGuard перед l2p
пример:
Скрытый текст
@echo off
:start
echo Starting L2s GameServer.
echo.
java -server -Dfile.encoding=UTF-8 -Xmx1G -cp config;./* com.LameGuard.LameGuard l2p.gameserver.GameServer
REM Debug ...
REM java -Dfile.encoding=UTF-8 -cp config;./* -Xmx1G -Xnoclassgc -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=7456 l2s.gameserver.GameServer
if ERRORLEVEL 2 goto restart
if ERRORLEVEL 1 goto error
goto end
:restart
echo.
echo Server restarted ...
echo.
goto start
:error
echo.
echo Server terminated abnormaly ...
echo.
:end
echo.
echo Server terminated ...
echo.
pause
Вот практически и всё
11)идём сюда Исходники\loginserver\src\main\java\l2p\loginserver\gameservercon и вставляем то что щас скачаете
Скачать
12)идём сюда Исходники\loginserver\src\main\java\l2p\loginserver\gameservercon и открываем PacketHandler
после :
import l2p.loginserver.gameservercon.gspackets.SetAccountInfo;
добавляем:
import l2p.loginserver.gameservercon.gspackets.ChangeAccessLevel;
import l2p.loginserver.gameservercon.gspackets.ChangeAllowedHwid;
после:
Скрытый текст
case 0x05:
packet = new SetAccountInfo();
break;
ниже добавляем:
Скрытый текст
case 0x07:
packet = new ChangeAllowedIp();
break;
case 0x09:
packet = new ChangeAllowedHwid();
break;
13)Исходники\dist\loginserver открываем батник логин сервера и ставим то что мы ставили в стартгамесервер
14)компилим сборку заходим в игру пишим .lock и должно выскочить такое окошко
15) Залить sql в БД - скачать
P.S буду радовать ещё такими фишками на серв
P.S.S если будут ошибки пишете помогу исправить
Автор КиК