diff --git a/sql/world/Acore_strings.sql b/sql/world/Acore_strings.sql index 8575cc1..eaa83a3 100644 --- a/sql/world/Acore_strings.sql +++ b/sql/world/Acore_strings.sql @@ -1,8 +1,9 @@ -DELETE FROM `acore_string` WHERE `entry` IN (30087,30088,30089); +DELETE FROM `acore_string` WHERE `entry` IN (30087,30088,30089,30090); INSERT INTO `acore_string` (`entry`, `content_default`, `locale_koKR`, `locale_frFR`, `locale_deDE`, `locale_zhCN`, `locale_zhTW`, `locale_esES`, `locale_esMX`, `locale_ruRU`) VALUES (30087, '|cffffff00[|cffff0000ANTICHEAT ALERT|r|cffffff00]:|r |cFFFF8C00|r |cFFFF8C00[|Hplayer:%s|h%s|h|r|cFFFF8C00]:', NULL, NULL, NULL, NULL, NULL, '|cffffff00[|cffff0000ALERTA ANTITRAMPAS|r|cffffff00]:|r |cFFFF8C00|r |cFFFF8C00[|Hplayer:%s|h%s|h|r|cFFFF8C00]:', '|cffffff00[|cffff0000ALERTA ANTITRAMPAS|r|cffffff00]:|r |cFFFF8C00|r |cFFFF8C00[|Hplayer:%s|h%s|h|r|cFFFF8C00]:', NULL), (30088, '|cffffff00[|cffff0000ANTICHEAT ALERT|r|cffffff00]:|r POSSIBLE TELEPORT HACK DETECTED|cFFFF8C00 %s|r', NULL, NULL, NULL, NULL, NULL, '|cffffff00[|cffff0000ALERTA ANTITRAMPAS|r|cffffff00]:|r POSIBLE HACK DE TELEPORTE DETECTADO|cFFFF8C00 %s|r', '|cffffff00[|cffff0000ALERTA ANTITRAMPAS|r|cffffff00]:|r POSIBLE HACK DE TELEPORTE DETECTADO|cFFFF8C00 %s|r', NULL), -(30089, '|cffffff00[|cffff0000ANTICHEAT ALERT|r|cffffff00]:|r POSSIBLE IGNORE CONTROL HACK DETECTED|cFFFF8C00 %s|r', NULL, NULL, NULL, NULL, NULL, '|cffffff00[|cffff0000ALERTA ANTITRAMPAS|r|cffffff00]:|r POSIBLE CONTROL DE HACK DETECTADO IGNORARADO|cFFFF8C00 %s|r', '|cffffff00[|cffff0000ALERTA ANTITRAMPAS|r|cffffff00]:|r POSIBLE CONTROL DE HACK DETECTADO IGNORARADO|cFFFF8C00 %s|r', NULL); +(30089, '|cffffff00[|cffff0000ANTICHEAT ALERT|r|cffffff00]:|r POSSIBLE IGNORE CONTROL HACK DETECTED|cFFFF8C00 %s|r', NULL, NULL, NULL, NULL, NULL, '|cffffff00[|cffff0000ALERTA ANTITRAMPAS|r|cffffff00]:|r POSIBLE CONTROL DE HACK DETECTADO IGNORARADO|cFFFF8C00 %s|r', '|cffffff00[|cffff0000ALERTA ANTITRAMPAS|r|cffffff00]:|r POSIBLE CONTROL DE HACK DETECTADO IGNORARADO|cFFFF8C00 %s|r', NULL), +(30090, '|cffffff00[|cffff0000ANTICHEAT ALERT|r|cffffff00]:|r TELEPORT HACK USED WHLE DUELING|cFFFF8C00 %s|r vs |cFFFF8C00 %s|r.', NULL, NULL, NULL, NULL, NULL, '', '', NULL); DELETE FROM `command` WHERE `name`='anticheat jail'; DELETE FROM `command` WHERE `name`='anticheat delete'; diff --git a/src/AnticheatMgr.cpp b/src/AnticheatMgr.cpp index eb3ca3b..1a9a3fd 100644 --- a/src/AnticheatMgr.cpp +++ b/src/AnticheatMgr.cpp @@ -25,6 +25,7 @@ #define LANG_ANTICHEAT_ALERT 30087 #define LANG_ANTICHEAT_TELEPORT 30088 #define LANG_ANTICHEAT_IGNORECONTROL 30089 +#define LANG_ANTICHEAT_DUEL 30090 enum Spells { @@ -297,6 +298,31 @@ void AnticheatMgr::TeleportHackDetection(Player* player, MovementInfo movementIn float xDiff = fabs(lastX - newX); float yDiff = fabs(lastY - newY); + if (player->duel) + { + if ((xDiff >= 50.0f || yDiff >= 50.0f) && !player->CanTeleport()) + { + Player* opponent = player->duel->Opponent; + + std::string str = "|cFFFFFC00[DUEL ALERT Playername:|cFF00FFFF[|cFF60FF00" + std::string(player->GetName().c_str()) + "|cFF00FFFF] Possible Teleport Hack Detected! While Dueling [|cFF60FF00" + std::string(opponent->GetName().c_str()) + "|cFF00FFFF]"; + WorldPacket data(SMSG_NOTIFICATION, (str.size() + 1)); + data << str; + sWorld->SendGlobalGMMessage(&data); + + sWorld->SendGMText(LANG_ANTICHEAT_DUEL, player->GetName().c_str(), opponent->GetName().c_str()); + + if (sConfigMgr->GetOption("Anticheat.WriteLog", true)) + { + LOG_INFO("module", "AnticheatMgr:: DUEL ALERT Teleport-Hack detected player {} ({}) while dueling {}", player->GetName(), player->GetGUID().ToString(), opponent->GetName()); + LOG_INFO("module", "AnticheatMgr:: DUEL ALERT Teleport-Hack detected player {} ({}) while dueling {}", opponent->GetName(), opponent->GetGUID().ToString(), player->GetName()); + } + BuildReport(player, TELEPORT_HACK_REPORT); + BuildReport(opponent, TELEPORT_HACK_REPORT); + } + else if (player->CanTeleport()) + player->SetCanTeleport(false); + } + if ((xDiff >= 50.0f || yDiff >= 50.0f) && !player->CanTeleport()) { if (m_Players[key].GetTotalReports() > sConfigMgr->GetOption("Anticheat.ReportsForIngameWarnings", 70)) @@ -475,6 +501,30 @@ void AnticheatMgr::SpeedHackDetection(Player* player, MovementInfo movementInfo) // this is the distance doable by the player in 1 sec, using the time done to move to this point. uint32 clientSpeedRate = distance2D * 1000 / timeDiff; + if (player->duel) + { + if ((clientSpeedRate > speedRate * 1.25f) && !m_Players[key].GetLastMovementInfo().HasMovementFlag(MOVEMENTFLAG_FALLING)) + { + if (!player->CanTeleport()) + { + Player* opponent = player->duel->Opponent; + std::string str = "|cFFFFFC00[DUEL CHEAT ALERT Playername:|cFF00FFFF[|cFF60FF00" + std::string(player->GetName().c_str()) + "|cFF00FFFF] Possible Speed Hack Detected! While Dueling [|cFF60FF00" + std::string(opponent->GetName().c_str()) + "|cFF00FFFF]"; + WorldPacket data(SMSG_NOTIFICATION, (str.size() + 1)); + data << str; + sWorld->SendGlobalGMMessage(&data); + + sWorld->SendGMText(LANG_ANTICHEAT_DUEL, player->GetName().c_str(), opponent->GetName().c_str()); + if (sConfigMgr->GetOption("Anticheat.WriteLog", true)) + { + LOG_INFO("module", "AnticheatMgr:: DUEL ALERT Speed-Hack detected player {} ({}) while dueling {}", player->GetName(), player->GetGUID().ToString(), opponent->GetName()); + LOG_INFO("module", "AnticheatMgr:: DUEL ALERT Speed-Hack detected player {} ({}) while dueling {}", opponent->GetName(), opponent->GetGUID().ToString(), player->GetName()); + } + BuildReport(player, SPEED_HACK_REPORT); + BuildReport(opponent, SPEED_HACK_REPORT); + } + return; + } + } // We did the (uint32) cast to accept a margin of tolerance // We check the last MovementInfo for the falling flag since falling down a hill and sliding a bit triggered a false positive if ((clientSpeedRate > speedRate * 1.25f) && !m_Players[key].GetLastMovementInfo().HasMovementFlag(MOVEMENTFLAG_FALLING))