Ergebnis 1 bis 20 von 52

Thema: RM 2k3: Block-System funktioniert nicht richtig

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Irgendwie steige ich ebenfalls nicht hinter die Logik deines Skripts. Wo ist denn das Problem, einfach vor dem Schaden eine Abfrage zu machen?

    Die Berechnung von und das Abziehen durch Schaden sollte prinzipiell immer in einem Common Event stehen, lediglich die Parameter wie Stärke des Gegners z.B. sollte man vor dem Call-Befehl im Event einzeln in der dafür vorgesehenen Variable speichern. Und dann muss man so eine Anpassung wie das (nachträgliche) Implementieren einer Blocken-Möglichkeit auch diese Anpassung nur ein einziges Mal vornehmen und nicht in jedem einzelnen Event.

    Wichtig ist es, um Aufwand möglichst weit einzudämmen, Funktionen, die global benutzt werden sollen, in die Common Events zu packen. Denn sonst hat man diese Funktion in jedem Event (in diesem Fall in jedem Gegner-Event) einzeln stehen und muss dann für 100 Gegner auch 100 mal die Funktion abändern.

  2. #2
    Ich habe nun eine Möglichkeit gefunden, wie die HP des Helden nach dem Blocken nicht auf 1 gesetzt werden:

    @> Key Input Processing: [0003], Wait
    @> Show Animation: Player, [eheb shield]
    @> Wait: 0.0 seconds
    @> Wait: 0.0 seconds
    @> Wait: 0.0 seconds
    @> Change Parameters: Entire Party, MHP + 9000
    @> Change HP: Entire Party, + 9000
    @> Wait: 0.2 seconds
    @> Change HP: Entire Party, - 9000
    @> Change Parameters: Entire Party, MHP - 9000
    @> Wait: 0.1 seconds

  3. #3
    Ich habe eine Möglichkeit gefunden, wie die HP des Helden nach dem Blocken nicht auf 1 gesetzt werden:

    @> Key Input Processing: [0003], Wait
    @> Show Animation: Player, [eheb shield]
    @> Wait: 0.0 seconds
    @> Wait: 0.0 seconds
    @> Wait: 0.0 seconds
    @> Change Parameters: Entire Party, MHP + 9000
    @> Change HP: Entire Party, + 9000
    @> Wait: 0.2 seconds
    @> Change HP: Entire Party, - 9000
    @> Change Parameters: Entire Party, MHP - 9000
    @> Wait: 0.1 seconds

  4. #4
    Ich habe eine Möglichkeit gefunden, wie die HP des Helden nach dem Blocken nicht auf 1 gesetzt werden:

    @> Key Input Processing: [0003], Wait
    @> Show Animation: Player, [eheb shield]
    @> Wait: 0.0 seconds
    @> Wait: 0.0 seconds
    @> Wait: 0.0 seconds
    @> Change Parameters: Entire Party, MHP + 9000
    @> Change HP: Entire Party, + 9000
    @> Wait: 0.2 seconds
    @> Change HP: Entire Party, - 9000
    @> Change Parameters: Entire Party, MHP - 9000
    @> Wait: 0.1 seconds

  5. #5
    Oh man, ich seh die Bugs schon vorprogrammiert ^-^

  6. #6
    Das Blocken funktioniert so eigentlich sehr gut.
    Womit ich nur immer Maleste habe, sind die Item-Abfragen, die den Key-Inputs vorgelagert sind.
    Diese stören, je höher die Anzahl der Abfragen ist, den Fluss des Gameplays dermaßen, sodass das Gameplay sehr unexakt & willkürlich wird. :/

    Die Abfragen für die Schilde in meinem Game sehen so aus:

    'Init Shield' (PP)
    @> Wait: 0.0 seconds
    @> Wait: 0.0 seconds
    @> Wait: 0.0 seconds
    @> Conditional Branch: Buckler in Inventory
    @> Control Variables: [0001] = [Buckler] equipped
    @> Control Switches: [0147:shield control] = ON
    @>
    : Else
    @> Control Switches: [0147:shield control] = OFF
    @>
    : Branch End
    @> Wait: 0.0 seconds
    @> Wait: 0.0 seconds
    @> Wait: 0.0 seconds
    @> Conditional Branch: Wood Shield in Inventory
    @> Control Variables: [0001] = [Wood Shield] equipped
    @> Control Switches: [0147:shield control] = ON
    @>
    : Else
    @> Control Switches: [0147:shield control] = OFF
    @>
    : Branch End
    @> Wait: 0.0 seconds
    @> Wait: 0.0 seconds
    @> Wait: 0.0 seconds
    @> Conditional Branch: Iron Shield in Inventory
    @> Control Variables: [0001] = [Iron Shield] equipped
    @> Control Switches: [0147:shield control] = ON
    @>
    : Else
    @> Control Switches: [0147:shield control] = OFF
    @>
    : Branch End
    @> Wait: 0.0 seconds
    @> Wait: 0.0 seconds
    @> Wait: 0.0 seconds
    @> Conditional Branch: Templar Shield in Inventory
    @> Control Variables: [0001] = [Templar Shield] equipped
    @> Control Switches: [0147:shield control] = ON
    @>
    : Else
    @> Control Switches: [0147:shield control] = OFF
    @>
    : Branch End
    @> Wait: 0.0 seconds
    @> Wait: 0.0 seconds
    @> Wait: 0.0 seconds
    @> Conditional Branch: Hell-Templar Shield in Inventory
    @> Control Variables: [0001] = [Hell-Templar Shield] equipped
    @> Control Switches: [0147:shield control] = ON
    @>
    : Else
    @> Control Switches: [0147:shield control] = OFF
    @>
    : Branch End
    @> Wait: 0.1 seconds

    Die Berechnungen dieser Item-Abfragen stören das Gameplay so stark, dass nur einer von ca. 7 Befehlen (Key-Inputs) umgesetzt werden.
    Wie kann ich solche Berechnungen beschleunigen oder es dem Programm einfacher machen, diese zu lesen?

  7. #7
    Ich bin auch von diesem Code verwirrt. Kannst Du einfach mal dein ganzes Projekt iwo hochladen? xD

  8. #8
    Beschleunigen? Keinen Mist programmieren;-)

    Bei den Variable gibts die Möglichkeit zu lesen, welches Item ein Held auf bestimmtem Slot ausgerüstet hat.
    0 = nix
    >= 1 = irgendein Schild.

    Problem gelöst in zwei Zeilen.

  9. #9
    Im Grunde brauchst du das ganze Event nicht. Du kannst die Abfrage auch dort hinpacken, wo du die Taste fürs Blocken abfragst.

    Spieler drückt Blocktaste
    Ist Schild-ID > 0 (s. Corti)
    --- Blocken
    ansonsten
    --- Nichts tun

  10. #10
    Zitat Zitat
    @> Change Parameters: Entire Party, MHP + 9000
    @> Change HP: Entire Party, + 9000
    @> Wait: 0.2 seconds
    @> Change HP: Entire Party, - 9000
    @> Change Parameters: Entire Party, MHP - 9000
    @> Wait: 0.1 seconds
    Ich versteh den Sinn hinter diesen Zeilen nicht. o; Wozu die +-9000?

  11. #11
    Für mich sieht das so aus als wolle er ein [zumindest für den Zeitraum des Abblockprozesses] "unbeschadetes" Überstehen des Helden erreichen ... eben indem dessen Leben um 9000 hochgesetzt wird ... nur um nach dem Blocken wieder um 9000 verringert zu werden. Das ergibt aber insofern für mich wenig Sinn, da der Gegner womöglich trotzdem Schaden macht ... und wenn danach ohne Abzug dieses Schadens das Leben wieder um genau 9000 verringert wird ... dann tritt der Schaden eben einfach nach dem Blockvorgang in Kraft. Mitunter mit tödlichen Folgen :P Aber das ist nur eine grobe Vermutung ... da ich den Rest des Codes nicht kenne und auch sonst keinerlei Ahnung davon habe wie genau dieses Kampfsystem nun aussieht ... ein wenig im Nebel gestochert ...

  12. #12
    @AgentBlack für mich sieht es eher so aus, als wäre die gesamte Berechnung von Schaden, Kollision etc, was halt alles zum Kampfsystem gehört, in die einzelnen Mapevents (Gegnerevents) reingeskriptet, was eine Implementieren eines simplen Blocken-Systems, wie von Corti vorgeschlagen, umständlich macht, da er wohlmöglich bei jeder Map das bei jedem einzelnen Gegner korrigieren muss. Tja, das hat man davon, wenn man keine Common Events per Call-Befehl benutzt, statt die einzeln in jedem Mapevent per Copy and Paste auszuführen ^^
    Warum sonst sollte er sich so ein lächerliches Skript überlegen?

    @Norpoleon, sag mirbitte, dass du den Schaden in einer Variable speicherst, BEVOR er abgezogen wird, d.h. erst wird der Schaden in einer Variable berechnet und dann wird der Wert dieser Variable abgezogen, denn dann könntest Du einfach in einem Parallel Process den Schaden bei aktiviertem Blocken auf 0 setzen. Sonst musst Du in den sauren Apfel beissen und auf das Feature verzichten ODER dir die Mühe machen.

    Sähe dann so aus, dass Du in ein COMMON Event einen einzelnen Befehl setzt: Set Variable "Schaden" == 0. Nur diese eine Zeile und dann stellst du von dem Common Event den Trigger auf Parallel Process und machst es per Switch aktivierbar. Dann wird der Schaden automatisch auf 0 gehalten, solange der Switch auf ON steht, denn jedes Event führt seine Befehle in einer Endlosschleife aus, es sei denn du hälst es mit "Erase Event" an oder nutzt einen Switch zur Aktivierung, wenn dieser wieder auf OFF steht. Ich denke, es funktioniert wahrscheinlich nicht immer, selten kann es vielleicht doch noch zu Schaden kommen, je nachdem wie der Zeitpunkt des Gegnerrischen Angriffs getimed ist, das hängt stark von sehr wenigen Millisekunden ab, aber es sollte um Längen besser funktionieren, als deine Held bekommt 9000 HP und verliert danach wieder 9000 HP. Was ist eigentlich, wenn der Held auf einem Hohen Level ist und 6000 HP hat? Dann kommt er bei 3000 Maximalen HP wieder raus, wenn er geblockt hat. Das ist doch schwachsinnig, mit deinem Skript DARF der Held nur maximal 999 HP haben!

    Geändert von Drakee (30.08.2015 um 15:35 Uhr)

  13. #13
    @Drakee Nein, der Schaden wird sofort abgezogen.

    & jetzt mal ganz langsam für Programmieranfänger (^: Wie speichere ich einen Wert für ein Item oder sonst was in einer Variablen?
    Ich möchte jetzt erstmal das Beschleunigen der Schildabfrage klären.

  14. #14
    Variable Operations -> Variable auswählen -> Hero (Name des Helden auswählen) -> Shield Number

    Das speichert die ID des ausgerüsteten Schildes in der Variablen. Diese ID ist die Nummer in der Datenbank.

  15. #15
    Also ich hab hier bei RM 2k3 nur die Möglichkeit 'Control Variables'. Ist das das Gleiche?

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •