Beiträge von Kaliber

    Was Winston_Churchill hier meint ist das du einfach die funktionen hookst also GivePlayerMoney, GetPlayerMoney und eventuell
    ResetPlayerMoney und über GetPlayerMoney einfach abfrägst ob das geld der variabel entspricht.
    Was du zusätzlich dazu machen musst ist dem spieler im paintspray und in der tunning garage den wert der serverseitigen variabel zu setzen
    entweder du passt den wert einfach an unter OnEnterExitModShop oder direkt bei OnVehicleMod und bei den paint'n sprays da kannst du zonen erstellen über das Streamer Plugin


    Sacht mal...ich weiß doch was er meint :wacko:


    Man kann einfach darunter folgende abfrage machen:


    if(geld[playerid] < GetPlayerMoney(playerid)) geld[playerid] = GetPlayerMoney(playerid);


    Dann hat man auch die Heal-Automaten abgedeckt...etc :rolleyes:


    ...aber lest euch doch mal meine Antwort schon von Beavis durch...da verweise ich doch schon auf meine Antwort darauf... :whistling:


    Das war Absicht :rolleyes:


    mfg...

    Er meint das anders.


    Du hast bspw. 50.000$.
    Nun gehst Du in eine Tuningwerkstatt und kaufst Gegenstände für bspw. 15.000$.
    Serverside hat er allerdings noch 50.000$, was bedeuten würde, dass er die gerade ausgegebenen 15.000$ ercheaten könnte, da er ja dann wieder genau bei 50.000$ wäre und somit "offiziell" kein Geld gecheatet hat.


    Ich hab schon verstanden was er meint...genau das meine ich auch :rolleyes:

    Dazu sind deine Variablennamen sehr kompliziert.


    Es gibt genau 1ne Variable...und die heißt geld :D


    Kompliziert :whistling:


    Finde es total kompliziert geschrieben, das ist definitiv nichts für neulinge.


    Naja, ich habe es versucht einfach zu erklären, natürlich ist der Code etwas anspruchsvoll, allerdings sollten die Erklärungen einleuchtend sein...


    Das hätte man leichterer machen könnne.


    Na dann, zeig doch mal :)


    mfg. :thumbup:

    Mach das ganze doch über OnPlayerUpdate


    Naja...wozu? :huh:


    Warum sollte das bis zu ~10000x in der Sekunde geprüft werden?


    das du alle spieler mit einem aufruf der funktion via for-schleife durchgehst.


    Das könnte man auch tun...macht jetzt nicht soo einen großen Unterschied.


    Aber die Möglichkeit bleibt ja offen es zu ändern ;)


    mfg. :rolleyes:

    Was ist mit Pay&Spray und Tuning? Das wird ja normalerweise vom Client geregelt..


    Ja, sehr richtig.


    Allerdings prüfe ich nur, ob das Geld auf der Hand größer ist als das in der Variable. Bei dem Pay&Spray wird ja dem Client Geld abgezogen, also ist das egal.


    Ausschlaggebend ist nur, wenn er mehr Geld hat.


    Natürlich kann man das noch anpassen, dass die Geld Variable dann gleichgesetzt wird von dem niedrigeren Geld...


    Dieses Tutorial sollte nur der Veranschaulichung von so einem System dienen, nicht um es zu 100% perfekt zu Copy pasten ;)


    mfg. :thumbup:

    Guten Morgen Brotfische,


    da ich in letzter Zeit ziemlich oft lese, wie das geht und die meisten dann mit extra Funktionen oder extra TextDraws über der normalen Geldanzeige arbeiten, wollte ich mal euch zeigen, wie man das viel besser lösen kann :D


    Im Prinzip ist es ganz einfach, also schaut es euch an und ich hoffe, ich kann euch noch etwas beibringen:


    Wie genau machen wir das jetzt?
    Ganz einfach, wir hooken die Funktion GivePlayerMoney, dadurch können wir eine Variable dazwischen schalten, die dann Serverseitig prüft, wie viel Geld er hat, unabhängig vom Client.
    Desweiteren hooken wir OnPlayerConnect um die Variable für jeden neuen Spieler wieder auf 0 zu setzen.
    Und wir nutzen einen Timer, der das dann direkt überprüft.


    Das bedeutet, nur wenn GivePlayerMoney benutzt wird, bekommt er Geld, wenn er es versucht über Mods zu verändern, wird ihm das Geld direkt wieder abgezogen.


    Gehen wir das nun Schritt für Schritt durch und setzen das in Form einer Include um:


    Oben in der Include (kurz eine Wiederholung):


    #if !defined _samp_included //Prüft ob die SA-MP Include includiert wurde, zwar nicht direkt notwendig, da das nochmal in der Include selbst gecheckt wird, aber finde es so übersichtlicher
    #include <a_samp>
    #endif
    #if defined _a_hack_included //Hier prüfen wir, ob unsere Include schoneinmal includiert wurde, falls dies der Fall ist, #endinput
    #endinput //Das bewirkt, dass hier der Compiler aufhört und die Include nicht weiter einliest
    #endif
    #define _a_hack_included //Definiert den Directive dafür, dass die Include includiert wurde.


    So, wenn wir den Kopf-Bereich von der Include haben, kommen wir zu den Hooks und den Deklarationen.


    forward A_C_OnPlayerConnect(playerid); //wir forwarden OnPlayerConnect unter anderem Namen um es zu hooken
    static geld[MAX_PLAYERS]; //Die Geld Variable für jeden Spieler und static, damit das im Gamemode nicht stört
    native __GivePlayerMoney(playerid, money) = GivePlayerMoney; //Der native von GivePlayerMoney ist auch für den Hook nötig, damit wir das später aufrufen können.
    @MoneyTimer(playerid); //Der forward für den Spieler Timer


    So und nun nur noch die Hooks:


    //Hier setzen wir das geld[playerid] auf 0, wenn er auf den Server connectet
    //CallLocalFunction sorgt nur dafür, dass in anderen Includes und im Gamemode OnPlayerConnect aufgerufen wird.
    public OnPlayerConnect(playerid) {
    geld[playerid]=0;
    SetTimerEx("@MoneyTimer",999,0,"i",playerid); //Hier starten wir den Timer für den Spieler
    return CallLocalFunction("A_C_OnPlayerConnect","i",playerid);
    }
    //Unteres ist einfach nur der OnPlayerConnect Hook
    #if defined _ALS_OnPlayerConnect
    #undef OnPlayerConnect
    #else
    #define _ALS_OnPlayerConnect
    #endif
    #define OnPlayerConnect A_C_OnPlayerConnect


    //Hier hooken wir GivePlayerMoney
    //geld[playerid] += money..sprich wir speichern das Geld vom Spieler in der Variable
    //__GivePlayerMoney, sorgt nur dafür, dass es als native für samp verarbeitet wird und InGame man Geld dazubekommt
    stock _GivePlayerMoney(playerid, money) return geld[playerid] += money,__GivePlayerMoney(playerid, money);
    //Unteres ist einfach nur der GivePlayerMoney Hook
    #if defined _ALS_GivePlayerMoney
    #undef GivePlayerMoney
    #else
    #define _ALS_GivePlayerMoney
    #endif
    #define GivePlayerMoney _GivePlayerMoney


    So und jetzt nur noch einen kleinen Timer gesetzt:


    @MoneyTimer(playerid) {
    if(!IsPlayerConnected(playerid)) return 0;
    if(GetPlayerMoney(playerid) > geld[playerid]) return Ban(playerid); //Hier hat er Geld gecheatet!!!
    /*
    Um einen Reset des Geldes zu machen könnt ihr auch einfach folgendes schreiben:
    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid, geld[playerid]);
    */
    return SetTimerEx("@MoneyTimer",999,0,"i",playerid);
    }


    Nochmal ganzer Source-Code:
    Pastebin: http://pastebin.com/UqX8LFyJ


    Ich hoffe ich konnte euch ein wenig weiter helfen, ich könnt mir ja mal ein kleines Feedback geben :)
    Viel Spaß damit ;)


    //Edit: Pastebin Link


    mfg. :thumbup:

    Schreib es so:


    public OnPlayerConnect(playerid)
    {
    new string[64], pName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,pName,MAX_PLAYER_NAME);
    format(string,sizeof string,""BLAU"[Server] {FFFFFF}%s hat das Spiel betreten.",pName);
    SendClientMessageToAll(-1,string);
    if ( !INI_Exist( pName( playerid ) ) ) return ShowPlayerDialog( playerid, DIALOG_REG_REQ, DIALOG_STYLE_MSGBOX, ""BLAU"Willkommen",""COL_GREEN"Willkommen auf unserem Server!\n\n{FFFFFF}Möchtest du dich registrieren ?.", "Weiter", "");
    return ShowPlayerDialog( playerid, DIALOG_LOGIN, DIALOG_STYLE_MSGBOX, ""BLAU"Willkommen",""COL_GREEN"Willkommen auf unserem Server!\n\n{FFFFFF}Dein Account wurde gefunden.\nMöchtest du dich nun mit diesem anmelden?","Einloggen", "Abbrechen");
    }


    mfg. :thumbup:

    IsPlayerInRangeOfPoint kann ich es wie in einem command mit dem || machen dass er überprüfen soll ob er in der Nähe von einem der Punkte ist?


    Natürlich :)


    Sieht dann so aus:


    if(IsPlayerInRangeOfPoint(playerid, 2.0, x,y,z) || IsPlayerInRangeOfPoint(playerid,2.0,x,y,z))
    {


    }


    //Falls du viele Punkte hast, kann man es auch so machen:
    static Float:RangePoints[][3] = {
    {x,y,z}, //1. Koordinaten
    {x,y,z}, //2. Koordinaten
    {x,y,z}, //3. Koordinaten
    {x,y,z} //4. Koordinaten
    //usw kann man beliebig fortführen
    };


    for(new i; i<sizeof RangePoints; i++) {
    if(IsPlayerInRangeOfPoint(playerid,2.0,RangePoints[i][0],RangePoints[i][1],RangePoints[i][2])) {
    //Hier ist er dann in der Nähe einer dieser Koordinaten
    }
    }


    mfg. :thumbup:

    Geht der Code eventuell besser und ressourcenschonender ?


    Du solltest es vermeiden Variablen in Schleifen zu deklarieren...denn dann werden sie bei jedem Durchlauf neu deklariert :rolleyes:


    So kannst du es besser machen:


    public OnRconLoginAttempt(ip[],password[],success) {
    if(success) return 1;
    new string[128],pip[16];
    for(new i; i<MAX_PLAYERS; i++) {
    GetPlayerIp(i,pip,sizeof(pip));
    if(strcmp(ip,pip) != 0) continue;
    Ban(i),gettime(string[0],string[1],string[2]);
    format(string,sizeof(string),"Sicherheitsban der IP %s. Verwendetes Passwort: %s. %02d:%02d:%02d.",ip,password,string[0],string[1],string[2]);
    return LogCommand(string);
    }
    return 1;
    }


    mfg. :thumbup:

    Für den Server die Befehle konnte ich alle (fast fehlerfrei ohne Hilfe)


    Wieso scheitert es dann, trotz Wiki an diesen 4 Zeilen:


    if(!strcmp(cmdtext, "/Infernus")) {
    if(IsPlayerInAnyVehicle(playerid)) DestroyVehicle(GetPlayerVehicleID(playerid));
    new Float:p[4],vID;
    GetPlayerPos(playerid,p[0],p[1],p[2]),GetPlayerFacingAngle(playerid,p[3]);
    return vID = CreateVehicle(411,p[0],p[1],p[2],p[3],-1,-1,-1),PutPlayerInVehicle(playerid,vID,0),1;
    }


    Wenn du nur eine Hydra zerstören willst, dann bräuchten wir entweder den Code, wie du sie erstellst bzw eine Variable oder du fügst noch was mit Admin-Rechten hinzu...
    Halt so wie du es willst :rolleyes:


    mfg. :thumbup:

    hier, wäre auch etwas fahrlässig wenn man das deaktivieren könnte.


    Man kann die RCON Konsole deaktivieren, entweder wenn man InGame /rcon password 0 eingibt oder schon direkt in der server.cfg das passwort auf 0 stellt.


    Dann kann sich keiner mehr als RCON-Admin einloggen.


    mfg. :thumbup:

    Da ich absolut kein Leben habe...habe ich dir mal deinen Befehl neu geschrieben.


    Schaus dir mal an und ich hoffe du erkennst die Unterschiede und lernst etwas daraus ;)


    ocmd:configplayer(playerid, params[]) {
    if(SpielerInfo[playerid][pAdmin] < 3) return SendClientMessage(playerid,-1,"Du besitzt keine Rechte diesen Befehl zu verwenden!");
    new ppID, syntax[32], wert, string[145];
    if(sscanf(params,"usi",ppID,syntax,wert)) {
    SendClientMessage(playerid, COLOR_WHITE, "{19FF00}Verwende: {0041FF}/configplayer [SpielerID] [Syntax] [Wert]");
    SendClientMessage(playerid, 0x7D0000FF, "| ======== [ Verfügbare Syntaxen ] ======== |");
    SendClientMessage(playerid, 0x7D0000FF, "Level Geschlecht Exp Cash Bankkonto Verbrechen Kills Tode Knast WantedTode");
    SendClientMessage(playerid, 0x7D0000FF, "Job JobGehalT Fraktion Rank Skin Handynummer ARG Spielminuten Verwarnungen HandyGeld");
    SendClientMessage(playerid, 0x7D0000FF, "Zigaretten Handyvertrag Perso Coins Duty Gehalt Wanted");
    return SendClientMessage(playerid, 0x7D0000FF, "| ======== [ Verfügbare Syntaxen ] ======== |");
    }
    if(!IsPlayerConnected(ppID)) return SendClientMessage(playerid,-1,"Ein Spieler mit dieser SpielerID ist nicht online!");
    if(!strcmp(syntax, "Level", true)) {
    SetPlayerScore(ppID, wert),SpielerInfo[ppID][pAge] = wert;
    format(string, sizeof string, "[CONFIG] Du hast das Level von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, strin);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir das Level auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Geschlecht", true)) {
    if(wert != 1) return SendClientMessage(playerid, COLOR_RED, "Der Wert darf nicht unter 1 und über 2 sein!");
    new sex[9];strcat(sex,(wert == 1) ? ("Männlich") : ("Weiblich"),9);
    SpielerInfo[ppID][pSex] = wert;
    format(string, sizeof string, "[CONFIG] Du hast das Geschlecht von %s auf %s gesettet!", GetName(ppID), sex);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir das Bargeld auf %s gesettet!", GetName(playerid), sex);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Exp", true)) {
    SpielerInfo[ppID][pExp] = wert;
    format(string, sizeof string, "[CONFIG] Du hast die Respektpunkte von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir die Respektpunkte auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Cash", true)) {
    ResetPlayerMoney(ppID),SpielerInfo[ppID][pCash] = wert;
    format(string, sizeof string, "[CONFIG] Du hast das Bargeld von %s auf %d$ gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir das Bargeld auf %d$ gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string),GivePlayerMoney(ppID, wert);
    } else if(!strcmp(syntax, "Bankkonto", true)) {
    SpielerInfo[ppID][pAccount] = wert;
    format(string, sizeof string, "[CONFIG] Du hast das Bankguthaben von %s auf %d$ gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir das Bankguthaben auf %d$ gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Verbrechen", true)) {
    SpielerInfo[ppID][pCrimes] = wert;
    format(string, sizeof string, "[CONFIG] Du hast die Verbrechen von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir deine Verbrechen auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Kills", true)) {
    SpielerInfo[ppID][pKills] = wert;
    format(string, sizeof string, "[CONFIG] Du hast die Kills von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir deine Kills auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Tode", true)) {
    SpielerInfo[ppID][pDeaths] = wert;
    format(string, sizeof string, "[CONFIG] Du hast die Tode von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir deine Tode auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Knast", true)) {
    SpielerInfo[ppID][pArrested] = wert;
    format(string, sizeof string, "[CONFIG] Du hast die Knastanzahl von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir deine Knastanzahl auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "WantedTode", true)) {
    SpielerInfo[ppID][pWantedDeaths] = wert;
    format(string, sizeof string, "[CONFIG] Du hast die WantedTode von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir deine WantedTode auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Job", true)) {
    SpielerInfo[ppID][sJob] = wert;
    format(string, sizeof string, "[CONFIG] Du hast den Job von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir dein Job auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "JobGehalt", true)) {
    SpielerInfo[ppID][pJobGehalt] = wert;
    format(string, sizeof string, "[CONFIG] Du hast den Job Gehalt von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir dein Job Gehalt auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Fraktion", true)) {
    SpielerInfo[ppID][sMember] = wert;
    format(string, sizeof string, "[CONFIG] Du hast die Fraktion von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir deine Fraktion auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Rank", true)) {
    SpielerInfo[ppID][pRank] = wert;
    format(string, sizeof string, "[CONFIG] Du hast den Fraktionsrank von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir dein Fraktionsrank auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Skin", true)) {
    SpielerInfo[ppID][pChar] = wert,SetPlayerSkin(ppID, wert);
    format(string, sizeof string, "[CONFIG] Du hast den Skin von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir dein Skin auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Handynummer", true)) {
    SpielerInfo[ppID][pPnumber] = wert;
    format(string, sizeof string, "[CONFIG] Du hast die Handynummer von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir deine Handynummer auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "ARG", true)) {
    SpielerInfo[ppID][pARG] = wert;
    format(string, sizeof string, "[CONFIG] Du hast das Arbeitslosengeld von %s auf %d$ gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir dein ArbeitslosenGeld auf %d$ gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Spielminuten", true)) {
    SpielerInfo[ppID][pGesamtMinutes] = wert;
    format(string, sizeof string, "[CONFIG] Du hast die Spielminuten von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir deine Spielminuten auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Verwarnugen", true)) {
    SpielerInfo[ppID][pWarns] = wert;
    format(string, sizeof string, "[CONFIG] Du hast die Admin Verwarnungen von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir deine Admin Verwarnungen auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Spielminuten", true)) {
    SpielerInfo[ppID][pHandyGeld] = wert;
    format(string, sizeof string, "[CONFIG] Du hast das HandGeld von %s auf %d$ gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir dein HandyGeld auf %d$ gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Zigaretten", true)) {
    SpielerInfo[ppID][pZig] = wert;
    format(string, sizeof string, "[CONFIG] Du hast die Zigaretten von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir deine Zigaretten auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Handyvertrag", true)) {
    SpielerInfo[ppID][pHandyVer] = wert;
    format(string, sizeof string, "[CONFIG] Du hast den Handyvertrag von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir dein Handyvertrag auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Perso", true)) {
    SpielerInfo[ppID][pOwnPerso] = wert;
    format(string, sizeof string, "[CONFIG] Du hast den Personalausweiß von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir dein Personalausweiß auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Coins", true)) {
    SpielerInfo[ppID][pCoins] = wert;
    format(string, sizeof string, "[CONFIG] Du hast die Coins von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir deine Coins auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Duty", true)) {
    SpielerInfo[ppID][pDuty] = wert;
    format(string, sizeof string, "[CONFIG] Du hast den Dienst von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir dein Dienst auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Gehalt", true)) {
    SpielerInfo[ppID][pGehalt] = wert;
    format(string, sizeof string, "[CONFIG] Du hast den Gehalt von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir dein Gehalt auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    } else if(!strcmp(syntax, "Wanted", true)) {
    SpielerInfo[ppID][pWanted] = wert;
    format(string, sizeof string, "[CONFIG] Du hast die Wanteds von %s auf %d gesettet!", GetName(ppID), wert);
    SendClientMessage(playerid, 0x00B9FFFF, string);
    format(string, sizeof string, "[CONFIG] Admin %s hat dir deine Wanteds auf %d gesettet!", GetName(playerid), wert);
    return SendClientMessage(ppID, 0x00B9FFFF, string);
    }
    SendClientMessage(playerid, COLOR_RED, "Falsche Syntax!");
    SendClientMessage(playerid, 0x7D0000FF, "| ======== [ Verfügbare Syntaxen ] ======== |");
    SendClientMessage(playerid, 0x7D0000FF, "Level Geschlecht Exp Cash Bankkonto Verbrechen Kills Tode Knast WantedTode");
    SendClientMessage(playerid, 0x7D0000FF, "Job JobGehalT Fraktion Rank Skin Handynummer ARG Spielminuten Verwarnungen HandyGeld");
    SendClientMessage(playerid, 0x7D0000FF, "Zigaretten Handyvertrag Perso Coins Duty Gehalt Wanted");
    return SendClientMessage(playerid, 0x7D0000FF, "| ======== [ Verfügbare Syntaxen ] ======== |");
    }


    mfg. :thumbup:

    Ich habe mir mal die Funktionen von dem Plugin angeschaut, aber ich glaube es gibt keine Möglichkeit einfach durch alle Datein zu loopen, oder ?


    Doch natürlich...lese es dir doch erstmal in Ruhe durch:


    Code
    Function: dir_list(dir:handle, storage[], &type, length = sizeof(storage));
        Description: Reads through a directory, listing each file/sub-directory one by one.
        Params:
                dir:handle - The handle of the directory that is open to read from.
                storage[] - Where the name of the file/directory is stored.
                type - Where the type of directory is stored, can be either 1 or 2
                (optional) length - This is not needed unless you are passing an array without any length, in which case, use strlen with your array.
    
        Returns: 1 if there a sub-directory/file was found, 0 if there wasn't.


    mfg. :rolleyes: