Beiträge von Kaliber

    So söllte eigendlich alles sien was du brauchst, jenachdem was du noch brauchst sag bescheid


    So stimmt das aber nicht ganz ;)


    Der Code sollte so aussehen:


    new ipstring[MAX_PLAYERS][16];//oben


    //Unter OnPlayerConnect
    GetPlayerIp(playerid, ipstring[playerid], 16);


    //Und jetzt kannst du überall im Script das hier nutzen:
    format(string,64,"Seine Ip ist: %s",ipstring[playerid]);


    mfg. :thumbup:

    Hab mir SpielerName(playerid) als makro gemacht.
    Und jetzt kommen ingame komische Wörter raus.


    GetPlayerName returnt ja auch nicht den Namen des Spielers, sondern die Länge von dem Namen ^^


    Als Makro kannst du das nicht machen, machs doch einfach so:


    new SpielerName[MAX_PLAYERS][MAX_PLAYER_NAME];


    //Unter OnPLayerConnect
    GetPlayerName(playerid,SpielerName[playerid],MAX_PLAYER_NAME);


    //Und nutzen dann einfach so
    format(string,128,"Der Name ist: %s",SpielerName[playerid]);


    mfg. :thumbup:

    Mal ne doofe Frage, was bringt das jetzt eig?


    Naja, so ist es z.B. einfacher und übersichtlicher ein Tutorial Mode zu erstellen oder bestimmte Nachrichten halt erst ab ner Bestimmten Zeit zu senden allgemein...
    Naja, macht halt das, was die sleep Funktion bewirken soll, den Code kurz pausieren und ab einer bestimmten Zeit weiterfortführen ;)


    mfg. :thumbup:

    Was dazu auch mal interessant wäre ist goto zu studieren und vllt ein opcode via emit zu generieren um zu dem pointer zu gelangen.


    Hatte auch an diese beiden Möglichkeiten gedacht ;)


    Jedoch, ist das mit goto nicht möglich, da es ja einfach an einen Punkt springt, sprich:


    stop:
    print("test");
    goto stop;


    //Was leider nicht geht ist folgendes:
    stop:
    print("test");
    SetTimer("test",1000,0);


    public test() {
    goto stop;
    }


    Da kann man keinen Sleep machen, außer man lässt das so lange irgendwie springen bis eine bestimmte anzahl von ms vorbei ist, aber dann hängt der Server weil die CPU Auslastung bei 100% liegt :D


    Mit emit, ist das leider nicht möglich direkt wieder an einen bestimmten Punkt im Code zu springen...Das funktioniert nur in strings ^^


    mfg. :thumbup:

    Einmal nur kurz am Rande, wie kann ich denn ein Wort vom Textdraw farbig machen?
    Habe es schon mit einem HTML Code versucht, so wie es auch bei Messages klappt, geht aber nicht.


    Ne nicht mit HTML sondern einfach so:


    Code
    ~r~    rot
    ~g~    grün
    ~b~    blau
    ~w~    weiß
    ~y~    gelb
    ~p~    pink
    ~l~     schwarz
    ~h~    hellere Farbe
    ~n~    Absatz


    mfg. :thumbup:

    Wie sieht es denn aus, wenn ich das ganze in einer Schleife mache? Dann wird der Timer ja auch immer wieder gesetzt...


    Das ist nicht für Schleifen ausgelegt...nur für Localen Code der 1. Ebene :D


    Genauso if-Bedingungen oder ähnliches ist hier nicht möglich...man muss dafür dann halt eine neue Instanz aufrufen.


    mfg. :thumbup:

    Guten Mittag euch allen,


    ich habe mich mal ein bisschen umgeschaut und gesehen, dass einige Personen nach einer sleep Funktion in Pawn suchen.
    Doch wie sie festgestellt haben gibt es sowas wie in Java (Thread.sleep(1000);) nicht...


    Also habe ich mal so eine Funktion geschrieben:


    1. Beispiele:


    Also, so funktioniert die Funktion:


    public OnGameModeInit() //Mal als Beispiel genommen
    {
    print("test"); //Wird normal ohne Verzögerung aufgerufen
    sleep(1000)<a>; //Hier findet ein Timeout von 1000ms statt
    print("test2"); //Dann wird das geprintet
    sleep(1000)<b>; //Wieder Timeout von 1000ms
    print("test3"); //und dann wird geprintet
    return 1;
    }


    //Oder wenn man Parameter noch übergeben will
    public OnPlayerConnect(playerid) //Mal als Beispiel
    {
    SendClientMessage(playerid,-1,"hi");
    pSleep(1000)<a,"i",playerid>; //Unten ist eine nähere Erklärung
    SendClientMessage(playerid,-1,"hallo nach 1000ms!");
    }


    2. Nähere Funktions Erklärung


    Also, das sleep(1000)...sollte jedem klar sein ^^ sleep so heißt halt die Funktion und 1000 ist das Attribut für die Millisekunden von dem Timeout :)
    Was ich dann noch gemacht habe, z.B. dieses <a> steht für den Namen des Callbacks der Aufgerufen wird, sobald der Timeout zuende ist!


    Wichtig: Das darf nicht doppelt vorkommen, man kann in einem Script nicht 2x <a> machen oder 2x <b>, diese Reihe weiter fortführen!! Egal wie! Nichts doppelt machen!
    Einfach so: <a>, dann <b>, dann <c>,...usw und wenn man dann 26 Buchstaben durch hat, dann <aa>, <bb> usw :)


    Zu pSleep, ist zu sagen, dass mit dem "i" ist halt wie bei SetTimerEx und steht für den Typ der Variable (i = Integer) und danach kommen halt die ganzen Variablen.
    //Wenn man mehr Variablen übergeben will, macht man einfach:
    pSleep(1000)<a,"ii",playerid,x);


    3. Source Code:


    Der Source Code beschränkt sich nur auf ein kleines Makro, was ihr oben im Script einfügen könnt und sieht folgender maßen aus:


    //(c) by Kaliber
    #define sleep(%0)<%1>; SetTimer("@sleep_"#%1#,%0,0); return 1;}\
    @sleep_%1();@sleep_%1() {


    #define pSleep(%0)<%1,%2,%3>; SetTimerEx("@sleep_"#%1#,%0,0,%2,%3); return 1;}\
    @sleep_%1(%3);@sleep_%1(%3) {


    4. Schlusswort
    Ich würde mich über ein kleines Feedback freuen :)


    mfg. :thumbup:


    //Edited: pSleep

    Es ist vil nicht platz sparend aber wenn ich eine schleife mit vielen objecten habe wird das nicht viel resosen verbauchen oder wie das heißt ?
    oder wird beides gleich viel verbrauchen ?
    was währe am besten ?


    Es heißt Ressourcen :)


    und es ist sparender wenn du nur 1ne Variable machst, anstatt 5 oder so ^^
    Was irgendwie ja auch logisch ist...dann wird nämlich nur 1ne Variable im Speicher angelegt und nicht 5...


    Wieso ist eine Schleife nicht passend?


    Ist sie :)


    Wieso wird dafür mehr Zeit verbraucht?


    Nun, es wird mehr Zeit verbrauchst...aber wir reden hier von 0.01ms oder so ^^ Und das nur 1x nämlich wenn der Callback OnGameModeInit aufgerufen wird...
    Abgesehen davon, dass es 0.001ms länger dauert, hat man Zeilen gespart, es ist eine schönere Übersicht und man kann Problemlos auch noch 99 weitere Texturen dran hängen ;)


    //Edit:
    Was H4rd_B4se am Ende seines Beitrags geschrieben hat, ist auch eine sehr elegante Lösung! :)


    mfg. :thumbup:

    Tut mir leid, bin noch zu sehr an Java gewöhnt, aber im Prinzip gibt beides das selbe aus.


    Nein nicht direkt ^^


    double gibt z.B. in Java auch Kommazahlen aus, sprich 1.23 ;)


    Aber %d gibt eben nur ganze Integer aus ... und mit %f muss man Floats ausgeben ;)


    mfg. :thumbup:

    Erstmal ist der Name nicht vom Datentyp double, sondern String, weshalb du auch mit diesem arbeiten musst.


    %d steht nicht für double sondern für dezimal.


    und bei deinem Beispiel ist die Variable string überflüssig...da kann man direkt name verwenden ;)


    mfg. :thumbup: