Перейти к содержанию

Таблица лидеров


Популярный контент

Показан контент с высокой репутацией 01/13/23 во всех областях

  1. 1 балл
    Вы ошиблись, скорее 95% будут знать, а 5% это тем, кому до звезды на вас. Но все-же, чтобы это сделать, при входе на сервер, нужно создать хранилище ип адресов, которые уже зашли на сервер, а собственно при отключении игроков, опустошать их ип-адрес из списка. Ну и если уже зашел и такой ип уже есть в списке, просто разрываем соединение. 2 вариант, более надежен от школы, если зашить в клиент условия на запуск игры. Почему надежнее? Потому, что 95% не смогут изменить dll как потребуется для них. А 5% не станут терять на это время, если конечно будет над чем терять, а не 3 секунды и все исправлено. Но 3 секунды и VPN сменить и 2 оконо запустить. На край виртуалку поднять. Ну да, усложнишь и 5% жизнь, если сделаешь и 1 и 2 варианты. Правда из 5% - 70% точно сразу сделают все. На сервере примерно выглядит так: Заходим в WorldManager.java - добавляем: private static volatile List<String> ips = new ArrayList<>(); public static void addIp(final String ip) { if (!ip.isEmpty() && !ips.contains(ip)) { ips.add(ip); } } public static boolean isIp(final String ip) { return !ip.isEmpty() && ips.contains(ip); } public static void removeIp(final String ip) { ips.remove(ip); } public static List<String> getIps() { return ips; } Далее переходим в AbstractPacket.java - добавляем: public String ip() { return this.getInetAddress().getHostAddress(); } public InetAddress getInetAddress() { return ((MMOConnection) ((MMOClient) this._client).getConnection()).getInetAddress(); } После переходим в EnterWorld.java -> runImpl(), run(), etc()... final boolean isIp = WorldManager.isIp(ip()); if (!isIp) { WorldManager.addIp(ip()); } В L2Player.java или что у вас там-> closeNetConnection() Тут придется написать так: final String ip = client.getConnection().getInetAddress().getHostAddress(); if (WorldManager.isIp(ip)) { WorldManager.removeIp(ip); } В L2GameClient.java -> CleanupTask -> run() WorldManager.removeIp(getConnection().getInetAddress().getHostAddress()); В Logout.java -> runImpl(), run(), etc()... WorldManager.removeIp(ip()); В RequestRestart.java -> runImpl(), run(), etc()... WorldManager.removeIp(ip()); В GameServerThread.java -> kickPlayer() WorldManager.removeIp(_connectionIPAddress); Думаю, намек понятен, при входе где нужно добавляем, при выходе, кике, вылетах и т.д., что вызывает отключение клиента от сервера, там просто из списка удаляем, чтобы не получилось так, что клиент подключился, его выбило или отключился, а потом подключается, а его не пустит, пока сервер не перезагрузим или во время его работы не вычистим из памяти его ип, который у нас записывается в список.
×
×
  • Создать...