Obwohl ich in meinem ersten Kommentar die Frage gestellt habe, ob die Erfahrung eines Teils Ihres Publikums ohne offensichtlichen Gewinn herabgesetzt werden soll, finde ich sie aus technischer Sicht immer noch interessant.
Ich hatte gerade die Idee: Was Betrüger tun, ist, Werte zu finden, die sich ändern und sie einfrieren. Die Suche würde dann nur zwischen Todesfällen oder Ereignissen stattfinden, die die Gesundheit des Spielers verändern. Darüber hinaus könnte der Betrüger die Suche verfeinern, indem er herausfiltert, was sich geändert hat, als er "nicht gestorben" war.
Was ist, wenn sich der "Gesundheits" -Zähler die ganze Zeit ändert? Machen Sie es zu einem Zeiger und ordnen Sie es jedem Frame oder allen N Frames neu zu, wenn der Performance-Hit zu groß ist. Oder XOR mit einem zufälligen Wert, der jeden Frame ändert (XOR wird erneut mit demselben Wert für die Entschlüsselung verglichen, bevor mit einem neuen zufälligen Wert verschlüsselt wird).
Wenn sich während des Spiels auch andere Daten ändern (einschließlich der x- und y-Position des Spielercharakters oder des Zeitzählers), ist es möglicherweise schwieriger herauszufinden, welche der sich ändernden Daten die Gesundheit sind. Und das Einfrieren des gesamten Spielzustands ist für den Betrüger kein Problem.
Zur weiteren Irreführung können Sie die Integrität in einer reinen Nur-Schreib-Variablen speichern, die als Honigtopf gedacht ist.
Bearbeiten :
Dennoch könnte der Betrüger versuchen herauszufinden, welche der Variablen, die sich die ganze Zeit ändern, diejenige ist, die durch Ausprobieren eingefroren werden kann. Eine mögliche Lösung wäre, die Variablen miteinander zu koppeln.
Ein Beispiel:
Anstatt Health (h) und Position (x) zu speichern, speichern Sie sie in zwei Variablen a und b, von denen Sie die Werte später abrufen können:
a = x+h; b = x-h
x = (a+b)/2; h = (a-b)/2
Auf diese Weise wird, wenn der Betrüger nur einen von ihnen einfriert und dann den Charakter bewegt, die Position beeinflusst und je nachdem, welcher eingefroren wurde, wird h negativ (sofortiger Tod). Sie können zwischen den obigen Formeln wechseln und:
a = x-h; b = x+h
x = (a+b)/2; h = (b-a)/2
In aufeinanderfolgenden Frames und Sie garantieren, dass in höchstens 2 Frames, nachdem eine der Variablen eingefroren wurde, der Zustand 0 wird, sobald sich x ändert. Denken Sie daran, dass Sie nur a und b speichern. Kombinieren Sie dies mit dem kontinuierlichen XOR wie oben erwähnt. Das Ergebnis ist eine Sammlung von Variablen, die jeden Frame in scheinbar zufällige Werte ändern, und das Einfrieren eines einzelnen oder einer Teilmenge davon führt nur zu unerwünschten Nebenwirkungen im Spiel, wobei der sofortige Tod einer von ihnen ist.
Warum sollten Sie Spieler daran hindern, sich selbst zu betrügen (was Betrug in einem Einzelspielerspiel bedeutet)? In einer Multiplayer-Umgebung ist es die Aufgabe des Servers, unnatürliche Änderungen zu erkennen und ihnen entgegenzuwirken (in der Regel indem er die Eingaben ignoriert oder den Schuldigen vollständig vom Server ausschließt) Bärendienst.
IOW, es sei denn, Sie erstellen ein Multiplayer-Spiel, es ist eine Geldverschwendung, und wenn Sie daran denken, den falschen Ort zu härten.
quelle
Informieren Sie sich über die bekannten Cheat-Tools - und überprüfen Sie regelmäßig, ob eines der am häufigsten verwendeten Tools ausgeführt wird (Prozessnamen überprüfen?).
Wenn welche entdeckt werden, lassen Sie den Spieler schummeln (wenn er offline ist, ist es harmlos), aber stellen Sie sicher, dass keine Punkte / Erfolge auf einer Online-Rangliste / einem Erfolgungssystem veröffentlicht werden.
Hält entschlossenere Hacker nicht auf, verringert aber die Wahrscheinlichkeit, dass gelegentliche Cheats Ihre Bestenlisten durcheinander bringen.
(Könnte Codierer ärgern, die Entwicklerwerkzeuge zu legitimen Zwecken geöffnet und minimiert haben und dennoch eine Spielepause einlegen ...)
quelle
Ich denke, die einfachste Lösung besteht darin, eine Cheat-Option zu implementieren. Deaktiviere die Wertung, während du die Cheat-Option aktivierst.
Eine weitere gute Idee, dass ich keine Ahnung habe, wie Sie das umsetzen würden. Ist das Spiel zu beenden, wenn es eine eingefrorene Speichervariable oder ähnliches gibt :)
Viel Glück)
quelle