SetPVar & GetPVar

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
  • Ich bin da eben auf einen Befehl gestoßen wie SetPVar und GetPVar.
    Ich sehe das als gute alternative für Variablen zu speichern, habe aber dazu noch paar Fragen.


    Ist diese Variante besser als
    enum pSpieler
    {
    //...
    }
    new Spieler[MAX_PLAYERS][pSpieler];
    ?(


    Des weiteren habe ich auf der SAMP Wiki seite gelesen, das nach Aufruf von OnPlayerDisconnect die PVar Variablen resettet werden. Stimmt das ?
    Variables aren't reset until after OnPlayerDisconnect is called, so the values are still accessible in OnPlayerDisconnect.


    Ich sehe da eigentlich einen Zeilenersparniss dabei, was nichts zu bedeuten hat. Was mich aber mehr Interessiert ist ob die Variante scriptschonender ist ?!
    Freue mich auf eine Aufklärung


    MFG EllBundy :thumbup:

  • Ich benutze arrays und enums.



    Und ja wenn der Spieler denn server verlässt werden die playerVariablen gelöscht

  • Nein, GetPVarString und dergleichen ist nicht so schnell wie ein enum mit den Spielerdaten.
    Trotzdem ist es kein wirklich großer Unterschied, weswegen es eigentlich egal ist.
    Wenn du aber viele Spielervariablen hast, solltest du weiterhein ein enum verwenden.
    Für kleine Sachen PVars zu verwenden ist meist sogar effizienter als es ins Enum einzubauen oder dafür eine globale Variable zu erstellen.
    Aber dein ganzes Script, solltest du nicht auf PVars aufbauen.


    AUßER:
    Du hast vor eine Menge Filterscripts zu verwenden, dann machen PVars sehr viel Sinn, da du sie in verschiedenen Filterscripts Scriptübergreifend verwenden kannst.

  • also ich will nix falsches sagen weil ich bin neu im Bereich samp scripting aber für mich ist es sehr oke und ordentlich aber wenn du oben bei pSpieler id, benutzt kannst du sie woanders nicht mehr benutzten.


    Also besser p_id benutzen

  • @LeonMrBonnie
    Danke für deine Aufklärung :thumbup:


    Gut zu wissen, das ich sie für FS benutzen kann. Danke für die Aussage ;)




    Also wenn ich Spielerdaten aus meine SQL lade wäre es sinnvoll diese in enums zu laden und die wo ich nur scriptintern brauche in PVars ?
    Also sowas wie GetPVarInt(playerid, "IstEingeloggt");.... GetPVarInt(playerid, "IstImTutorial"); ...

  • Also wenn ich Spielerdaten aus meine SQL lade wäre es sinnvoll diese in enums zu laden und die wo ich nur scriptintern brauche in PVars ?

    Es kommt drauf an, wie du die Daten lädst.


    Wenn du dir die Daten alle auf einmal holst die in deiner Datenbank stehen, würde ich dir raten, mit Variablen + Struktur zu arbeiten - sprich "enums".
    Entsprechend lege ich dir das Plugin sscanf ans Herz.


    Nimmst du die Daten einzeln aus der Datenbank und verarbeitest du sie so, ist es sinnvoll PVars zu nehmen vor allem in der Hinsicht, wenn du Filterscripte laufen hast, die auf diese Daten auch zugreifen.


    Ich hab hier noch einen Link, den du dir auch einmal anschauen solltest
    https://wiki.sa-mp.com/wiki/Per-player_variable_system

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski


  • else
    {
    cache_get_field_content(0,"banned",result); SpielerInfo[playerid][pBanned] = strval(result);
    if(SpielerInfo[playerid][pBanned]){ return Kick(playerid); }


    cache_get_field_content(0,"ID",result); SpielerInfo[playerid][p_id] = strval(result);
    cache_get_field_content(0,"level",result); SpielerInfo[playerid][pLevel] = strval(result);
    cache_get_field_content(0,"money",result); SpielerInfo[playerid][pMoney] = strval(result);
    cache_get_field_content(0,"regestriert",result); SpielerInfo[playerid][pReg] = strval(result);
    cache_get_field_content(0,"logins",result); SpielerInfo[playerid][pLogins] = strval(result);
    cache_get_field_content(0,"admin",result); SpielerInfo[playerid][pAdmin] = strval(result);
    cache_get_field_content(0,"exp",result); SpielerInfo[playerid][pEXP] = strval(result);
    cache_get_field_content(0,"nextexp",result); SpielerInfo[playerid][pNextEXP] = strval(result);
    cache_get_field_content(0,"pdmin",result); SpielerInfo[playerid][pPDMin] = strval(result);
    cache_get_field_content(0,"paydays",result); SpielerInfo[playerid][pPayDays] = strval(result);
    cache_get_field_content(0,"skin",result); SpielerInfo[playerid][pSkin] = strval(result);
    cache_get_field_content(0,"tutorial",result); SpielerInfo[playerid][pTutorial] = strval(result);
    SpielerInfo[playerid][pLoggedIn] = true;
    SpielerInfo[playerid][pLogins]++;
    SetPlayerScore(playerid, SpielerInfo[playerid][pLevel]);
    SetPlayerSkin(playerid, SpielerInfo[playerid][pSkin]);
    SendClientMessage(playerid, COLOR_WHITE, "[Account] Sie wurden erfolgreich eingeloggt.");
    SetMoney(playerid, SpielerInfo[playerid][pMoney]);
    }


    Ich Lade sie über einen MYSQL-Befehl "SELECT * FROM ..." // Denke da wäre die enum Version eine bessere


    Ich habe mir die Seite mal näher betrachtet, diese Funktion kann einiges. Brauchen wird man aber nicht alles, denke ich mal.