Ist das mt Crashdetect?
Jap ![]()
Ein kurzer Blick in den Thread genügt ja, um das zu sehen: https://forum.sa-mp.com/showthread.php?t=262796
Ist das mt Crashdetect?
Jap ![]()
Ein kurzer Blick in den Thread genügt ja, um das zu sehen: https://forum.sa-mp.com/showthread.php?t=262796
Hast du dazu ne Lösung?
Nun, also Syntax Fehler werden dir beim Compilen angezeigt.
Du redest denke ich mal von runtime errors, also Fehler die zur Laufzeit auftreten, wie z.B. dass man versucht einen ungültigen Array Index zu erreichen.
Dafür wurde das Plugin crashdetect entwickelt ![]()
Du solltest Pawno nicht seperat downloaden.
Nimm die Version, die von SAMP aus mitgeliefert wird.
Und dann poste mal den server_log ![]()
Na einfach unter cache_get_row_count das abfragen:
if(rows == 0) return SendClientMessage(playerid,-1,"Fehler: Aktuell gibt es keine Helfer!");
Du hast doch jetzt genug Beispiele und weißt wie das funktioniert.
Was genau willst du denn wissen, du musst schon präzise fragen und am Besten deinen Code zeigen, den du schon hast.
Soll ich das in das AdminList Public machen oder ein einges
Natürlich ein eigenes...
Wie kann ich es machen, dass wen kein Helfer exisitert ne Fehlermeldung kommt im chat?
Wenn keiner in der Datenbank steht?
Dann einfach rows prüfen, ob der Wert 0 ist, dann kannst du eine Fehlermeldung ausgeben.
Könnte man das auch verkürzen mit folgendem irgendwie?
Nein, da du dort ja auch Farb-Codes angibst und die Funktion auf pAdmin zurückgreift.
Klar du könntest das alles umorganisieren, dass du das alles in eine Funktion quetschst...aber ist das notwendig?
Dann müsstest du die Farb-Codes ja seperat haben etc.
Also das jetzt an 2 Stellen zu haben, ist jetzt nicht schlimm, zumal sich da vermutlich ja eh nichts ändern wird, mit der Bezeichnung der Namen.
und zwar so lange bis sie voll ist
Ja du hast zu schnell kopiert, hatte noch was editiert... xD
Ah ja, hab den Fehler gefunden, schreibs so:
forward AdminList(playerid);
public AdminList(playerid)
{
static const rang_namen[][] = {"Spieler", "Helfer", "Probe Supporter", "Supporter", "Administration", "Developer", "{00a4b3}Managment", "{FF0000}Projektleitung"};
new rows;
cache_get_row_count(rows);
const MAX_ADMINS = 15;
new table[MAX_ADMINS][2], admins[MAX_ADMINS][MAX_PLAYER_NAME];
for(new i; i<rows; i++)
{
cache_get_value_name_int(i, "Admin", table[i][0]);
cache_get_value_name(i, "Name", admins[i]);
table[i][1] = i;
}
SortDeepArray(table, 0);
new string[(MAX_PLAYER_NAME+25)*MAX_ADMINS] = "Rang\tName\tOnlinestatus";
for(new i=MAX_ADMINS-1,idx,r,status[32]; i!=-1; i--)
{
r = table[i][0], idx = table[i][1];
if(r == 0) continue;
GetPlayerStatus(admins[idx], status);
format(string,sizeof(string),"%s\n%s\t%s\t%s",string,rang_namen[r],admins[idx],status);
}
ShowPlayerDialog(playerid, 8, DIALOG_STYLE_TABLIST_HEADERS, "ARP Team",string,"Okay","");
return 1;
}
Alles anzeigen
...sehr komisch.
Mach mal n Debug:
forward AdminList(playerid);
public AdminList(playerid)
{
static const rang_namen[][] = {"Spieler", "Helfer", "Probe Supporter", "Supporter", "Administration", "Developer", "{00a4b3}Managment", "{FF0000}Projektleitung"};
new rows;
cache_get_row_count(rows);
const MAX_ADMINS = 15;
new table[MAX_ADMINS][2], admins[MAX_ADMINS][MAX_PLAYER_NAME];
for(new i; i<rows; i++)
{
cache_get_value_name_int(i, "Admin", table[i][0]);
cache_get_value_name(i, "Name", admins[i]);
table[i][1] = i;
}
//Debug
print("DEBUG: BEFORE");
for(new i; i<rows; i++)
{
printf("%d - %d|%d - %s",i,table[i][0],table[i][1],admins[i]);
}
SortDeepArray(table, 0);
//Debug
print("DEBUG: AFTER");
for(new i; i<rows; i++)
{
printf("%d - %d|%d - %s",i,table[i][0],table[i][1],admins[i]);
}
new string[(MAX_PLAYER_NAME+25)*MAX_ADMINS] = "Rang\tName\tOnlinestatus";
for(new i=rows-1,idx,r,status[32]; i!=-1; i--)
{
r = table[i][0], idx = table[i][1];
GetPlayerStatus(admins[idx], status);
format(string,sizeof(string),"%s\n%s\t%s\t%s",string,rang_namen[r],admins[idx],status);
}
ShowPlayerDialog(playerid, 8, DIALOG_STYLE_TABLIST_HEADERS, "ARP Team",string,"Okay","");
return 1;
}
Alles anzeigen
und dann poste mal, was im Log steht.
Okay...interessant.
Hmm schreibs so:
forward AdminList(playerid);
public AdminList(playerid)
{
static const rang_namen[][] = {"Spieler", "Helfer", "Probe Supporter", "Supporter", "Administration", "Developer", "{00a4b3}Managment", "{FF0000}Projektleitung"};
new rows;
cache_get_row_count(rows);
const MAX_ADMINS = 15;
new table[MAX_ADMINS][2], admins[MAX_ADMINS][MAX_PLAYER_NAME];
for(new i; i<rows; i++)
{
cache_get_value_name_int(i, "Admin", table[i][0]);
cache_get_value_name(i, "Name", admins[i]);
table[i][1] = i;
}
SortDeepArray(table, 0);
new string[(MAX_PLAYER_NAME+25)*MAX_ADMINS] = "Rang\tName\tOnlinestatus";
for(new i=rows-1,idx,r,status[32]; i!=-1; i--)
{
r = table[i][0], idx = table[i][1];
GetPlayerStatus(admins[idx], status);
format(string,sizeof(string),"%s\n%s\t%s\t%s",string,rang_namen[r],admins[idx],status);
}
ShowPlayerDialog(playerid, 8, DIALOG_STYLE_TABLIST_HEADERS, "ARP Team",string,"Okay","");
return 1;
}
Alles anzeigen
bzw. was msste ich machen damit die Namen statt den Zahlen da stehn?
Ist das ein Scherz? ![]()
Offensichtlich einfach nur die Namen darein schreiben anstatt der Zahlen...das war ja nur ein Beispiel.
Wie kann ichs machen, dass dDie Ränge geördnet da stehn?
Das ist etwas komplizierter, da du die ja sortieren musst, hier mal ein Beispiel:
forward AdminList(playerid);
public AdminList(playerid)
{
static const rang_namen[][] = {"Spieler", "Helfer", "Probe Supporter", "Supporter", "Administration", "Developer", "{00a4b3}Managment", "{FF0000}Projektleitung"};
new rows;
cache_get_row_count(rows);
const MAX_ADMINS = 15;
new table[MAX_ADMINS][2], admins[MAX_ADMINS][MAX_PLAYER_NAME];
for(new i; i<rows; i++)
{
cache_get_value_name_int(i, "Admin", table[i][0]);
cache_get_value_name(i, "Name", admins[i]);
table[i][1] = i;
}
SortDeepArray(table, 0, .sort=SORT_DESC);
new string[(MAX_PLAYER_NAME+25)*MAX_ADMINS] = "Rang\tName\tOnlinestatus";
for(new i,idx,r,status[32]; i<rows; i++)
{
r = table[i][0], idx = table[i][1];
GetPlayerStatus(admins[idx], status);
format(string,sizeof(string),"%s\n%s\t%s\t%s",string,rang_namen[r],admins[idx],status);
}
ShowPlayerDialog(playerid, 8, DIALOG_STYLE_TABLIST_HEADERS, "ARP Team",string,"Okay","");
return 1;
}
Alles anzeigen
//Edit:
Benötigt wird diese Include: https://raw.github.com/oscar-b…d-sort/master/md-sort.inc
assigned value: '7'
Da ist das Problem, du hast zu viele Ränge.
Musst die quasi mal alle eintragen in das Array:
static const rang_namen[][] = {"0", "1", "2", "3", "4", "5", "6", "7"};
wenn nur das tquery im Befehl steht
Es soll nur das im Befehl stehen.
printe eventuell mal rows oder schau in den mysql Log.
Eigentlich sieht das richtig aus.
Vorrausgesetzt in der Datenbank steht, dass Admin ein Integer ist ![]()
sind da paar Memory leaks. (Z. 82, Z.90, Z. 100).
Z. 82 = Create Table
Z.90 = Insert
Z.100 = Offensichtlich Leer
Soweit ich das mal gelesen hatte, muss man da nichts clearen, weil da eh nichts existiert.
Wenn die INSERT-Statements ein Problem sind was die Laufzeit betrifft, dann würde ich mir mal Transactions ansehen
Ja, das gar keine schlechte Idee, schau ich mal, ob das die Performance verbessert, danke ![]()
Achso deinen Query natürlich so schreiben:
mysql_tquery(handle,"SELECT Name, Admin FROM `accounts` WHERE `Admin`>0", "AdminList", "d", playerid);
Und du musst return 1; einfach darunter packen.
Und den ganzen Code, der muss nur im Callback stehen, im Command steht nur das mysql_tquery ![]()
cache_get_value_name_int(i, "Admin", r);
Muss das außerdem natürlich sein, sry..
Das sollte eigentlich alle deine Probleme lösen.
Dann schau doch, wie du die rows ermittelst.
Dann nur:
new rows;
cache_get_row_count(rows);
Da kommt aber nur ne leere Liste
Ich habe soo viele Fragen...
1. Wie hast du denn in dem Kontext rows deklariert? Du musst das doch erstmal abfragen.
2. Wieso verwendest du _int? Das sind keine ints? und was soll das mit den SpielerDaten da ![]()
3. Wieso verwendest du stumpf "Name" und "Admin"...offensichtlich müssen da die Spalten Namen aus DEINER Tabelle rein..
forward AdminList(playerid);
public AdminList(playerid)
{
static const rang_namen[][] = {"Zivilist","{00a4b3}Manager","{FF0000}Projektleiter"};
new rows, fields;
cache_get_data(rows, fields);
//Rang 0 = Zivilist, Rang 1 = Manager, Rang 2 = Projektleiter
new string[256] = "Rang\tName\tOnlinestatus",status[32],rows;
for(new i,n[MAX_PLAYER_NAME],r; i<rows; i++)
{
cache_get_value_name(i, "Name", n);
cache_get_value_name(i, "Admin", r);
GetPlayerStatus(n, status);
format(string,sizeof(string),"%s\n%s\t%s\t%s",string,rang_namen[r],n,status);
}
ShowPlayerDialog(playerid, 8, DIALOG_STYLE_TABLIST_HEADERS, "ARP Team",string,"Okay","");
}
Alles anzeigen
Und du musst dir halt jetzt sicher sein, dass sowohl "Name", als auch "Admin" in deiner Datenbank sich befinden als Spalten..