Komischerweise steht jetzt auch folgendes im Log:
Lade mal crashdetect und poste dann mal deinen server_log
Komischerweise steht jetzt auch folgendes im Log:
Lade mal crashdetect und poste dann mal deinen server_log
Hier mal etwas schöner:
CAlles anzeigenCMD:admins(playerid) { if(!Spieler[playerid][pLoggedIn]) return 1; new string[18 + MAX_PLAYER_NAME]; new a_rang[][] = {"Communityhelfer", "Supporter", "Moderator", "Admin", "Head Admin", "Projektleiter"}; SendClientMessage(playerid,Gruen,"Admins Online:"); for(new i=GetPlayerPoolSize(); i!=-1; i--) { if(!Spieler[i][pLoggedIn] || !Spieler[i][pAdminlevel]) continue; format(string,sizeof(string),"%s: %s",a_rang[Spieler[i][pAdminlevel]-1],Spieler[i][pName]); SendClientMessage(playerid,Grau,string); } if(!string[0]) return SendClientMessage(playerid,Grau,"Zurzeit ist kein Teammitglied online."); return 1; }
Dein Fehler war, dass du das SendClientMessage nicht in die Schleife gesetzt hattest
Danke für deine schnelle Antwort.
Jetzt ist dies aber nicht mehr sortiert sprich,
Projektleiter: ArcadioN
Head Admin: SpielerA
Admin: SpielerB
u.s.w
Lade mal crashdetect und poste dann mal deinen server_log
Hi,
danke schon mal für deine Hilfe. =)
Hatte das Problem jetzt gefixxt, indem ich diese 2 Dinge jeweils beim Register, sowie beim Login gelöscht habe:
new whirlpoolHash[129];
WP_Hash(whirlpoolHash, sizeof(whirlpoolHash), inputtext);
Jetzt lädt auch wieder alles normal. =)
Jetzt ist dies aber nicht mehr sortiert sprich,
Achso du wolltest es sortiert, das musst du auch schreiben Denn bei deinem Code...war das auch nicht sortiert.
Hol dir diese Include: https://raw.githubusercontent.…d-sort/master/md-sort.inc
Und inkludiere die, anschließend kannst du das so machen:
CMD:admins(playerid)
{
if(!Spieler[playerid][pLoggedIn]) return 1;
new string[18 + MAX_PLAYER_NAME];
new a_rang[][] = {"Communityhelfer", "Supporter", "Moderator", "Admin", "Head Admin", "Projektleiter"};
new sort[20][2],c;
SendClientMessage(playerid,Gruen,"Admins Online:");
for(new i=GetPlayerPoolSize(); i!=-1; i--)
{
if(!Spieler[i][pLoggedIn] || !Spieler[i][pAdminlevel]) continue;
sort[c][0] = Spieler[i][pAdminlevel]-1, sort[c++][1] = i;
}
if(c > 0)
{
SortDeepArray(sort, 0);
for(new i=c-1; i != -1; i--)
{
format(string,sizeof(string),"%s: %s",a_rang[sort[i][0]],Spieler[sort[i][1]][pName]);
SendClientMessage(playerid,Grau,string);
}
}
else return SendClientMessage(playerid,Grau,"Zurzeit ist kein Teammitglied online.");
return 1;
}
Alles anzeigen
Achso du wolltest es sortiert, das musst du auch schreiben Denn bei deinem Code...war das auch nicht sortiert.
Hol dir diese Include: https://raw.githubusercontent.…d-sort/master/md-sort.inc
Und inkludiere die, anschließend kannst du das so machen:
CAlles anzeigenCMD:admins(playerid) { if(!Spieler[playerid][pLoggedIn]) return 1; new string[18 + MAX_PLAYER_NAME]; new a_rang[][] = {"Communityhelfer", "Supporter", "Moderator", "Admin", "Head Admin", "Projektleiter"}; new sort[20][2],c; SendClientMessage(playerid,Gruen,"Admins Online:"); for(new i=GetPlayerPoolSize(); i!=-1; i--) { if(!Spieler[i][pLoggedIn] || !Spieler[i][pAdminlevel]) continue; sort[c][0] = Spieler[i][pAdminlevel]-1, sort[c++][1] = i; } if(c > 0) { SortDeepArray(sort, 0); for(new i=c-1; i != -1; i--) { format(string,sizeof(string),"%s: %s",a_rang[sort[i][0]],Spieler[sort[i][1]][pName]); SendClientMessage(playerid,Grau,string); } } else return SendClientMessage(playerid,Grau,"Zurzeit ist kein Teammitglied online."); return 1; }
Ich bin Adminlevel 6 und mir wird Ingame anzeiegt das ich Communityhelfer helfer bin ? :o
Ich bin Adminlevel 6 und mir wird Ingame anzeiegt das ich Communityhelfer helfer bin ? :o
Bist du sicher, dass du das bist?
Kannste ja leicht rausfinden, schreib mal die Schleife so:
for(new i=GetPlayerPoolSize(); i!=-1; i--)
{
if(!Spieler[i][pLoggedIn] || !Spieler[i][pAdminlevel]) continue;
sort[c][0] = Spieler[i][pAdminlevel]-1, sort[c++][1] = i;
printf("%d | %s",Spieler[i][pAdminlevel]-1,Spieler[i][pName]);
}
Und dann poste mal den Debug ausschnitt aus dem server_log
Hi,
folgendes:
Nachdem ich mein Passwort eingegeben habe, dauert es immer 1500ms, bis ich In-Game bin, da ich es früher so gemacht habe unter DIALOG_REGISTER:
"SetTimerEx("LoadAccount", 1500, false, "d", playerid);"
LoadAccount:
public LoadAccount(playerid)
{
new string[128];
mysql_format(dbhandle, string, sizeof(string), "SELECT * FROM user WHERE username='%e' LIMIT 1;", SpielerName(playerid));
new Cache:result = mysql_query(dbhandle, string);
cache_set_active(result);
cache_get_value_name_int(0, "id", sInfo[playerid][id]);
cache_get_value_name_int(0, "money", sInfo[playerid][money]);
cache_get_value_name_int(0, "alevel", sInfo[playerid][alevel]);
cache_get_value_name_int(0, "skin", sInfo[playerid][skin]);
cache_get_value_name_int(0, "level", sInfo[playerid][level]);
cache_get_value_name_int(0, "kills", sInfo[playerid][kills]);
cache_get_value_name_int(0, "deaths", sInfo[playerid][deaths]);
sInfo[playerid][eingeloggt] = 1;
SetPlayerMoney(playerid, sInfo[playerid][money]);
SetPlayerScore(playerid, sInfo[playerid][level]);
SendClientMessage(playerid, COLOR_GREEN, "[Willkommen]: Du hast dich erfolgreich eingeloggt.");
if (GetPVarInt(playerid, "FirstSpawn") == 0)
{
if (isAdmin(playerid, 1))
{
format(string, sizeof(string), "{FFFF00}Du bist {FF4000}%s{FFFF00}.", TeamNames[sInfo[playerid][alevel]]);
SendClientMessage(playerid, COLOR_YELLOW, string);
}
SetPVarInt(playerid, "FirstSpawn", 1);
}
SetPlayerSkin(playerid, sInfo[playerid][skin]);
SpawnPlayer(playerid);
cache_unset_active();
cache_delete(result);
sInfo[playerid][sektimer] = SetTimerEx("SekundenTimer", 1000, true, "d", playerid);
Spectate[playerid] = TextDrawCreate(75.0, 150.0, " ");
TextDrawFont(Spectate[playerid], 1);
TextDrawLetterSize(Spectate[playerid], 0.25, 1.0);
TextDrawHideForPlayer(playerid, Spectate[playerid]);
SetPVarInt(playerid, "spectate", INVALID_PLAYER_ID);
return 1;
}
Kann ich es irgendwie ohne großen Aufwand so umschreiben, dass ich nicht mehr die 1500ms warten muss?
Bist du sicher, dass du das bist?
Kannste ja leicht rausfinden, schreib mal die Schleife so:
Cfor(new i=GetPlayerPoolSize(); i!=-1; i--) { if(!Spieler[i][pLoggedIn] || !Spieler[i][pAdminlevel]) continue; sort[c][0] = Spieler[i][pAdminlevel]-1, sort[c++][1] = i; printf("%d | %s",Spieler[i][pAdminlevel]-1,Spieler[i][pName]); }
Und dann poste mal den Debug ausschnitt aus dem server_log
[15:26:05] [connection] 127.0.0.1:59073 requests connection cookie.
[15:26:06] [connection] incoming connection: 127.0.0.1:59073 id: 0
[15:26:07] [join] ArcadioN has joined the server (0:127.0.0.1)
[15:26:15] 5 | ArcadioN
In der Datenbank steht auch das ich Adminlevel 6 bin und nicht 5 :o
[15:26:15] 5 | ArcadioN
Ah ja, hab vergessen die Leeren zu skippen. //Edit: Noch was vergessen, schreib es so:
CMD:admins(playerid)
{
if(!Spieler[playerid][pLoggedIn]) return 1;
new string[18 + MAX_PLAYER_NAME];
new a_rang[][] = {"Communityhelfer", "Supporter", "Moderator", "Admin", "Head Admin", "Projektleiter"};
new sort[20][2],c;
SendClientMessage(playerid,Gruen,"Admins Online:");
for(new i=GetPlayerPoolSize(); i!=-1; i--)
{
if(!Spieler[i][pLoggedIn] || !Spieler[i][pAdminlevel]) continue;
sort[c][0] = Spieler[i][pAdminlevel], sort[c++][1] = i;
}
if(c > 0)
{
SortDeepArray(sort, 0);
for(new i=sizeof(sort)-1; i != -1; i--)
{
if(!sort[i][0]) continue;
format(string,sizeof(string),"%s: %s",a_rang[sort[i][0]-1],Spieler[sort[i][1]][pName]);
SendClientMessage(playerid,Grau,string);
}
}
else return SendClientMessage(playerid,Grau,"Zurzeit ist kein Teammitglied online.");
return 1;
}
Alles anzeigen
bis ich In-Game bin, da ich es früher so gemacht habe unter DIALOG_REGISTER:
"SetTimerEx("LoadAccount", 1500, false, "d", playerid);"
...Du solltest dir mal anschauen (Tutorials), was es bedeutet Dinge asynchron laden zu lassen.
Du solltest unter DIALOG_REGISTER anstatt dem Timer einfach mysql_pquery oder mysql_tquery nutzen und dann kein mysql_query mehr im Callback.
Du willst nämlich gar kein mysql_query nutzen, deshalb nutzt du ja die Cache Version.
mysql_query lädt alles synchron, du willst es aber asynchron, sonst bringen dir auch die Neusten Plugins überhaupt nix.
Ah ja, hab vergessen die Leeren zu skippen:
CAlles anzeigenCMD:admins(playerid) { if(!Spieler[playerid][pLoggedIn]) return 1; new string[18 + MAX_PLAYER_NAME]; new a_rang[][] = {"Communityhelfer", "Supporter", "Moderator", "Admin", "Head Admin", "Projektleiter"}; new sort[20][2],c; SendClientMessage(playerid,Gruen,"Admins Online:"); for(new i=GetPlayerPoolSize(); i!=-1; i--) { if(!Spieler[i][pLoggedIn] || !Spieler[i][pAdminlevel]) continue; sort[c][0] = Spieler[i][pAdminlevel]-1, sort[c++][1] = i; } if(c > 0) { SortDeepArray(sort, 0); for(new i=sizeof(sort)-1; i != -1; i--) { if(!sort[i][0]) continue; format(string,sizeof(string),"%s: %s",a_rang[sort[i][0]],Spieler[sort[i][1]][pName]); SendClientMessage(playerid,Grau,string); } } else return SendClientMessage(playerid,Grau,"Zurzeit ist kein Teammitglied online."); return 1; }
Danke es funktioniert nun wunderbar.
Ich habe da noch eine andere kleine Frage.
Und zwar wenn ich im Taxi einsteige und den Preis eingebe wird es am falschen Taxi geupdatet.
Code:
case Dialog_TaxiCompany:
{
if(!response){ FreezePlayer(playerid); RemovePlayerFromVehicle(playerid); UnfreezePlayer(playerid); return 1; }
if(response)
{
new str[128],TaxiGeld = strval(inputtext);
new vehicleid = GetPlayerVehicleID(playerid);
if(!strlen(inputtext)){ return ShowPlayerDialog(playerid,Dialog_TaxiCompany,DIALOG_STYLE_INPUT,"Taxi Company","Du kannst nun den Preis festlegen, den die Fahrgäste jede 10 Sekunden bezahlen.\nDer Preis muss mindestens 1$ und maximal 200$ sein.","Weiter","Aussteigen");}
format(str,sizeof(str),"Taxi Company\n\nFahrer: %s\nKosten: %d",Spieler[playerid][pName],TaxiGeld);
UpdateDynamic3DTextLabelText(Vehicle[Taxis[vehicleid]][vehText],Gelb,str);
SendClientMessage(playerid,Hellblau,"Du bist nun im Dienst als Taxifahrer.");
return 1;
}
}
Danke es funktioniert nun wunderbar.
Bitte mach keine Vollzitate, das ist störend.
Und ich hatte noch einen kleinen Fehler in der Version, nimm die, die ich da jetzt gepostet hatte.
Und zwar wenn ich im Taxi einsteige und den Preis eingebe wird es am falschen Taxi geupdatet.
1. Du solltest noch checken ob der Preis auch gültig ist. also > 0 und < 99999 usw
2.
Vehicle[Taxis[vehicleid]][vehText]
Das sieht komisch aus.
Eventuell eher so: Vehicle[vehicleid][vehText]
Aber ich hab keine Ahnung, wie du das Label setzt und was genau Vehicle ist und macht. Ich kann hier nur raten
...Du solltest dir mal anschauen (Tutorials), was es bedeutet Dinge asynchron laden zu lassen.
Du solltest unter DIALOG_REGISTER anstatt dem Timer einfach mysql_pquery oder mysql_tquery nutzen und dann kein mysql_query mehr im Callback.
Du willst nämlich gar kein mysql_query nutzen, deshalb nutzt du ja die Cache Version.
mysql_query lädt alles synchron, du willst es aber asynchron, sonst bringen dir auch die Neusten Plugins überhaupt nix.
Werde ich sicherlich auch machen
Habe jetzt folgendes unter dem DIALOG_REGISTER eingefügt:
"mysql_tquery(dbhandle, query, "LoadAccount", "d", playerid);"
Was muss ich jetzt unter dem LoadAccount noch ändern?
public LoadAccount(playerid)
{
new string[128];
mysql_format(dbhandle, string, sizeof(string), "SELECT * FROM user WHERE username='%e' LIMIT 1;", SpielerName(playerid));
new Cache:result = mysql_query(dbhandle, string);
cache_set_active(result);
cache_get_value_name_int(0, "id", sInfo[playerid][id]);
cache_get_value_name_int(0, "money", sInfo[playerid][money]);
cache_get_value_name_int(0, "alevel", sInfo[playerid][alevel]);
cache_get_value_name_int(0, "skin", sInfo[playerid][skin]);
cache_get_value_name_int(0, "level", sInfo[playerid][level]);
cache_get_value_name_int(0, "kills", sInfo[playerid][kills]);
cache_get_value_name_int(0, "deaths", sInfo[playerid][deaths]);
sInfo[playerid][eingeloggt] = 1;
SetPlayerMoney(playerid, sInfo[playerid][money]);
SetPlayerScore(playerid, sInfo[playerid][level]);
SendClientMessage(playerid, COLOR_GREEN, "[Willkommen]: Du hast dich erfolgreich eingeloggt.");
if (GetPVarInt(playerid, "FirstSpawn") == 0)
{
if (isAdmin(playerid, 1))
{
format(string, sizeof(string), "{FFFF00}Du bist {FF4000}%s{FFFF00}.", TeamNames[sInfo[playerid][alevel]]);
SendClientMessage(playerid, COLOR_YELLOW, string);
}
SetPVarInt(playerid, "FirstSpawn", 1);
}
SetPlayerSkin(playerid, sInfo[playerid][skin]);
SpawnPlayer(playerid);
cache_unset_active();
cache_delete(result);
sInfo[playerid][sektimer] = SetTimerEx("SekundenTimer", 1000, true, "d", playerid);
Spectate[playerid] = TextDrawCreate(75.0, 150.0, " ");
TextDrawFont(Spectate[playerid], 1);
TextDrawLetterSize(Spectate[playerid], 0.25, 1.0);
TextDrawHideForPlayer(playerid, Spectate[playerid]);
SetPVarInt(playerid, "spectate", INVALID_PLAYER_ID);
return 1;
}
Was muss ich jetzt unter dem LoadAccount noch ändern?
new string[128];
mysql_format(dbhandle, string, sizeof(string), "SELECT * FROM user WHERE username='%e' LIMIT 1;", SpielerName(playerid));
new Cache:result = mysql_query(dbhandle, string);
cache_set_active(result);
Das alles löschen.
Vorrausgesetzt du verwendest jetzt den selben Query per mysql_tquery
Vorrausgesetzt du verwendest jetzt den selben Query per mysql_tquery
Ja, verwende ich =)
//Edit: Wenn ich "new Cache:result = mysql_query(dbhandle, string);" entferne, kommt folgende Fehlermeldung:
"script.pwn(1564) : error 017: undefined symbol "result"
Das ist diese Zeile: cache_delete(result);
Soll ich new [..] im Script lassen?
2. Edit:
Jetzt werde ich gar nicht erst gespawnt, nach der Passwort Eingabe:
https://gyazo.com/93cb38cb6a71789f2aba1d6afc7c6070
cache_delete(result);
Kannst du löschen.
Wie sieht denn jetzt dein Code aus?
Zeig mal deinen Query und was im Callback steht
Kann es sein dass wenn man ein Skin als Preview Model nimmt dass es dann Verschwommen wird nach einer weile ?
Bzw Verpixelt ?
Kannst du löschen.
Wie sieht denn jetzt dein Code aus?
Zeig mal deinen Query und was im Callback steht
Habe es jetzt wie folgt unter DIALOG_REGISTER:
if(dialogid==DIALOG_REGISTER)
{
if(!response)
return Kick(playerid);
if(!isnull(inputtext) && strlen(inputtext) > 4)
{
new query[128];
// new whirlpoolHash[129];
//WP_Hash(whirlpoolHash, sizeof(whirlpoolHash), inputtext);
mysql_format(dbhandle, query, sizeof(query), "INSERT INTO user (username, password) VALUES ('%s', '%s')", SpielerName(playerid), inputtext);
//mysql_format(dbhandle, query, sizeof(query), "INSERT INTO user (username, password) VALUES ('%s', '%s')", SpielerName(playerid), whirlpoolHash);
mysql_query(dbhandle, query);
//SetTimerEx("LoadAccount", 1500, false, "d", playerid);
mysql_tquery(dbhandle, query, "LoadAccount", "d", playerid);
}
else
{
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Registrierung", "{FF0000}Dein Passwort muss mindestens 4 Zeichen lang sein!\n\n{FFFFFF}Herzlich Willkommen auf ...!\nEs scheint so, als hättest du noch keinen Account.\nBitte gebe jetzt dein gewünschtes Passwort ein.", "Registrieren", "Abbrechen");
}
}
LoadAccount:
public LoadAccount(playerid)
{
new string[128];
// mysql_format(dbhandle, string, sizeof(string), "SELECT * FROM user WHERE username='%e' LIMIT 1;", SpielerName(playerid));
// new Cache:result = mysql_query(dbhandle, string);
//cache_set_active(result);
cache_get_value_name_int(0, "id", sInfo[playerid][id]);
cache_get_value_name_int(0, "money", sInfo[playerid][money]);
cache_get_value_name_int(0, "alevel", sInfo[playerid][alevel]);
cache_get_value_name_int(0, "skin", sInfo[playerid][skin]);
cache_get_value_name_int(0, "level", sInfo[playerid][level]);
cache_get_value_name_int(0, "kills", sInfo[playerid][kills]);
cache_get_value_name_int(0, "deaths", sInfo[playerid][deaths]);
sInfo[playerid][eingeloggt] = 1;
SetPlayerMoney(playerid, sInfo[playerid][money]);
SetPlayerScore(playerid, sInfo[playerid][level]);
SendClientMessage(playerid, COLOR_GREEN, "[Willkommen]: Du hast dich erfolgreich eingeloggt.");
if (GetPVarInt(playerid, "FirstSpawn") == 0)
{
if (isAdmin(playerid, 1))
{
format(string, sizeof(string), "{FFFF00}Du bist {FF4000}%s{FFFF00}.", TeamNames[sInfo[playerid][alevel]]);
SendClientMessage(playerid, COLOR_YELLOW, string);
}
SetPVarInt(playerid, "FirstSpawn", 1);
}
SetPlayerSkin(playerid, sInfo[playerid][skin]);
SpawnPlayer(playerid);
cache_unset_active();
//cache_delete(result);
sInfo[playerid][sektimer] = SetTimerEx("SekundenTimer", 1000, true, "d", playerid);
Spectate[playerid] = TextDrawCreate(75.0, 150.0, " ");
TextDrawFont(Spectate[playerid], 1);
TextDrawLetterSize(Spectate[playerid], 0.25, 1.0);
TextDrawHideForPlayer(playerid, Spectate[playerid]);
SetPVarInt(playerid, "spectate", INVALID_PLAYER_ID);
return 1;
}
mysql_tquery(dbhandle, query, "LoadAccount", "d", playerid);
Nein, das ist Quatsch, du musst da sowas haben:
mysql_format(dbhandle, query, sizeof(query), "SELECT * FROM user WHERE username='%e' LIMIT 1;", SpielerName(playerid));
mysql_tquery(dbhandle, query, "LoadAccount", "d", playerid);
Sonst würdest du ja, dein tquery auf das Insert Query ausführen und das macht natürlich keinen Sinn.
Nein, das ist Quatsch, du musst da sowas haben:
mysql_format(dbhandle, query, sizeof(query), "SELECT * FROM user WHERE username='%e' LIMIT 1;", SpielerName(playerid));mysql_tquery(dbhandle, query, "LoadAccount", "d", playerid);Sonst würdest du ja, dein tquery auf das Insert Query ausführen und das macht natürlich keinen Sinn.
Hab es jetzt so geändert, dennoch ändert sich nach dem Registrieren nichts und ich bleibe in diesem Screen, wovon ich ein Post ein Screenshot gepostet habe.
Hab es jetzt so geändert, dennoch ändert sich nach dem Registrieren nichts und ich bleibe in diesem Screen, wovon ich ein Post ein Screenshot gepostet habe
Kommen Fehler im crashdetect oder im mysql_log?
Zeig mal, wie genau dein Code für den Aufruf aussieht.