DJson 1.6 Tutorial

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 Liebe Community ,


    Ich möchte euch hier einmal meine neue Lieblings Include vorstellen , sie heißt DJson , ich hab sie nun zum ersten mal getestet,
    und ich war äußerst begeistert, sie hat ein Array ähnliches Pfad System , sie Speichert und lädt ungefähr so :


    djSetInt("stats.json","server/3saved3",55);


    Nun sieht es so aus in der Datei ...


    Code
    {"players":{"connected":1,"spawned":1},"server":{"3saved3":55,"saved":2,"started":6}}


    So nochmal unterteilt ( Bitte nicht wundern ich hab es schon mal mit anderen Dingen getestet ^^ )


    { // < Hauptteil
    "players":{"connected":1,"spawned":1}, // Hier war schon mal ein test :>
    "server":{"3saved3":55,"saved":2,"started":6} // dies hab ich gespeichert , so nun unten die Erklärung...
    } // Hauptblock beendet


    "server" ist das was ich als Hauptpfad nutze um meine Server Daten zu speichern , also sagen wir mal Haupt Ordner nur so als Begriffserklärung
    { der Block Startet
    "3saved3" ist mein Item wo ich eine Beispiel Zahl speichere , natürlich gehen auch Namen etc aber dazu später
    { der Block Startet für 3saved3
    :55 ist nun unser Wert


    Achtung wenn du nun mehrere Items Speicherst in diesem Context...
    "server/3saved3/deinitem"


    Wird der alte Wert für 3saved3 gelöscht also gibt es die 55 nicht mehr
    aber du kannst weitere Items in 3saved3 speichern, also Praktisch gesehen eine endlose Speicherungs Möglichkeit,
    man kann sich dies vorstellen wie in einem Ordner Prinzip



    Zu den Funktionen ...


    djCreateFile(file[]) // Datei erstellen


    djFloat("datei.endung","array1/array2/..."); // lädt einen Rationalen Wert also Koordinaten bzw. Kommazahlen


    djInt("datei.endung","array1/array2/..."); // lädt einen Integer/Zahlen Wert


    dj("datei.endung","array1/array2/..."); // Lädt einen String/ Textwert


    djSetFloat("datei.endung","array1/array2/...",KoordinatenWert); // Speichert einen Rationalen Wert bzw. einfach Float ^^


    djSetInt("datei.endung","array1/array2/...",Zahlenwert); // Speichert einen Zahlen Wert


    djSet("datei.endung","array1/array2/...",Name); // Speichert einen String/Textwert


    djUnset("datei.endung","array1/array2/..."); // Löscht einen Eintrag


    djIsSet("datei.endung","array1/array2/..."); // Schaut nach ob der Eintrag vorhanden ist und gibt je nach dem True/False zurück


    djCount("datei.endung","array1/array2/..."); // Schaut wie viel Einträge im ausgewählten Item sind


    djStyled(bool:styled); - Ordnet eure Struktur so das er eingerückt und Ordentlich dargestellt wird




    So wie gesagt , stellt es euch vor wie ein Ordner Prinzip ihr könnt soviel Speichern in einem Eintrag wie ihr wollt , wenn
    ihr im Eintrag selber jedoch wo noch unter Items sind einen Wert Speichert werden die anderen Werte gelöscht ,
    bzw. die anderen Werte und Items in diesem Eintrag werden gelöscht und nur noch euer festgelegter Wert für diesen Eintrag
    existiert! Also immer aufpassen ^^


    Hier mal ein Beispiel in Form eines Kommandos :


    if (strcmp("/savepos", cmdtext, true) == 0)
    {
    new Float:pX,
    Float:pY,
    Float:pZ,
    Float:pA;
    GetPlayerPos(playerid,pX,pY,pZ);
    GetPlayerFacingAngle(playerid,pA);
    new playerform[40],playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,playername,sizeof playername);
    format(playerform,sizeof playerform,"spielerpos.%s.ini",playername);
    djSetFloat("spielerpos.ini","spieler/position/x",pX);
    djSetFloat("spielerpos.ini","spieler/position/y",pY);
    djSetFloat("spielerpos.ini","spieler/position/z",pZ);
    djSetFloat("spielerpos.ini","spieler/position/a",pA);
    return 1;
    }


    Struktur :

    Code
    {"spieler":{"position":{"a":269.142486,"x":1958.378295,"y":1343.157226,"z":15.374607}}}



    Wenn ihr diese Include nutzt muss dies in die entsprechenden Klassen , die Namen sagen ja alles :
    djson_GameModeInit();
    djson_GameModeExit();



    Wie ihr seht ist dieses System sehr Effektiv und erspart einem eine Menge Ressourcen & Arbeit.


    ( Ich werde das Tutorial bei bedarf noch etwas verbessern )



    INFO: DJson 1.6 (c) by Draco Blue - http://dracoblue.net/download/djson-16/51/



    Mfg. BlackFoX_UD_

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


    4 Mal editiert, zuletzt von BlackFoX ()

  • Tut mir leid BlackFox , war eigentlich nicht so gemeint.
    Hab meinen Beitrag editier .


    Nochmal Sorry , aber du bringst zurzeit echt sehr viele Projekte hier her und auch Tutorials.
    Du machst deine Arbeit perfekt . :whistling:


    Powered by Windows 7


    Die HDD stimmt nich , hab 3 Festplatten drin.

  • Danke für´s TuT 10/10


    Habe aber noch eine frage ich will jetzt mal /loadpos erstellen...


    Das heißt bei Platz A habe ich gespeichert mit /savepos
    und will jetzt von Platz X wieder zu Platz A mit /loadpos


    wie geht das denn nun?


    Ich falle immer irgend wo anders hin..mit diesem code


    if (strcmp("/savepos", cmdtext, true) == 0)
    {
    new Float:pX,
    Float:pY,
    Float:pZ,
    Float:pA;
    GetPlayerPos(playerid,pX,pY,pZ);
    GetPlayerFacingAngle(playerid,pA);
    new playerform[40],playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,playername,sizeof playername);
    format(playerform,sizeof playerform,"Positionen/spielerpos.%s.ini",playername);
    djSetFloat("spielerpos.ini","spieler/position/x",pX);
    djSetFloat("spielerpos.ini","spieler/position/y",pY);
    djSetFloat("spielerpos.ini","spieler/position/z",pZ);
    djSetFloat("spielerpos.ini","spieler/position/a",pA);


    return 1;
    }

    if (strcmp("/loadpo", cmdtext, true) == 0)
    {
    new Float:tX,
    Float:tY,
    Float:tZ,
    Float:tA;
    SetPlayerPos(playerid,tX,tY,tZ);
    SetPlayerFacingAngle(playerid,tA);
    new playerform[40],playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,playername,sizeof playername);
    format(playerform,sizeof playerform,"Positionen/spielerpos.%s.ini",playername);
    djFloat("spielerpos.ini","spieler/position/x");
    djFloat("spielerpos.ini","spieler/position/y");
    djFloat("spielerpos.ini","spieler/position/z");
    djFloat("spielerpos.ini","spieler/position/a");


    return 1;
    }


    Danke
    MFg Haybeat

    Mafian´s World War [MWW] The Next Revolution of Samp!


    [hide]Du wohnst in einer Tru-thahn- Farm, nach diesem Battle bist du ein To-ter- Man![/hide]

  • du setzt den spieler auf eine position bevor du das lädst
    hier teste mal das:



    if (strcmp("/loadpos", cmdtext, true) == 0)
    {
    new playerform[40],playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,playername,sizeof playername);
    format(playerform,sizeof playerform,"Positionen/spielerpos.%s.ini",playername);
    new Float:tX= djFloat("spielerpos.ini","spieler/position/x");
    new Float:tY= djFloat("spielerpos.ini","spieler/position/y");
    new Float:tZ= djFloat("spielerpos.ini","spieler/position/z");
    new Float:tA= djFloat("spielerpos.ini","spieler/position/a");
    SetPlayerPos(playerid, tX, tY, tZ);
    SetPlayerFacingAngle(playerid, tA);
    return 1;
    }

  • Danke geht super..


    habe dich in icq geadded!

    Mafian´s World War [MWW] The Next Revolution of Samp!


    [hide]Du wohnst in einer Tru-thahn- Farm, nach diesem Battle bist du ein To-ter- Man![/hide]

  • Ich wollte nochmal dazu sagen dass man per
    djStyled(bool:styled);
    einstellen kann ob man richtig "geordneten" json Code haben will, das sieht dann in der Datei ungefähr so aus:
    /* Aus meinem eigenen kleinen RP Script :> */
    {
    "overall":{
    "job":0,
    "money":0,
    "password":"itsapassword",
    "skin":0,
    "timeplayed":7174
    },
    "spawn":{
    "a":270.210998,
    "x":2003.626831,
    "y":3250.252929,
    "z":556.961975
    }
    }


    Außerdem hat djson den Vorteil dass es Werte im JSON Format abspeichert, und man somit per Java, PHP usw. darauf zugreifen kann.

  • Zitat

    Außerdem hat djson den Vorteil dass es Werte im JSON Format abspeichert, und man somit per Java, PHP usw. darauf zugreifen kann.

    Sorry, dass ich den Thread rausziehe, aber ist ja dennoch relativ "aktiv" - Ich suche derzeit eine Methode, die besser als MySQL ist. Denn mit meinem Linux-Server habe ich da ein paar Probleme mit. Allerdings sollte diese Methode eben durch PHP zugreifbar sein, damit ich dennoch ein User Control Panel erstellen kann. Kleine Frage am Rande, wie kann ich mit PHP darauf zugreifen? Wenn man dafür kein riesen PHP Experte sein muss würde ich ansonsten auf diese Methode umsteigen.


    Mit freundlcihen Grüßen
    Padarom

    Ich bin
    .. seit etwa 2007 in der Webentwicklung tätig, seit 2013 professionell
    .. Erfahrener Entwickler in PHP, Swift, Javascript, Typescript und Ruby. Zusätzlich habe ich Erfahrung in Python, Java, C#, C++, Prolog und einigen esoterischen Programmiersprachen
    .. Luftfahrtenthusiast und Segelflieger

  • Auch wenn der Thread schon über 3 Jahre existiert,
    wollte ich fragen ob hier einer dazu ein Login/Register System mit Djson vllt. machen könnte?
    Da ich gerne von Dini auf Djson umsteigen würde, aber ich es noch nicht so ganz strotz dem hier verstehe....



    Danke im Voraus



    MFG

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • Hey,
    Ich weiß, das dieses Thema schon etwas älter ist.
    Aber ich bin wirklich positiv von dieser Include ueberrascht.


    Man muss sich damit, im gegensatz zu mysql, nicht länger als 10 Sekunden auseinander setzen, um alles zu verstehen.


    So sieht z.B. eine SpielerDatei aus:
    {"Dominik":{"Passwort":"AlohaHe","Geld":23}}
    Damit lässt sich, ähnlich wie bei mysql, alles sehr einfach und uebersichtlich verwalten.


    Alle Spieler können daher in einer Datei sein.
    Das vereinfacht so einiges.


    Daher muss ich sagen:
    Super Tutorial
    Super Include

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen