Bestimmte Spieler moven/joinen [Dringend]

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
  • Hey,


    habe mal wieder ne klene Frage;
    bin grade dabei ja eine art painball area zu scripten auf besonderer ebene :D
    Nun meine Frage ist wie kann ich das machen wenn alle spieler bereit sind bzw wenn einer auf bereit clickt dann wird bei der anzahl an spielern(variable) die bereit sind +1gesetzt und wenn jedenfalls alle spieler bzw die anzahl die in der variable stehen die gejoint sind,
    dass dann halt nur die spieler die in dieser pb arena gejoint sind zum startpunkt gemovt werden? also z.b. es sind 4 spieler die mitmachen und dass automatisch nur diese 4 spieler zu einem bestimmten im script festgelegtem ort teleportiert weden.



    Ich hoffe mir kann einer helfen ;D


    MfG


    ElektroFreak

  • Du könntest es so machen das du in eine pvar (sind langsamer als ein Spieler bezogenes enum kannst ja das verwenden oder einfach ne variable oben im Script mit MAX_PLAYERS) bzw wenn du nur ein paintball hast kannst ja auch ne boolische variable setze wenn sie bereit sind die einfach auf true setzen und dann bei der telepprtation eine for schleife und überprüfen ob die variable auf true is und sie dann teleportieren:)
    Kann dir leider keine scriptbeispiele geben da ich am Handy bin

  • Also:


    oben ins scrip

    Code
    new bool:paintball[MAX_PLAYERS];

    dann bei dem befehl bereit:


    [code]paintball = true;
    new count;
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(!paintball[i])continue;
    count++;
    }
    if(count==4) // Die Anzahl an spielern die geportet werden sollen
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(!paintball[i])continue;
    SetPlayerPos....etc
    }
    }
    ist glaub nciht genau das was du willst aber mal ein anfang

  • Nexor:
    Für Schleifen, die alle Spieler durchgehen empfehle ich [wiki]GetPlayerPoolSize[/wiki], der Performance halber.



    ===============================================================


    So ungefähr würd ich das machen.


  • Bei GetPlayerPoolSize musst du den maximalen Wert auch mitnehmen.
    for(new index = 0, poolSize = GetPlayerPoolSize(); index < poolSize; index++){
    zu
    for(new index = 0, poolSize = GetPlayerPoolSize(); index <= poolSize; index++){


    Sonst nimmt er die höchste online ID nicht mit.

  • habe jz ne längere zeit nicht gescriptet wegen realife aber wie genau müsste ich das machen dass wenn 8spieler von 8drin sind dann ein 1minute countdown kommt und dass dann die spieler die bereit sind die z.b. /bereit gemacht machen zu "x" gemovt werden? und das dass auch beu 2spielern geht?

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • @Jeffry ich habe noch keinen code bzw wollte nur wissen wie das geht dass halt nur die spieler gemovt werden die z.b. /bereit gemacht haben. und dass wenn z.b. 2spieler bereit bereit gemacht haben dass dann das spiel in 2min beginnt aber in der zeit noch andere /bereit machen können. und nur die die bereit sind sollen zu ihrem spawn gemovt werden bzw eine coordination...

  • Du brauchst dazu ein paar Dinge.


    1. Deinen Admin(?) Befehl mit dem du das Event starten willst, nennen wir ihn mal /startevent


    2. Den Befehl /bereit


    (ich schreibe sie dir jetzt absichtlich nicht, da du vielleicht selber drauf kommst und ich in ocmd schreibe und nicht weiß wie du das machst.)


    Dann brauchst du ein paar Globale/Spieler Variablen


    Code
    new eventexists;
    new playerready[MAX_PLAYERS];


    In deinem Admin Befehl setzt du dann "eventexists" auf 1 -> Das Event existiert


    Im Befehl /bereit musst du abfragen ob "eventexists" auf 1 steht, ansonsten soll man ihn nicht ausführen können.
    Und dort setzt du dann playerready[playerid] auf 1.


    Dann kannst du ihn entweder direkt zu dem Event teleportieren (SetPlayerPos) oder du machst das mit einem 3. Befehl "/startevent" bei dem du mit einer Schleife abfragst welche Spieler denn /bereit eingegeben haben (bei wem playerready[playerid] auf 1 steht):


    Code
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i))continue;
    if(playerready[i] == 0)continue;
    playerready[i] = 0;
    //Spieler zum Event teleportieren
    }

    Dann kannst du noch sobald 2 Spieler dort sind (Globale Variable wieder) einen Timer für 2 Minuten starten. Wenn das Event beginnt, oder keine Spieler mehr teilnehmen dürfen musst du "eventexists" natürlich wieder auf 0 setzen.



    Das ist es mal sehr grob, hoffe ich hab in der Schnelle keinen Fehler drinnen in der Erklärung

  • @Simon2202 DAAANK!!! das mit der for abfrage hat mich noch gefehlt zu lernen! Danke! ist das genauso oder wie mache ich das wei das soll ja wie eine pb arena seins wo man reingeht und dann sobald 2drin sind eine timer startet und in dieser zeit muss man sich bereit machen aber andere sollen noch in der timer laufzeit dazu kommen können und wenn das spiel startet kann keiner mehr bereit machen und die die bereit sind sollen dann zu pos x y z automatisch gemovt werden also ohne befehl

  • Auch nicht schwer:


    Ich schätze mal die PaintBall Arena ist bei dir ein Bestimmter bereich den du gemappt hast oder die du anderweitig betrittst.
    Du erstellst 3 Globale Variablen:


    Code
    new paintball[MAX_PLAYERS];
    new paintballplayers;
    new gamestartet;



    Diese Variable musst du auf 1 setzen wenn ein Spieler die Paintball Halle betritt.


    Dann hast du den Befehl /bereit in dem du dann den Timer setzen musst:



    Und Schlussendlich noch den Timer:



    Es SOLLTE passen, ist ungetestet, falls ein Fehler drinnen ist einfach sagen.

    Einmal editiert, zuletzt von Simon2202 ()

  • ja es geht aber wenn spieler 1 bereit macht und dann spieler 2 dann kommt bei spieler 1 wenn der nochmal bereit macht wieder "du bist nun bereit" anstatt "du bist bereits bereit" . bevor spieler 2 sich auch bereit gemacht hat stand aber da dass dieser bereits bereit wär
    @Simon2202

  • Sorry, da gehört natürlich noch eine Abfrage rein ob er schon bereit ist:



    Btw: du musst dort wo du sie dann teleportieren lässt bzw das spiel startest noch "playerready[i]" auf 0 setzen hab ich oben vergessen.