/d Chat frage

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
  • Hast du nen Adminchat ? Wenn ja, das gleiches Prinzip.
    Schleife mache, abfragen ob i in der Fraktion XY ist und dann die Message senden.

  • Hier ein typsicher Adminchat stock
    stock SendAdminMessage(color,const string[])
    {
    for(new i; i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i))
    {
    if(isPlayerAnAdmin(i,1))
    {
    SendClientMessage(i, color, string);
    }
    }
    }
    return 1;
    }


    Den kannst du dementsprechent ändern. :thumbup:


    Und wenn du nen IsPlayerAnAdmin oder so stock hast, kannst du den auch ändern ihn zb. IsPlayerStaatsFraktion etc PP

  • Naja wenn du das ganze mit ocmd machst ist es recht einfach:

    • Prüfe ob der Spieler der den Befehl eingibt in den richtigen Fraktionen ist
    • Prüfe mit sscanf, ob die Parameter richtig sind
    • Bestimme die Ränge der Person, die schreibt
    • nimm eine for Schleife und schicke die Nachricht allen mit der richtigen Fraktion

    Ich habe das ganze mit Dynamischen Rangsystem gemacht, sodass man die Ränge über ein Control Panel ändern kann.
    ocmd:d(playerid,params[])
    {
    if(SpielerInfo[playerid][pMember] >=1 && SpielerInfo[playerid][pMember] <= 4 || SpielerInfo[playerid][pLeader] >= 1 && SpielerInfo[playerid][pLeader] <= 4 || SpielerInfo[playerid][pMember] == 12 || SpielerInfo[playerid][pLeader] == 12)
    {
    new text[256];
    if(sscanf(params,"s",text))return SendClientMessage(playerid,COLOR_LIGHTBLUE,"INFO: Verwende /d [Text]");
    if(SpielerInfo[playerid][pMember] >= 1)
    {
    new query[128], frak, rang;
    frak = SpielerInfo[playerid][pMember];
    rang = SpielerInfo[playerid][pRang];
    format(query,sizeof(query),"SELECT Rangname FROM rangs WHERE fraktion = '%i' AND rang = '%i'",frak,rang);
    mysql_function_query(dbhandle,query,true,"DChatRang","is",playerid,text);
    return 1;
    }
    else if(SpielerInfo[playerid][pLeader] >= 1)
    {
    new query[128], frak, rang;
    frak = SpielerInfo[playerid][pLeader];
    rang = 7;
    format(query,sizeof(query),"SELECT Rangname FROM rangs WHERE fraktion = '%i' AND rang = '%i'",frak,rang);
    mysql_function_query(dbhandle,query,true,"DChatRang","is",playerid,text);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Es ist ein Fehler aufgetreten. Bitte wende dich an einen Supporter.");
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Das können nur Staatsbeamte!");
    }
    return 1;
    }
    public DChatRang(playerid,text[256])
    {
    new Rang[64],Name[64],CText[256];
    cache_get_field_content(0,"Rangname",Rang,dbhandle,sizeof(Rang));
    GetPlayerName(playerid,Name,sizeof(Name));
    format(CText,sizeof(CText),"%s %s: %s",Rang,Name,text);
    for(new i=0;0<GetMaxPlayers();i++)
    {
    if(SpielerInfo[i][pMember] >=1 && SpielerInfo[i][pMember] <= 4 || SpielerInfo[i][pLeader] >= 1 && SpielerInfo[i][pLeader] <= 4 || SpielerInfo[i][pMember] == 12 || SpielerInfo[i][pLeader] == 12)
    {
    SendClientMessage(i,0xFF7800FF,CText);
    }
    }
    return 1;
    }
    Ist allerdings mit MySQL

  • Ich habe 2 errors ocmd:d(playerid,params[])
    {
    new string[128];
    if(sscanf(params,"s",string2))return SendClientMessage(playerid,rot,"INFO: /d [Text]");
    format(string,sizeof(string),"* %s: %s",PlayerName(playerid),string2);
    SendCopMessage(rot,string);
    return 1;
    }
    C:\Dokumente und Einstellungen\Maurice\Desktop\Maurice RolePlay\gamemodes\CaR.pwn(595) : error 017: undefined symbol "string2"
    C:\Dokumente und Einstellungen\Maurice\Desktop\Maurice RolePlay\gamemodes\CaR.pwn(596) : error 017: undefined symbol "string2"


    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Errors.


    // hier ist auch was falsch stock SendCopMessage(color,const string[])
    {
    for(new i; i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i))
    {
    if(SetPVarInt,"Cop",i,1) // Das hier
    {
    SendClientMessage(i, color, string);
    }
    }
    }
    return 1;
    }

  • if(sscanf(params,"s",string2))return SendClientMessage(playerid,rot,"INFO: /d [Text]");


    Du hast kein new string2

  • So geht nun nur noch den letzten fehler: stock SendCopMessage(color,const string[])
    {
    for(new i; i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i))
    {
    if(SetPVarInt,"Cop",i,1)
    {
    SendClientMessage(i, color, string); //HIER
    }
    }
    }
    return 1;
    }
    C:\Dokumente und Einstellungen\Maurice\Desktop\Maurice RolePlay\gamemodes\CaR.pwn(1065) : error 076: syntax error in the expression, or invalid function call
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.

  • Hab so schon hinbekommen.


    Nächstes:


    Wenn ich im normal chat einfach t schreibe kommt es 2mal einmal
    Maurice.: t
    Maurice.: t


    public OnPlayerText(playerid, text[])
    {
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerInRangeOfPoint(i,30.0,x,y,z))
    {
    new string[200];
    format(string,sizeof(string),"%s sagt: %s",PlayerName(playerid), text);
    SendClientMessage(i,0xF0F0F0FF, string);
    }
    }
    return 1;
    }

  • lass das return 1; stehen mach aber davor (also in den geschweiften klammern) ein return 0 hin

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

  • Schreib es so, dann ist es besser:


    public OnPlayerText(playerid, text[])
    {
    new Float:Q[3],string[128],i;
    GetPlayerPos(playerid,Q[0],Q[1],Q[2]),format(string,sizeof(string),"%s sagt: %s",PlayerName(playerid), text);
    for(; i<MAX_PLAYERS; i++) {
    if(!IsPlayerConnected(i) || !IsPlayerInRangeOfPoint(i,30.0,Q[0],Q[1],Q[2])) continue;
    SendClientMessage(i,0xF0F0F0FF, string);
    }
    return 0;
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S