Hey,
wie mache ich einen Timebann?
Also /tban [ID] [Zeit]
Ich versteh nur das mit dem Timer dann nicht richtig
Danke im vorraus
Hey,
wie mache ich einen Timebann?
Also /tban [ID] [Zeit]
Ich versteh nur das mit dem Timer dann nicht richtig
Danke im vorraus
brauchst keinen timer ... was benutzt zur speicherung ? Mysql oder ein Filesystem ?
Filesystem
ok ....
[ FILTERSCRIPT ] TimeBan Mysql by ZABUS da hast du mal ein system was auf mysql ist , was du aber leicht umschreiben kannst
[ SCRIPTING ] Benutzung TimeStamp und hier ne erklärung vom timestamp .....
Hier mal ne kleine Theoriestunde:
Spieler A wird gebannt , für 1min ... also holst du dir den timestamp mit gettime()+1*60 --> mal 60 damit du die sekunden hast ... das speicherst du dann in die datei , und jedes mal wenn sich ein spieler connectet schaust du ob der jetzige timestamp größer ist als der was gespeichert worden ist. also
if(gettime()>timestampvonderdatei) //.... wenn das eintrift dann löscht du den eintrag von der datei wieder und
{
Login(playerid); //der spieler kann sich ganz normal einloggen
}
else // wenn nicht dann schreibst du ihm ne message blabla timeban und kickst ihn anschliesend
{
SendClientmessage
kick...
}
ps: das ist nur ein beispiel mit nicht korrekter Syntax es soll nur die Logik von oben wiederspiegeln
Danke,
mal ne neben Frage.
Muss time für nen timer interger oder float sein?
Wieso sollte die Zeit bitte ein Float sein ?
kA, also Interger?
Viel mehr Möglichkeiten gibts ja wohl nicht ein Boolean wirds wohl kaum sein
Okay danke
Jetzt noch kurz ne Frage, was ist an meinem mute command falsch?
public OnPlayerText(playerid, text[])
{
if(muted[playerid] == true)
{
SendClientMessage(playerid, COLOR_RED, "Du bist gemuted!");
return 0;
}
return 1;
}
public Mute(playerid)
{
muted[playerid] = false;
return 1;
}
ocmd:mute(playerid, params[])
{
new Grund[128], aName[MAX_PLAYER_NAME], pName[MAX_PLAYER_NAME], str[128], str2[128], pID, time;
if(sscanf(params, "usi", pID, Grund, time)) SendClientMessage(playerid,COLOR_RED,"Benutzung: /mute [ID] [Grund] [Minuten]");
else if(Spieler[playerid][pAdmin] < 3) SendClientMessage(playerid,COLOR_RED,"Du bist kein Supporter!");
else if(muted[pID] == true) SendClientMessage(playerid, COLOR_RED, "Spieler ist bereits gemuted.");
else
{
GetPlayerName(playerid, aName, sizeof(aName));
GetPlayerName(pID, pName, sizeof(pName));
format(str, sizeof(str), "Du wurdest von %s für %d Minuten gemuted. Grund: %s", aName, time, Grund);
format(str2, sizeof(str2), "Du hast %s für %d Minuten gemuted. Grund: %s", pName, time, Grund);
SendClientMessage(pID, COLOR_RED, str);
SendClientMessage(playerid, COLOR_RED, str2);
muted[playerid] = true;
SetTimer("Mute", time*60*2, 0);
}
return 1;
}
Es kommen die richtigen Nachrichten, nur ich kann dann noch schreiben
1. Wenn du true/false nutzt, muss "muted" ein Boolean sein
new Bool:muted[MAX_PLAYERS];
2. Setzt du "muted" immer für playerid auf false, sprich für den der den Befehl eingibt.
3. Musst du SetTimerEx anstatt SetTimer nutzen.
edit: Fehler
Ok, aber was muss ich dann bei den letzten beiden Parametern hinschreiben?
SetTimerEx("Mute",time*60*2,false,"i",pID);
So siehts aus und ich kann immer noch schreiben wenn ich gemuted bin <_<
public OnPlayerText(playerid, text[])
{
if(muted[playerid] == true)
{
SendClientMessage(playerid, COLOR_RED, "Du bist gemuted!");
return 0;
}
return 1;
}
public Mute(playerid)
{
muted[playerid] = false;
return 1;
}
ocmd:mute(playerid, params[])
{
new Grund[128], aName[MAX_PLAYER_NAME], pName[MAX_PLAYER_NAME], str[128], str2[128], pID, time;
if(sscanf(params, "usi", pID, Grund, time)) SendClientMessage(playerid,COLOR_RED,"Benutzung: /mute [ID] [Grund] [Minuten]");
else if(Spieler[playerid][pAdmin] < 3) SendClientMessage(playerid,COLOR_RED,"Du bist kein Supporter!");
else if(muted[pID] == true) SendClientMessage(playerid, COLOR_RED, "Spieler ist bereits gemuted.");
else
{
GetPlayerName(playerid, aName, sizeof(aName));
GetPlayerName(pID, pName, sizeof(pName));
format(str, sizeof(str), "Du wurdest von %s für %d Minuten gemuted. Grund: %s", aName, time, Grund);
format(str2, sizeof(str2), "Du hast %s für %d Minuten gemuted. Grund: %s", pName, time, Grund);
SendClientMessage(pID, COLOR_RED, str);
SendClientMessage(playerid, COLOR_RED, str2);
muted[playerid] = true;
SetTimerEx("Mute",time*60*2,false,"i",pID);
}
return 1;
}
muted[playerid] = true;
Hab ich doch bereits geschrieben das du muted für pID und nicht für playerid setzen musst.
huch
Aber ich hab mich testweise aufm homeserver selbst gemuted, dann hätte es doch theoretisch auch gehen sollen oder nicht
Eigentlich schon, ich sehe nämlich soweit keine sonstigen Fehler.
Hm,... Ist die Rechnung denn richtig?
Gut das du drauf hinweist, nein ist sie nicht, da alles in Millisekunden gerechnet wird, so ist es richtig:
60000*time (1 Minute * Minutenparameter)
Danke funktioniert
Dann schließ ich hier mal