Werbung Fehlerhaft

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
  • Guten abend,


    Und zwar weiss ich nicht wie die Werbung schreiben soll, wovon ich auch keine ahnung habe wie ich dies mache.
    Ich möchte gerne pro Buchstabe was er schreib , 7$ kostest d.h. 10 Buchstaben = 70$.
    Ich hoffe es könnte mir jemand helfen.


    Code:


    CMD:werbung(playerid,params[])
    {
    if(!IsLoggedIn(playerid))return 1;
    if(Spieler[playerid][pTot] == 1)return SendClientMessage(playerid,COLOR_GREY,"Mann kann im Krankenhaus keine Werbung schreiben.");
    if(Spieler[playerid][pLevel] < 0)return SendClientMessage(playerid, COLOR_GREY, "Du brauchst Level 3 oder höher um Werbung schreiben zu können.");
    new string[256],text;
    if(sscanf(params,"s[256]",text))return SendClientMessage(playerid,COLOR_GREY,"Benutze /werbung [Nachricht]");
    new payout = text * 40;
    if(Spieler[playerid][pMoney] < payout)
    {
    format(string, sizeof(string), "Du besitzt nicht genügend Geld (%d$), um die Werbung schalten zu können.",payout);
    SendClientMessage(playerid, COLOR_GREY, string);
    return 1;
    }
    GiveMoney(playerid,-payout);
    format(string, sizeof(string), "|Werbung| %s, Absender: %s, Handy(Nr.%d)",text,GetName(playerid),Spieler[playerid][pNumber]);
    SendClientMessageToAll(COLOR_GREEN, string);
    return 1;
    }

  • new payout = text * 40; zu new payout = strval(text) * 40;


    P.s. if(Spieler[playerid][pLevel] < 0)return SendClientMessage(playerid, COLOR_GREY, "Du brauchst Level 3 oder höher um Werbung schreiben zu können.");
    zu
    if(Spieler[playerid][pLevel] <= 2)return SendClientMessage(playerid, COLOR_GREY, "Du brauchst Level 3 oder höher um Werbung schreiben zu können.");

    Mit Freundlichen Grüßen
    Whitetiiger aka. Kaito-sensei
    P.s. Alle mit #IRONIE bestätigten Sätze von mir, sind als Ironie anzusehen.

  • new string[256],text;


    ändern in:


    new string[256],text[144];


    Du hast text als Integer deklariert, da die Funktion strval() aber einen String ( Char Array ) erwartet, erscheint eben der Error.
    Außerdem muss jede Zeichenkette als String definiert werden.
    128 = max. Anzahl an Zeichen
    Da man im Chat eh nur 144 Zeichen verwenden kann, macht mehr keinen Sinn umd belastet den Speicher unnoetig.


  • Auch sollte man eher die Funktion strlen() anstatt strval() verwenden, da du die Länge der Zeichenkette und nicht die konvertierte Version von string zu int haben willst.



    Jetzt kommt nichts mehr das Er mir Geld abzieht oder das er pro Buchstabe 7$ nimmt.

  • CMD:werbung(playerid,params[])
    {
    if(!IsLoggedIn(playerid))return 1;
    if(Spieler[playerid][pTot] == 1)return SendClientMessage(playerid,COLOR_GREY,"Mann kann im Krankenhaus keine Werbung schreiben.");#
    if(Spieler[playerid][pLevel] < 0)return SendClientMessage(playerid, COLOR_GREY, "Du brauchst Level 3 oder höher um Werbung schreiben zu können.");
    new string[144],text[100];
    if(sscanf(params,"s[100]",text))return SendClientMessage(playerid,COLOR_GREY,"Benutze /werbung [Nachricht]");
    new payout = strlen(text) * 7;
    if(Spieler[playerid][pMoney] < payout)
    {
    format(string,sizeof string,"Du besitzt nicht genügend geld (%d$), um die Werbung schalten zu können.",payout);
    return SendClientMessage(playerid,COLOR_GREY,string);
    }
    GiveMoney(playerid,-payout);
    format(string,sizeof string,"|Werbung| %s, Absender: %s, Handy(Nr.%d)",text,GetName(playerid),Spieler[playerid][pNumber]);
    return SendClientMessageToAll(COLOR_GREEN,string);
    }
    Schreibe das so. Das sollte so auch dann eigentlich klappen.
    Außerdem hast du pro Buchstaben 40€ genommen, obwohl du nur 7 wolltest, oder?



  • So nun geht die Zahlung.


    Aber meine 60 Sekunden Timer werden nicht gezählt.


    Ich kann durchgehend Werbung schreiben anstadt nach jede Werbung 60 Sek warten.



    Code.


    CMD:werbung(playerid,params[])
    {
    if(!IsLoggedIn(playerid))return 1;
    if(Spieler[playerid][pTot] == 1)return SendClientMessage(playerid,COLOR_GREY,"Mann kann im Krankenhaus keine Werbung schreiben.");
    if(Spieler[playerid][pLevel] <= 3)return SendClientMessage(playerid, COLOR_GREY, "Du brauchst Level 3 oder höher um Werbung schreiben zu können.");
    new string[256],text[144];
    if(sscanf(params,"s[256]",text))return SendClientMessage(playerid,COLOR_GREY,"Benutze /werbung [Nachricht]");
    new payout = strlen(text) * 9;
    if(Spieler[playerid][pMoney] <= payout) {
    format(string, sizeof(string), "Du besitzt nicht genügend Geld (%d$), um die Werbung schalten zu können.",payout);
    SendClientMessage(playerid, COLOR_GREY, string);
    return 1;
    }
    if(WerbungZeit < 0) {
    format(string, sizeof(string), "Bitte warte noch %d Sekunden für die Nächste Werbung!", WerbungZeit);
    SendClientMessage(playerid, COLOR_GREY, string);
    SetPVarInt(playerid,"adtimer",1);
    WerbungZeit = 60;
    SetTimer("Werbung", 60000, 0);
    return 1;
    }
    else{
    GiveMoney(playerid,-payout);
    format(string, sizeof(string), "|Werbung| %s, Absender: %s, Handy(Nr.%d)",text,GetName(playerid),Spieler[playerid][pNumber]);
    SendClientMessageToAll(COLOR_GREEN, string);
    format(string, sizeof(string), "Werbung erfolgreich abgesendet.~n~Zahlung: ~r~-%d$",payout);
    GameTextForPlayer(playerid, string, 11000, 5);
    }
    return 1;
    }

  • CMD:werbung(playerid,params[])
    {
    if(!IsLoggedIn(playerid))return 1;
    if(Spieler[playerid][pTot] == 1)return SendClientMessage(playerid,COLOR_GREY,"Mann kann im Krankenhaus keine Werbung schreiben.");
    if(Spieler[playerid][pLevel] <= 3)return SendClientMessage(playerid, COLOR_GREY, "Du brauchst Level 3 oder höher um Werbung schreiben zu können.");
    new string[256],text[144];
    if(sscanf(params,"s[256]",text))return SendClientMessage(playerid,COLOR_GREY,"Benutze /werbung [Nachricht]");
    new payout = strlen(text) * 9;
    if(Spieler[playerid][pMoney] <= payout)
    {
    format(string, sizeof(string), "Du besitzt nicht genügend Geld (%d$), um die Werbung schalten zu können.",payout);
    SendClientMessage(playerid, COLOR_GREY, string);
    return 1;
    }
    if(WerbungZeit > 0)
    {
    format(string, sizeof(string), "Bitte warte noch %d Sekunden für die Nächste Werbung!", WerbungZeit);
    SendClientMessage(playerid, COLOR_GREY, string);
    return 1;
    }
    else
    {
    WerbungZeit = 1;
    SetTimer("Werbung", 60000, 0);
    GiveMoney(playerid,-payout);
    format(string, sizeof(string), "|Werbung| %s, Absender: %s, Handy(Nr.%d)",text,GetName(playerid),Spieler[playerid][pNumber]);
    SendClientMessageToAll(COLOR_GREEN, string);
    format(string, sizeof(string), "Werbung erfolgreich abgesendet.~n~Zahlung: ~r~-%d$",payout);
    GameTextForPlayer(playerid, string, 11000, 5);
    }
    return 1;
    }
    Möchtest du, dass man alle 60 Sekunden nur eine Werbung schalten kann?
    Dann musst du das so machen, und im Callback "Werbung" "WerbungZeit" einfach auf 0 setzen.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Entfern bitte den Timer und mach es folgendermaßen, denn ein Timer ist in diesem Fall total unnötig und resourcenaufwendig.


    Abfrage, ob er eine Werbung erstellen kann:
    if(GetPVarInt(playerid, "lastAdvertise") < gettime()){
    //Werbung kann erstellt werden
    SetPVarInt(playerid, "lastAdvertise", gettime() + 60); //60 durch die Anzahl der Sekunden ersetzen
    }else{
    //Werbung kann NICHT erstellt werden
    }


    Dieser Code arbeitet mit Timestamps. Das sind die Sekunden seit dem 01.01.1970.


    Du fragst einfach ab, ob der Timestamp der letzten Werbung + 60 Sekunden kleiner als der aktuelle Timestamp ist. Wenn ja, liegt es in der Vergangenheit und die Werbung darf erstellt werden, wobei der Timestamp dann wieder neu gesetzt wird auf in 60 Sekunden.


  • geht immer noch nicht.


    public


    public Werbung(playerid)
    {
    if(WerbungZeit == 60)
    {
    WerbungZeit --;
    }
    if(WerbungZeit == 0)
    {
    WerbungZeit = 0;
    }
    return 1;
    }

  • Spoiler anzeigen
    CMD:werbung(playerid,params[])
    {
    if(!IsLoggedIn(playerid))return 1;
    if(Spieler[playerid][pTot] == 1)return SendClientMessage(playerid,COLOR_GREY,"Mann kann im Krankenhaus keine Werbung schreiben.");
    if(Spieler[playerid][pLevel] <= 3)return SendClientMessage(playerid, COLOR_GREY, "Du brauchst Level 3 oder höher um Werbung schreiben zu können.");
    new string[256],text[144];
    if(sscanf(params,"s[256]",text))return SendClientMessage(playerid,COLOR_GREY,"Benutze /werbung [Nachricht]");
    new payout = strlen(text) * 9;
    if(Spieler[playerid][pMoney] <= payout)
    {
    format(string, sizeof(string), "Du besitzt nicht genügend Geld (%d$), um die Werbung schalten zu können.",payout);
    SendClientMessage(playerid, COLOR_GREY, string);
    return 1;
    }
    if(gettime() < GetPVarInt(playerid,"Werbung"))
    {
    format(string, sizeof(string), "Bitte warte noch %d Sekunden für die Nächste Werbung!", WerbungZeit);
    SendClientMessage(playerid, COLOR_GREY, string);
    return 1;
    }
    else
    {
    SetPVarInt(playerid,"Werbung",gettime()+60);
    GiveMoney(playerid,-payout);
    format(string, sizeof(string), "|Werbung| %s, Absender: %s, Handy(Nr.%d)",text,GetName(playerid),Spieler[playerid][pNumber]);
    SendClientMessageToAll(COLOR_GREEN, string);
    format(string, sizeof(string), "Werbung erfolgreich abgesendet.~n~Zahlung: ~r~-%d$",payout);
    GameTextForPlayer(playerid, string, 11000, 5);
    }
    return 1;
    }

    So.
    Den Callback "Werbung" kannst du entfernen, ja.

  • format(string, sizeof(string), "Bitte warte noch %d Sekunden für die Nächste Werbung!", gettime() - GetPVarInt(playerid,"Werbung"));
    Probier das mal so.

  • Ja kann man :)
    Dafür musst du das einmal drehen.
    format(string, sizeof(string), "Bitte warte noch %d Sekunden für die Nächste Werbung!", GetPVarInt(playerid,"Werbung")-gettime());
    #edit:
    Das war mein Fehler, du musst gettime() von dem Wert in der PVar abziehen.

    Einmal editiert, zuletzt von AirM4X ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen