Guten Abend,
normal bin ich nicht die Person, die seine Fragen hier stellt, falls es Probleme gibt. Zur Zeit bin ich aber ratlos, da ich nicht weiß, woran es liegt.
Folgende Daten zum aktuellen vServer:
Intel(R) Xeon(R) CPU E5-2650 0 @ 2.00GHz
4096 Megabyte Arbeitsspeicher
1000 Mbit/s Bandbreite4
Debian 10
Ich habe mein Gamemode modular aufgebaut. Was genau damit gemeint ist, sollte wohl klar sein.
Ein Modul in meinem Mode nennt sich server-hostlist.pwn und hat folgende Funktion:
- Erstellt eine Tabelle, sofern diese nicht existiert. (id, hostname, gamemode, map, language, passwort, weburl)
- Daraufhin werden diese Daten ausgelesen und per SendRconCommand an den Server gesendet
Das ganze System basiert auf MySQL. Ich stelle jetzt einfach mal kurz den Code des Systems vor, ist ja nichts großes.
#define TBL_HOSTLIST "`tbl_hostlist`"
///////////////////// | Includes | /////////////////////
#include <YSI_Coding\y_hooks>
///////////////////// | Enumatoren | /////////////////////
enum e_server_hostlist{
hostname[32],
passwort[32],
gamemode[32],
map[32],
weburl[32],
language[32]
}
new server_hostlist[e_server_hostlist];
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
hook OnGameModeInit(){
create_hostlist_table(); //Tabelle erstellen lassen, falls diese noch nicht existiert
mysql_pquery(mysql, "SELECT * FROM "#TBL_HOSTLIST"", "load_hostlist");
return true;
}
stock create_hostlist_table(){
mysql_pquery(mysql, "CREATE TABLE IF NOT EXISTS \
"#TBL_HOSTLIST" (`id` int(11) NOT NULL AUTO_INCREMENT,\
`hostname` varchar(32),\
`passwort` varchar(32),\
`gamemode` varchar(32),\
`map` varchar(32),\
`weburl` varchar(32),\
`language` varchar(32),\
PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
return true;
}
forward load_hostlist();
public load_hostlist(){
new rows;
cache_get_row_count(rows);
if(rows == 0){
print("[Server Hostlist]: Die Daten konnten nicht geladen werden.");
return SendRconCommand("exit");
}else{
cache_get_value_name(0, "hostname", server_hostlist[hostname], 32);
cache_get_value_name(0, "passwort", server_hostlist[passwort], 32);
cache_get_value_name(0, "gamemode", server_hostlist[gamemode], 32);
cache_get_value_name(0, "map", server_hostlist[map], 32);
cache_get_value_name(0, "weburl", server_hostlist[weburl], 32);
cache_get_value_name(0, "language", server_hostlist[language], 32);
print("[Server Hostlist]: Die Daten wurden erfolgreich geladen!");
new string[64];
format(string, sizeof(string),"hostname %s", server_hostlist[hostname]);
SendRconCommand(string);
format(string, sizeof(string),"password %s", server_hostlist[passwort]);
SendRconCommand(string);
SetGameModeText(server_hostlist[gamemode]);
format(string, sizeof(string),"weburl %s", server_hostlist[weburl]);
SendRconCommand(string);
format(string, sizeof(string),"language %s", server_hostlist[language]);
SendRconCommand(string);
}
return true;
}
Alles anzeigen
Man stellt sich nun folgendes Szenario vor. Die Tabelle tbl_hostlist existiert nicht, also erstellt er diese. Logisch, dass daraufhin die ganzen Hostedlist Informationen aus der Server.cfg geladen werden, da keine Werte eingetragen sind. Nachdem ich die Werte nun manuell eintrage und den Server starte, werden diese auch korrekt gesetzt und in der Hostedlist angezeigt.
Aber eben nur manchmal, wenn ich den Server starte und manchmal ist es eben leer und wird aus der Server.cfg übernommen.
Wenn die Daten nicht in die Hostedlist übernommen werden, müsste er ja eigentlich einen meiner beiden prints dennoch wiedergeben. Tut er aber nicht, warum es so ist, bleibt mir ein Rätsel. Hat jemand vielleicht Ahnung, woran das liegt? Auf meinem lokalen Server über XAMPP läuft das System einwandfrei.