Ergebnis 1 bis 20 von 21

Thema: RPG Maker Vx Ace: Yanfly Combat Log editieren?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Ok, um mal Input zu liefern: Was ich selbst versucht habe:

    Folgende Stelle

    Code:
    #--------------------------------------------------------------------------
      # item_max
      #--------------------------------------------------------------------------
      def item_max; return @data.size; end
    ändern zu
    Code:
    #--------------------------------------------------------------------------
      # item_max
      #--------------------------------------------------------------------------
      def item_max; return 10; end
    was aber nicht klappt, denn dann zeigt das Log gar keinen Text mehr an.

    Blöderweise war das das naheliegendste und alle weiteren Operationen führen dazu, daß mir das Ding crasht wie ein Flugzeug bei einer Bruchlandung.

    Kann es sein, daß das Skript gar keine Methode zur Einstellung des Limits hat? Ich dachte eig, daß das durch "Item_max" definiert ist. Kann sich aber auch auf eingesetzte Items im Kampf beziehen. Jetzt bin ich nicht sicher, ob ich an der Methode überhaupt rumoperieren soll oder ob mir das alles kaputt macht.

    Naja, wer helfen will -> Hut ab!

    Ich mach hier solange mal selber Trial und Error.

    Ken der planlose Kot

  2. #2
    Nur letzte 10 Logs anzeigen müsste trivial sein, die andere Aufgabe ziemlich kompliziert, da es von Window_Selectable abhängt, was das generische Auswahlfenster ist.

    Man könnte z.B. alles außer den letzten 10 Logs wegwerfen... Wenn man den Code für durchgeht, erreicht man diese Zeile her: https://github.com/Archeia/YEARepo/b...isplay.rb#L327

    Da könnte man z.B. mit einem Slice die letzten 10 Elemente nehmen, also in Zeile 328 schreiben:

    Code:
    @data = @data.last(10)
    Aber kein Plan ob das Steinzeit-Ruby 1.9 schon die last-Methode hat, Stand der Technik ist Ruby 2.4


    Und dein Code der es einfach auf 10 hardcoded kann nicht gehen, weil du dann für die Fälle wenn nur 0-9 Elemente drin sind außerhalb der Array-Grenzen indizierst -> CRASH

    Geändert von Ghabry (03.09.2018 um 16:08 Uhr)

  3. #3
    Danke, Ghabry. Es passiert was, allerdings nicht das, was ich will. Nämlich: Es zeigt dann nur die letzten 10 Zeilen des Logs an und nicht die letzten 10 Logs (also die Logs der einzelnen Turns 1 bis 10) als Gesamtpaket. Aber ich glaub wir sind nah an der Lösung des Problems.

    Geändert von Ken der Kot (03.09.2018 um 16:16 Uhr)

  4. #4
    Oh, hab nicht richtig gelesen, diese subtile Änderung macht es direkt viel komplizierter, weil dies eindeutig nicht vorgesehen ist.

    z.B. könnte man ein neues Array einführen und dann in "turn_end" jeweils zählen, wie viele neue Zeilen pro Zug hinzugekommen sind und wenn das neue Array die Größe 11 erreicht, werden so viele Zeilen gelöscht, wie im ersten Arrayindex stehen, dann den ersten Arrayindex löschen, dadurch wirds beim nächsten "turn_end" mal wieder Größe 11 usw.

  5. #5
    Ich will halt einfach nicht, daß der Log erstmal 10 oder mehr Sekunden laden muss, wenn man ihn aufruft. Das kann passieren, wenn der Kampf schon weit fortgeschritten ist (20 oder mehr "Spielzüge"), daher dachte ich, daß es eine gute Idee wäre, die letzten Logs auf 10 zu begrenzen, damit es nicht so lange dauert, den Log aufzurufen. Ist ja echt blöd so.

  6. #6
    Zitat Zitat von Ghabry Beitrag anzeigen
    Und dein Code der es einfach auf 10 hardcoded kann nicht gehen, weil du dann für die Fälle wenn nur 0-9 Elemente drin sind außerhalb der Array-Grenzen indizierst -> CRASH
    Du kannst in Ruby auch auf nicht indizierte Werte zu greifen. Es wird einfach "nil" ausgewiesen.
    a = [1,2,3]
    p(a[4]) => nil

    @topic: ich hatte leider keine Zeit dort reinzuschauen, und nach dem der thread innerhalb - mal wieder - von weniger als 24 stunden (am wochenende) bereits gebumpt wurde, auch ehrlich gesagt 0,0 Motivation

  7. #7
    Zitat Zitat von Linkey Beitrag anzeigen
    @topic: ich hatte leider keine Zeit dort reinzuschauen, und nach dem der thread innerhalb - mal wieder - von weniger als 24 stunden (am wochenende) bereits gebumpt wurde, auch ehrlich gesagt 0,0 Motivation
    Hmmm

  8. #8
    Das in ein neues Script unter dem Original kopieren. TURNS_MAX bestimmt, wie viele Runden angezeigt werden.

    Code:
    class Window_CombatLog < Window_Selectable
      TURNS_MAX = 10
      #--------------------------------------------------------------------------
      # initialize
      #--------------------------------------------------------------------------
      def initialize
        @data = []
        @turn_data = Array.new(TURNS_MAX) { [] }
        super(0, 0, Graphics.width, Graphics.height-120)
        deactivate
        hide
      end
      
      #--------------------------------------------------------------------------
      # add_line
      #--------------------------------------------------------------------------
      def add_line(text)
        return if text == "-" && current_turn.last == "-"
        current_turn.push(text)
      end
      
      #--------------------------------------------------------------------------
      # item_max
      #--------------------------------------------------------------------------
      def item_max
        @turn_data.inject(0) { |sum, i| sum += i.size }
      end
      
      def data
        @turn_data.inject(:+)
      end
      
      #--------------------------------------------------------------------------
      # draw_item
      #--------------------------------------------------------------------------
      def draw_item(index)
        text = data[index]
        return if text.nil?
        rect = item_rect_for_text(index)
        if text == "-"
          draw_horz_line(rect.y)
        else
          draw_text_ex(rect.x, rect.y, text)
        end
      end
      
      def start_turn
        @turn_data.rotate!
        current_turn.clear
      end
      
      def current_turn
        @turn_data.last
      end
    end
    
    class Scene_Battle < Scene_Base
      #--------------------------------------------------------------------------
      # alias method: turn_start
      #--------------------------------------------------------------------------
      alias scene_battle_turn_start_cld turn_start
      def turn_start
        scene_battle_turn_start_cld
        @combatlog_window.start_turn
        @combatlog_window.add_line("-")
        text = sprintf(YEA::COMBAT_LOG::TEXT_TURN_NUMBER, $game_troop.turn_count)
        @combatlog_window.add_line(text)
        @combatlog_window.add_line("-")
      end
    end
    Mangels installiertem Maker wie immer ungetestet :3

  9. #9
    Vielen Dank, Cepanks. Habs getestet, aber das wirft mir ein "stacklevel too deep" entgegen. Woran könnte das liegen?

  10. #10
    Ist das die ganze Meldung? Schreibt er keine Zeilennummer dazu, wo der Fehler auftritt?

    Liegt aber vermutlich am doppelten alias. Enferne mal die Zeile alias scene_battle_turn_start_cld turn_start in meinem Script und schau ob es dann läuft.

  11. #11
    Ja, nun klappts danke

    Kam keine Fehlermeldung außer das was ich geschrieben hab

  12. #12
    Vielleicht kriegen wir das mit der Scrollfunktion auch hin? Oder wäre das zu schwer? Frage nur aus Intresse. Das wäre wirklich weltklasse.

  13. #13
    Gabs schon Ideen, wie man die Scrollfunktion evtl implementieren könnte? Will ja nicht bumpen, aber das wäre schon auch noch wichtig und ich wäre super dankbar.

  14. #14
    Zitat Zitat
    Will ja nicht bumpen, aber [...]
    Na wenn du es nicht willst, warum tust du es dann? Wenn es hier auf deine Frage noch keine Antwort gibt, hat das sicher seinen Grund. Dein letzter Post ist auch gerade einmal 2 Tage alt. Bitte versuch dich ein wenig zu gedulden und nicht unnötig die Threads mit so vielen inhaltslosen ein bis zweizeilern voll zu spammen, du bekommst sicher später noch eine Antwort.

    Danke!

  15. #15
    Alles klar

    Naja, mein Lösungsansatz bisher war, zu schauen, wie die Scrollmessages im Vx Ace konzipiert wurden und zu versuchen, das auf das Skript zu übertragen. Leider bin ich noch nicht so weit, daß ich das hinbekomme ohne daß das komplette Script an die Wand fährt wie ein alkoholisierter Autofahrer.

  16. #16
    Zu Punkt 2: Ich kann mich auch irren, aber hat Window_Selectable nicht von Haus aus Scrollsupport? Probier mal "L" und "R" (Sollte Bild ↑ und Bild ↓ bei der Standard-Tastaturbelegung sein). Stimme dir aber zu, so wie es jetzt ist, ist es aber wohl ziemlich hässlich zu bedienen ist, verstehe auch nicht, warum das Ding überhaupt mit einem Window_Selectable realisiert wurde.

    Edit: Okay, hat es wohl nicht und scheint sowieso nicht so zu funktionieren wie ich dachte sondern einfach "seitenweise" zu springen...

    Zitat Zitat von Ghabry Beitrag anzeigen
    Aber kein Plan ob das Steinzeit-Ruby 1.9 schon die last-Methode hat, Stand der Technik ist Ruby 2.4
    Die hatte selbst Ruby 1.8 schon

    Geändert von Cepanks (03.09.2018 um 16:41 Uhr)

Berechtigungen

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