Beiträge von JustMe.77

    Danke teste ich mal gleich aus.


    Wollte nebenbei noch ein Befehl erstellen womit ich nachschauen kann ob Admins connected sind und mit welchem Level.


    Kann mir da jemand ein Anfang geben? Habe mir das hier angeschaut bekomme aber lauter Errors da ich GetPlayerName etc nicht definiert habe.



    if(strcmp(cmd, "/admins", true) == 0)
    {
    new Count,i,name[24],string[256];
    for(i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) && IsPlayerAdmin(i)) Count++;
    if(!Count) return SendClientMessage(playerid,COLOR_GREEN,"Admins Online: Keiner");
    if(Count == 1) {
    for(i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) && IsPlayerAdmin(i)) break;
    GetPlayerName(i,name,24); format(string,256,"Admins Online: %s",name);
    return SendClientMessage(playerid,COLOR_GREEN,string);
    }
    if(Count >= 1) {
    new bool:First = false;
    for(i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) && IsPlayerAdmin(i)) {
    GetPlayerName(i,name,24);
    if(!First) { format(string,256,"Admins Online: %s,",name); First = true;}
    else format(string,256,"%s %s",string,name);
    }
    return SendClientMessage(playerid,COLOR_GREEN,string);
    }

    Jeffry:


    Danke dir, habe zwar gerade keine Möglichkeit zu testen (mache das Morgen) aber ich gehe mal davon aus das es klappt, danke dir sehr für deine große Hilfe.


    Ich arbeite Morgen an meinem System weiter wollte aber nebenbei Fragen ob es irgendwie einen Weg gibt die Mittle vom Bildschirm herauszufinden?
    Also habe vor den Timer Textdraw genau mittig zu platzieren.

    Ach tut mir Leid das funktioniert. Ich hatte mein FilterScript unbennannt deswegen hat das Reloaden auf dem Server nichts gebracht :D


    Jetzt funktionierts, aber während des testen kam ein Freund auf meinem Server und ich habe bemerkt das dieser Countdown nur für mich erstellt wird bzw. nur dem der den Befehl ausführt.
    Ich wollte das aber global haben, was muss ich ändern Jeffry: ?

    Hilft nicht, habe es so gemacht wie du wolltest.



    forward CountDownObjekte(playerid, count);
    public CountDownObjekte(playerid, count)
    {
    count--;
    if(count <= 0)
    {
    KillTimer(countTimer);
    countTimer = -1;
    PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0); //GO - Sound
    //Hier die Objekte erstellen
    gObj[0] = CreateObject(1498,1866.485,-2496.830,5047.411,0.000,0.000,36.199,300.000);
    SetObjectMaterial( gObj[0], 0, 5150, "wiresetc_las2", "ganggraf01_LA_m", 0);
    SetObjectMaterialText(gObj[0], "LOCKED", 0, 50, "Calibri", 15, 1, -65536, 0, 1);
    gObj[1] = CreateObject(1498,1841.824,-2495.508,5047.339,0.000,0.000,335.900,300.000);
    SetObjectMaterial( gObj[1], 0, 5150, "wiresetc_las2", "ganggraf01_LA_m", 0);
    SetObjectMaterialText(gObj[1], "LOCKED", 0, 50, "Calibri", 15, 1, -65536, 0, 1);
    TextDrawHideForPlayer(playerid, Textdraw0);
    return 1;
    }
    new str[16];
    format(str, sizeof(str), "Countdown: %d", count);
    TextDrawSetString(Textdraw0, str);
    PlayerPlaySound(playerid, 1056, 0.0, 0.0, 0.0); //Timer - Sound
    TextDrawShowForPlayer(playerid, Textdraw0);
    countTimer = SetTimerEx("CountDownObjekte", 1000, false, "dd", playerid, count);
    return 1;
    }

    Funktioniert, nur möchte ich ja 2 Sounds abspielen lassen einmal den Timer und DANACH den GO Sound. Doch die spielen sich bei mir beide gleichzeitig ab, was mache ich falsch?


    PlayerPlaySound(playerid, 1056, 0.0, 0.0, 0.0); //Timer - Sound
    PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0); //GO - Sound

    Funktioniert gut. Hatte gedacht OnPlayerConnect und OnFilterScript Init wären identisch..


    Wie dem auch sei, mein nächster Schritt ist ein Sound zu adden der sich dann jede Sekunde beim Countdown abspielt. Auch hier weiß ich nicht ob es einen gibt der standart dafür genutzt wird, aber ich meine diesen Sound den Server meistens verwenden wenn z.B ein Rennen gestartet wird und dann 3, 2, 1 etc kommt.


    Weißt du eventuell welchen ich meine oder gibt es da irgendeine Liste mit den Sound IDs?


    Edit:


    Ich habs selber gefunden, ich denke es ist der hier. SOUND_RACE_321 1056.


    Nur muss ich nur noch wissen mit welcher Funktion ich ein Sound abspielen lasse und wo genau das hinkommt..

    Jeffry:


    Ja, ich dachte mir nur das dieses Textdraw mehrmals erstellt wird sobald ich jedes mal erneut den Countdown starte.


    Ich benutze es zurzeit als FilterScript, ich denke ich werde das zu OnFilterScriptExit hinzufügen.


    Habe mal danach gesucht doch nur was für OnPlayerDisconnect gefunden, ich möchte aber das dass ganze beim entladen des Filterscript gelöscht wird doch kenne die Funktion nicht.


    Die hier ist falsch oder? Denn ich bekomme Errors.


    TextDrawDestroy(textdraw[playerid]);
    return 1;

    Jeffry:


    Funktioniert danke, und ja ich habe noch eine Menge vor nur mache ich das gerne alles Schritt für Schritt um später bei Problemen besser erkennen zu können was ich falsch verändert habe etc.


    Ich habe nirgendswo TextdrawDestroy drinne, doch ist der Countdown vorbei sehe ich ihn nicht immer ( so solls auch sein). Sollte ich das trotzdem einfügen oder kann das zu Problemen führen?

    Jeffry:


    Habe nun ein Textdraw erstellt, wenn ich Ingame /ecountdown 10 eingebe, taucht auf Countdown: 9 aber geht nicht weiter runter und bleibt permanent so.


    Zum Code:


    Textdraw:



    Textdraw0 = TextDrawCreate(316.000000, 15.000000, "1");
    TextDrawBackgroundColor(Textdraw0, 255);
    TextDrawFont(Textdraw0, 3);
    TextDrawLetterSize(Textdraw0, 0.500000, 1.000000);
    TextDrawColor(Textdraw0, -65281);
    TextDrawSetOutline(Textdraw0, 0);
    TextDrawSetProportional(Textdraw0, 1);
    TextDrawSetShadow(Textdraw0, 1);
    TextDrawSetSelectable(Textdraw0, 0);


    Public



    forward CountDownObjekte(playerid, count);
    public CountDownObjekte(playerid, count)
    {
    count--;
    if(count <= 0)
    {
    KillTimer(countTimer);
    countTimer = -1;
    //Hier die Objekte erstellen
    gObj[0] = CreateObject(1498,1866.485,-2496.830,5047.411,0.000,0.000,36.199,300.000);
    SetObjectMaterial( gObj[0], 0, 5150, "wiresetc_las2", "ganggraf01_LA_m", 0);
    SetObjectMaterialText(gObj[0], "LOCKED", 0, 50, "Calibri", 15, 1, -65536, 0, 1);
    gObj[1] = CreateObject(1498,1841.824,-2495.508,5047.339,0.000,0.000,335.900,300.000);
    SetObjectMaterial( gObj[1], 0, 5150, "wiresetc_las2", "ganggraf01_LA_m", 0);
    SetObjectMaterialText(gObj[1], "LOCKED", 0, 50, "Calibri", 15, 1, -65536, 0, 1);
    }
    new str[16];
    format(str, sizeof(str), "Countdown: %d", count);
    TextDrawSetString(Textdraw0, str); //Die id musst du halt von deinem textdraw da einfügen...
    TextDrawShowForPlayer(playerid, Textdraw0);
    return 1;
    }



    Befehl



    CMD:ecountdown(playerid,params[])
    {
    if(countTimer != -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Countdown ist bereits an.");
    if(!params[0]) return SendClientMessage(playerid, 0xFF0000FF, "Gebe eine Zeit ein.");
    new time = strval(params);
    if(time < 1 || time > 60) return SendClientMessage(playerid, 0xFF0000FF, "Gebe eine Zeit zwischen 1 und 60 ein.");
    countTimer = SetTimerEx("CountDownObjekte", 1000, true, "dd", playerid, time);
    return 1;
    }

    Jeffry:


    So jetzt habe ich wieder Zeit, danke erstmal.


    Bei //TextDrawSetString? / SendClientMessage? möchte ich den Countdown als TextdrawSetString ausgeben, was sind die Parameter die dahinter gehören?


    Habe bei Wiki das gefunden TextDrawSetString(himessage, newtext); .


    Doch das muss ich anpassen zu meinem Code, was setze ich statt himmessage und newtext ein?

    Jeffry:


    Ich danke dir vielmals, funktioniet bis jetzt sehr gut :).


    In Planung habe ich noch einige Änderungen, die wären unter anderem:


    - Ein Befehl womit ich ein Countdown starte, z.B ein Countdown der von 60 runterzählt bis auf 0.
    (Im Befehl kann man eine beliebige Zahl eingeben in Sekunden.) Das soll dieser Countdown sein der auf dem Bildschirm erscheint also kein Text und ebenfalls dieser Sound der abgespielt wird. (Kenne die ID nicht).


    - Nachdem der Countdown abgelaufen ist, erstellen sich diese 2 Türen.



    Kannst du mir da behilflich sein? Hat Zeit bis morgen weil ich jetzt nicht mehr am PC bin.

    Jeffry:


    Viel besser nur habe ich 2 kleine Probleme:


    1) Texturen werden nicht angezeigt, nur das Objekt selbst.
    2) Beim löschen der Türen wird SendClientMessage 2 mal ausgeführt, ich weiß nicht warum.



    CMD:edoor(playerid,params[])
    {
    static bool:status;
    if(!status)
    {
    new tmpobjid;


    gObj[0] = CreateObject(1498,1866.485,-2496.830,5047.411,0.000,0.000,36.199,300.000);
    SetObjectMaterial(tmpobjid, 0, 5150, "wiresetc_las2", "ganggraf01_LA_m", 0);
    SetObjectMaterialText(tmpobjid, "LOCKED", 0, 50, "Calibri", 15, 1, -65536, 0, 1);
    gObj[1] = CreateObject(1498,1841.824,-2495.508,5047.339,0.000,0.000,335.900,300.000);
    SetObjectMaterial(tmpobjid, 0, 5150, "wiresetc_las2", "ganggraf01_LA_m", 0);
    SetObjectMaterialText(tmpobjid, "LOCKED", 0, 50, "Calibri", 15, 1, -65536, 0, 1);


    SendClientMessage(playerid,0xFF0055FF,"Rooms locked");
    }
    else
    {
    for(new i=0; i<sizeof(gObj); i++)
    {
    if(gObj[i] != -1) DestroyObject(gObj[i]);
    gObj[i] = -1;
    SendClientMessage(playerid,0xFF0055FF,"Rooms unlocked");
    }
    }
    status = !status;
    return 1;
    }



    Also zu dem Text, gebe ich einmal /edoor ein, erstellt sich das Objekt, Rooms locked erscheint. Lösche ich die Objekte, kommt 2 mal Rooms unlocked..