Hauserstellen befehl

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
  • Guten Abend


    Ich habe jetzt dank @Jeffry mein Mysql-Haussystem fertig.


    Nun weiß ich nicht wie ich das mit ein OCMD befehl verbinden kann das es sich auch in die Datenbank rein schreiben lässt und beliebig ändern lässt vom Ingame aus.


    Das heißt wenn ich im Spiel bin gehe ich zu ein Haus und erstelle eins da mit den daten und dann wenn ich es mit /hausbearbeiten die Häuser ändern kann so das ich Besitzer,Hauskasse, Interior und das Level für das man braucht um ein Haus zu kaufen.

  • Zum einen Brauchst du einen Stock, der abfragt, welchem Haus du am nächsten bist:
    stock GetNearestHaus(playerid)
    {
    new id = -1, Float:dist, Float:tmp = 5.0;
    for(new i = 0; i < sizeof(Hauser); i++)
    {
    dist = GetPlayerDistanceFromPoint(playerid, Hauser[i][H_X], Hauser[i][H_Y], Hauser[i][H_Z]);
    if(dist < tmp)
    {
    tmp = dist;
    id = i;
    }
    }
    return id;
    }


    Dann kann der Befehl so aussehen:
    ocmd:hausbearbeiten(playerid, params[])
    {
    new item[16], value;
    if(sscanf(params, "s[16]d", item, value)) return SendClientMessage(playerid, 0xFF0000FF, "Nutze: /hausbearbeiten [Preis/Miete] [Wert]");
    new id = GetNearestHaus(playerid);
    if(id == -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Du bist nicht in der Nähe eines Hauses.");
    if(!strcmp(item, "Preis", true))
    {
    Hauser[id][hPreis] = value;
    //Nachricht etc...
    return 1;
    }
    else if(!strcmp(item, "Miete", true))
    {
    Hauser[id][hMiete] = value;
    //Nachricht etc...
    return 1;
    }
    //...
    return SendClientMessage(playerid, 0xFF0000FF, "Nutze: /hausbearbeiten [Preis/Miete] [Wert]");
    }

  • sscanf hat mit MySQL nichts direkt zu tun. Das kannst du also machen, wie es dir am liebsten ist, wenn du lieber strtok nutzt, kannst du das natürlich machen. Ich mache die Beispiele meistens mit sscanf, da das die meisten hier nutzen.

  • Ich sage es mal so, für die meisten geht es schneller und ist damit einfacher, wenn man sscanf und ocmd nutzt, anstatt mit strcmp und strtok die Befehle zu erstellen, das ist schwieriger.
    Von der Performance ist ocmd auf jeden Fall besser, als es mit strcmp zu machen. sscanf und strtok nehmen sich in den meisten Fällen nicht viel.

  • Das ist alles was ich bis jetzt für das Haussystem habe:


    Haussystem:

  • Wenn ich es richtig sehe, dann hast du das anhand meines Tutorials gemacht, richtig?
    Dieses: [jTuT] Fraktions-Fahrzeug-System mit MySQL R39-2


    Dort gibt es den fferstellen Befehl, nach dem kannst du ebenfalls vorgehen.


    Dort wird strtok verwendet, das kannst du, je nach belieben, auch zu sscanf ändern.


    Versuche es mal anhand dem Befehl, deinen Befehl zu erstellen. Wenn du nicht mehr weiter kommst, dann poste was du bis dahin hast.
    Ich möchte es dir ungern alles vorschreiben, wenn es ein Tutorial gibt, das wäre gegen den Lerneffekt.

  • Ok, und wo hast du definiert, ob es eine Interior ID geben darf oder nicht?
    Oder ist es einfach nur: Es darf nur Interiors zwischen 1 und 20 geben?
    Das wäre dann:
    if(interior < 1 || interior > 20) return SendClientMessage(playerid, 0xFF0000FF, "Error: Nur Interiors zwischen 1 und 20 möglich.");

  • Was meinst du?


    Du müsstest schon etwas mehr Informationen von dir geben, sonst kann ich dir leider nicht wirklich helfen. Erkläre bitte ganz genau im Detail (nichts vergessen), was der Befehl machen soll und was du eingeben und abfragen willst.