[SAMMELTHREAD] Kleine Scripting Fragen

  • So, habe nun die Kinderkrankheiten meines Gamemodes Last Bed Standing entfernt.
    Habe mal vor einfach einen kleinen Server zu laufen, um zu schauen wie das so geht.


    Der Gamemode besteht darin, dass es mindestens 3 Teams gibt, und diese sollen das Bett eines gegnerischen Teams zerstoeren, so dass diese nicht mehr respawnen koennen, und dann soll das Team ausgeloescht werden.
    Jedoch habe ich noch nicht bedacht wie so eine Runde starten soll.
    Bisher kann man einfach auf den Server gehen, und in ein Team rein, unabhaengig davon ob da bereits was passiert oder nicht.
    Habt ihr Tipps wie ihr das "Starten" realisieren wuerdet?


    Habe evtl. gedacht, dass in mindestens 2 Teams, mindestens 1 Spieler sein muss um zu starten. Aber wie gestaltet man am besten die Abfrage?

    Einmal editiert, zuletzt von Sub Royal ()

  • Zitat von Sub Royal

    Habe evtl. gedacht, dass in mindestens 2 Teams, mindestens 1 Spieler sein muss um zu starten. Aber wie gestaltet man am besten die Abfrage?

    Ganz einfach indem du abfragst wie viele Spieler schon im Team sind kleiner als 1, kann er nicht ins Team. Hoffe du meintest es so?


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

  • So brauche momentan einen kleinen Denkanstoss.
    Nachdem eine Runde beendet wird in meinem Gamemode.


    Es gibt 3 Dinge die der Spieler sammeln kann in einer Runde, Betten zerstoeren, Spieler killen, und seine Tode.
    Am Ende wuerde ich gerne in einem Dialog alle Spieler auflisten, sortiert absteigend nach den meisten Kills.


    Habe dazu ein 2 Dimensionales Array angedacht.
    Dort muss ich ja irgendwie die Spieler ID beherbergen, die Anzahl der Kills,Tode, und zerstoerten Betten.


    Hier mal mein Ansatz den ich gerade angefangen habe.


    Sortieren wuerde ich am Ende mit meinem Heapsort Algorithmus

    Einmal editiert, zuletzt von Sub Royal ()

  • 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 BrightLeaN ()

    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
    1. stock ApplyZulassung(playerid, number)
    2. {
    3. new d = GetPVarInt(playerid,"_tmp_veh");
    4. DeletePVar(playerid, "_tmp_veh");
    5. PCar[playerid][d][P_KZ] = number;
    6. }


    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 ^^


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

  • 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.

  • Leider finde ich auch nicht das Paket welches diese Datei beinhaltet.

    Das kommt auf deine Distribution an.


    Unter Debian/Ubuntu müsste das libmysqlclient-dev sein und unter CentOS mysql-libs


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

  • 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
    1. forward CountDownTimer2(countDown);
    2. public CountDownTimer2(countDown)
    3. {
    4. if (--countDown == 0) return GameTextForAll("Mach dich bereit!", 3000, 5);
    5. new string[32];
    6. format(string, sizeof(string), "~w~%d Sekunden", countDown);
    7. GameTextForAll(string, 990, 4);
    8. SetTimerEx("CountDownTimer2", 997, 0, "i", countDown);
    9. return 1;
    10. }

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


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

  • Irgendeine idee?

    Schreibs mal so:



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

    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*


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

  • Jap genau das gleich hatte ich auch ;D






    //



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



    wtf




    Bei nem anderen Spieler steht das drinne




    [18:52:29] 10 != 0 && 49 == 1

    Programmieren: 1% Programmieren, 99% Bugs Fixen