Hi,
ich wollte mal wissen, ob es möglich ist, Random mehrere Spieler auszuwählen.
lg
Hi,
ich wollte mal wissen, ob es möglich ist, Random mehrere Spieler auszuwählen.
lg
Kannst du mal deine Frage näher umschreiben? Was verstehst du unter auswählen?
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.
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.
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.
Sieht schon besser aus
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
Sicher dass das so sein soll? Dann hast du ja 2 Teams mit 3 Leuten und eins mit 2.
Sicher dass das so sein soll? Dann hast du ja 2 Teams mit 3 Leuten und eins mit 2.
2 Teams. Eins mit 3, das andere mit 2 richtig.
Keine Angst soll so sein
Also das ab 16 Spieler die Hälfte "Random" wird
Ja...das ändert das ganze Prinzip meinste nicht
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
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.
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..