DebugMSG Funktion | {Float, _}:...

  • Heyho Jungs,


    Ich verstehe einiges vom Scripten darunter aber überhaupt nicht's bei dem was ich hier gerade versuche.
    Gehofft habe ich auf Copy & Paste der klappt, leider nicht der Fall und warum das so ist will ich gerne wissen und möglichst eine Lösung.


    Also ich möchte gerne "printf" durch eine neue Funktion "debugmsg" (mehr oder weniger) ersetzen weil ich nur eine Nachricht ausgeben möchte sofern #define DEBUG vorhanden ist.


    Da ich zu faul bin jede bereits vorhandene Debug Nachricht mit printf umzuschreiben von 1 Zeile auf 3 Zeilen, wollte ich das per neuen Funktion klären
    die von den Argumenten genau wie printf ist.


    Die Funktion lautet:

    stock debugmsg(fstring[], {Float, _}:...)
    {
    #if !defined BYTES_PER_CELL
    const BYTES_PER_CELL = cellbits/charbits;
    #endif
    static const STATIC_ARGS = 3;
    new n = (numargs() - STATIC_ARGS) * BYTES_PER_CELL;
    if(n == 0)
    {
    #if defined DEBUG
    return print(fstring);
    #else
    return 0;
    #endif
    }
    new message[128], arg_start, arg_end;
    #emit CONST.alt fstring
    #emit LCTRL 5
    #emit ADD
    #emit STOR.S.pri arg_start


    #emit LOAD.S.alt n
    #emit ADD
    #emit STOR.S.pri arg_end
    do{
    #emit LOAD.I
    #emit PUSH.pri
    arg_end -= BYTES_PER_CELL;
    #emit LOAD.S.pri arg_end
    }while(arg_end > arg_start);


    #emit PUSH.S fstring
    #emit PUSH.C 128
    #emit PUSH.ADR message


    n += BYTES_PER_CELL * 3;
    #emit PUSH.S n
    #emit SYSREQ.C format


    n += BYTES_PER_CELL;
    #emit LCTRL 4
    #emit LOAD.S.alt n
    #emit ADD
    #emit SCTRL 4


    #if defined DEBUG
    return print(message);
    #else
    return 0;
    #endif
    }



    Leider gibt sie nicht das richtige aus sondern gibt %s, %d, %i... nur als Plaintext aus sprich eine Nachricht sieht dann so aus:
    [20:21:43] MP5 %i: %i


    anstatt:
    [19:56:34] Messer 21: 0


    Kann mir jemand dabei helfen das zu reparieren? :)


    Lg

  • Kann mir jemand dabei helfen das zu reparieren?

    Also..ich würde das so nicht machen...


    Da der Code...wenn du keinen DEBUG an hast...trotzdem ausgeführt wird..während er Laufzeit..und dann eben anstatt dem print einfach nur eine 0 wiedergibt.


    Besser wäre, folgendes:


    C
    #if defined DEBUG
        printf("Hier dein DEBUG Code",x,y,z);
    #endif


    Immer direkt da zu machen wo du den Code brauchst.
    Da wenn du das #define DEBUG rausnimmst, auch der Code nicht mehr in die .amx kommt.


    Allerdings ist das dann immer n bissl doof zu schreiben..das seh ich ein ^^


    Allerdings wäre nur eine alternative...dass du eine globale Variable nutzt..und das über if-Abfragen machst...
    Allerdings hättest du dann immer noch die if-Abfragen...allerdings sind if-Abfragen effizienter als permanent so große Funktionen wie du sie da hast aufzurufen & nur 0 auszugeben ^^


    //Edit: Ah ich sollte mal den ganzen Text lesen xD


    Also das mit der Globalen Variable sähe z.B. so aus:



    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

    Einmal editiert, zuletzt von Kaliber ()