Random mehrere Spieler auswählen

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


    Sagen wir es sind gerade 2 Spieler auf dem Server.
    Dann wird durch eine Random-Funktion 1 der 2 Spieler eine Variable zugewiesen (Sagen wir: Role[playerid] = 1; )
    Sollten allerdings 4 Spieler online sein, soll 2 dieser 4 eine Variable zugewiesen werden.
    Sollten allerdings 6 Spieler online sein, soll auch 2 dieser 6 eine Variable zugewiesen werden.


    Das versuche ich herauszufinden wie das geht.

  • Hier eine Möglichkeit:


    //Oben im Script:
    new Role[MAX_PLAYERS];


    //Und dann diese Funktion:
    for(new i,list[MAX_PLAYERS],idx; i<MAX_PLAYERS; i++) {
    if(IsPlayerConnected(i)) list[idx] = i,idx++;
    if(i == MAX_PLAYERS-1) {
    if(idx < 2) break;
    else if(idx == 2) Role[random(idx)] = 1;
    else {
    new tmp = random(idx),tmp2;
    Role[tmp] = 1;
    for(;;) {
    tmp2 = random(idx);
    if(tmp != tmp2) break;
    }
    Role[tmp2] = 1;
    }
    }
    }


    Dann hast du Role genauso wie du es wolltest ;)


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Danke schonmal :)


    Sollten allerdings 6 Spieler online sein, soll auch 2 dieser 6 eine Variable zugewiesen werden.


    Wie geht das dann damit?


    /e:
    Das ist mein derzeitiger Code:
    public startGame()
    {
    new tt=1,str[128];
    for(new i;i<MAX_PLAYERS;i++){
    if(IsPlayerConnected(i) && GetPVarInt(i,"Eingeloggt") == 0){
    if(isIn[i] == 1){
    for(new t;t<i;t++)
    role[tt] = 1;
    format(str,sizeof str,"Rolle: Traitor");
    PlayerTextDrawSetString(tt, igInfo0[tt], str);
    SendClientMessage(tt,COLOR_LIGHTBLUE,"Du bist ein Traitor!");
    if(tt > 1){ SendClientMessage(tt,COLOR_LIGHTBLUE,"Du musst mit deinen Teamkameraden alle Innocents töten um zu gewinnen!"); } else { SendClientMessage(tt,COLOR_LIGHTBLUE,"Du hast keine Teamkameraden!"); }
    SendClientMessage(tt,COLOR_LIGHTBLUE,"Viel Glück!");
    }
    role[i] = 0;
    format(str,sizeof str,"Rolle: Innocent");
    PlayerTextDrawSetString(i, igInfo0[i], str);
    SetSpawnInfo(i,0,skin[i],20.6069,1545.0732,16.2459,176.940,0,0,0,0,0,0);
    SpawnPlayer(i);
    roundstarted = 1;
    round += 1;
    }
    }
    }
    return 1;
    }

  • Sollten allerdings 6 Spieler online sein, soll auch 2 dieser 6 eine Variable zugewiesen werden.


    Schau dir meine Funktion doch an...das ist schon impliziert.


    Kannst du vielleicht auch was zu deinem Code schreiben...ich weiß nicht so recht, was du jetzt von mir willst, was ich mit deinem Code soll?!


    mfg. :rolleyes:

    ast2ufdyxkb1.png


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

  • Naja, bei deinem Code versteh ich beim ersten hingucken nur Bahnhof o.o


    format(str,sizeof str,"Rolle: Traitor");
    PlayerTextDrawSetString(tt, igInfo0[tt], str);
    SendClientMessage(tt,COLOR_LIGHTBLUE,"Du bist ein Traitor!");
    if(tt > 1){ SendClientMessage(tt,COLOR_LIGHTBLUE,"Du musst mit deinen Teamkameraden alle Innocents töten um zu gewinnen!"); } else { SendClientMessage(tt,COLOR_LIGHTBLUE,"Du hast keine Teamkameraden!"); }
    SendClientMessage(tt,COLOR_LIGHTBLUE,"Viel Glück!");
    Das muss nun an alle "Random-Spieler" gesendet werden. TT ist dabei ein Random spieler.
    Wie? Ist schon spät O:


    /e Oder sag mir einfach wer die Random Spieler sind (Variablen da, tmp2 oder so)

  • Naja, bei deinem Code versteh ich beim ersten hingucken nur Bahnhof o.o


    Schau dir einfach nur an, wo Role in dem Code steht...


    Dann siehst du ja, wie ich playerid nutze..bzw was du dafür einsetzen musst...


    Das kannst du jetzt für dich einsetzen...


    oder willst du lieber so eine Funktion:



    //Nutzung:
    new a,b;
    GetRandomPlayer(a,b);
    //in a und b steht dann die playerid von einem random Spieler!
    //Wenn 2 Leute online sind, gibt es nur ein Ergebnis und das steht in a
    //Sobald du aber 2 Ergebnisse haben willst, steht es in a und b
    //Wenn nur 1 Ergebnis da ist, ist b = 0



    stock GetRandomPlayer(&first, &sec) {
    for(new i,list[MAX_PLAYERS],idx; i<MAX_PLAYERS; i++) {
    if(IsPlayerConnected(i)) list[idx] = i,idx++;
    if(i == MAX_PLAYERS-1) {
    if(idx < 2) break;
    else if(idx == 2) return first = list[random(idx)],0;
    else {
    first = list[random(idx)];
    for(;;) {
    sec = list[random(idx)];
    if(first != sec) return 0;
    }
    }
    }
    }
    return 0;
    }


    Vielleicht hilft dir das ja ^^


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Sieht schon besser aus :D


    Achso, wenn 8 Spieler online sind, sollen 3 "Random" sein ich hatte mich zu unverständlich ausgedrückt :o
    Hier mal ein Array, wo steht wie viele Spieler online sein müssen, und wie viele dann Random werden:
    new Random[][] = {
    {2,1},
    {4,2},
    {6,2},
    {8,3},
    {10,4},
    {12,5},
    {14,6},
    {16,8},
    {18,9},
    {20,10},
    {22,11},
    {24,12},
    {26,13},
    {28,14},
    {30,15},
    {32,16},
    {34,17},
    {36,18},
    {38,19},
    {40,20}
    //Und so weiter
    };
    Also das ab 16 Spieler die Hälfte "Random" wird :D

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Also das ab 16 Spieler die Hälfte "Random" wird


    Ja...das ändert das ganze Prinzip meinste nicht :wacko:


    Dann kannst du das nicht so machen, mit einer Funktion wo ich dir Werte zurück gebe...das wäre dann irgendwann bei 200 Spielern lächerlich :D


    Sprich, du musst das in der Schleife selbst deinen Code verarbeiten.


    Die Frage ist jetzt nur, was genau willst du denn machen, wenn du eine random Spielerid hast...zeig mal deinen Code...und kommentier den mal bitte!


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Die Frage ist jetzt nur, was genau willst du denn machen, wenn du eine random Spielerid hast...zeig mal deinen Code...und kommentier den mal bitte!


    role[tt] = 1;
    format(str,sizeof str,"Rolle: Traitor");
    PlayerTextDrawSetString(tt, igInfo0[tt], str);
    SendClientMessage(tt,COLOR_LIGHTBLUE,"Du bist ein Traitor!");
    if(tt > 1){ SendClientMessage(tt,COLOR_LIGHTBLUE,"Du musst mit deinen Teamkameraden alle Innocents töten um zu gewinnen!"); } else { SendClientMessage(tt,COLOR_LIGHTBLUE,"Du hast keine Teamkameraden!"); }
    SendClientMessage(tt,COLOR_LIGHTBLUE,"Viel Glück!");
    "tt" ist hierbei immer eine Randomid


    edit: Push..