Haus System frage

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
  • Was?
    Lass alles so wie es ist.


    Du willst doch nur abfragen, wer in das Haus darf. Das machst du genau gleich wie beim PayDay.


    Und abfragen ob der Spieler das Haus besitzt: Ebenso gleich wie beim PayDay, nur ohne die Mieter-Abfragen.

  • Ah, ich war verwirrt weil "CaZe" da noch was gepostet hat. Ich dachte das wärst du ^^


    Alles klar, ich versuch es mal.


    Das wäre dann beispielsweise so wenn ich jetzt das Dialog nur für Besitzer öffnen lassen will oder?
    if((!strcmp(SpielerName(playerid), hInfo[i][Besitzer]) && strlen(hInfo[i][Besitzer]))
    {
    //Dialog
    }


    Und im Dialog dann einfach mit der Schleife arbeiten und jenachdem die Werte in der DB ändern lassen?


    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Okey also ich bin doch etwas zu doof für ein Haus System :D
    Ich wollte jetzt ein Kündigen Befehl für Mieter machen^^
    Das mit der Miete einstellen hab ich gut hinbekommen, pass auf :D
    Zum Test hab ich mich in einem Haus das Niemand gehört als erster Mieter eingetragen, jedoch werde ich als Mieter2 festgelegt.
    Ich bekomme die Nachricht "Mieter2 bye" aber werde nicht von Mieter1 gelöscht :/


    Kündige Befehl
    ocmd:kuendigen(playerid, params[])
    {
    for(new i=0; i<MAX_HOUSE; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.0, hInfo[i][PosX],hInfo[i][PosY],hInfo[i][PosZ]))
    {
    if((!strcmp(SpielerName(playerid), hInfo[i][Mieter1]) && strlen(hInfo[i][Mieter1])) || (!strcmp(SpielerName(playerid), hInfo[i][Mieter2]) && strlen(hInfo[i][Mieter2])) || (!strcmp(SpielerName(playerid), hInfo[i][Mieter3]) && strlen(hInfo[i][Mieter3])))
    {
    if(!strlen(hInfo[i][Mieter1])) return format(hInfo[i][Mieter1], 24, ""), SendClientMessage(playerid, erfolg, "Mieter 1 bye"), SaveAllHouses();
    else if(!strlen(hInfo[i][Mieter2])) return format(hInfo[i][Mieter2], 24, ""), SendClientMessage(playerid, erfolg, "Mieter 2 bye"), SaveAllHouses();
    else if(!strlen(hInfo[i][Mieter3])) return format(hInfo[i][Mieter3], 24, ""), SendClientMessage(playerid, erfolg, "Mieter 3 bye"), SaveAllHouses();
    return 1;
    }
    }
    }
    return 1;
    }


    Jeffry:


    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • ocmd:kuendigen(playerid, params[])
    {
    for(new i=0; i<MAX_HOUSE; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.0, hInfo[i][PosX],hInfo[i][PosY],hInfo[i][PosZ]))
    {
    if(!strcmp(SpielerName(playerid), hInfo[i][Mieter1]) && strlen(hInfo[i][Mieter1])) return format(hInfo[i][Mieter1], 24, ""), SendClientMessage(playerid, erfolg, "Mieter 1 bye"), SaveAllHouses();
    if(!strcmp(SpielerName(playerid), hInfo[i][Mieter2]) && strlen(hInfo[i][Mieter2])) return format(hInfo[i][Mieter2], 24, ""), SendClientMessage(playerid, erfolg, "Mieter 2 bye"), SaveAllHouses();
    if(!strcmp(SpielerName(playerid), hInfo[i][Mieter3]) && strlen(hInfo[i][Mieter3])) return format(hInfo[i][Mieter3], 24, ""), SendClientMessage(playerid, erfolg, "Mieter 3 bye"), SaveAllHouses();
    return 1;
    }
    }
    return 1;
    }

  • Danke für die Hilfe Jeffry ^^


    Zu dem Betreten wenn das Haus abgeschlossen ist nur als Mieter oder Besitzer hab ich ein kleines Problem.
    Besitzer können immer rein egal ob verschlossen oder nicht, aber Mieter können nicht rein :D


    Spoiler anzeigen
    if(hInfo[house][Gekauft] == 1)
    {
    if(hInfo[house][Lock] != 0 && (strcmp(SpielerName(playerid), hInfo[house][Mieter1]) && strlen(hInfo[house][Mieter1])) || (strcmp(SpielerName(playerid), hInfo[house][Mieter2]) && strlen(hInfo[house][Mieter2])) || (strcmp(SpielerName(playerid), hInfo[house][Mieter3]) && strlen(hInfo[house][Mieter3])) || (strcmp(SpielerName(playerid), hInfo[house][Besitzer]) && strlen(hInfo[house][Besitzer])))
    {
    return SendClientMessage(playerid, error, "Dieses Haus ist verschlossen. Zutritt nur für Mieter/Bezitzer");
    }
    SetPlayerPos(playerid, hInfo[house][IntX],hInfo[house][IntY],hInfo[house][IntZ]);
    SetPlayerInterior(playerid, hInfo[house][IntID]);
    SetPlayerVirtualWorld(playerid, hInfo[house][VID]);
    return 1;
    }


    Irgendwie verstehe ich das mit dem strcmp und strlen nicht so ganz :wacko:



    Jeffry:


    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Ich rate dir es so zu machen, ist zwar nicht die schönste Variante, aber damit wirst du am ehesten klar kommen, da es genau gleich ist wie sonst auch:
    if(hInfo[house][Gekauft] == 1)
    {
    if(hInfo[house][Lock] != 0)
    {
    if((!strcmp(SpielerName(playerid), hInfo[house][Mieter1]) && strlen(hInfo[house][Mieter1])) || (!strcmp(SpielerName(playerid), hInfo[house][Mieter2]) && strlen(hInfo[house][Mieter2])) || (!strcmp(SpielerName(playerid), hInfo[house][Mieter3]) && strlen(hInfo[house][Mieter3])) || (!strcmp(SpielerName(playerid), hInfo[house][Besitzer]) && strlen(hInfo[house][Besitzer])))
    {
    //Nichts, da erlaubt.
    }
    else
    {
    return SendClientMessage(playerid, error, "Dieses Haus ist verschlossen. Zutritt nur für Mieter/Bezitzer");
    }
    }
    SetPlayerPos(playerid, hInfo[house][IntX],hInfo[house][IntY],hInfo[house][IntZ]);
    SetPlayerInterior(playerid, hInfo[house][IntID]);
    SetPlayerVirtualWorld(playerid, hInfo[house][VID]);
    return 1;
    }

  • Perfekt, funktioniert 1A!


    Ich muss mich bei dir bedanken, dass du immer Hilfst :)
    Alleine hätte ich das niemals geschafft.^^


    Hab noch ne klitze kleine Frage undzwar geht es beim Befehl auch noch anders, die Koordinaten für das Interior festzulegen?
    Weil erstens wird der Command dann bestimmt unübersichtlich und ewig und zweitens gibt es bestimmt mehrere Häuser mit der gleichen Interior ID :/


    Vielleicht das man auswählen kann /Createhouse [HausID](1 = Großes Haus) (2 = Mittleres Haus) (3 = Kleines Haus) [IntID].....


    Und dann in einem Enum die HausID, InteriorID, Koordinaten fürs Interior.


    Damit er dann eigenständig dort sucht und einträgt?


    Wäre nämlich besser ^^


    Falls das nicht geht oder man zuviel umschreiben müsste sag das einfach.


    Mit freundlichen Grüßen :)


    Jeffry:


    //Edit:
    Momentan mach ich es mit switch & case

    Spoiler anzeigen
    switch(Inte)
    {
    case 5:
    {
    hInfo[i][IntX] =1261.0065;
    hInfo[i][IntY] =-785.5643;
    hInfo[i][IntZ] =1091.9063;
    }



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    Einmal editiert, zuletzt von ENEF ()

  • Okay, also ich hab jetzt mal so gemacht


    Spoiler anzeigen
    enum hIntDaten
    {
    Art,
    Int,
    Float:IntX,
    Float:IntY,
    Float:IntZ,
    Text[34]
    }
    new Houses[MAX_HOUSE][hIntDaten] =
    {
    {1, 5 , 1261.0065,-785.5643,1091.9063, "17 Zimmer"}//Ist die Art(Groß/Mittel/Klein) Interior XYZ vom Interior
    };


    Wird es da jetzt komplikationen geben wegen meinem HausDaten enum?
    Und wie lass ich das jetzt per befehl durchsuchen? ^^


    und beim Speichern in die Daten bank dann einfach hInfo[i][IntX] = hIntDaten...?


    Ich checks grad wenig ^^


    Jeffry:



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Spoiler anzeigen
    ocmd:createhouse(playerid, params[])
    {
    new Art, Inte, V, hLv, hPreis,text [128];
    if(sscanf(params,"ddddd",Art,Inte, V, hLv, hPreis))return SendClientMessage(playerid,info,"/Createhouse [IntID] [Virtuelle Welt] [Level] [Preis]");
    if(SpielerInfo[playerid][pAdmin] < 5) return SendClientMessage(playerid, error, "Du bist kein Admin!");
    for(new i=0; i<MAX_HOUSE; i++)
    {
    if(strlen(hInfo[i][Besitzer])) continue; //Wenn das Haus existiert, gehe weiter.
    new Float:Pos[3];
    GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
    hInfo[i][PosX] = Pos[0];
    hInfo[i][PosY] = Pos[1];
    hInfo[i][PosZ] = Pos[2];
    hInfo[i][IntID] = Inte;
    hInfo[i][VID] = V;
    hInfo[i][Level] = hLv;
    hInfo[i][Kaufpreis] = hPreis;
    hInfo[i][Mietpreis] = 0;
    hInfo[i][Gekauft] = 0;
    hInfo[i][Lock] = 0;
    //Hier dann das mit dem Interior und die Postion^^
    format(hInfo[i][Besitzer], 34, "Niemand");
    format(hInfo[i][Mieter1], 34, "");
    format(hInfo[i][Mieter2], 34, "");
    format(hInfo[i][Mieter3], 34, "");
    new query[1024];
    format(query, sizeof(query), "INSERT INTO House (ID, Besitzer, Level, PosX, PosY, PosZ, IntX,IntY,IntZ, IntID, VID, `Locked`, Mietpreis, Kaufpreis, Gekauft, Mieter1, Mieter2, Mieter3) VALUES ('%d','%s', '%d', '%f', '%f', '%f', '%f', '%f', '%f', '%d', '%d', '%d', '%d', '%d', '%d', '%s', '%s', '%s')",
    i, hInfo[i][Besitzer], hInfo[i][Level], hInfo[i][PosX], hInfo[i][PosY], hInfo[i][PosZ], hInfo[i][IntX], hInfo[i][IntY], hInfo[i][IntZ], hInfo[i][IntID], hInfo[i][VID], hInfo[i][Lock], hInfo[i][Mietpreis], hInfo[i][Kaufpreis], hInfo[i][Gekauft], hInfo[i][Mieter1], hInfo[i][Mieter2], hInfo[i][Mieter3], i);
    mysql_tquery(handle, query);
    hInfo[i][Pick_ID] = CreatePickup(1273,1,Pos[0],Pos[1],Pos[2],0);
    format(text, sizeof(text), "Besitzer: Niemand\nPreis: %d$\nLevel: %d\n\nDrücke 'ENTER' um einzutreten",hInfo[i][Kaufpreis],hInfo[i][Level]);
    hInfo[i][Houselable] = Create3DTextLabel(text,0x0FFF00FF,Pos[0],Pos[1],Pos[2],20.0,0,1);
    SaveAllHouses();
    return SendClientMessage(playerid, 0x00FF00FF, "Haus wurde erfolgreich gespeichert.");
    }
    return SendClientMessage(playerid, error, "Es können keine weiteren Häuser erstellt werden.");
    }


    So, jetzt hab ich da ja Art(Großes Haus/Mittel/Kleines
    Und dann Interior, also wenn ich bsp Createhouse 1(großes haus) 5 mache soll er dann bsp die Mad Dogg villa nehmen also als Koordinate.


    Mit dem Splitten weiß ich nicht genau was du meinst, sorry^^


    Jeffry:



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • //Hier dann das mit dem Interior und die Postion^^
    zu:
    for(new j=0; j<sizeof(Houses_Data); j++)
    {
    if(Houses_Data[j][eArt] == Art && Houses_Data[j][eInt] == Inte)
    {
    hInfo[i][PosX] = Houses_Data[j][eIntX];
    //usw...für alle Daten die du übernehmen willst.
    break;
    }
    }



    Und das enum muss so aussehen:
    enum hdIntDaten
    {
    eArt,
    eInt,
    Float:eIntX,
    Float:eIntY,
    Float:eIntZ,
    eText[34]
    }
    new Houses_Data[MAX_HOUSE][hdIntDaten] =
    {
    {1, 5 , 1261.0065,-785.5643,1091.9063, "17 Zimmer"}//Ist die Art(Groß/Mittel/Klein) Interior XYZ vom Interior
    };




    EDIT:
    @_iPit_: Da dein Problem behoben ist, wäre es super, wenn du den Thread als erledigt markierst. Danke! :)

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()