Ja richtig, Ich will das die Nachricht nur einmal kommt, so wird jetzt das böse Wort nur mit einem * zensiert, nicht mehr das ganze geht das auch anders?
Beiträge von Manuel20
-
-
Hallo
Ich habe ein Problem, ich habe ein AFK System, wenn sich ein Spieler ne Zeit lang nicht bewegt, erscheint über Ihm ein Tag, mit Spieler ist AFK.
Dieses ist im moment leider verbuggt, es wird nur der ID 0 Angezeigt, sobald ID 0 den Server betritt, wird es ihm angezeigt, auch wenn er sich bewegt was ist daran falsch? hoffe es kann mir jmd helfen.
#define MAX_AFKTIME 3 // In Minutenforward StartAFK(playerid);
forward StopAFK(playerid);
forward Check();new Float:Pos[MAX_PLAYERS][3];
public OnFilterScriptInit()
{
SetTimer("Check", 10000, 1);
return 1;
}public OnFilterScriptExit()
{
for(new i=0; i<MAX_PLAYERS; i++) {
StopAFK(i);
}
return 1;
}public Check()
{
for(new i=0; i<MAX_PLAYERS; i++) {
if(!IsPlayerConnected(i)) continue;
new Float:x, Float:y, Float:z;
GetPlayerPos(i, x, y, z);if(!GetPVarInt(i,"TabbedOut"))
{
if((GetTickCount() - GetPVarInt(i, "LastUpdate")) >= 1000) {
SetPVarInt(i, "TabbedOut", 1);
CallLocalFunction("StartAFK", "i", i);
}
if(x != 0) {
if(Pos[i][0] == x && Pos[i][1] == y && Pos[i][2] == z) {
SetPVarInt(i, "AFKTime", GetPVarInt(i, "AFKTime") + 1);
}
}if(!(Pos[i][0] == x && Pos[i][1] == y && Pos[i][2] == z)) {
CallLocalFunction("StopAFK", "i", i);
}
}
if(GetPVarInt(i, "TabbedOut"))
{
SetPVarInt(i, "AFKTime", GetPVarInt(i, "AFKTime") + 1);
}if(GetPVarInt(i, "AFKTime") == 300) {
CallLocalFunction("StartAFK", "i", i);
}if(GetPVarInt(i, "AFKTime") >= MAX_AFKTIME*60) {
printf("Spieler AFK Zeit %d", GetPVarInt(i, "AFKTime"));
new string[70], name[24];
GetPlayerName(i, name, 24);
TogglePlayerControllable(i,false);
format(string, sizeof(string), "%s wurde gekickt. AFK", name);
SendClientMessageToAll(0xFF6347AA, string);
Kick(i);
}
GetPlayerPos(i, Pos[i][0], Pos[i][1], Pos[i][2]);
}
return 1;
}public OnPlayerConnect(playerid)
{
for(new i=0; i<3; i++) {
Pos[playerid][i] = 0;
}
return 1;
}public OnPlayerDisconnect(playerid, reason)
{
DeletePVar(playerid, "TabbedOut");
DeletePVar(playerid, "LastUpdate");
return 1;
}public OnPlayerUpdate(playerid)
{
SetPVarInt(playerid, "LastUpdate", GetTickCount());
if(GetPVarInt(playerid, "TabbedOut")) {
SetPVarInt(playerid, "TabbedOut", 0);
CallLocalFunction("StopAFK", "i", playerid);
}
return 1;
}public StartAFK(playerid)
{
if(GetPVarInt(playerid, "AFKText")) Delete3DTextLabel(Text3D:GetPVarInt(playerid, "AFKText"));
SetPVarInt(playerid, "AFKText", _:Create3DTextLabel("Spieler ist AFK", 0xFF0000FF, 0.0, 0.0, 0.0, 35.0, GetPlayerVirtualWorld(playerid), 1));
Attach3DTextLabelToPlayer(Text3D:GetPVarInt(playerid, "AFKText"), playerid, 0.0, 0.0, 0.3);
SetPlayerColor(playerid, 0xFF0000FF);
return 1;
}public StopAFK(playerid)
{
if(GetPVarInt(playerid, "AFKText")) Delete3DTextLabel(Text3D:GetPVarInt(playerid, "AFKText"));
if(GetPVarInt(playerid, "AFKTime")) DeletePVar(playerid, "AFKTime");
SetPlayerColor(playerid, 0xFFFFFFFF);
return 1;
} -
Hallo ich habe ein kleines Scipts was Wörter überprüft es klappt alles nur möchte ich noch eine nachricht senden lassen wenn ich sie aber so rein mache wie jetzt wird es ca 20mal gespammt egal was man eingibt im chat man bekommt diese nachricht ich möchte sie aber nur einmal senden lassen nachdem * zensierung wie mache ich das?
for(new s = 0; s < num_words; s++)
{
SendClientMessage(playerid,0xFF6347AA,"Unterlasse dieses Wort!");
new pos;
while((pos = strfind(text,Swears[s],true)) != -1) for(new i = pos, j = pos + strlen(Swears[s]); i < j; i++){
text[i] = '*';
}
}
return 1;
} -
Bei sscanf2 muss man aber eine länge angeben ich weiss aber nicht wo! sonst würde es ja nicht in den Logs stehen
-
Hallo habe einen Befehl wenn dieser eingegeben wird kommt in den Logs folgende Medlung:
Zitat
[23:47:16] [Befehl] von ABC (ID:4): /startduell 2 deagle 1
[23:47:16] sscanf warning: Strings without a length are deprecated, please add a destination size.
[23:47:16] sscanf warning: Format specifier does not match parameter count.es fehlt eine String angabe habe eine schon gesetzt bei "isi" aber anscheinend falsch wo muss ich noch eine string angabe einsetzen?
dcmd_startduell(playerid, params[])
{
new
giveplayerid,
weapon[128],
price;
new string[256];
new sendername[MAX_PLAYER_NAME];
new giveplayername[MAX_PLAYER_NAME];
if (sscanf(params, "isi[168]", giveplayerid,weapon,price))
{
SendClientMessage(playerid, COLOR_YELLOW, " Benutze: /startduell ");
SendClientMessage(playerid, COLOR_YELLOW, " Duell Waffen: deagle, mp5, shotgun, sdpistol");
return 1;
}
else
{ -
Hallo Ich habe einm Script, wenn ich enter drücke und der skin ins auto steigt zeigt es mir die meldung /engine um zu starten an nun wenn ich 10mal enter spamme kommt die meldung auch 10mal wie kann ich es machen das diese nur einmal kommt?
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
new string[20];
format(string, sizeof(string), "~r~%s", aVehicleNames[GetVehicleModel(vehicleid)-400]);
GameTextForPlayer(playerid, string, 4000, 1);
SendClientMessage(playerid, COLOR_WHITE, "Motor starten: /engine");
if(Lock[vehicleid] == 1)
{
ClearAnimations(playerid);
SendClientMessage(playerid,COLOR_GREEN,"Dieses Fahrzeug ist verschlossen!");
return 1;
}
return 1;
} -
Hier die letzen 3 Logs kurz bervor er abstützt ersichtlich durch die vielen incomming connections ohne rückmeldung von Server (Namen /ips zensiert)
Zitat
[11:49:07] [kill] 55 killed 55 Desert Eagle
[11:49:26] [kill] 55 killed 55 Shotgun
[11:49:27] [chat] [55]: 55
[11:49:30] [chat] [55]: :55
[11:49:43] [kill] 55 killed 55 MP5
[11:49:43] [kill] 55 killed 55 Desert Eagle
[11:49:44] Incoming connection: 55
[11:49:44] [join] 55 has joined the server (55)
[11:50:03] Incoming connection: 55
[11:51:03] Incoming connection: 55
[11:51:17] Incoming connection: 55
[11:58:31] Incoming connection: 55
[11:58:37] Incoming connection: 55
[11:58:51] Incoming connection: 55Zitat
[01:12:59] [Befehl] von 55 (ID:1): /55
[01:12:59] [death] 55 255
[01:13:02] [Befehl] von 55 (ID:0): /55
[01:13:07] Incoming connection: 55
[01:13:07] [join] 55 has joined the server (55)
[01:13:07] 28/04/2012 [join] 55 (IP:55) betritt den Server, Totale Server Verbindungen (20) - (Spieler ID: 7)
[01:13:10] [Befehl] von55(ID:5): /55
[01:13:10] [Befehl] von 55(ID:5): /55
[01:13:14] Incoming connection: 55
[01:13:14] [join] 55 has joined the server (55)
[01:13:25] Incoming connection: 55
[01:13:49] Incoming connection:55
[01:13:50] Incoming connection: 55
[01:14:15] Incoming connection: 55
[01:14:55] Incoming connection:55
[01:15:22] Incoming connection: 55
[01:15:27] Incoming connection: 55
[01:15:34] Incoming connection: 55Zitat
[23:35:36] [death] 55 died 255
[23:35:39] [Befehl] von 55 (ID:2): /55
[23:35:41] [chat] [55]: ups
[23:35:42] Incoming connection: 55
[23:35:43] [join] 55 has joined the server (55)
[23:36:17] Incoming connection: 55
[23:36:37] Incoming connection: 55
[23:37:31] Incoming connection: 55immer bei has joined the server scheint er mir abzustützen aber manchmal erst nach 3 stunden über 100 spieler verbindungen und machmal innerhalb von 20 minuten nach nur etwa 20 joins obwohl ich nichts verändert habe was kann das sein ?
-
Hallo Ich habe ein Problem mit meinem Server
also er läuft manchmal 3 stunden ca 200 joins danach stürtzt er ab und manchmal stürtzt er schon nach 10 incaomming connections ab in de logs ist immer ein [11:49:44] Incoming connection: ****
[11:49:44] [join] blabl has joined the server (***) und danach stürtzt er ab und es steht nur noch Incoming connection: server ist noch an man kommt aber nicht mehr zum login an was kann das liegen? -
und wie kann ich die id verschiebeng verhindern oder welcher teil des scipts könnte falsch sein
-
Level error prüft ob der Spieler Admin ist und das funktioniert also du meinst PLID?
hier:ganz oben new plid;
gleiches Problem habe ich auch mit diesem befehl immer wenn mehr als 5 oder 10 spieler drauf sind buggen diese befehle rum...
dcmd_setlevel(playerid, params[])
{
new Level;
levelerror(5);
if(sscanf(params, "ud", plid, Level)) return SendErrorMessage(playerid, "Benutze: /setlevel <ID> <Level>");
if (Level < 0 || Level > 5) return SendErrorMessage(playerid, "* Level 1 - 5 wählen!");
format(Query, sizeof(Query), "UPDATE `playerinfo` SET `adminlvl` = %d WHERE `user` = '%s'", Level, escpname(plid));
mysql_query(Query);
mysql_free_result();
format(ssstring, sizeof(ssstring), "Du hast {FF00AA}%s(%d){FFFFFF} Level auf %d gesetzt!", PlayerName(plid), plid, Level);
SendClientMessage(playerid, 0xFFFFFF, ssstring);
if(GetPVarInt(plid, "AdminLevel") < Level) format(ssstring, sizeof(ssstring), "* Du wurdest {CC00FF}Befördert{FFFFFF} zum Level %d von %s(%d)", Level, PlayerName(playerid), playerid);
if(GetPVarInt(plid, "AdminLevel") > Level) format(ssstring, sizeof(ssstring), "* Du wurdest {FF00AA}Degradiert{FFFFFF} zum Level %d von %s(%d)", Level, PlayerName(playerid), playerid);
SendClientMessage(plid, 0xFFFFFF, ssstring);
SetPVarInt(plid, "AdminLevel", Level);
return 1;
} -
Hallo Ich habe ein Problem und zwar wenn mehr als etwa 5 Spieler auf dem Server sind und ich zbs. Id 3 Kicken will wird immer jmd anderst gekickt immer der falsche wird gekickt woran liegt das??
Hier der Befehl:
dcmd_kick(playerid, params[])
{
levelerror(3);
if(sscanf(params, "us[200]", plid, estring)) return SendErrorMessage(playerid, "Benutze: /kick <ID> <Grund>");
if (!IsPlayerConnected(plid)) return SendErrorMessage(playerid, "* Spieler nicht Online!");
format(ssstring, sizeof(ssstring), "* Du hast {FFFFFF}%s(%d) vom Server gekickt!", PlayerName(plid), plid);
SendClientMessage(playerid, 0x66FF33, ssstring);
format(largestring, sizeof(largestring), " %s(%d) hat dich vom Server gekickt \r\nGrund: %s", escpname(playerid), playerid, estring);
ShowPlayerDialog(plid, DIALOG_KICK, DIALOG_STYLE_MSGBOX, "Du wurdest vom Server gekickt!", largestring, "Ok", "Verlassen");
TogglePlayerControllable(plid,false);
Kick(plid);
return 1;
}plid ist oben schon definiert im script
-
Hallo Ich habe ein script erstellt was die Spielzeit "Minute" "Stunde" speichern soll leider ist es verbuggt und speichert manchmal ne zu lange zeit also zbs war ich 10 minuten online und er speicher 7 Stunden ab oder auch mal das richtige ist ganz komisch an der timer zeit leigt es nicht hier mal die codes des systems:
enum gPlayerInfo
{
minutesPlayed,
hoursPlayed,
Onlinetimer
};
if(response)
{
if(rows > 0)
{
if(mysql_fetch_row(line))
{
new savingstring[20];
new data[3][55];
new data2[5];
sscanf(line, "p<|>s[50]s[300]dddds[50]ds[100]", data[0], largestring, data2[0], data2[1], data2[2], data2[3], data[2], data2[4], estring);
stringempty(estring);
stringempty(largestring);
SetPVarInt(playerid, "Logged", 1);
mysql_fetch_field_row(savingstring, "hoursplayed"); PlayerInfo[playerid][hoursPlayed] = strval(savingstring);
mysql_fetch_field_row(savingstring, "minutesplayed"); PlayerInfo[playerid][minutesPlayed] = strval(savingstring);
SendClientMessage(playerid, COLOR_YELLOW, "* Erfolgreich Eingeloggt!");
mysql_free_result();
PlayerInfo[playerid][Onlinetimer] = SetTimerEx("CheckHMPlayed", 60000, 1, "i", playerid);
GetPlayerIp(playerid, PIP, 18);
format(Query, sizeof(Query), "UPDATE `playerinfo` SET IP = '%s' WHERE user='%s'", PIP, escpname(playerid));
mysql_query(Query);
}
}
}
}
return 1;
}
stock GetPlayerHours(playerid) return PlayerInfo[playerid][hoursPlayed];
stock GetPlayerMinutes(playerid) return PlayerInfo[playerid][minutesPlayed];
public CheckHMPlayed(playerid)
{
PlayerInfo[playerid][minutesPlayed]++;
if(PlayerInfo[playerid][minutesPlayed] == 60)
{
PlayerInfo[playerid][hoursPlayed]++;
PlayerInfo[playerid][minutesPlayed] = 0;
}
}//
Habe nun rausgefunden das nur bei ID 0 die Zeit gezählt wird an was liegt es das nicht bei jedem einzeln gezählt wird? -
Hallo Ich habe folgenden TeamChat:
dcmd_teamchat(playerid,params[])
{
new message[128];
new pName[128];
if(ChatClose == 1)
{
SendClientMessage(playerid, 0x828282FF, "* Der Chat ist momentan geschlossen");
return false;
}
if(GetPVarInt(playerid, "muted") == 1)
{
SendErrorMessage(playerid, "* Du bist gemutet und kannst nicht sprechen!");
return 0;
}
if(sscanf(params, "s", message))
{
return SendClientMessage(playerid,0xFF8200FF, " Team-Chat -> Benutze: /teamchat [Nachricht]");
}
else
{
for(new i = 0; i <= MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(gTeam[playerid] == gTeam[i])
{
if(gTeam[playerid] == TEAM_Gangsta)
{
new text[128];
GetPlayerName(playerid, pName, sizeof(pName));
format(text, sizeof(text), "[TEAMCHAT] %s: %s", pName, message);
SendClientMessage(i,0x00D7FFFF, text);
}
else if(gTeam[playerid] == TEAM_Cops)
{
new text[128];
GetPlayerName(playerid, pName, sizeof(pName));
format(text, sizeof(text), "[TEAMCHAT] %s: %s", pName, message);
SendClientMessage(i,0x00D7FFFF, text);
}
else if(gTeam[playerid] == TEAM_Mafia)
{
new text[128];
GetPlayerName(playerid, pName, sizeof(pName));
format(text, sizeof(text), "[TEAMCHAT] %s: %s", pName, message);
SendClientMessage(i,0x00D7FFFF, text);
}
else if(gTeam[playerid] == TEAM_Gangstas)
{
new text[128];
GetPlayerName(playerid, pName, sizeof(pName));
format(text, sizeof(text), "[TEAMCHAT] %s: %s", pName, message);
SendClientMessage(i,0x00D7FFFF, text);
}
}
}
}
}
return 1;
}Es klappt auch alles nur zeigt er mir in den Logs immer das an:
Code[21:42:56] [Befehl] von UserName(ID:6): /teamchat blablabl [21:42:56] sscanf warning: Strings without a length are deprecated, please add a destination size.
Was muss ich ändern ?
-
wenn ich mich nun registriert habe werde ich direkt gekickt^^
GameTextForPlayer(playerid, "~g~REGISTRIERT", 3000, 3);
SendClientMessage(playerid, COLOR_GREEN, "* Erfolgreich Registriert. Du bist nun Eingeloggt. Viel Spass!");
SetPVarInt(playerid, "Logged", 1);
}
else
{
TogglePlayerControllable(playerid,false);
Kick(playerid);
}
} -
also ich habe ja dieses script wie oben
ShowPlayerDialog(playerid, 14600, DIALOG_STYLE_INPUT , "Registrieren", "Dieser Account ist nicht Registriert. Bitte Registriere dich!", "Registrieren", "Verlassen");
wenn ich auf register drücke registriere ich mich das klappt aber wenn ich auf verlassen klicke schliesst sich nur der dialog ich möchte aber das der spieler dan gekickt wird
-
Danke Dudalus klappt nun
eine frage noch wie kann ich machen wenn ich beim Dialog auf Verlassen drücke das ich gekickt werde? -
habe keine doppelte ids es geht alles kann ein normales pw eingeben und kan mich danach normal einloggen ich will einfach das ein spieler mindst. 4 zeichen benutzen muss um sich einzuloggen aber das geht nicht -.- wenn ich enter drücke registriert er das pw nicht also hald enter^^
if(dialogid == 14600)
{
if(response)
{
if(strlen(inputtext) >= 4)
{
ShowPlayerDialog(playerid, 14600, DIALOG_STYLE_INPUT , "Registrieren", "Dieser Account ist nicht Registriert. Bitte Registriere dich!", "Registrieren", "Verlassen");
return SendClientMessage(playerid, 0xF60000AA, "* Gib nun dein Passwort ein!");
}
new year, month, day;
getdate(year, month, day);
mysql_real_escape_string(inputtext, escpass);
WP_Hash(largestring, sizeof(largestring), escpass);
GetPlayerIp(playerid, PIP, 50);
mysql_query(Query);
SendClientMessage(playerid, COLOR_GREEN, "* Erfolgreich Registriert. Du bist nun Eingeloggt.");
SetPVarInt(playerid, "Logged", 1);
}
}
if(dialogid == 15000)
{
if(response)
{
WP_Hash(largestring, sizeof(largestring), inputtext);
format(Query, sizeof(Query), "SELECT * FROM `playerinfo` WHERE `user` = '%s' AND `password` = '%s' LIMIT 1", escpname(playerid), largestring);
mysql_query(Query);
mysql_store_result();
new rows = mysql_num_rows();
if(!rows)
{
SendClientMessage(playerid, 0xF60000AA, "* Falsches Passwort");
SetPVarInt(playerid, "WrongPass", GetPVarInt(playerid, "WrongPass") + 1);
ShowPlayerDialog(playerid, 15000, DIALOG_STYLE_INPUT , "Einloggen", "Dieser Account ist Registriert. Bitte Logge dich ein!", "Einloggen", "Verlassen");
if(GetPVarInt(playerid, "WrongPass") == 3)
{
SendClientMessage(playerid, 0xF60000AA, "* Du hast zu viele versuche mit falschem Passwort getätigt!");
TogglePlayerControllable(playerid,false);
Kick(playerid);
}
mysql_free_result();
}
else if(rows > 0)
{
if(mysql_fetch_row(line))
{
new savingstring[20];
new data[3][55];
new data2[5];
sscanf(line, "p<|>s[50]s[300]dddds[50]ds[100]", data[0], largestring, data2[0], data2[1], data2[2], data2[3], data[2], data2[4], estring);
mysql_query(Query);
}
}
}
}
return 1;
} -
geht immer noch nicht wenn ich enter drücke wird der account direkt registriert ohne passwort
habs nun so:
if(dialogid == 14600)
{
if(response)
{
if(strlen(inputtext) >= 4)
{
ShowPlayerDialog(playerid, 14600, DIALOG_STYLE_INPUT , "Registrieren", "Dieser Account ist nicht Registriert!", "Registrieren", "Verlassen");
return SendClientMessage(playerid, 0xF60000AA, "* Gib nun dein Passwort ein!");
} -
Hallo habe ein Problem mit folgendem Scriptteil:
if(dialogid == 14600)
{
if(response)
{
if(!strlen(inputtext) && strlen(inputtext) >= 4)
{
ShowPlayerDialog(playerid, 14600, DIALOG_STYLE_INPUT , "Registrieren", "Dieser Account ist nicht Registriert!", "Registrieren", "Verlassen");
return SendClientMessage(playerid, 0xF60000AA, "* Gib nun dein Passwort ein!");
}wenn ich joine kommt dieses fenster zum einloggen wenn ich enter drücke wird mein account registriert mit keinem pw also nur enter ist das pw wie muss ich es machen das ich mindst. 4 buchstaben eingeben muss im pw fenster und wenn ich enter drücke ohne eingabe die meldung kommt du brauchts mind. 4 buchstaben in deinem Passwort??
-
Hallo habe folgendes PN System
dcmd_pn(playerid, params[])
{
new string[128], pname[MAX_PLAYER_NAME], name[MAX_PLAYER_NAME], id, message[92];
if(sscanf(params, "us[92]", id, message)) return SendClientMessage(playerid, -1, "Benutze: /pn [Spieler-ID] [Text]");
if(id == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "* Spieler ist nicht Online!");
GetPlayerName(playerid, pname, sizeof(pname));
GetPlayerName(id, name, sizeof(name));
PlayerPlaySound(id, 1085, 0.0, 0.0, 0.0);
format(string, sizeof(string), "** PN gesendet an: %s(%d): %s", name, id, message);
SendClientMessage(playerid, COLOR_YELLOW, string);
format(string, sizeof(string), "** PN von %s(%d): %s", pname, playerid, message);
SendClientMessage(id, COLOR_YELLOW, string);
return 1;
}Es funktioniert soweit nur kann ich an ID`s die nicht besetzt sind auch Nachrichten schreiben obwohl ich eigtl. die meldung Spieler ist nicht Online bekommen sollte warum geht das nicht?