From d5387bb853f0bf41af150a90da299dd019c8bf2a Mon Sep 17 00:00:00 2001
From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com>
Date: Fri, 6 Aug 2021 17:20:31 +0000
Subject: [PATCH] Implemented HWID punishment affect.
---
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 28 +-
.../punishmenthandlers/JailHandler.java | 28 +-
.../model/actor/instance/PlayerInstance.java | 10 +-
.../model/punishment/PunishmentAffect.java | 4 +-
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 26 +-
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 28 +-
.../punishmenthandlers/JailHandler.java | 28 +-
.../model/actor/instance/PlayerInstance.java | 10 +-
.../model/punishment/PunishmentAffect.java | 4 +-
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 26 +-
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 28 +-
.../punishmenthandlers/JailHandler.java | 28 +-
.../model/actor/instance/PlayerInstance.java | 10 +-
.../model/punishment/PunishmentAffect.java | 4 +-
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 26 +-
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 28 +-
.../punishmenthandlers/JailHandler.java | 28 +-
.../model/actor/instance/PlayerInstance.java | 10 +-
.../model/punishment/PunishmentAffect.java | 4 +-
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 26 +-
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 28 +-
.../punishmenthandlers/JailHandler.java | 28 +-
.../model/actor/instance/PlayerInstance.java | 10 +-
.../model/punishment/PunishmentAffect.java | 4 +-
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 26 +-
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 28 +-
.../punishmenthandlers/JailHandler.java | 28 +-
.../model/actor/instance/PlayerInstance.java | 10 +-
.../model/punishment/PunishmentAffect.java | 4 +-
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 26 +-
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 28 +-
.../punishmenthandlers/JailHandler.java | 28 +-
.../model/actor/instance/PlayerInstance.java | 10 +-
.../model/punishment/PunishmentAffect.java | 4 +-
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 26 +-
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 28 +-
.../punishmenthandlers/JailHandler.java | 28 +-
.../model/actor/instance/PlayerInstance.java | 10 +-
.../model/punishment/PunishmentAffect.java | 4 +-
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 26 +-
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 28 +-
.../punishmenthandlers/JailHandler.java | 28 +-
.../model/actor/instance/PlayerInstance.java | 10 +-
.../model/punishment/PunishmentAffect.java | 4 +-
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 26 +-
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 28 +-
.../punishmenthandlers/JailHandler.java | 28 +-
.../model/actor/instance/PlayerInstance.java | 10 +-
.../model/punishment/PunishmentAffect.java | 4 +-
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 26 +-
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 28 +-
.../punishmenthandlers/JailHandler.java | 28 +-
.../model/actor/instance/PlayerInstance.java | 10 +-
.../model/punishment/PunishmentAffect.java | 4 +-
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 26 +-
.../dist/game/config/Server.ini | 20 ++
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 26 ++
.../punishmenthandlers/JailHandler.java | 26 ++
.../java/org/l2jmobius/Config.java | 10 +
.../model/actor/instance/PlayerInstance.java | 10 +-
.../holders/ClientHardwareInfoHolder.java | 324 ++++++++++++++++++
.../model/variables/AccountVariables.java | 4 +
.../gameserver/network/GameClient.java | 18 +
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 94 ++++-
.../dist/game/config/Server.ini | 20 ++
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 26 ++
.../punishmenthandlers/JailHandler.java | 26 ++
.../java/org/l2jmobius/Config.java | 10 +
.../model/actor/instance/PlayerInstance.java | 10 +-
.../holders/ClientHardwareInfoHolder.java | 324 ++++++++++++++++++
.../model/variables/AccountVariables.java | 4 +
.../gameserver/network/GameClient.java | 18 +
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 95 ++++-
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 28 +-
.../punishmenthandlers/JailHandler.java | 28 +-
.../model/actor/instance/PlayerInstance.java | 10 +-
.../model/punishment/PunishmentAffect.java | 4 +-
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 26 +-
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 28 +-
.../punishmenthandlers/JailHandler.java | 28 +-
.../model/actor/instance/PlayerInstance.java | 10 +-
.../model/punishment/PunishmentAffect.java | 4 +-
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 26 +-
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 28 +-
.../punishmenthandlers/JailHandler.java | 28 +-
.../model/actor/instance/PlayerInstance.java | 10 +-
.../model/punishment/PunishmentAffect.java | 4 +-
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 26 +-
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 28 +-
.../punishmenthandlers/JailHandler.java | 28 +-
.../model/actor/instance/PlayerInstance.java | 10 +-
.../model/punishment/PunishmentAffect.java | 4 +-
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 26 +-
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 28 +-
.../punishmenthandlers/JailHandler.java | 28 +-
.../model/actor/instance/PlayerInstance.java | 10 +-
.../model/punishment/PunishmentAffect.java | 4 +-
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 26 +-
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 28 +-
.../punishmenthandlers/JailHandler.java | 28 +-
.../model/actor/instance/PlayerInstance.java | 10 +-
.../model/punishment/PunishmentAffect.java | 4 +-
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 26 +-
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 28 +-
.../punishmenthandlers/JailHandler.java | 28 +-
.../model/actor/instance/PlayerInstance.java | 10 +-
.../model/punishment/PunishmentAffect.java | 4 +-
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 26 +-
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 28 +-
.../punishmenthandlers/JailHandler.java | 28 +-
.../model/actor/instance/PlayerInstance.java | 10 +-
.../model/punishment/PunishmentAffect.java | 4 +-
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 26 +-
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 28 +-
.../punishmenthandlers/JailHandler.java | 28 +-
.../model/actor/instance/PlayerInstance.java | 10 +-
.../model/punishment/PunishmentAffect.java | 4 +-
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 26 +-
.../data/html/admin/punishment-player.htm | 6 +
.../dist/game/data/html/admin/punishment.htm | 5 +
.../admincommandhandlers/AdminPunishment.java | 19 +
.../punishmenthandlers/BanHandler.java | 13 +
.../punishmenthandlers/ChatBanHandler.java | 28 +-
.../punishmenthandlers/JailHandler.java | 28 +-
.../model/actor/instance/PlayerInstance.java | 10 +-
.../model/punishment/PunishmentAffect.java | 4 +-
.../clientpackets/CharacterSelect.java | 4 +-
.../network/clientpackets/EnterWorld.java | 26 +-
238 files changed, 3875 insertions(+), 287 deletions(-)
create mode 100644 L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/holders/ClientHardwareInfoHolder.java
create mode 100644 L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/holders/ClientHardwareInfoHolder.java
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_1.0_Ertheia/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_1.0_Ertheia/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 8c3faede2d..abd56ec643 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index c2ea6f7a5a..c61a43ba25 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -127,7 +153,7 @@ public class ChatBanHandler implements IPunishmentHandler
*/
private void applyToPlayer(PunishmentTask task, PlayerInstance player)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been chat banned for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 2abbe8e8e8..7ae17b01e3 100644
--- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -102,6 +102,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -146,6 +159,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -181,7 +207,7 @@ public class JailHandler implements IPunishmentHandler
player.sendPacket(msg);
if (task != null)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index d4bbeaf528..1030734306 100644
--- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -11321,7 +11321,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -11329,7 +11332,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
index f03126de41..fb007805f5 100644
--- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
+++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
@@ -23,8 +23,8 @@ public enum PunishmentAffect
{
ACCOUNT,
CHARACTER,
- IP;
- // HWID; Not implemented yet.
+ IP,
+ HWID;
public static PunishmentAffect getByName(String name)
{
diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 6575b2da37..5b25bd24c9 100644
--- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -101,7 +101,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index 2364f82a6d..93bef129b1 100644
--- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -42,6 +42,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
@@ -53,6 +54,8 @@ import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.residences.ClanHall;
import org.l2jmobius.gameserver.model.siege.Fort;
@@ -236,12 +239,6 @@ public class EnterWorld implements IClientIncomingPacket
}
}
- // Chat banned icon.
- if (player.isChatBanned())
- {
- player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
- }
-
// Set dead status if applies
if (player.getCurrentHp() < 0.5)
{
@@ -635,6 +632,7 @@ public class EnterWorld implements IClientIncomingPacket
player.updateAbnormalVisualEffects();
}
+ // Delayed HWID checks.
if (Config.HARDWARE_INFO_ENABLED)
{
ThreadPool.schedule(() ->
@@ -680,6 +678,13 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
// Check max players.
if (Config.KICK_MISSING_HWID && (hwInfo == null))
{
@@ -702,6 +707,15 @@ public class EnterWorld implements IClientIncomingPacket
}
}, 5000);
}
+
+ // Chat banned icon.
+ ThreadPool.schedule(() ->
+ {
+ if (player.isChatBanned())
+ {
+ player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
+ }
+ }, 5500);
}
/**
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_2.5_Underground/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_2.5_Underground/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 8c3faede2d..abd56ec643 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index c2ea6f7a5a..c61a43ba25 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -127,7 +153,7 @@ public class ChatBanHandler implements IPunishmentHandler
*/
private void applyToPlayer(PunishmentTask task, PlayerInstance player)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been chat banned for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 2abbe8e8e8..7ae17b01e3 100644
--- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -102,6 +102,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -146,6 +159,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -181,7 +207,7 @@ public class JailHandler implements IPunishmentHandler
player.sendPacket(msg);
if (task != null)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index 6ec2971ab3..fd4b4e631c 100644
--- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -11328,7 +11328,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -11336,7 +11339,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
index f03126de41..fb007805f5 100644
--- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
+++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
@@ -23,8 +23,8 @@ public enum PunishmentAffect
{
ACCOUNT,
CHARACTER,
- IP;
- // HWID; Not implemented yet.
+ IP,
+ HWID;
public static PunishmentAffect getByName(String name)
{
diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 6575b2da37..5b25bd24c9 100644
--- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -101,7 +101,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index 5f24c8f53f..94a1b121fe 100644
--- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -42,6 +42,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
@@ -54,6 +55,8 @@ import org.l2jmobius.gameserver.model.holders.AttendanceInfoHolder;
import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.residences.ClanHall;
import org.l2jmobius.gameserver.model.siege.Fort;
@@ -241,12 +244,6 @@ public class EnterWorld implements IClientIncomingPacket
}
}
- // Chat banned icon.
- if (player.isChatBanned())
- {
- player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
- }
-
// Set dead status if applies
if (player.getCurrentHp() < 0.5)
{
@@ -673,6 +670,7 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Delayed HWID checks.
if (Config.HARDWARE_INFO_ENABLED)
{
ThreadPool.schedule(() ->
@@ -718,6 +716,13 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
// Check max players.
if (Config.KICK_MISSING_HWID && (hwInfo == null))
{
@@ -740,6 +745,15 @@ public class EnterWorld implements IClientIncomingPacket
}
}, 5000);
}
+
+ // Chat banned icon.
+ ThreadPool.schedule(() ->
+ {
+ if (player.isChatBanned())
+ {
+ player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
+ }
+ }, 5500);
}
/**
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_3.0_Helios/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_3.0_Helios/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 8c3faede2d..abd56ec643 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index c2ea6f7a5a..c61a43ba25 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -127,7 +153,7 @@ public class ChatBanHandler implements IPunishmentHandler
*/
private void applyToPlayer(PunishmentTask task, PlayerInstance player)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been chat banned for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 2abbe8e8e8..7ae17b01e3 100644
--- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -102,6 +102,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -146,6 +159,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -181,7 +207,7 @@ public class JailHandler implements IPunishmentHandler
player.sendPacket(msg);
if (task != null)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index 2836e5021a..ee19336d23 100644
--- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -11330,7 +11330,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -11338,7 +11341,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
index f03126de41..fb007805f5 100644
--- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
+++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
@@ -23,8 +23,8 @@ public enum PunishmentAffect
{
ACCOUNT,
CHARACTER,
- IP;
- // HWID; Not implemented yet.
+ IP,
+ HWID;
public static PunishmentAffect getByName(String name)
{
diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 6575b2da37..5b25bd24c9 100644
--- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -101,7 +101,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index 5f24c8f53f..94a1b121fe 100644
--- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -42,6 +42,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
@@ -54,6 +55,8 @@ import org.l2jmobius.gameserver.model.holders.AttendanceInfoHolder;
import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.residences.ClanHall;
import org.l2jmobius.gameserver.model.siege.Fort;
@@ -241,12 +244,6 @@ public class EnterWorld implements IClientIncomingPacket
}
}
- // Chat banned icon.
- if (player.isChatBanned())
- {
- player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
- }
-
// Set dead status if applies
if (player.getCurrentHp() < 0.5)
{
@@ -673,6 +670,7 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Delayed HWID checks.
if (Config.HARDWARE_INFO_ENABLED)
{
ThreadPool.schedule(() ->
@@ -718,6 +716,13 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
// Check max players.
if (Config.KICK_MISSING_HWID && (hwInfo == null))
{
@@ -740,6 +745,15 @@ public class EnterWorld implements IClientIncomingPacket
}
}, 5000);
}
+
+ // Chat banned icon.
+ ThreadPool.schedule(() ->
+ {
+ if (player.isChatBanned())
+ {
+ player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
+ }
+ }, 5500);
}
/**
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 8c3faede2d..abd56ec643 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index c2ea6f7a5a..c61a43ba25 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -127,7 +153,7 @@ public class ChatBanHandler implements IPunishmentHandler
*/
private void applyToPlayer(PunishmentTask task, PlayerInstance player)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been chat banned for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 2abbe8e8e8..7ae17b01e3 100644
--- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -102,6 +102,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -146,6 +159,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -181,7 +207,7 @@ public class JailHandler implements IPunishmentHandler
player.sendPacket(msg);
if (task != null)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index cb6f607ad8..18950da71f 100644
--- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -11311,7 +11311,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -11319,7 +11322,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
index f03126de41..fb007805f5 100644
--- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
+++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
@@ -23,8 +23,8 @@ public enum PunishmentAffect
{
ACCOUNT,
CHARACTER,
- IP;
- // HWID; Not implemented yet.
+ IP,
+ HWID;
public static PunishmentAffect getByName(String name)
{
diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 6575b2da37..5b25bd24c9 100644
--- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -101,7 +101,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index 4588af50ea..3be65214a1 100644
--- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -42,6 +42,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
@@ -54,6 +55,8 @@ import org.l2jmobius.gameserver.model.holders.AttendanceInfoHolder;
import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.residences.ClanHall;
import org.l2jmobius.gameserver.model.siege.Fort;
@@ -241,12 +244,6 @@ public class EnterWorld implements IClientIncomingPacket
}
}
- // Chat banned icon.
- if (player.isChatBanned())
- {
- player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
- }
-
// Set dead status if applies
if (player.getCurrentHp() < 0.5)
{
@@ -673,6 +670,7 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Delayed HWID checks.
if (Config.HARDWARE_INFO_ENABLED)
{
ThreadPool.schedule(() ->
@@ -718,6 +716,13 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
// Check max players.
if (Config.KICK_MISSING_HWID && (hwInfo == null))
{
@@ -740,6 +745,15 @@ public class EnterWorld implements IClientIncomingPacket
}
}, 5000);
}
+
+ // Chat banned icon.
+ ThreadPool.schedule(() ->
+ {
+ if (player.isChatBanned())
+ {
+ player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
+ }
+ }, 5500);
}
/**
diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_5.0_Salvation/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_5.0_Salvation/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_5.0_Salvation/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_5.0_Salvation/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_5.0_Salvation/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_5.0_Salvation/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 8c3faede2d..abd56ec643 100644
--- a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index c2ea6f7a5a..c61a43ba25 100644
--- a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -127,7 +153,7 @@ public class ChatBanHandler implements IPunishmentHandler
*/
private void applyToPlayer(PunishmentTask task, PlayerInstance player)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been chat banned for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 2abbe8e8e8..7ae17b01e3 100644
--- a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -102,6 +102,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -146,6 +159,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -181,7 +207,7 @@ public class JailHandler implements IPunishmentHandler
player.sendPacket(msg);
if (task != null)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index 448be544c7..7bd109a11d 100644
--- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -11301,7 +11301,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -11309,7 +11312,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
index f03126de41..fb007805f5 100644
--- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
+++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
@@ -23,8 +23,8 @@ public enum PunishmentAffect
{
ACCOUNT,
CHARACTER,
- IP;
- // HWID; Not implemented yet.
+ IP,
+ HWID;
public static PunishmentAffect getByName(String name)
{
diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 6575b2da37..5b25bd24c9 100644
--- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -101,7 +101,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index be72640474..d6bd9443a8 100644
--- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -42,6 +42,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
@@ -55,6 +56,8 @@ import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.residences.ClanHall;
import org.l2jmobius.gameserver.model.siege.Fort;
@@ -240,12 +243,6 @@ public class EnterWorld implements IClientIncomingPacket
}
}
- // Chat banned icon.
- if (player.isChatBanned())
- {
- player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
- }
-
// Set dead status if applies
if (player.getCurrentHp() < 0.5)
{
@@ -679,6 +676,7 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Delayed HWID checks.
if (Config.HARDWARE_INFO_ENABLED)
{
ThreadPool.schedule(() ->
@@ -724,6 +722,13 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
// Check max players.
if (Config.KICK_MISSING_HWID && (hwInfo == null))
{
@@ -746,6 +751,15 @@ public class EnterWorld implements IClientIncomingPacket
}
}, 5000);
}
+
+ // Chat banned icon.
+ ThreadPool.schedule(() ->
+ {
+ if (player.isChatBanned())
+ {
+ player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
+ }
+ }, 5500);
}
/**
diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_5.5_EtinasFate/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_5.5_EtinasFate/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 8c3faede2d..abd56ec643 100644
--- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index c2ea6f7a5a..c61a43ba25 100644
--- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -127,7 +153,7 @@ public class ChatBanHandler implements IPunishmentHandler
*/
private void applyToPlayer(PunishmentTask task, PlayerInstance player)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been chat banned for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 2abbe8e8e8..7ae17b01e3 100644
--- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -102,6 +102,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -146,6 +159,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -181,7 +207,7 @@ public class JailHandler implements IPunishmentHandler
player.sendPacket(msg);
if (task != null)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index 5e132b0e19..72edd37346 100644
--- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -11304,7 +11304,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -11312,7 +11315,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
index f03126de41..fb007805f5 100644
--- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
+++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
@@ -23,8 +23,8 @@ public enum PunishmentAffect
{
ACCOUNT,
CHARACTER,
- IP;
- // HWID; Not implemented yet.
+ IP,
+ HWID;
public static PunishmentAffect getByName(String name)
{
diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 6575b2da37..5b25bd24c9 100644
--- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -101,7 +101,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index e37e4099bf..11c3b5aad2 100644
--- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -42,6 +42,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
@@ -55,6 +56,8 @@ import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.residences.ClanHall;
import org.l2jmobius.gameserver.model.siege.Fort;
@@ -240,12 +243,6 @@ public class EnterWorld implements IClientIncomingPacket
}
}
- // Chat banned icon.
- if (player.isChatBanned())
- {
- player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
- }
-
// Set dead status if applies
if (player.getCurrentHp() < 0.5)
{
@@ -679,6 +676,7 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Delayed HWID checks.
if (Config.HARDWARE_INFO_ENABLED)
{
ThreadPool.schedule(() ->
@@ -724,6 +722,13 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
// Check max players.
if (Config.KICK_MISSING_HWID && (hwInfo == null))
{
@@ -746,6 +751,15 @@ public class EnterWorld implements IClientIncomingPacket
}
}, 5000);
}
+
+ // Chat banned icon.
+ ThreadPool.schedule(() ->
+ {
+ if (player.isChatBanned())
+ {
+ player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
+ }
+ }, 5500);
}
/**
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_6.0_Fafurion/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_6.0_Fafurion/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 8c3faede2d..abd56ec643 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index c2ea6f7a5a..c61a43ba25 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -127,7 +153,7 @@ public class ChatBanHandler implements IPunishmentHandler
*/
private void applyToPlayer(PunishmentTask task, PlayerInstance player)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been chat banned for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 2abbe8e8e8..7ae17b01e3 100644
--- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -102,6 +102,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -146,6 +159,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -181,7 +207,7 @@ public class JailHandler implements IPunishmentHandler
player.sendPacket(msg);
if (task != null)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index c9132e76be..8ced8dacdc 100644
--- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -11310,7 +11310,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -11318,7 +11321,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
index f03126de41..fb007805f5 100644
--- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
+++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
@@ -23,8 +23,8 @@ public enum PunishmentAffect
{
ACCOUNT,
CHARACTER,
- IP;
- // HWID; Not implemented yet.
+ IP,
+ HWID;
public static PunishmentAffect getByName(String name)
{
diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 6575b2da37..5b25bd24c9 100644
--- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -101,7 +101,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index e37e4099bf..11c3b5aad2 100644
--- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -42,6 +42,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
@@ -55,6 +56,8 @@ import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.residences.ClanHall;
import org.l2jmobius.gameserver.model.siege.Fort;
@@ -240,12 +243,6 @@ public class EnterWorld implements IClientIncomingPacket
}
}
- // Chat banned icon.
- if (player.isChatBanned())
- {
- player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
- }
-
// Set dead status if applies
if (player.getCurrentHp() < 0.5)
{
@@ -679,6 +676,7 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Delayed HWID checks.
if (Config.HARDWARE_INFO_ENABLED)
{
ThreadPool.schedule(() ->
@@ -724,6 +722,13 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
// Check max players.
if (Config.KICK_MISSING_HWID && (hwInfo == null))
{
@@ -746,6 +751,15 @@ public class EnterWorld implements IClientIncomingPacket
}
}, 5000);
}
+
+ // Chat banned icon.
+ ThreadPool.schedule(() ->
+ {
+ if (player.isChatBanned())
+ {
+ player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
+ }
+ }, 5500);
}
/**
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 8c3faede2d..abd56ec643 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index c2ea6f7a5a..c61a43ba25 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -127,7 +153,7 @@ public class ChatBanHandler implements IPunishmentHandler
*/
private void applyToPlayer(PunishmentTask task, PlayerInstance player)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been chat banned for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 2abbe8e8e8..7ae17b01e3 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -102,6 +102,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -146,6 +159,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -181,7 +207,7 @@ public class JailHandler implements IPunishmentHandler
player.sendPacket(msg);
if (task != null)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index e6a3b74ffb..851d0de7ca 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -11320,7 +11320,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -11328,7 +11331,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
index f03126de41..fb007805f5 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
+++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
@@ -23,8 +23,8 @@ public enum PunishmentAffect
{
ACCOUNT,
CHARACTER,
- IP;
- // HWID; Not implemented yet.
+ IP,
+ HWID;
public static PunishmentAffect getByName(String name)
{
diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 6575b2da37..5b25bd24c9 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -101,7 +101,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index e7d47b0a3f..dfb494bb50 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -42,6 +42,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
@@ -55,6 +56,8 @@ import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.residences.ClanHall;
import org.l2jmobius.gameserver.model.siege.Fort;
@@ -241,12 +244,6 @@ public class EnterWorld implements IClientIncomingPacket
}
}
- // Chat banned icon.
- if (player.isChatBanned())
- {
- player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
- }
-
// Set dead status if applies
if (player.getCurrentHp() < 0.5)
{
@@ -685,6 +682,7 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Delayed HWID checks.
if (Config.HARDWARE_INFO_ENABLED)
{
ThreadPool.schedule(() ->
@@ -730,6 +728,13 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
// Check max players.
if (Config.KICK_MISSING_HWID && (hwInfo == null))
{
@@ -752,6 +757,15 @@ public class EnterWorld implements IClientIncomingPacket
}
}, 5000);
}
+
+ // Chat banned icon.
+ ThreadPool.schedule(() ->
+ {
+ if (player.isChatBanned())
+ {
+ player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
+ }
+ }, 5500);
}
/**
diff --git a/L2J_Mobius_8.0_Homunculus/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_8.0_Homunculus/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_8.0_Homunculus/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_8.0_Homunculus/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_8.0_Homunculus/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_8.0_Homunculus/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_8.0_Homunculus/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_8.0_Homunculus/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 8c3faede2d..abd56ec643 100644
--- a/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index c2ea6f7a5a..c61a43ba25 100644
--- a/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -127,7 +153,7 @@ public class ChatBanHandler implements IPunishmentHandler
*/
private void applyToPlayer(PunishmentTask task, PlayerInstance player)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been chat banned for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 2abbe8e8e8..7ae17b01e3 100644
--- a/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -102,6 +102,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -146,6 +159,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -181,7 +207,7 @@ public class JailHandler implements IPunishmentHandler
player.sendPacket(msg);
if (task != null)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index 4421b84daf..00af913275 100644
--- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -11436,7 +11436,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -11444,7 +11447,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
index f03126de41..fb007805f5 100644
--- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
+++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
@@ -23,8 +23,8 @@ public enum PunishmentAffect
{
ACCOUNT,
CHARACTER,
- IP;
- // HWID; Not implemented yet.
+ IP,
+ HWID;
public static PunishmentAffect getByName(String name)
{
diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 6575b2da37..5b25bd24c9 100644
--- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -101,7 +101,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index daf3e26463..32bc3b21ea 100644
--- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -42,6 +42,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
@@ -57,6 +58,8 @@ import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.residences.ClanHall;
import org.l2jmobius.gameserver.model.siege.Fort;
@@ -246,12 +249,6 @@ public class EnterWorld implements IClientIncomingPacket
}
}
- // Chat banned icon.
- if (player.isChatBanned())
- {
- player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
- }
-
// Set dead status if applies
if (player.getCurrentHp() < 0.5)
{
@@ -702,6 +699,7 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Delayed HWID checks.
if (Config.HARDWARE_INFO_ENABLED)
{
ThreadPool.schedule(() ->
@@ -747,6 +745,13 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
// Check max players.
if (Config.KICK_MISSING_HWID && (hwInfo == null))
{
@@ -769,6 +774,15 @@ public class EnterWorld implements IClientIncomingPacket
}
}, 5000);
}
+
+ // Chat banned icon.
+ ThreadPool.schedule(() ->
+ {
+ if (player.isChatBanned())
+ {
+ player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
+ }
+ }, 5500);
}
/**
diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 8c3faede2d..abd56ec643 100644
--- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index c2ea6f7a5a..c61a43ba25 100644
--- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -127,7 +153,7 @@ public class ChatBanHandler implements IPunishmentHandler
*/
private void applyToPlayer(PunishmentTask task, PlayerInstance player)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been chat banned for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 2abbe8e8e8..7ae17b01e3 100644
--- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -102,6 +102,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -146,6 +159,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -181,7 +207,7 @@ public class JailHandler implements IPunishmentHandler
player.sendPacket(msg);
if (task != null)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index 5706b7a830..143e90b66b 100644
--- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -11462,7 +11462,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -11470,7 +11473,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
index f03126de41..fb007805f5 100644
--- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
+++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
@@ -23,8 +23,8 @@ public enum PunishmentAffect
{
ACCOUNT,
CHARACTER,
- IP;
- // HWID; Not implemented yet.
+ IP,
+ HWID;
public static PunishmentAffect getByName(String name)
{
diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 6575b2da37..5b25bd24c9 100644
--- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -101,7 +101,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index 7b7e36d4f3..42824ae44e 100644
--- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -42,6 +42,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
@@ -57,6 +58,8 @@ import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.residences.ClanHall;
import org.l2jmobius.gameserver.model.siege.Fort;
@@ -248,12 +251,6 @@ public class EnterWorld implements IClientIncomingPacket
}
}
- // Chat banned icon.
- if (player.isChatBanned())
- {
- player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
- }
-
// Set dead status if applies
if (player.getCurrentHp() < 0.5)
{
@@ -712,6 +709,7 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Delayed HWID checks.
if (Config.HARDWARE_INFO_ENABLED)
{
ThreadPool.schedule(() ->
@@ -757,6 +755,13 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
// Check max players.
if (Config.KICK_MISSING_HWID && (hwInfo == null))
{
@@ -779,6 +784,15 @@ public class EnterWorld implements IClientIncomingPacket
}
}, 5000);
}
+
+ // Chat banned icon.
+ ThreadPool.schedule(() ->
+ {
+ if (player.isChatBanned())
+ {
+ player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
+ }
+ }, 5500);
}
/**
diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 8c3faede2d..abd56ec643 100644
--- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index c2ea6f7a5a..c61a43ba25 100644
--- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -127,7 +153,7 @@ public class ChatBanHandler implements IPunishmentHandler
*/
private void applyToPlayer(PunishmentTask task, PlayerInstance player)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been chat banned for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 2abbe8e8e8..7ae17b01e3 100644
--- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -102,6 +102,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -146,6 +159,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -181,7 +207,7 @@ public class JailHandler implements IPunishmentHandler
player.sendPacket(msg);
if (task != null)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index 5706b7a830..143e90b66b 100644
--- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -11462,7 +11462,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -11470,7 +11473,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
index f03126de41..fb007805f5 100644
--- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
+++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
@@ -23,8 +23,8 @@ public enum PunishmentAffect
{
ACCOUNT,
CHARACTER,
- IP;
- // HWID; Not implemented yet.
+ IP,
+ HWID;
public static PunishmentAffect getByName(String name)
{
diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 6575b2da37..5b25bd24c9 100644
--- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -101,7 +101,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index 7b7e36d4f3..42824ae44e 100644
--- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -42,6 +42,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
@@ -57,6 +58,8 @@ import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.residences.ClanHall;
import org.l2jmobius.gameserver.model.siege.Fort;
@@ -248,12 +251,6 @@ public class EnterWorld implements IClientIncomingPacket
}
}
- // Chat banned icon.
- if (player.isChatBanned())
- {
- player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
- }
-
// Set dead status if applies
if (player.getCurrentHp() < 0.5)
{
@@ -712,6 +709,7 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Delayed HWID checks.
if (Config.HARDWARE_INFO_ENABLED)
{
ThreadPool.schedule(() ->
@@ -757,6 +755,13 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
// Check max players.
if (Config.KICK_MISSING_HWID && (hwInfo == null))
{
@@ -779,6 +784,15 @@ public class EnterWorld implements IClientIncomingPacket
}
}, 5000);
}
+
+ // Chat banned icon.
+ ThreadPool.schedule(() ->
+ {
+ if (player.isChatBanned())
+ {
+ player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
+ }
+ }, 5500);
}
/**
diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/config/Server.ini b/L2J_Mobius_CT_2.4_Epilogue/dist/game/config/Server.ini
index 28f5b33d5f..e410898b90 100644
--- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/config/Server.ini
+++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/config/Server.ini
@@ -157,6 +157,26 @@ DeadLockCheckInterval = 20
RestartOnDeadlock = False
+# ---------------------------------------------------------------------------
+# Player HWID settings
+# ---------------------------------------------------------------------------
+
+# Check if hardware information is sent upon login.
+# WARNING: To receive hardware information client needs a modified
+# system for setting GameClient HWID via the setHardwareInfo method.
+# Default: False
+EnableHardwareInfo = False
+
+# Players without hardware information are kicked from the game.
+# Automatically set to True when MaxPlayersPerHWID > 0.
+# Default: False
+KickMissingHWID = False
+
+# Maximum number of players per HWID allowed to enter game.
+# Default: 0 (unlimited)
+MaxPlayersPerHWID = 0
+
+
# ---------------------------------------------------------------------------
# Misc Player Settings
# ---------------------------------------------------------------------------
diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 5595f30ead..149d310b6c 100644
--- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index 9b4dd2533f..c61a43ba25 100644
--- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index a9e909d07a..3ed05b3505 100644
--- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -103,6 +103,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -147,6 +160,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/Config.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/Config.java
index 6b358bb40b..1a2bd05f0c 100644
--- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/Config.java
+++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/Config.java
@@ -881,6 +881,9 @@ public class Config
public static String BACKUP_PATH;
public static int BACKUP_DAYS;
public static int MAXIMUM_ONLINE_USERS;
+ public static boolean HARDWARE_INFO_ENABLED;
+ public static boolean KICK_MISSING_HWID;
+ public static int MAX_PLAYERS_PER_HWID;
public static Pattern CHARNAME_TEMPLATE_PATTERN;
public static String PET_NAME_TEMPLATE;
public static String CLAN_NAME_TEMPLATE;
@@ -1456,6 +1459,13 @@ public class Config
CLAN_NAME_TEMPLATE = serverSettings.getString("ClanNameTemplate", ".*");
MAX_CHARACTERS_NUMBER_PER_ACCOUNT = serverSettings.getInt("CharMaxNumber", 7);
MAXIMUM_ONLINE_USERS = serverSettings.getInt("MaximumOnlineUsers", 2000);
+ HARDWARE_INFO_ENABLED = serverSettings.getBoolean("EnableHardwareInfo", false);
+ KICK_MISSING_HWID = serverSettings.getBoolean("KickMissingHWID", false);
+ MAX_PLAYERS_PER_HWID = serverSettings.getInt("MaxPlayersPerHWID", 0);
+ if (MAX_PLAYERS_PER_HWID > 0)
+ {
+ KICK_MISSING_HWID = true;
+ }
final String[] protocols = serverSettings.getString("AllowedProtocolRevisions", "267;268;271;273").split(";");
PROTOCOL_LIST = new ArrayList<>(protocols.length);
for (String protocol : protocols)
diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index 4baa04d550..965f31538d 100644
--- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -12171,7 +12171,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -12179,7 +12182,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/holders/ClientHardwareInfoHolder.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/holders/ClientHardwareInfoHolder.java
new file mode 100644
index 0000000000..0ddbf33e30
--- /dev/null
+++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/holders/ClientHardwareInfoHolder.java
@@ -0,0 +1,324 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.model.holders;
+
+import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
+import org.l2jmobius.gameserver.model.variables.AccountVariables;
+
+/**
+ * @author Mobius
+ */
+public class ClientHardwareInfoHolder
+{
+ private final String _macAddress;
+ private final int _windowsPlatformId;
+ private final int _windowsMajorVersion;
+ private final int _windowsMinorVersion;
+ private final int _windowsBuildNumber;
+ private final int _directxVersion;
+ private final int _directxRevision;
+ private final String _cpuName;
+ private final int _cpuSpeed;
+ private final int _cpuCoreCount;
+ private final int _vgaCount;
+ private final int _vgaPcxSpeed;
+ private final int _physMemorySlot1;
+ private final int _physMemorySlot2;
+ private final int _physMemorySlot3;
+ private final int _videoMemory;
+ private final int _vgaVersion;
+ private final String _vgaName;
+ private final String _vgaDriverVersion;
+
+ public ClientHardwareInfoHolder(String macAddress, int windowsPlatformId, int windowsMajorVersion, int windowsMinorVersion, int windowsBuildNumber, int directxVersion, int directxRevision, String cpuName, int cpuSpeed, int cpuCoreCount, int vgaCount, int vgaPcxSpeed, int physMemorySlot1, int physMemorySlot2, int physMemorySlot3, int videoMemory, int vgaVersion, String vgaName, String vgaDriverVersion)
+ {
+ _macAddress = macAddress;
+ _windowsPlatformId = windowsPlatformId;
+ _windowsMajorVersion = windowsMajorVersion;
+ _windowsMinorVersion = windowsMinorVersion;
+ _windowsBuildNumber = windowsBuildNumber;
+ _directxVersion = directxVersion;
+ _directxRevision = directxRevision;
+ _cpuName = cpuName;
+ _cpuSpeed = cpuSpeed;
+ _cpuCoreCount = cpuCoreCount;
+ _vgaCount = vgaCount;
+ _vgaPcxSpeed = vgaPcxSpeed;
+ _physMemorySlot1 = physMemorySlot1;
+ _physMemorySlot2 = physMemorySlot2;
+ _physMemorySlot3 = physMemorySlot3;
+ _videoMemory = videoMemory;
+ _vgaVersion = vgaVersion;
+ _vgaName = vgaName;
+ _vgaDriverVersion = vgaDriverVersion;
+ }
+
+ public ClientHardwareInfoHolder(String info)
+ {
+ final String[] split = info.split(AccountVariables.HWIDSLIT_VAR);
+ _macAddress = split[0];
+ _windowsPlatformId = Integer.valueOf(split[1]);
+ _windowsMajorVersion = Integer.valueOf(split[2]);
+ _windowsMinorVersion = Integer.valueOf(split[3]);
+ _windowsBuildNumber = Integer.valueOf(split[4]);
+ _directxVersion = Integer.valueOf(split[5]);
+ _directxRevision = Integer.valueOf(split[6]);
+ _cpuName = split[7];
+ _cpuSpeed = Integer.valueOf(split[8]);
+ _cpuCoreCount = Integer.valueOf(split[9]);
+ _vgaCount = Integer.valueOf(split[10]);
+ _vgaPcxSpeed = Integer.valueOf(split[11]);
+ _physMemorySlot1 = Integer.valueOf(split[12]);
+ _physMemorySlot2 = Integer.valueOf(split[13]);
+ _physMemorySlot3 = Integer.valueOf(split[14]);
+ _videoMemory = Integer.valueOf(split[15]);
+ _vgaVersion = Integer.valueOf(split[16]);
+ _vgaName = split[17];
+ _vgaDriverVersion = split[18];
+ }
+
+ /**
+ * Save hardware info to account variables for later use.
+ * @param player The PlayerInstance related with this hardware info.
+ */
+ public void store(PlayerInstance player)
+ {
+ final StringBuilder sb = new StringBuilder();
+ sb.append(_macAddress);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_windowsPlatformId);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_windowsMajorVersion);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_windowsMinorVersion);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_windowsBuildNumber);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_directxVersion);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_directxRevision);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_cpuName);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_cpuSpeed);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_cpuCoreCount);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_vgaCount);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_vgaPcxSpeed);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_physMemorySlot1);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_physMemorySlot2);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_physMemorySlot3);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_videoMemory);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_vgaVersion);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_vgaName);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_vgaDriverVersion);
+ player.getAccountVariables().set(AccountVariables.HWID, sb.toString());
+ }
+
+ /**
+ * @return the macAddress
+ */
+ public String getMacAddress()
+ {
+ return _macAddress;
+ }
+
+ /**
+ * @return the windowsPlatformId
+ */
+ public int getWindowsPlatformId()
+ {
+ return _windowsPlatformId;
+ }
+
+ /**
+ * @return the windowsMajorVersion
+ */
+ public int getWindowsMajorVersion()
+ {
+ return _windowsMajorVersion;
+ }
+
+ /**
+ * @return the windowsMinorVersion
+ */
+ public int getWindowsMinorVersion()
+ {
+ return _windowsMinorVersion;
+ }
+
+ /**
+ * @return the windowsBuildNumber
+ */
+ public int getWindowsBuildNumber()
+ {
+ return _windowsBuildNumber;
+ }
+
+ /**
+ * @return the directxVersion
+ */
+ public int getDirectxVersion()
+ {
+ return _directxVersion;
+ }
+
+ /**
+ * @return the directxRevision
+ */
+ public int getDirectxRevision()
+ {
+ return _directxRevision;
+ }
+
+ /**
+ * @return the cpuName
+ */
+ public String getCpuName()
+ {
+ return _cpuName;
+ }
+
+ /**
+ * @return the cpuSpeed
+ */
+ public int getCpuSpeed()
+ {
+ return _cpuSpeed;
+ }
+
+ /**
+ * @return the cpuCoreCount
+ */
+ public int getCpuCoreCount()
+ {
+ return _cpuCoreCount;
+ }
+
+ /**
+ * @return the vgaCount
+ */
+ public int getVgaCount()
+ {
+ return _vgaCount;
+ }
+
+ /**
+ * @return the vgaPcxSpeed
+ */
+ public int getVgaPcxSpeed()
+ {
+ return _vgaPcxSpeed;
+ }
+
+ /**
+ * @return the physMemorySlot1
+ */
+ public int getPhysMemorySlot1()
+ {
+ return _physMemorySlot1;
+ }
+
+ /**
+ * @return the physMemorySlot2
+ */
+ public int getPhysMemorySlot2()
+ {
+ return _physMemorySlot2;
+ }
+
+ /**
+ * @return the physMemorySlot3
+ */
+ public int getPhysMemorySlot3()
+ {
+ return _physMemorySlot3;
+ }
+
+ /**
+ * @return the videoMemory
+ */
+ public int getVideoMemory()
+ {
+ return _videoMemory;
+ }
+
+ /**
+ * @return the vgaVersion
+ */
+ public int getVgaVersion()
+ {
+ return _vgaVersion;
+ }
+
+ /**
+ * @return the vgaName
+ */
+ public String getVgaName()
+ {
+ return _vgaName;
+ }
+
+ /**
+ * @return the vgaDriverVersion
+ */
+ public String getVgaDriverVersion()
+ {
+ return _vgaDriverVersion;
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof ClientHardwareInfoHolder)
+ {
+ final ClientHardwareInfoHolder info = (ClientHardwareInfoHolder) obj;
+ if ((_macAddress.equals(info.getMacAddress())) && //
+ (_windowsPlatformId == info.getWindowsPlatformId()) && //
+ (_windowsMajorVersion == info.getWindowsMajorVersion()) && //
+ (_windowsMinorVersion == info.getWindowsMinorVersion()) && //
+ (_windowsBuildNumber == info.getWindowsBuildNumber()) && //
+ (_directxVersion == info.getDirectxVersion()) && //
+ (_directxRevision == info.getDirectxRevision()) && //
+ (_cpuName.equals(info.getCpuName())) && //
+ (_cpuSpeed == info.getCpuSpeed()) && //
+ (_cpuCoreCount == info.getCpuCoreCount()) && //
+ (_vgaCount == info.getVgaCount()) && //
+ (_vgaPcxSpeed == info.getVgaPcxSpeed()) && //
+ (_physMemorySlot1 == info.getPhysMemorySlot1()) && //
+ (_physMemorySlot2 == info.getPhysMemorySlot2()) && //
+ (_physMemorySlot3 == info.getPhysMemorySlot3()) && //
+ (_videoMemory == info.getVideoMemory()) && //
+ (_vgaVersion == info.getVgaVersion()) && //
+ (_vgaName.equals(info.getVgaName())) && //
+ (_vgaDriverVersion.equals(info.getVgaDriverVersion())))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/variables/AccountVariables.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/variables/AccountVariables.java
index fc36c5f076..dbce4c8eea 100644
--- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/variables/AccountVariables.java
+++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/variables/AccountVariables.java
@@ -38,6 +38,10 @@ public class AccountVariables extends AbstractVariables
private static final String DELETE_QUERY = "DELETE FROM account_gsdata WHERE account_name = ?";
private static final String INSERT_QUERY = "INSERT INTO account_gsdata (account_name, var, value) VALUES (?, ?, ?)";
+ // Public variable names
+ public static final String HWID = "HWID";
+ public static final String HWIDSLIT_VAR = " ";
+
private final String _accountName;
public AccountVariables(String accountName)
diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/network/GameClient.java
index 5a3a6798f8..4494bc2032 100644
--- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/network/GameClient.java
+++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/network/GameClient.java
@@ -40,6 +40,7 @@ import org.l2jmobius.gameserver.model.CharSelectInfoPackage;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.clan.Clan;
+import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
import org.l2jmobius.gameserver.network.serverpackets.AbstractNpcInfo.NpcInfo;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
@@ -70,6 +71,7 @@ public class GameClient extends ChannelInboundHandler
private String _accountName;
private SessionKey _sessionId;
private PlayerInstance _player;
+ private ClientHardwareInfoHolder _hardwareInfo;
private List _charSlotMapping = null;
private volatile boolean _isDetached = false;
private boolean _isAuthedGG;
@@ -678,4 +680,20 @@ public class GameClient extends ChannelInboundHandler
{
return _crypt;
}
+
+ /**
+ * @return the hardwareInfo
+ */
+ public ClientHardwareInfoHolder getHardwareInfo()
+ {
+ return _hardwareInfo;
+ }
+
+ /**
+ * @param hardwareInfo
+ */
+ public void setHardwareInfo(ClientHardwareInfoHolder hardwareInfo)
+ {
+ _hardwareInfo = hardwareInfo;
+ }
}
diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 16bd9a2b42..4fd186a4db 100644
--- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -95,7 +95,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index 8e907573bd..4f4db4f012 100644
--- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -17,8 +17,11 @@
package org.l2jmobius.gameserver.network.clientpackets;
import java.util.Calendar;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.Config;
+import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.commons.util.Chronos;
import org.l2jmobius.gameserver.LoginServerThread;
@@ -40,6 +43,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.TerritoryWarManager;
@@ -52,7 +56,10 @@ import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.instance.ClassMasterInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.clan.Clan;
+import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.model.residences.AuctionableHall;
@@ -62,6 +69,7 @@ import org.l2jmobius.gameserver.model.siege.FortSiege;
import org.l2jmobius.gameserver.model.siege.Siege;
import org.l2jmobius.gameserver.model.siege.clanhalls.SiegableHall;
import org.l2jmobius.gameserver.model.skills.CommonSkill;
+import org.l2jmobius.gameserver.model.variables.AccountVariables;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.ConnectionState;
import org.l2jmobius.gameserver.network.Disconnection;
@@ -104,7 +112,9 @@ import org.l2jmobius.gameserver.util.BuilderUtil;
*/
public class EnterWorld implements IClientIncomingPacket
{
- private final int[][] tracert = new int[5][4];
+ private static final Map TRACE_HWINFO = new ConcurrentHashMap<>();
+
+ private final int[][] _tracert = new int[5][4];
@Override
public boolean read(GameClient client, PacketReader packet)
@@ -120,7 +130,7 @@ public class EnterWorld implements IClientIncomingPacket
{
for (int o = 0; o < 4; o++)
{
- tracert[i][o] = packet.readC();
+ _tracert[i][o] = packet.readC();
}
}
return true;
@@ -142,11 +152,11 @@ public class EnterWorld implements IClientIncomingPacket
final String[] adress = new String[5];
for (int i = 0; i < 5; i++)
{
- adress[i] = tracert[i][0] + "." + tracert[i][1] + "." + tracert[i][2] + "." + tracert[i][3];
+ adress[i] = _tracert[i][0] + "." + _tracert[i][1] + "." + _tracert[i][2] + "." + _tracert[i][3];
}
LoginServerThread.getInstance().sendClientTracert(player.getAccountName(), adress);
- client.setClientTracert(tracert);
+ client.setClientTracert(_tracert);
// Restore to instanced area if enabled
if (Config.RESTORE_PLAYER_INSTANCE)
@@ -620,6 +630,82 @@ public class EnterWorld implements IClientIncomingPacket
// Unstuck players that had client open when server crashed.
player.sendPacket(ActionFailed.STATIC_PACKET);
+
+ // Delayed HWID checks.
+ if (Config.HARDWARE_INFO_ENABLED)
+ {
+ ThreadPool.schedule(() ->
+ {
+ // Generate trace string.
+ final StringBuilder sb = new StringBuilder();
+ for (int[] i : _tracert)
+ {
+ for (int j : i)
+ {
+ sb.append(j);
+ sb.append(".");
+ }
+ }
+ final String trace = sb.toString();
+
+ // Get hardware info from client.
+ ClientHardwareInfoHolder hwInfo = client.getHardwareInfo();
+ if (hwInfo != null)
+ {
+ hwInfo.store(player);
+ TRACE_HWINFO.put(trace, hwInfo);
+ }
+ else
+ {
+ // Get hardware info from stored tracert map.
+ hwInfo = TRACE_HWINFO.get(trace);
+ if (hwInfo != null)
+ {
+ hwInfo.store(player);
+ client.setHardwareInfo(hwInfo);
+ }
+ // Get hardware info from account variables.
+ else
+ {
+ final String storedInfo = player.getAccountVariables().getString(AccountVariables.HWID, "");
+ if (!storedInfo.isEmpty())
+ {
+ hwInfo = new ClientHardwareInfoHolder(storedInfo);
+ TRACE_HWINFO.put(trace, hwInfo);
+ client.setHardwareInfo(hwInfo);
+ }
+ }
+ }
+
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
+ // Check max players.
+ if (Config.KICK_MISSING_HWID && (hwInfo == null))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ }
+ else if (Config.MAX_PLAYERS_PER_HWID > 0)
+ {
+ int count = 0;
+ for (PlayerInstance plr : World.getInstance().getPlayers())
+ {
+ if ((plr.isOnlineInt() == 1) && (plr.getClient().getHardwareInfo().equals(hwInfo)))
+ {
+ count++;
+ }
+ }
+ if (count >= Config.MAX_PLAYERS_PER_HWID)
+ {
+ Disconnection.of(client).defaultSequence(false);
+ }
+ }
+ }, 5000);
+ }
}
private void engage(PlayerInstance player)
diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/config/Server.ini b/L2J_Mobius_CT_2.6_HighFive/dist/game/config/Server.ini
index 5f4e106e11..7647279cc4 100644
--- a/L2J_Mobius_CT_2.6_HighFive/dist/game/config/Server.ini
+++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/config/Server.ini
@@ -157,6 +157,26 @@ DeadLockCheckInterval = 20
RestartOnDeadlock = False
+# ---------------------------------------------------------------------------
+# Player HWID settings
+# ---------------------------------------------------------------------------
+
+# Check if hardware information is sent upon login.
+# WARNING: To receive hardware information client needs a modified
+# system for setting GameClient HWID via the setHardwareInfo method.
+# Default: False
+EnableHardwareInfo = False
+
+# Players without hardware information are kicked from the game.
+# Automatically set to True when MaxPlayersPerHWID > 0.
+# Default: False
+KickMissingHWID = False
+
+# Maximum number of players per HWID allowed to enter game.
+# Default: 0 (unlimited)
+MaxPlayersPerHWID = 0
+
+
# ---------------------------------------------------------------------------
# Misc Player Settings
# ---------------------------------------------------------------------------
diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 5595f30ead..149d310b6c 100644
--- a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index 9b4dd2533f..c61a43ba25 100644
--- a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index f6da605e79..7b119d5596 100644
--- a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -103,6 +103,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -147,6 +160,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/Config.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/Config.java
index a047c771f9..606f6f7a75 100644
--- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/Config.java
+++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/Config.java
@@ -886,6 +886,9 @@ public class Config
public static String BACKUP_PATH;
public static int BACKUP_DAYS;
public static int MAXIMUM_ONLINE_USERS;
+ public static boolean HARDWARE_INFO_ENABLED;
+ public static boolean KICK_MISSING_HWID;
+ public static int MAX_PLAYERS_PER_HWID;
public static Pattern CHARNAME_TEMPLATE_PATTERN;
public static String PET_NAME_TEMPLATE;
public static String CLAN_NAME_TEMPLATE;
@@ -1456,6 +1459,13 @@ public class Config
CLAN_NAME_TEMPLATE = serverSettings.getString("ClanNameTemplate", ".*");
MAX_CHARACTERS_NUMBER_PER_ACCOUNT = serverSettings.getInt("CharMaxNumber", 7);
MAXIMUM_ONLINE_USERS = serverSettings.getInt("MaximumOnlineUsers", 2000);
+ HARDWARE_INFO_ENABLED = serverSettings.getBoolean("EnableHardwareInfo", false);
+ KICK_MISSING_HWID = serverSettings.getBoolean("KickMissingHWID", false);
+ MAX_PLAYERS_PER_HWID = serverSettings.getInt("MaxPlayersPerHWID", 0);
+ if (MAX_PLAYERS_PER_HWID > 0)
+ {
+ KICK_MISSING_HWID = true;
+ }
final String[] protocols = serverSettings.getString("AllowedProtocolRevisions", "267;268;271;273").split(";");
PROTOCOL_LIST = new ArrayList<>(protocols.length);
for (String protocol : protocols)
diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index de29de6398..02af58233d 100644
--- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -12064,7 +12064,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -12072,7 +12075,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/holders/ClientHardwareInfoHolder.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/holders/ClientHardwareInfoHolder.java
new file mode 100644
index 0000000000..0ddbf33e30
--- /dev/null
+++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/holders/ClientHardwareInfoHolder.java
@@ -0,0 +1,324 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.model.holders;
+
+import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
+import org.l2jmobius.gameserver.model.variables.AccountVariables;
+
+/**
+ * @author Mobius
+ */
+public class ClientHardwareInfoHolder
+{
+ private final String _macAddress;
+ private final int _windowsPlatformId;
+ private final int _windowsMajorVersion;
+ private final int _windowsMinorVersion;
+ private final int _windowsBuildNumber;
+ private final int _directxVersion;
+ private final int _directxRevision;
+ private final String _cpuName;
+ private final int _cpuSpeed;
+ private final int _cpuCoreCount;
+ private final int _vgaCount;
+ private final int _vgaPcxSpeed;
+ private final int _physMemorySlot1;
+ private final int _physMemorySlot2;
+ private final int _physMemorySlot3;
+ private final int _videoMemory;
+ private final int _vgaVersion;
+ private final String _vgaName;
+ private final String _vgaDriverVersion;
+
+ public ClientHardwareInfoHolder(String macAddress, int windowsPlatformId, int windowsMajorVersion, int windowsMinorVersion, int windowsBuildNumber, int directxVersion, int directxRevision, String cpuName, int cpuSpeed, int cpuCoreCount, int vgaCount, int vgaPcxSpeed, int physMemorySlot1, int physMemorySlot2, int physMemorySlot3, int videoMemory, int vgaVersion, String vgaName, String vgaDriverVersion)
+ {
+ _macAddress = macAddress;
+ _windowsPlatformId = windowsPlatformId;
+ _windowsMajorVersion = windowsMajorVersion;
+ _windowsMinorVersion = windowsMinorVersion;
+ _windowsBuildNumber = windowsBuildNumber;
+ _directxVersion = directxVersion;
+ _directxRevision = directxRevision;
+ _cpuName = cpuName;
+ _cpuSpeed = cpuSpeed;
+ _cpuCoreCount = cpuCoreCount;
+ _vgaCount = vgaCount;
+ _vgaPcxSpeed = vgaPcxSpeed;
+ _physMemorySlot1 = physMemorySlot1;
+ _physMemorySlot2 = physMemorySlot2;
+ _physMemorySlot3 = physMemorySlot3;
+ _videoMemory = videoMemory;
+ _vgaVersion = vgaVersion;
+ _vgaName = vgaName;
+ _vgaDriverVersion = vgaDriverVersion;
+ }
+
+ public ClientHardwareInfoHolder(String info)
+ {
+ final String[] split = info.split(AccountVariables.HWIDSLIT_VAR);
+ _macAddress = split[0];
+ _windowsPlatformId = Integer.valueOf(split[1]);
+ _windowsMajorVersion = Integer.valueOf(split[2]);
+ _windowsMinorVersion = Integer.valueOf(split[3]);
+ _windowsBuildNumber = Integer.valueOf(split[4]);
+ _directxVersion = Integer.valueOf(split[5]);
+ _directxRevision = Integer.valueOf(split[6]);
+ _cpuName = split[7];
+ _cpuSpeed = Integer.valueOf(split[8]);
+ _cpuCoreCount = Integer.valueOf(split[9]);
+ _vgaCount = Integer.valueOf(split[10]);
+ _vgaPcxSpeed = Integer.valueOf(split[11]);
+ _physMemorySlot1 = Integer.valueOf(split[12]);
+ _physMemorySlot2 = Integer.valueOf(split[13]);
+ _physMemorySlot3 = Integer.valueOf(split[14]);
+ _videoMemory = Integer.valueOf(split[15]);
+ _vgaVersion = Integer.valueOf(split[16]);
+ _vgaName = split[17];
+ _vgaDriverVersion = split[18];
+ }
+
+ /**
+ * Save hardware info to account variables for later use.
+ * @param player The PlayerInstance related with this hardware info.
+ */
+ public void store(PlayerInstance player)
+ {
+ final StringBuilder sb = new StringBuilder();
+ sb.append(_macAddress);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_windowsPlatformId);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_windowsMajorVersion);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_windowsMinorVersion);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_windowsBuildNumber);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_directxVersion);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_directxRevision);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_cpuName);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_cpuSpeed);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_cpuCoreCount);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_vgaCount);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_vgaPcxSpeed);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_physMemorySlot1);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_physMemorySlot2);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_physMemorySlot3);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_videoMemory);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_vgaVersion);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_vgaName);
+ sb.append(AccountVariables.HWIDSLIT_VAR);
+ sb.append(_vgaDriverVersion);
+ player.getAccountVariables().set(AccountVariables.HWID, sb.toString());
+ }
+
+ /**
+ * @return the macAddress
+ */
+ public String getMacAddress()
+ {
+ return _macAddress;
+ }
+
+ /**
+ * @return the windowsPlatformId
+ */
+ public int getWindowsPlatformId()
+ {
+ return _windowsPlatformId;
+ }
+
+ /**
+ * @return the windowsMajorVersion
+ */
+ public int getWindowsMajorVersion()
+ {
+ return _windowsMajorVersion;
+ }
+
+ /**
+ * @return the windowsMinorVersion
+ */
+ public int getWindowsMinorVersion()
+ {
+ return _windowsMinorVersion;
+ }
+
+ /**
+ * @return the windowsBuildNumber
+ */
+ public int getWindowsBuildNumber()
+ {
+ return _windowsBuildNumber;
+ }
+
+ /**
+ * @return the directxVersion
+ */
+ public int getDirectxVersion()
+ {
+ return _directxVersion;
+ }
+
+ /**
+ * @return the directxRevision
+ */
+ public int getDirectxRevision()
+ {
+ return _directxRevision;
+ }
+
+ /**
+ * @return the cpuName
+ */
+ public String getCpuName()
+ {
+ return _cpuName;
+ }
+
+ /**
+ * @return the cpuSpeed
+ */
+ public int getCpuSpeed()
+ {
+ return _cpuSpeed;
+ }
+
+ /**
+ * @return the cpuCoreCount
+ */
+ public int getCpuCoreCount()
+ {
+ return _cpuCoreCount;
+ }
+
+ /**
+ * @return the vgaCount
+ */
+ public int getVgaCount()
+ {
+ return _vgaCount;
+ }
+
+ /**
+ * @return the vgaPcxSpeed
+ */
+ public int getVgaPcxSpeed()
+ {
+ return _vgaPcxSpeed;
+ }
+
+ /**
+ * @return the physMemorySlot1
+ */
+ public int getPhysMemorySlot1()
+ {
+ return _physMemorySlot1;
+ }
+
+ /**
+ * @return the physMemorySlot2
+ */
+ public int getPhysMemorySlot2()
+ {
+ return _physMemorySlot2;
+ }
+
+ /**
+ * @return the physMemorySlot3
+ */
+ public int getPhysMemorySlot3()
+ {
+ return _physMemorySlot3;
+ }
+
+ /**
+ * @return the videoMemory
+ */
+ public int getVideoMemory()
+ {
+ return _videoMemory;
+ }
+
+ /**
+ * @return the vgaVersion
+ */
+ public int getVgaVersion()
+ {
+ return _vgaVersion;
+ }
+
+ /**
+ * @return the vgaName
+ */
+ public String getVgaName()
+ {
+ return _vgaName;
+ }
+
+ /**
+ * @return the vgaDriverVersion
+ */
+ public String getVgaDriverVersion()
+ {
+ return _vgaDriverVersion;
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof ClientHardwareInfoHolder)
+ {
+ final ClientHardwareInfoHolder info = (ClientHardwareInfoHolder) obj;
+ if ((_macAddress.equals(info.getMacAddress())) && //
+ (_windowsPlatformId == info.getWindowsPlatformId()) && //
+ (_windowsMajorVersion == info.getWindowsMajorVersion()) && //
+ (_windowsMinorVersion == info.getWindowsMinorVersion()) && //
+ (_windowsBuildNumber == info.getWindowsBuildNumber()) && //
+ (_directxVersion == info.getDirectxVersion()) && //
+ (_directxRevision == info.getDirectxRevision()) && //
+ (_cpuName.equals(info.getCpuName())) && //
+ (_cpuSpeed == info.getCpuSpeed()) && //
+ (_cpuCoreCount == info.getCpuCoreCount()) && //
+ (_vgaCount == info.getVgaCount()) && //
+ (_vgaPcxSpeed == info.getVgaPcxSpeed()) && //
+ (_physMemorySlot1 == info.getPhysMemorySlot1()) && //
+ (_physMemorySlot2 == info.getPhysMemorySlot2()) && //
+ (_physMemorySlot3 == info.getPhysMemorySlot3()) && //
+ (_videoMemory == info.getVideoMemory()) && //
+ (_vgaVersion == info.getVgaVersion()) && //
+ (_vgaName.equals(info.getVgaName())) && //
+ (_vgaDriverVersion.equals(info.getVgaDriverVersion())))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/variables/AccountVariables.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/variables/AccountVariables.java
index fc36c5f076..dbce4c8eea 100644
--- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/variables/AccountVariables.java
+++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/variables/AccountVariables.java
@@ -38,6 +38,10 @@ public class AccountVariables extends AbstractVariables
private static final String DELETE_QUERY = "DELETE FROM account_gsdata WHERE account_name = ?";
private static final String INSERT_QUERY = "INSERT INTO account_gsdata (account_name, var, value) VALUES (?, ?, ?)";
+ // Public variable names
+ public static final String HWID = "HWID";
+ public static final String HWIDSLIT_VAR = " ";
+
private final String _accountName;
public AccountVariables(String accountName)
diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/network/GameClient.java
index 17f1f3a582..0f36039dc3 100644
--- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/network/GameClient.java
+++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/network/GameClient.java
@@ -41,6 +41,7 @@ import org.l2jmobius.gameserver.model.CharSelectInfoPackage;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.clan.Clan;
+import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
import org.l2jmobius.gameserver.network.serverpackets.AbstractNpcInfo.NpcInfo;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
@@ -73,6 +74,7 @@ public class GameClient extends ChannelInboundHandler
private SessionKey _sessionId;
private PlayerInstance _player;
private SecondaryPasswordAuth _secondaryAuth;
+ private ClientHardwareInfoHolder _hardwareInfo;
private List _charSlotMapping = null;
private volatile boolean _isDetached = false;
private boolean _isAuthedGG;
@@ -689,4 +691,20 @@ public class GameClient extends ChannelInboundHandler
{
return _crypt;
}
+
+ /**
+ * @return the hardwareInfo
+ */
+ public ClientHardwareInfoHolder getHardwareInfo()
+ {
+ return _hardwareInfo;
+ }
+
+ /**
+ * @param hardwareInfo
+ */
+ public void setHardwareInfo(ClientHardwareInfoHolder hardwareInfo)
+ {
+ _hardwareInfo = hardwareInfo;
+ }
}
diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index fe7368d02f..90c6559e39 100644
--- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -102,7 +102,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index 1e0168f187..4cddf8301c 100644
--- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -16,7 +16,11 @@
*/
package org.l2jmobius.gameserver.network.clientpackets;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
import org.l2jmobius.Config;
+import org.l2jmobius.commons.concurrent.ThreadPool;
import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.commons.util.Chronos;
import org.l2jmobius.gameserver.LoginServerThread;
@@ -38,6 +42,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.TerritoryWarManager;
@@ -50,7 +55,10 @@ import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.instance.ClassMasterInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.clan.Clan;
+import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.model.residences.AuctionableHall;
@@ -60,6 +68,7 @@ import org.l2jmobius.gameserver.model.siege.FortSiege;
import org.l2jmobius.gameserver.model.siege.Siege;
import org.l2jmobius.gameserver.model.siege.clanhalls.SiegableHall;
import org.l2jmobius.gameserver.model.skills.CommonSkill;
+import org.l2jmobius.gameserver.model.variables.AccountVariables;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.ConnectionState;
import org.l2jmobius.gameserver.network.Disconnection;
@@ -104,7 +113,9 @@ import org.l2jmobius.gameserver.util.BuilderUtil;
*/
public class EnterWorld implements IClientIncomingPacket
{
- private final int[][] tracert = new int[5][4];
+ private static final Map TRACE_HWINFO = new ConcurrentHashMap<>();
+
+ private final int[][] _tracert = new int[5][4];
@Override
public boolean read(GameClient client, PacketReader packet)
@@ -120,7 +131,7 @@ public class EnterWorld implements IClientIncomingPacket
{
for (int o = 0; o < 4; o++)
{
- tracert[i][o] = packet.readC();
+ _tracert[i][o] = packet.readC();
}
}
return true;
@@ -142,11 +153,11 @@ public class EnterWorld implements IClientIncomingPacket
final String[] adress = new String[5];
for (int i = 0; i < 5; i++)
{
- adress[i] = tracert[i][0] + "." + tracert[i][1] + "." + tracert[i][2] + "." + tracert[i][3];
+ adress[i] = _tracert[i][0] + "." + _tracert[i][1] + "." + _tracert[i][2] + "." + _tracert[i][3];
}
LoginServerThread.getInstance().sendClientTracert(player.getAccountName(), adress);
- client.setClientTracert(tracert);
+ client.setClientTracert(_tracert);
// Restore to instanced area if enabled
if (Config.RESTORE_PLAYER_INSTANCE)
@@ -618,6 +629,82 @@ public class EnterWorld implements IClientIncomingPacket
// Unstuck players that had client open when server crashed.
player.sendPacket(ActionFailed.STATIC_PACKET);
+
+ // Delayed HWID checks.
+ if (Config.HARDWARE_INFO_ENABLED)
+ {
+ ThreadPool.schedule(() ->
+ {
+ // Generate trace string.
+ final StringBuilder sb = new StringBuilder();
+ for (int[] i : _tracert)
+ {
+ for (int j : i)
+ {
+ sb.append(j);
+ sb.append(".");
+ }
+ }
+ final String trace = sb.toString();
+
+ // Get hardware info from client.
+ ClientHardwareInfoHolder hwInfo = client.getHardwareInfo();
+ if (hwInfo != null)
+ {
+ hwInfo.store(player);
+ TRACE_HWINFO.put(trace, hwInfo);
+ }
+ else
+ {
+ // Get hardware info from stored tracert map.
+ hwInfo = TRACE_HWINFO.get(trace);
+ if (hwInfo != null)
+ {
+ hwInfo.store(player);
+ client.setHardwareInfo(hwInfo);
+ }
+ // Get hardware info from account variables.
+ else
+ {
+ final String storedInfo = player.getAccountVariables().getString(AccountVariables.HWID, "");
+ if (!storedInfo.isEmpty())
+ {
+ hwInfo = new ClientHardwareInfoHolder(storedInfo);
+ TRACE_HWINFO.put(trace, hwInfo);
+ client.setHardwareInfo(hwInfo);
+ }
+ }
+ }
+
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
+ // Check max players.
+ if (Config.KICK_MISSING_HWID && (hwInfo == null))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ }
+ else if (Config.MAX_PLAYERS_PER_HWID > 0)
+ {
+ int count = 0;
+ for (PlayerInstance plr : World.getInstance().getPlayers())
+ {
+ if ((plr.isOnlineInt() == 1) && (plr.getClient().getHardwareInfo().equals(hwInfo)))
+ {
+ count++;
+ }
+ }
+ if (count >= Config.MAX_PLAYERS_PER_HWID)
+ {
+ Disconnection.of(client).defaultSequence(false);
+ }
+ }
+ }, 5000);
+ }
}
private void engage(PlayerInstance player)
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 8c3faede2d..abd56ec643 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index c2ea6f7a5a..c61a43ba25 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -127,7 +153,7 @@ public class ChatBanHandler implements IPunishmentHandler
*/
private void applyToPlayer(PunishmentTask task, PlayerInstance player)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been chat banned for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 2abbe8e8e8..7ae17b01e3 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -102,6 +102,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -146,6 +159,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -181,7 +207,7 @@ public class JailHandler implements IPunishmentHandler
player.sendPacket(msg);
if (task != null)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index 44a2f6b29f..936dbb6230 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -11222,7 +11222,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -11230,7 +11233,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
index f03126de41..fb007805f5 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
+++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
@@ -23,8 +23,8 @@ public enum PunishmentAffect
{
ACCOUNT,
CHARACTER,
- IP;
- // HWID; Not implemented yet.
+ IP,
+ HWID;
public static PunishmentAffect getByName(String name)
{
diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 6575b2da37..5b25bd24c9 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -101,7 +101,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index 4f4a94a36a..5ea1be09a0 100644
--- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -41,6 +41,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
@@ -53,6 +54,8 @@ import org.l2jmobius.gameserver.model.holders.AttendanceInfoHolder;
import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.residences.ClanHall;
import org.l2jmobius.gameserver.model.siege.Fort;
@@ -239,12 +242,6 @@ public class EnterWorld implements IClientIncomingPacket
}
}
- // Chat banned icon.
- if (player.isChatBanned())
- {
- player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
- }
-
// Set dead status if applies
if (player.getCurrentHp() < 0.5)
{
@@ -660,6 +657,7 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Delayed HWID checks.
if (Config.HARDWARE_INFO_ENABLED)
{
ThreadPool.schedule(() ->
@@ -705,6 +703,13 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
// Check max players.
if (Config.KICK_MISSING_HWID && (hwInfo == null))
{
@@ -727,6 +732,15 @@ public class EnterWorld implements IClientIncomingPacket
}
}, 5000);
}
+
+ // Chat banned icon.
+ ThreadPool.schedule(() ->
+ {
+ if (player.isChatBanned())
+ {
+ player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
+ }
+ }, 5500);
}
/**
diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 8c3faede2d..abd56ec643 100644
--- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index c2ea6f7a5a..c61a43ba25 100644
--- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -127,7 +153,7 @@ public class ChatBanHandler implements IPunishmentHandler
*/
private void applyToPlayer(PunishmentTask task, PlayerInstance player)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been chat banned for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 2abbe8e8e8..7ae17b01e3 100644
--- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -102,6 +102,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -146,6 +159,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -181,7 +207,7 @@ public class JailHandler implements IPunishmentHandler
player.sendPacket(msg);
if (task != null)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index 22ae2a9113..604df50c30 100644
--- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -11222,7 +11222,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -11230,7 +11233,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
index f03126de41..fb007805f5 100644
--- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
+++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
@@ -23,8 +23,8 @@ public enum PunishmentAffect
{
ACCOUNT,
CHARACTER,
- IP;
- // HWID; Not implemented yet.
+ IP,
+ HWID;
public static PunishmentAffect getByName(String name)
{
diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 6575b2da37..5b25bd24c9 100644
--- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -101,7 +101,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index a782159fdf..a63ff07528 100644
--- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -41,6 +41,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
@@ -53,6 +54,8 @@ import org.l2jmobius.gameserver.model.holders.AttendanceInfoHolder;
import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.residences.ClanHall;
import org.l2jmobius.gameserver.model.siege.Fort;
@@ -239,12 +242,6 @@ public class EnterWorld implements IClientIncomingPacket
}
}
- // Chat banned icon.
- if (player.isChatBanned())
- {
- player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
- }
-
// Set dead status if applies
if (player.getCurrentHp() < 0.5)
{
@@ -660,6 +657,7 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Delayed HWID checks.
if (Config.HARDWARE_INFO_ENABLED)
{
ThreadPool.schedule(() ->
@@ -705,6 +703,13 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
// Check max players.
if (Config.KICK_MISSING_HWID && (hwInfo == null))
{
@@ -727,6 +732,15 @@ public class EnterWorld implements IClientIncomingPacket
}
}, 5000);
}
+
+ // Chat banned icon.
+ ThreadPool.schedule(() ->
+ {
+ if (player.isChatBanned())
+ {
+ player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
+ }
+ }, 5500);
}
/**
diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 8c3faede2d..abd56ec643 100644
--- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index c2ea6f7a5a..c61a43ba25 100644
--- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -127,7 +153,7 @@ public class ChatBanHandler implements IPunishmentHandler
*/
private void applyToPlayer(PunishmentTask task, PlayerInstance player)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been chat banned for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 2abbe8e8e8..7ae17b01e3 100644
--- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -102,6 +102,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -146,6 +159,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -181,7 +207,7 @@ public class JailHandler implements IPunishmentHandler
player.sendPacket(msg);
if (task != null)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index 6b35d79d0a..0ad5148bf8 100644
--- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -11208,7 +11208,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -11216,7 +11219,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
index f03126de41..fb007805f5 100644
--- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
+++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
@@ -23,8 +23,8 @@ public enum PunishmentAffect
{
ACCOUNT,
CHARACTER,
- IP;
- // HWID; Not implemented yet.
+ IP,
+ HWID;
public static PunishmentAffect getByName(String name)
{
diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 6575b2da37..5b25bd24c9 100644
--- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -101,7 +101,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index 93a965da71..362bee2837 100644
--- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -41,6 +41,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
@@ -54,6 +55,8 @@ import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.residences.ClanHall;
import org.l2jmobius.gameserver.model.siege.Fort;
@@ -240,12 +243,6 @@ public class EnterWorld implements IClientIncomingPacket
}
}
- // Chat banned icon.
- if (player.isChatBanned())
- {
- player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
- }
-
// Set dead status if applies
if (player.getCurrentHp() < 0.5)
{
@@ -670,6 +667,7 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Delayed HWID checks.
if (Config.HARDWARE_INFO_ENABLED)
{
ThreadPool.schedule(() ->
@@ -715,6 +713,13 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
// Check max players.
if (Config.KICK_MISSING_HWID && (hwInfo == null))
{
@@ -737,6 +742,15 @@ public class EnterWorld implements IClientIncomingPacket
}
}, 5000);
}
+
+ // Chat banned icon.
+ ThreadPool.schedule(() ->
+ {
+ if (player.isChatBanned())
+ {
+ player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
+ }
+ }, 5500);
}
/**
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 8c3faede2d..abd56ec643 100644
--- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index c2ea6f7a5a..c61a43ba25 100644
--- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -127,7 +153,7 @@ public class ChatBanHandler implements IPunishmentHandler
*/
private void applyToPlayer(PunishmentTask task, PlayerInstance player)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been chat banned for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 2abbe8e8e8..7ae17b01e3 100644
--- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -102,6 +102,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -146,6 +159,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -181,7 +207,7 @@ public class JailHandler implements IPunishmentHandler
player.sendPacket(msg);
if (task != null)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index 6b60458452..419e1a13fa 100644
--- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -11235,7 +11235,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -11243,7 +11246,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
index f03126de41..fb007805f5 100644
--- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
@@ -23,8 +23,8 @@ public enum PunishmentAffect
{
ACCOUNT,
CHARACTER,
- IP;
- // HWID; Not implemented yet.
+ IP,
+ HWID;
public static PunishmentAffect getByName(String name)
{
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 6575b2da37..5b25bd24c9 100644
--- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -101,7 +101,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index 93a965da71..362bee2837 100644
--- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -41,6 +41,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
@@ -54,6 +55,8 @@ import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.residences.ClanHall;
import org.l2jmobius.gameserver.model.siege.Fort;
@@ -240,12 +243,6 @@ public class EnterWorld implements IClientIncomingPacket
}
}
- // Chat banned icon.
- if (player.isChatBanned())
- {
- player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
- }
-
// Set dead status if applies
if (player.getCurrentHp() < 0.5)
{
@@ -670,6 +667,7 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Delayed HWID checks.
if (Config.HARDWARE_INFO_ENABLED)
{
ThreadPool.schedule(() ->
@@ -715,6 +713,13 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
// Check max players.
if (Config.KICK_MISSING_HWID && (hwInfo == null))
{
@@ -737,6 +742,15 @@ public class EnterWorld implements IClientIncomingPacket
}
}, 5000);
}
+
+ // Chat banned icon.
+ ThreadPool.schedule(() ->
+ {
+ if (player.isChatBanned())
+ {
+ player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
+ }
+ }, 5500);
}
/**
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 8c3faede2d..abd56ec643 100644
--- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index c2ea6f7a5a..c61a43ba25 100644
--- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -127,7 +153,7 @@ public class ChatBanHandler implements IPunishmentHandler
*/
private void applyToPlayer(PunishmentTask task, PlayerInstance player)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been chat banned for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 2abbe8e8e8..7ae17b01e3 100644
--- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -102,6 +102,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -146,6 +159,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -181,7 +207,7 @@ public class JailHandler implements IPunishmentHandler
player.sendPacket(msg);
if (task != null)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index fa72a8f472..4886d38bc8 100644
--- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -11235,7 +11235,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -11243,7 +11246,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
index f03126de41..fb007805f5 100644
--- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
@@ -23,8 +23,8 @@ public enum PunishmentAffect
{
ACCOUNT,
CHARACTER,
- IP;
- // HWID; Not implemented yet.
+ IP,
+ HWID;
public static PunishmentAffect getByName(String name)
{
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 6575b2da37..5b25bd24c9 100644
--- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -101,7 +101,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index 93a965da71..362bee2837 100644
--- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -41,6 +41,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
@@ -54,6 +55,8 @@ import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.residences.ClanHall;
import org.l2jmobius.gameserver.model.siege.Fort;
@@ -240,12 +243,6 @@ public class EnterWorld implements IClientIncomingPacket
}
}
- // Chat banned icon.
- if (player.isChatBanned())
- {
- player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
- }
-
// Set dead status if applies
if (player.getCurrentHp() < 0.5)
{
@@ -670,6 +667,7 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Delayed HWID checks.
if (Config.HARDWARE_INFO_ENABLED)
{
ThreadPool.schedule(() ->
@@ -715,6 +713,13 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
// Check max players.
if (Config.KICK_MISSING_HWID && (hwInfo == null))
{
@@ -737,6 +742,15 @@ public class EnterWorld implements IClientIncomingPacket
}
}, 5000);
}
+
+ // Chat banned icon.
+ ThreadPool.schedule(() ->
+ {
+ if (player.isChatBanned())
+ {
+ player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
+ }
+ }, 5500);
}
/**
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 8c3faede2d..abd56ec643 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index c2ea6f7a5a..c61a43ba25 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -127,7 +153,7 @@ public class ChatBanHandler implements IPunishmentHandler
*/
private void applyToPlayer(PunishmentTask task, PlayerInstance player)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been chat banned for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 2abbe8e8e8..7ae17b01e3 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -102,6 +102,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -146,6 +159,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -181,7 +207,7 @@ public class JailHandler implements IPunishmentHandler
player.sendPacket(msg);
if (task != null)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index 55ceaf6aba..7c3485fc2f 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -11180,7 +11180,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -11188,7 +11191,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
index f03126de41..fb007805f5 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
+++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
@@ -23,8 +23,8 @@ public enum PunishmentAffect
{
ACCOUNT,
CHARACTER,
- IP;
- // HWID; Not implemented yet.
+ IP,
+ HWID;
public static PunishmentAffect getByName(String name)
{
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 6575b2da37..5b25bd24c9 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -101,7 +101,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index acddad15ef..3a643ca4aa 100644
--- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -41,6 +41,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
@@ -54,6 +55,8 @@ import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.residences.ClanHall;
import org.l2jmobius.gameserver.model.siege.Fort;
@@ -241,12 +244,6 @@ public class EnterWorld implements IClientIncomingPacket
}
}
- // Chat banned icon.
- if (player.isChatBanned())
- {
- player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
- }
-
// Set dead status if applies
if (player.getCurrentHp() < 0.5)
{
@@ -674,6 +671,7 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Delayed HWID checks.
if (Config.HARDWARE_INFO_ENABLED)
{
ThreadPool.schedule(() ->
@@ -719,6 +717,13 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
// Check max players.
if (Config.KICK_MISSING_HWID && (hwInfo == null))
{
@@ -741,6 +746,15 @@ public class EnterWorld implements IClientIncomingPacket
}
}, 5000);
}
+
+ // Chat banned icon.
+ ThreadPool.schedule(() ->
+ {
+ if (player.isChatBanned())
+ {
+ player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
+ }
+ }, 5500);
}
/**
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_Classic_Interlude/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_Classic_Interlude/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 8c3faede2d..abd56ec643 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index c2ea6f7a5a..c61a43ba25 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -127,7 +153,7 @@ public class ChatBanHandler implements IPunishmentHandler
*/
private void applyToPlayer(PunishmentTask task, PlayerInstance player)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been chat banned for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 2abbe8e8e8..7ae17b01e3 100644
--- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -102,6 +102,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -146,6 +159,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -181,7 +207,7 @@ public class JailHandler implements IPunishmentHandler
player.sendPacket(msg);
if (task != null)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index 29ef4fa6f5..b303c94844 100644
--- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -11218,7 +11218,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -11226,7 +11229,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
index f03126de41..fb007805f5 100644
--- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
+++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
@@ -23,8 +23,8 @@ public enum PunishmentAffect
{
ACCOUNT,
CHARACTER,
- IP;
- // HWID; Not implemented yet.
+ IP,
+ HWID;
public static PunishmentAffect getByName(String name)
{
diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 6575b2da37..5b25bd24c9 100644
--- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -101,7 +101,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index 4c9408113d..2397e49057 100644
--- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -41,6 +41,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
@@ -53,6 +54,8 @@ import org.l2jmobius.gameserver.model.holders.AttendanceInfoHolder;
import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.residences.ClanHall;
import org.l2jmobius.gameserver.model.siege.Fort;
@@ -237,12 +240,6 @@ public class EnterWorld implements IClientIncomingPacket
}
}
- // Chat banned icon.
- if (player.isChatBanned())
- {
- player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
- }
-
// Set dead status if applies
if (player.getCurrentHp() < 0.5)
{
@@ -656,6 +653,7 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Delayed HWID checks.
if (Config.HARDWARE_INFO_ENABLED)
{
ThreadPool.schedule(() ->
@@ -701,6 +699,13 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
// Check max players.
if (Config.KICK_MISSING_HWID && (hwInfo == null))
{
@@ -723,6 +728,15 @@ public class EnterWorld implements IClientIncomingPacket
}
}, 5000);
}
+
+ // Chat banned icon.
+ ThreadPool.schedule(() ->
+ {
+ if (player.isChatBanned())
+ {
+ player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
+ }
+ }, 5500);
}
/**
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 8c3faede2d..abd56ec643 100644
--- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index c2ea6f7a5a..c61a43ba25 100644
--- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -127,7 +153,7 @@ public class ChatBanHandler implements IPunishmentHandler
*/
private void applyToPlayer(PunishmentTask task, PlayerInstance player)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been chat banned for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 2abbe8e8e8..7ae17b01e3 100644
--- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -102,6 +102,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -146,6 +159,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -181,7 +207,7 @@ public class JailHandler implements IPunishmentHandler
player.sendPacket(msg);
if (task != null)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index cf96cd8309..abefd00348 100644
--- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -11352,7 +11352,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -11360,7 +11363,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
index f03126de41..fb007805f5 100644
--- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
@@ -23,8 +23,8 @@ public enum PunishmentAffect
{
ACCOUNT,
CHARACTER,
- IP;
- // HWID; Not implemented yet.
+ IP,
+ HWID;
public static PunishmentAffect getByName(String name)
{
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 6575b2da37..5b25bd24c9 100644
--- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -101,7 +101,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index 0c2d2a67c8..978fe9ccd5 100644
--- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -41,6 +41,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
@@ -56,6 +57,8 @@ import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.residences.ClanHall;
import org.l2jmobius.gameserver.model.siege.Fort;
@@ -246,12 +249,6 @@ public class EnterWorld implements IClientIncomingPacket
}
}
- // Chat banned icon.
- if (player.isChatBanned())
- {
- player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
- }
-
// Set dead status if applies
if (player.getCurrentHp() < 0.5)
{
@@ -708,6 +705,7 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Delayed HWID checks.
if (Config.HARDWARE_INFO_ENABLED)
{
ThreadPool.schedule(() ->
@@ -753,6 +751,13 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
// Check max players.
if (Config.KICK_MISSING_HWID && (hwInfo == null))
{
@@ -775,6 +780,15 @@ public class EnterWorld implements IClientIncomingPacket
}
}, 5000);
}
+
+ // Chat banned icon.
+ ThreadPool.schedule(() ->
+ {
+ if (player.isChatBanned())
+ {
+ player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
+ }
+ }, 5500);
}
/**
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 8c3faede2d..abd56ec643 100644
--- a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index c2ea6f7a5a..c61a43ba25 100644
--- a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -127,7 +153,7 @@ public class ChatBanHandler implements IPunishmentHandler
*/
private void applyToPlayer(PunishmentTask task, PlayerInstance player)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been chat banned for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 2abbe8e8e8..7ae17b01e3 100644
--- a/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -102,6 +102,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -146,6 +159,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -181,7 +207,7 @@ public class JailHandler implements IPunishmentHandler
player.sendPacket(msg);
if (task != null)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index 3aea11a687..25406c5bb8 100644
--- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -11418,7 +11418,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -11426,7 +11429,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
index f03126de41..fb007805f5 100644
--- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
+++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
@@ -23,8 +23,8 @@ public enum PunishmentAffect
{
ACCOUNT,
CHARACTER,
- IP;
- // HWID; Not implemented yet.
+ IP,
+ HWID;
public static PunishmentAffect getByName(String name)
{
diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 6575b2da37..5b25bd24c9 100644
--- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -101,7 +101,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index 61feffafe9..d9956828cb 100644
--- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -41,6 +41,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
@@ -56,6 +57,8 @@ import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.residences.ClanHall;
import org.l2jmobius.gameserver.model.siege.Fort;
@@ -250,12 +253,6 @@ public class EnterWorld implements IClientIncomingPacket
}
}
- // Chat banned icon.
- if (player.isChatBanned())
- {
- player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
- }
-
// Set dead status if applies
if (player.getCurrentHp() < 0.5)
{
@@ -722,6 +719,7 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Delayed HWID checks.
if (Config.HARDWARE_INFO_ENABLED)
{
ThreadPool.schedule(() ->
@@ -767,6 +765,13 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
// Check max players.
if (Config.KICK_MISSING_HWID && (hwInfo == null))
{
@@ -789,6 +794,15 @@ public class EnterWorld implements IClientIncomingPacket
}
}, 5000);
}
+
+ // Chat banned icon.
+ ThreadPool.schedule(() ->
+ {
+ if (player.isChatBanned())
+ {
+ player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
+ }
+ }, 5500);
}
/**
diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/html/admin/punishment-player.htm b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/html/admin/punishment-player.htm
index cec1d9be36..c937503ff4 100644
--- a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/html/admin/punishment-player.htm
+++ b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/html/admin/punishment-player.htm
@@ -12,6 +12,7 @@
Punishments for account: %acc%
Punishments for character: %char%
Punishments for IP: %ip%
+Punishments for HWID: %hwid%
@@ -41,6 +42,11 @@
%ip% |
Ban |
+
+ HWID: |
+ %hwid% |
+ Ban |
+
diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/html/admin/punishment.htm b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/html/admin/punishment.htm
index 29442347ca..ee4dcf37cf 100644
--- a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/html/admin/punishment.htm
+++ b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/html/admin/punishment.htm
@@ -51,6 +51,11 @@
|
Ban |
+
+ HWID: |
+ |
+ Ban |
+
diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
index 8c3faede2d..abd56ec643 100644
--- a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
+++ b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/admincommandhandlers/AdminPunishment.java
@@ -54,6 +54,8 @@ public class AdminPunishment implements IAdminCommandHandler
"admin_punishment_remove",
"admin_ban_acc",
"admin_unban_acc",
+ "admin_ban_hwid",
+ "admin_unban_hwid",
"admin_ban_chat",
"admin_unban_chat",
"admin_ban_char",
@@ -182,6 +184,7 @@ public class AdminPunishment implements IAdminCommandHandler
content = content.replace("%acc%", target.getAccountName());
content = content.replace("%char%", target.getName());
content = content.replace("%ip%", target.getIPAddress());
+ content = content.replace("%hwid%", (target.getClient() == null) || (target.getClient().getHardwareInfo() == null) ? "Unknown" : target.getClient().getHardwareInfo().getMacAddress());
activeChar.sendPacket(new NpcHtmlMessage(0, 1, content));
}
else
@@ -355,6 +358,22 @@ public class AdminPunishment implements IAdminCommandHandler
}
break;
}
+ case "admin_ban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_add %s %s %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN, 0, "Banned by admin"), activeChar);
+ }
+ break;
+ }
+ case "admin_unban_hwid":
+ {
+ if (st.hasMoreTokens())
+ {
+ return useAdminCommand(String.format("admin_punishment_remove %s %s %s", st.nextToken(), PunishmentAffect.HWID, PunishmentType.BAN), activeChar);
+ }
+ break;
+ }
case "admin_ban_chat":
{
if (st.hasMoreTokens())
diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
index 1e6148aae9..5964ef175a 100644
--- a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
+++ b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/punishmenthandlers/BanHandler.java
@@ -76,6 +76,19 @@ public class BanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(player);
+ }
+ }
+ break;
+ }
}
}
diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
index c2ea6f7a5a..c61a43ba25 100644
--- a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
+++ b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/punishmenthandlers/ChatBanHandler.java
@@ -73,6 +73,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -117,6 +130,19 @@ public class ChatBanHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -127,7 +153,7 @@ public class ChatBanHandler implements IPunishmentHandler
*/
private void applyToPlayer(PunishmentTask task, PlayerInstance player)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been chat banned for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
index 2abbe8e8e8..7ae17b01e3 100644
--- a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
+++ b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/handlers/punishmenthandlers/JailHandler.java
@@ -102,6 +102,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ applyToPlayer(task, player);
+ }
+ }
+ break;
+ }
}
}
@@ -146,6 +159,19 @@ public class JailHandler implements IPunishmentHandler
}
break;
}
+ case HWID:
+ {
+ final String hwid = String.valueOf(task.getKey());
+ for (PlayerInstance player : World.getInstance().getPlayers())
+ {
+ final GameClient client = player.getClient();
+ if ((client != null) && client.getHardwareInfo().getMacAddress().equals(hwid))
+ {
+ removeFromPlayer(player);
+ }
+ }
+ break;
+ }
}
}
@@ -181,7 +207,7 @@ public class JailHandler implements IPunishmentHandler
player.sendPacket(msg);
if (task != null)
{
- final long delay = ((task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000);
+ final long delay = (task.getExpirationTime() - Chronos.currentTimeMillis()) / 1000;
if (delay > 0)
{
player.sendMessage("You've been jailed for " + (delay > 60 ? ((delay / 60) + " minutes.") : delay + " seconds."));
diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index 3aea11a687..25406c5bb8 100644
--- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -11418,7 +11418,10 @@ public class PlayerInstance extends Playable
*/
public boolean isJailed()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.JAIL) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.JAIL) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.JAIL));
}
/**
@@ -11426,7 +11429,10 @@ public class PlayerInstance extends Playable
*/
public boolean isChatBanned()
{
- return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN);
+ return PunishmentManager.getInstance().hasPunishment(getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.CHAT_BAN) //
+ || PunishmentManager.getInstance().hasPunishment(getIPAddress(), PunishmentAffect.IP, PunishmentType.CHAT_BAN) //
+ || ((_client.getHardwareInfo() != null) && PunishmentManager.getInstance().hasPunishment(_client.getHardwareInfo().getMacAddress(), PunishmentAffect.HWID, PunishmentType.CHAT_BAN));
}
public void startFameTask(long delay, int fameFixRate)
diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
index f03126de41..fb007805f5 100644
--- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
+++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/punishment/PunishmentAffect.java
@@ -23,8 +23,8 @@ public enum PunishmentAffect
{
ACCOUNT,
CHARACTER,
- IP;
- // HWID; Not implemented yet.
+ IP,
+ HWID;
public static PunishmentAffect getByName(String name)
{
diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
index 6575b2da37..5b25bd24c9 100644
--- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
+++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/CharacterSelect.java
@@ -101,7 +101,9 @@ public class CharacterSelect implements IClientIncomingPacket
}
// Banned?
- if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
+ if (PunishmentManager.getInstance().hasPunishment(info.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getAccountName(), PunishmentAffect.ACCOUNT, PunishmentType.BAN) //
+ || PunishmentManager.getInstance().hasPunishment(client.getConnectionAddress().getHostAddress(), PunishmentAffect.IP, PunishmentType.BAN))
{
client.close(ServerClose.STATIC_PACKET);
return;
diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index 61feffafe9..d9956828cb 100644
--- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -41,6 +41,7 @@ import org.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.MailManager;
import org.l2jmobius.gameserver.instancemanager.PetitionManager;
+import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
@@ -56,6 +57,8 @@ import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
+import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
+import org.l2jmobius.gameserver.model.punishment.PunishmentType;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.residences.ClanHall;
import org.l2jmobius.gameserver.model.siege.Fort;
@@ -250,12 +253,6 @@ public class EnterWorld implements IClientIncomingPacket
}
}
- // Chat banned icon.
- if (player.isChatBanned())
- {
- player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
- }
-
// Set dead status if applies
if (player.getCurrentHp() < 0.5)
{
@@ -722,6 +719,7 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Delayed HWID checks.
if (Config.HARDWARE_INFO_ENABLED)
{
ThreadPool.schedule(() ->
@@ -767,6 +765,13 @@ public class EnterWorld implements IClientIncomingPacket
}
}
+ // Banned?
+ if ((hwInfo != null) && PunishmentManager.getInstance().hasPunishment(hwInfo.getMacAddress(), PunishmentAffect.HWID, PunishmentType.BAN))
+ {
+ Disconnection.of(client).defaultSequence(false);
+ return;
+ }
+
// Check max players.
if (Config.KICK_MISSING_HWID && (hwInfo == null))
{
@@ -789,6 +794,15 @@ public class EnterWorld implements IClientIncomingPacket
}
}, 5000);
}
+
+ // Chat banned icon.
+ ThreadPool.schedule(() ->
+ {
+ if (player.isChatBanned())
+ {
+ player.getEffectList().startAbnormalVisualEffect(AbnormalVisualEffect.NO_CHAT);
+ }
+ }, 5500);
}
/**