Teamchat | Aduty

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 Leute, ich bräuchte etwas Hilfe beim erstellen des Teamchats.
    Dafür verwende ich OCMD.


    Es sollte ein Teamchat für alle sein und der Rang sollte eine Farbe haben. Nur komme ich grad nicht drauf wie das funktioniert.


    Wie soll das aussehen?
    Befehl: /tc [TEXT]


    Admin XY: Hi
    Moderator XY: Hi
    SupporterXY: HI



    Dafür habe ich das angelegt.

    Code
    stock arangs(playerid)
    {
        new name[32];
        if(GetPVarInt(playerid, "adminlevel") == 1) format(name, sizeof(name), "Helfer");
        if(GetPVarInt(playerid, "adminlevel") == 2) format(name, sizeof(name), "Supporter");
        if(GetPVarInt(playerid, "adminlevel") == 3) format(name, sizeof(name), "Moderator");
        if(GetPVarInt(playerid, "adminlevel") == 4) format(name, sizeof(name), "Kon-Adminstrator");
        if(GetPVarInt(playerid, "adminlevel") == 5) format(name, sizeof(name), "Adminstrator");
        return name;
    }


    2.
    Aduty
    Wie funktioniert das OFFDUTY?



    //EDIT ADUTY FUNKTIONIERT!! Aber wie gehe ich OFFDUTY?

  • ocmd:aduty(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,ROT,"Du bist kein Admin!");
    new string[145],name[MAX_PLAYER_NAME],grund[128];
    GetPlayerName(playerid, name, sizeof(name));
    if(aduty[playerid] == 1)
    {
    format(string,sizeof(string),"SERVER: %s beendet den Dienst als %s!",name,arangs(playerid));
    SendClientMessageToAll(HELLROT,string);
    SetPlayerHealth(playerid, 100);
    SetPlayerArmour(playerid, 0);
    aduty[playerid] = 0;
    }
    else
    {
    if(sscanf(params,"s",grund))return SendClientMessage(playerid,ROT,"Benutzung: /aduty [Grund] ");
    format(string,sizeof(string),"SERVER: %s beginnt den Dienst als %s! Grund: %s",name,arangs(playerid),grund);
    SetPlayerHealth(playerid, 99999);
    SetPlayerArmour(playerid, 99999);
    SendClientMessageToAll(HELLROT,string);//SetPlayerSkin(playerid, 27);
    SetPlayerColor(playerid, HELLROT);
    aduty[playerid] = 1;
    }
    return 1;
    }


    stock arangs(playerid)
    {
    new name[32];
    switch(GetPVarInt(playerid, "adminlevel"))
    {
    case 1: format(name, sizeof(name), "Helfer");
    case 2: format(name, sizeof(name), "Supporter");
    case 3: format(name, sizeof(name), "Moderator");
    case 4: format(name, sizeof(name), "Kon-Adminstrator");
    case 5: format(name, sizeof(name), "Adminstrator");
    default: format(name, sizeof(name), "<Unbekannt>");
    }
    return name;
    }


    Zwecks den Farben:
    http://wiki.sa-mp.com/wiki/Colour_Embedding#Color_embedding


    Damit kannst du gleich wie mit arangs(playerid) eine Funktion acolor machen, die dir die Farbe als String zurück gibt.

  • Code
    C:\Users\Nexus\Desktop\TestSkript\gamemodes\Nexus.pwn(1413) : error 012: invalid function call, not a valid address
    C:\Users\Nexus\Desktop\TestSkript\gamemodes\Nexus.pwn(1413) : warning 215: expression has no effect
    C:\Users\Nexus\Desktop\TestSkript\gamemodes\Nexus.pwn(1413) : error 001: expected token: ";", but found ")"
    C:\Users\Nexus\Desktop\TestSkript\gamemodes\Nexus.pwn(1413) : error 029: invalid expression, assumed zero
    C:\Users\Nexus\Desktop\TestSkript\gamemodes\Nexus.pwn(1413) : fatal error 107: too many error messages on one line


    Zeile: if(aduty[playerid] == 1)

  • Die Deklaration gehört an den Anfang deines Gamemodes, außerhalb des Callbacks.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • new aduty[MAX_PLAYERS];
    Das muss entweder unter den Includes stehen, oder
    static aduty[MAX_PLAYERS];
    lauten, wenn du es nur in diesem Befehl verwenden willst, es aber gespeichert werden soll.


    Außerdem:
    if(aduty(playerid) == 1)
    zu:
    if(aduty[playerid] == 1)

  • Vom Prinzip her gleich wie der /aduty Befehl, nur dass der Grund eben der Text ist der gesendet wird.
    Die Farbe machst du mit dem Color-Embedding.


    Die Nachricht sendest du dann per for-Schleife an alle Mitglieder des Teams.
    Versuche dich einfach erstmal selbst an dem Befehl und schau wie weit du kommst. Falls du nicht weiter kommst poste den Befehl und schildere das Problem.

  • Beitrag von Nexus ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Teamchat 0.1





    ocmd:a(playerid,params[])
    {
    //if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,ROT,"Du bist kein Admin!");
    new string[145],pID,name[MAX_PLAYER_NAME],text[128];
    GetPlayerName(playerid, name, sizeof(name));
    {
    if(sscanf(params,"s",text))return SendClientMessage(playerid,ROT,"Benutzung: /a [TEXT] ");
    format(string,sizeof(string),"(( %s {FFFFFF} %s sagt: %s {FF0000}))",arangs(playerid),name,text);
    SendClientMessage(pID,HELLROT,string);//SetPlayerSkin(playerid, 27);
    }
    return 1;
    }


    Jeffry: Stimmt das so?
    //Code Update

  • Du verwendest pID, was immer 0 ist. Und die Einrückung ist nicht ganz so toll, GetPlayerName öffnet eigentlich keine Ebene.
    Den text könntest du dir auch sparen (ebenso den Grund im aduty Befehl) wenn du es sscanf in string speichern lässt, nur so am Rande, damit du auch die Optimierung kennenlernst.


    ocmd:a(playerid,params[])
    {
    //if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,ROT,"Du bist kein Admin!");
    new string[145],name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    if(sscanf(params,"s",string))return SendClientMessage(playerid,ROT,"Benutzung: /a [TEXT] ");
    format(string,sizeof(string),"(( %s {FFFFFF} %s sagt: %s {FF0000}))",arangs(playerid),name,string);
    SendClientMessageToAll(HELLROT,string);//SetPlayerSkin(playerid, 27);
    return 1;
    }
    String kann wieder in sich selbst geschrieben werden, das spart Speicher. Falls dir das aber nicht klar ist, dann mache es über die text Variable.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()