Hallo! Ich habe eine Frage, gibts is einen Befehl oder Befehle, mit dem dir ID des Spielers mit der höchsten Score auswählt? Und es muss auswählen, wenn mehrere Spieler eine gleich hohe Score haben und mehrere Erster sind. Danke!
ID des "Besten" ermitteln
- Sim
- Geschlossen
- Erledigt
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
-
-
if(strcmp(cmdtext,"/bester",true)==0) {
new s[128], asc, name[MAX_PLAYER_NAME], sc;
for(new i=0; i<MAX_PLAYERS; i++) {
if(IsPlayerConnected(i)) {
sc=GetPlayerScore(i);
if(sc>=1) {
if(asc==0) {
GetPlayerName(i,name,sizeof(name));
asc=sc;
format(s,sizeof(s),"%s ID %d",name,i); }
else {
if(sc>asc) {
GetPlayerName(i,name,sizeof(name));
asc=sc;
format(s,sizeof(s),"%s ID %d",name,i); }
else if(sc==asc) {
GetPlayerName(i,name,sizeof(name));
format(s,sizeof(s),"%s, %s ID %d",s,name,i); }}}}}
if(asc==0) { format(s,sizeof(s),"Niemand hat einen Score über 0"); }
SendClientMessage(playerid,FARBE,s);
return 1;
}
//EDIT:Ach sheiße, du wolltest ja die ID von dem Typen^^
//EDIT2: Hast du zufällig sowas wie strget oder strtok deklariert?
PS: Das mitm Einrücken bekomm ich hier i-wie nicht so ganz hin... -
Was soll passieren, wenn es mehrere mit der gleichen Score gibt? Irgeneinen davon auswählen oder wie?
Um das zu lösen, musst du einen Schleife benutzen, die die Score aller Spieler kontrolliert mit
GetPlayerScore(playerid);KEKS: Dein Code ist unlesbar,zumindest für mich. Einrücken würde den anderen entgegenkommen
-
Also ich habe woanders ein Object, das sich immer auf jemanden zubewegt (zu ID = 0). Und dann wollte ich, dass es sich immer zum besten bewegt, also zu ID = (id des höchsten).
Mein Problem ist also, dass ich etwas brauche, dass ständig oder im kleinen Interval die id ermittelt und sie mit meiem im script verwendeten "ID" gleichsetzt, damit ich das weiter im script verwenden kann. Ich hoffe ihr versteht was ich meine.
-
Aber dann kann es es ja nur zu dem Besten bewegen und nicht zu allen Besten
stock Bester() {
new asc, sc, be;
for(new i=0; i<MAX_PLAYERS; i++) {
if(IsPlayerConnected(i)) {
sc=GetPlayerScore(i);
if(sc>=1) {
if(asc==0) {
be=i;
asc=sc; }
else {
if(sc>asc) {
asc=sc;
be=i; }}}}}
if(asc==0) { return -1; }
return be;
}
Du verwendest da dann z.b. so:
new ID=Bester();
if(ID!=-1) {
Denn wenn keiner einen Score über 0 hat, dann gibt diese Funktion -1 wieder -
Deine Funktion funktioniert, wenn jemand eine positive Score hat. Wenn alle negative haben, nimmt er alle als 0 an und geht auf die vorher definierte id.
-
Dann halt so:
stock Bester() {
new asc=-99999, sc, be;
for(new i=0; i<MAX_PLAYERS; i++) {
if(IsPlayerConnected(i)) {
sc=GetPlayerScore(i);
if(sc>asc) {
asc=sc;
be=i; }}}
return be;
} -
Alles klar! Funktioniert! Könnt ihr mir auch noch eben machen, dass für alle im Chat steht, wer Erster ist? Danke sehr!
-
if(strcmp(cmdtext,"/bester",true)==0) {
new typ=Bester(), name[MAX_PLAYER_NAME], s[100];
GetPlayerName(typ,name,sizeof(name));
format(s,sizeof(s),"%s ist der Beste",name);
SendClientMessageToAll(FARBE,s);
return 1;
} -
Sorry, ich hab mich falsch ausgedrückt
Ich dachte daran, dass im Chat eine Nachricht erscheint, sobald jemand anderes erster ist, also wenn der erste Platz den Spieler wechselt.
-
-
Wohin muss ich das im Script einfügen?
-
Das muss unter
public OnPlayerCommandText()
Aber kann man auch das if für den befehl durch ein if(ID des Besten (be) ändert sich) ersetzen? Ich kenne keinen Befehl dafür.
-
Ich es weiß, es ist schon ziemlich lange her, aber ich habe die Sufu genutzt und bin hier rauf gestoßen, ist es möglich den Namen und den besten Score der besten 3 Spieler aus einer .ini Datei auszulesen?
Bei mir ist Score so gespeichert:
Name=PrinceOfBelvedair (z.B.)
Score=5 (z.B.)Es wäre nett wenn mir jemand weiter helfen könnte
-
breadfish.de
Hat das Thema geschlossen.