Beiträge von Mostey


    Optionale Parameter haben mit Funktionsüberladung nichts zutun. Das sind Funktionen die Argumente von verschiedenen Datentypen einfordern:


    public Func (const str[])
    public Func (Float:f)
    public Func (someshit)



    Die Frage war ja auch nicht ob das mit einer (nicht existierenden) Library für PAWN möglich ist.

    Funktionen musst du in der Regel oben deklarieren da der Compiler Speicher für die Funktion reservieren muss und über die Existenz der Funktion Bescheid wissen muss. Dazu einfach das Keyword forward nutzen und danach die Funktionsdefinition dahinter schreiben.


    forward IsVehicleOccupied(vehicleid)


    PlayerInfo gibt es in deinem Script nicht, deshalb kommt es zu Fehlern in folgender Zeile:


    if (PlayerInfo[playerid][pAdmin] >= 2)

    How to Create a Dialog


    Zitat

    info[] The text to display in the dialog. Use \n to start a new line and \t to tabulate.


    Übrigens musst du doch keine neuen Variablen deklarieren und mit dem selben Inhalt initialisieren wenn du diese anzeigen lassen möchtest. Das ist pure Speicherverschwendung.


    new arrests = PlayerInfo[targetid][pArrested];
    format(string6, sizeof string6, "Gefängniszeiten: {FF0000}%d",arrests);


    wird zu


    format(string6, sizeof string6, "Gefängniszeiten: {FF0000}%d", PlayerInfo[targetid][pArrested]);

    @TheBlueFireKing:



    // Input
    new string[6] = "2|1|3";
    new res[3][2];

    split(string, res, '|');


    for(new i; i < sizeof(res); i++)
    printf("Split: %s", res[i]);


    stock split(const strsrc[], strdest[][], delimiter)
    {
    new i, li;
    new aNum;
    new len;
    while(i <= strlen(strsrc))
    {
    if(strsrc[i] == delimiter || i == strlen(strsrc))
    {
    len = strmid(strdest[aNum], strsrc, li, i, 128);
    strdest[aNum][len] = 0;
    li = i+1;
    aNum++;
    }
    i++;
    }
    return 1;
    }

    Du hättest mal wegen den ganzen Warnungen Bescheid geben können. Das ist ein Float Array, also darf die Objekt ID natürlich auch kein Integer sein.


    { 19357.0,-1458.5000000,2666.4001465,824.0999756,0.0000000,0.0000000,0.0000000 },


    Deshalb auch die Rundungsfunktion unten.


    Übrigens ist folgendes:
    new SomeObjectArray[70];
    unwartbarer Code, es hat einen Grund warum ich das so konzipiert habe, dass man nur die neuen Objekte im Array einfügt und sonst nichts ändern muss.


    new SomeObjectArray[sizeof(SomeObjectArguments)];
    nach dem Array einfügen, sizeof() gibt in diesem Fall die Speichergröße des Arrays zurück was der Zahl der Einträge in diesem Array entspricht.

    Du setzt AdminImSpec[playerid] auf 1 und fragst direkt danach ab ob die Variable auf 1 gesetzt wurde. Fällt dir da nichts auf? Die zweite if-Abfrage wird in deinem Code immer direkt nach der ersten aufgerufen. Um das zu verhindern könntest du beispielsweise ein einfaches else bei der zweiten Abfrage nutzen.

    Wenn ich mich recht erinnere repräsentiert cmdtext nur den Buffer und dieser wird an den Callback übergeben sobald ein Whitespace Zeichen auftaucht und anschließend gelehrt. Somit würdest du "/accept" mit "/accept stats" vergleichen was natürlich nicht identisch ist.

    Du musst auch das letzte Komma im Array entfernen, danach kommt ja nichts mehr. ;)


    { 19357,-1468.0000000,2682.5000000,824.0999756,0.0000000,0.0000000,0.0000000}, //amt 9570(28)
    // Für jedes weitere Objekt fügst du hier die Koordinaten und den ganzen Shit ein, den die Funktion CreateObject erfordert
    };


    zu


    { 19357,-1468.0000000,2682.5000000,824.0999756,0.0000000,0.0000000,0.0000000} //amt 9570(28)
    // Für jedes weitere Objekt fügst du hier die Koordinaten und den ganzen Shit ein, den die Funktion CreateObject erfordert
    };

    kleinkiko:


    new Float:SomeObjectArguments[][7] = // Bin mir hier nicht ganz sicher ob das in PAWN möglich ist, also ob man die zweite Dimension eines Arrays explizit festlegen kann, ohne die erste zu bestimmen
    {
    { 19357.0,-1458.5000000,2666.4001465,824.0999756,0.0000000,0.0000000,0.0000000 },
    { 19358.0,-1452.5000000,2666.4001465,824.0999756,0.0000000,0.0000000,0.0000000 },
    { 19359.0,-1451.5000000,2666.4001465,824.0999756,0.0000000,0.0000000,0.0000000 }
    // Für jedes weitere Objekt fügst du hier die Koordinaten und den ganzen Shit ein, den die Funktion CreateObject erfordert
    };


    for(new i; i < sizeof(SomeObjectArray); i++) // Loop durch jedes Objekt für das du die Argumente oben eingegeben hast
    SomeObjectArray[i] = CreateObject(floatround(SomeObjectArguments[i][0], floatround_ceil), SomeObjectArguments[i][1], SomeObjectArguments[i][2], SomeObjectArguments[i][3], SomeObjectArguments[i][4], SomeObjectArguments[i][5], SomeObjectArguments[i][6]);





    Sollte so klappen, hab das eben gecheckt.

    Die frage ist auch, da du ja die daten im script selber compilest ob die Geschwindigkeit gut sein wird, ich habe mich aus dem Grund nie lange mit diesem System beschäftigt.


    Performancemäßig fährt man da sehr schlecht, da du den eingelesen Text erstmal auf bekannte Funktionen prüfen musst und dann dementsprechend in der Library zurecht parsen musst. Nicht zu vergleichen mit dem direkten einsetzen von Code.


    Allerdings wäre hier das fette Plus einfach auch die einfache Bedienbarkeit von Leuten die nicht programmieren können.


    if(sscanf(params,"iu",PID,TEXT))return SendClientMessage(playerid,GELB,"INFO : /pn [NAME/ID] [TEXT]");


    Argument "u" steht für "user", dementsprechend kann das vermutlich nur einen int (also 4 Bytes) speichern und du könntest nur einen Text von maximal 4 Zeichen übertragen. Das war schon richtig was er gemacht hat.

    Übersetzt werden muss es aber weiterhin, egal wie dynamisch es gemacht wird.


    Interessant wäre zum Beispiel sowas, was Music4You vorgeschlagen hat und im Script fügt man einfach nur ne Passage hinzu, dass der Code aus der Textdatei eingelesen und anschließend zur Laufzeit übersetzt wird.
    Wäre mit einer Library möglich, ist allerdings mit sehr viel Arbeit verbunden. 8o

    Und wie kann ich das dann richtig machen? Weil ich habe keine lust bei ca 40 Objekten immer oben ein new zu erstellen und dann


    awand1 = CreateObject(19398,-1452.0000000,2682.5000000,824.0999756,0.0000000,0.0000000,0.0000000);
    SetObjectMaterial(awand1,1, 5168, "lashops6_las2", "yellow2_128", 0);


    Kann man das irgendwie anderes machen?


    Hattest du mit der for-Schleife doch schon richtig gemacht, muss halt nur noch an meinen Code angepasst werden:


    for(new i; i<sizeof(SomeObjectArray); i++)
    SetObjectMaterial(SomeObjectArray[i],1, 5168, "lashops6_las2", "yellow2_128", 0);


    Mir geht es um den Teil:


    new Seconds = gettime();
    printf("Seconds since midnight 1st January 1970: %d", Seconds);


    Und was ist jetzt das Problem? Natürlich kann man aus dem Unix Timestamp die derzeitige Zeit ausrechnen, den Wochentag und vieles mehr.