Guten Tag,
ich habe eine Frage an euch. Ich möchte gerne für Informationen die im UCP wiedergegeben werden den letzten Logout des Spielers speichern in der Spielerdatei, sprich z.B 05.03.2014.
Hat jemand eine Idee/Tipp wie ich das mache?
Guten Tag,
ich habe eine Frage an euch. Ich möchte gerne für Informationen die im UCP wiedergegeben werden den letzten Logout des Spielers speichern in der Spielerdatei, sprich z.B 05.03.2014.
Hat jemand eine Idee/Tipp wie ich das mache?
Bei deinem Speichern stock die Positionen speichern und beim laden stock laden lassen. Simpel oder?
Meinst du wie dus im UCP anzeigen kannst.
Oder im script das abspeichern lässt ?
Bei deinem Speichern stock die Positionen speichern und beim laden stock laden lassen. Simpel oder?
Du hasts nicht verstanden, oder?
Du hasts nicht verstanden, oder?
Das glaube ich auch, Eisbär er möchte bestimme Infos wiedergeben und nicht die Positionen Simpel oda
Alles klar, trotzdem nochmal eine dringende Frage, ich möchte sobald der Spieler online ist der Wert 'Online' in der Tabelle auf 1 gesetzt wird.
Letztendlich mache ich das mit SpielerInfo[playerid][pOnline] = 1; unter LoadPlayer.
Der Wert bleibt aber bei 0, ich weiß nicht warum.
Zeige euch hier mal meinen Code
stock SavePlayer(playerid)
{
if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
{
if(GetPVarInt(playerid,"Eingeloggt") == 1)
{
mysql_SetInt("accounts", "Level", SpielerInfo[playerid][pLevel], "Name", SpielerInfo[playerid][pName]);
mysql_SetInt("accounts", "Adminlevel", SpielerInfo[playerid][pAdminlevel], "Name", SpielerInfo[playerid][pName]);
mysql_SetInt("accounts", "Online", SpielerInfo[playerid][pOnline], "Name", SpielerInfo[playerid][pName]);
SpielerInfo[playerid][pOnline] = 0;
}
}
return 1;
}
stock LoadPlayer(playerid)
{
if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
{
GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME);
SpielerInfo[playerid][pLevel] = mysql_GetInt("accounts", "Level", "Name", SpielerInfo[playerid][pName]);
SpielerInfo[playerid][pAdminlevel] = mysql_GetInt("accounts", "Adminlevel", "Name", SpielerInfo[playerid][pName]);
SpielerInfo[playerid][pOnline] = mysql_GetInt("accounts", "Online", "Name", SpielerInfo[playerid][pName]);
SpielerInfo[playerid][pOnline] = 1;
}
return 1;
}
enum SpielerDaten
{
pName[MAX_PLAYER_NAME],
pLevel,
pGeld,
pAdminlevel,
pOnline
}
new SpielerInfo[MAX_PLAYERS][SpielerDaten];
Code wo ich die Tabelle erstelle
DROP TABLE IF EXISTS `accounts`;
CREATE TABLE `accounts` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(24) NOT NULL,
`Passwort` VARCHAR(128) NOT NULL,
`Level` INT(11) NOT NULL DEFAULT '1',
`Adminlevel` INT(11) NOT NULL DEFAULT '0',
`Online` INT(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;
//Edit: Tabellen Erstellung hinzugefügt
So, benutze einfach die Funktionen gettime und getdate .
Einfach danach googlen und die Wiki davon benutzen.
Brauche trotzdem noch dringend Hilfe mit dem Onlinestatus.
Bei was genau brauchst du da jetzt hilfe?
Ich möchte sobald der Spieler online ist der Wert 'Online' in der Tabelle auf 1 gesetzt wird.
Letztendlich mache ich das mit SpielerInfo[playerid][pOnline] = 1; unter LoadPlayer.
Der Wert bleibt aber bei 0, ich weiß nicht warum.
Zeige euch hier mal meinen Code
stock SavePlayer(playerid)
{
if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
{
if(GetPVarInt(playerid,"Eingeloggt") == 1)
{
mysql_SetInt("accounts", "Level", SpielerInfo[playerid][pLevel], "Name", SpielerInfo[playerid][pName]);
mysql_SetInt("accounts", "Adminlevel", SpielerInfo[playerid][pAdminlevel], "Name", SpielerInfo[playerid][pName]);
mysql_SetInt("accounts", "Online", SpielerInfo[playerid][pOnline], "Name", SpielerInfo[playerid][pName]);
SpielerInfo[playerid][pOnline] = 0;
}
}
return 1;
}
stock LoadPlayer(playerid)
{
if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
{
GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME);
SpielerInfo[playerid][pLevel] = mysql_GetInt("accounts", "Level", "Name", SpielerInfo[playerid][pName]);
SpielerInfo[playerid][pAdminlevel] = mysql_GetInt("accounts", "Adminlevel", "Name", SpielerInfo[playerid][pName]);
SpielerInfo[playerid][pOnline] = mysql_GetInt("accounts", "Online", "Name", SpielerInfo[playerid][pName]);
SpielerInfo[playerid][pOnline] = 1;
}
return 1;
}
enum SpielerDaten
{
pName[MAX_PLAYER_NAME],
pLevel,
pGeld,
pAdminlevel,
pOnline
}
new SpielerInfo[MAX_PLAYERS][SpielerDaten];
Code wo ich die Tabelle erstelle
DROP TABLE IF EXISTS `accounts`;
CREATE TABLE `accounts` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(24) NOT NULL,
`Passwort` VARCHAR(128) NOT NULL,
`Level` INT(11) NOT NULL DEFAULT '1',
`Adminlevel` INT(11) NOT NULL DEFAULT '0',
`Online` INT(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;
Ist ja auch kein wunder, du must den wert ja auch updaten beim Connecten..
new query[128];
format(query,128,"UPDATE `accounts` SET `Online`='1' WHERE `Name`='%s'",SpielerInfo[playerid][pName]);
mysql_query(query);
Und beim verlassen ebenso. Nur das da der wert auf 0 kommt.
Alles anzeigenIst ja auch kein wunder, du must den wert ja auch updaten beim Connecten..
new query[128];
format(query,128,"UPDATE `accounts` SET `Online`='1' WHERE `Name`='%s'",SpielerInfo[playerid][pName]);
mysql_query(query);
Und beim verlassen ebenso. Nur das da der wert auf 0 kommt.
Reicht das wenn ich das unter OnPlayerConnect und Disconnect verwende?
Ja reicht es.
Du sölltest dir allgemein angucken wie du mit dem R5 Plugin Ordentlich lädst.!!
/e Und speicherst natürlich.
Ja reicht es.
Du sölltest dir allgemein angucken wie du mit dem R5 Plugin Ordentlich lädst.!!
/e Und speicherst natürlich.
so?
stock SavePlayer(playerid)
{
if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
{
if(GetPVarInt(playerid,"Eingeloggt") == 1)
{
new query[200];
format(query, sizeof(query), "UPDATE `accounts` SET `Level` = '%d',`Adminlevel` = '%d',`Online` = '%d' WHERE `Name` = '%s'",
SpielerInfo[playerid][pLevel],SpielerInfo[playerid][pAdminlevel],SpielerInfo[playerid][pOnline],SpielerInfo[playerid][pName]);
mysql_query(query);
}
}
return 1;
}
Ja warum nicht gleich so?
Nun nur noch das laden ordentlich und dann passts.
Erstmal danke für den Tipp, ist beim Speichern des Spielers deiner Meinung nach alles richtig?
Habe noch ein Problem mit dem Laden, es liegt ein Fehler vor und könntest du mal eben noch drüber schauen ob das richtig ist, sprich der Query?
GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME);
new query[256], data[128];
format(query, sizeof(query), "SELECT * FROM `accounts` WHERE `Name`='%s',`Level` = '%d',`Adminlevel` = '%d',`Online` = '%d'",SpielerInfo[playerid][pName],SpielerInfo[playerid][pLevel],SpielerInfo[playerid][pAdminlevel],SpielerInfo[playerid][pOnline]);
mysql_query(query);
mysql_store_result();
mysql_fetch_field("Level", data); SpielerInfo[playerid][pLevel] = strval(data); /Errorcode
mysql_fetch_field("Adminlevel", data); SpielerInfo[playerid][pAdminlevel] = strval(data);/Errorcode
mysql_fetch_field("Online", data); SpielerInfo[playerid][pOnline] = strval(data);/Errorcode
Mach das ganze so.
GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME);
new query[256], data[50]; //50 zeichen bei data reichen völlig aus.
format(query, sizeof(query), "SELECT * FROM `accounts` WHERE `Name`='%s'",SpielerInfo[playerid][pName]);//Lese `Alles` Von Accounts aus, wo der Name sich befindet
mysql_query(query);//abschicken des queries
mysql_store_result();//Auflisten aller ergebnisse
if(mysql_num_rows())//Abfragen ob datensatz existiert
{
if(mysql_retrieve_row())//Weiß ich nicht genau was das bewirkt.
{
mysql_fetch_field_row(data,"Level");//Söllte eigendlich selbsterklärend sein
SpielerInfo[playerid][pLevel]=strval(data);
mysql_fetch_field_row(data,"Adminlevel");
SpielerInfo[playerid][Adminlevel]=strval(data);
mysql_fetch_field_row(data,"Online");//Ich sehe auch keinen sinn, nen LEEREN Wert zu laden aber naja.
SpielerInfo[playerid][Online]=strval(data);
}
}
mysql_free_result();//NIEMALS VERGESSEN!!!! gibt den benutzten speicher wieder frei
Ist doch einfach....
Unter "OnPlayerDisconnect" folgende Query einbinden:
format(string, sizeof(string), "UPDATE table SET lastOnlineDate=NOW() WHERE pName = SpielerName"); :sleeping:
z.B 05.03.2014.
new y, m, d, str[10];
getdate(y, m, d);
format(str, sizeof(str), "%02d.%02d.%i", d, m, y);
Die Spalte muss ein Varchar sein