Kleines Variablen-Problem

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
  • Also ich hab da ein kleines Problem mit den Variablen bei dem Versuch mir ein Haussystem zu erstellen:


    Erstmal der Code:


    ENUM:
    enum houseinfos
    {
    owner,
    price,
    Float:x,
    Float:y,
    Float:z,
    Text3D:info,
    pickup
    }


    Funktion:
    stock LoadHouses()
    {
    for(new i = 0; i< MAX_HOUSES;i++)
    {
    new formatLD[256];
    format(formatLD,256,"Houses/house_%d.ini",i);
    if(dini_Exists(formatLD))
    {
    HouseInfo[i][owner] = dini_Get(formatLD, "owner"); // Das hier ist Zeile 40 -> Hier gehts mit den Erros los
    HouseInfo[i][price] = dini_Get(formatLD, "price");
    HouseInfo[i][x] = dini_Get(formatLD, "x");
    HouseInfo[i][y] = dini_Get(formatLD, "y");
    HouseInfo[i][z] = dini_Get(formatLD, "z");
    HouseInfo[i][pickup] = CreatePickup(1273, 1, HouseInfo[i][x], HouseInfo[i][y], HouseInfo[i][z], -1);
    IsHousePickup[i] = 1;
    if(strmatch(HouseInfo[i][owner],"Niemand"))
    {
    new string[256];
    format(string,256,"Dieses Haus steht zum Verkauf\nPreis:%d$",HouseInfo[i][price]);
    HouseInfo[i][info]=Create3DTextLabel(string,0x0000FFFF,HouseInfo[i][x],HouseInfo[i][y],HouseInfo[i][z],40.0,1);
    } else {
    new string[256];
    format(string,256,"Dieses Haus gehört:\n%s",HouseInfo[i][owner]);
    HouseInfo[i][info]=Create3DTextLabel(string,0x0000FFFF,HouseInfo[i][x],HouseInfo[i][y],HouseInfo[i][z],40.0,1);
    }
    }
    }
    return 1;
    }


    Ja und da habe ich halt immer den selben Error, mit verschiedenen Zeilen, alle wo irgendwas mit den Variablen vorkommt:

  • enum houseinfos
    {
    owner[10],
    price,
    Float:x,
    Float:y,
    Float:z,
    Text3D:info,
    pickup
    }


    so vllt ?

  • hab ma 10, 30 und maxplayername versucht:


    Der letzte stammt übrigens aus einem anderen Scriptteil den ich eben erst hinzugefügt hab.
    ist mit der ersten errorzeile gleich

  • Das Problem ist,dass owner ein Array der Größe 10 ist, DINI_Get aber in der Regel ein Array der Größe 256 returnt.
    Daher auch:

    Zitat

    array sizes do not match, or destination array is too small


    Das könntest du aber mit format lösen.
    format( HouseInfo[i][owner], 10 , dini_Get(formatLD, "owner") );

  • Dann streng dich mal ein bischen an und lern dir selbst zu helfen.
    Es gibt hier einige Tutorials zur Nutzung von Dini...
    dini_Int(filename[],key[])
    dini_Float(filename[],key[])
    dini_Bool(filename[],key[])


    Beispiel:
    HouseInfo[i][x] = dini_Get(formatLD, "x");
    ersetzen durch
    HouseInfo[i][x] = dini_Float(formatLD, "x");

  • ohhh mist. hab im samp wiki geguckt und da stand nur fürs spreichern extra commands :D


    edit: ok hab das jetzt gemacht, klappt auch soweit, bloß wird in der dini owner voll falsch gespeichert
    sollte ja Niemand sein, aber in der dini steht:
    N22
    NKY
    NÈî


    also immer was anderes

    Einmal editiert, zuletzt von Ternary ()

  • achso ja stimmt:
    stock CreateHouse(cprice, Float:cx, Float:cy, Float:cz)
    {
    new formatLD[256];
    format(formatLD,256,"Houses/house_%d.ini",currentid);
    if(dini_Exists(formatLD))
    {
    currentid++;
    return CreateHouse(cprice, cx, cy, cz);
    } else {
    dini_Create(formatLD);
    format(HouseInfo[currentid][owner], MAX_PLAYER_NAME, "Niemand");
    HouseInfo[currentid][price] = cprice;
    HouseInfo[currentid][x] = cx;
    HouseInfo[currentid][y] = cy;
    HouseInfo[currentid][z] = cz;
    HouseInfo[currentid][pickup] = CreatePickup(1273, 1, HouseInfo[currentid][x], HouseInfo[currentid][y], HouseInfo[currentid][z], -1);
    IsHousePickup[currentid] = 1;
    new string[256];
    format(string,256,"Dieses Haus steht zum Verkauf\nPreis:%d$",HouseInfo[currentid][price]);
    HouseInfo[currentid][info]=Create3DTextLabel(string,0x0000FFFF,HouseInfo[currentid][x],HouseInfo[currentid][y],HouseInfo[currentid][z],40.0,1);
    dini_Set(formatLD, "owner", HouseInfo[currentid][owner]);
    dini_IntSet(formatLD, "price", HouseInfo[currentid][price]);
    dini_FloatSet(formatLD, "x", HouseInfo[currentid][x]);
    dini_FloatSet(formatLD, "y", HouseInfo[currentid][y]);
    dini_FloatSet(formatLD, "z", HouseInfo[currentid][z]);
    }
    return currentid;
    }