[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
  • Du lässt eine for-schleife ablaufen, und schaust, ob der Abgefragte Admin ist. Falls ja, sendest du playerid eine Nachricht mit dem Namen und dem Rang von dem Admin.



    Vielleicht hilft dir das ein wenig:

    Spoiler anzeigen

    ocmd:admins(playerid, params[])
    {
    spielerLaden(playerid);
    new count = 0, stringsend[128], stringsend1[128];
    SendClientMessage(playerid, COLOR_ADMINSON, "Administratoren:");
    for(new i; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(GetPVarInt(playerid, "admin") >= 1)
    {
    if(GetPVarInt(playerid, "adminDuty") == 1)
    {
    format(stringsend, sizeof(stringsend), "On Duty: %s", spielerName(i));
    SendClientMessage(playerid, COLOR_ADMINSON, stringsend);
    count++;
    }
    else
    {
    format(stringsend, sizeof(stringsend), "Off Duty: %s", spielerName(i));
    SendClientMessage(playerid, COLOR_ADMINSOFF, stringsend);
    count++;
    }
    }
    }
    }
    format(stringsend1,sizeof(stringsend1), "Es sind %i Admins online.", count);
    SendClientMessage(playerid,COLOR_ADMINSON, stringsend1);
    return 1;
    }

  • Habe dir das mal geschrieben:


    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;
    }


    //Edit:

    Zitat von DasNeo

    Vielleicht hilft dir das ein wenig:


    Ein schlechter kopierter Befehl, der teilweise nicht richtig funktioniert ist denke ich mal nicht so wirklich hilfreich ^^


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

    2 Mal editiert, zuletzt von Schwabbel ()

  • Schwabbel ersteinmal danke, aber bekomme 2Errors
    C:\Users\metin\.MCReferenceSdk\server\gamemodes\selfmade.pwn(812) : error 017: undefined symbol "name"
    C:\Users\metin\.MCReferenceSdk\server\gamemodes\selfmade.pwn(823) : error 017: undefined symbol "name"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Errors.

  • 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

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Es returnt 1, wenn es gesendet wird und 0 wenn es nicht gesendet wird (z.B. wenn der Spieler nicht mehr online ist) ^^


    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

  • 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

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