Beiträge von Kaliber

    Hallo, viele von euch kennen das Problem mit den langen MySQL Querys und das es sehr unübersichtlich ist.


    Aus diesem Grund habe ich mal eine kleine Library geschrieben womit man einfach diese Querys erzeugen lassen kann.


    Funktionen:


    native MySQL_Insert(handle,const rows[][],const target_Table[],const form[],{Float, _}:...);
    native MySQL_Update(handle,const rows[][],const target_Table[],const where[], const form[],{Float, _}:...);


    Beispiel:


    //Unter OnGameModeInit
    handle = mysql_connect(...);



    //Oben ins Skript:
    stock const rows[][] = {
    "`Geld`","`Alter`","`X`","`Name`" //Hier sind die Spalten Namen, wichtig sind hier die `
    };
    //Dann da wo Ihr den User registriert (INSERT INTO) benötigt:
    new money = 5000,alter=16,Float:x=3.141,name[] = "Test123"; //Das sind Beispiel Daten zum speichern

    MySQL_Insert(handle,rows,"Test","ddfs",money,alter,x,name);
    /*
    "Test" = Der Tabellen-Name
    "ddfs" = Die Form (die Reihenfolge der Datentypen) d=Integer,f=Float,s=String
    */



    //Angenommen wir wollen jetzt den Spieler nur noch Updaten:
    new money = 9500,alter=16,Float:x=3.141,name[] = "Test123";


    MySQL_Update(handle,rows,"Test","Name","ddfws",money,alter,x,name);
    /*
    "Test" = Wieder der Tabellen Name
    "Name" = Das Where Statement.
    "w" = Das w in dem Format gibt an, dass das nachfolgende das WHERE Statement ist (und s dahinter der Typ halt von dem).
    */


    Mehrere Where Statements:


    new money = 9500,alter=16,Float:x=3.1412,name[] = "Test123";

    MySQL_Update(handle,table,"Test","Name|Alter","dfwswd",money,x,name,alter);


    Download:
    Source-Code: Pastebin
    Direkter-Download: MediaFire


    mfg. :thumbup:

    Hier eine nützliche Funktion:


    stock ReplaceString(const search[],const replace[], source[], size=sizeof source) //(c) by Kaliber
    {
    new i=strfind(source,search),tmp=strlen(search);
    if(i==-1) return 0;
    for( ; i!=-1; i=strfind(source,search,false,i+1))
    {
    strdel(source,i,i+tmp),strins(source,replace,i,size);
    }
    return 1;
    }


    //Beispiel:
    new string[64] = "Ich liebe Gemüse und Gemüse!";
    ReplaceString("Gemüse", "Schokolade", string);
    print(string); //-> "Ich liebe Schokolade und Schokolade!"


    Gibt es zwar schon, aber diese Funktion ist um einiges schneller, als das was ich sonst so gesehen habe ^^

    Es kommt auch auf das Betriebssystem an.


    Da hat Pawno irgendwie eine Macke, wenn du eine Version über Windows 7 hast...also (8/8.1/10) stell mal den Kompatibilitätsmodus auf Windows 7 :)


    mfg. :thumbup:

    Was hat dies zu bedeuten


    Nun, vielleicht das was der Error aussagt? :huh:


    Also zum einen hast du Fehler in der Syntax von dem Query und zum anderen:


    Table 'gamemode.gm_properties' doesn't exist


    Tabelle 'gamemode.gm_properties' existiert nicht.


    Also würde ich evtl so eine Tabelle mal erstellen... :rolleyes:

    TextDrawTextSize(BINCOdraw[2], 354.499389, 0.000000);


    Die TextSize ist bei dem anklicken das entscheidende :)


    und du hast hier als Y-Koordinate (Höhe) 0.0 angegeben...dein TextDraw hat aber nicht die Höhe von 0.0 ...sondern von mind ~7 schätz ich mal...


    Setz es aber vorsichtshalber überall 10.0 :)


    mfg. :thumbup:

    Hier kurz was kleines, um zu checken ob ein SA:MP Server online oder offline ist.


    Dieser Schnipsel wurde zwar mal (so ähnlich) gepostet, aber falsch, da keine UDP Verbindung geöffnet wurde und es deshalb nicht bei allen Server funktioniert ^^


    PHP
    function server($ip, $port) 
    {
        return (!@fsockopen("udp://".$ip, $port, $errno, $errstr)) ? "<font color='red'>offline</font>" : "<font color='green'>online</font>";
    }
    echo "Der Server ist: ".server("89.33.242.224", 7777);


    PS: Die Ip habe ich als zufällig gewählt...den Server kann man eh nicht betreten.


    mfg. :thumbup:

    Ich meine da ich ein wenig mehr Übersicht habe die ganzen Objekte in ein Filterscript packen und diese dann per Hauptscript abrufen lassen und dort auch benutzen lassen.


    ...dafür musst du das doch nicht extra in ein Filterscript packen, mach es doch einfach in eine Funktion und pack die Funktion (z.B. LoadObjects()) in ein Include...


    Wenn du es unbedingt mit einem Filterscript machen willst, kannst du die objektids aber auch an dein GameMode übergeben:


    //Im Filterscript:
    public OnFilterscriptInit()
    {
    new lspd = CreateObject(...);
    new tor = CreateObject(...);
    //Hier alle deine anderen Objekte
    //Und unten dann:
    CallRemoteFunction("Init_Objects","dd",lspd,tor);
    }


    //und dann im Gamemode:
    new lspd,tor; //Oben im Skript


    forward Init_Objects(a,b);
    public Init_Objects(a,b)
    {
    lspd = a;
    tor = b;
    return 1;
    }


    Aber davon rate ich dir ab!


    Erstelle einfach eine seperate Funktion und mach es als Include ;)

    Auserdem habe ich bis jetzt noch nicht mit der Funktion "Random" gearbeitet, also ich weiß auch nicht ganz wie ich das mit der Handynummer mache.


    Naja, wenn die Handynummer 4 stellig sein soll, dann machst du das so:


    new number = random(9000)+1000;


    Und dann überprüfst du halt noch ob die Nummer bereits existiert oder nicht in der Datenbank...einfach mit SELECT durch die Spieler Loopen :)