Ergebnis 1 bis 18 von 18

Thema: "Suche(/Habe ein Problem) mit Script X"-Thread

  1. #1

    "Suche(/Habe ein Problem) mit Script X"-Thread

    Hallö,

    Ich wollte mal einen Thread aufmachen, bei dem Scripts angefordert werden können und dann je nach Möglichkeit gesucht bzw. von Anderen gepostet werden.
    Da ich zurzeit das Gefühl habe demnächst öfter nach kleinen Scripts, wenn nicht sogar nur nach Zeilen zu fragen, dachte ich mir, bevor ich für jede kleine Frage einen neuen Thread aufmache, mache ich lieber einen für alle Fragen gleichzeitig auf.


    Geändert von Stray (16.07.2011 um 01:25 Uhr)

  2. #2
    Diese Zeilen sollten reichen:
    Code:
    class Game_Event < Game_Character
      def set_name(p_new_name)
        @event.name = p_new_name
      end
    end
    Wenn du also die Instanz von Game_Event hast kannst du ihr diesen Befehl übermitteln:
    Code:
    some_event.set_name("Irgend ein Name")
    Solltest du Probleme damit haben die Instanz von Game_Event zu finden welche ein Event im Maker repräsentiert so musst du folgendes tun:
    Code:
    some_event = $game_map.events[SOME_ID]
    wobei SOME_ID die ID darstellt welche dein Event im Maker besitzt.

    Geändert von Cornix (14.07.2011 um 22:56 Uhr)

  3. #3
    Ich hab's mehrere Male probiert. Ich glaub' ich hab nicht so ganz verstanden wie man vorgeht.

    Geändert von Stray (15.07.2011 um 18:24 Uhr)

  4. #4
    Hier, kopiere diese Zeilen von Code an irgendeine Stelle oberhalb von "Main" innerhalb der Scriptliste deines Projektes :
    Code:
    class Game_Event < Game_Character
      def get_name
        return @event.name
      end
      def set_name(p_new_name)
        @event.name = p_new_name
      end
    end
    Der Befehl "get_name" wird dir den Namen eines Game_Events zurück geben und der Befehl "set_name(parameter)" wird den Namen verändern.

    Wenn du den Namen eines Events erhalten willst musst du folgenden Custom_Script verwenden:
    Code:
    $game_map.events[SOME_ID].get_name
    Wobei SOME_ID eine Zahl darstellt, nämlich die ID welche dein Event im Maker besitzt.
    Wenn du also den Namen des ersten Events auf der Karte erhalten willst musst du dieses Custom_Script eingeben:
    Code:
    $game_map.events[1].get_name
    Die ID welche ein Event besitzt wird vom Maker festgelegt und zwar in der Reihenfolge wie die Events auf der Karte erstellt werden.
    Wenn du den Namen eines Events schnell und einfach im Spiel überprüfen willst, zum Beispiel um zu testen ob der Code von mir funktioniert, dann musst du diese Zeilen als Custom script in ein Event schreiben:
    Code:
    e = $game_map.events[@event_id]
    print(e.get_name)
    Dadurch wird dir über den Print-Befehl der Name des Events ausgegeben welches gerade läuft.

    Wenn du den Namen ändern willst läuft dies beinahe genauso ab:
    Du benutzt das Custom_Script:
    Code:
    $game_map.events[SOME_ID].set_name(SOME_NAME)
    Um den Namen von dem Event mit der ID SOME_ID zu SOME_NAME zu ändern.
    Als Beispiel:
    Code:
    $game_map.events[@event_id].set_name("Hanz")
    Dadurch würde das Event welches gerade läuft seinen Namen zu Hanz ändern.
    Code:
    $game_map.events[15].set_name("Roboter Nr.5")
    Hiermit würde das Event mit der ID nummer 15 seinen Namen zu Roboter Nr.5 ändern.

    Ich habe dies mit dem RPG-Maker XP ausprobiert und es hat wundervoll funktioniert, mit dem RPG-Maker VX sollte es genauso funktionieren aber ich kann dies nicht mit 100% Sicherheit sagen.

  5. #5
    Gut, das klappt. Vielen Dank.

    Schon das nächste Problem:

    Geändert von Stray (16.07.2011 um 01:37 Uhr)

  6. #6
    Die Projektdatei welche ich von dem von dir angegebenen Link gedownloaded habe funktioniert nicht.
    Das Projekt funktioniert zwar schon, allerdings nicht das Menü. Es scheint so, als ob das Spiel, bei jedem Mal wo das Menü geöffnet werden soll, auf den Titelbildschirm zurückkehrt. Somit kann ich es auch leider nicht testen.

    Allerdings um dein Problem zu lösen, das Journal-Script von dir besitzt bereits eine eingebaute Funktion um das Journal direkt von der Karte aus zu öffnen, es ist derzeit auf die "L"-Taste des Makers gelegt, standardmäßig sollte dies das Q auf einer herkömmlichen deutschen Tastatur sein.
    Hier ist der entsprechende Part direkt aus dem Script kopiert:
    Code:
    class Scene_Map
          alias journal_update update
         
          def update
            journal_update
            if Input.trigger?(Input::L)
              $scene = Scene_Journal.new(1)
            end
          end
        end
    Aber das Journal sollte sich theoretisch (ich konnte es wie gesagt nicht testen) auch recht leicht in das andere Menü einbauen lassen da es so wie es scheint das Standardmenü zu immitieren versucht.
    Falls das Menü-Script bei dir funktioniert dann versuche einmal folgenden Code.

    Ich habe zwei Veränderungen vorgenommen, an diesen beiden Stellen:
    Code:
    if Input.trigger?(Input::C)
          # Does stuff based on the index of @command when you pressed C
          case @command.index
          when 0
            # Plays decision SE if there are Actors in the party, then opens item
            # menu.
            if $game_party.actors.size >= 1
              $game_system.se_play($data_system.decision_se)
              $scene = Scene_Item.new
            # Plays buzzer if the party has no actors
            else
              $game_system.se_play($data_system.buzzer_se)
            end
          when 1
            # Same as above, but goes into picking actor
            if $game_party.actors.size >= 1
              $game_system.se_play($data_system.decision_se)
              @command.active = false
              @status.active = true
              @status.index = 0
            else
              $game_system.se_play($data_system.buzzer_se)
            end
          when 2
            # Same as above, but goes into picking actor
            if $game_party.actors.size >= 1
              $game_system.se_play($data_system.decision_se)
              @command.active = false
              @status.active = true
              @status.index = 0
            else
              $game_system.se_play($data_system.buzzer_se)
            end
          when 3
            # Same as above, but goes into picking actor
            if $game_party.actors.size >= 1
              $game_system.se_play($data_system.decision_se)
              @command.active = false
              @status.active = true
              @status.index = 0
            else
              $game_system.se_play($data_system.buzzer_se)
            end
          when 4  # journal
              # Play decision SE
              $game_system.se_play($data_system.decision_se)
              # Switch to journal scene
              $scene = Scene_Journal.new
          when 5
            # Plays buzzer SE if save is disabled, opens save if it isn't
            if $game_system.save_disabled
              $game_system.se_play($data_system.buzzer_se)
            else
              $game_system.se_play($data_system.decision_se)
              $scene = Scene_Save.new
            end
          when 6
            # Goes to the slightly modded load menu and plays decision SE
            $game_system.se_play($data_system.decision_se)
            $scene = Scene_LoadMenu.new
          when 7
            # ENDS THE GAME
            $game_system.se_play($data_system.decision_se)
            $scene = Scene_End.new
          end
        end
    Dieses Stück Code aus der Update-Methode entscheided wie bei der Eingabe von "C", der "Bestätigen"-Taste im Maker, vorgegangen werden soll.
    Ich habe diese Stelle:
    Code:
    when 4  # journal
              # Play decision SE
              $game_system.se_play($data_system.decision_se)
              # Switch to journal scene
              $scene = Scene_Journal.new
    (kopiert aus dem Journal-Script)
    An die entsprechende Stelle eingefügt.
    (Zeilen 542 - 546)

    Dieses Stück Code aus der Main-Methode regelt die Menü-Optionen des Command-Windows, also dem Fenster welches die Auswahl und Eingabe des Spielers ermöglicht.
    Code:
    @command = Window_Command_WcW.new(16, 16, 128, [["032-Item01", 
            $data_system.words.item], ["044-Skill01", $data_system.words.skill],
            ["001-Weapon01", $data_system.words.equip], ["050-Skill07", "Status"],
            ["044-Skill01", "Journal"],["047-Skill04", "Sichern"], ["048-Skill05", "Laden"], ["x-icon","Beenden"]
            ])
    Ich habe diese Eingabe hinzugefügt:
    Code:
    ["044-Skill01", "Journal"]
    Der erste String, nämlich: "044-Skill01" stellt den Namen des Bitmaps dar welches als Icon vor die Option gestellt werden soll.
    Der zweite String, "Journal" stellt den Namen der Option selbst dar.

    Die Zeilen hierfür sind: 411 - 415.

    Versuche einmal ob es soweit funktioniert, falls nicht, solltest du vielleicht einmal ein anderes Projekt hochladen an welchem ich die Einstellungen selber testen kann.

  7. #7
    Vielen Dank.

    Leider funzt es nicht so ganz. Das Enhanced Default Menu System funktioniert nur, wenn man alle Journal Scripts rausnimmt.
    Dann steht nun auch das Journal in der Liste beim neuen Menü, aber ohne Journal lässt sich da natürlich nichts öffnen.
    Mit Q lässt sich, sofern vorhanden das Journal aber schon öffnen (hätt ich wirklich früher merken sollen).

    Hier noch mal ein Testgame mit allen Scripts. Hier sind die Journals mit drin. Also, wenn sie weg sind, funktioniert auch das Menü.
    http://www.file-upload.net/download-3595823/TestgameFuerScript.rar.html
    Deine Verbesserungen sind mit dabei.

    EDIT:
    Wegen den Namen eines Events ändern... ich brauch es unbedingt so, dass der Name bleibt.
    Wenn ich die Map verlasse, und wieder zurück komme, ist der Name wieder der selbe wie zuvor.

    Und wer ein Script hat, welches Animationen unter einem bestimmten Terrain versteckt, dem wäre ich auch sehr dankbar.

    Geändert von Stray (20.07.2011 um 01:09 Uhr)

  8. #8
    bump

    (es gibt doch bestimmt eine Sache davon die man so recht schnell lösen kann(?))

  9. #9
    Ich glaube nicht, dass es einfach so möglich ist den Namen eines Events permanent zu ändern da dieser nicht im Speicherstand sondern in der Karte gespeichert wird. Und wie wir wissen wird nicht für jeden Speicherstand die gesamte Menge aller Karten einmal kopiert.
    Aber vielleicht erzählst du uns einmal wofür du diese Möglichkeit überhaupt brauchst und dann könnten wir dir wahrscheinlich einen besseren Weg zeigen welcher einfacher umzusetzen sein wird.

  10. #10
    Um den Namen einer Figur im Spiel zu erfahren muss man erst dannach fragen.
    Der Name steht jeweils über der Textbox und wird automatisch durch's Hermes Script über der Textbox angezeigt.
    Deswegen müsste er permanent verändert werden, da der Name, der über der Textbox steht aus dem Event-Namen geholt wird.

    Geändert von Stray (27.07.2011 um 21:38 Uhr)

  11. #11
    Soll das ein Witz sein?
    Verändere einfach das andere Script um den Namen manuell in der Textbox ändern zu können.
    Du könntest einfach einen Hash anlegen welcher die Kombination aus Event_ID und Map_ID in einem Array als Key mit einem Namen mappt. Darüber hast du dann jederzeit vollen Zugriff darauf welche Namen für welches Event angezeigt werden würden und es wäre sehr einfach in einen Speicherstand einbaubar.

  12. #12
    Ich hab leider kaum Ahnung vom Scripten. Ich kann manches gerade mal lesen bzw. entziffern.

  13. #13
    Hier, dies wäre eine Art Template für so eine Namensdatabase.


    Lass dich von der Größe nicht zu sehr einschüchtern. Der größte Teil hiervon ist eine Kopie der Standardfunktionen zum erstellen eines neuen Speicherstandes und dem Laden und Speichern eines Spielstandes, modifiziert damit sie eine Namensdatabase enthalten.

    Der Code für die Database selbst ist lediglich dieser Teil:
    Code:
    class Database_Names
      
      def initialize
        @data_hash = {}
      end
      
      def set_name_of_event(event, value)
        key = [event.map_id, event.id]
        @data_hash[key] = value
      end
      
      def set_name_of_id(map_id, event_id, value)
        key = [map_id, event_id]
        @data_hash[key] = value
      end
      
      def get_name_of_event(event)
        key = [event.map_id, event.id]
        name = @data_hash[key]
        if name == nil
          return ""
        end
        return name
      end
      
      def get_name_of_id(map_id, event_id)
        key = [map_id, event_id]
        name = @data_hash[key]
        if name == nil
          return ""
        end
        return name
      end
      
    end
    Und es ist auch eigentlich nicht mehr als ein Wrapper um einen Hash.

    Du hast damit folgende vier Funktionen:
    Code:
    set_name_of_event(event, value)
    Damit kannst du einem Event direkt einen Namen zuweisen.

    Code:
    set_name_of_id(map_id, event_id, value)
    Damit kannst du einen Namen einem Event auf einer derzeit nicht geladenen Karte zuweisen, zum Beispiel gibst du die map_id 1 und die Event_id 4 an um dem vierten Event auf der ersten Karte deines Projektes einen Namen zu geben.

    Equivalent zu dem speichern von Namen kannst du mit den Funktionen:
    Code:
    get_name_of_event(event)
    und
    Code:
    get_name_of_id(map_id, event_id)
    Den Namen eines Events wiedergeben lassen.

    Ich weis natürlich nicht welche anderen Scripte du derzeit in deinem Projekt verwendest daher kann ich dir auch nicht ganz genau sagen was du zu tun hast um diese Database in dein Projekt einzubauen.

  14. #14
    Auf allefälle sehr hilfreich. Danke, ich werd's versuchen.


  15. #15
    Hallo ,
    wie ist es möglich parallele Ereignisse zu erstellen?

    Hatte irgendwas mit "Threads" gelesen gehabt.

    Bei RPG:ommonEvent klasse weiß ich nicht wie das funktioniert.

    Ich möchte halt nur parallel zwei oder mehrere Ereignisse laufen haben.

  16. #16
    Du führst irgendwo auf der Map einen Doppelklick aus, dann klickst du im zweiten Kasten von unten Links auf:

    "Action Button"
    "Player Touch"
    "Event Touch"
    "Autorun"
    "Parallel Process" <<< Genau dasHier geht's übrigens um Scripts.
    --- --- --- --- --- ---


    Das folgende Laufgeräusch-Script soll um einen Schritt-Sound abzuspielen
    nicht mehr ablesen, wann der Held sich bewegt, sondern wann dieser von
    einem zum nächsten Kästchen wechselt bzw. wann er die Position X Y wechselt.

    Wer kann helfen, weil er so nett ist und Scripting drauf hat? :3
    Ich brauch's, weil ein anderes Script bereits die Bewegungen des Helden eingenommen haben.

    Geändert von Stray (31.08.2011 um 00:41 Uhr)

  17. #17
    bump

    EDIT: Problem gelöst

    Geändert von Stray (09.09.2011 um 01:15 Uhr)

  18. #18
    Gibt es ein Script, mit dem man ein (noch nicht vorhandenes!) Event über den Helden und andere Events legen kann, sobald sie ein bestimmtes Terrain passieren, z.B. hohes Gras, um nicht diesen "Körper-bis-zu-1/3-Transparent"-Effekt verwenden zu müssen?

Berechtigungen

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