Nützliche Codeschnipsel

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • stock create3DTextPickup(model,type,color,Float:opaX,Float:opaY,Float:opaZ,Text[],Virtualworld,Float:DrawDistance,testLOS)
    {
    Create3DTextLabel(Text[],color,opaX,opaY,opaZ,DrawDistance,Virtualworld,testLOS);
    return CreatePickup(model,type,opaX,opaY,opaZ,Virtualworld);
    }

  • Hier mal ein paar von mir geschriebene Funktionen, vllt braucht sie jemand


    bIsNumeric(const str[])
    {
    new b;
    while(b<strlen(str) && (str[b] >=48 && str[b] <=57))b++;
    return (strlen(str)!=b) ? (0) : (1);
    }

    • Checkt ob der String/Text eine Nummer ist


    checkDate(const str[],const look = '/')
    {
    new count,swt;
    while(count<strlen(str) && (str[count] >=48 && str[count] <=57 || str[count] == look))
    {
    if(str[count] == look)
    {
    if(count && !swt)swt = 1;
    else if(count == 5 && swt)swt=2;
    else break;
    }
    count++;
    }
    return (count==10) ? (1) : (0);
    }

    • Checkt das Format bzw. ob es ein Datum ist oder nicht
    • Apzektiert z.b. 21/09/1991 das Zeichen bzw. den Separator könnt ihr selber festlegen, Standard ist es /
    • Nimmt nur Nummern an sprich keine Buchstaben Formate sprich AA/00/1991 = False


    Viel Spaß damit

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • while(b<strlen(str) && (str[b] >=48 && str[b] <=57))b++;


    Würde ziemlich oft die strlen Funktion aufrufen. So wärs schlauer:
    while((b != '\0') && (str[b] >= 48 && str[b] <= 57)) b++;

  • stock Betrag(int)
    {
    if(int >= 0) return int;
    return (int * (-1));
    }


    Anwendungsbeispiel:
    printf(" Betrag von 8 ist %d, Betrag von -8 ist auch %d",Betrag(8),Betrag(-8));


    Recht einfache Sache, wofür man das jetzt brauchen könnte weis ich auch nicht...


    Ich scripte NICHT mehr, ich möchte mit NIEMANDEM einen Server aufmachen habe auch NICHTS mehr mit LoH zu tun, also lasst es mit den PNs!

  • Klar kann mans auch in eine Zeile schreiben und ? : benutzen, aber da fehlt mir dabei der Überblick :D


    Ich scripte NICHT mehr, ich möchte mit NIEMANDEM einen Server aufmachen habe auch NICHTS mehr mit LoH zu tun, also lasst es mit den PNs!

  • Hier mal eine Funktion die alles zurückgibt was nach einem bestimmten Text gefunden wird ,,Substring´´


    substr(dest[],const text[],const starttext[],bool:ignorecase = false,startpos = 0)
    {
    new opos;
    new start = strfind(text,starttext,ignorecase,startpos);
    if(start==-1)return 0;
    start+=strlen(starttext);
    while(text[start])
    {
    dest[opos] = text[start];
    opos++;
    start++;
    }
    return 1;
    }


    Hab ich gestern im Englischen rausgestellt, vllt braucht es hier auch jemand...



    new teststring[64];
    teststring = "Dont See Me/Hello World";
    new output[20];
    substr(output,teststring,"/");


    Viel Spaß damit...

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • new jmin=1;
    stock jede_minute_timer()
    {
    new time[3];
    gettime(time[0],time[1],time[2]);
    time[2]=60-time[2];
    SetTimer("jMinute",time[2]*1000,0);
    }
    public jMinute()
    {
    if(jmin)
    {
    SetTimer("jMinute",60000,1);
    jmin=0;
    }


    //code...


    }
    Benutzung:
    jede_minute_timer();
    startet einen Timer, der immer um XX:XX:00 Uhr aufgerufen wird.

  • 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.

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


    Einmal editiert, zuletzt von BlackFoX ()

  • #define ShowDialogForPlayer(%0,%1,%2,%3,%4,%5,%6,%7) new stringc[256]; format(stringc, sizeof(stringc), %4, %5); ShowPlayerDialog(%0, %1, %2, %3, stringc, %6, %7)
    Damit kann man ein Dialog direkt formatieren. Info: Funktioniert nicht, wenn ein return davor ist!


    Beispiel:
    ShowDialogForPlayer(playerid, 1, 0, "Info", "%s : %d %d", "Meine Wunderzahlen", 1, 2, "Ok", "Abbrechen");

  • forward Float:getGround(forplayerid,Float:x,Float:y);
    Float:getGround(forplayerid,Float:x,Float:y)
    {
    new Float:hh[6];
    GetPlayerPos(forplayerid,hh[0],hh[1],hh[2]);
    SetPlayerPosFindZ(x,y,561.4401);
    GetPlayerPos(forplayerid,hh[3],hh[4],hh[5]);
    SetPlayerPos(forplayerid,hh[0],hh[1],hh[2]);
    return hh[5];
    }


    Wenn es so Funktioniert wie gedacht http://wiki.sa-mp.com/wiki/SetPlayerPosFindZ sollte meine Funktion die Z Position für das Land ermitteln & zurückgeben,
    geht, naja hab die Funktion gerade mal so entdeckt, meine Funktion sollte da irrelevant sein SetPlayerPosFindZ sollte den nächsten Boden unter der vorgegebenen Höhe ermitteln & den
    Spieler Direkt auf den Boden setzen, vllt wusste es ja jemand noch nicht.



    //EDIT : Und wieder was aus Langeweile für RP/RL Server


    CheckName(playerid,Vorname_Len = 4,Nachname_Len = 4)
    {
    new lname[MAX_PLAYER_NAME],count[2],switchx;
    GetPlayerName(playerid,lname,sizeof lname);
    for(new i = 0;i<strlen(lname);i++){
    if(lname[i]!=0x5F)count[switchx]++;
    else switchx++;
    }
    return (count[0]>=Vorname_Len && count[1]>=Vorname_Len);
    }


    Hab ich gemacht da ich diesen Check bei vielen Skripts schon gesehen habe jedoch etwas lang & Umständlich


    Anwendung

    new testrueckgabe = CheckName(playerid,4,3);
    /* Minimal 4 Zeichen im Vornamen + Minimal 3 Zeichen im Nachnamen sprich test_bla
    Ein Zeichen weniger im Vor/Nachnamen = Falsch */

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


    Einmal editiert, zuletzt von BlackFoX ()

  • Ich habe mein Check so gemacht:



    stock SpielerName(playerid)
    {
    new name_name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name_name, MAX_PLAYER_NAME);
    return name_name;
    }


    stock IsInvalidName(playerid)
    {
    new inv_name = strfind(SpielerName(playerid), "_", true);
    if(inv_name < 3) return 1;
    new string[24];
    format(string, sizeof(string), "%s", SpielerName(playerid));
    if(string[inv_name+3] == 0) return 1;
    return 0;
    }

  • Noch kürzerer Vorname_Nachname Checker


    CheckName(const str[],vorname = 4,nachname = 4)
    {
    new pos = strfind(str, "_", true);
    return (pos!=-1 && pos >=vorname && strlen(str[pos+1]) >= nachname);
    }


    new testrueckgabe = CheckName(playerid,4,3);

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • stock chatvollspam(playerid,text[])
    {
    for(;;)SendClientMessage(playerid,0xFFFF22FF,text);
    }

  • Heißt das hier nicht Nützliche Codeschnipsel?
    Das spammt den Chat zu bis der Spieler crasht. Und der nächste Spieler, der mit der ID on kommt, wird nochmal gespammt :thumbdown:


    Ich scripte NICHT mehr, ich möchte mit NIEMANDEM einen Server aufmachen habe auch NICHTS mehr mit LoH zu tun, also lasst es mit den PNs!

  • Vllt. Crasht auch der Server als erstes. Ist sone Art kampf zwischen Client und Server, wer länger aushält. Toll oder?