/ad ...

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
  • hallo und guten tag aller seits ich habe da mal eine kleine frage unzwar ich habe mir in den letzen tagen mal ein paar tutorials zu dem /ad befehl angeguckt aber ich habe ihn immer noch nicht weil ich immer so vieler errors hatte habe ichs aufgegeben da wollte ich mal fragen ob mir jemand helfen/einen machen kann das währe echt nett.


    der soll so sein.


    mann kann nur alle 60 sekunden schreiben.


    in grün ..(die frabe habe ich schon definirt)


    alle spieler die grade on sind sollen es sehen


    und noch etwas von euch mit drinne haben ;)




    mfg : Savas

    Sei du Selbst, denn all die anderen Gibt es schon !



    **Savas**


  • besser gesagt wo hast du deine Probleme bei dem erstellen des commands ?
    und poste ihn mal

  • da wir heute sonnatg haben und ich gut drauf bin, bekommste mal meinen.


    musst den aber an dein system anpassen.


    ocmd:ad(playerid,params[])
    {
    new reason[128];
    if(!IsPlayerInRangeOfPoint(playerid,1.5,1206.5807,-918.6047,43.0706)) SendClientMessage(playerid,COLOR_WHITE,"Du bist nicht an einem /AD-Punkt.");
    else if (sscanf(params, "s",reason))
    {
    return SendClientMessage(playerid,COLOR_WHITE,"Benutzung: /ad [Werbung].");
    }
    //else if(ADTime == 1) SendClientMessage(playerid,COLOR_WHITE,"In der Letzten Minute wurde bereits einen Werbung gemacht.");
    else
    {
    new string[128];
    new Name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Name, sizeof(Name));
    format(string,sizeof(string),"[__Werbung: %s. Von: %s , Tel: %d__]",reason,Name,SpielerInfo[playerid][Handynummer]);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"Werbung gesendet. Kosten:100$");
    GivePlayerMoney(playerid,-100);
    FraktionsKasse[10] += 100;
    //ADTime = 1;
    SendClientMessageToAll(COLOR_GREEN,string);
    }
    return 1;
    }

  • Meint er.


    Einfache erklärung:

    new Ad_Done; //Als überprüfungsvariable GLOBAL!


    COMMAND:ad(playerid,params[])//ist klar?
    {
    new Text[100];//auch klar
    if(sscanf(params,"s",Text))return SendClientMessage(playerid,COLOR_RED,"Benutzung: bla bla");
    if(Ad_Done==1)return SendClientMessage(playerid,COLOR_RED,"Du kannst nur alle 60Sek. eine Werbung senden.");
    new Str[126];
    format(Str,126,"WERBUNG | %s | von: %s",Text,GetName(playerid));//Auch klar :D
    SendClientMessageToAll(COLOR_GREEN,Str);//hmpf nicht schwer :D
    Ad_Done=1; //Wir setzen Ad_Done als sperre für 60sek rein
    SetTimer("Ad_TIMER",60000,false);//Check die Wiki
    return 1;
    }
    forward Ad_TIMER();


    public Ad_TIMER()
    {
    Ad_Done = 0;
    return 1;
    }


    HAb das gerade ohne Compiler getippt, sollte aber wohl stimmen.Wenn nicht zitier mich und ich berichtige es. ;)
    Aber es soltle auch klar sein wie das funktioniert :D

  • ok dann werde ich dir dazu mal die basics erläutern


    wie man die nachricht an jeden schicken kann :


    dazu brauchen wir eine for schleife diese wird danach durch alle spieler durch gehen


    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    SendClientMessage(i, farbe, string);


    dies kann man auch machen wie man will auch mit GetMaxPlayers zum beispiel was so gesehen auch schneller ist es sei den du hast genau die menge spieler auf dem server
    wie beim neu definieren von MAX_PLAYERS for(new i; i<GetMaxPlayers(); i++)


    So was macht unser code dort oben also es ist eine schleife welche durch jeden spieler durch geht wenn du das printen lassen würdesr wäre der output 0.1.2.3.4.5... usw
    bei IsPlayerConnected wird überprüft ob die spieler on sind oder nicht bei GetMaxPlayers könnte man dies streichen weil sowieso hier die anzahl genommen wird von spielern welche sich auf dem Server befinden
    und durch SendClientMessage wird hier die nachricht an die spieler geschickt.


    so machen wir mal ein beispiel code mit ocmd und parameter


    ocmd:test(playerid,params[])
    {
    new string[128], text[64], pName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pName, sizeof(pName));
    if(sscanf(params,"s",text))return SendClientMessage(playerid,0xFFFFFFAA,"Benutze: /test [text]");
    format(string, sizeof(string),"%s: %s",pName,text);
    for(new i= 0; i < GetMaxPlayers(); i++){
    if(IsPlayerConnected(i)){ SendClientMessage(i, 0xFFFFFFAA, string);}
    }
    return 1;
    }


    nun was du auch willst ist ein timer den lassen wir eine variabel auf 0 wieder setzen
    dann kannst du oben im script eine neue variabel definieren oder ein bool
    new test;


    bei dem command lässt nun den timer für den spieler laufen und die variabel auf 1 setzen spriche test = 1;
    und den timer für die spieler daher benutzen wir SetTimer erst name , danach zeit und 0 steht für das nicht wiederholen
    20000 = 20 Sekunden da 1 Sekunde = 1000 ms sind millisekunden

    SetTimer("Werbung", 20000, 0);


    public Werbung()
    {
    test = 0;
    }


    so den rest darfst dir nun selbst noch erarbeiten was du auch noch machen kannst ist die länge des eingegebenen strings abfragen und das geld abziehen
    auch hierzu ein beispiel


    new idx= strlen(text), preis = idx* 5;
    GivePlayerMoney(playerid, - preis );


    das heißt im klartext das hier die zeichen abgefragt werden von dem eingegebenen text an dem ocmd command oben und die zeichen werden nun mit 5 multipliziert
    und das wird dem spieler abgezogen
    Bsp:


    Hallo = 5 Buchstaben
    5 Buchstaben * 5 = 25
    der spieler bekommt 25 Dollar abgezogen