Client ID

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ich möchte ein Login-System machen. Dazu habe ich eine Klasse User, die ist aktuell noch ziemlich leer.
    Aufjedenfall soll für jeden eingeloggten Client ein Objekt User erstellt werden, in welchem dann Daten verwaltet werden (Level, Geld, etc). Ich kann dann mit Hilfe des Objektes auf die Daten zugreifen.

    Ich muss nun aber jedem User-Objekt einem Client zuweisen.
    Deswegen wollte ich eine Liste von allen User-Objekten machen, welche einem Client zugewiesen sind.
    Sobald ein Event/Command aufgerufen wird, kann ich dann mit Hilfe des Clients das User-Objekt finden und die Daten lesen/schreiben.

    Es wäre sehr einfach, wenn es in irgendeiner Form (Am besten numerisch) eine ID gibt, die einen Clienten identifiziert.

    Bisher habe ich eine sortedDictonaryList<Client,User>. Das Problem ist, das die Regel zur Sortierung beim Client implementiert werden muss. Ich möchte an dieser Klasse aber nichts verändern.

    Mal Beispiel-Code:

    Quellcode: User.cs

    1. public class User
    2. {
    3. public int level { get; set; }
    4. public User()
    5. {
    6. }
    7. public void loadUser()
    8. {
    9. }
    10. public void updateUser()
    11. {
    12. }
    13. }
    Alles anzeigen


    Quellcode: Main.cs

    1. public class Main : Script
    2. {
    3. SortedDictionary<Client, User> users = new SortedDictionary<Client, User>();
    4. [RemoteEvent("OnPlayerLoginAttempt")]
    5. public void OnPlayerLoginAttempt(Client client, string username, string password)
    6. {
    7. //[...]
    8. User user = new User();
    9. users.Add(client, user);
    10. }
    11. [Command("level")]
    12. public void SetLevel(Client client, int level)
    13. {
    14. if (users.TryGetValue(client, out User user))
    15. {
    16. Console.WriteLine($"Level vorher: {user.level}");
    17. user.level = level;
    18. Console.WriteLine($"Level nachher: {user.level}");
    19. }
    20. }
    21. }
    Alles anzeigen
    Fehlermeldung: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.ArgumentException: At least one object must implement IComparable.
  • Mach es so.

    C-Quellcode

    1. class User {
    2. public int level { get; set; }
    3. public int fraktion { get; set; }
    4. public User(int level, int fraktion)
    5. {
    6. this.level = level;
    7. this.fraktion = fraktion;
    8. }
    9. }
    10. class XYZ {
    11. public void OnLogin(Client player)
    12. {
    13. User userInfo = new userInfo(1, 1); // int level, int fraktion
    14. // wenn du vielleicht noch was ändern willst
    15. userInfo.level = 2;
    16. // end
    17. player.SetData("UserInfo", userInfo);
    18. }
    19. public void OnXYZ(Client player)
    20. {
    21. if(!player.HasData("UserInfo")) return;
    22. User userInfo = player.GetData("UserInfo");
    23. NAPI.Util.ConsoleOutput("Level: " + userInfo.level);
    24. NAPI.Util.ConsoleOutput("Fraktion: " + userInfo.fraktion);
    25. // neues level
    26. userInfo.level = 10;
    27. }
    28. }
    Alles anzeigen
    Developer bei VITA-RP (GTA5 Roleplay)