Ergebnis 1 bis 11 von 11

Thema: [RGSS3] Getter für Mapnames

  1. #1

    [RGSS3] Getter für Mapnames

    Heyho
    Ich will mir so eine Art (Cheat)Menü bauen, in welchem man eine Liste mit allen Maps hat, zu welchem man sich sofort beamen kann. Den Getter mit dem ich den aktuellen MapNamen holen kann, kenn ich bereits.
    Code:
    $game_map.display_name
    Gibt es denn bereits einen Getter, mit denen ich auch den Name einer spezifischen Map fragen kann ? Wenn nicht, wo und wie kann ich diesen implementieren ?

    Geändert von MindXperience (04.10.2013 um 13:43 Uhr)

  2. #2
    Meinst du damit, dass du einen Map-Index angibst und den Namen als String zurück bekommst, oder wie genau stellst du dir das vor?

  3. #3
    ja genau so
    Code:
    def get_map_name (c)
    return String Mapname der Map C
    end

  4. #4
    Du wirst wohl den Namen aus der Datei holen müssen. Ich würde dir raten eine Art von Cache anzulegen und die Namen der Maps zu cachen sobald sie geladen werden.
    Falls im Cache noch kein Wert hinterlegt ist lädst du die Karte von der Festplatte, liest den Namen, speicherst den Namen im Cache, und gibst den Namen aus dem Cache aus.

    Das bedeutet natürlich, dass, falls der Name noch nicht verwendet wurde, das erstemal ein klein wenig länger dauern wird um den Namen zu erfragen.
    Kennst du dich ausreichend mit Ruby aus um das Script dazu zu schreiben?

  5. #5
    Woah, das ist etwas zu hoch für mich. Mit dem Cache hab ich mich noch gar nicht beschäftigt.
    Könnte man vllt ein String-Array mit den Mapnames erstellen ?

  6. #6
    In der Standard "Cache"-Klasse des Ace wird sehr elegant eine Hashmap verwendet zum Cachen von Bilddateien. Du kannst genauso vorgehen:
    Code:
    module MapNames
      
      def self.get_map_name(map_id)
        @cache ||= {}
        if @cache[map_id] == nil
          @cache[map_id] = load_map_name(map_id)
        end
        return @cache[map_id]
      end
      
      def self.load_map_name(map_id)
        map = load_data(sprintf("Data/Map%03d.rvdata2", map_id))
        return map.display_name
      end
      
    end
    Der Code ist nicht getestet sondern nur schnell dahingeschrieben.
    Ich habe mit dem Ace noch nie gearbeitet, daher bin ich mir nicht ganz sicher ob es so funktionieren wird. Aber es sollte ausreichen um dich auf den richtigen Weg zu leiten.
    Benutze die Hilfedatei des Makers für weitere Informationen über einen Hash.

  7. #7
    Woah das Skript funktioniert, zu geil ^^
    besten Dank für deine Hilfe

  8. #8
    Das wäre auch einfacher gegangen
    In der Datei "MapInfos.rvdata2" befindet sich nämlich bereits ein Hash nach dem Muster {mapID => RPG::MapInfo}, der vom DataManager in die Variable $data_mapinfos geladen wird. Was RPG::MapInfo ist, steht in der Hilfe-Datei, wichtig ist für uns hier nur, dass man über $data_mapinfos[mapID].name an den Map-Namen kommt.

  9. #9
    Das werd ich gleich ausprobieren, danke für den Tipp

  10. #10
    Das ist natürlich eine sehr viel bessere Variante. Es war mir nicht bewusst, dass der Ace soetwas bereits cached. Aber vielleicht konnte mein Code dir trotzdem ein wenig weiterhelfen dich mit Ruby zurecht zu finden.

  11. #11
    Es gibt bereits einen fertigen Script für ein erweitertes Debugmenü, es hat sogar noch weitere Funktionen wie z.B. Testkämpfe, oder Item-Auswahl...

Berechtigungen

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