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
  • Und ich sage dir, dass KEIN loop benutzt werden muss, um den gesuchten text zurükzugeben oder zu finden.
    Wir haben beide verschiedene meinungen, und gut is.
    Gibts noch ein anderen grund um zu diskutieren?
    Ich denke nicht.
    Also hören wir lieber auf hier das Codeschnipsel-Thema vollzuspammen, bevor wir beide eine Verwarnung kassieren. ;)

  • Hier eine "fremoveline" Funktion.
    Ich weiß, soein riesen großen String mit 1024 Charactern ist nicht gerade so "gut", aber ein besseren fremoveline als das gibts noch nicht:
    http://pastebin.com/0eqXNxew
    stock fremoveline(filedir[],lindex[]) //bY FoxHound
    {
    if(!fexist(filedir)) { return 0; }
    new rdline[196],str[1024],File:tmpfile = fopen(filedir,io_read);
    while(fread(tmpfile,rdline)) {
    if(strfind(rdline,lindex)>-1) { continue; }
    strins(str,rdline,strlen(str)); }
    fclose(tmpfile),fremove(filedir);
    tmpfile=fopen(filedir,io_write);
    return fwrite(tmpfile,str),fclose(tmpfile),1;
    }
    Das andere "fdeleteline" braucht noch 2 funktionen dabei und funktioniert dazu nichtmal, mein "
    fremoveline" braucht nur "sich selbst" :D
    Naja, falls jemand was besseres hat, kann er's ja posten.
    Hab die Funktion getestet und es funktioniert wunderbar (nicht bei Files benutzen die INSGESAMT länger sind als 1024 zeichen [falls ihr das unbedingt benutzen musst, dann erhöht die größe von "string" auf 2048 oder so, auch wenn es gigantisch groß ist, man kann nichts dagegen machen...]).


    Viel Spaß damit...

  • keine ahnung obs schon gepostet wurde, aber habs gerade in nem alten skript von mir gefunden und dachte vllt braucht das jmd.
    stock randomEx(...)
    {
    return getarg( random( numargs( ) ) );
    }
    Gibt eine zufällige zahl von den angegebenen zahlen zurück. Beispiel:
    SetWeather(randomEx(1,2,3,4,5,6,7,8,9)); // Ändert das Wetter per zufall auf eine der angegebenen Zahlen

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • FoxHound


    Man kann doch theoretisch den String Global machen, sodas nicht immer bei einem neuen Aufruf der Funktion belegt wird.
    Bevor jemand jetzt kommt und meint die Variable könnte ja doppelt belegt sein, hier die Lösung :D
    Man gibt ihr einen so wirren Namen, so das die warschenlichkeit einer doppelbelegung gen 0 geht

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Ja, aber es sollte jetzt nicht so sein "Das hier da hin kopieren, das hier da und das hier da ganz unten ins script...", es sollte nur eine einzige Funktion sein ^^
    Wie gesagt, was besserees alleine geht nicht, daas andere fdeleteline vom Wiki was überall gepostet wird, funktioniert eh nicht.

  • Da ich sowas auch noch nicht gesehen habe, und Robdeflop es gebraucht hat, habe ich ein kleines vielleicht ganz nützliches Script geschrieben, dass die Differenz zwischen 2 Daten in Tagen angibt.
    stock CheckDateDifference(tag1, monat1, jahr1, tag2, monat2, jahr2);
    {
    new days;
    if(tag1 < tag2 && monat1 <= monat2 && jahr1 <= jahr2) return -1;
    while(tag1 != tag2 || monat1 != monat2 || jahr1 != jahr2)
    {
    days++;
    tag1++;
    if(tag1>28 && monat1 == 2)
    {
    tag1=1;
    monat1++;
    }
    if(tag1>30 && (monat1 == 4 || monat1 == 6 || monat1 == 9 || monat1 == 11))
    {
    tag1=1;
    monat1++;
    }
    if(tag1>31 && (monat1 == 1 || monat1 == 3 || monat1 == 5 || monat1 == 7 || monat1 == 8 || monat1 == 10 || monat1 == 12))
    {
    tag1=1;
    monat1++;
    }
    if(monat1>12)
    {
    tag1=1;
    monat1=1;
    jahr1++;
    }
    }
    return days;
    }
    Ich denke es ist eigentlich selbsterklärend. Einziger Manko aktuell: Schaltjahre werden nicht beachtet, das heißt, dass alle 4 Jahre 1 Tag zu wenig vom Script berechnet wird, was aber eigentlich nicht weiter tragisch sein sollte.
    Beachtet bitte für das Snippet auch, dass das 2. Datum größer dem 1. sein muss, ansonsten wird -1 zurückgegeben (kann dann natürlich auch abgefragt und mit Fehlermeldung zurückgegeben werden).


    Mit freundlichen Grüßen
    Padarom

    Ich bin
    .. seit etwa 2007 in der Webentwicklung tätig, seit 2013 professionell
    .. Erfahrener Entwickler in PHP, Swift, Javascript, Typescript und Ruby. Zusätzlich habe ich Erfahrung in Python, Java, C#, C++, Prolog und einigen esoterischen Programmiersprachen
    .. Luftfahrtenthusiast und Segelflieger


  • Beachtet bitte für das Snippet auch, dass das 2. Datum größer dem 1. sein muss, ansonsten wird -1 zurückgegeben (kann dann natürlich auch abgefragt und mit Fehlermeldung zurückgegeben werden).


    new days = CheckDateDifference(2, 2, 2011, 3, 1, 2011);
    Denk mal drüber nach, was hier in "days" gespeichert wird...
    ǝɟıǝlɥɔssolpuǝ <- sʇɥɔıu ɹɐƃ


  • Aber sagen wir mal es sind grade 50 User auf den server die Letzte id ist ID 50 dann nach 10 minuten habe ich nur noch 10 User drauf und die Letzte ID ist immer noch 50 dan ruft er ja nicht mehr die id 50 ab oder teuche ich mich da ?


  • Aber sagen wir mal es sind grade 50 User auf den server die Letzte id ist ID 50 dann nach 10 minuten habe ich nur noch 10 User drauf und die Letzte ID ist immer noch 50 dan ruft er ja nicht mehr die id 50 ab oder teuche ich mich da ?


    Das ist so wie ich das sehe korrekt. Des weiteren wird der Code 500 mal durchlaufen (MAX_PLAYERS mal), denn der einzige Teil des Codes, der mit PlayerCount ueberhaupt verglichen wird bleibt immer der gleiche. Damit ist der Code ziemlich unnuetz, denn das sollte ja eigentlich vermieden werden.


    Habe es mal etwas ueberarbeitet. Kann aber noch verbessert/optimiert werden. So waere '_ForAllCount_++;' eigentlich nicht noetig, aber eine Moeglichkeit, die ich vorher hatte haette die '{' nach dem else gehabt und damit den Code bei nutzung von ForAll() etwas unuebersichtlicher gemacht.
    // Parameter = Zaehler Variable, sollte = 0, oder playerId des spielers mit niderigster Id sein
    #define ForAll(%0) for(new _ForAllCount_ = PlayerCount; _ForAllCount_ > 0 && %0 < MAX_PLAYERS; %0++ , _ForAllCount_-- ) \
    if ( !IsPlayerConnected(%0) ){ _ForAllCount_++; continue; } \
    else


    Bsp.:
    new playerid = 0;
    ForAll(playerid)
    {
    playerid ist ein mit dem Server verbundener Spieler (valid)
    }

  • Nützlich zum erstellen von Logs :) :


    stock Log(logname[],input[])
    {
    new hour,minute,second;
    gettime(hour,minute,second);
    new File:Logfile,saveformat[64],dataformat[256];
    format(saveformat,64,"%s.txt",logname);
    if(!fexist(saveformat))
    {
    Logfile = fopen(saveformat,io_write);
    }
    Logfile = fopen(saveformat,io_append);
    format(dataformat,256,"[%i:%i:%i] %s\r\n",hour,minute,second,input);
    fwrite(Logfile,dataformat);
    fclose(Logfile);
    return 1;
    }



    Beispiel:


    public OnPlayerText(playerid, text[])
    {
    new string[128],name[20];
    GetPlayerName(playerid,name,20);
    format(string,128,"%s: %s",name,text);
    Log("Chatlog",string);
    return 1;
    }



    Maddin is my Lord and Master :D
    Musel my one and only b0wm
    Bisafloah is the pokemon that pwns a lot of goddamn ponys.

  • Wenn die Datei nicht exestiert öffnest du sie 2mal einmal zu schreiben und einmal zum adden.
    Und du schließt sie auch nur einmal.
    Sinn?
    entweder musst du es über else machen oder so
    stock Log(logname[],input[])
    {
    new hour,minute,second;
    gettime(hour,minute,second);
    new File:Logfile,saveformat[64],dataformat[256];
    format(saveformat,64,"%s.txt",logname);
    Logfile = fopen(saveformat, (!fexist(saveformat)) ? io_write : io_append);
    format(dataformat,256,"[%i:%i:%i] %s\r\n",hour,minute,second,input);
    fwrite(Logfile,dataformat);
    fclose(Logfile);
    return 1;
    }

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Kennt jemand nen Codeschnipsel, damit man \n auch in SendClientMessage nutzen kann? :D

    Unkompetent. Das neue dynamisch.



    ihr seit schon lustig postet erros aber nicht die zeilen wo sie sind dann können wir euch auch nicht helfen^^


    Lernt Scripten, Leute, und macht eure Augen auf!


    _______________________________________
    50 Beiträge: [x] 300 Beiträge: [x]
    100 Beiträge: [x] 500 Beiträge: [x]
    150 Beiträge: [x] 1000 Beiträge: [x]
    200 Beiträge: [x]
    2000 Beiträge: []
    250 Beiträge: [X] Boardaktivitäten: Profil


    [size=36]_______________________________________

    /Edit: Schmerzt es dir eigentlich nicht so ein Müll zu schreiben 8|

  • Meinst du das man \n im Chat InGame nutzten kann oder einfach wenn du Nachrichten mit
    SendClientmessage versendest.
    Falls du SendClientmessage meinst ja kénne ich.
    Du machst das so:
    SendClientMessage(playerid,COLOR,Test\n);
    SendClientMessage(playerid,COLOR,Test 2);
    Ich versteh nicht wofür du es brauchst jedoch könnte ich dir erklären wie du den SChnipsel bastelst.
    Frag ab ob \n in SendClientmessage vorkommt falls ja speichere das hinter \n und sende es dann als Nachricht und das Davor drüber.
    Mit freundlichen Grüßen
    Sven


    Bewerte mich und meine Transaktionen als Mittelsmann

  • Genau das mein ich ^^


    ich hab z.B. Meine stats per befehl (/stats).
    Den string möchte ich jedoch nur einmal formatieren...


    format(string,128,"Level: %d | Geld: %d\nAdmin: %d | Fraktion: %d",...);

    Unkompetent. Das neue dynamisch.



    ihr seit schon lustig postet erros aber nicht die zeilen wo sie sind dann können wir euch auch nicht helfen^^


    Lernt Scripten, Leute, und macht eure Augen auf!


    _______________________________________
    50 Beiträge: [x] 300 Beiträge: [x]
    100 Beiträge: [x] 500 Beiträge: [x]
    150 Beiträge: [x] 1000 Beiträge: [x]
    200 Beiträge: [x]
    2000 Beiträge: []
    250 Beiträge: [X] Boardaktivitäten: Profil


    [size=36]_______________________________________

    /Edit: Schmerzt es dir eigentlich nicht so ein Müll zu schreiben 8|

  • Ich hab ja nach nem Codeschnipsel gefragt :D

    Unkompetent. Das neue dynamisch.



    ihr seit schon lustig postet erros aber nicht die zeilen wo sie sind dann können wir euch auch nicht helfen^^


    Lernt Scripten, Leute, und macht eure Augen auf!


    _______________________________________
    50 Beiträge: [x] 300 Beiträge: [x]
    100 Beiträge: [x] 500 Beiträge: [x]
    150 Beiträge: [x] 1000 Beiträge: [x]
    200 Beiträge: [x]
    2000 Beiträge: []
    250 Beiträge: [X] Boardaktivitäten: Profil


    [size=36]_______________________________________

    /Edit: Schmerzt es dir eigentlich nicht so ein Müll zu schreiben 8|

  • Function CustomMessage(color,const string[],level)
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if (PlayerInfo[i][pAdmin] >= level)
    {
    SendClientMessage(i, color, string);
    printf("%s", string);
    }
    }
    return 1;
    }




    format(string, sizeof(string), %s, playername);
    CustomMessage(COLOR_YELLOW,string,Adminlevel);


    //edit


    Define fehlt.


    #define Function%0(%1) forward%0(%1); public%0(%1)

    Somit kann man ab einem bestimmten Level eine Nachricht bekommen, bzw. einen Text.


    Mittelsmänner hier: Klick

    Einmal editiert, zuletzt von Maikal ()

  • Schön und Gut,dass du eine Funktion postest die nützlich sein könnte,aber:


    • Function - Leute neigen dazu, copy & paste zu machen. Function gibt es standardmäßig nicht.
    • if (PlayerInfo[i][pAdmin] >= level) - Wird bestimmt so nicht jeder haben
    • printf("%s", string); -bringt was ? Vorallem in der Schleife :wacko:
  • do.de - Domain-Offensive - Domains für alle und zu super Preisen