Haus System by Black Game [v.1.0 Beta]

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
  • Hey Leute,
    wie die Überschrift schon sagt, habe ich ein Haus-System geschrieben welches ich hier gerne veröffentlichen würde.


    ************************ Infos: *************************
    Version: 1.0 Beta
    Scripter: Black_Game (auch als Sascha_Loisi bekannt)
    Pastebin: klick hier
    Download: klick hier
    *********************************************************


    Besonderheiten:
    Bei diesem Haus System muss man keine einzige Datei (bis auf den Ordner: "Houses") im scriptfiles Ordner erstellen. Dann können alle Häuser ingame erstellt werden. Für jedes Haus wird eine eigene Datei angelegt, ist vielleicht nicht so Speicher sparend, aber meiner meinung nach übersichtlicher wenn man einzelle Häuser entfernen/bearbeiten möchte.

    Befehle:

    /createhouse [Preis] --> Ingame ein Haus erstellen
    /besichtigen --> Ein noch zu verkaufendes Haus besichtigen
    /enter --> Ein Haus betreten (falls es aufgeschlossen ist, oder man der besitzer ist)
    /exit --> Ein Haus verlassen
    /buyhouse --> Ein Haus kaufen (wenn es zum Verkauf freisteht, und man genug Geld besitzt)

    Installation:

    Bevor ihr das Haus-System einwandfrei verwenden könnt, müsst ihr natürlich auch eine kleine Installation durchgehen, da ich das System nicht an das Account- und Adminsystem jedes Servers anpassen kann. Dazu müsst ihr erst alle includes auch in eurem Gamemode einfügen, und dann natürlich alles was im Haus-System vorhanden ist dort rüber kopieren. Wenn ihr das geschafft habt, müsst ihr natürlich noch alles anpassen, ihr sucht dafür nach: "dcmd_createhouse" und dort solltet ihr dann folgende Zeilen sehen:

    /*if(!IsPlayerAdmin(playerid)) //Deine Admin definition
    { return SendClientMessage(playerid,COLOR_RED,"Dein Admin Level reicht nicht aus."); }*/

    dies ersetzt ihr durch euer Admin System
    Beispiel:

    if(PlayerInfo[playerid][pAdmin] < 1000)
    { return SendClientMessage(playerid, COLOR_RED,"Du benötigst mindestens Admin Level 1.000."); }

    Wenn ihr das geschafft habt, müsst ihr natürlich noch einige kleine dinge machen, wenn man auch im Haus Spawnen soll, und wenn man nur ein Haus besitzen soll.
    Man darf nur ein Haus besitzen?? Dann macht folgendes:
    Ihr sucht nach der zeile in der steht: "dcmd_buyhouse". Dort sucht ihr dann diesen Teil:

    if(GetPlayerMoney(playerid) >= preis)
    {
    GivePlayerMoney(playerid, GetPlayerMoney(playerid) - preis);
    dini_IntSet(hName, "InBesitz", 2);
    dini_IntSet(hName, "Preis", 0);
    dini_Set(hName, "Besitzer", pName);
    //Dem Spieler wird das Haus zugeteilt usw..
    UpdateHouse(h);
    SendClientMessage(playerid, COLOR_RED, "Du hast dieses Haus nun erfolgreich gekauft.");
    }

    und ändert diesen Teil je nach euren Account System, dass es dann ca so aussieht:

    if(GetPlayerMoney(playerid) >= preis)
    {
    if(PlayerInfo[playerid][pHouse] != 25555) //25555 ist jetzt die Zahl die im Acc Data steht wenn er kein Haus besitzt.
    { return SendClientMessage(playerid,COLOR_RED,"Du besitzt bereits ein Haus."); }
    PlayerInfo[playerid][pHouse] = h;
    GivePlayerMoney(playerid, GetPlayerMoney(playerid) - preis);
    dini_IntSet(hName, "InBesitz", 2);
    dini_IntSet(hName, "Preis", 0);
    dini_Set(hName, "Besitzer", pName);
    UpdateHouse(h);
    SendClientMessage(playerid, COLOR_RED, "Du hast dieses Haus nun erfolgreich gekauft.");
    }

    Man soll im Haus spawnen?? Dann macht folgendes:
    Ihr navigiert zu "OnPlayerSpawn" und fügt dort folgendes hinzu:

    public OnPlayerSpawn(playerid)
    {
    if(PlayerInfo[playerid][pHouse] != 25555) //je nach eurem Acc System
    {
    new h = PlayerInfo[playerid][pHouse];
    new hName[100];
    format(hName, sizeof(hName), "House/Haus%d.ini", h);
    if(fexist(hName))
    {
    new Float: hix, Float: hiy, Float: hiz;
    new in, vw;
    hix = dini_Float(hName, "hix");
    hiy = dini_Float(hName, "hiy");
    hiz = dini_Float(hName, "hiz");
    in = dini_Int(hName, "Interior");
    vw = dini_Int(hName, "VirtualWorld");
    SetPlayerVirtualWorld(playerid, vw);
    SetPlayerInterior(playerid, in);
    SetPlayerPos(playerid, hix, hiy, hiz);
    }
    }
    return 1;
    }


    Geplant für die nächste Version:
    In der nächsten Version soll es dann folgendes zusätzlich geben:
    /edit --> Das Haus (als Administrator) bearbeiten (Preis, Interior, ... )
    /leavehouse --> Das Haus "verlassen" (es steht wieder zum verkauf bereit)
    /sellhouse [playerid] [preis] --> Einen anderen Spieler das Haus verkaufen

    Schlusswort:

    Leute, bitte vergesst nicht, dies ist nur die Version 1.0 BETA. Ich möchte mit dieser Veröffentlichung eigentlich nurmal sehen was ihr von meiner Idee des Haus systems so haltet.
    Also spart euch bitte solche Kommentare wie: "Das kann man ja ingame gar nicht bearbeiten??", und so Kommentare wie dieses eben, das wird natürlich alles noch kommen.

  • ja, wie bereits oben erklärt, es fehlen leider noch viele dinge, da es noch die Beta version ist, man kann das Haus z.b. ingame noch nicht bearbeiten (Interior ändern), und man kann es auch noch nicht verkaufen.


    edit://Testserver hab ich leider keinen, wenn du es Testen möchtest, melde dich bei mir in skype (sascha_loisi)

  • Sehr schön.
    Aber ich frage mich warum du das allen so zur Verfügung stellst ?
    Das System ist Dynamisch (indem du Häuser erstellst) und du könntest es selber nutzen :o.
    Naja trotzdem ist es gut n1.

  • ja, ich werd es auch selber nutzen, aber ich hab mir gedacht, ich hab ja eh noch nie eins meiner systeme hier veröffentlicht, und da ich da gerade dran gearbeitet habe, dachte ich mir ich veröffentliche das mal, und schau was die Leute so dazu sagen, wenns fertig ist, kommt natürlich die Vollversion veröffentlicht :D mit allen Features dann ^^

  • Gut zu hören das es so vielen Gefällt,
    werde nach diesem System auch noch ein Biz system erstellen.
    Wo die Admins dann ingame bizes erstellen können, interiors ändern können, und einstellen können obs essenbiz, auto biz, oder was auch immer sein soll,
    wird dann auch von mir veröffentlicht.
    Falls es weitere Ideen zur verbesserung dieses Systems gibt, bitte einfach melde, ich freu mich über alles ;D

  • bräuchte hilfe ich bekomme immer diese errors



    C:\Users\Erik\Desktop\server\filterscripts\House.pwn(89) : error 021: symbol already defined: "OnPlayerSpawn"
    C:\Users\Erik\Desktop\server\filterscripts\House.pwn(90) : error 017: undefined symbol "PlayerInfo"
    C:\Users\Erik\Desktop\server\filterscripts\House.pwn(90) : warning 215: expression has no effect
    C:\Users\Erik\Desktop\server\filterscripts\House.pwn(90) : error 001: expected token: ";", but found "]"
    C:\Users\Erik\Desktop\server\filterscripts\House.pwn(90) : error 029: invalid expression, assumed zero
    C:\Users\Erik\Desktop\server\filterscripts\House.pwn(90) : fatal error 107: too many error messages on one line


    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    5 Errors.

  • hab dir per PN mal geantwortet,
    kann dir leider bei den meisten error´s nicht direkt helfen,
    du musst das "PlayerInfo" schon auf dein gamemode anpassen..
    und das mit dem OnPlayerSpawn hab ich dir per pn gesendet



    Mfg

  • Kevin, wie von Kavkus schon gesagt, zu heal, armor etc. es ist noch in der Beta Version, und ich habs nur mal veröffentlicht damit ich sehe was ihr davon haltet.
    Und zu dem Häusern, ich möchte einfach nicht das das alles in einer Datei ist, für mich ist das zu unübersichtlich, desshalb hab ichs auch extra mit mehreren Daten gemacht, natürlich ist es etwas recourcen aufwendiger, aber wenn man die MAX_HOUSES Variable nicht zu hoch setzt gibts bei mir keine laggs (und das wenn ich den Server auf meinem PC laufen lasse, und wir zu 2. drauf sind).
    Natürlich wenn man die MAX_HOUSES auf 2000 setzt, wird das schon ein bisschen laggen, man sollte dabei hald nicht übertreiben, aber ich hatte keine idee wie ich es sonst machen sollte, ohne das ich alles in eine Datei speichern sollte.


    Trotzdem danke für die Kritik, und auch für das Lob von den anderen


    Mfg

  • Könntest du mal das Speichern & Laden von 1, 10, 100 und 1000 Häusern testen, und uns die Zeit Ergebnisse geben? ;) Sollte ja kein Problem sein.


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.


  • Hab es am "Home - Server" mit ein paar verschiedenen Anzahlen an Häusern getestet, mit nebenbei 3 anderen Spielern drauf, die voll gespammt haben (/buyhouse, usw..)


    Hier die Ergebnisse:


    5 Häuser: keine laggs
    10 Häuser: keine laggs
    100 Häuser: keine laggs
    500 Häuser: keine laggs
    1000 Häuser: manchmal ein paar kleine laggs


    Ich habe dies aber jetzt nicht mit der Beta Version getestet, sondern mit meinem Fertigen Script, welches ich (noch) nicht veröffentlicht habe. Dort gibts dann den Befehl /edit auch noch, womit man die Interior, Preis, usw.. des Hauses verändern kann, wir haben so viel gespammt wie möglich.

  • Keine Laggs? Es geht mir nicht um Laggs, sondern um die Zeiten in Ms.


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.


  • Hi


    Ein paar Tipps:


    1.) MAX_HOUSES ist ein fester Wert. Du könntest beim Auslesen der Häuser einen festen Wert nehmen, zB MAX_HOUSES und eine Variable Houses. Wenn er eine DINI Datei findet, erhöht er den Wert Houses. Wenn Du nun mithilfe einer for Schleife abfragst, an welchem Haus der Spieler ist, musst Du nicht durch MAX_HOUSES loopen sondern nur durch Houses (Vorallem bei wenigen Häusern ist dies praktisch)
    2.) Wenn ein Befehl oder Code erfolgreich war, kannst Du ihn abbrechen, entweder mit return oder break. So sparst Du Ressoucen, schau dir mal dein /enter und /exit an. Wenn er ins Haus teleportiert wird, loopt die Schleife trotzdem weiter und öffnet munter Dateien. Benutze da ein return
    3.) Benutz ein Enum, dann kannst Du die Dateizugriffe auf das Wesentliche minimieren (Laden und Speichern)
    4.) Du kannst sizeof direkt durch die Zeichenanzahl ersetzten


    Sonst fällt mir nichts ein.


    MfG Simon

  • Bei mri kommt wenn iches compilen will sscanf fehlt oda so ?

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