Nachricht wird oft doppelt angezeigt

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,
    ab und zu wird meine Nachricht InGame doppelt angezeigt manchmal sogar 3fach, ich weiß ehrlich gesagt nicht woran das Liegen kann. Nach einem Restart ist das ganze dann weg.


    Es ist nicht auf einen Befehl fixiert sondern kommt bei einen paar, sprich es kommt überall was mit dem Spielernamen Zutun hat z.b /a, /me, /m, Fraktionschat etc.


    Weiß jemand woran es liegen kann? ?(

  • Würde ich gerne, aber wovon genau? :)
    Weil ich denke es liegt an keinem Befehl sondern an irgendwas anderen..


    Aber hier mal der achat:


    COMMAND:a(playerid,params[])
    {
    if(ImTutorial[playerid] != 0)return SendClientMessage(playerid,GRAU,"Du kannst keine Befehle nutzen,da du im Tutorial bist.");
    if(GetPVarInt(playerid,"Eingeloggt") == 0)return SendClientMessage(playerid,GRAU,"Du bist nicht eingeloggt!");
    if(Spieler[playerid][pAWAYFROMKEYBOARD] == 1)return SendClientMessage(playerid,WRONGCMD,"Du bist im AFK-Modus und kannst somit keine Befehle nutzen."),SendClientMessage(playerid,WRONGCMD,"BENUTZE: /back");
    new text[91],string[128];
    if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,GRAU,"Du bist kein Teammitglied./Du hast nicht den jeweiligen Adminrang.");
    if(sscanf(params,"s[91]",text))return SendClientMessage(playerid,WRONGCMD,"BENUTZE: /a(dmin Chat) [Text]");
    if(strlen(text) > 90)return SendClientMessage(playerid,WRONGCMD,"BENUTZE: /a(dmin Chat) [Text darf maximal 90 Zeichen beinhalten]");
    format(string,sizeof(string),"%s %s: %s",Adminrang(playerid),Spieler[playerid][pName],text);
    SendAdminMessage(ORANGE,string);
    format(string,sizeof(string),"%s %s: %s",Adminrang(playerid),Spieler[playerid][pName],text);
    Log("Admin-Chatsqllog",string);
    return 1;
    }


    }
    stock SendAdminMessage(color,const string[])
    {
    ForEachPlayer(i)
    {
    if(IsPlayerConnected(i) && !IsPlayerNPC(i))
    {
    if(isPlayerAnAdmin(i,1)) SendClientMessage(i,color,string);
    }
    }
    return 1;
    }

  • SendAdminMessage stand doch da schon bereits.


    public OnPlayerCommandText(playerid,cmdtext[])
    {
    new string[128];
    format(string,sizeof(string),"Server: Der Befehl existiert nicht! %s (/hilfe)",cmdtext);
    return SendClientMessage(playerid,WEISS,string);
    }

  • Nutzen alle diese Befehle die "ForEachPlayer" Funktion in irgendeiner Art und Weise? Wenn ja, dann liegt es möglicherweise daran.


    So ziemlich viele ja, sprich wird fast überall verwendet so wie ich das nun gesehen habe, hier mal ein Befehl dort kannst du sehen wie es angewendet wird:


    COMMAND:restart(playerid,params[])
    {
    #pragma unused params
    if(ImTutorial[playerid] != 0)return SendClientMessage(playerid,GRAU,"Du kannst keine Befehle nutzen,da du im Tutorial bist.");
    if(GetPVarInt(playerid,"Eingeloggt") == 0)return SendClientMessage(playerid,GRAU,"Du bist nicht eingeloggt!");
    if(Spieler[playerid][pAWAYFROMKEYBOARD] == 1)return SendClientMessage(playerid,WRONGCMD,"Du bist im AFK-Modus und kannst somit keine Befehle nutzen."),SendClientMessage(playerid,WRONGCMD,"BENUTZE: /back");
    new string[128];
    if(!isPlayerAnAdmin(playerid,6))return SendClientMessage(playerid,GRAU,"Du bist kein GR Teammitglied./Du hast nicht den jeweiligen Adminrang.");
    getdate(tag,monat,jahr);
    gettime(stunde,minute,sekunde);
    ForEachPlayer(i)
    {
    if(IsPlayerConnected(i) && !IsPlayerNPC(i) && GetPVarInt(i,"Eingeloggt") == 1)
    {
    SaveAccount(i);
    }
    }
    OnGameModeSave();
    format(string,sizeof(string),"[%02d/%02d/%02d] [%02d:%02d:%02d] %s (Adminlevel: %i) hat den Server neu gestartet!",tag,monat,jahr,stunde,minute,sekunde,SpielerName(playerid),Spieler[playerid][pAdmin]);
    SendAdminMessage(GRUEN,string);
    format(string,sizeof(string),"Admin: %s (Adminlevel: %i) hat den Server gerestartet(Normrestart)!",Spieler[playerid][pName],Spieler[playerid][pAdmin]);
    Log("Restartssqllog",string);
    GameModeExit();
    return 1;
    }

  • Du kannst ja testweise mal in einem Command
    ForEachPlayer(i)
    zu
    for(i = 0; i<MAX_PLAYERS; i++)


    ändern.
    Falls "i" nicht definiert ist (ich denke du hast es global deklariert) setze noch ein "new" vor das i im for.


    Wenn es bei dem einen Befehl dann nicht mehr passiert, dann weißt du, dass es daran liegt, dann kannst du es bei allen Befehlen ändern.

  • i = 0; i<MAX_PLAYERS; i++)


    Ist ja ziemlich umständig, weil es fast überall eingebunden ist..
    Kann man hier irgendwas ändern?


    #define ForEachPlayer(%0) for(new index_%0=0,%0=ConnectedPlayerList[0];index_%0<ConnectedPlayers;index_%0++,%0=ConnectedPlayerList[index_%0])