Angepinnt [SAMMELTHREAD] Kleine Scripting Fragen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Neu

    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?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Sub Royal ()

  • Neu

    Sub Royal schrieb:

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

    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.

    Quellcode

    1. stock FinishedGame()
    2. {
    3. new scoreTable[MAX_PLAYERS][MAX_PLAYERS];
    4. for(new i = 0; i < MAX_PLAYERS; i++)
    5. {
    6. scoreTable[i][0] = playerdataInfo[playerid][pBeds];
    7. scoreTable[i][1] = playerdataInfo[playerid][pKills];
    8. scoreTable[i][2] = playerdataInfo[playerid][pDeaths];
    9. }
    10. new string[512];
    11. format(string,sizeof(string),
    12. }
    Alles anzeigen

    Sortieren wuerde ich am Ende mit meinem Heapsort Algorithmus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Sub Royal ()

  • Neu

    Hallo!

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

    PAWN-Quellcode

    1. ocmd:makeadmin(playerid, params[])
    2. {
    3. //if(SD[playerid][pEingeloggt] == 0)return SCM(playerid, GRAU, "Du bist nicht eingeloggt!");
    4. new pID, adminid, string[128];
    5. if(iPAA(playerid,5))return rangniedrig
    6. {
    7. if(sscanf(params, "ui", pID, adminid))return makeadmin;
    8. //if(adminid < 2)return SCM(playerid, GRAU, "Du kannst nur ab Rang 2 vergeben.");
    9. if(IPN(pID))return 1;
    10. //if(IsPlayerNPC(pID))return 1;
    11. //if(!Eingeloggt[pID])return SCM(playerid, GRAU, "Dieser Spieler ist nicht eingeloggt!");
    12. //if(SD[pID][pIntro] < 1)return SCM(playerid, GRAU, "Der Spieler ist noch im Tutorial.");
    13. if(adminid == 0){
    14. format(string,sizeof(string), GARN(playerid));
    15. SD[pID][pAdmin] = adminid;
    16. format(string, sizeof(string), "Du hast %s %s aus dem Teamposten %s entlassen", string,SD[pID][pName], string);
    17. SCM(playerid, BLAU, string);
    18. format(string,sizeof(string), GARN(playerid));
    19. SD[pID][pAdmin] = adminid;
    20. format(string, sizeof(string), "%s %s hat dir den Rang %s entzogenn!", string,SD[playerid][pName],GARN(pID));
    21. SCM(pID, BLAU, string);
    22. format(string,sizeof(string), GARN(playerid));
    23. SD[pID][pAdmin] = adminid;
    24. format(string, sizeof(string), "AdmCMD: %s %s hat %s %s den Rang %s entzogen!", string,SD[playerid][pName],string, SD[pID][pName],GARN(pID));
    25. SAM(BLAU, string);
    26. SD[pID][pAdmin] = 0;
    27. SUS(pID);
    28. return 1;
    29. }
    30. if(adminid < 1 || adminid > 7)return adminrangnichtexistent;
    31. format(string,sizeof(string), GARN(pID));
    32. SD[pID][pAdmin] = adminid;
    33. format(string, sizeof(string), "Du hast %s %s den Teamrang %s gegeben", string,SD[pID][pName], GARN(pID));
    34. SCM(playerid, BLAU, string);
    35. format(string, sizeof(string), "%s %s hat dir den Teamrang %s gegeben",GARN(playerid),SD[playerid][pName],GARN(pID));
    36. SCM(pID, BLAU, string);
    37. format(string,sizeof(string), GARN(pID));
    38. SD[pID][pAdmin] = adminid;
    39. format(string, sizeof(string), "AdmCMD: %s %s hat %s %s zum %s ernannt.",string, SD[playerid][pName],string, SD[pID][pName], GARN(pID));
    40. SAM(BLAU,string);
    41. SUS(pID);
    42. return 1;
    43. }
    44. else {SCM(playerid, GRAU, "Du hast nicht genügend Rechte für diesen Befehl.");}
    45. return 1;
    46. }
    Alles anzeigen


    iPAA = isPlayerAnAdmin

    PAWN-Quellcode

    1. stock isPlayerAnAdmin(playerid,rang)
    2. {
    3. if(SpielerDaten[playerid][pAdmin] < rang)return 1;
    4. return 0;
    5. }
    6. Was muss ich da machen?
    7. MfG
  • Neu

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

    ​Zeile 5:

    PAWN-Quellcode

    1. if(!iPAA(playerid,5))
    2. {



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

    PAWN-Quellcode

    1. stock isPlayerAnAdmin(playerid,rang)
    2. {
    3. if(SpielerDaten[playerid][pAdmin] >= rang)return 1;
    4. return 0;
    5. }

    Nova-eSports NewLife | www.nes-newlife.de
    Serverleitung

    Beitrag von BrightLeaN ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Neu

    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]

    PAWN-Quellcode

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

    Chiller.502 schrieb:

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

  • Neu

    xdsgnd schrieb:

    Chiller.502 schrieb:

    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.
    und wie kann ich das auslesen?
  • Neu

    Chiller.502 schrieb:

    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: api.coinmarketcap.com/v1/ticker/bitcoin/?convert=EUR

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


    Sub Royal schrieb:

    Am Ende wuerde ich gerne in einem Dialog alle Spieler auflisten, sortiert absteigend nach den meisten Kills.
    Schreib das mal so:

    C-Quellcode

    1. new scoreTable[MAX_PLAYERS][2], idx;
    2. for(new i = GetPlayerPoolSize(); i!=-1; i--)
    3. {
    4. if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
    5. scoreTable[i][0] = playerdataInfo[i][pKills];
    6. scoreTable[i][1] = i;
    7. }
    8. SortDeepArray(scoreTable, 0, .order = SORT_DESC); //Sortiert nach Kills
    9. //Platz 1 - Meisten Kills
    10. idx = scoreTable[0][1];
    11. playerdataInfo[idx][pKills] //Platz 1 Kills
    12. playerdataInfo[idx][pDeaths] //Platz 1 Deaths
    13. playerdataInfo[idx][pBeds] //Platz 1 Betten
    14. //Dann einfach Platz 2
    15. idx = scoreTable[1][1];
    16. playerdataInfo[idx][pKills] //Platz 2 Kills
    17. playerdataInfo[idx][pDeaths] //Platz 2 Deaths
    18. playerdataInfo[idx][pBeds] //Platz 2 Betten
    19. //Dann einfach Platz 3
    20. idx = scoreTable[2][1];
    21. playerdataInfo[idx][pKills] //Platz 3 Kills
    22. playerdataInfo[idx][pDeaths] //Platz 3 Deaths
    23. playerdataInfo[idx][pBeds] //Platz 3 Betten
    Alles anzeigen
    Nutze dafür: forum.sa-mp.com/showthread.php?t=343172



    BrightLeaN schrieb:

    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. X/
  • Neu

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

    PAWN-Quellcode

    1. new CountDownFromAmount;


    PAWN-Quellcode

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


    PAWN-Quellcode

    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)
  • Neu

    Empfehle dir folgendes:

    1. Lösche CountDownFromAmount.

    2. Schreib es so:

    PAWN-Quellcode

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



    C-Quellcode

    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. X/
  • Neu

    JacLos schrieb:

    Irgendeine idee?
    Schreibs mal so:


    C-Quellcode

    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. X/