Werbungssystem
- DreamLife
- Geschlossen
- Erledigt
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
-
-
Ändere mal das public in:
public Werbung()
{
if(adtimer <= 60)
{
adtimer --;
}
else if(adtimer < 0)
{
adtimer = 0;
}
return 1;
}Aber was genau funzt denn nicht ?
mfg.
-
Also man kann /ad schreiben es kommt die abfrage vom lvl und ob man gemutet ist, aber Der Timer failt oder so also Man kann so offt spamen wie man will und Geld wird auch nicht abgezogen...
-
Also mein Ad geht er Zieht Geld ab und fragt das Level/Admin level(admins können ohne spieler lvl ad^^) nur der Timer will auch nicht wäre nett wenn einer ne Lösung hätte
-
keiner ne Ide?
-
Mehr Informationen als "Also der timer Funktioniert nicht oder so MAn kann soviel Werbung machen wei man will..." ?
Welche Nachricht wird dir denn immer ausgegeben bei /advertise ?
Übrigens änderst du bei /advertise niemals den Wert von adtimer.Heisst also,er bleibt unverändert und somit auch bei 0 falls vorher keine Fehlermeldung kommt. Sollte die Werbung erfolgreich angenommen werden,solltest du dann also "adtimer = X;" setzen. -
Mehr Informationen als "Also der timer Funktioniert nicht oder so MAn kann soviel Werbung machen wei man will..." ?
Welche Nachricht wird dir denn immer ausgegeben bei /advertise ?
Übrigens änderst du bei /advertise niemals den Wert von adtimer.Heisst also,er bleibt unverändert und somit auch bei 0 falls vorher keine Fehlermeldung kommt. Sollte die Werbung erfolgreich angenommen werden,solltest du dann also "adtimer = X;" setzen.Ja Ich kann /ad /advertise machen Also die Werbung wird gesendet aber ICh kann es Ohne Pause machen also Permanent /ad Xxxxxx
-
Das kein Geld abgezogen wird liegt daran, dass Du sie auch nicht abziehst. Da ich nicht weiß, wie das Geld bei dir definiert ist, kann ich Dir das nicht sagen.
Kann ja auch schlecht funktioniere. Ich mein wenn Du den Timer auch immer in den negativen Bereich zählen lässt.
Wie lange soll den keine "/ad" geschrieben werden können? -
Das kein Geld abgezogen wird liegt daran, dass Du sie auch nicht abziehst. Da ich nicht weiß, wie das Geld bei dir definiert ist, kann ich Dir das nicht sagen.
Kann ja auch schlecht funktioniere. Ich mein wenn Du den Timer auch immer in den negativen Bereich zählen lässt.
Wie lange soll den keine "/ad" geschrieben werden können?60 Sec Lang also 1 minute
-
Hast du eigentlich meinen Post zuende gelesen ?
[...]
Übrigens änderst du bei /advertise niemals den Wert von adtimer.Heisst also,er bleibt unverändert und somit auch bei 0 falls vorher keine Fehlermeldung kommt. Sollte die Werbung erfolgreich angenommen werden,solltest du dann also "adtimer = X;" setzen. -
Hast du eigentlich meinen Post zuende gelesen ?
Ja hab den Timer eingefügt aber hat nicht Wirklich Funktioniert...
-
Ich hab meinen so aber wenn du sowas nutzt musst du es auch dafür anpassen....
new AdToggleTime;
dcmd_ad(playerid,params[])
{
if(AdToggleTime>0)
{
new string[128];
format(string, sizeof(string), "Bitte warte %d Sekunden bis zur nächsten Werbung!", AdToggleTime);
SendClientMessage(playerid, cGrey, string);
return 0;
}
new playerto[120];
if(sscanf(params,"s",playerto))
{
SendClientMessage(playerid,cRed,"/ad [text]");
return 1;
}
new sendstr[128];
if(GetPlayerMoney(playerid)<biz2[9][bEnter])
{
format(sendstr,sizeof sendstr,"Du hast nicht genug Geld (%d$)",biz2[9][bEnter]);
SendClientMessage(playerid,cRed,sendstr);
return 1;
}
if(biz2[9][bProds]<1)return SendClientMessage(playerid,cRed,"Wir haben keine Prods mehr");
GivePlayerMoney(playerid,-biz2[9][bEnter]);
biz2[9][bKasse]+=biz2[9][bEnter];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof name);
format(sendstr,sizeof sendstr,"Werbung: %s | Kontakt: %s, Tel: %d",playerto,name,SpielerInfo[playerid][pNummer]);
SendClientMessageToAll(cAd,sendstr);
biz2[9][bProds]--;
bizicon2(9);
KasseOn+=biz2[9][bEnter];
dini_IntSet("staat.ini","KasseOn",KasseOn);
AdToggleTime=30;
SetTimer("AdToggle",1000, 1);
return 1;
}forward AdToggle();
public AdToggle()
{
AdToggleTime--;
if(AdToggleTime==0)KillTimer(AdToggle());
return 1;
}So klappt das wunderbar
-
Ja Ich hab halt am ende Den Timer nicht gehabt....
Jetzt hab Ich
SetTimer("Werbung", 60000, 1);
adtimer=60;aber Es Funktioniert man kann nur alle 60 sec Werbung machen Naja Da steht halt Werbung nur alle 60 sec Möglich auch wens nurnoch 1 Sec ist
-
60000 ms ( 60 Sekunden -> 1Min , SetTimer() ) * 60 Aufrufe bis wieder neue Werbung erlaubt ist, sind 60 Minuten.
-
Mach das mal so
AdToggleTime=30;//Sagt 30 Sekunden pause
SetTimer("AdToggle",1000, 1); //zieht jede sekunde einen ab
return 1;
}forward AdToggle();
public AdToggle()
{
AdToggleTime--;//-- Is eig klar
if(AdToggleTime==0)KillTimer(AdToggle()); //wenn der wert auf 0 ist dann gibt er den Frei
return 1;
}Verwendung im Command:
if(AdToggleTime>0)//fragt ab ob er über 0 ist
{
new string[128];
format(string, sizeof(string), "Bitte warte %d Sekunden bis zur nächsten Werbung!", AdToggleTime);//hier sagt er wie viele Sekunden noch
SendClientMessage(playerid, cGrey, string);
return 0;
} -
60000 ms ( 60 Sekunden -> 1Min , SetTimer() ) * 60 Aufrufe bis wieder neue Werbung erlaubt ist, sind 60 Minuten.
Was Lol Ich check nix was du damit meinst
-
Mach das mal so
AdToggleTime=30;//Sagt 30 Sekunden pause
SetTimer("AdToggle",1000, 1); //zieht jede sekunde einen ab
return 1;
}forward AdToggle();
public AdToggle()
{
AdToggleTime--;//-- Is eig klar
if(AdToggleTime==0)KillTimer(AdToggle()); //wenn der wert auf 0 ist dann gibt er den Frei
return 1;
}Verwendung im Command:
if(AdToggleTime>0)//fragt ab ob er über 0 ist
{
new string[128];
format(string, sizeof(string), "Bitte warte %d Sekunden bis zur nächsten Werbung!", AdToggleTime);//hier sagt er wie viele Sekunden noch
SendClientMessage(playerid, cGrey, string);
return 0;
}
Mach das mal dann is dein Vorhaben schonmal weiter -
Du hast den Timer auf 60000ms gestellt.60000ms sind 60 Sekunden,60 Sekunden sind 1 Minuten.
Du machst "adtimer=60;"
Pro aufruf des Timers wird adtimer - 1 gerechnet. Heisst also der Timer muss die Funktion 60 mal aufrufen,bis adtimer gleich 0 ist.
1 Minute * 60 ist 60 Minuten. So vielleicht ? -
Jo hay Ich hab mal nen /ad System aus nem Alten Script gefunden und neu eingebaut aber Das Funktioniert halt nicht kann mir vllt Jemand helfen
hier das Script:
Also der timer Funktioniert nicht oder so MAn kann soviel Werbung machen wei man will...Spoiler anzeigen
new adtimer;Spoiler anzeigen SetTimer("Werbung", 60000, 1);
adtimer = 0;Spoiler anzeigen if(strcmp(cmd, "/advertise", true) == 0 || strcmp(cmd, "/ad", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(Spieler[playerid][Level] < 2)return SendClientMessage(playerid, COLOR_GRAD2, "Du brauchst Level 2 oder höher um Werbung machen zu können.");
if(Spieler[playerid][Muted] == 1)return SendClientMessage(playerid, COLOR_LIGHTRED, "Du bist gemutet.");
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[128], string[128];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result))
{
SendClientMessage(playerid, COLOR_GRAD2, "FEHLER: /(ad)vertise [Werbung]");
return 1;
}
if(Spieler[playerid][Admin] < 1 && adtimer > 0)
{
format(string, sizeof(string), "Bitte warte noch %d Sekunden für die Nächste Werbung!", adtimer);
SendClientMessage(playerid, COLOR_GRAD2, string);
return 1;
}
new payout = idx * 250;
if(GetPlayerMoney(playerid) < payout)
{
format(string, sizeof(string), "* Zeichen [%d] Preis [$%d] - Besorge den Preis und es wird Werbung geschaltet!", offset, payout);
return SendClientMessage(playerid, COLOR_GRAD1, string);
}
format(string, sizeof(string), "Werbung: %s, %s (Ph: %d)", result, SpielerName(playerid), Spieler[playerid][Nummer]);
SendClientMessageToAll(COLOR_AD_GREEN, string);
printf("Werbung von %s: %s", SpielerName(playerid), result);
format(string, sizeof(string), "* Zeichen [%d] Preis [$%d] - Werbung erfolgreich abgesendet.", offset, payout);
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
}
return 1;
}
public Werbung()
{
if(adtimer <= 60)
{
adtimer --;
}
if(adtimer < 0)
{
adtimer = 0;
}
}Danke für eure Hilfe
GrußViel Spaß.
Spoiler anzeigen new adtimer;Spoiler anzeigen if(!strcmp(cmd, "/advertise", true) || !strcmp(cmd, "/ad", true))
{
if(IsPlayerConnected(playerid))
{
if(Spieler[playerid][Level] < 2)
return SendClientMessage(playerid, COLOR_GRAD2, "Du brauchst Level 2 oder höher um Werbung machen zu können.");
if(Spieler[playerid][Muted] == 1)
return SendClientMessage(playerid, COLOR_LIGHTRED, "Du bist gemutet.");
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
idx++;
new offset = idx,
result[128],
string[128];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result))
return SendClientMessage(playerid, COLOR_GRAD2, "FEHLER: /(ad)vertise [Werbung]");
if(Spieler[playerid][Admin] < 1 && adtimer >= gettime())
{
format(string, sizeof(string), "Bitte warte noch %i Sekunden für die Nächste Werbung!", adtimer-gettime());
return SendClientMessage(playerid, COLOR_GRAD2, string);
}
new payout = idx * 250;
if(GetPlayerMoney(playerid) < payout)
{
format(string, sizeof(string), "* Zeichen [%d] Preis [$%d] - Besorge den Preis und es wird Werbung geschaltet!", offset, payout);
return SendClientMessage(playerid, COLOR_GRAD1, string);
}
format(string, sizeof(string), "Werbung: %s, %s (Ph: %d)", result, SpielerName(playerid), Spieler[playerid][Nummer]);
SendClientMessageToAll(COLOR_AD_GREEN, string);
printf("Werbung von %s: %s", SpielerName(playerid), result);
format(string, sizeof(string), "* Zeichen [%d] Preis [$%d] - Werbung erfolgreich abgesendet.", offset, payout);
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
adtimer = gettime() + 60; // 60 = Sekunden!
}
return 1;
}Da verstehe ich gar nicht, warum man den armen Server mit Timern belasten möchte
Der kann da doch auch nichts für -
Du hättest dann zumindest auch noch "Werbung()" bearbeiten müssen.
"Werbung" existiert nicht in meinem Scriptgettime() == Unix Timestamp.
So jetzt habe ich den von Anfang an auf 0 (Server Start).
Jetzt macht jemand Werbung, jetzige Zeit ist nicht größer als 0.
D.h. ich kann Werbung machen.Werbungszeit wird auf jetzt + 60 Sekunden gesetzt.
Mache ich wieder Werbung, ist der adtimer ja in der Zukunft (größer als gettime()).
Also kann ich keine machen.Nachdem die jetzt Zeit wieder höher ist (automatisch nach 60 Sekunden) kann ich Werbung machen.
Wieso ist das also falsch
//Goldkiller: Jep,hast völlig recht. Nicht gesehen das du noch folgene Zeile abgeändert hattest: (Bubelbub: )
if(Spieler[playerid][Admin] < 1 && adtimer >= gettime())