Message kommt 3 Mal :S

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

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

  • 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 3


    Aber 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.



    Hinweis: Keinen Kontakt über TeamViewer oder Skype !
    Grüßt den Fehlerklärbär von mir.
    Coming soon: Pawn-Café ( Concept-Sharing | Scripting-First-Aid )

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen