SendClientMessageToAll wird wiederholt bis Chat voll ist

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
  • Hallo,
    ich habe folgendes Problem:
    Ich habe einen Respawn befehl, der nur die Fahrzeuge respawnt, die leer sind. Bloß wenn ich Ingame /respawn eingebe, werden die Fahrzeuge zwar respawnt, aber der ganze Chat wird vollgespamt. Ich möchte aber, dass die Nachricht nur 1 Mal kommt. Hier ist mein Befehl:

    //------------------------------------------/respawn------------------------------------------
    if (strcmp("/respawn", cmdtext, true, 10) == 0)
    {
    if(IsPlayerAdmin(playerid))
    {
    for(new v=0; v<MAX_VEHICLES; v++)
    {
    if(IsVehicleEmpty(v))
    {
    SetVehicleToRespawn(v);
    new string[128];
    new pName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,pName,24);
    format(string,128,"* %s hat alle unbenutzten Fahrzeuge respawnt.",pName);
    SendClientMessageToAll(COLOR_YELLOW,string);

    }
    }
    }
    else SendClientMessage(playerid,COLOR_BRIGHTRED,"* Du bist kein Administrator.");
    return 1;
    }


    Und hier ist der Stock:



    stock IsVehicleEmpty(vehicleid)
    {
    for(new i =0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(IsPlayerInVehicle(i,vehicleid)) return 0;
    }
    return 1;
    }


    Ich vermute mal, dass das an dem return liegt, aber ich weiß nicht, wo ich es hinsetzen soll. Wenn ich es unter SendClientMessageToAll setze, wird die Nachricht nur 1 Mal geschrieben, aber die Fahrzeuge respawnen nicht.
    Ich hoffe ihr könnt mir helfen.


    MfG
    OneStyleOnly

  • Der Grund ist die for-Schleife.
    Sie wiederholt sich bis der erste Parameter so groß ist wie der zweite.
    Also wird diese Funktion offt durchgespielt.
    Daher musst du das SendClientMessage außerhalb der for-Schleife stehen.
    Daher mach das format usw. unter der for-Schleife rein dann kommt es nur einmal.

  • Das SendClientMessageToAll solltest du außerhalb deiner for-Schleife benutzen, da er es sonst sooft sendet wie die Schleife hochzählt.



    //EDIT:
    if (strcmp("/respawn", cmdtext, true, 10) == 0)
    {
    if(IsPlayerAdmin(playerid))
    {
    for(new v=0; v<MAX_VEHICLES; v++)
    {
    if(IsVehicleEmpty(v))
    {
    SetVehicleToRespawn(v);
    }
    }
    new string[128], pName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,pName,24);
    format(string,128,"* %s hat alle unbenutzten Fahrzeuge respawnt.",pName);
    SendClientMessageToAll(COLOR_YELLOW,string);
    }
    else SendClientMessage(playerid,COLOR_BRIGHTRED,"* Du bist kein Administrator.");
    return 1;
    }
    mfg Lambo