[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
  • Danke, hat geklappt.


    Was muss hier einbauen damit man den Chat mit $ und § nicht nutzen kann wenn man kein Admin ist?
    Wenn ich kein Admin bin kommt ich hab zu enig rechte und es wird zB. $Text ausgegeben.


    public OnPlayerText(playerid, text[]){ new message[128]; if(text[0] == '$') { if(IsPlayerAdmin(playerid) || SpielerDaten[playerid][pAdmin] < 2)return SendClientMessage(playerid, GRAU, "Du hast nicht genügend Rechte für diesen Befehl."); if(!text[1]) return SendClientMessage(playerid, ROT,"$ [Text]"),0; format(message, sizeof(message), "(([Adminchat] %s: %s ))", SpielerDaten[playerid][pName],text[1]); return SendClientMessageToAll(ROT,message),0; } new message1[128]; if(text[0] == '§') { if(IsPlayerAdmin(playerid) || SpielerDaten[playerid][pAdmin] < 1)return SendClientMessage(playerid, GRAU, "Du hast nicht genügend Rechte für diesen Befehl."); if(!text[1]) return SendClientMessage(playerid, ROT,"§ [Text]"),0; format(message1, sizeof(message1), "(([Helferchat] %s: %s ))", SpielerDaten[playerid][pName],text[1]); return SendClientMessageToAll(HGREEN,message1),0; } format(message, sizeof(message), "{969696}%s sagt: {FFFFFF}%s", SpielerDaten[playerid][pName], text); return ProxDetector(7.0, playerid, message, WEISS,WEISS,WEISS,WEISS,WEISS),0;}

    Ich habs bisher leider immer noch nicht geschaft. Was muss ich da ander machen?

  • hab bei MySQL mein MySQL Server angegeben da nur der Server SA-MP drauf hat.

    Das ist keine gute Idee einen externen MySQL Server zu haben.
    Ich weiß nicht, ob SA:MP da überhaupt mitspielt.


    Was muss hier einbauen damit man den Chat mit $ und § nicht nutzen kann wenn man kein Admin ist?
    Wenn ich kein Admin bin kommt ich hab zu enig rechte und es wird zB. $Text ausgegeben.

    Kannst du das etwas genauer erklären? Aktuell wird doch ausgegeben, dass diese Person zu wenig Rechte hat.

    ast2ufdyxkb1.png


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

  • Bei mir im Chat kommt das diese Person zu wenig rechte hat. Jedoch kommt dann aber auch noch $Hi wenn ich $ Hi schreibe.

    Achso ja, du hast einfach das return 0 vergessen:


    ast2ufdyxkb1.png


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

  • Dake, das hat geklappt.


    Jetzt will meine SendAdminMessage nicht funktionieren.



    stock SendAdminMessage(color, message[])
    {
    for(new i=0;i<GetMaxPlayers();i++)
    {
    if(Eingeloggt[i] == 1)
    {
    if(SpielerDaten[i][pAdmin] > 0)
    {
    SendClientMessage(i, color, message);
    }
    }
    }
    return 1;
    }


    Ich mchte, dass in folgender Nachricht der alte Tamrangangezeigt wird.
    format(string, sizeof(string), "Du hast %s %s den Teamrang %s gegeben", GetAdminRangName(playerid),SpielerDaten[pID][pName], GetAdminRangName((pID));
    Was muss ich da wo das erste GetAdminRangName( steht hinschreiben? Momentan kommt der Rang dort den ich vergebe.

  • Jetzt will meine SendAdminMessage nicht funktionieren.

    Dann bist du eventuell kein Admin?


    Denn der Code ist richtig.



    Momentan kommt der Rang dort den ich vergebe.

    Kannst du mehr von dem Befehl zeigen?


    Und ist das nicht genau das, was du willst?!

    ast2ufdyxkb1.png


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

  • Das ist keine gute Idee einen externen MySQL Server zu haben.Ich weiß nicht, ob SA:MP da überhaupt mitspielt.


    Kannst du das etwas genauer erklären? Aktuell wird doch ausgegeben, dass diese Person zu wenig Rechte hat.

    Das hat davor funktioniert, bis ich alles auf R41 4 umgescriptet hab.

  • Das hat davor funktioniert, bis ich alles auf R41 4 umgescriptet hab.

    Hast du eventuell die Reihenfolge unter MySQL Connect nicht beachtet?


    Da steht ja, Access denied for user das heißt, er kann sich schon mal mit dem remote host verbinden.


    (Dennoch abzuraten weil sehr langsam + unsicher).


    Also kann es nur an 2 Sachen liegen:


    1. Benutzername oder Passwort falsch (evtl verursacht durch die Reihenfolge).
    2. Nicht genügend Rechte.

    ast2ufdyxkb1.png


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

  • Ich hab mal deine Optimierung versucht jedoch will endAdminMesage immer noch nicht. Diese Nachriht bekomt dann doch auch der der den anderen zum Admin macht oder?



    ocmd:makeadmin(playerid, params[])
    {
    //if(SD[playerid][pEingeloggt] == 0)return SCM(playerid, GRAU, "Du bist nicht eingeloggt!");
    new pID, adminid, string[128];
    if(IPA(playerid) || SD[playerid][pAdmin] >= 5)
    {
    if(sscanf(params, "ui", pID, adminid))return makeadmin;
    //if(adminid < 2)return SCM(playerid, GRAU, "Du kannst nur ab Rang 2 vergeben.");
    if(IPN(pID))return 1;
    //if(IsPlayerNPC(pID))return 1;
    //if(!Eingeloggt[pID])return SCM(playerid, GRAU, "Dieser Spieler ist nicht eingeloggt!");
    //if(SD[pID][pIntro] < 1)return SCM(playerid, GRAU, "Der Spieler ist noch im Tutorial.");
    if(adminid == 0){
    format(string, sizeof(string), "Du hast %s aus dem Teamposten %s entlassen", SD[pID][pName], GARN(pID));
    SCM(playerid, BLAU, string);
    format(string, sizeof(string), "%s hat dich aus dem Team entlassen!", SD[playerid][pName]);
    SCM(pID, BLAU, string);
    format(string, sizeof(string), "AdmCMD: %s hat %s aus dem Team entlassen!", SD[playerid][pName], SD[pID][pName]);
    SAM(BLAU, string);
    SD[pID][pAdmin] = 0;
    SUS(pID);
    return 1;
    }
    if(adminid < 1 || adminid > 7)return adminrangnichtexistent;
    SD[pID][pAdmin] = adminid;
    format(string, sizeof(string), "Du hast %s %s den Teamrang %s gegeben", GARN(playerid),SD[pID][pName], GARN(pID));
    SCM(playerid, BLAU, string);
    format(string, sizeof(string), "* %s %s hat dir den Teamrang %s gegeben",GARN(playerid),SD[playerid][pName],GARN(pID));
    SCM(pID, BLAU, string);
    format(string, sizeof(string), "AdmCMD: %s hat %s zum %s ernannt.", SD[playerid][pName], SD[pID][pName], GARN(pID));
    SAM(BLAU,string);
    SUS(pID);
    return 1;
    }
    else {SCM(playerid, GRAU, "Du hast nicht genügend Rechte für diesen Befehl.");}
    return 1;
    }


    Das ist der Befehl. Ich möchte, das wenn ich zb nen Spieler n Teamrang gebe da steht Spieler xy wurde von yz zum Supporter ernannt. SAM = SendAdminMessage

  • Diese Nachriht bekomt dann doch auch der der den anderen zum Admin macht oder?

    In deinem Fall, ja, da du ihn zum Admin machst und dann SAM aufrufst.



    das wenn ich zb nen Spieler n Teamrang gebe da steht Spieler xy wurde von yz zum Supporter ernannt

    Das machst du doch?! Das steht doch in Zeile 28.



    jedoch will endAdminMesage immer noch nicht

    Ich sagte ja schon dein Code ist korrekt.
    Das einzige was du evtl nicht berücksichtigt hast ist, dass der RCON Admin keine Nachrichten bekommt.
    Soll dieser auch die Nachrichten bekommen? Wenn ja, schreib die Funktion so:


    C
    stock SendAdminMessage(color, message[])
    {
        for(new i=GetPlayerPoolSize(); i!=-1; i--)
        {
            if(Eingeloggt[i] == 1 && (SpielerDaten[i][pAdmin] > 0 || IPA(i))) SendClientMessage(i, color, message);
        }
        return 1;
    }

    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
  • Wenn ich mit makeadmin einen Spieler zum Admin mache mache steht dann da Du hast Admin xy den Teamrang Admin gegeben. Ich möchte aber wenn er Spieler ist das Spieler steht. Spieler ist Rang 0. Ich meine übrigens das au Zeile 26.


    SendAdminMessage klappt immer noch nicht. Ich habs auch mit deinem Vorschlag probiert.


    edit: IsPlayerAdmin ist nur eine Abfrage ob man RCON Admin ist?

  • edit: IsPlayerAdmin ist nur eine Abfrage ob man RCON Admin ist?

    Korrekt: [wiki]IsPlayerAdmin[/wiki] Check if a player is logged in as an RCON admin.



    Ich meine übrigens das au Zeile 26.

    Achso, dann schreibe das so:


    C
    format(string,sizeof(string), GARN(pID));
    SD[pID][pAdmin] = adminid;
    format(string, sizeof(string), "Du hast %s %s den Teamrang %s gegeben", string,SD[pID][pName], GARN(pID));
    SCM(playerid, BLAU, string);


    SendAdminMessage klappt immer noch nicht. Ich habs auch mit deinem Vorschlag probiert.

    Das ist seeehr merkwürdig 8|


    Bist du denn sicher, dass Eingeloggt[i] auf 1 ist und du das damit machst und nicht mit SD[playerid][pEingeloggt]?

    ast2ufdyxkb1.png


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

  • stock SendAdminMessage(color, message[]){ new playerid; for(new i=GetPlayerPoolSize(); i!=-1; i--) {if(SD[playerid][pEingeloggt] == 1 &&(SpielerDaten[i][pAdmin] > 0 || IPA(i))) SendClientMessage(i, color,message); } return 1;}
    So habe ich es versucht da kommt tag missmatch.


    Und

    • format(string,sizeof(string), GARN(pID));
    • SD[pID][pAdmin] = adminid;
    • format(string, sizeof(string), "Du hast %s %s den Teamrang %s gegeben", string,SD[pID][pName], GARN(pID));
    • SCM(playerid, BLAU, string);

    Will irgendwie nicht.

  • So habe ich es versucht da kommt tag missmatch.

    Wenn dann so:


    C
    stock SendAdminMessage(color, message[])
    {
        for(new i=GetPlayerPoolSize(); i!=-1; i--)
        {
            if(SD[i][pEingeloggt] == 1 && (SpielerDaten[i][pAdmin] > 0 || IPA(i))) SendClientMessage(i, color, message);
        }
        return 1;
    }

    Will irgendwie nicht.

    Das hilft mir relativ wenig...was passiert denn?!

    ast2ufdyxkb1.png


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

  • Deine Variante sagt wieder tag mismatch



    if(adminid < 1 || adminid > 7)return adminrangnichtexistent;
    SD[pID][pAdmin] = adminid;
    format(string,sizeof(string), GARN(pID));
    SD[pID][pAdmin] = adminid;
    format(string, sizeof(string), "Du hast %s %s den Teamrang %s gegeben", string,SD[pID][pName], GARN(pID));
    SCM(playerid, BLAU, string);
    format(string, sizeof(string), "* %s %s hat dir den Teamrang %s gegeben",GARN(playerid),SD[playerid][pName],GARN(pID));
    SCM(pID, BLAU, string);
    format(string, sizeof(string), "AdmCMD: %s hat %s zum %s ernannt.", SD[playerid][pName], SD[pID][pName], GARN(pID));
    SAM(BLAU,string);
    SUS(pID);
    return 1;

    Will irgendwie nicht im sinne von der Name wird vor dem Rang ncht angezeugt.

  • Zeile 2 natürlich löschen...


    Dafür gibt es ja Zeile 4...



    Deine Variante sagt wieder tag mismatch

    Ist das etwa ein bool?


    Dann schreib es so:


    C
    stock SendAdminMessage(color, message[])
    {
        for(new i=GetPlayerPoolSize(); i!=-1; i--)
        {
            if(SD[i][pEingeloggt] && (SpielerDaten[i][pAdmin] > 0 || IPA(i))) SendClientMessage(i, color, message);
        }
        return 1;
    }

    ast2ufdyxkb1.png


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

  • Danke, hat geklappt.


    Du meinst IsPlayerAdmin ist nur für RCON.
    Ich hab mir grade die isPlayerAnAdmin Funktion eingebaut.
    stock isPlayerAnAdmin(playerid,rang){ if(SpielerDaten[playerid][pAdmin] >= rang)return 1; return 0;}
    Wenn ich einen Befehl mit isPlayerAnAdmin mache kommt warning 202: number of arguments does not match definition
    if(iPAA(playerid) || SD[playerid][pAdmin] < 4)return rangniedrig;


    edit:oder kann ich IsPlayerAdmin lassen für Adminbefehle? (Kein RCON)

  • oder kann ich IsPlayerAdmin lassen für Adminbefehle? (Kein RCON)

    Ich verstehe die Frage nicht? IsPlayerAdmin ist nur für RCON Admins.
    Wenn du möchtest, dass sich ein RCON Admin Admin Befehle ausführen darf, dann kannst du es drinnen lassen, das liegt doch an dir :D



    iPAA(playerid)

    Hier fehlt der Rang. Du müsstest z.B. iPAA(playerid, 4) schreiben.


    Allerdings fragst du ja zusätzlich immer das Admin Level ab..machst du ja direkt neben iPAA...


    2x abfragen brauchst du es nicht ^^

    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