Dyn. Haussystem funktioniert nicht?

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
    Ich habe das problem, dass mein Dynamisches Hausystem nicht funktioniert.
    Ich habe es nach diesem Tutorial gescripted: Klick Mich


    Ich habe im Script keine Errors aber man kann kein haus an einen anderen Spieler verkaufen man bekommt zwar Geld und dem anderen wird es abgezogen aber das Haus bleibt beim eigentlich Besitzer. Noch dazu bekommst man nicht soviel wie man angegeben hat sondern zum Teil unterschiedliche Summen
    und als letztes Problem dazu wenn sich ein haus "updated" z.B durch Hauskaufen wird ab und zu kein textlabel oder Pickup geladen(Immer beim Befehl /haussell?!?)


    enum Hausinfo
    {
    Besitzer[128],
    HausNR,
    Kaufpreis,
    Float:hx,
    Float:hy,
    Float:hz,
    Eisenlager,
    Holzlager,
    Schwarzpulver,
    Drogenlager,
    haus_innenraum,
    Abgeschlossen,
    hpickup,
    Text3D:hlabel
    };
    new hInfo[MAX_Haus][Hausinfo];


    OnGameModeInit()
    CreatePickup(1273,23,0,0,1000,99); // damit es keine ID verschiebung gibt
    for(new haus=1;haus<MAX_Haus;haus++)
    {
    LoadHaus(haus);
    }
    ocmd:hauskaufen(playerid,params[])
    {
    for(new haus=1;haus<MAX_Haus;haus++)
    {
    if(IsPlayerInRangeOfPoint(playerid,10,hInfo[haus][hx],hInfo[haus][hy],hInfo[haus][hz]))
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof name);
    if(strcmp(hInfo[haus][Besitzer],name,false) == 0)return SendClientMessage(playerid,hellrot,"Dieses Haus gehört dir bereits!");
    if(strcmp(hInfo[haus][Besitzer],"Staat",false))return SendClientMessage(playerid,hellrot,"Dieses Haus steht nicht zum Verkauf!");
    if(GetPlayerMoney(playerid) < hInfo[haus][Kaufpreis])return SendClientMessage(playerid,hellrot,"Du hast nicht genug Geld!");
    GivePlayerMoney(playerid,-hInfo[haus][Kaufpreis]);
    new pfad[100];
    format(pfad,100,"/Häuser/%d.txt",haus);
    dini_Set(pfad,"Besitzer",name);
    KillHaus(haus);
    LoadHaus(haus);
    }
    }
    return 1;
    }


    ocmd:haussell(playerid,params[])
    {
    for(new haus=1;haus<MAX_Haus;haus++)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof name);
    if(strcmp(hInfo[haus][Besitzer],name,false) == 0)
    {
    GivePlayerMoney(playerid,hInfo[haus][Kaufpreis]/2);
    new pfad[100];
    format(pfad,100,"/Häuser/%d.txt",haus);
    dini_Set(pfad,"Besitzer","Staat");
    KillHaus(haus);
    LoadHaus(haus);
    }
    }
    return 1;
    }


    ocmd:sellhaus(playerid,params[])
    {
    new pID,preis,string1[128],string2[128],string3[128],Float:x,Float:y,Float:z;
    for(new haus=1;haus<MAX_Haus;haus++)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof name);
    if(strcmp(hInfo[haus][Besitzer],name,false) == 0)
    {
    if(sscanf(params,"ui",pID,preis))return SendClientMessage(playerid,rot,"Benutze /sellhaus [ID] [Preis]");
    if(pID == playerid)return SCM(playerid,rot,"Du kannst dir selbst kein Haus verkaufen");
    GetPlayerPos(playerid,x,y,z);
    if(!IsPlayerInRangeOfPoint(pID,20,x,y,z))return SCM(playerid,hellrot,"Der Spieler ist nicht in deiner Nähe");
    format(string1,sizeof(string1),"%s bietet dir sein Haus %i für %i€ an.",Spielername(playerid),hInfo[haus][HausNR],preis);
    format(string2,sizeof(string2),"Benutze /accepthaus um das Angebot anzunehmen oder /cancel um es abzulehnen");
    format(string3,sizeof(string3),"Du hast %s dein Haus für %i€ angeboten",Spielername(pID),preis);
    Anfrage[pID] = 3;
    AnfrageID[pID] = playerid;
    Ueberweiser[pID] = preis;
    }
    }
    SCM(pID,orange2,string1);
    SCM(pID,orange2,string2);
    SCM(playerid,orange2,string3);
    return 1;
    }


    ocmd:accepthaus(playerid,params[])
    {
    if(Anfrage[playerid] == 3)
    {
    new string1[128],string2[128];
    for(new haus=1;haus<MAX_Haus;haus++)
    {
    if(strcmp(hInfo[haus][Besitzer],Spielername(AnfrageID[playerid]),false) == 0)
    {
    if(GetPlayerMoney(playerid) >= Ueberweiser[playerid])
    {
    Anfrage[playerid] = 0;
    format(string1,sizeof(string1),"Du hast das Angebot von %s angenommen und sein Haus für %i€ gekauft",Spielername(AnfrageID[playerid]),Ueberweiser[playerid]);
    format(string2,sizeof(string2),"%s hat dein Angebot angenommen und dein Haus für %i€ gekauft",Spielername(playerid),Ueberweiser[playerid]);
    GivePlayerMoney(AnfrageID[playerid],Ueberweiser[playerid]);
    GivePlayerMoney(playerid,-Ueberweiser[playerid]);
    new pfad[100];
    format(pfad,100,"/Häuser/%d.txt",haus);
    dini_Set(pfad,"Besitzer",Spielername(AnfrageID[playerid]));
    KillHaus(haus);
    LoadHaus(haus);
    }
    }
    }
    SCM(playerid,orange2,string1);
    SCM(AnfrageID[playerid],orange2,string2);
    Ueberweiser[playerid] = 0;
    AnfrageID[playerid] = 0;
    Anfrage[playerid] = 0;
    }
    else
    {
    SCM(playerid,hellrot,"Du hast kein Angebot erhalten");
    }
    return 1;
    }


    ocmd:enter(playerid,params[])
    {
    for(new haus=1;haus<MAX_Haus;haus++)
    {
    if(IsPlayerInRangeOfPoint(playerid,15,hInfo[haus][hx],hInfo[haus][hy],hInfo[haus][hz]))
    {
    if(hInfo[haus][Abgeschlossen] == 0)
    {
    GetPlayerPos(playerid,xx,yy,zz);
    switch(hInfo[haus][haus_innenraum])
    {
    case 1:{SetPlayerInterior(playerid,1);SetPlayerPos(playerid,223.043991, 1289.259888, 1082.199951);SetPlayerVirtualWorld(playerid,1+playerid);}
    case 3:{SetPlayerInterior(playerid,3);SetPlayerPos(playerid,235.508994, 1189.169897, 1080.339966);SetPlayerVirtualWorld(playerid,1+playerid);}
    case 7:{SetPlayerInterior(playerid,7);SetPlayerPos(playerid,225.630997, 1022.479980, 1084.069946);SetPlayerVirtualWorld(playerid,1+playerid);}
    case 12:{SetPlayerInterior(playerid,12);SetPlayerPos(playerid,2324.33, -1144.79, 1050.71);SetPlayerVirtualWorld(playerid,1+playerid);}
    case 15:{SetPlayerInterior(playerid,15);SetPlayerPos(playerid,295.138977, 1474.469971, 1080.519897 );SetPlayerVirtualWorld(playerid,1+playerid);}
    }
    }
    else
    {
    SCM(playerid,rot,"Das Haus ist abgeschlossen");
    }
    }
    }
    return 1;
    }


    ocmd:exit(playerid,params[])
    {
    if(GetPlayerInterior(playerid) == 3 || 1 || 7
    || 15 || 12)
    {
    SetPlayerInterior(playerid,0);
    SetPlayerPos(playerid,xx,yy,zz);
    SetPlayerVirtualWorld(playerid,0);
    }
    return 1;
    }



    ocmd:hlock(playerid,params[])
    {
    for(new haus=1;haus<MAX_Haus;haus++)
    {
    if(IsPlayerInRangeOfPoint(playerid,35,hInfo[haus][hx],hInfo[haus][hy],hInfo[haus][hz]))
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof name);
    if(strcmp(hInfo[haus][Besitzer],name,false) == 0)
    {
    if(hInfo[haus][Abgeschlossen] == 0)
    {
    hInfo[haus][Abgeschlossen] = 1;
    SCM(playerid,gelb,"Du hast dein Haus abgeschlossen");
    }
    else if(hInfo[haus][Abgeschlossen] == 1)
    {
    hInfo[haus][Abgeschlossen] = 0;
    SCM(playerid,gelb,"Du hast dein Haus aufgeschlossen");
    }
    }
    }
    }
    return 1;
    }
    stock CreateHaus(Float:x,Float:y,Float:z,besitzer[64],nummer,preis)
    {
    new pfad[100];
    for(new haus=1;haus<MAX_Haus;haus++)
    {
    format(pfad,100,"/Häuser/%d.txt",haus);
    if(!fexist(pfad))
    {
    dini_Create(pfad);
    dini_FloatSet(pfad,"Pos X",x);
    dini_FloatSet(pfad,"Pos Y",y);
    dini_FloatSet(pfad,"Pos Z",z);
    dini_IntSet(pfad,"Kaufpreis",preis);
    dini_Set(pfad,"Besitzer",besitzer);
    dini_IntSet(pfad,"Innenraum",1);
    dini_IntSet(pfad,"Hausnummer",nummer);
    dini_IntSet(pfad,"Eisenlager",0);
    dini_IntSet(pfad,"Holzlager",0);
    dini_IntSet(pfad,"Schwarzpulver",0);
    dini_IntSet(pfad,"Drogenlager",0);
    dini_IntSet(pfad,"Abgeschlossen",0);
    return LoadHaus(haus);
    }
    }
    return 0;
    }


    stock LoadHaus(hausid)
    {
    new pfad[100],string1[128];
    format(pfad,100,"/Häuser/%d.txt",hausid);
    if(!fexist(pfad))return 0; //überprüft ob die Datei existiert, wenn nicht wird 0 zurückgegeben


    hInfo[hausid][hx] = dini_Float(pfad,"Pos X"); // hier laden wir die Werte
    hInfo[hausid][hy] = dini_Float(pfad,"Pos Y");
    hInfo[hausid][hz] = dini_Float(pfad,"Pos Z");
    hInfo[hausid][Kaufpreis] = dini_Int(pfad,"Kaufpreis");
    format(hInfo[hausid][Besitzer],64,"%s",dini_Get(pfad,"Besitzer"));
    hInfo[hausid][HausNR] = dini_Int(pfad,"Hausnummer");
    hInfo[hausid][Eisenlager] = dini_Int(pfad,"Eisenlager");
    hInfo[hausid][Holzlager] = dini_Int(pfad,"Holzlager");
    hInfo[hausid][Schwarzpulver] = dini_Int(pfad,"Schwarzpulver");
    hInfo[hausid][Drogenlager] = dini_Int(pfad,"Drogenlager");
    hInfo[hausid][haus_innenraum] = dini_Int(pfad,"Innenraum");
    hInfo[hausid][Abgeschlossen] = dini_Int(pfad,"Abgeschlossen");
    hInfo[hausid][hpickup] = CreatePickup(1273 ,1,hInfo[hausid][hx],hInfo[hausid][hy],hInfo[hausid][hz],0);
    format(string1,sizeof(string1),"Hausnummer: %i\nBesitzer: %s\nKaufpreis: %i€",hInfo[hausid][HausNR],hInfo[hausid][Besitzer],hInfo[hausid][Kaufpreis]);
    hInfo[hausid][hlabel] = Create3DTextLabel(string1,weiß,hInfo[hausid][hx],hInfo[hausid][hy],hInfo[hausid][hz],15,0,0);
    return print("Das Haus wurde erfolgreich geladen");
    }


    stock KillHaus(hausid)
    {
    DestroyPickup(hInfo[hausid][hpickup]);
    Delete3DTextLabel(hInfo[hausid][hlabel]);
    }


    So das war eigentlich der ganze Code
    nochmal die probleme^^
    -->Beim verkaufen des hauses an andere Spieler behält man das Haus
    -->Man bekommt unterschiedliche Geldsummen
    -->TextLabels und Pickups updaten sich nicht immer /edit: Also es ändert sich nur beim Befehl haussell nicht bzw es wird nicht mehr geladen
    -->und beim Haus verkaufen an andere Spieler wird immer angezeigt "Spieler xyz" möchte dir sein haus 999 verkaufen
    Ich weiß das ist wegen Max_haus aber wie kann ich das umgehen?


    Ich hoffe ihr könnt mir helfen

    Einmal editiert, zuletzt von MrMonkey ()