void AnticheatMgr::BuildReport(Player* player,uint8 reportType) { uint32 key = player->GetGUIDLow(); if (MustCheckTempReports(reportType)) { uint32 actualTime = getMSTime(); if (!m_Players[key].GetTempReportsTimer(reportType)) m_Players[key].SetTempReportsTimer(actualTime,reportType); if (getMSTimeDiff(m_Players[key].GetTempReportsTimer(reportType),actualTime) < 3000) { m_Players[key].SetTempReports(m_Players[key].GetTempReports(reportType)+1,reportType); if (m_Players[key].GetTempReports(reportType) < 3) return; } else { m_Players[key].SetTempReportsTimer(actualTime,reportType); m_Players[key].SetTempReports(1,reportType); return; } } // generating creationTime for average calculation if (!m_Players[key].GetTotalReports()) m_Players[key].SetCreationTime(getMSTime()); // increasing total_reports m_Players[key].SetTotalReports(m_Players[key].GetTotalReports()+1); // increasing specific cheat report m_Players[key].SetTypeReports(reportType,m_Players[key].GetTypeReports(reportType)+1); // diff time for average calculation uint32 diffTime = getMSTimeDiff(m_Players[key].GetCreationTime(),getMSTime()) / IN_MILLISECONDS; if (diffTime > 0) { // Average == Reports per second float average = float(m_Players[key].GetTotalReports()) / float(diffTime); m_Players[key].SetAverage(average); } if (!m_Players[key].GetDailyReportState()) { CharacterDatabase.PExecute("REPLACE INTO daily_players_reports (guid,average,total_reports,speed_reports,fly_reports,jump_reports,waterwalk_reports,teleportplane_reports,climb_reports,creation_time) VALUES (%u,%f,%u,%u,%u,%u,%u,%u,%u,%u);",player->GetGUIDLow(),m_Players[player->GetGUIDLow()].GetAverage(),m_Players[player->GetGUIDLow()].GetTotalReports(), m_Players[player->GetGUIDLow()].GetTypeReports(SPEED_HACK_REPORT),m_Players[player->GetGUIDLow()].GetTypeReports(FLY_HACK_REPORT),m_Players[player->GetGUIDLow()].GetTypeReports(JUMP_HACK_REPORT),m_Players[player->GetGUIDLow()].GetTypeReports(WALK_WATER_HACK_REPORT),m_Players[player->GetGUIDLow()].GetTypeReports(TELEPORT_PLANE_HACK_REPORT),m_Players[player->GetGUIDLow()].GetTypeReports(CLIMB_HACK_REPORT),m_Players[player->GetGUIDLow()].GetCreationTime()); m_Players[key].SetDailyReportState(true); } if (m_Players[key].GetTotalReports() > sWorld->getIntConfig(CONFIG_ANTICHEAT_REPORTS_INGAME_NOTIFICATION)) { std::string str = ""; str = "|cFFFFFC00[AC]|cFF00FFFF[|cFF60FF00" + std::string(player->GetName()) + "|cFF00FFFF] Possible cheater! "; WorldPacket data(SMSG_NOTIFICATION, (str.size()+1)); data << str; sWorld->SendGlobalGMMessage(&data); sLog->outWarden("Passive AntiCheat: %s detected as possible cheater. HackType: %u.", player->GetName(), reportType); } }
void AnticheatMgr::BuildReport(Player* player,uint8 reportType) { uint32 key = player->GetGUIDLow(); if (MustCheckTempReports(reportType)) { uint32 actualTime = getMSTime(); if (!m_Players[key].GetTempReportsTimer(reportType)) m_Players[key].SetTempReportsTimer(actualTime,reportType); if (getMSTimeDiff(m_Players[key].GetTempReportsTimer(reportType),actualTime) < 3000) { m_Players[key].SetTempReports(m_Players[key].GetTempReports(reportType)+1,reportType); if (m_Players[key].GetTempReports(reportType) < 3) return; } else { m_Players[key].SetTempReportsTimer(actualTime,reportType); m_Players[key].SetTempReports(1,reportType); return; } } // generating creationTime for average calculation if (!m_Players[key].GetTotalReports()) m_Players[key].SetCreationTime(getMSTime()); // increasing total_reports m_Players[key].SetTotalReports(m_Players[key].GetTotalReports()+1); // increasing specific cheat report m_Players[key].SetTypeReports(reportType,m_Players[key].GetTypeReports(reportType)+1); // diff time for average calculation uint32 diffTime = getMSTimeDiff(m_Players[key].GetCreationTime(),getMSTime()) / IN_MILLISECONDS; if (diffTime > 0) { // Average == Reports per second float average = float(m_Players[key].GetTotalReports()) / float(diffTime); m_Players[key].SetAverage(average); } if (m_Players[key].GetTotalReports() > sWorld->getIntConfig(CONFIG_ANTICHEAT_REPORTS_INGAME_NOTIFICATION)) { std::string str = ""; str = "|cFFFFFC00[Anticheat]|cFF00FFFF[|cFF60FF00" + std::string(player->GetName()) + "|cFF00FFFF] Possible hacker!"; WorldPacket data(SMSG_NOTIFICATION, (str.size()+1)); data << str; sWorld->SendGlobalGMMessage(&data); } }
void AnticheatMgr::BuildReport(Player* player,uint8 reportType) { uint32 key = player->GetGUIDLow(); if (MustCheckTempReports(reportType)) { uint32 actualTime = getMSTime(); if (!m_Players[key].GetTempReportsTimer(reportType)) m_Players[key].SetTempReportsTimer(actualTime,reportType); if (getMSTimeDiff(m_Players[key].GetTempReportsTimer(reportType),actualTime) < 3000) { m_Players[key].SetTempReports(m_Players[key].GetTempReports(reportType)+1,reportType); if (m_Players[key].GetTempReports(reportType) < 3) return; } else { m_Players[key].SetTempReportsTimer(actualTime,reportType); m_Players[key].SetTempReports(1,reportType); return; } } // generating creationTime for average calculation if (!m_Players[key].GetTotalReports()) m_Players[key].SetCreationTime(getMSTime()); // increasing total_reports m_Players[key].SetTotalReports(m_Players[key].GetTotalReports()+1); // increasing specific cheat report m_Players[key].SetTypeReports(reportType,m_Players[key].GetTypeReports(reportType)+1); // diff time for average calculation uint32 diffTime = getMSTimeDiff(m_Players[key].GetCreationTime(),getMSTime()) / IN_MILLISECONDS; if (diffTime > 0) { // Average == Reports per second float average = float(m_Players[key].GetTotalReports()) / float(diffTime); m_Players[key].SetAverage(average); } if (sWorld->getIntConfig(CONFIG_ANTICHEAT_MAX_REPORTS_FOR_DAILY_REPORT) < m_Players[key].GetTotalReports()) { if (!m_Players[key].GetDailyReportState()) { CharacterDatabase.PExecute("REPLACE INTO daily_players_reports (guid,average,total_reports,speed_reports,fly_reports,jump_reports,waterwalk_reports,teleportplane_reports,climb_reports,creation_time) VALUES (%u,%f,%u,%u,%u,%u,%u,%u,%u,%u);",player->GetGUIDLow(),m_Players[player->GetGUIDLow()].GetAverage(),m_Players[player->GetGUIDLow()].GetTotalReports(), m_Players[player->GetGUIDLow()].GetTypeReports(SPEED_HACK_REPORT),m_Players[player->GetGUIDLow()].GetTypeReports(FLY_HACK_REPORT),m_Players[player->GetGUIDLow()].GetTypeReports(JUMP_HACK_REPORT),m_Players[player->GetGUIDLow()].GetTypeReports(WALK_WATER_HACK_REPORT),m_Players[player->GetGUIDLow()].GetTypeReports(TELEPORT_PLANE_HACK_REPORT),m_Players[player->GetGUIDLow()].GetTypeReports(CLIMB_HACK_REPORT),m_Players[player->GetGUIDLow()].GetCreationTime()); m_Players[key].SetDailyReportState(true); } } if (m_Players[key].GetTotalReports() > sWorld->getIntConfig(CONFIG_ANTICHEAT_REPORTS_INGAME_NOTIFICATION)) { // display warning at the center of the screen, hacky way? std::string str = ""; if (sWorld->getBoolConfig(CONFIG_BAN_PLAYER)) //Make anticheat active. { if (m_Players[key].GetAverage() > 0.5f) { str = "Possible cheater found: " + std::string(player->GetName()); sWorld->BanCharacter(player->GetName(), "48h", str, "Anticheat"); sWorld->SendWorldText(LANG_BAN_CHEATER, player->GetName().c_str()); } } else { str = "|cFFFFFC00[AC]|cFF00FFFF[|cFF60FF00" + std::string(player->GetName().c_str()) + "|cFF00FFFF] Возможно читер!"; WorldPacket data(SMSG_NOTIFICATION, (str.size()+1)); data << str; sWorld->SendGlobalGMMessage(&data); } } }