[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • Oh, ja schreibe es so:


    ocmd:admins(playerid,params[]) {
    #pragma unused params
    new buffer[32],i,name[25];
    for(; i<MAX_PLAYERS; i++) {
    if(!IsPlayerConnected(i) || !GetPVarInt(i,"Adminlevel")) continue;
    GetPlayerName(i,name,25);
    format(buffer,32,"%s Rang: %d\n",name,GetPVarInt(i,"Adminlevel"));
    SendClientMessage(playerid,0x2E9AFEFF,buffer);
    }
    return 1;
    }


    ocmd:leader(playerid,params[]) {
    #pragma unused params
    new buffer[32],i,name[25];
    for(; i<MAX_PLAYERS; i++) {
    if(!IsPlayerConnected(i) || !GetPVarInt(i,"Fraktion")) continue;
    GetPlayerName(i,name,25);
    format(buffer,32,"%s Frak: %d\n",name,GetPVarInt(i,"Fraktion"));
    SendClientMessage(playerid,0x2E9AFEFF,buffer);
    }
    return 1;
    }


    mfg. :rolleyes:

    ast2ufdyxkb1.png


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

  • Ich mag den Lokalen Chat nicht :(


    Also habe versucht den Lokalen Chat auszuschalten und anstelle davon einen sozusagen "Selfmade" lokalen chat zu machen.
    hat ja auch geklappt nur habe ich eine Zeile eingeügt, die bei einem "Mute" dem Spieler das schreiben verhindern soll.
    Das klappt auch, nur wird jetzt der standard lokale Chat wieder gesendet :(


    Hier mal mein Code:


    public OnPlayerText(playerid, text[])
    {
    if(Spieler[playerid][Mute] > 0) return SendClientMessage(playerid,COLOR_GREY,"Sie sind gemutet!"); //Die Zeile wurde eingefügt
    new Float:x, Float:y, Float:z, String[150];
    GetPlayerPos(playerid, x, y, z);
    format(String, sizeof String, "%s sagt: %s", pName[playerid], text);
    SetPlayerChatBubble(playerid, text, 0xFF0000FF, 31.0, 10000);
    SendClientMessage(playerid, COLOR_DISTANCE_1, String);
    for(new i = 0; i <= MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i) || !GetPVarBool(i,"LoggedIn") || IsPlayerNPC(i) || i == playerid) continue;
    if(GetPlayerInterior(i) != GetPlayerInterior(playerid) || GetPlayerVirtualWorld(i) != GetPlayerVirtualWorld(playerid)) continue;
    if(IsPlayerInRangeOfPoint(i, 5.0, x, y, z)) SendClientMessage(i, COLOR_DISTANCE_1, String);
    else if(IsPlayerInRangeOfPoint(i, 10.0, x, y, z)) SendClientMessage(i, COLOR_DISTANCE_2, String);
    else if(IsPlayerInRangeOfPoint(i, 16.0, x, y, z)) SendClientMessage(i, COLOR_DISTANCE_3, String);
    else if(IsPlayerInRangeOfPoint(i, 23.0, x, y, z)) SendClientMessage(i, COLOR_DISTANCE_4, String);
    else if(IsPlayerInRangeOfPoint(i, 31.0, x, y, z)) SendClientMessage(i, COLOR_DISTANCE_5, String);
    }
    return 0; //Damit er den Lokalen Chat nicht senden
    }

  • Hier, schreibe das alles mal so:


    if(Spieler[playerid][Mute] > 0) { SendClientMessage(playerid,COLOR_GREY,"Sie sind gemutet!"); return 0; }


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • #pragma unused params


    Um Gotteswillen.


    X(
    Wie kann man sowas nur machen?
    #pragma ist nicht dafür da unsinnige "Anfänger" Fehler zu korrigieren.


    Wenn man eine Variable/Funktion nicht braucht, dann erstellt man sie einfach nicht.
    PAWn interessiert es schließlich überhaupt nicht, ob die Funktion nun 2 Parameter hat oder 3,
    solange die definition erhalten bleibt.


    Da die "ocmd Funktion" via CallLocalFunction aufgerufen wird und diese mit großer warschenlichkeit wieder mal misshandelt erstellt wurde ist
    dieser Funktion egal wie viele parameter die aufgerufene Funktion hat,
    man kann auch falsche Parametertypen übergeben, stört überhaupt nicht.


    Wenn man params nicht benötigt in einem "Befehl"
    Einfach weglassen und KEIN #pragma nutzen


    -> ocmd:admins(playerid)
    {
    // code
    }

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

    Margarete Stokowski

  • Wenn man params nicht benötigt in einem "Befehl"
    Einfach weglassen und KEIN #pragma nutzen


    -> ocmd:admins(playerid)
    {
    // code
    }


    Wusste nicht, dass man die Parameter beliebig verändern kann, ohne das der Compiler rummotzt :pinch:


    Selbst sowas nimmt der an:


    ocmd:test(playerid,t,ts,gs,ttt,sss,tttgf,sfdsg) {
    return 1;
    }


    Naja :rolleyes:

    ast2ufdyxkb1.png


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

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • ocmd:test(playerid,t,ts,gs,ttt,sss,tttgf,sfdsg)


    Das liegt auch am Makro, welches ocmd benutzt.


    folglich sieht das dann "aufgeschlüsselt" so aus:
    forward ocmd_test(playerid,t,ts,gs,ttt,sss,tttgf,sfdsg);
    public ocmd_test(playerid,t,ts,gs,ttt,sss,tttgf,sfdsg)


    Du kannst auch den playerid Parameter MrSchwabbel nennen, wird auch angenommen :P
    Er ist schließlich nicht "fest" vorgegeben ;)

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

    Margarete Stokowski


  • Wenn man mehr als 2 Parameter angibt failt das ganze aber, da nur 2 übergeben werden :D


    Deshalb wundert mich das ja, folgendes:


    CallLocalFunction("ocmdOnPlayerCommandText","ds",playerid,cmdtext);


    Was passiert mit dem cmdtext, wenn man nur 1nen Parameter angegeben hat...verpufft der einfach :huh:

    ast2ufdyxkb1.png


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


  • Naja , dies geht daher das jeder command der per ocmd erstellt wird wie auch bei den anderen Commandprozessoren
    als public erstellt werden daher wird auch mit CallLocalFunction oder CallRemoteFunction gearbeitet


    sie Beispiel :D
    #define ocmd:%1(%2) forward ocmd_%1(%2);\
    public ocmd_%1(%2)

  • Naja , dies geht daher das jeder command der per ocmd erstellt wird wie auch bei den anderen Commandprozessoren
    als public erstellt werden daher wird auch mit CallLocalFunction oder CallRemoteFunction gearbeitet


    sie Beispiel


    Ja, das ist mir schon klar, mich wundert es nur, dass der Parameter wenn man ihn übergibt dann verschwindet, wenn er nicht oben angegeben wird, aber übergeben wird :|

    ast2ufdyxkb1.png


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

  • Naja , dies geht daher das jeder command der per ocmd erstellt wird wie auch bei den anderen Commandprozessoren
    als public erstellt werden daher wird auch mit CallLocalFunction oder CallRemoteFunction gearbeitet


    Wir sind doch schon viel weiter :rolleyes:


    @Schwabbel:
    Entweder wird es ein Memoryleak werden, wo von ich eher wenig ausgehe, da wenn ein string gepusht wird, auch wieder released wird
    oder er wird wohl einfach verpuffen.

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

    Margarete Stokowski

  • @Schwabbel:
    Entweder wird es ein Memoryleak werden, wo von ich eher wenig ausgehe, da wenn ein string gepusht wird, auch wieder released wird
    oder er wird wohl einfach verpuffen.


    Ja, das mit dem verpuffen hat mich jetzt halt verwirrt...aber lustig, dass sowas auch geht ^^

    ast2ufdyxkb1.png


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


  • Wir sind doch schon viel weiter :rolleyes:


    @Schwabbel:
    Entweder wird es ein Memoryleak werden, wo von ich eher wenig ausgehe, da wenn ein string gepusht wird, auch wieder released wird
    oder er wird wohl einfach verpuffen.


    Ich geh einfach mal davon aus das dieser wert verpufft es wird eine Funktion aufgerufen mit den angegebenen werten beispiel
    CallLocalFunction


    CallLocalFunction("Test","sdf","Hallo",1,12.134);


    public Test(string[],val1,Float:flo)return printf("siehe %s %d %f",string,val1,flo);


    Output "Hallo",1,12.134


    CallLocalFunction("Test","sdf","Hallo");


    Output "Hallo", 0, 0.0000


    Es geht ja dabei nur legendlich um den aufruf einer Funktion an die die demenstsprechenden wert übermittelt werden, wie schon oben genannt.
    Daher kommt es auch nur darauf an das der String letztendlich nicht leer sein darf sonst sehe ich dabei kein Problem damit rum zu "spielen".

  • Es geht ja dabei nur legendlich um den aufruf einer Funktion an die die demenstsprechenden wert übermittelt werden, wie schon oben genannt.


    Wenn ich keinen Wert übergebe ist dieser in der Funktion logischerweise leer, ok in PAWN 0(NULL) aber seis drum :P

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

    Margarete Stokowski

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen