Frage bezüglich Schlüsselsystem

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo Brotfische,
    ich habe eine frage, wie ich mein Schlüsselsystem am besten umsetzen sollte. Ich bin gerade dabei das Schlüsselsystem anzufangen und frage mich, wie ich das abspeichern könnte ohne viel 'Platz' In der Tabelle zu verbrauchen. Es soll möglich sein z.B. als Leader ein Schlüssel für das Fraktionsfahrzeug zu vergeben und als Spieler das von seinem Auto zu vergeben. Diesen Schlüssel soll man solange behalten, bis der Besitzer ihn entzieht oder die Polizei. Nur weiss ich nicht, wie ich es am kompaktesten lösen kann mit der Tabelle. Hat jemand gerade ein Anfang? Ich könnte es später mit sscanf 'splitten' aber dafür brauche ich ein 2D Array, welches auf den Spieler gebunden ist und dann noch 'unendlich' Schlüssel haben kann, um es jetzt mal im Model darzustellen. Ich weiss aber nicht, wie ich das mit sscanf lösen könnte.


    Ich hoffe ihr könnt mir helfen.


    Mit freundlichen Grüßen
    ChaoZz

  • Du hast ja wahrscheinlich ein 2D Array für die Fraktionsfahrzeuge und nutzt ein enum für die 2 dimension des arrays. Erweitere diese doch einfach mit den Namen des Spielers, so kannst
    du einfach noch den Namen des "Besitzers" setzen für das Auto, also neben der Fraktion.
    Es kommt jedoch drauf an wie viele Schlüssel der Leader vergeben kann für ein Fahrzeug sollte es nur einer sein so ist das eine ganz guter Ansatz.

  • Habe nur ein Array für alle Fahrzeuge und das ganze anders geregelt. Die eigentliche Frage ist, wie kann ich die Schlüssel speichern und auslesen ohne groß viel spalten zu verwenden. Ich hätte mir das vorgestellt mit sscanf zu machen, nur weiss ich nicht, wie ich das in ein Array rein bekommen würde, welches keine feste begrenzung hat.


    Edit: Wäre dieser Code so richtig?:
    format(_query, sizeof _query, "SELECT * FROM yrp_account_keys WHERE id='%i'", PlayerInfo[playerid][pID]);
    mysql_query(MySQL_Connection, _query);
    cache_get_field_content(0, "pCarKeys", _result);
    sscanf(_result,"p<|>A<i>(0)[5]", PlayerCarKeys[playerid]);
    cache_get_field_content(0, "pFrakKeys", _result);
    sscanf(_result,"p<|>A<i>(0)[5]", FrakCarKeys[playerid]);


    Die variablen gibts auch noch:
    PlayerCarKeys[MAX_PLAYERS][MAX_CARKEYS],
    FrakCarKeys[MAX_PLAYERS][MAX_CARKEYS],

  • Kannst du so machen nur wenn du schon ein define nutzt kannst du das auch als wert angeben bei der specifer abfolge



    sscanf(_result,"p<|>A<i>(0)["#MAX_CARKEYS"]", PlayerCarKeys[playerid]);


    du musst jedoch einen string beim speichern formatieren mit einem | als delimiter jedoch kannst du auch ein komma verwenden musst es jedoch bei
    dem specifer p anpassen würde so aussehen p<,>
    ein optionaler specifer (A) musst du nicht zwingend verwenden da der string sollte er einmal formatiert werden die 0 enthält. sollte das splitten nicht möglich sein
    so bleibt der wert der "Zeile" auf 0.


    eigentlich müsste es so passen und gewöhne dir das LIMIT 1 an bei MySQL Befehlen welche nur 1 Ergebnis liefern sollen, das optimiert die queries.


    Wenn du keine festebegrenzung haben möchtest musst du auf dynamischen Speicher zurückgreifen, das wäre mit PVars möglich
    http://wiki.sa-mp.com/wiki/GetPVarString


    oder mit Plugins
    wie dem MemoryAccess plugin siehe dazu auch mein ingame mapeditor.


    Jedoch muss das ganze nicht unendlich gehen ich geh mal davon aus das dein Spieler niemals mehr als 100 Schlüssel besitzt



    Du musst es auch nichtmal splitten da du variabeln so speichern kannst:

    new str[4];
    str[0] = 5;
    str[1] = 134;
    str[2] = 194;
    str[3] = 1043;


    das kannst du als string speichern und auslesen mit strfind sollte es auch möglich sein das wieder zu finden.