Hey ich möchte Nachrichten die aus einer Datenbank kommen ingame anzeigen.
Hab dazu folgendes gemacht:
public DBMsgCheck() // Timer
{
new query[100];
mysql_format(handle, query, sizeof(query), "SELECT * FROM msg_to_ingame WHERE sent='0' ORDER BY id");
mysql_pquery(handle, query, "OnMsgToIngame");
return 1;
}
public OnMsgToIngame()
{
new rows;
cache_get_row_count(rows);
if(rows > 0)
{
new dbid, uDBID, msgTyp, msg[255];
new query[150];
for(new i = 0; i < rows; i++)
{
cache_get_value_name_int(i, "id", dbid);
cache_get_value_name_int(i, "user", uDBID);
cache_get_value_name_int(i, "msgTyp", msgTyp);
cache_get_value_name(i, "msg", msg);
SetTimerEx("SendMsgToIngame", 1000, 0, "dds", uDBID, msgTyp, msg);
mysql_format(handle, query, sizeof(query), "UPDATE msg_to_ingame SET sent='1' WHERE id='%d'", dbid);
mysql_query(handle, query, false);
}
}
return 1;
}
public SendMsgToIngame(uDBID, msgTyp, msg[])
{
new query[150];
new msg2[255];
format(msg2, sizeof(msg2), "%s", msg);
mysql_format(handle, query, sizeof(query), "SELECT name FROM users WHERE id='%d'", uDBID);
mysql_pquery(handle, query, "SendMsgToIngame2", "dds", uDBID, msgTyp, msg2);
return 1;
}
public SendMsgToIngame2(uDBID, msgTyp, msg[])
{
new rows;
cache_get_row_count(rows);
new string[128];
new uname[MAX_PLAYER_NAME];
if(rows > 0)
{
cache_get_value_name(0, "name", uname);
if(msgTyp == 1)
format(string, sizeof(string), "Administrator %s: %s", uname, msg);
}
else
{
if(msgTyp == 1)
format(string, sizeof(string), "Administrator: %s", msg);
}
if(msgTyp == 1)
SendClientMessageToAll(COLOR_LIGHTBLUE, string);
print(string);
SendChatLog(uDBID, string, "SendMsgToIngame");
return 1;
}
Alles anzeigen
Das funktioniert zwar grundsätzlich schon nur wenn ich wärend der Server offline ist mehrere Nachrichten in der Datenbank anlege werden die zwar der Reihe nach alle gesendet jedoch mit alle mit der Nachricht vom letzten Eintrag.
Das größte Problem hab ich jetzt eigentlich dabei den Benutzernamen vom Sender zu ermitteln. Ich hab´s desshalb mit nem Timer in dem 2. Public gemacht damit mir die Abfrage nach dem Namen nicht den Cache von der vorherigen Abfrage vernichtet.
Edit:
Habs hinbekommen
mysql_format(handle, query, sizeof(query), "SELECT t1.*, t2.name FROM msg_to_ingame AS t1 INNER JOIN users AS t2 ON t1.user = t2.id \
WHERE t1.sent='0' ORDER BY t1.id");