[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
  • Hallo!


    Ich möchte bei folgende Befehl haben das wen ein Admin unter Level 5 ihn ausführt komt das er keie rechte hat.



    ocmd:makeadmin(playerid, params[])
    {
    //if(SD[playerid][pEingeloggt] == 0)return SCM(playerid, GRAU, "Du bist nicht eingeloggt!");
    new pID, adminid, string[128];
    if(iPAA(playerid,5))return rangniedrig
    {
    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), GARN(playerid));
    SD[pID][pAdmin] = adminid;
    format(string, sizeof(string), "Du hast %s %s aus dem Teamposten %s entlassen", string,SD[pID][pName], string);
    SCM(playerid, BLAU, string);
    format(string,sizeof(string), GARN(playerid));
    SD[pID][pAdmin] = adminid;
    format(string, sizeof(string), "%s %s hat dir den Rang %s entzogenn!", string,SD[playerid][pName],GARN(pID));
    SCM(pID, BLAU, string);
    format(string,sizeof(string), GARN(playerid));
    SD[pID][pAdmin] = adminid;
    format(string, sizeof(string), "AdmCMD: %s %s hat %s %s den Rang %s entzogen!", string,SD[playerid][pName],string, SD[pID][pName],GARN(pID));
    SAM(BLAU, string);
    SD[pID][pAdmin] = 0;
    SUS(pID);
    return 1;
    }
    if(adminid < 1 || adminid > 7)return adminrangnichtexistent;
    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), GARN(pID));
    SD[pID][pAdmin] = adminid;
    format(string, sizeof(string), "AdmCMD: %s %s hat %s %s zum %s ernannt.",string, SD[playerid][pName],string, 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;
    }


    iPAA = isPlayerAnAdmin

    stock isPlayerAnAdmin(playerid,rang)
    {
    if(SpielerDaten[playerid][pAdmin] < rang)return 1;
    return 0;
    }


    Was muss ich da machen?


    MfG

  • Nach deinem derzeitigen Funktionsaufbau müsstest du es wie folgt anpassen:


    Zeile 5:



    if(!iPAA(playerid,5))
    {



    Allerdings würde ich deine iPAA -Funktion anpassen da der Name nicht dem Rückgabewert entspricht und dich dann eher verwirren wird:



    stock isPlayerAnAdmin(playerid,rang)
    {
    if(SpielerDaten[playerid][pAdmin] >= rang)return 1;
    return 0;


    }

  • Beitrag von Jameso ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Kleine Frage :D




    ich möchte gerne ein Fahrzeug zulassen, würde das so funktionieren, also das genau das Fahrzeug was ich ausgewählt habe im Dialog die P_KZ ID kriegt und wie update ich das Kennzeichen vom Fahrzeug?
    Ich habe nicht einmal listitem benutzt deswegen wundert mich ob es so funktionieren kann.



    Dialog wo alle Fahrzeuge angezeigt werden -> Ich wähle mein Fahrzeug aus -> das passiert


    Auto ausgewählt was zugelassen werden soll">PAWN-Quellcode: -> Auto ausgewählt was zugelassen werden sollQuellcode bearbeiten



    [*] if(dialogid == DIALOG_ZULASSUNG2)
    [*] {
    [*] if(response)
    [*] {
    [*] if(PCar[playerid][listitem][P_MID] < 400) //wenn leer ausgewählt
    [*] {
    [*]
    [*] }
    [*] else
    [*] {
    [*] SetPVarInt(playerid,"_tmp_veh",d);
    [*] StartGenerateUniqueRandomNumber(playerid, handle, NUMBER_PLATE_POOL, 2);
    [*] }
    [*] }
    [*] else
    [*] {
    [*] //Zurück
    [*] }
    [*] return 1;
    [*] }
    [/list]


    Code
    stock ApplyZulassung(playerid, number)
    {
    	new d = GetPVarInt(playerid,"_tmp_veh");
    	DeletePVar(playerid, "_tmp_veh");
    	PCar[playerid][d][P_KZ] = number;
    }

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Ist es möglich z.B der aktuelle Stand von Bitcoin auszulesen und im Script einzubauen?

    Verlass dich nicht 100%ig auf meine Aussage, aber ich glaube das wäre beispielsweise in Combi mit der Website möglich. Also Website holt die Infos und übers Script liest dus aus. So könnte ich es mir zumindest vorstellen. Ähnliche Frage würde sich mir stellen, wie ich ein YT Video/Lied IG suchen & abspielen lassen könnte? Würde dort ähnlich verfahren.

    "I believe if you're going to criticise the creative content of others, bring a creative solution to the table with you."

  • Verlass dich nicht 100%ig auf meine Aussage, aber ich glaube das wäre beispielsweise in Combi mit der Website möglich. Also Website holt die Infos und übers Script liest dus aus. So könnte ich es mir zumindest vorstellen. Ähnliche Frage würde sich mir stellen, wie ich ein YT Video/Lied IG suchen & abspielen lassen könnte? Würde dort ähnlich verfahren.

    und wie kann ich das auslesen?

  • Ist es möglich z.B der aktuelle Stand von Bitcoin auszulesen und im Script einzubauen?

    Ja, das ist sehr gut möglich.


    Es gibt schon eine API die dir das zur Verfügung stellt: https://api.coinmarketcap.com/v1/ticker/bitcoin/?convert=EUR


    Und mit der Funktion: https://wiki.sa-mp.com/wiki/HTTP kannst du das einfach abfragen und angeben :)



    Am Ende wuerde ich gerne in einem Dialog alle Spieler auflisten, sortiert absteigend nach den meisten Kills.

    Schreib das mal so:


    Nutze dafür: https://forum.sa-mp.com/showthread.php?t=343172




    Kleine Frage

    Das keine kleine Frage, weil das komplett unverständlich ist, was du eigentlich wissen magst.


    Und so gut wie keiner kennt doch die Funktionen etc was du da verwendest.


    Schreib mir eine PN wenn du doch offensichtlich zu dem Callback Mechanismus von mir fragen hast ^^

    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
  • Danke dir Kaliber!


    Kennt jemand sich mit diesem Fehler unter Linux aus?


    Failed (libmysqlclient.so.18: cannot open shared object file: No such file or directory)


    Das kommt wenn ich einen Server mit dem mysql Plugin starten will.
    Leider finde ich auch nicht das Paket welches diese Datei beinhaltet.

  • Hi hab folgendes Problem: Nachdem der Countdown zuende ist, geht es weiter (-1,-2,-3 etc.)


    new CountDownFromAmount;


    CountDownFromAmount = 10; SetTimer("CountDownTimer2", 999, 1);


    forward CountDownTimer2();public CountDownTimer2(){ CountDownFromAmount--; new string[128]; format(string, 128, "~w~%d Sekunden", CountDownFromAmount); GameTextForAll(string, 990, 4); if (CountDownFromAmount == 0) { GameTextForAll("Mach dich bereit!", 3000, 5); return 1; } return 1;}


    Der countdown soll übrigens nach 10 sekunden zuende sein (von 10-0)

  • Empfehle dir folgendes:


    1. Lösche CountDownFromAmount.


    2. Schreib es so:


    SetTimerEx("CountDownTimer2", 997, 0, "i", 10); //10 = Sekunden



    C
    forward CountDownTimer2(countDown);
    public CountDownTimer2(countDown)
    {
        if (--countDown == 0) return GameTextForAll("Mach dich bereit!", 3000, 5);
        new string[32];
        format(string, sizeof(string), "~w~%d Sekunden", countDown);
        GameTextForAll(string, 990, 4);
        SetTimerEx("CountDownTimer2", 997, 0, "i", countDown);
        return 1;
    }

    Dann brauchst du keine Globale Variable und der Timer beendet sich automatisch :)

    ast2ufdyxkb1.png


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

  • Irgendeine idee?

    Schreibs mal so:



    C
    {
        new org = PlayerInfo[playerid][pOrgMember];
        printf("%d != 0 && %d == 1",org,OrgInfo[org][OrgMech]);
        return (org != 0 && OrgInfo[org][OrgMech] == 1);
    }

    Dann schau mal, was geprintet wird im Server-Log und dann weißt du, was falsch läuft ;)


    PS: Funktionsname entfernt weil angeblich das ein zensiertes Wort ist *roflkopter*

    ast2ufdyxkb1.png


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

  • In der Log steht [18:50:14] 0 != 0 && 0 == 1

    Dann weißt du, dass er offensichtlich pOrgMember von nix ist, da das 0 ist.


    Ist er eventuell pOrgLeader? Kann es sein, dass du da 2 Variablen hast? ^^

    ast2ufdyxkb1.png


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

  • Moin.
    Ich will bei mir ein Rundensystem einfuegen. In meinem Gamemode gibt es 3 Teams, und wenn in mindestens 2 Teams mindestens 1 Spieler ist, soll ein Countdown starten.
    Wenn zwischendurch Spieler rausgehen soll dieser wieder resettet werden.
    Wenn der Countdown von 60 auf 0 runtergezaehlt hat sollen die Spieler gespawnt werden, und die Runde soll gestartet werden.


    Ist das hier logisch umgesetzt? Und wann rufe ich am besten die Funktion StartGame() auf? Oder periodisch mit Timer?




    Hier die Funktion welche erkennt wenn eine Runde beendet ist.
    Der rekursive Aufruf hier sinvoll?


    Einmal editiert, zuletzt von Sub Royal ()