Nach langem Probieren und herausfinden, hab ich es endlich Hinbekommen das die Positionen gespeichert und wieder ausgelesen werden.
Der Thread kann wieder geschlossen werden.
Danke für eure tatkräftige Hilfe.
#Close.
Nach langem Probieren und herausfinden, hab ich es endlich Hinbekommen das die Positionen gespeichert und wieder ausgelesen werden.
Der Thread kann wieder geschlossen werden.
Danke für eure tatkräftige Hilfe.
#Close.
Du musst natürlich bei OnPlayerDisconnect erst einmal die myplayer koordinaten befüllen.
Das Laden und speichern funktioniert also.
Nur musst du die Spieler Position beim disconnecten herausfinden und diese in dein myplayer objekt befüllen. Erst danach nutzt du Datenbank Account Speichern.
Ich kenne die konkreten Befehle aus der Altv Libary nicht aber du brauchst auf jeden fall so etwas die GetPlayerPos (myplayer.playerid) und die Rückgabewerte befüllst du in dein myplayer Objekt.
Ich hab jetzt eine Funktionen die dafür Sorgt das die Positionen richtig gespeichert werden.
Kann ich diese so im Login dann auslesen?
if (myplayer.SetPlayerPos[0] != 0.0 && myplayer.SetPlayerPos[1] != 0.0 && myplayer.SetPlayerPos[2] != 0.0)
{
myplayer.Spawn(new Position(myplayer.SetPlayerPos[0], myplayer.SetPlayerPos[1], myplayer.SetPlayerPos[2]), 0);
}
Alles anzeigenHat das MyPlayer Object auch entsprechend x,y,z properties in die das gespeichert wird? In der Datenbank hast du unter der accounts tabelle posx,posy,posxz genau so geschrieben?
Vielleicht ein Tippfehler vorhanden?
SQL Logs die du zeigen kannst?
Ich kann jetzt auch nur wild spekulieren die aktuellen Informationen sind begrenzt
PS: Wann wird AccountSpeichern ausgeführt? Auch beim ausloggen?
Die Daten werden dort wie folgt Hinterlegt,
public float posx { get; set; }
public float posy { get; set; }
public float posz { get; set; }
public MyPlayer(ICore server, IntPtr nativepointer, ushort id) : base(server, nativepointer, id)
{
SpielerID = -1;
Geld = 0;
Adminlevel = 0;
Eingeloggt = false;
Fraktion = 0;
Rang = 0;
posx = 0;
posy = 0;
posz = 0;
}
Alles anzeigen
[ScriptEvent(ScriptEventType.PlayerDisconnect)]
public static void OnPlayerDisconnect(MyPlayer.MyPlayer myplayer, string reason)
{
Datenbank.AccountSpeichern(myplayer);
}
Die Daten werden gespeichert sobald er sich eigentlich Ausloggt.
Woran machst du es fest, dass es nicht richtig geladen wird?
Spawnst du den spieler denn auch an den Koordinaten?
Die letzte Position wird aktuell generell nicht gespeichert. Er spawnt aktuell auf Position(0,0,0) da keine Einträge in der Datenbank bzgl. der Positionen getätigt wird bzw. keine Einträge erfolgen.
Alles anzeigenDu hast doch sowieso ein System in dem bereits die Daten geladen werden. Dort lädst du dann einfach die Koordinaten aus der Datenbank und beim spawnen verwendest du die Koordinaten.
Bedeutet konkret in der "Datenbank.AccountLaden" Funktion lädst du die Koordinaten in das myplayer Objekt.
Bei der Funktion
myplayer.Spawn(new AltV.Net.Data.Position(-425, 1123, 325), 0);
benutzt du die Koordinaten aus dem myplayer objekt.
myplayer.Spawn(new AltV.Net.Data.Position(myplayer.x, myplayer.y, myplayer.z), 0);
so würde das dann aussehen.
PS:
bezüglich deines speicher problems.
Hast du in deiner DB bei accounts auch die posx, posy, posz hinzugefügt? Als float natürlich.
Also die Positionen sind in der Datenbank als Float hinterlegt.
Also die AccountLaden function sieht jetzt wie folgt aus: public static void AccountLaden(MyPlayer.MyPlayer myplayer)
{
MySqlCommand command = Connection.CreateCommand();
command.CommandText = "SELECT * FROM accounts WHERE name=@name LIMIT 1";
command.Parameters.AddWithValue("@name", myplayer.SpielerName);
using (MySqlDataReader reader = command.ExecuteReader())
{
if (reader.HasRows)
{
reader.Read();
myplayer.SpielerID = reader.GetInt32("id");
myplayer.Adminlevel = reader.GetInt16("adminlevel");
myplayer.Geld = reader.GetInt32("geld");
myplayer.Fraktion = reader.GetInt16("fraktion");
myplayer.posx = reader.GetFloat("posx");
myplayer.posy = reader.GetFloat("posy");
myplayer.posz = reader.GetFloat("posz");
}
}
}
Alles anzeigen
Aber irgendwie wird die Position nach dem Disconnect auch nicht richtig Gespeichert.
Fragen über Fragen grade
Mahlzeit,
Und zwar folgendes, ich würde gerne Wissen wie ich am besten die Position des Charakters auslesen kann, damit dieser an seiner letzten Position beim Einloggen wieder Spawnt.
Mein Script sieht aktuell wie folgt aus ->
OnPlayerLogin: [ClientEvent("Event.Login")]
public void OnPlayerLogin(MyPlayer.MyPlayer myplayer, String name, String password)
{
if (Datenbank.IstAccountBereitsVorhanden(name))
{
if (!myplayer.Eingeloggt && name.Length > 3 && password.Length > 5)
{
if (Datenbank.PasswortCheck(name, password))
{
Datenbank.AccountLaden(myplayer);
myplayer.Spawn(new AltV.Net.Data.Position(-425, 1123, 325), 0);
myplayer.Model = (uint)PedModel.Business01AMM;
myplayer.Eingeloggt = true;
myplayer.Emit("CloseLoginHud");
myplayer.SendChatMessage("Erfolgreich Eingeloggt!");
}
else
{
myplayer.Emit("SendErrorMessage", "Falsches Passwort eingeben oder ungültige Eingabe!");
}
}
else
{
myplayer.Emit("SendErrorMessage", "Ungültige Eingaben, bitte korregieren!");
}
}
else
{
myplayer.Emit("SendErrorMessage", "Es wurde kein Account mit dem Namen gefunden!");
}
}
Alles anzeigen
Aktuell spawnt er an einem festen Punkt. Das würde ich gerne ändern, dass er an der letzten Position spawnt.
Meine Accountspeicher funktion sieht wie folgt aus:
public static void AccountSpeichern(MyPlayer.MyPlayer myplayer)
{
MySqlCommand command = Connection.CreateCommand();
command.CommandText = "UPDATE accounts SET adminlevel=@adminlevel, geld=@geld, fraktion=@fraktion, rang=@rang, posx=@posx, posy=@posy, posz=@posz, posA=@posA WHERE id=@id";
command.Parameters.AddWithValue("@id", myplayer.SpielerID);
command.Parameters.AddWithValue("@adminlevel", myplayer.Adminlevel);
command.Parameters.AddWithValue("@geld", myplayer.Geld);
command.Parameters.AddWithValue("@fraktion", myplayer.Fraktion);
command.Parameters.AddWithValue("@rang", myplayer.Rang);
command.Parameters.AddWithValue("@posx", myplayer.posx);
command.Parameters.AddWithValue("@posy", myplayer.posy);
command.Parameters.AddWithValue("@posz", myplayer.posz);
command.Parameters.AddWithValue("@posA", myplayer.Rotation.Yaw);
command.ExecuteNonQuery();
Connection.Close();
}
Alles anzeigen
Die Position wird aktuell auch nicht richtig gespeichert in der Datenbank. Da schaue ich aktuell nach dem Problem.
Kann ich direkt bei der OnPlayerLogin Function direkt eine Abfrage an die Mysql Datenbank schicken, dass er die Position abfragt und diese ausliest und der Spieler dort gespawnt wird?
Ich hänge aktuell dort ziemlich auf dem Schlauch
Alles anzeigenHast du das aus diesem Tutorial entnommen?
Externer Inhalt www.youtube.comInhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.
Hast du da am Anfang die Änderungen an der Client-Config auch vorgenommen?
Wenn nicht, check das mal aus und teste evtl das auch mit dem Chat. Vermutlich stimmt da etwas bei der Einrichtung nicht.
Erstmal danke für deine Rückmeldung. Hab das Projekt einfach nochmal komplett neu Erstellt. Jetzt funktioniert alles ohne Probleme
#Close
Mahlzeit,
aktuell beschäftige ich mich mit C# und AltV.
Ich versuche aktuell einen Car Befehl zu erstellen.
Leider wird der Befehl nicht Ausgeführt, es gibt auch keine Fehlermeldung etc.
Habt ihr vielleicht eine Idee woran es liegen könnte?
namespace Could
{
internal class Test : IScript
{
public class Commands : IScript
{
[Command("createa")]
public void CMD_CreateVehicle(IPlayer player, string VehicleName, int R = 0, int G = 0, int B = 0)
{
Alt.Log("TEST");
IVehicle veh = Alt.CreateVehicle(Alt.Hash(VehicleName), new Position(player.Position.X, player.Position.Y + 1.5f, player.Position.Z), player.Rotation);
if (veh != null) { player.SendChatMessage("Du hast ein Fahrzeug erstellt " + VehicleName); }
}
}
}
}
Alles anzeigen
#Edit: Er gibt nicht mal den Alt.Log wieder.
Hab das selbe Problem derzeit. Server Auswählen - Rockstar Launcher startet -> nichts Passiert mehr..