Haus System Selfmade nun Dynamisch?!

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


    Ich kenne mich mit Dini nicht so aus, aber Du hast sicher ein Enum, poste dieses bitte mal. Wenn Du den Code für das Laden der Häuser beim Serverstart hast, poste diesen auch mit. Meistens passiert dort der Fehler (Ich spreche aus Erfahrung, hatte selber mit meinem Vehiclesystem solch ein Einzeiler Problem)


    Simon

  • Ich habe eben ein Test durch geführt und das ergebniss war:
    ich konnte ein haus erstellen doch er hat das haus was ich erstellt habe sofort
    50 mal erstellt also das Limit nur wieso? vlt beim Createn wegen MaxHaus?
    ich habe mir das Tutorial von Haxler als vorlage genommen.

  • Ok klappt nun doch jetzt buggen igendwie die Labels und Pickups
    wenn ich eins erstelle wird es angezeigt doch dann wenn ich ein neues Haus erstelle
    zeigt er es nicht mehr an hier alles was mann brauch:


    #define MaxHaus 50


    enum Hausdatei
    {
    Besitzer[30],
    Float:Hx,
    Float:Hy,
    Float:Hz,
    Float:Ix,
    Float:Iy,
    Float:Iz,
    Zimmer,
    Inte,
    World,
    HPreis,
    Verkauft,
    Verschlossen,
    Hlevel,
    Hkasse,
    Hmiete
    }
    new HausInfo[MaxHaus][Hausdatei];
    new Hausp[MaxHaus];
    new Text3D:Hausa[MaxHaus];


    forward LoadHaus();
    forward SaveHaus();
    forward UpdaHaus();


    stock CreateHaus(cname[40],Float:cx,Float:cy,Float:cz,Float:zx,Float:zy,Float:zz,zimmer,inte,world,cpreis,csell,clock,clevel,ckasse,cmiete)
    {
    new string[128];
    for(new i=1;i<MaxHaus;i++)
    {
    format(string,sizeof(string),"/Haus/Hausid %d.ini",i);
    if(!dini_Exists(string))
    {
    dini_Create(string);
    dini_Set(string,"Besitzer",cname);
    dini_FloatSet(string,"Hx",cx);
    dini_FloatSet(string,"Hy",cy);
    dini_FloatSet(string,"Hz",cz);
    dini_FloatSet(string,"Ix",zx);
    dini_FloatSet(string,"Iy",zy);
    dini_FloatSet(string,"Iz",zz);
    dini_IntSet(string,"Zimmer",zimmer);
    dini_IntSet(string,"Interior",inte);
    dini_IntSet(string,"World",world);
    dini_IntSet(string,"HPreis",cpreis);
    dini_IntSet(string,"Verkauft",csell);
    dini_IntSet(string,"Verschlossen",clock);
    dini_IntSet(string,"Level",clevel);
    dini_IntSet(string,"Kasse",ckasse);
    dini_IntSet(string,"Miete",cmiete);
    LoadHaus();
    return 1;
    }
    }
    return 1;
    }


    public LoadHaus()
    {
    new string[128];
    for(new i=1;i<MaxHaus;i++)
    {
    format(string,sizeof(string),"/Haus/Hausid %d.ini",i);
    if(dini_Exists(string))
    {
    format(HausInfo[i][Besitzer],40,"%s",dini_Get(string,"Besitzer"));
    HausInfo[i][Hx] = dini_Float(string,"Hx");
    HausInfo[i][Hy] = dini_Float(string,"Hy");
    HausInfo[i][Hz] = dini_Float(string,"Hz");
    HausInfo[i][Ix] = dini_Float(string,"Ix");
    HausInfo[i][Iy] = dini_Float(string,"Iy");
    HausInfo[i][Iz] = dini_Float(string,"Iz");
    HausInfo[i][Zimmer] = dini_Int(string,"Zimmer");
    HausInfo[i][Inte] = dini_Int(string,"Inte");
    HausInfo[i][World] = dini_Int(string,"World");
    HausInfo[i][HPreis] = dini_Int(string,"HPreis");
    HausInfo[i][Verkauft] = dini_Int(string,"Verkauft");
    HausInfo[i][Verschlossen] = dini_Int(string,"Verschlossen");
    HausInfo[i][Hlevel] = dini_Int(string,"Level");
    HausInfo[i][Hkasse] = dini_Int(string,"Kasse");
    HausInfo[i][Hmiete] = dini_Int(string,"Miete");
    }
    if(HausInfo[i][Verkauft] == 0)
    {
    Hausp[i] = CreatePickup(1273,2,HausInfo[i][Hx],HausInfo[i][Hy],HausInfo[i][Hz]);
    Hausp[i] = CreatePickup(1318,2,HausInfo[i][Ix],HausInfo[i][Iy],HausInfo[i][Iz]);
    format(string, sizeof(string), "Besitzer: %s \nZimmer: %d \nPreis: %d$ \nLevel: %d",HausInfo[i][Besitzer],HausInfo[i][Zimmer],HausInfo[i][HPreis],HausInfo[i][Hlevel]);
    Hausa[i] = Create3DTextLabel(string,Orange,HausInfo[i][Hx],HausInfo[i][Hy],HausInfo[i][Hz],10,0,1);
    return 1;
    }
    if(HausInfo[i][Verkauft] == 1)
    {
    Hausp[i] = CreatePickup(1272,2,HausInfo[i][Hx],HausInfo[i][Hy],HausInfo[i][Hz]);
    Hausp[i] = CreatePickup(1318,2,HausInfo[i][Ix],HausInfo[i][Iy],HausInfo[i][Iz]);
    format(string, sizeof(string), "Besitzer: %s \nZimmer: %d \nMiete: %d$",HausInfo[i][Besitzer],HausInfo[i][Zimmer],HausInfo[i][Hmiete]);
    Hausa[i] = Create3DTextLabel(string,Orange,HausInfo[i][Hx],HausInfo[i][Hy],HausInfo[i][Hz],10,0,1);
    }
    }
    return 1;
    }


    public SaveHaus()
    {
    new string[128];
    for(new i=1;i<MaxHaus;i++)
    {
    format(string,sizeof(string),"/Haus/Hausid %d.ini",i);
    if(dini_Exists(string))
    {
    dini_Set(string,"Besitzer",HausInfo[i][Besitzer]);
    dini_FloatSet(string,"Hx",HausInfo[i][Hx]);
    dini_FloatSet(string,"Hy",HausInfo[i][Hy]);
    dini_FloatSet(string,"Hz",HausInfo[i][Hz]);
    dini_FloatSet(string,"Ix",HausInfo[i][Ix]);
    dini_FloatSet(string,"Iy",HausInfo[i][Iy]);
    dini_FloatSet(string,"Iz",HausInfo[i][Iz]);
    dini_IntSet(string,"Zimmer",HausInfo[i][Zimmer]);
    dini_IntSet(string,"Inte",HausInfo[i][Inte]);
    dini_IntSet(string,"World",HausInfo[i][World]);
    dini_IntSet(string,"HPreis",HausInfo[i][HPreis]);
    dini_IntSet(string,"Verkauft",HausInfo[i][Verkauft]);
    dini_IntSet(string,"Verschlossen",HausInfo[i][Verschlossen]);
    dini_IntSet(string,"Level",HausInfo[i][Hlevel]);
    dini_IntSet(string,"Kasse",HausInfo[i][Hkasse]);
    dini_IntSet(string,"Miete",HausInfo[i][Hmiete]);
    return 1;
    }
    }
    return 1;
    }


    public UpdaHaus()
    {
    new string[128];
    for(new i=1;i<MaxHaus;i++)
    {
    if(HausInfo[i][Verkauft] == 0)
    {
    DestroyPickup(Hausp[i]);
    Hausp[i] = CreatePickup(1273,2,HausInfo[i][Hx],HausInfo[i][Hy],HausInfo[i][Hz]);
    Hausp[i] = CreatePickup(1318,2,HausInfo[i][Ix],HausInfo[i][Iy],HausInfo[i][Iz]);
    format(string, sizeof(string), "Besitzer: %s \nZimmer: %d \nPreis: %d$ \nLevel: %d",HausInfo[i][Besitzer],HausInfo[i][Zimmer],HausInfo[i][HPreis],HausInfo[i][Hlevel]);
    Update3DTextLabelText(Hausa[i],Orange,string);
    return 1;
    }
    if(HausInfo[i][Verkauft] == 1)
    {
    DestroyPickup(Hausp[i]);
    Hausp[i] = CreatePickup(1272,2,HausInfo[i][Hx],HausInfo[i][Hy],HausInfo[i][Hz]);
    Hausp[i] = CreatePickup(1318,2,HausInfo[i][Ix],HausInfo[i][Iy],HausInfo[i][Iz]);
    format(string, sizeof(string), "Besitzer: %s \nZimmer: %d \nMiete: %d$",HausInfo[i][Besitzer],HausInfo[i][Zimmer],HausInfo[i][Hmiete]);
    Update3DTextLabelText(Hausa[i],Orange,string);
    }
    }
    return 1;
    }

  • Hi


    Du machst da ein paar Fehler:


    1.) return bricht den Code ab, wenn Du aber alle Häuser laden möchtest, musst Du continue brauchen
    2.) Du lädst alle Häuser neu, wenn Du ein neues Haus erstellst. Du musst LoadHaus() anpassen, sonst kann es da Probleme geben. Mein Tipp:


    CreateHaus

    • Daten speichern
    • Pickup erstellen
    • 3DText erstellen


    LoadHaus

    • Entfernen, da das Haus bereits bei CreateHaus komplett erstellt wird


    UpdateHaus

    • Pickups zerstören und neu erstellen
    • 3DText updaten


    Du hast wie bei 1.) gesagt ein return-Fehler, verwende da unbedingt continue, um einen for-Wert zu erhöhen.Hinzu kommt, dass Du nur abfragen darfst, ob das Haus verkauft ist oder nicht, wenn es auch existiert, habe das umgebaut:


    public LoadHaus()
    {
    new string[128];
    for(new i=1;i<MaxHaus;i++)
    {
    format(string,sizeof(string),"/Haus/Hausid %d.ini",i);
    if(dini_Exists(string))
    {
    format(HausInfo[i][Besitzer],40,"%s",dini_Get(string,"Besitzer"));
    HausInfo[i][Hx] = dini_Float(string,"Hx");
    HausInfo[i][Hy] = dini_Float(string,"Hy");
    HausInfo[i][Hz] = dini_Float(string,"Hz");
    HausInfo[i][Ix] = dini_Float(string,"Ix");
    HausInfo[i][Iy] = dini_Float(string,"Iy");
    HausInfo[i][Iz] = dini_Float(string,"Iz");
    HausInfo[i][Zimmer] = dini_Int(string,"Zimmer");
    HausInfo[i][Inte] = dini_Int(string,"Inte");
    HausInfo[i][World] = dini_Int(string,"World");
    HausInfo[i][HPreis] = dini_Int(string,"HPreis");
    HausInfo[i][Verkauft] = dini_Int(string,"Verkauft");
    HausInfo[i][Verschlossen] = dini_Int(string,"Verschlossen");
    HausInfo[i][Hlevel] = dini_Int(string,"Level");
    HausInfo[i][Hkasse] = dini_Int(string,"Kasse");
    HausInfo[i][Hmiete] = dini_Int(string,"Miete");
    if(HausInfo[i][Verkauft] == 0)
    {
    Hausp[i] = CreatePickup(1273,2,HausInfo[i][Hx],HausInfo[i][Hy],HausInfo[i][Hz]);
    Hausp[i] = CreatePickup(1318,2,HausInfo[i][Ix],HausInfo[i][Iy],HausInfo[i][Iz]);
    format(string, sizeof(string), "Besitzer: %s \nZimmer: %d \nPreis: %d$ \nLevel: %d",HausInfo[i][Besitzer],HausInfo[i][Zimmer],HausInfo[i][HPreis],HausInfo[i][Hlevel]);
    Hausa[i] = Create3DTextLabel(string,Orange,HausInfo[i][Hx],HausInfo[i][Hy],HausInfo[i][Hz],10,0,1);
    continue;
    }
    if(HausInfo[i][Verkauft] == 1)
    {
    Hausp[i] = CreatePickup(1272,2,HausInfo[i][Hx],HausInfo[i][Hy],HausInfo[i][Hz]);
    Hausp[i] = CreatePickup(1318,2,HausInfo[i][Ix],HausInfo[i][Iy],HausInfo[i][Iz]);
    format(string, sizeof(string), "Besitzer: %s \nZimmer: %d \nMiete: %d$",HausInfo[i][Besitzer],HausInfo[i][Zimmer],HausInfo[i][Hmiete]);
    Hausa[i] = Create3DTextLabel(string,Orange,HausInfo[i][Hx],HausInfo[i][Hy],HausInfo[i][Hz],10,0,1);
    }
    }
    }
    return 1;
    }


    MfG Simon

  • Hi


    Ok, ja, Du kannst es auch als Ladecode fürn OnGameModeInit nehmen, dachte es sei dazu da, alle Häuser zu refreshen/aktualisieren. Wenn es jedoch für OnGameModeInti da ist, warum wird es bei CreateHaus nochmals benutzt ? Zu dem return, da muss ich dir glaub widersprechen. Überleg mal, was passiert, wenn das letzte erstellte Haus, welche die höchste Zahl hat im Datennamen hat, nicht verkauft ist ? Dann läuft der Code weiter bis zu MAX_Haus oä.


    Simon