Frage zu Biz System!

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
  • Abend



    Ich hab mal eine Frage, und zwar möchte ich mal gerne wissen wie man einen 3DTextSpeichern lässt,
    Den ich habe ein Biz-System, wo es ein Befehl gibt der sich '/buybiz' nennt. Und so bald man diesen eingibt an einer bestimmten Position
    wird ein 3DText Geupdated wo dann anschliesend Informationen zum Biz stehen 'Name & Kassenstand'.


    Also meine Frage ist, wie stelle ich das an, Das der Geupdatede 3DText nach einem 'Server Restart' geladen wird.



    Hier mal mein Befehl:



    ocmd:buybiz(playerid,params[])
    {
    if(!IsPlayerInRangeOfPoint(playerid,4.0,1481.1240,-1808.8945,18.7929))return SendClientMessage(playerid,GRUN,"Du bist an keinem Buisness!");
    {
    if(GetPVarInt(playerid,"Geld") >= 50000)
    {
    format(StadthallenText,sizeof(StadthallenText),"=> Stadthalle <=\nBesitzer: %s\nKassenstand: %d",SpielerName(playerid),StadthallenKasse);
    //Create3DTextLabel(StadthallenText,BLAU,1481.1240,-1808.8945,18.7929,40.0,0,0);
    Update3DTextLabelText(Biz1, WEIS, StadthallenText);
    DestroyPickup(VerkaufStadthallePickup);
    SetPVarInt(playerid,"BizBesitzer",1);
    SendClientMessage(playerid,GRUN,"Herzlichen Glückwunsch! zu deinen neuen Biz.");
    SpielerSpeichern(playerid);
    }
    else
    {
    SendClientMessage(playerid, GELB,"Nicht genug Geld, du benötigst: 50.000€");
    }


    }
    return 1;
    }




    Ich hoffe ihr könnt mir weiter helfen




    Grüße

  • Wenn du die Informationen auch nach einem Server-Restart noch zur Verfügung haben willst, musst du die Daten irgendwie speichern. WIe du das machst, kannst du dir aussuchen. Speichern kannst du z.B. in eine json-Datei, in eine ini-Datei, in eine MySQL-Datenbank, in eine SQLite-Datenbank,... Als Anfänger würde ich dir ini raten, z.B. mit dem dini-Include von DracoBlue.

    Professioneller Webentwickler.

  • Wenn du die Informationen auch nach einem Server-Restart noch zur Verfügung haben willst, musst du die Daten irgendwie speichern. WIe du das machst, kannst du dir aussuchen. Speichern kannst du z.B. in eine json-Datei, in eine ini-Datei, in eine MySQL-Datenbank, in eine SQLite-Datenbank,... Als Anfänger würde ich dir ini raten, z.B. mit dem dini-Include von DracoBlue.

    Nun ein wirklicher Anfänger bin ich nicht mehr,


    nur ich mache es halt zum ersten mal das 3DTexte, Objecte halt, nach einem Server restart gespeichert werden,
    daher hab ich hier gefragt wie man dies Hin bekommen, aber du hast mir nur die Möglichkeiten hin geschrieben was mir nicht wirklich viel bringen tut, da ich mich ja nicht damit auskennen tue ^^
    währe nett wenn du es mir ein wenig erklären könntest oder ein Tutorial findest ( habe schon die SuFu genutzt aber nichts gefunden )






    Grüße

  • Okay. Also mal zu den Grundlagen:
    Einen ganzen 3D-Text auf einmal kann man nicht direkt speichern.
    Stattdessen musst du die Daten speichern, die du für die Erstellung eines neuen 3D-Textes brauchst.
    Create3DTextLabel(StadthallenText,BLAU,1481.1240,-1808.8945,18.7929,40.0,0,0);Hier musst du also erstmal den Text, die Farbe, die 3 Koordinaten, die DrawDistance, die VirtualWorld und den letzten Sichtbarkeits-Parameter speichern.


    Das bedeutet du hast 8 Variablen (davon 1 String, 3 Float und 4 Integer), die gespeichert werden müssen.
    Für die Speicherung würde ich dir erstmal dini empfehlen.
    Das dini-Include funktioniert ähnlich wie die PVars, die du schon kennst. Man kann also Werte setzen (set) und auslesen (get), zum Beispiel:
    new gespeichertefarbe;
    dini_IntSet("dateiname.ini", "farbe", BLAU); // Die Farbe für den 3DText wird gespeichert
    gespeichertefarbe = dini_Int("dateiname.ini", "farbe"); // Die Farbe wird wieder ausgelesenDas wäre schonmal eine der 8 Variablen, es ist also eigentlich ganz einfach.
    Eine Übersicht über alle vorhandenen dini-Funktionen findest du hier:


    Ich hoffe du hast alles verstanden. Wenn nicht, einfach nochmal posten ;)


    Grüße, FlasH

    Professioneller Webentwickler.


  • Erstmal ein Riesen dank, das du mir geantwortet hast!
    dachte schon man hätte mich vergessen ;( ..


    .. Nun, ich glaub mal das ich es verstanden habe
    aber woher weis das Script(dini) das "farbe" die farbe ist die Gespeichert werden muss, und nicht der 3DText ?




    Grüße

  • Nein keine Sorge, habe nur geschlafen :D
    Und ich habe gerade gesehen, dass ich die Übersicht nicht verlinkt habe: [ SCRIPTING ] Dateiensystem dini - Dateien erstellen, löschen, speichern, laden


    Also schau, du hast diese Codezeile:
    dini_IntSet("dateiname.ini", "farbe", BLAU);Gehen wir's durch: dini_IntSet ist die Funktion, die aufgerufen wird. "dateiname.ini" ist der Name der Datei, in die gespeichert werden soll. "farbe" ist der Name der Variable, die gespeichert wird. BLAU ist die definierte Farbe, die du gerne speichern würdest. In der Datei dateiname.ini würde also stehen_

    Code
    farbe=0000CCFF

    Das 0000CCFF (oder so ähnlich) ist die Definition der Konstante BLAU, die du irgendwo im Script hast. Darüber brauchst du dir aber eigentlich keine Gedanken machen, denk dir einfach es wäre blau ^^


    Normalerweise mache ich sowas nicht, aber da du anscheinend Interesse daran hast, etwas zu lernen, habe ich dir einen Beispielcode für die Stadthalle geschrieben:
    http://pastebin.de/35578
    Ich hoffe du verstehst den Code und lernst etwas daraus. Bei Fragen einfach melden.

    Professioneller Webentwickler.

  • Erst einmal vielen dank!, dafür das du mir ein beispiel geschrieben hast, war sehr verständlich jedoch hab ich noch
    dazu eine Klitzekleine frage :D


    Ich habe es noch nicht getestet, da ich noch eine frage habe, da ich ja ein Biz-System hab wo ich hinterher noch den Biz - Besitzer und dessen Biz - Kasse
    anzeigen lassen möchte muss ich das dann etwa mit einem "Array" machen? also:

    Hab es jetzt so:


    stock BizSpeichern()
    {
    new string[64];
    format(string,sizeof(string),"Stadthalle\nKontostand: %d",StadthallenKasse);
    dini_Set("stadthalle.ini", "text", string);
    dini_IntSet("stadthalle.ini", "farbe", BLAU);
    dini_FloatSet("stadthalle.ini", "x", 241.1337);
    dini_FloatSet("stadthalle.ini", "y", 112.6405);
    dini_FloatSet("stadthalle.ini", "z", 1003.2188);
    dini_FloatSet("stadthalle.ini", "dist", 40.0);
    dini_IntSet("stadthalle.ini", "world", 0);
    dini_IntSet("stadthalle.ini", "los", 0);
    return 1;
    }
    stock BizLaden()
    {
    new text[128];
    new farbe;
    new Float:koordx, Float:koordy, Float:koordz, Float:dist;
    new world, los;


    text = dini_Get("stadthalle.ini", "text");
    farbe = dini_Int("stadthalle.ini", "farbe");
    koordx = dini_Float("stadthalle.ini", "x");
    koordy = dini_Float("stadthalle.ini", "y");
    koordz = dini_Float("stadthalle.ini", "z");
    dist = dini_Float("stadthalle.ini", "dist");
    world = dini_Int("stadthalle.ini", "world");
    los = dini_Int("stadthalle.ini", "los");
    Create3DTextLabel(text,farbe,koordx,koordy,koordz,dist,world,los);


    return 1;
    }
    Kriege aber Errors bei dieser Zeile:


    Error:
    C:\Users\Equu\Desktop\ProjektSelfmade - Stand 19.07.2013\gamemodes\ProjektScript.pwn(14128) : error 047: array sizes do not match, or destination array is too small


    Zeile:


    text = dini_Get("stadthalle.ini", "text");




    Grüße :D

    2 Mal editiert, zuletzt von Equ ()

  • Kein Problem ;)


    Das mit dem Array verstehe ich nicht, was willst du machen?
    Der Error liegt daran, dass der String text zu klein ist, das war wohl mein Fehler. Versuch es mal mit 256 statt 128 Zeichen beim BizLaden. :)

    Professioneller Webentwickler.

  • Kein Problem ;)


    Das mit dem Array verstehe ich nicht, was willst du machen?
    Der Error liegt daran, dass der String text zu klein ist, das war wohl mein Fehler. Versuch es mal mit 256 statt 128 Zeichen beim BizLaden. :)


    Also mit Array meinte ich halt den string, die Fraktionskasse später auslesen im 3DTextLabel
    mhm, habe nun ein Problem so ist doch eigentlich alles richtig, Der Error ist nun auch weg lag am string ( war zu klein )
    nun, ist das Problem wenn ich dann InGame schaue nach den 3DTextLabel wird dieser nicht angezeigt ?


    Codes:


    stock BizSpeichern()
    {
    new string[256];
    format(string,sizeof(string),"Stadthalle\nKontostand: %d",StadthallenKasse);
    dini_Set("stadthalle.ini", "text", string);
    dini_IntSet("stadthalle.ini", "farbe", BLAU);
    dini_FloatSet("stadthalle.ini", "x", 241.1337);
    dini_FloatSet("stadthalle.ini", "y", 112.6405);
    dini_FloatSet("stadthalle.ini", "z", 1003.2188);
    dini_FloatSet("stadthalle.ini", "dist", 40.0);
    dini_IntSet("stadthalle.ini", "world", 0);
    dini_IntSet("stadthalle.ini", "los", 0);
    return 1;
    }
    stock BizLaden()
    {
    {
    new text[256];
    new farbe;
    new Float:koordx, Float:koordy, Float:koordz, Float:dist;
    new world, los;


    text = dini_Get("stadthalle.ini", "text");
    farbe = dini_Int("stadthalle.ini", "farbe");
    koordx = dini_Float("stadthalle.ini", "x");
    koordy = dini_Float("stadthalle.ini", "y");
    koordz = dini_Float("stadthalle.ini", "z");
    dist = dini_Float("stadthalle.ini", "dist");
    world = dini_Int("stadthalle.ini", "world");
    los = dini_Int("stadthalle.ini", "los");
    Create3DTextLabel(text,farbe,koordx,koordy,koordz,dist,world,los);
    }
    return 1;
    }





    Grüße

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Code von Equ: per PN erhalten: new Biz1[60];
    if(!dini_Exists(Biz1))
    {
    format(Biz1,sizeof(Biz1),"stadthalle.ini");
    dini_Create(Biz1);
    }Du prüfst, ob die Datei mit dem String Biz1 existiert. In Biz1 steht aber zu dem Zeitpunkt noch gar nichts drin.
    Außerdem machst du dir den Code unnötig kompliziert.


    if(!dini_Exists("stadthalle.ini")) dini_Create("stadthalle.ini");

    Professioneller Webentwickler.

    Einmal editiert, zuletzt von Le FlasH () aus folgendem Grund: code

  • Ich habe es nun so drin stehen, aber es wird immer noch nichts rein geschrieben.



    Code:



    if(!dini_Exists("stadthalle.ini"))
    {
    dini_Create("stadthalle.ini");
    }

  • Dann kann ich dir leider auch nicht mehr wirklich weiterhelfen.


    Die Datei ist aber jetzt erstellt?
    Evtl. unter Linux die Berechtigungen setzen bzw. unter Windows als Administrator ausführen.

    Professioneller Webentwickler.

  • Dann kann ich dir leider auch nicht mehr wirklich weiterhelfen.


    Die Datei ist aber jetzt erstellt?
    Evtl. unter Linux die Berechtigungen setzen bzw. unter Windows als Administrator ausführen.

    Die Datei selbst wird ja erstellt, aber leider nur nichts hinein geschrieben.
    kann es sein das man es alles manuell machen muss, also in der stadthalle.ini all das hier da rein schrieben muss
    was bei meinem Stock Load/Speichern steht ?.




    Grüße