Fraktionschat problem

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
  • Hi ich habe das problem das wenn ich /r eingebe die meldung kommt (INFO: /r [Nachicht] und die fraktions member bekommen die nachicht nicht


    Code:


    dcmd_r(playerid,params[])
    {
    if(IstSpielerInFraktion(playerid, 0))return SendClientMessage(playerid,ROT,"Du bist in keiner Fraktion.");
    new string[128];
    if(sscanf(params, "s[128]", string))return SendClientMessage(playerid,GELB,"INFO: /r [Nachicht]");
    new fID = sSpieler[playerid][Fraktion];
    format(string,sizeof(string), "**(( %s: %s ))**", GetPlayerName(playerid), string);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(!IstSpielerInFraktion(i, fID))continue;
    SendClientMessage(i,HBLAU, string);
    }
    return 1;
    }

  • Als erstes empfehle ich dir nicht dcmd zu nutzen...sondern eher ocmd/zcmd/ycmd...oder sonst was :)


    Bei einem Parameter solltest du übrigens kein sscanf nutzen, sondern kannst direkt auf params zugreifen:


    ast2ufdyxkb1.png


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

  • Hast du keine Fehler im Compiler bekommen? GetPlayerName hast du erstens falsch angewandt und zweitens Parameter vergessen. :)

  • Versuch es halt anzupassen mit deinen Infos

  • Vergewaltige jetzt bitte nicht deinen Code um einen neuen Command Prozessor. Das ist völliger Quark und löst das Problem auch nicht.


    Nutzt du denn das sscanf Plugin oder die sscanf Funktion im Code?
    Falls letzteres, dann dürfte es schon reichen, wenn du in deinem ursprünglichen Befehl
    if(sscanf(params, "s[128]", string))return SendClientMessage(playerid,GELB,"INFO: /r [Nachicht]");
    zu:
    if(sscanf(params, "s", string))return SendClientMessage(playerid,GELB,"INFO: /r [Nachicht]");
    änderst.

  • Du kannst seinen Code nicht einfach kopieren.

    Nutzt du denn das sscanf Plugin oder die sscanf Funktion im Code?
    Falls letzteres, dann dürfte es schon reichen, ...

    Eventuell:
    dcmd_r(playerid,params[])
    {
    if(IstSpielerInFraktion(playerid, 0))return SendClientMessage(playerid,ROT,"Du bist in keiner Fraktion.");
    new string[145];
    if(sscanf(params, "s", string)) return SendClientMessage(playerid,GELB,"INFO: /r [Nachicht]");
    new fID = sSpieler[playerid][Fraktion];
    format(string,sizeof(string), "**(( %s: %s ))**", GetPlayerName(playerid), string);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(!IstSpielerInFraktion(i, fID))continue;
    SendClientMessage(i,HBLAU, string);
    }
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • ich sehe die Nachicht selber nicht und mein IstSpielerInFraktion sieht so aus
    Code:


    //fraktion
    stock IstSpielerInFraktion(playerid, Fraktionsid)
    {
    if(sSpieler[playerid][Fraktion] == Fraktionsid) return 1;
    return 0;
    }

  • Was wird dir im Server Log ausgegeben, wenn du den Befehl so ausführst?
    dcmd_r(playerid,params[])
    {
    print("Befehl aufgerufen.");
    if(IstSpielerInFraktion(playerid, 0))return SendClientMessage(playerid,ROT,"Du bist in keiner Fraktion.");
    new string[145];
    printf("params = %s", params);
    if(sscanf(params, "s", string)) return SendClientMessage(playerid,GELB,"INFO: /r [Nachicht]");
    new fID = sSpieler[playerid][Fraktion];
    printf("fID = %d", fID);
    format(string,sizeof(string), "**(( %s: %s ))**", GetPlayerName(playerid), string);
    print(string);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    printf("Prüfe Online Spieler %d: Frak ID: %d (%d)", i, sSpieler[i][Fraktion], IstSpielerInFraktion(i, fID));
    if(!IstSpielerInFraktion(i, fID))continue;
    print("Sende Nachricht.");
    SendClientMessage(i,HBLAU, string);
    }
    print("Fertig.");
    return 1;
    }

  • [12:21:47] Server Plugins
    [12:21:47] --------------
    [12:21:47] Loaded 0 plugins.


    [12:21:47]
    [12:21:47] Filterscripts
    [12:21:47] ---------------
    [12:21:47] Loading filterscript 'Uhr_by_KKM.amx'...
    [12:21:47]
    --------------------------------------
    [12:21:47] Uhr Fliterscript by DrDark
    [12:21:47] --------------------------------------


    [12:21:47] Loaded 1 filterscripts.


    [12:21:47]
    ----------------------------------
    [12:21:47] New Generation Reallife Script v1.0
    [12:21:47] ----------------------------------


    [12:21:47] Number of vehicle models: 4

  • Das kann nicht sein, normalerwise müsste dieser Print:
    print("Befehl aufgerufen.");
    auf jeden Fall im Server Log ausgegeben werden, wenn du den Befehl eingibst, auch wenn du nur die Nachricht mit /r [Nachricht] bekommst.


    Kann es sein, dass du irgendwo im Code, oder in einem geladenen Filterscript, noch einen /r Befehl drin hast, der das Ausführen dieses Befehls verhindert?
    Prüfe das bitte.


    Die Prints müssen, wenn du das so in deinen Code eingefügt hast, auf jeden Fall im Log stehen, wenn du den Befehl eingibst.

  • beim benutzen kommt das im log


    [12:24:59] Befehl aufgerufen.
    [12:24:59] params = hi
    [12:24:59] fID = 1
    [12:24:59] °*(( EDEE5D78F6997E14B8104DDA553E:
    [12:24:59] Fertig.
    [12:25:49] Befehl aufgerufen.
    [12:25:49] params =