Beiträge von Mostey

    Die Variable "reason" ist nicht als String deklariert. Da du aber eine Zeichenkette erstellen möchtest, musst du die Variable "reason" auch als String deklarieren.
    new reason[64]


    Und warum ist im String keine Formatierung für die Variable "reason" vorhanden?
    format(string,sizeof(string),"AdmCmd: %s wurde vom Administrator %s zum Administrator/Supporter ernannt. Grund: %s",SpielerName(pID),SpielerName(playerid),reason);


    Damit müsste es gehen. :)


    Deine 2. Frage kannst du genauso lösen. Du formatierst einfach einen zweiten String und sendest diesen dann an die playerid bzw. an die pID.


    Um die Größe der zweiten Dimension zu bekommen, so:
    for(new i = 0; i < sizeof TeamVehicles[]; i++)


    Dann habe ich aber die Größe des enums, ich würde gerne die Größe einer Variable im enum selbst haben. (Damit ich alle Fahrzeuge eines Teams respawnen kann)


    In diesem Fall also die Größe von "TeamVehicles[lcn][]". LCN ist das Team und die Dimension danach die Fahrzeuge. (TeamVehicles[lcn][0] = AddStaticVehicle...)

    Kann mir jemand sagen wie ich die Größe eines 2D Arrays ermitteln kann? Ich tu mich mit sizeof etwas schwer...


    if(team == 1)
    {
    for(new i = 0; i <= TeamVehicles[lcn][10]; i++)
    {
    SetVehicleToRespawn(i);
    }
    }


    Zurzeit habe ich es so gelöst. Falls jetzt aber Fahrzeuge dazukommen, muss ich die Funktion immer wieder ändern.


    Und was soll ich damit jetzt anfangen? Fehlerzeilen markieren und bitte den Code richtig einfügen...

    new mutetime[MAX_PLAYERS];
    forward mutetimer(playerid);


    ocmd:mute(playerid,params[])
    {
    new pID,Zeit,string[128];
    if(!IstSpielerAdmin(playerid,1)) return SendClientMessage(playerid,ROT,"Du bist kein Probe-Supporter!");
    if(sscanf(params,"ui",pID,Zeit)) return SendClientMessage(playerid,weis,"/mute [ID] [ZEIT]");
    {
    format(string,sizeof(string),"Du wurdest für %d Minuten gemuted",zeit);
    SendClientMessage(pID,-farbe-,string);
    mutetimeplayerid] = zeit;
    SetTimerEx("mutetimer",zeit*60000,false,"i",pID);
    }
    return 1;
    }


    public OnPlayerText(playerid, text[])
    {
    if(mutetimeplayerid] >= 1)
    {
    SendClientMessage(playerid,-farbe-,"Du bist gemuted.");
    return 0;
    }


    }


    public mutetimer(playerid)
    {
    mutetime[playerid] = 0;
    }


    Kann sein dass der ein oder andere Fehler sich eingeschlichen hat, solltest du aber ohne Probleme beheben können.

    SetTimerEx("StatsDraw[i]", 3000, false, "i", playerid);
    Das ist mein Timer ist der Korrekt ?


    So sollte es passen. (wenn der Public nach "StatsDraw" benannt ist)
    SetTimerEx("StatsDraw", 3000, false, "i", playerid);


    Du kannst und musst sogar die Funktionsvariablen rausnehmen, sonst gibt's nen Fehler. Er findet sonst den Public nicht.

    dcmd_ad(playerid,params[])
    {
    new textt[100], name[MAX_PLAYER_NAME];
    if(sscanf(params,"s",textt))return SendClientMessage(playerid,HellBlau,"/ad [Text]");
    GetPlayerName(playerid,name,sizeof(name));
    if(werbungavailable == 0)
    {
    TextDrawSetString(Werbung, textt);
    TextDrawShowForAll(Werbung);
    SetTimer("WerbungsTimer",50000,false);
    werbungavailable = 1;
    }
    else if(werbungavailable == 1)
    {
    SendClientMessage(playerid,Rot,"Es hat bereits jemand eine Werbung geschaltet. Warte bis zu 1 Minuten und probiere es erneut.");
    }
    return 1;
    }


    Hatte dir ja gesagt dass du die TextDrawSetString Funktion noch nutzen sollst, hab das mal in DialogHD's Source mit eingebaut.

    Warum PlayerTextDraw? Du machst die Werbung doch sowieso global für jeden sichtbar, da kannst du ja dann auch folgendes nutzen:


    Werbung = TextDrawCreate(525.000000, 125.000000," ");


    Die Warning kommt übrigens durch die Definierung des TextDraws oben im Script, wenn du die PlayerTextDraw Funktion nutzen möchtest, muss die Variable immer ein "PlayerText:" als Prefix haben.
    Lass es aber jetzt so wie es ist und nehme den berichtigten Code von mir.


    €: Du musst die TextDrawSetString Funktion noch zusätzlich nutzen. ;)

    Das hat dann aber nichts mit meiner Lösung für dein eigentliches Problem zutun.


    Hast du deinen Befehl so auch definiert?


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    dcmd(ad,2,cmdtext);
    return 0;
    }


    Ansonsten kann ich dir bei dcmd nicht viel helfen, arbeite eigentlich nur mit ocmd. Konnte aber auf den ersten Blick keinen Fehler im eigentlichen Befehl feststellen. :huh:

    Naja, ich weiß nicht wirklich was du mit den beiden Timern anstellen möchtest. Wenn du abfragen möchtest, ob die Werbungsanzeige wieder gefüllt werden kann, machst du das einfach mit einer Variable. Du brauchst dafür nicht die Timerzeit abfragen. Würde sogar weniger Ressourcen in Anspruch nehmen.


    Hab mir mal erlaubt deinen Code etwas abzuändern:


    oben im Script:
    new werbungavailable;
    forward WerbungsTimer();


    Befehl:
    dcmd_ad(playerid,params[])
    {
    new string[256], textt[100], name[MAX_PLAYER_NAME];
    if(sscanf(params,"s[100]",textt))return SendClientMessage(playerid,HellBlau,"/ad [Text]");
    GetPlayerName(playerid,name,sizeof(name));
    if(werbungavailable == 0) //Zeile 3011
    {
    format(string,sizeof(string),"Werbung: %s, von %s",textt,name);
    TextDrawSetString(Werbung,string);
    TextDrawShowForAll(Werbung);
    SetTimer("WerbungsTimer",300000,false);
    werbungavailable = 1;
    }
    else if(werbungavailable == 1)
    {
    SendClientMessage(playerid,Rot,"Es hat bereits jemand eine Werbung geschaltet. Warte bis zu 5 Minuten und probiere es erneut.");
    }
    return 1;
    }


    public WerbungsTimer()
    {
    werbungavailable = 0;
    return 1;
    }

    Immer noch nicht
    Ich benutze ab und an
    Function
    Und ab und an
    Public
    Kann es daran liegen?


    Kommentier doch mal die komplette Funktion (OnPlayerDeath) bei dir aus und lass mal den normalen OnPlayerDeath Callback das abarbeiten.

    Du benutzt anscheinend für den Timer der Werbung und die Abfrage (ob die Werbung verfügbar ist) die selbe Variable. ;)


    Hier müsste der Fehler sein:


    SetTimer("WerbungsTimer",30000,1);


    anpassen zu:


    SetTimer("werbung2",30000,1);


    und dementsprechend auch den Public ändern.

    Denke nicht das es funktioniert, da du "Haus" mit der Variable "cmdtext" vergleichst. Da müsste der Dialog dann erst kommen, wenn man nur "haus" in den Chat eingibt.


    Probier's aber einfach mal aus.
    Ich hätte das allerdings mit ocmd/dcmd/zcmd gemacht, vielleicht hilft es dir ja:


    ocmd:hilfe(playerid,params[])
    {
    new input[16];
    if(sscanf(params,"s",input)) return SendClientMessage(playerid,weiß,"Benutzung: /hilfe <suchbegriff>");
    {
    if(!strcmp(input,"haus",false)) return ShowPlayerDialog....
    else if (!strcmp(input,"auto",false)) return ShowPlayerDialog....


    }


    return 1;
    }


    Hab ich mittlerweile auch gemerkt und dementsprechend angepasst. Nun funktioniert das auch, hatte nur überall das "Player" vor dem "Text" vergessen. Danke dir trotzdem. :)