Haussystem (von TutNichts)

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
  • Haussystem
    von Vincent Petritz


    Sehr geehrter Leser,
    hiermit möchte ich euch mein für die Community entworfenes Haussystem vorstellen was ich heute Nacht begann und schließlich eben vollendete & den Code zur Verfügung stellen. Es entstand aus diesem Grund. Ich kenne es noch selbst, ein kleiner "Scripternoob", der zwar keine Ahnung hatte, aber es unbedingt lernen bzw. können wollte. Doch keiner nimmt ein dann für voll & keiner setzt sich ran und macht was, so war es zumindest bei mir - ich möchte euch nun, das warscheinlich 1000. Haussystem in diesem Forum, vorstellen.


    Es ist relativ simpel aufgebaut und hat auch keine großen Features, wozu auch, die Grundlage ist gegeben, ich habe alles beschriftet um es so einfach wie möglich zu machen, jetzt kriegt man den Rest auch noch hin. Es ist möglich im Spiel Häuser zu erstellen, so wie es sich viele wünschten, Häuser zu editieren und Häuser letztendlich auch zu löschen. Häuser kann man natürlich auch kaufen & verkaufen. Ein Miet- und "Un"-Miet Befehl habe ich ebenfalls ausgeklammert eingebaut, da ihr das natürlich anpassen müsstet an die Spielerdatenbank. Im übrigen basiert das ganze auf MySQL - aus dem einfachen Grunde, es ist einfacher und ich hoffe eines Tages ist es soweit, das keiner mehr mit Filesystemen hantiert - was natürlich nur ein Traum ist. Im Anhang findet ihr die .sql-Datei & die .pwn-Datei in einer .zip-Datei.


    Außerdem habe ich das ganze, wie gesagt, überall beschriftet, um es Einsteigern so einfach wie möglich zu machen und den auch das ganze zu verstehen zu geben. Ebenso kann man das System kinderleicht konfigurieren:
    #define MinHausPreis 1 // Minimaler Hauspreis den ein Haus haben kann
    #define MaxHausPreis 99999 // Maximaler Hauspreis den ein Haus haben kann
    #define MinHausZimmer 1 // Minimale Zimmer pro Haus
    #define MaxHausZimmer 50 // Maximale Zimmer pro Haus
    #define MinHausBeschreibung 5 // Mindestlaenge der Hausbeschreibung
    #define MaxHausBeschreibung 50 // Maximallaenge der Hausbeschreibung
    #define MinHausLevel 7 // Mindestlevel für jenes Haus
    #define MaxHausLevel 99 // Maximallevel für jenes Haus
    #define MaxHaus 2 // Maximale Häuser, man sollte hier nicht übertreiben!
    #define MaxHausTextSehbar 50 // Haus-3DText-Sichtweite
    #define HausPickupModel 1272 // PickupModel (siehe: http://weedarr.wikidot.com/pickups)


    Das findet ihr direkt im oberen Bereich des Filterscript's.


    Die Befehle lauten wie folgt:

    • /hcreate [Preis] [Level] [Zimmeranzahl] [Beschreibung (max. 50 Zeichen)]

    • /hedit [Preis/Zimmerzahl/Level] [Neu]

    • /hbuy

    • /hsell

    • /hdelete


    Links:

    Ich wünsche euch recht viel Spaß, erwarte dennoch ein "Danke" sofern es euch gefällt & ihr es nutzt, das ist denke ich angebracht. :)


    - Vincent Petritz.
    #EDIT: Danke an BlackAce für dne neuen GetNearHausID-Code. ;)
    #EDIT: Danke Fl4sh für die Korrektur. ^^

  • Hammer 10/10 :thumbup:
    jetzt noch ein biz system was auch so geht dan ist es der hammer :thumbup:

  • Erklär mir mal warum die speicherst das es Zimmer gibt, wenn man sie nicht mal betreten oder ansehen kann.
    Vollkommen nutzlos das teil

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • @BlackAce
    Mann sollte nicht rummotzen...


    Er hat´s released und somit vielen Leuten zeit erspart..
    Und wahrscheinlich haben viele eins mit MySql gesucht...


    Wenn man was released, sollte man erwarten das es geht, deshalb versteh ich die Kritik von BlackAce nur ... es geht auch soweit, nur hat BlackAce denke ich was verwechselt. ;)

  • Sobald man ein Haus löscht hat die Tabelle an der ID aber eine Lücke. Mit der Zeit würde das die Schleifen unnötig groß machen.
    Ich empfehle nach dem löschen eine neusortierung der IDs, weshalb ich ID auch nicht als Primärschlüssel und nicht mit AUTO_INCREMENT nutzen würde.
    Dadurch entfällt auch MaxHaus da man das dann Variabel hoch/runtersetzen kann jenachdem ob ein neues Haus dazukommt oder ein altes gelöscht wird.


    Ansonsten schon ganz nett gemacht, kann man viel mit Anfangen :)

  • Sobald man ein Haus löscht hat die Tabelle an der ID aber eine Lücke. Mit der Zeit würde das die Schleifen unnötig groß machen.
    Ich empfehle nach dem löschen eine neusortierung der IDs, weshalb ich ID auch nicht als Primärschlüssel und nicht mit AUTO_INCREMENT nutzen würde.
    Dadurch entfällt auch MaxHaus da man das dann Variabel hoch/runtersetzen kann jenachdem ob ein neues Haus dazukommt oder ein altes gelöscht wird.


    Ansonsten schon ganz nett gemacht, kann man viel mit Anfangen :)


    Das ist vollkommen richtig, habe ich auch dran gedacht "Scheiße Petritz, wie machst du das jetzt?" - fand aber keine gute Lösung. :D
    Ja gut, muss man sehen wie man das löst.

  • Falls interesse besteht:

    Spoiler anzeigen

    //Neusortierung:
    forward UpdateTableID();
    public UpdateTableID()
    {
    new data[256],aquery[256];
    mysql_query("SELECT `ID` FROM `tabelle` ORDER BY `ID` ASC");
    mysql_store_result();
    new rows = mysql_num_rows();
    for(new row = 1; row != (rows+1); row++)
    {
    mysql_fetch_row(data);
    if(strval(data) != row)
    {
    format(aquery,sizeof(aquery),"UPDATE `table` SET `ID` = '%d' WHERE `ID` = '%d'",row,strval(data));
    mysql_query(aquery);
    mysql_free_result();
    return UpdateTableID();
    }
    }
    mysql_free_result();
    return 1;
    }
    //Momentane Anzahl auslesen
    mysql_query("SELECT * FROM `table`");
    mysql_store_result();
    new rows = mysql_num_rows();
    //Statt rows halt eine Globale Variable für die Schleifen o.ä.

  • Gut ich habe es verwechselt, ändert trotzdem nichts daran das ich es für schlecht halte.


    z.B. den GetHausID returnt immer 0 wenn man sich nicht in der Nähe eines Hauses befindet.


    Das ist recht sinnlos :D
    Grandioser Weise läuft deine Schleife auch weiter wenn detectet wurde das sich der Spieler in der Nähe eines Hauses befindet.
    Das sollte besser nicht so sein.


    Ich könnte mich ja nochmal melden, wenn mir mehr auffällt.
    Da ist bestimmt noch was drin...


    @.: xGreekz7x :.
    Jaja er Grafiken von jemanden klauen (nicht von mir) und mir dann so kommen.
    Das hab ich gerne, besonders weil du ja mehr Ahnung vom scripten hast, als ich je haben werde.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski


  • Man könnte das ganze umbauen, mach ich mal eben, danke für den Tipp! ;)
    Dürfte so gelöst sein, wenn ich dich richtig verstehe, oder?:
    stock GetNearHausID(playerid)
    {
    new Float:x,
    Float:y,
    Float:z,
    WhichID;
    GetPlayerPos(playerid, x, y, z); // "gette" x, y, z - Koordinate an denen der Spieler sich befindet
    for(new hWhich; hWhich < MaxHaus; hWhich++) //Durchlaufe alle Häuser
    if(IsPlayerInRangeOfPoint(playerid, 3.0, Haus[hWhich][hX], Haus[hWhich][hY], Haus[hWhich][hZ])) { //bis du ein Haus findest was im Radius von 3.0 steht
    WhichID = hWhich;
    break;
    }
    if(WhichID > 0) {
    return WhichID; //und returne dann das gefundene Haus
    }
    else {
    return 0;
    }
    }
    Und dementsprechend noch 'ne Abfrage nach GetNearHausID(playerid); ob das was rausgekommen ist > 0 ist, right?


    Hoffe ich versteh dich richtig. :D




    @Ink: danke! ;)

  • Dann hast du den gleichen mist wievorher nur komplizierter...


    Ich bin zwar nicht fürs vorkauen zuständig, aber so wies aussieht wird das wohl nichts...
    stock GetNearHausID(playerid)
    {
    new Float:x,
    Float:y,
    Float:z;
    GetPlayerPos(playerid, x, y, z); // "gette" x, y, z - Koordinate an denen der Spieler sich befindet
    for(new hWhich; hWhich != MaxHaus; hWhich++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.0, Haus[hWhich][hX], Haus[hWhich][hY], Haus[hWhich][hZ])) return hWhich;
    }
    return -1;
    }

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski


  • Gut ok, dazugelernt, von return -1; hab ich noch nie so richtig was gehört. :D
    Danke dir! ;)


    #EDIT: @B l a c k D r a g o n: Wo gibt's was auszusetzen?

  • ne kleine frage könntest du es eventl in dini umscripten :D?^^
    aber sonst sieht es nice aus 9/10 interior setzen wäre noch schön

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen