Haltbarkeit von Gegenständen verringern(LOKAL)

  • GM 7

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Haltbarkeit von Gegenständen verringern(LOKAL)

    Heyho liebe Commu :o)

    Weiß einer,wie man Variablen so setzen muss,dass,wenn ich einen Gegenstand(Messer) habe und ihn ausrüste(Funktioniert alles...),dass dann eine lokale variable für genau diesen Gegenstand verringert wird(Haltbarkeit) und auch so bleibt,falls ich damit zuschlage?(Haltbarkeit soll z.B. 10 sein,dann schlage ich zu;sie wird auf 9 verringert...rüste ich diesen Gegenstand ab und wieder an soll die Haltbarkeit immer noch 9 sein...)
  • Dann musst du uns erstmal sagen, wie du das mit den Gegenständen handhabst. Werden die Objekte bei jedem Ausrüsten neu erstellt und beim Ausziehen zerstört oder bleiben sie konstant am leben? Wenn die Gegenstände immer wieder zerstört und erstellt werden, empfielt es sich, im Playerobjekt ein paar Arrays oder lists einzurichten, die die Daten für die Objekte speichern, etwa Haltbarkeit...
    "das war meine letzte flamewar PM an dich ."
  • Ich verstehe nicht ganz, warum du überhaupt diesen Thread erstellt hast, wo die Lösung doch schon in deiner Frage steckt.
    Gib dem Objekt einfach ne Lokalvariable, z.B. "zustand" und setz diese dann im entsprechenden Event (z.B. wenn die Waffe den Gegner trifft) um 1 runter.

    Edit: Ich bin mal davon ausgegangen, dass die Gegenstände permanent existieren, falls du sie aber jedes Mal neu erstellst, ist blubberblubs Lösung eher angebracht.
  • Erstell dir wie blubberblubb sagte, einen Array (haltbarkeit o.Ä.) und speicher dort die Haltbarkeit der Gegenstände rein. Dann ist es auch nicht so schlimm, wenn du die Gegenstände jedes mal zerstörst. Beim erstellen der Objekte dann schreiben:
    Create Event des Spielers:
    ----------------
    haltbarkeit[0] = 10; //Messer
    haltbarkeit[1] = 20; //Irgendeine Waffe
    ----------------
    Wird die Waffe beschädigt:
    haltbarkeit[0]-=10; //Nur vom Messer die Haltbarkeit abziehen.
    ----------------
    Wird das Messerobjekt neu erstellt:
    obj_messer.haltbarkeit = haltbarkeit[0];
    ----------------

    Btw. ich würde das Objekt nicht immer zerstören, es gibt da durchaus einfachere und bessere Methoden.

    mfg Critical

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Critical ()

  • Könntes tdu noch bitte meine erste Frage beantworten?
    Wie funktioniert dein System?


    Mach doch eine List, die lists mit objektinformationen enthält
    "das war meine letzte flamewar PM an dich ."
  • Naja gut, dann wirste wohl eine ds_map erstellen müssen.
    Speicher einfach die Werte für jedes Messer rein.

    Bei ner DS Map kann es egal sein, dass die Anzahl der Messer unklar ist. Denn man kann ja neue Einträge hinzufügen.

    GML-Quellcode

    1. //DS Map erstellen
    2. MesserZustand = ds_map_create();
    3. //Neues Messer aufgenommen
    4. ds_map_add(MesserZustand, <MesserId>, <Zustandswert>);
    5. //Messer wird beschädigt:
    6. ds_map_replace(MesserZustand, <MesserID>, <Neuer Zustandswert>);


    Edit: So das sollte jetzt aber die Lösung sein. Eine besser fällt mir echt nicht ein. oO
    mfg Critical

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Critical ()

  • WUAH!Nein es ist bestimmt nicht schwer,nur is das Spiel schon so komplex,dass ich völlig ducheinanderkomme xD

    ->Code gelöscht,damit Site wieder schnell läuft<-(Wer ihn haben will=>PM plz :))

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Punish0r ()

  • Klar, durch den Codehaufen werd ich mich jetzt natürlich wühlen... Du hast wohl selbst den Überblick verloren, wie das ganze aufgebaut ist hmm?
    Naja, so wies aussiehts bleiben die Objekte persistent am leben, also kannst du ja für das aktuelle aktivierte Objekt an den gewünschten Zeitpunkten die Variable Durability reduzieren
    "das war meine letzte flamewar PM an dich ."
  • Is deine frage vl. wie spreche ich eine instanz von einem objekt an wobei es mehrere instanzen von diesem gibt?
    Wenn ja dann musst du einfach mit IDs arbeiten.

    aus deinem code wurd ich nicht ganz schlau. :wacko:


    €dit:
    ich wusste doch dass ichs irgendwo gelesen hab:
    Und mein Problem ist,dass,wenn ich 2 mal das selbe hab er von beiden die Haltbarkeit abzieht ...
    In dem fall musst du wie schon gesagt mit IDs arbeiten.
  • Vielleicht hab ich einfach was verpasst, aber wenn du das mit with machst, sollte es doch problemlos gehen oder?
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet
  • Bei einer with Anweisung werden alle Objecte angesprochen.
    Es sei denn, an dieser Stelle steht die ID.
    Also bei
    with (objectname)
    werden alle Objecte mit Namen "Objectname" angesprochen.
    Aber bei
    with (id_des_gewollten_Objectes)
    wird nur das eine angesprochen.
    Also wie JOhannski gesagt hat:
    Du brauchst IDs.
    Bei einer Collision ist das einfach:
    Da nimmst du einfach
    other.variablenname
    Ansonsten wird schwieriger.
  • Wäre es so schwer, die ID's zu kriegen? 8|
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet
  • So,die Idee mit den ID´s hatte ich eigentlich auch,dachte aber sie wäre way´s to uncomfortable...

    Quasi für jeden Gegenstand ne Abfrage starten:

    Nehme man mal an,man erhält ein Schwert,dann folgt=>

    1.Welcher Grund-gegenstand ist es(Schwert-01 z.B)

    2.ID-Speicherung(Gibt Schwert-01 die ID #1)

    Und dann halt Abfragen welcher Gegenstand nun grade "aktiv" ist.

    If #1,#2,#3,#4 then...

    Gibs dazu kein Tutorial :(?
  • Ich weiß jetzt nicht, ob ich dich richtig verstanden habe, aber IDs sind feste Variablen (Konstatnten).
    Jedes Object hat eine andere ID, die auch nicht verändert werden kann.


    Das müsstest du eventuell mit einer Liste machen (ds_list)
  • genau es geht um die id des objektes, jede einzelne instanz im raum hat ja ne individuelle id, die sie identifiziert. die kannste dann eben abspeichern und alle item-spezifischen aktionen über das objekt (eben die instanz) regeln.. ->absolut keine if und elses
    "das war meine letzte flamewar PM an dich ."
  • du hast deine einzelnen gegenstände(objekte), die haben alle variablen wie eben haltbarkeit etc... und eine variable, die checkt, ob der gegenstand schon im besitz vom player ist und etwa ob er gerade in gebrauch ist oder so. über das objekt erledigst du alle für ihn spezifischen aktionen.

    im playerobjekt hast du nun ne variable = ds_list_create(), die alle objekte im inventar oder whatever enthält. aber das playerobjekt interessiert es nen scheissdreck, was die gegenstände machen.. verstehst?
    "das war meine letzte flamewar PM an dich ."
  • Ich frag mich grade, wie man es am sinnvollsten hinkriegen würde, die ID aufzunehmen, da place_meeting(x,y,obj) keine ID zurück gibt... mir würde spontan nur einfallen, evtl mit instance_nearest oder ähnlichem zu arbeiten, das is aber umständlich und auch ein wenig ineffektiv, da ja ein anderes Objekt näher sein kann.

    Ansonsten:

    Waffe nehmen:

    GML-Quellcode

    1. if(place_meeting(x,y,parent_waffe))&&(keyboard_check_pressed(vk_deinkey))
    2. -{
    3. -currentweapon=instance_nearest(x,y,parent_weapon);
    4. -with(currentweapon)
    5. --{
    6. --tu was du willst;
    7. --}
    8. -}


    die Striche sollen Tabulatoren sein, die mag das Forum hier ja nich...
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet