Naricht zu einer besimmten Fraktion senden?

  • Kurz und knapp:


    Mit einer Schleife alle Spieler ansprechen und abfragen, in welcher Fraktion sie sin.
    Ist der Spieler in der selben fraktion wie man selbst, Nachricht an ihm senden.

    Das kann man, wenn man nu eine NAchricht z.B. als Admin an einer Fraktion schicken will dann auch so machen,
    mit einem Befehl, dass man auch die Frakid eingeben muss und dann nur an Spieler gesendet wird, die die gleiche wie vom Admin eingegebene Frakid hat.

    [pwn]
    ocmd:f(playerid,params[])
    {
    if(GetPVarInt(playerid, "Fraktion") == 0)return SendClientMessage(playerid, 0x0087FFFF, "Du bist in keiner Fraktion!"); //Ist der Spieler in einer Fraktion? Abfrage ggf. anpassen!
    new text[128];
    if(sscanf(params, "s", text))return SendClientMessage(playerid, 0x0087FFFF, "Benutzung: /f [TEXT]");
    for(new i = 0; i < GetMaxPlayers(); i++) // Schleife für die Abfrage aller Spieler
    {
    if(IsPlayerConnected(i)) // Ist die gerade abgefragte ID online?
    {
    if(GetPVarInt(playerid, "Fraktion") == GetPVarInt(i, "Fraktion")) // Nun abfragen, ob derjenige, an dem die Nachricht gesendet wird die gleiche Fraktion hat, wie man selber Abfrage ggf. anpassen!
    {
    new string[128];
    format(string,sizeof(string),"[Fraktionschat] %s: %s", SpielerName(playerid), text); // formatieren, "SpielerName(playerid)" durch eigene NAmensabfrage ersätzen
    SendClientMessage(i, 0x0087FFFF, string); // An Fraktionsmitglied senden
    }
    }
    }
    return 1;
    }
    [/pwn]

    PS: Ähnliche Frage wurde öfters gestellt, siehe z.B. "http://easy-scripting.net/index.php?page=Thread&threadID=931", was man eig. nur abändern müsste ;)
    Gruß,
    Dennis
  • Ach so,
    das hätte man mit erwähnen sollen :rolleyes:


    Unter OnPlayerDeath:
    [pwn]
    for(new i = 0; i < GetMaxPlayers(); i++) // Schleife für die Abfrage aller Spieler
    {
    if(IsPlayerConnected(i)) // Ist die gerade abgefragte ID online?
    {
    if(IsPlayerFraktion(i, MEDIC)) // Fraktionsabfrage für Medic ergänzen
    {
    new string[128];
    format(string,sizeof(string),"[Unfallsmeldung]: %s ist gestorben!", SpielerName(playerid)); // formatieren, "SpielerName(playerid)" durch eigene Namensabfrage ersätzen
    SendClientMessage(i, 0x0087FFFF, string); // An alle Medics senden
    }
    }
    }
    [/pwn]

    Gruß,
    Dennis
  • Stimmt,
    solange man "i" nicht in der formatierung braucht, kann man dies,
    da der Text der selbe bleibt wirklich vor der Schleife formatieren, da man das dann ja nur einmal formatiert ^^.

    Also nochmal in "Sparsam":

    [pwn]
    new string[128];
    format(string,sizeof(string),"[Unfallsmeldung]: %s ist gestorben!", SpielerName(playerid)); // formatieren, "SpielerName(playerid)" durch eigene Namensabfrage ersätzen
    for(new i = 0; i < GetMaxPlayers(); i++) // Schleife für die Abfrage aller Spieler
    {
    if(IsPlayerConnected(i)) // Ist die gerade abgefragte ID online?
    {
    if(IsPlayerFraktion(i, MEDIC)) // Fraktionsabfrage für Medic ergänzen
    {
    SendClientMessage(i, 0x0087FFFF, string); // An alle Medics senden
    }
    }
    }
    [/pwn]

    Nun wird der sowieso gleichbleibender String nur einmal formatiert ^^.
    Danke Vincent,
    muss ads vor ein paar Tagen mal falsch gemacht haben, da ich das jetzt (da sich die frage ja quasi immer wiederholt) via copy&past (Lieblingskombi eines jeden Informatikers :D ) hier reingehauen habe.