Beiträge von ray187

    Ah ja klar.


    Machst dirn mehrdimensionales Array aus [pRoadblock] je nachdem wieviele erstellt werden sollen. Dann fragst beim erstellen ab welche Zellen schon gefüllt sind, nimmst die nächste für die jeweilige ObjektID (außer es ist voll natürlich - dann weißts zurück) und fertig.

    Beim Überfliegen bin ich mir unklar ob ich das gewünschte Ergebnis richtig verstanden habe.


    Aber ein Ansatz:


    Anstelle dieser Zeile "split(inputtext, WeisInfo, ' ');"



    new user, betrag;
    sscanf(inputtext,"ud",user,betrag);
    if(IsPlayerConnected(user))
    {
    if(betrag>0)
    {
    // ...
    }
    else
    {
    // error betrag
    }
    }
    else
    {
    // error user
    }


    Möcht jetzt nicht allzu viel wiederholen, was die jeweiligen Bezeichner etc. machen kannst dem Thread entnehmen.

    Was hat das mit meinem Posting zu tun und inwiefern spielt deine Aufteilung des Codes denn bitte eine Rolle bezgl. Includes?


    Bezgl. des Themas würde ich zu jederzeit ein eigenes, individuelles Antimoneyhack-"System" (die paar Zeilen Code) vorziehen als fremden Code in einem fremden Include.

    Ist auch nur als Verbesserungsvorschlag gedacht.


    Gemeint ist damit, dass du alle Strukturen erstellenden Queries aus dem Script rausnimmst, dir ne .sql File erstellst und sie da reinwirfst. Wenn Du den Server das erste mal erstellst connectest zuvor zum Mysql Server und führst die sql Datei dort aus.


    Den Fehler kannst wortwörtlich übersetzen - dein mysql query ist syntaktisch nicht korrekt.


    Warum du einen String formatierst anstelle das Query (was keine Formatierung benötigt) direkt auszuführen verstehe ich auch nicht.

    G-sTyLeZzZ' mysql plugin bietet doch fast perfekte Logs, die Dir über alles Auskunft geben können.


    Durch diese kannst du rausfinden wann und möglw. auch weswegen der mysql server crasht.

    Hab mir GF nie angesehen aber rein von der Logik her müsste es doch sowas wie folgendes sein:


    if (PlayerInfo[playerid][pRoadblock] > 3) // Z.B wenn man 4 Roadblocks erlauben möchte


    und wo auch immer roadblocks erstellt werden:


    PlayerInfo[playerid][pRoadblock]++;

    Welches Plugin verwendest Du? Anhand der Log File müsste man doch erkennen ab wann der mysql server gecrasht ist.


    Ansonsten stell mal einen Vgl zw. store und free_result anhand der Log File an.

    Ich werde nie verstehen warum es Leute gibt, die die mySQL Struktur nicht sauber vom Script trennen. Wo ist der Sinn *jedes* Mal wenn der Server gestartet wird eine Abfrage zu starten ob die fürs Script notwendigen Tabellen existieren. Trennt doch eure Tabellenerstellung sauber vom Script und schmeisst alles in ne .sql File rein.

    http://wiki.sa-mp.com/wiki/IsPlayerInRangeOfPoint


    (playerid, Float:range, Float:x, Float:y, Float:z)


    Du hast range hinten ran gesetzt anstelle nach playerid.


    Dennoch zu deinem Code zwei Tipps/Verbesserungen:


    Keine Indendation (macht z.B. mir Probleme auf einen Blick zu erkennen welche Klammer zu was gehören).


    Schlechter Stil:


    SendClientMessage(playerid,COLOR_BLUE,"Du hast dir eine Packung Zigaretten gekauft.");
    Spieler[playerid][schachteln] +=1;
    dini_IntSet(accFormat,"schachteln",Spieler[playerid][schachteln]);


    ... benötigst du prinzipiell nur einmal im Skrip wenn du es etwas sinnvoller Codest.

    Wie wärs wenn du mal die gesamte Funktion gibst und nicht nur die eine Zeile mit der nix anzufangen ist. Irgendwo wirst dich mit den Klammern verhauen haben, sodass der Compiler abstürzt.

    So wie du jede Rechnung anwendest.


    Ich würde mir jetzt nicht die Mühe machen alles in float zu konvertieren.


    Wie gesagt einfach:


    new dollars = GetPlayerMoney(playerid)/100;
    new cents = GetPlayerMoney(playerid)%100;

    Oder Modulo verwenden und sich das ganze sparen :-$



    Modulo gibt den Restbetrag der durch Teilung ensteht aus.


    Beispiel:


    555 % 100 = 55. 500 kann durch 100 ohne Rest geteilt werden, die 55 bleiben als Restbetrag übrig. Google mal den Begriff "modulo" falls du es nicht verstehen solltest.