Wenn 4 Spieler Online Spiel starten.

  • Wenn 4 Spieler Online Spiel starten.

    Guten Tag,
    Wie schon oben in der Überschrift steht, möchte ich das wenn mind. 4 Spieler Online sind, dass es eine Funktion ausführt. Das problem
    liegt aber ich weiß nicht wie ich abfragen soll ob 4 Spieler Online sind oder mehr. Ich hoffe auf hilfe !

    Mit freundlichen Grüßen
    Triagle
  • Also ich würde es so lösen, eine Globale Variable erstellen und bei OnPlayerConnect also wenn jemand joint.
    Die Variable um 1 erhöhen und wenn jemand den Server bei OnPlayerDisconnect verlässt um 1 verringern.
    Dann Abfragen bei OnPlayerConnect ob die Variable gleich oder größer als 4 ist.
    Wenn ja starte die funktion wenn nein dann in warteraum oder so porten what ever.
    Denk dran die Abfrage bei Onplayerconnect unter der Variablen erhöhung zu machen :P
    mfg. eronor
  • Moin,
    wie eronor schon sagt, kann man dies so lösen,
    dass man beim Player Join eine Variable hochzählt, beim disconnect runter.

    Eine weitere Mögilchkeit, die Spieler erst beim ausführen einer Funktion zu zählen wäre eine Funktion mit eienr Schleife, die dann die Spieler zählt und ausgibt, wie viele online sind:
    [pwn]
    countOnlinePlayers(){
    new cplayer = 0;
    for(new i = 0; i <= MAX_PLAYERS; i++){
    if(IsPlayerConnected(i)){
    cplayer++;
    }
    }
    return cplayer;
    }
    [/pwn]

    diese Funktion zählt nun, wie viele Spieler online sind,
    nun kannst du einfach abfragen:
    [pwn]
    if(countOnlinePlayers() <= 4){
    print("Es sind mindestens 4 Spieler online.");
    }
    [/pwn]

    Ich hoffe ich habe da jetzt kein Denkfehler drinnen, habe schon seit über nem Jahr eig. nichts mehr mit pawn zu tun,
    aber wäre schonmal eine 2. Lösungsmöglichkeit.

    Gruß,
    Dennis
  • @Dennis321: Da ist der Denkfehler:
    [pwn]if(countOnlinePlayers() >= 4){
    print("Es sind mindestens 4 Spieler online.");
    }[/pwn]

    Und statt:
    [pwn]MAX_PLAYERS[/pwn]
    solltest du:
    [pwn]GetMaxPlayers()[/pwn]
    nutzen, das schaut, wie viele Slots der Server maximal haben kann (in der server.cfg).

    Ich persönlich würde mich aber für die globale "Countervariable" entscheiden.

    Grüße.
  • TutNichts schrieb:

    GetMaxPlayers()

    Nein bitte nicht.
    Pöses TutNichts.

    Ganz ganz schlecht innerhalb einer Schleife.
    Hat man dir während der Ausbildung nicht gesagt das man keine Funktionen innerhalb von Schleifenbedingungen nutzen sollte?
    Das ist inperfomant und falsch.

    Wenn du die Funktion nutzen willst, dann schnapp dir entweder eine globale Variable oder setz eine Variable beim initialisieren der Schleifenvariable

    Der beste Weg dafür ist und bleibt aber

    [pwn]#undef MAX_PLAYERS
    #define MAX_PLAYERS (SLOTANZAHL)[/pwn]

    oder alternativ die a_samp.inc bearbeiten

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

  • BlackAce schrieb:

    TutNichts schrieb:

    GetMaxPlayers()

    Nein bitte nicht.
    Pöses TutNichts.

    Ganz ganz schlecht innerhalb einer Schleife.
    Hat man dir während der Ausbildung nicht gesagt das man keine Funktionen innerhalb von Schleifenbedingungen nutzen sollte?
    Das ist inperfomant und falsch.

    Wenn du die Funktion nutzen willst, dann schnapp dir entweder eine globale Variable oder setz eine Variable beim initialisieren der Schleifenvariable

    Der beste Weg dafür ist und bleibt aber

    [pwn]#undef MAX_PLAYERS
    #define MAX_PLAYERS (SLOTANZAHL)[/pwn]

    oder alternativ die a_samp.inc bearbeiten

    Stimmt, das muss man mir nichtmal in der Ausbildung sagen: Das ist vorauszusetzen! :D
    Letztendlich ist das, ob du MAX_PLAYERS neu definierst oder doch GetMaxPlayers() an eine Variable übergibst, fast schon Geschmackssache. Letztendlich schließe ich mich BlackAce aber an, danke für die Korrektur! :)
  • Blackace ich weiß das du nur helfen willst aber nutz doch nicht beim erklären soviele fachbegriffe ^^
    oder erkläre diese wenigstens nicht viele vorallem keine anfänger können was mit initialisieren anfangen.
    Hab auch schon Antworten von dir gesehen wo es noch schwerere wörter waren.
    Naja wa nur nen Tipp kannste dir ans herz legen oder in die Tonne treten deine sache ^^

    Aber nu ma sone frage, wieso soll man denn keine funktion in eine schleife machen?
    mfg. eronor
  • Hey eronor,
    gerne versuche ich das ganze, was BlackAce beschreibt, etwas anfängerfreundlicher zu "übersetzen"! :)

    Er meint letztendlich, dass es nicht vernünftig ist, vor allem für mich als angehender Fachinformatiker Anwendungsentwicklung nicht, das ganze wie folgt zu lösen:
    [pwn]for(new i = 0; i < GetMaxPlayers(); x++)[/pwn]
    das sehe ich auch vollkommen ein, denn so wird jede "Durchschleifung" die Funktion "GetMaxPlayers()" aufgerufen: Und das ist heftig. Eine sauberere Lösung wäre gewesen (und das habe ich vorausgesetzt):
    [pwn]new slots = GetMaxPlayers();
    for(new i = 0; i < slots; x++)[/pwn]
    So wird der Wert von GetMaxPlayers() an "slots" übergeben, einmalig, und nun nicht jedes mal die Funktion aufgerufen: Wesentlich besser!

    Was nun aber BlackAce noch meint ist die in der a_samp.inc vorhandene Konstante "MAX_PLAYERS" quasi zu "undefinieren" und dann nochmal neu mit einem gewünschten Wert zu definieren, sodass der Standartwert quasi "überschrieben" wird.

    Wenn dir noch Fragen aufkommen, sag bescheid!