Синтаксис:
Используется csharp
private DateTime olddt;
private long oldTick;
private int errorCount;
void Start() {
olddt = DateTime.Now;
oldTick = Environment.TickCount;
InvokeRepeating("invSpeedHack", 5, 5);
}
void invSpeedHack() {
TimeSpan span = DateTime.Now - olddt;
olddt = DateTime.Now;
long dTick = Environment.TickCount - oldTick;
oldTick = Environment.TickCount;
if (span.TotalMilliseconds * 1.3f < dTick) {
errorCount++;
}
if (errorCount > 5) {
Debug.Log("SH detected");
SceneManager.getI.loadNewLevel(GameConst.scCheat);
}
}
private long oldTick;
private int errorCount;
void Start() {
olddt = DateTime.Now;
oldTick = Environment.TickCount;
InvokeRepeating("invSpeedHack", 5, 5);
}
void invSpeedHack() {
TimeSpan span = DateTime.Now - olddt;
olddt = DateTime.Now;
long dTick = Environment.TickCount - oldTick;
oldTick = Environment.TickCount;
if (span.TotalMilliseconds * 1.3f < dTick) {
errorCount++;
}
if (errorCount > 5) {
Debug.Log("SH detected");
SceneManager.getI.loadNewLevel(GameConst.scCheat);
}
}
Это проверено у меня на ЗБТ и это работает, ложных срабатываний не было. Тестировало около 100 человек.
Для чего нужна строка "if (span.TotalMilliseconds * 1.3f < dTick)" - класс DateTime обладает довольно низкой точностью и получаемые значения могут прыгать в ту или иную сторону. Коэффициент 1.3 - является своеобразным коэффициентом округления.
Переменная errorCount - введена для нивелирования случайных срабатываний при единичных фризах. Такое иногда бывает, особенно, на загаженной винде.
Пользуйтесь на здоровье.