Vielleicht ein richtig Großes Event System.
Beiträge von Kasakow
-
-
meins ist so
if(newkeys & KEY_FIRE && (!noacheat)) { if(Spawned[playerid]) { static weapon; weapon = GetPlayerWeapon(playerid); if(!PlayerWeapons[playerid][weapon] && weapon != 40 && weapon != 0) { format(string, sizeof(string), "** Anti-Cheat: %s wurde vom Server gebannt. Grund: Waffen Cheat", GetName(playerid)); SendClientMessageToAll(Rot, string); TogglePlayerControllable(playerid, false); ResetPlayerWeapons(playerid); //Loggen format(string,sizeof(string),"(%d/%d/%d) [%d:%d:%d] %s wurde vom Anti-Cheat System gebannt. Grund: Waffenhack",day,month,year,hour,minute,second,GetName(playerid)); CheatLog(string); //Bannen SaveSpieler(playerid); BanEx(playerid, "Waffen Cheat"); } } }
Das ist vom BSRP Script Kopiert. Das hatte ich auch damals
-
Genau das weiß ich ja nicht.
Ich möchte wissen wie ich am besten abfragen kann ob er eine Waffe hat die nicht in der Variable ist.
Und wie man diese Waffe mit der Variable füllen kann, (Es sollen mehrere IDS in die Variable rein).
Und wie man diese ID anschließend wieder aus der Variable holen kann. (Falls die Muniition leer geht, etc)Ich würde gerne wissen wie man das am besten Scripten könnte.
Mit Freundlichen Grüßen,
Michael ak MrPawn
-
Hey,
Eigentlich ist ein AntiMoneyhack unnötig da das Geld ja eh Serverseitig läuft.Sowie S0beit damals für den Singleplayer ausgelegt war,soweit ich weiß ändert so ein Money Hack nur deine Hud also du denkst es wäre mehr ist es aber nicht.Der Server zieht sich ja alle Infos aus der Datenbank und der Hack kann diese nicht beeinflussen
Falls du es doch willst empfehle ich dir einfach dass GivePlayerMoney in GivePlayerCash oder so umzuändern.Wenn jmd. Dann Money bekommt lässt du ihn bannen :p
Ist es ja eigentlich nicht

Wenn er das normale GTA San Andreas Geld System benutzen würde, dann würde er die Speicherung warscheinlich mit GetPlayerMoney machen.
Und was würde heißen man geht in ein beliebiges Programm z.B Cheat Engine, S0beit, Trollbeit etc.
Dann würde Funktion SetPlayerMoney zum Einsatz kommen, da ja das normale System verwenden wird.
Also kann man sich extra Funktionen erstellen, die zur Erleichterung dienen.Beispiel Code:
stock SetPlayerMoney(playerid, amount) {
SetPVarInt(playerid, "Money", 0);
return GivePlayerMoneyEx(playerid, amount);
}stock GivePlayerMoneyEx(playerid, amount) {
SetPVarInt(playerid, "Money", GetPlayerMoneyEx(playerid) + amount );
return GivePlayerMoney(playerid, amount);
}stock GetPlayerMoneyEx(playerid) {
return GetPVarInt(playerid, "Money");
}Mit Freundlichen Grüßen,
Michael aka MrPawn
-
Achso, darauf habe ich ja garnicht geschaut.
Natürlich ergibt playerid != 0 keinen sinn
Und bitte frag mich nicht warum ich so spät geantwortet habe. -
Guten Tag,
Ich arbeite mal wieder am meinem Selfmade, und habe ein Anti - Cheat System angefangen.
Bis jetzt enthalten:- Anti - GeldCheat
Was ich nun mache:
- Anti Waffencheat
Ich würde es gerne so machen, das man alle Waffen besitzen kann sobald die in einer Player Variable enthalten sind.
Sprich z.Bnew pWaffen[MAX_PLAYERS][13][50];
Dann wird in einem Timer mit einer Schleife gearbeitet.
new Waffen[13][2];
for(new i; i < 13; i++)
{
GetPlayerWeaponData(playerid, Waffen[i][0], Waffen[i][1]);
if(Waffen[i][0] != pWaffen[playerid][i][Waffen[i][0]];
}Aber ich denke, das wird so nicht ganz so viel sinn machen.
Deswegen würde ich euch mal fragen wie man sowas am besten machen könnte.INFO: Jeder Spieler kann jede Waffe besitzen , vorrausgesetzt, er hat sie von einer Funktion bekommen, z.B GivePlayerWeaponEx(playerid, wid, ammo)
In der Funktion wird dann die Variable befüllt/updatedMit Freundlichen Grüßen,
Michael aka MrPawn
-
Wenn du nur die Spieler anzeigen lässt, die ein "[pWanteds]" haben welches nicht 0 ist, dann ja.
Es gibt dabei einen Kleinen Fehler Jeffry.
Und zwar ich kann jeden anderen anklicken aber keiner kann auf meinen Namen klicken.Aktueller Quellcode:
for( new i; i < MAX_PLAYERS; i++)
{
if(i == INVALID_PLAYER_ID || uInfo[i][pEingeloggt] != 1)continue;
if(uInfo[i][pWanteds] == 0)continue;
format(string, sizeof(string), "Spieler: %s | %i Wanteds\n%s", Spielername(i), uInfo[i][pWanteds], string);
ShowPlayerDialog(playerid, DIALOG_FRAKTIONS_SAPD_AKTENx, DIALOG_STYLE_LIST, "Akten", string, "Weiter", "Abbrechen");
}new count;
if(response)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(i == INVALID_PLAYER_ID || uInfo[i][pEingeloggt] != 1)continue;
if(uInfo[i][pWanteds] != 0) count ++;
if(count != listitem)continue;
SetPVarInt(playerid, "CID", i);
format(string, sizeof(string), "{FFFFFF}Möchtest du dir wirklich die Akte von %s krallen?", Spielername(i));
ShowPlayerDialog(playerid, DIALOG_FRAKTIONS_SAPD_AKTEN, DIALOG_STYLE_MSGBOX, "Akte", string, "Ja", "Nein");
}
}Hoffe ihr könnt mir helfen!
-
Alles anzeigen
if(dialogid==DEIN_DIALOG)
{
new count = -1;
if(response)
{
for(new i=0;i<MAX_PLAYERS;i++)
{
if(var[i] == bedingung) count++;
if(count != listitem) continue;
//Mache was hier... i = die Spieler ID auf dessen Name du gedrückt hast.
break;
}
}
}Wobei das natürlich nicht den Fall regeln kann, wenn sich die Bedingung ändert, während der Spieler den Dialog offen hat, das würde mit meinem Tutorial gehen, deshalb ist es auch mehr Code.
Erstmal danke, für eine erneute & schnelle Antwort.
Dieser Quelltext ist schon verständlicher für mich.Aktuell habe ich es so:
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(i == INVALID_PLAYER_ID || uInfo[i][pEingeloggt] != 1)continue;
if(uInfo[i][pWanteds] != 0) count ++;
if(count != listitem)continue;
SetPVarInt(playerid, "CID", i);
format(string, sizeof(string), "{FFFFFF}Möchtest du dir wirklich die Akte von %s krallen?", Spielername(i));
ShowPlayerDialog(playerid, DIALOG_FRAKTIONS_SAPD_AKTEN, DIALOG_STYLE_MSGBOX, "Akte", string, "Ja", "Nein");
}Wäre das soweit richtig ?
-
Ich würde dir mein Tutorial empfehlen.
[ SCRIPTING ] [jTuT] Interaktive DialogeDamit kannst du den Inhalt der Zeile des listitems abfragen, und an Hand dessen dann deine Bedingung einfach mit strcmp prüfen.
Das ist alles schön & Gut Jeffry, aber ich möchte es so machen wie es alle machen.
Nochmal eine genauere Erklärung: z.B /accept oamtDer OÄmtler sieht wer alles einen Auftrag hat, z.B auftrag[i] == true)
Dann drückt der oämtler die pos, das heißt die id.
Ganz einfach erklärt
Aber schon mal danke für die Empfehlung -
Guten Mittag,
Ich möchte mal etwas fragen.
Ich versuche ein Dialogen Listen System zu machen:for ( new i; i < MAX_PLAYERS; i++ )
{
if(i == INVALID_PLAYER_ID)continue;
if(var[i] != bedingung)continue;
format(string, sizeof(string), "Spieler: %s\n%s", Spielername(i), string);
ShowPlayerDialog(playerid, id, DIALOG_STYLE_LIST, "..", string, "Wählen", "");
}Wenn es zum Beispiel mir der Fall ist, das die Bedingung erfüllt wurde, dann soll ich angezeigt werden, nach dem jetzigen Code würde das auch Klappen.
Nur ich möchte auch das man auf mich draufklicken kann, und das dann z.B meine ID für weitere funktionen in eine zwischenvariable speichert.
Sprich, mann soll auf mich draufklicken können oder bei den anderen Usern bei denen die Bedingung erfüllt wurde.
Mich würde mal interessieren wie sowas funktonieren würde,Mit Freundlichen Grüßen
Michael aka MrPawn
-
vorgestellt
Er meint bestimmt wenn der Client etwas findet:UPDATE .. SET Ban=1 WHERE .. = '%s", eingetragenername
Also kurz gefasst, das der Spieler gebannt wird!
-
Wieso sollte man in einem Anti - Cheat Client eine Spieler Statistik vorhanden sein, dafür könnte man sich doch ein User Control Panel programmieren!
-
Danke, werde ich morgen mal probieren

-
Das ergibt gar keinen sin

new lastkillid[MAX_PLAYER_NAME];
Du hast daraus einen string gemacht!
format(lastkillid[playerid],MAX_PLAYER_NAME,"%s",PlayerName(playerid));
Und dann verwendest du es als normale MAX_PLAYER Variable, sinnlos

-
Dann musst du auch z.B [playerid] reinschreiben!
format(string,sizeof(string),"%s wurde zuletzt von %s gekillt.", PlayerName(giveplayerid), PlayerName(lastkillid)); //Zeile 22688
zu:
format(string,sizeof(string),"%s wurde zuletzt von %s gekillt.", PlayerName(giveplayerid), PlayerName(lastkillid[giveplayerid])); //Zeile 22688
-
Ich möchte abfragen ob ein Eintrag in der Datenbank vorhanden ist. (z.B für ein Anmelde System)
Wie man den Query benutzt weiß ich bereits. (Müsste so stimmen)
Und möchte ich abfragen ob was gefunden wurde.
Den Eintrag den ich angegeben habe.
Ich lasse den Query so ausführen:format(query, sizeof(query), "SELECT * FROM acc WHERE Name='%s'", tmp_name);
mysql_tquery(MySQL_Connect, query);Und möchte ich abfragen, ob der Eintrag mit dem Namen = '%s' in der Datenbank gefunden wurde.
Ich überlege die 2 Funktionen in betracht zu ziehen:
Funktionen:
- cache_get_field_name
- cache_get_field_count
Welche Funktion muss ich verwenden, und wie setze ich sie genausten ein. (Bitte einen Codeschnipsel)
Vielen Dank im Voraus !
-
Jap, musste Pawno neustarten und mysql_ping rausnehmen, aber wie kann ich nun dafür sorgen wenn die verbindung steht, das es geprintet wird und wenn sie erfolglos war das der server beendet wird ?
EDIT:
Habe es hinbekommen:
if(mysql_errno() != 0){print("Die Verbindung war erfolglos!"),SendRconCommand("exit");}else print("Die Verbindung war erfolgreich!");Danke

-
Alles anzeigen
Die funktion mysql_ping() hat ausgedient jedoch kannst du
mysql_errno() benutzenCodecon_Handler = mysql_connect("127.0.0.1", "root", "datenbank", "pw"); if(mysql_errno(con_Handler) != 0) print("Keine Verbindung zur Datenbank!");Als kleine Info die R7 Version ist richtig alt es gibt schon die Version r38
Download:
https://github.com/pBlueG/SA-MP-MySQL/releasesDokumentation:
http://wiki.sa-mp.com/wiki/MySQL/R33Ich habe nun R38 angeschmissen, und muss ehrlich sagen nun möchte der Server nicht mehr mitmachen
Code
Alles anzeigenSA-MP Dedicated Server ---------------------- v0.3z, (C)2005-2014 SA-MP Team [14:14:10] [14:14:10] Server Plugins [14:14:10] -------------- [14:14:10] Loading plugin: mysql [14:14:10] >> plugin.mysql: R38 successfully loaded. [14:14:10] Loaded. [14:14:10] Loaded 1 plugins. [14:14:10] [14:14:10] Filterscripts [14:14:10] --------------- [14:14:10] Loading filterscript 'adminspec.amx'... [14:14:10] Loading filterscript 'baseaf.amx'... [14:14:10] --Base FS loaded. [14:14:10] Loaded 2 filterscripts. [14:14:10] Script[gamemodes/deathmatch.amx]: Run time error 19: "File or function is not found" [14:14:10] Number of vehicle models: 0In die MySQL wird nichts geprintet

-
Ich habe eigentlich immer nur mit dem MySQL Plugin R5 gearbeitet, aber aktuell möchte ich mich mit dem MySQL Plugin R7 beschäftigen!
Ich möchte nun eine Verbindung aufbauen lassen, und dann möchte ich sobald sie erfolglos war, den Server herunterfahren.
In der SERVER_log steht :
Und das steht in der MySQL_log:
Code[13:53:54] >> mysql_connect(127.0.0.1, root, datenbank, ******) on port 3306 [13:53:54] CMySQLHandler::CMySQLHandler() - constructor called. [13:53:54] CMySQLHandler::CMySQLHandler() - Connecting to "127.0.0.1" | DB: "datenbank" | Username: "root" [13:53:55] CMySQLHandler::Connect() - Can't connect to MySQL server on '127.0.0.1' (10061) (Error ID: 2003) [13:53:55] [13:53:55] ** MySQL Debugging enabled (05/22/14) [13:53:55] [13:53:55] >> mysql_ping( Connection handle: 1 ) [13:53:55] CMySQLHandler::Ping() - You cannot call this function now. (Reason: Dead Connection)Aber nach meinem Code sollte es eigentlich klappen, tut es aber leider nicht.
Schnipsel des Code´s:
//MySQL System
MySQL_Connect = mysql_connect(MySQL_HOST, MySQL_USER, MySQL_DATA, MySQL_PASS),mysql_debug(true);
if(mysql_ping() == 0){print("MySQL: Verbindung fehlgeschlagen!"), SendRconCommand("exit");}else print("MySQL: Verbindung wurde erfolgreich hergestellt!");Versteht ihr, was ich genau falsch mache ?
-
Klar, aber mann könnte ja auch einfach mit Variablen & Timern arbeiten
