Beiträge von BlackFoX

    new linez[500][255];


    stock setline(ln,text[],const file[])
    {
    new lines;
    new line[255],File:fx = fopen(file,io_read);
    while(fread(fx,linez[lines]))lines++;
    fclose(fx);
    linez[ln][0] = '\0';
    if(text[0])format(linez[line],255,"%s\r\n",text);
    fx = fopen(file,io_write);
    for(new i = 0;i<lines;i++)
    {
    if(!linez[i][0])continue;
    fwrite(fx,linez[i]);
    linez[i][0] = '\0';
    }
    fclose(fx);
    }


    Setzt die Linie einer Datei, wenn der Text leer ist wird die Linie einfach nicht mit rein geschrieben

    - Kurze Abfragen -



    Hallo Liebe Community,


    Ich möchte euch mal die Sache mit verkürzten Abfragen vorstellen,
    viele kennen diese Abfragen noch nicht daher möchte euch kurz erklären
    wie komplex sie sind zudem auch sehr nützlich & lassen sich schnell von der Hand schreiben.



    Beispiel Funktionen


    test(param0,param1)return (param0 == 2) ? (5) : (7);



    Eine Simple Abfrage gleich im Code eingebunden um extra Zeile zu vergäuden,
    das ganze ist eigentlich ganz Simple da


    (param0 == 2)


    sowieso Wahr/Falsch zurückgibt ergibt dies schon das Direkte Ergebnis jedoch möchten wir in
    diesem Fall darüber entscheiden daher stellen wir eine eigen Anweisung bereit


    ?


    Dieses Zeichen eröffnet unsere eigene Rückgabe, danach geben wir den Rückgabewert an der
    an den Code übergeben werden in dem Falle das es stimmt.


    :


    Dieses Zeichen stellt eine andere Möglichkeit da, sprich wenn die Anweisung nicht stimmen sollte
    so wird der Standardwert wiedergegeben den wir angeben, der Standardwert ist ein muss bei dem ganzen denn
    sollte alles nicht stimmen so muss ein Standardwert enthalten sein damit wir kein Nullverweis erhalten bzw. einen
    Speicherfehler, Pawn wird euch so oder so darauf hinweisen.


    Wenn ihr mehrere Abfragen erstellen möchtet bzw. mehrere Möglichkeiten...


    return (param0 == 2) ? (5) : (param1 == 7) ? (8) : (9);


    zerlegen wir das ganze mal...


    (param0 == 2) ? (5) : // IF
    (param1 == 7) ? (8) : // ELSE IF
    (9); // ELSE



    Wie ihr seht habt ihr alle Möglichkeiten die eine normale Abfrage auch bietet, da man aber leicht die Übersicht
    verlieren kann sollte man sich das ganze immer zerlegen um sich das ganze immer genau anzuschauen & eventuell zu
    gucken ob auch alles stimmt danach kann man es wieder in den Normal Zustand versetzen & weiterarbeiten, nur ein Tipp ^^


    Das besondere bei diesem Abfragen ist das man sie Direkt in Parameter verpflanzen kann so das die Rückgabe & Entscheidung sofort
    zum Ergebnis führen kann, jedoch muss die Rückgabe immer den Typ wiedergeben der erfordert wird.


    Beispiel :


    print((param0 == 2) ? ("Hallo Welt") : ("Hallo Woot"));


    Gibt je nach dem den gewünschten text wieder , je nach dem wie die Entscheidung ausfällt.



    So, ich hoffe ich konnte euch hiermit ein Stück weiterhelfen


    mfg. BlackFoX_UD_


    // Nochmal editiert & etwas besser erklärt.

    substr_count(substring[],string[],bool:ignorecase = false,startpos = 0)
    {
    new start = strfind(string,substring,ignorecase,startpos);
    new ncount;
    while(start>-1)
    {
    start = strfind(string,substring,ignorecase,start+strlen(substring));
    ncount++;
    }
    return ncount;
    }


    zählt die Texte die übereinstimmen mit dem gesuchten , diese Funktion habe ich geschrieben da jemand im Englisch es nicht hingekriegt hat, diese Funktion sollte aber
    nun ihren zweckt erfüllen, die gibt die Anzahl der gefundenen Teile an.


    printf("%d Count",substr_count("tst","tst tst tst"));


    Viel Spaß wiedermal :D



    // Edit : Noch ne neue Funktion, hatte da php im Hintergedanken


    stock checkstr(const string[],const otherstring[])
    {
    new bcount,check;
    while(string[bcount] && otherstring[bcount])
    {
    if(string[bcount] == otherstring[bcount])check++;
    bcount++;
    }
    return ((check*100)/max(strlen(string),strlen(otherstring)));
    }


    Prüft in wie Fern sich der Text schneidet sprich in wie Fern er übereinstimmt & gibt dann den Prozentwert wieder



    Und ein Update meiner GetStr Funktion


    stock GetStr(const string[],const count,delim = ' ')
    {
    new jpos,atmCount,lastct,incut[128],cpos;
    while(string[jpos] && atmCount <=count)
    {
    if(string[jpos] == delim)
    {
    if(!lastct)atmCount++;
    lastct = 1;
    }
    else
    {
    lastct = 0;
    if(atmCount == count)
    {
    incut[cpos] = string[jpos];
    cpos++;
    }
    }
    jpos++;
    }
    return incut;
    }


    printf("%s",GetStr("Hallo Welt",0)); // Gibt Hallo wieder da Parameter 0 , 1 wäre Welt usw.


    Kann für Kommandos mit Parameter verwendet werden oder andere Direkte Split Angelegenheiten.

    Ich empfehle dir dich mit Linux zu beschäftigen, hatte bis vor ein paar Tagen auch nicht viel mit Linux zu tun,
    hab mit unendlich Seiten durchgelesen, kannst du mal einen Screen vom Problem machen oder so,
    denn normal sollte der Server ja starten , danach nimmst du deine IP+PORT auf dem der Server läuft


    Nicht den ganzen Bildschirm nur die Fehler Nachricht

    if(!strcmp(cmdtext,"/rlogin",true))return ShowPlayerDialog(/*Bitte selber ergänzen */);



    Unter OnDialogResponse



    if(response)
    {
    if(dialogid == /*Bitte ergänzen*/)
    {
    if(!inputtext[0])return SendClientMessage(playerid,0xFF0000FF,"Keine Eingabe erfolgt!");
    new svpass[64],fm[70];
    GetServerVarAsString("rcon_password",svpass,sizeof svpass);
    if(strcmp(inputtext,svpass))return SendClientMessage(playerid,0xFF0000FF,"Passwort stimmt nicht!");
    format(fm,sizeof fm,"login %s",inputtext);
    SendRconCommand(fm);
    SendClientMessage(playerid,0x00FF00FF,"Du wurdest erfolgreich eingeloggt!");
    }
    }


    So oder so ähnlich sollte es aussehen

    Der Sinn ,,fördert die Kreativität´´ sollte eigentlich aussagen das sich die Leute nicht schon vorgemacht Funktionen nehmen können
    sondern die Grauen Zellen Teils mehr anstrengen müssen sprich man muss sich einfach mehr einfallen lassen.

    Du musst auch bedenken das an MTA mehr Leute arbeiten als an Sa-mp was natürlich zum Teil an der leitenden Person liegt,
    wie gesagt hast du keine Lust mach erstmal was anderes, wir können für dich nicht entscheiden & die Fakten für MTA vs Sa-mp
    wurden schon mehrmals auf den Tisch gelegt jetzt musst du nur noch entscheiden.

    Entscheide dich, je nach dem MTA bietet Funktionen, Sa-mp fördert die Kreativität , Lua hat einen zu Abstrakten Syntax , Pawn hingegen einen geordneten, zudem ist Lua ein Interpreter sprich alles muss im Quellcode Format sein & das ist für manche eher ungünstig.
    zudem solltest du dir selber mal Fakten suchen denn das muss jeder selber wissen

    Nein du musst nichts zerstören zudem solltest du deinen Textdraw auf den Index mehrere Spieler definieren & dann in dem jeweiligen Index den Draw erstellen,
    nicht vergessen ihn wieder zu zerstören sobald der Spieler den Server verlässt & beim verbinden genau anders rum, einfach erstellen