BusinessLaden und Speichern wo Laden und Speichern?

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 ihr lieben,


    ich habe soeben ein BusinessSystem angefangen.. Ich möchte gerne wissen, wo ich es am Besten Speichere und Lade. Und was beim stock BusinessLaden und BusinessSpeichern in Klammern stehen sollte.


    Hier meine Ansätze:



    stock BusinessErstellen(Name[MAX_PLAYER_NAME], Teilhaber[MAX_PLAYER_NAME], BPakete, Float:X, Float:Y, Float:Z)
    {
    new BusinessDatei[64];
    format(BusinessDatei, sizeof(BusinessDatei), "Businesses/%s.txt", Name);
    dini_Create(BusinessDatei);
    dini_Set(BusinessDatei, "Besitzer", Name);
    dini_Set(BusinessDatei, "Inteilhaber", Teilhaber);
    dini_IntSet(BusinessDatei, "Pakete", BPakete);
    dini_FloatSet(BusinessDatei, "B_Pos_X", X);
    dini_FloatSet(BusinessDatei, "B_Pos_Y", Y);
    dini_FloatSet(BusinessDatei, "B_Pos_Z", Z);
    return 1;
    }
    stock BusinessLaden(Name[MAX_PLAYER_NAME])
    {
    new BusinessDatei[64], BusinessString[200];
    format(BusinessDatei, sizeof(BusinessDatei), "Businesses/%s.txt", Name);
    for(new i = 0; i<MAX_Businesses; i++)
    {
    BusinessInfo[i][Besitzer] = dini_Get(BusinessDatei, "Besitzer");
    BusinessInfo[i][Inteilhaber] = dini_Get(BusinessDatei, "Inteilhaber");
    BusinessInfo[i][Pakete] = dini_Int(BusinessDatei, "Pakete");
    BusinessInfo[i][B_Pos_X] = dini_Float(BusinessDatei,"B_Pos_X");
    BusinessInfo[i][B_Pos_Y] = dini_Float(BusinessDatei,"B_Pos_Y");
    BusinessInfo[i][B_Pos_Z] = dini_Float(BusinessDatei,"B_Pos_Z");
    format(BusinessString, sizeof(BusinessString), "Inhaber: %s\nInteilhaber: %s\nPakete: %i\nKasse: %i$", BusinessInfo[i][Besitzer],BusinessInfo[i][Inteilhaber],BusinessInfo[i][Pakete],BusinessInfo[i][Kasse]);
    Create3DTextLabel(BusinessString, Weiss, BusinessInfo[i][B_Pos_X], BusinessInfo[i][B_Pos_Y], BusinessInfo[i][B_Pos_Z], 5,0,0);
    }
    return 1;
    }
    stock BusinessSpeichern(Name[MAX_PLAYER_NAME])
    {
    new BusinessDatei[64];
    format(BusinessDatei, sizeof(BusinessDatei), "Businesses/%s.txt", Name);
    for(new i = 0; i<MAX_Businesses; i++)
    {
    dini_Set(BusinessDatei, "Besitzer", BusinessInfo[i][Besitzer]);
    dini_Set(BusinessDatei, "Inteilhaber", BusinessInfo[i][Inteilhaber]);
    dini_IntSet(BusinessDatei, "Pakete", BusinessInfo[i][Pakete]);
    dini_FloatSet(BusinessDatei, "B_Pos_X", BusinessInfo[i][B_Pos_X]);
    dini_FloatSet(BusinessDatei, "B_Pos_Y", BusinessInfo[i][B_Pos_Y]);
    dini_FloatSet(BusinessDatei, "B_Pos_Z", BusinessInfo[i][B_Pos_Z]);
    }
    return 1;
    }


    Der Befehl zum Erstellen:



    ocmd:bizerstellen(playerid, params[])
    {
    new BSpielerName[MAX_PLAYER_NAME], BizTeilhaber[MAX_PLAYER_NAME], BizPakete, Float:B_X, Float:B_Y, Float:B_Z;
    if(sscanf(params, "ssi", BSpielerName, BizTeilhaber, BizPakete)) return SendClientMessage(playerid, Weiss, "/bizerstellen [SpielerName][Teilhaber][Pakete]");
    if(SpielerInfo[playerid][AdminLevel] <= 5) return SendClientMessage(playerid, Weiss, "");
    GetPlayerPos(playerid, B_X, B_Y, B_Z);

    BusinessErstellen(BSpielerName, BizTeilhaber, BizPakete, B_X, B_Y, B_Z);
    printf("SpielerName: %s, Teilhaber: %s, Pakete: %i, FloatX: %f, FloatY: %f, FloatZ: %f", BSpielerName, BizTeilhaber, BizPakete, B_X, B_Y, B_Z);
    SendClientMessage(playerid, Weiss, "Biz erstellt");
    return 1;
    }

    Mit freundlichen Grüßen,
    Dachdecker

  • Machen die Funktionen so wie sie sind Sinn?


    Das Ding ist, beim Laden steht ja wie bei erstellen und speichern dieses format(BusinessDatei, "Businesses/%s.txt", Name);
    Meine Frage ist, schafft er es den Name zu finden ohne das er übergeben wird? (Meiner Meinung nach nicht?
    @Jeffry
    //Push

    Mit freundlichen Grüßen,
    Dachdecker

    2 Mal editiert, zuletzt von Dachdecker ()

  • Machen die Funktionen so wie sie sind Sinn?

    Nicht wirklich.


    Ich empfehle dir, schaue dir dieses Tutorial an und gehe es Schritt für Schritt durch:
    [jTuT] Fraktions-Fahrzeug-System mit Dini 1.6


    Das bezieht sich zwar auf Fraktionsfahrzeuge, kann aber auch auf Häuser angewendet werden.
    Du erstellst dann halt anstatt einem Fahrzeug ein Haus.


    Den Teil mit dem Minuten-Timer zum Speichern und den Teil vom Einsteigen in das Fahrzeug kannst du natürlich weg lassen, deine Häuser bewegen sich ja nicht.


    Versuche mal, ob du damit klar kommst.

  • @Jeffry


    Das CreatePickup wird erstellt, aber das Create3DTextLabel nicht..


    Und mir fehlt noch ein /bizerstellen befehl.. kommt mit deinem tut da nicht zurecht ... Du hast da iwas mit idx und bla blub..



    stock BusinessLaden()
    {
    new erstellteBusinesses, path[64], BizString[200];
    for(new i=0; i<Max_Businesses; i++)
    {
    format(path, sizeof(path), "/Businesses/%d.ini", i);
    if(!fexist(path)) continue;

    strmid(BusinessInfo[i][B_Besitzer],dini_Get(path,"BizBesitzer"),false,strlen(dini_Get(path,"BizBesitzer")),MAX_PLAYER_NAME);
    strmid(BusinessInfo[i][B_Inteilhaber],dini_Get(path,"BizInteilhaber"),false,strlen(dini_Get(path,"BizInteilhaber")),MAX_PLAYER_NAME);
    BusinessInfo[i][B_Kasse] = dini_Int(path, "BizKasse");
    BusinessInfo[i][B_Pakete] = dini_Int(path, "BizPakete");
    BusinessInfo[i][B_Pos_X] = floatstr(dini_Get(path, "Biz_X"));
    BusinessInfo[i][B_Pos_Y] = floatstr(dini_Get(path, "Biz_Y"));
    BusinessInfo[i][B_Pos_Z] = floatstr(dini_Get(path, "Biz_Z"));
    BusinessInfo[i][B_ID] = dini_Int(path, "BizID");

    if(BusinessInfo[i][B_ID] <= Max_Businesses)
    {
    format(BizString, sizeof(BizString), "Besitzer: %s\nInteilhaber: %s\nKasse: %d\nPakete: %d", BusinessInfo[i][B_Besitzer], BusinessInfo[i][B_Inteilhaber], BusinessInfo[i][B_Kasse], BusinessInfo[i][B_Pakete]);
    Create3DTextLabel(BizString, Weiss, BusinessInfo[i][B_Pos_X], BusinessInfo[i][B_Pos_Y], BusinessInfo[i][B_Pos_Z], 5, 0,0);
    CreatePickup(1272, 1, BusinessInfo[i][B_Pos_X], BusinessInfo[i][B_Pos_Y], BusinessInfo[i][B_Pos_Z] ,0);
    }
    else
    {
    printf("Fehler: BizID %d existiert nicht.", BusinessInfo[i][B_ID]);
    }

    erstellteBusinesses++;
    if(erstellteBusinesses == Max_Businesses) return print("Es können keine weiteren Businesses geladen werden, Limit (Max_Businesses) erreicht.");
    }
    return 1;
    }

    Mit freundlichen Grüßen,
    Dachdecker

  • Dann ändere mal:
    Create3DTextLabel(BizString, Weiss, BusinessInfo[i][B_Pos_X], BusinessInfo[i][B_Pos_Y], BusinessInfo[i][B_Pos_Z], 5, 0,0);
    zu:
    new Text3D:label = Create3DTextLabel(BizString, Weiss, BusinessInfo[i][B_Pos_X], BusinessInfo[i][B_Pos_Y], BusinessInfo[i][B_Pos_Z], 5, 0,0);
    printf("Label für %d erstellt: %d", i, _:label);


    Was wird dir dann im Server Log angezeigt?


    Das Pickup ist an der richtigen Position?

  • Dann liegt es eventuell daran, dass es in einem Haus ist.
    Ändere
    Create3DTextLabel(BizString, Weiss, BusinessInfo[i][B_Pos_X], BusinessInfo[i][B_Pos_Y], BusinessInfo[i][B_Pos_Z], 5, 0,0);
    zu
    Create3DTextLabel(BizString, Weiss, BusinessInfo[i][B_Pos_X], BusinessInfo[i][B_Pos_Y], BusinessInfo[i][B_Pos_Z], 5, 0,1);

  • Hm...
    Lass dir mal den BizString ausgeben, stimmt der?
    printf("BizString: %s", BizString);


    Falls ja, löschst du eventuell irgendwo nach dem Laden der Häuser wieder alle Labels? Mache das Laden eventuell mal ganz ans Ende von OnGameModeInit, also nach die Enter/Exits.

  • Ich lasse die Labels ja bei BusinessLaden(); laden


    Ich lösche nirgendwo labels



    format(BizString, sizeof(BizString), "%s\nBesitzer: %s\nInteilhaber: %s\nLevel: %d\nKasse: %d\nPakete: %d\nBusinessID: %d",BusinessInfo[i][B_Name], BusinessInfo[i][B_Besitzer], BusinessInfo[i][B_Inteilhaber],BusinessInfo[i][B_Level], BusinessInfo[i][B_Kasse], BusinessInfo[i][B_Pakete], BusinessInfo[i][B_ID]); print(BizString);
    Unbenannt.png

    Mit freundlichen Grüßen,
    Dachdecker

    2 Mal editiert, zuletzt von Dachdecker ()

  • Ich kanns mir nicht erklären. Der Code ist ja identisch.
    Aufgerufen wird er auch, sonst wäre das Pickup dort ja nicht.


    Und erstellt wird es auch, da einmal 0 und einmal 1 zurück gegeben wird.


    Sicher, dass du nirgends im Code ein Label löschst, also hast du nirgends Delete3DTextLabel verwendet?