Short Disclaimer: Ich kenne mich nur ein ganz kleines bisschen mit C# aus und null mit RageMP, das was ich da bastel ist zum Lernen gedacht... daher.. ja
Hi,
ich sitze seit ein paar Stunden an einem Problem..
Hier einmal das was ich gerne machen will bzw. gemacht wird.
Beim Login werden die in der DB hinterlegten Spielerdaten in ein Objekt geladen und erstellt -> Spieler wird Gespawnt.
Ich möchte jedoch bspw. einen "/saveme" Befehl hinzufügen der auf eine Funktion zurückgreift welcher die aktuellen Spielerdaten (Leben, Geld, usw) in der DB aktualisiert.
Irgendwie scheitere ich beim auslesen der Daten.. ich kriege immer leere strings zurück und das fuckt mich aktuell echt ab
Einmal meine SpielerKlasse
using System;
using System.Collections.Generic;
using System.Text;
using MySql.Data.MySqlClient;
using GTANetworkAPI;
using System.Threading.Tasks;
namespace BlueCircleRP.spieler
{
public enum AdminLevel
{
AdminNone, //0
AdminSupporter, //1
AdminAdmin, //2
AdminHighAdmin, //3
AdminManager, //4
AdminBoss //5
}
class Data
{
[ServerEvent(Event.ResourceStart)]
public void OnResourceStart()
{
Main.Log_Server("Spieler\\Data Ressource geladen");
}
public static readonly String DataIdentifier = "PlayerInfo";
public Client PlayerData { get; set; }
public int SQLID { get; set; }
public String Name { get; set; }
public String Email { get; set; }
public String Password { get; set; }
public int Cash { get; set; }
public int Admin { get; set; }
public int Level { get; set; }
public int Age { get; set; }
public int Health { get; set; }
public Vector3 Position { get; set; }
public bool IsLoggedIn { get; set; }
public Data(Client player)
{
this.PlayerData = player;
this.Name = player.Name;
this.Email = null;
this.Cash = 0;
this.Admin = (int)AdminLevel.AdminNone;
this.Level = 0;
this.Age = 0;
this.Health = 0;
this.IsLoggedIn = false;
}
public void SetHealth(int health)
{
this.Health = health;
this.PlayerData.Health = health;
}
public static Data GetDataFromClient(Client player)
{
if (player == null)
return null;
if(player.HasData(DataIdentifier))
{
return player.GetData(DataIdentifier);
} else
{
Data tmp = new Data(player);
player.SetData(DataIdentifier, tmp);
return tmp;
}
}
public async Task<bool> AccountExists()
{
String Query = $"SELECT COUNT(*) AS AccNo FROM `accounts` WHERE `Playername` = @Playername LIMIT 1";
bool accountExists = false;
using (MySqlCommand command = new MySqlCommand(Query, mysql.MySQL.conn))
{
command.Parameters.AddWithValue("@Playername", this.PlayerData.Name);
using (var reader = await command.ExecuteReaderAsync())
{
if(await reader.ReadAsync())
{
if (Convert.ToInt32(reader["AccNo"]) == 1)
accountExists = true;
else
accountExists = false;
}
}
}
return accountExists;
}
}
}
Alles anzeigen
Und einmal der Befehl in der ich seit stunden versuche irgendwie die Daten auszulesen.
[Command("saveme")]
public void CMD_SaveMe(Client player)
{
Data temp = Data.GetDataFromClient(player);
player.SendNotification($"Dein Account wurde gespeichert!");
player.SendNotification($"Email: {temp.Email}");
//Main.Log_Server($"Email: {player.GetData("Email")}");
}
Wo liegt hier der Fehler? Ich finde ihn einfach nicht -.-