Items sockeln

  • GM 8
  • Items sockeln

    Hi Leute,...

    Ich würde gerne Items die im Spiel vorkommen " Sockeln " so aller Diablo.

    Beispiel : Item : FLINTE ( macht 10 schadenspunkte ) , hat einen sockelplatz ... in dem man denn einen nennen wir ihn mal " Feuerstein " legen. Und der bewirkt denn das die FLINTE ( 10 dmg ) + 2 Feuerschaden bekommt.

    Nun zu meiner Frage. Wie macht man das am besten. Ich bräuchte da ein paar denkanstöße wie man sowas realisieren kann.Zumal ich immer noch als

    Anfänger was Gml betrifft bezeichne.

    Vielleicht hat einer von euch ne Idee wie man sowas " einfach " bewerkstelligen könnte.

    LG Neogeo
  • Zu erst mal müste mann wissen wie deine ITem verwaltung ist. Ist jedes ITem ein Obejekt oder nur Virtuel.
    DU must ja nur hier oder da ein paar werte hinzufügen.

    Zb Hat dann jedes Item eine Variable sockel=0
    0 steht für "Sockel noch Frei"
    Alle zahlen darüber für den Effekt.
    zb
    1 =Feuerschaden
    2=Frostschaden.
    Dann brauchst du nur ne Variable wo der wert ( Wirkungsgrad ) gespeichert ist. zb Feuerschaden "+20"
    Meine Signatur hat kein Visum für das GM Forum erhalten.
  • Wie x-sascha schon angedeutet hat, ist das eine reine Frage deiner Datenstrukturen.
    Ich schreib das jetzt einfach mal so runter...

    In Diablo sehen Items vermutlich so aus:

    GML-Quellcode

    1. id = 1000001; // Einmalige Id dieses speziellen Gegenstandes. Beim GM bietet sich hier die Instanzen-Id an. Aber auch nur, wenn diese Instanz immer persistent (wenn auch unsichtbar) im Raum bleibt. Ansonsten muss hier etwas eigenes her, das dann über eine Liste oder einen Array verwaltet wird
    2. base_item = 0; // id-Nummer eines Items, wodurch Name/Grafik/Slot/Typ/Geschwindigkeit/Level-Voraussetzung etc. vorgegeben wird.
    3. ilvl_variance = 0; // Wert zwischen z.b. -3 bis +3, gibt den Itemlevel an und damit, wie hoch die Stats rollen
    4. quality = 2; // 0 = bad, 1 = normal, 2 = magic, 3 = rare, 4 = legendary, 5 = set
    5. name_prefix = 0; // id-Nummer eines Präfix wie z.B. "Shallow"
    6. name_suffix = 0; // id-Nummer eines Suffix wie z.B. "of the crow
    7. affixes = 2; // Das Item hat 2 Affixe
    8. affix_id[0] = 2; // das ist jetzt einfach mal die Id für Kälteschaden
    9. affix_par1[0] = 6; // 1. Parameter für das 1. Affix
    10. affix_par2[0] = 13; // 2. Parameter für das 1. Affix => 6-13 Kälteschaden (damit das "Rollen" von Stats verallgemeinert werden kann, müssen sich diese Zahlen nicht immer 1:1 übertragen)
    11. affix_id[1] = 77; / das ist jetz einfach mal die Id für unzerstörbar
    12. affix_par1[1] = 0; // nicht relevant für dieses Affix
    13. affix_par2[1] = 0; // nicht relevant für dieses Affix
    14. sockets = 2; // Das Item hat 2 Sockel
    15. socket[0] = 12; // das Item mit der Id 12 ist hier reingesockelt, z.B. ein Rubin
    16. socket[1] = -1; // dieser Sockel ist leer
    17. durability = 0; // derzeitige Haltbarkeit
    Alles anzeigen

    Dafür brauchst du natürlich eine Datenbank an Items. Dafür bietet der GM leider keine schöne Möglichkeit - Spiele wie Diablo haben dann wirklich eine Datenbank, für die Entwickler dann auch ein schönes Tool haben, mit dem sie die Datenbank editieren können. Naiv könnte im GM das ohne Datenbank so aussehen (hier für item_base, sowas brauchst du an sich für alle Ids...):

    GML-Quellcode

    1. // get_item_base(id)
    2. switch (argument0) {
    3. case 0: // level 5 1h axe
    4. min_dmg = 5;
    5. max_dmg = 6;
    6. attack_speed = 1.2;
    7. model_id = 7;
    8. base_ilvl = 5;
    9. name = "Hand Axe";
    10. slot = 1; // Id für Waffenhand
    11. type = 4; // 4 steht z.B. für 1H-Waffe
    12. subtype = 4; // subtype ist für jeden type anders definiert. Bei 1Hand-Waffen ist es die Unterscheidung zwischen der Waffenart. Hier: 1H-Axt
    13. req_level = 1; // benötigter Level
    14. max_durability = 15; // maximale Haltbarkeit
    15. break;
    16. // case 1:
    17. // ...
    18. }
    Alles anzeigen


    Da kämen jetzt natürlich noch Scripte fürs Rollen der Items hinzu sowie Abfragen, die überprüfen ob es nicht als Legendary noch einen Eigennamen hat... etc.
  • Spiele wie Diablo haben dann wirklich eine Datenbank, für die Entwickler
    dann auch ein schönes Tool haben, mit dem sie die Datenbank editieren
    können
    Zum Thema Datenbanken und Tools.
    Mach dir einfach für sowas eigen Tools.

    Für einen Manger hab ich zb mal einen SPieler Editor gemacht der alle werte in eine Ini Exportiert.

    Sol heißen du kannst items werte zu weisen die dann exportiert werden und vom spiel wieder importiert werden.
    Gut dafür ist immer ein Grid. Da ein Grid auch wie eine "Exel Tabele" misbraucht werden kann :) :)
    Grid y ist dann zb die Zeiel und grid x die Spalte
    Meine Signatur hat kein Visum für das GM Forum erhalten.
  • puh! Ok. Also ich würde lügen wenn ich das von euch vorgeschlagende verstanden habe.

    Da brauch ich noch ne weile Übung , bis ich dieses hier verwerten kann.

    p.s.

    Also mir würde ein simpler " Slot " reichen am Item. Auch der " sockelgegenstand " muß nicht erst random generiert werden. Oder epic o. magic sein..

    Ich hab vor das der Spieler/in

    das Sockelitem im Shop kauft. Dann landet es im Inventar. Und von da kann es an das zu sockelende Item rangeheftet werden. Indem man es in den " Sockelplatz " legt. fertig.
  • Die Randomattribute sind nur das Zünglein an der Waage. So oder so werden deine Items eine ganze Reihe an Eigenschaften brauchten, die du irgendwie nach festen Richtlinien abspeichern musst.
    Du musst erst ein Gefühl für Datenstrukturen kriegen. Da ist der GM leider eher eine schlechte Lernhilfe. Ich weiß auch gerade nicht, wie man das Verständnis dafür am besten übt... vielleicht mit relationalen Datenbanken? Auch nicht ohne...

    Entweder, du stellst jetzt mehr Rückfragen zu unseren Erklärungen, oder du spielst erstmal in einer anderen Richtung mit Programmieren rum und kehrst später zu der Sache hier zurück.
  • Benutzer online 1

    1 Besucher