Hab ein Problem:
Ich wollte mir einen Stock machen, um allen im Bus zu sagen: Nächster Halt: ...
Jedoch bekomm ich diese Nachricht selbst 3 Mal...
ocmd:test3(playerid, params[])
{
if(GetPVarInt(playerid, "LoggedIn") == 0) return SendClientMessage(playerid, GRAU, "Du musst dich vorher einloggen.");
for(new i=0; i<sizeof(Bus); i++)
{
new vehicleid;
vehicleid=GetPlayerVehicleID(playerid);
if(GetVehicleModel(vehicleid) != 431) return SendClientMessage(playerid, GRAU, "Du bist in keinem Bus.");
SetPVarInt(playerid, "Jobfahrzeug", GetPlayerVehicleID(playerid));
RunningCheckpoint[playerid]= 11;
NaechsteHaltestelle(playerid, "AmmunationLS");
SetPlayerCheckpoint(playerid, HS_BBH2, 3);
}
return 1;
}stock NaechsteHaltestelle(playerid, haltestelle[])
{
for(new i=0; i<GetMaxPlayers(); i++)
{
new vid, str[128];
vid = GetPlayerVehicleID(playerid);
if(!IsPlayerConnected(i)) continue;
if(GetPVarInt(i, "LoggedIn") == 0) continue;
if(!IsPlayerInAnyVehicle(i)) continue;
if(GetPlayerVehicleID(i) != vid) continue;
format(str, sizeof(str),"Nächste Haltestelle: %s", haltestelle);
SendClientMessage(i, HELLBLAU, str);
}
return 1;
}
Habe keinerlei Errors/Warnings. Bekomme aber die Message(InGame) aber 3 Mal.
Message kommt 3 Mal :S
- jomotest9
- Geschlossen
- Erledigt
-
-
Versuch mal deine for schleife zu ändern.
Von:
for(new i=0; i<GetMaxPlayers(); i++)
Auf:
for(new i=0; i <= MAX_PLAYERS; i++) -
for(new i=0; i<sizeof(Bus); i++) = führe die Schleife aus solange der Wert I den Wert von Bus erreicht hat
heißt also sind 3 User im Bus, wird die Schleife 3x ausgeführt.
Lg
-
Mach es bloß nicht so wie D4rkCl3ric es geschrieben hat. Hat a) absolut nichts mit dem Problem zu tun und b) führt es nur zu Problemen. D4rkCl3ric,du solltest dir nochmal Arrays und Schleifen durchlesen.
for(new i=0; i<sizeof(Bus); i++)
{
new vehicleid;
vehicleid=GetPlayerVehicleID(playerid);
if(GetVehicleModel(vehicleid) != 431) return SendClientMessage(playerid, GRAU, "Du bist in keinem Bus.");
SetPVarInt(playerid, "Jobfahrzeug", GetPlayerVehicleID(playerid));
RunningCheckpoint[playerid]= 11;
NaechsteHaltestelle(playerid, "AmmunationLS");
SetPlayerCheckpoint(playerid, HS_BBH2, 3);
}
Liegt bestimmt an dieser Schleife. Wozu du sie überhaupt brauchst, kommt aus dem Code nicht mal hervor. Denn das i verwendest du dort sowieso nie. -
Keine der Antworten klappt
Die Message kommt immernoch 3 mal -
Aus welchem Grund führt meine Schleife zu Problemen? Das ist im Grunde genommen so gut wie das gleiche nur dass die Schleife so lange läuft so viele User auf dem Server als MAX_PLAYERS definiert wurden
-
for(new i=0; i <= MAX_PLAYERS; i++)
Angenommen MAX_PLAYERS ist 500.
Dann läuft die Schleife solange,wie i kleiner oder gleich 500 ist.
500 ist aber definitiv keine gültige ID. Auch wäre es kein gültiger Index bei einer Array Größe von MAX_PLAYERS ( Denn : 0 - ( MAX_PLAYERS - 1 ) ).
Die Schleife macht nämlich so wie du sie zeigst,501 Durchgänge ... Nicht 500.
for(new i = 0 ; i < 10 ; i ++) { } // 10 Durchgänge
for(new i = 0 ; i <= 10 ; i++) {} // 11 Durchgänge
Am Ende würdest du ein "index out of bounce" haben.jomotest9,
Dann machst du es falsch.Du musst diese Schleife auch entfernen:
for(new i=0; i<sizeof(Bus); i++)
Falls du dir wirklich sicher bist,dass du es auch entfern hast, dann poste doch einfach mal deinen kompletten Befehl und die Deklaration von der Variable Bus. -
Bus[0]=AddStaticVehicle(431,1063.7821,-1775.5604,13.4402,270.7532,0,0); // Bus 1
Bus[1]=AddStaticVehicle(431,1063.6100,-1769.5901,13.4971,270.3851,0,0); // Bus 2
Bus[2]=AddStaticVehicle(431,1063.8754,-1763.8242,13.4992,268.7836,0,0); // Bus 3Aber was hat das mit dem Bus zu tun? Es geht hier um den Stock NaechsteHaltestelle.
ocmd:test3(playerid, params[])
{
if(GetPVarInt(playerid, "LoggedIn") == 0) return SendClientMessage(playerid, GRAU, "Du musst dich vorher einloggen.");
for(new i=0; i<sizeof(Bus); i++)
{
new vehicleid;
vehicleid=GetPlayerVehicleID(playerid);
if(GetVehicleModel(vehicleid) != 431) return SendClientMessage(playerid, GRAU, "Du bist in keinem Bus.");
SetPVarInt(playerid, "Jobfahrzeug", GetPlayerVehicleID(playerid));
RunningCheckpoint[playerid]= 11;
NaechsteHaltestelle(playerid, "AmmunationLS");
SetPlayerCheckpoint(playerid, HS_BBH2, 3);
}
return 1;
}stock NaechsteHaltestelle(playerid, haltestelle[])
{
for(new i=0; i <MAX_PLAYERS; i++)
{
new vid, str[128];
vid = GetPlayerVehicleID(playerid);
if(!IsPlayerConnected(i)) continue;
if(GetPVarInt(i, "LoggedIn") == 0) continue;
if(!IsPlayerInAnyVehicle(i)) continue;
if(GetPlayerVehicleID(i) != vid) continue;
format(str, sizeof(str),"Nächste Haltestelle: %s", haltestelle);
SendClientMessage(i, HELLBLAU, str);
}
return 1;
} -
Du hast 3 Busse, zählst dann mit der schleife durch und lässt jedesmal das stock aufrufen.
Also: --> Die Schleife löst jedesmal, unabhängig davon, ob du die Zählervariable "i" verwendest oder nicht, die Ausgabe von "NaechsteHaltestelle(..)" aus.
Damit diese Messages (ausgelöst durch aufrufen des stocks) nurnoch einmal ausgegeben werden, entferne doch die zuvor,
wie auch bereits geschrieben, sinnlose for-schleife. -
Danke, habs verstanden.
-
breadfish.de
Hat das Thema geschlossen.