Shop Tutorial?

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
  • Hi,


    also ich möchte eigentlich nur ein ganz einfaches Shop System haben,



    jedoch komme ich jedes mal durcheinander, ich habe schon etliche vorgefertigte Scripts dafür angeschaut,


    aber wenn ich Scripte brauche ich nunmal eine feste Struktur und ich muss die dinge auch größtmöglich verstehen können,


    was da natürlich nicht der Fall ist da es keine Tutorials sind, wenn man dann welche findet sind diese für Dini. (Ich benutze Mysql R41-4)


    Hätte jemand vielleicht Zeit / Lust mir einfach mal ein kleines Tutorial dafür ein erklärtes tutorial zu machen, ähnlich wie hier? [jTuT] MySQL R41-4 (Installation, XAMPP, Verwendung, Bedienung & Registrations-System)



    Und bitte keine Codes aus irgendwelchen House System Filterscripts kopieren, das bringt mir nämlich gar nichts.



    Das was ich halt so brauche wäre Laden / Speichern / Erstellen / Löschen (nur die Grundsätze heißt nicht das man das für alle enums machen muss)


    Und falls jemand diesen Shop ausraubt, dass dann die RobTime gesetzt wird bis es wieder ausraubar ist.


    Meine Enums sind hier: https://pastebin.com/BCxpuKnJ



    Und wie gesagt ich brauche dabei einfach Struktur und ein Grundgerüst

  • Und wie gesagt ich brauche dabei einfach Struktur und ein Grundgerüst

    Ganz blöde Frage meinerseits, aber du hast doch bereits dieses Grundgerüst.


    In dem Tutorial von Jeffry wird doch präzise gezeigt und erklärt, wie du Dinge lädst und speicherst.


    Das kannst du 1:1 auf dein enum anwenden.


    Deine anderen Fragen, beziehen sich ja eher auf SQL selbst.


    Hier ein Tutorial: https://www.w3schools.com/sql/default.asp


    und hier der sub-tab wo es ums löschen geht: https://www.w3schools.com/sql/sql_delete.asp



    Und falls jemand diesen Shop ausraubt, dass dann die RobTime gesetzt wird bis es wieder ausraubar ist.

    Das ist ja was anderes.


    Dafür nutzt du einfach [wiki]Gettime[/wiki].


    Das war mal ein kleines Beispiel, wie man sowas nutzen kann.

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Hab jetzt einfach mal dein Beispiel übernommen, tatsächlich klappt das aber nicht so,


    ich kann immer noch einfach jede Sekunde die "bank" ausrauben

  • ich kann immer noch einfach jede Sekunde die "bank" ausrauben

    Wie sollte das auch klappen.


    x ist in deinem Fall ja auch nur eine lokale Variable.


    Sprich sie speichert nicht ihren Wert.


    Du brauchst eine Globale Variable, wo der Wert gespeichert wird..für jeden Shop.

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Dann mit einer for new schleife? Aber woher soll das script dann wissen was für einen shop ich meine...

    Da ich nicht genau weiß, wie deine Variable zu den Enum heißt, nenne ich diese jetzt einfach mal Shops.


    Um zu wissen, welchen index du jetzt für das Array benutzen musst, musst du wissen, an welchem Shop er sich befindet.


    Soweit, so klar.


    Das prüfst du, indem du schaust, an welchen Koordinaten er sich befindet.


    Also du brauchst alle Koordinaten, von den Kassen.


    Diese gibst du ja manuell an mit der if-Abfrage, aber pack diese doch auch mit in dein Array, damit du diesen Punkt dann auch dynamisch, so wie alles andere verändern kannst.


    Das heißt wir erweitern dein enum um Float:kasse_x, Float:kasse_y, Float:kasse_z.


    Dann kannst du einfach den index so bekommen:


    Kannst auch gerne hier einen Blick reinwerfen: Schneller & strukturierter skripten


    Da gebe ich zusätzlich noch ein paar Tipps, worauf du achten solltest :)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Hi,


    habs jetzt mal per MySQL gemacht.


    Problem ist jetzt, dass einfach 200 Shops erstellt werden (in der mysql db)


    Also das Maximum was von mir festgelegt wurde.


    An sich wird aber alles gespeichert


    Hier der Code:





  • Noch ein Hinweis:
    Gebe bei getFreeShopID nicht 0 zurück, falls kein Shop gefunden wird, sondern -1, weil der erste Index ja die 0 ist, somit würde der erste Shop überschrieben werden, wenn alle Shops voll sind.
    Also dort, return -1.


    Und dann
    new id = getFreeShopID();
    Danach:
    if(id == -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Maximale Anzahl an Shops erreicht.");



    Außerdem ist noch ein Fehler in OnShopsLoad drin. Nutze dort bei den Cache Funktionen nicht 0 als ersten Parameter sondern i, sonst lädst du immer nur den ersten Shop.


  • Hi, also jetzt wird der Ausgang einfach in eine neue ShopID eingetragen,



    möchte ja die ID des shops mitnehmen wie man am code erkennen kann.


    https://www.pic-upload.de/view-36006246/shop.png.html

  • X mal alles überprüft und ausgebessert, jedoch wird ShopFinished nicht aufgerufen, in der mysql log steht nichts darüber.



    und 2. https://www.pic-upload.de/view-36006351/mysql.png.html

  • 1. Lass dir den Query per printf() ausgeben und führe ihn manuell aus - dann sieht du, ob eventuell der Query fehlerhaft ist.


    2. Zusätzlich ist es gewollt, dass der Befehl shopasugang heißt?


    3. Was soll pShopID bewirken? Aus dem Kontext wirkt das nämlich so, als würde es nicht das erfüllen, was du dir eigentlich erhoffst ..

  • Ach so - jetzt sehe ich es erst. Hau einfach bei /shopasugang vor das return 1 ein print(query) - dann sollte dir in deinem server_log.txt ein Befehl angezeigt werden. Diesen einfach mal manuell per phpMyAdmin o.ä. ausführen und schauen, ob etwas passiert. Zusätzlich kannst du noch den Query aus dem server_log hier posten.

  • ´

    Mach im Query mal die ganzen Zeichen da weg. Manche davon sind falsch rum, das führt zu einem Fehler im Query.
    Den solltest du eigentlich im MySQL Log sehen.


    Bis auf die geraden Anführungszeichen ' kannst du alle weg machen, die brauchst du nur, wenn du eine Spalte wie einen MySQL Befehl (z.B. ALTER) nennst.

  • Hab beide geloggt

    Code
    Blank Gamemode by your name here
    ----------------------------------
    
    
    Number of vehicle models: 4
    ADMIN: Admin Pulsii(1) logged in (level 10)
    INSERT INTO `Houses` (h_enterx, h_entery, h_enterz, owner, interior) VALUES ('2098.123779', '2073.649658', '10.820312', '', '1')
    Sehr gut, bitte gehe nun zum Ausgang und mache /shopasugang.
    UPDATE `Houses` SET `h_exitx` = '2096.150391', `h_exity` = '2063.400391', ´h_exitz´ = '10.820313',`interior` = '0' WHERE ´shopid´ = '0'






    Hab das jetzt mal Simuliert,


    da kam raus, das h_exit und shopid beides angeblich unbekannte Felder sind, hab die beiden auf rechtschreibfehler geprüft aber keine



    gefunden, hab dann das `` weggemacht bei den beiden, so geht es und der shop wird erstellt, jedoch werden die dinge nicht gespeichert,


    ist vermutlich nicht die richtige lösung.




    Alles:



















    //Edit wie mir gerade auffällt, shopid = 0


    Wie kann das sein ?

  • mysql_format(handle, query, sizeof(query), "UPDATE `Houses` SET `h_exitx` = '%f', `h_exity` = '%f', ´h_exitz´ = '%f',`interior` = '%d' WHERE ´shopid´ = '%d'", xc, yc, zc,ShopInfo[id][interior],id);
    Zu
    mysql_format(handle, query, sizeof(query), "UPDATE Houses SET h_exitx = '%f', h_exity = '%f', h_exitz = '%f', interior = '%d' WHERE shopid = '%d'", xc, yc, zc,ShopInfo[id][interior],ShopInfo[id][shopid]);