Hallo,
hab da ein kleines Problem:
Ich möchte unter anderem für ein Anti-Waffen-Cheat die Waffen in einer Variablen Speichern. Derzeit tuhe ich das bereits, um die Waffen beim Ausloggen zu speichern und beim Einloggen wieder zu geben.
Dieser Vorgang klappt auch ganz gut, ich frage einfach mit GetPlayerWeaponData jeden Slot ab und speicher die Waffe mit entsprechender Ammo einfach in entsprechenden Variablen.
Nun möchte ich ein Anti-Waffen-Cheat implementieren. Ich mache nichts anderes: Wenn jemand eine Waffe vom Script bekommt (oder Waffen weggenommen werden) wird die Variable auf den entsprechenden Wert angepasst.
In bestimmten Abständen schaue ich dann, ob das, was er an Waffen hat, mit dem, was in den Variablen steht und so weiter..
folgendes habe ich also gemacht:
stock j_GivePlayerWeapon(playerid, weaponid, ammo)
{
pCheat[playerid][LastEdit][Hack_Weapon] = GetTickCount();
new slot = GetSlot(weaponid);
GivePlayerWeapon(playerid, weaponid, ammo);
GetPlayerWeaponData(playerid,slot,Spieler[playerid][pWaffe][slot], Spieler[playerid][pAmmo][slot]);
new teststr[64];
format(teststr,64,"Waffe %d | Ammo %d", Spieler[playerid][pWaffe][slot], Spieler[playerid][pAmmo][slot]);
SendClientMessage(playerid, COLOR_WHITE, teststr);
return 1;
}
Alles anzeigen
Ich gebe Testweise einmal das Ergebnis der neuen Waffe mit der Munition aus. Und nun wird ein Schuh draus: Er gibt mir immer das aus, was zuvor drinne war. Nochmal deutlich:
Zu begin habe ich keinerlei Waffen. Ich gebe dem Spieler nun eine Deagle mit 50 Schuss (Waffenid: 24 | Slot: 2)
Als Testergebniss bekomme ich Waffe 0 | Ammo 0 zurück. (Hm???)
Gebe ich nun aber eine weitere Deagle mit 10 Schuss, kriege ich folgendes Ergebnis:
"Waffe 24 | Ammo 50" -> Das ist das Ergebnis, was ich zuvor erwartet hatte.
Man kann es fast raten, gebe ich nun nochmal eine Deagle mit 20 Schuss, würde "Waffe 24 | Ammo 60 " raus kommen, danach "Waffe 24 | Ammo 80"
Gebe ich nun eine Siltent Pistol (Auch Slot 2) bekomme ich auch das Ergebnis vom letzen mal.
Es ist also immer um 1 verschoben. An den Variablen die ich benutze liegt es nicht, habe sie schon ersetzt, um dies auszuschließen.
Kleiner Hinweis: Ich nutze derzeit noch JunkBuster, jedoch ist "Weaponhack" deaktiviert.
Wie bereits erwähnt, nutze ich GetPlayerWeaponData ebenso wenn jemand sich ausloggt und speichere das Ergebnis in einer Datenbank. Diese Ergebnisse sind jedoch richtig. Auch in der Überprüfung, wo ich nochmal die aktuellen Waffen abfrage, stimmt das Ergebnis.
Nur innerhalb dieser Funktion ist es versetzt.