• Anmelden

1

Samstag, 18. Juni 2016, 12:44

Tiles zur Laufzeit dauerhaft verändern

Hallo,

Mit folgendem Call Script ist es ja möglich Tiles ingame, also zur Laufzeit, zu verändern.

Quellcode

1
$game_map.data[x, y, layer] = ID


Bei einem Teleport auf eine andere Map geht die Änderung leider verloren.
Beim Speichern des Spielstands ist die Änderung nach dem Laden zwar weiterhin vorhanden. Sobald allerdings im Maker das Projekt erneut gespeichert wird, unabhängig ob Änderungen vorgenommen wurden, ist beim Laden des Spielstandes die zuvor getätigte Tile Änderung nicht mehr da. Meine Fragen also nun:

- Ist es möglich auch nach einem Teleport die Änderung beizubehalten?
- Ist es möglich diese Änderungen in einem Save dauerhaft speichern zu können?

Vielen Dank!

greetz

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »schM0ggi« (18. Juni 2016, 17:10)


2

Samstag, 18. Juni 2016, 21:05

Wenn sich das Projekt ändert, wird beim Laden von Spielstände die Game_Map neu geladen, um auf Änderungen wie neue Events oder ähnliches zu reagieren. Deswegen werden deine gemachten Änderungen überschrieben.

Man könnte dafür was scripten. Ich guck mal, was ich da zaubern kann.

Edit Ich hätte da etwas. Kannst Du mal testen, ob das Script bei dir läuft und ermöglicht, was Du brauchst?
Spoiler: Code

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#==============================================================================
# ** Tile Replacement [Version 1.0]
#----------------------------------------------------------------------------
#  Erweitert die Game_Map Klasse um die Möglichkeit, Tiles auf der aktuellen
#  Karte dynamisch zu ersetzen und diese Ersetzung dauerhaft im Spielstand
#  zu speichern.
#  Die neuen Methoden sind:
#    $game_map.replace_tile( x, y, layer, new_tile_id )
#      Ersetzt ein Tile an der gegebenen Position [x,y,layer] durch
#      ein neues Tile mit der ID *new_tile_id*
#    $game_map.remove_replace_tile( x, y, layer )
#      Entfernt eine bestimmte Ersetzung auf der aktuellen Map.
#      !Diese Änderung wird erst beim neubetreten der Map aktiv!
#    $game_map.clear_replacements
#      Entfernt alle Ersetzungen auf der aktuellen Map.
#      !Diese Änderung wird erst beim neubetreten der Map aktiv!
#----------------------------------------------------------------------------
#  Autor: Playm
#  Datum: Juni 2016
#  Maker: RPG Maker XP
#  Einfache Nutzung in nicht-kommerziellen  RMXP  Projekten ist gestattet.
#  Keine kommerzielle Nutzung gestattet. Für Lizenzen an den Autor wenden.
#  Keine Weiterverbreitung in originaler oder abgeänderter Form gestattet.
#==============================================================================
# ** Game_Map
#==============================================================================
class Game_Map
  #--------------------------------------------------------------------------
  # * Alias
  #--------------------------------------------------------------------------
  alias_method( :org_setup_wo_prxytles, :setup )
  alias_method( :org_ini_wo_prxytles, :initialize )
  alias_method( :org_update_wo_prxytles, :update )
  #--------------------------------------------------------------------------
  # * Initialization
  #--------------------------------------------------------------------------
  def initialize
    org_ini_wo_prxytles
    @replacement_tiles = Replacement_Tiles.new 
  end
  #--------------------------------------------------------------------------
  # * Setup
  #     map_id : map ID
  #--------------------------------------------------------------------------
  def setup(*args)
    org_setup_wo_prxytles(*args)
    replace_tiles_on_map
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    org_update_wo_prxytles
    if @replacement_tiles.need_refresh
      replace_tiles_on_map
      @replacement_tiles.need_refresh = false
    end
  end
  #--------------------------------------------------------------------------
  # * Do Replacement
  #--------------------------------------------------------------------------
  def replace_tiles_on_map
    print("replace tiles on map")
    @replacement_tiles.for_map( @map_id ).each do |x,y,layer,replacement|
      print( [x,y,layer].inspect, ' = ', replacement )
      @map.data[x,y,layer] = replacement
    end
  end
  #--------------------------------------------------------------------------
  # * Replace Tile at Position (X|Y|Layer) with new Tile
  #--------------------------------------------------------------------------
  def replace_tile( x, y, layer, new_tile_id )
    @replacement_tiles.add( map_id, x, y, layer, new_tile_id )
  end
  #--------------------------------------------------------------------------
  # * 
  #--------------------------------------------------------------------------
  def remove_replace_tile( x, y, layer )
    @replacement_tiles.remove( @map_id, x, y, layer )
  end
  #--------------------------------------------------------------------------
  # * 
  #--------------------------------------------------------------------------
  def clear_replacements
    @replacement_tiles.clear_map( @map_id )
  end
end
#==============================================================================
# ** Replacement_Tiles
#==============================================================================
class Replacement_Tiles
  attr_accessor( :need_refresh )
  def initialize
    @tile_hash = {}
    @need_refresh = false
  end
  def for_map( map_id )
    tiles_for_map = []
    @tile_hash.each do |map_x_y_l, tile|
      k_map, k_x, k_y, k_layer = map_x_y_l
      if k_map == map_id
        tiles_for_map.push( [k_x, k_y, k_layer, tile] )
      end
    end
    return tiles_for_map
  end
  def add( map_id, x, y, layer, new_tile_id )
    @need_refresh = true
    @tile_hash[[map_id, x, y, layer]] = new_tile_id
  end
  def remove( map_id, x, y, layer )
    @tile_hash.delete([map_id, x, y, layer])
  end
  def clear_map( map_id )
    @tile_hash.each_key do |map_x_y_l|
      if map_x_y_l[0] == map_id
        @tile_hash.delete(map_x_y_l)
      end
    end
  end
end
zum Lesen den Text mit der Maus markieren

Das Rückgängigmachen einer Ersetzung ist noch nicht so hübsch. Theoretisch müsste man dafür bei jedem Rückgängig machen die Map.rxdata nochmal laden. Alternativ könnte man sich das originale Tile beim Ersetzen auch merken - hm. Ich überleg da noch. Vielleicht kommt eine Version 1.1 mal raus.

3

Sonntag, 19. Juni 2016, 02:22

Hey,

Sehr fein, das klappt wunderbar!
Für mich persönlich war lediglich das dauerhafte Ändern der Tiles von Bedeutung daher empfinde ich den notwendigen Map Wechsel für das Rückgängig machen nicht so schlimm. Zumal man auch ein weiteres mal mit replace den "original" Zustand herstellen könnte. Aber vielleicht würde es jemandem Anderem weiter helfen, wenn die Undo Funktion auch ohne dem Neubetreten der Map klappt. Meine Wünsche sind zumindest vollends erfüllt, vielen Dank!

greetz

Josey

Storyteller

Motto: "Was du nicht willst, das man dir tu', füge keinem And'ren zu!"

  • Nachricht senden

4

Sonntag, 19. Juni 2016, 10:19

Rückmeldung eines stillen Nutznießers: Ich wusste gar nicht, dass, wenn ich einzelne Tiles ändere, diese nicht erhalten bleiben D:
Für mein HM-Spiel ändere ich ja hier und da den Boden für die Felder. Da hätte ich aber doof geguckt XD
Deswegen bedanke ich mich einfach mal mit und freue mich über die Lösung eines Problemes, das mir noch gar nicht aufgefallen ist :D
\o/
Notfalldiscord: Hier klicken


  • Joseys Wuselei

    • Meine Story - Pausiert
      Lust auf Abenteuer?
      So richtig mit Selbstbestimmung?
      Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
      "Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
      Hier die Antwort:
      Bild
      Bild
      Hier könnt ihr euren Lieblingschar wählen ;D
      Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt.
    • Meine Arbeiten
      Einige Ressourcen, vor allem Baby-Tiere, aber auch alle Requests, die ich erfüllt habe.
      Bild

      Bild

      In unregelmäßigen Abständen fasse ich alles Neue, was so im Studio passiert ist, zusammen. -Pausiert-
      Bild
    • Meine Fähigkeiten
      Maker: :rmxp: XP
      :rainbow: Pixeln: :star: :star: :star: :star: :star-empty: :star-empty:
      :image: Mappen: :star: :star: :star: :star: :star: :star-empty:
      :wrench-screwdriver: Eventen: :star: :star: :star: :star: :star-empty: :star-empty:
      :puzzle: Scripten: :star: :star-half: :star-empty: :star-empty: :star-empty: :star-empty:
      :music: Komponieren: :star-half: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty:
    • (Mein) Autismus
      Ich bin im autistischen Sprektrum-
      sollte ich mich komisch verhalten, oder unhöflich wirken
      (oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
      ist das nicht beabsichtigt.


      Josey. Epicgarantie.
      Nehmt das bloß nicht ernst! D:
    • Meine Welt
      Mein Ehemann Kain! :heart_full: :*
      Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
      Er verdient einfach einen Platz ( :medal: ) in meiner Signatur! XD
      :heart-half:
    • Mein Support
      Der In-Game-Charset-Generator!
      Erstelle Random-NPCs mit Charsetteilen!

      Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
      Bastelt mal Banner! : D

    • Meine beendeten Contests
      [Pixelcontest] Rund um den Kürbis
      Bild
      Abstimmung
      Siegerehrung

      Das Wunder der Berge
      Bild
      Abstimmung
      Siegerehrung
    • Meine Contests
      Bild Ein Schreibcontest in Arbeit! : D Bild
  • Joseys Spiele

    • Endless Ending
      :rmxp: Endless Ending
      (Arbeitstitel, "ernstes Projekt")

      Bild

      Eine Reise durch die Wüste.
      Sieben mächtige Gegenstände.
      Unendlich viele Aufgaben.

      Und die Götter haben die Würfel.
    • Scripted Desaster
      :rmxp: Scripted Desaster
      ("nicht ganz so ernstes Projekt")

      Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
      Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
      Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.

      Das bedeutet doch Spaß...
    • Pokémon EV
      :rmxp: Pokemon EV
      ("Zeitvertreib nebenbei - Kreatief-Helfer")

      Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
      Ist inzwischen alles schonmal dagewesen. XD
    • Lost Island
      :rmxp: Harvest Moon - Lost Island
      (Arbeitstitel, "Eventtechnik-Projekt")

      Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
      Das Spiel ist ein Harvest Moon Abklatsch. XD
      Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
  • Joseys Fortschritt

    • Endless Ending
      :hourglass: Story: 60%
      :foaf: Charas: 20%
      :leaf: Maps: 01%
      :ruby: Zeichnungen: 05%
      :color: Grafiken: 30%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      ...ist nicht viel, huh? ^^°
    • Scripted Desaster
      :hourglass: Story: 10%
      :foaf: Charas: 60%
      :leaf: Maps: 30%
      :ruby: Zeichnungen: 01%
      :color: Grafiken: 60%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      Gut Ding...
    • Pokemon EV
      :hourglass: Story: 60%
      :foaf: Charas: 10%
      :leaf: Maps: 00%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 80%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 70%
      Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht...
    • Lost Island
      :hourglass: Story: 100%
      :foaf: Charas: 10%
      :leaf: Maps: 90%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 60%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 00%
      Das macht richtig Spaß XD
  • Huiii

    Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.

5

Sonntag, 19. Juni 2016, 18:31

Freut mich, dass es euch weiterhilft. Habe das Script jetzt auf Version 1.1 angehoben und das Undo erfordert jetzt keinen Mapwechsel mehr.
Script findet ihr hier: RPG-Studio.org - Skripte, Ressourcen & Tutorials » Skripte & Plugins » Tile Replacement [RMXP]

Josey

Storyteller

Motto: "Was du nicht willst, das man dir tu', füge keinem And'ren zu!"

  • Nachricht senden

6

Sonntag, 19. Juni 2016, 20:07

Super :D
Danke :3
Notfalldiscord: Hier klicken


  • Joseys Wuselei

    • Meine Story - Pausiert
      Lust auf Abenteuer?
      So richtig mit Selbstbestimmung?
      Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
      "Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
      Hier die Antwort:
      Bild
      Bild
      Hier könnt ihr euren Lieblingschar wählen ;D
      Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt.
    • Meine Arbeiten
      Einige Ressourcen, vor allem Baby-Tiere, aber auch alle Requests, die ich erfüllt habe.
      Bild

      Bild

      In unregelmäßigen Abständen fasse ich alles Neue, was so im Studio passiert ist, zusammen. -Pausiert-
      Bild
    • Meine Fähigkeiten
      Maker: :rmxp: XP
      :rainbow: Pixeln: :star: :star: :star: :star: :star-empty: :star-empty:
      :image: Mappen: :star: :star: :star: :star: :star: :star-empty:
      :wrench-screwdriver: Eventen: :star: :star: :star: :star: :star-empty: :star-empty:
      :puzzle: Scripten: :star: :star-half: :star-empty: :star-empty: :star-empty: :star-empty:
      :music: Komponieren: :star-half: :star-empty: :star-empty: :star-empty: :star-empty: :star-empty:
    • (Mein) Autismus
      Ich bin im autistischen Sprektrum-
      sollte ich mich komisch verhalten, oder unhöflich wirken
      (oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
      ist das nicht beabsichtigt.


      Josey. Epicgarantie.
      Nehmt das bloß nicht ernst! D:
    • Meine Welt
      Mein Ehemann Kain! :heart_full: :*
      Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
      Er verdient einfach einen Platz ( :medal: ) in meiner Signatur! XD
      :heart-half:
    • Mein Support
      Der In-Game-Charset-Generator!
      Erstelle Random-NPCs mit Charsetteilen!

      Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
      Bastelt mal Banner! : D

    • Meine beendeten Contests
      [Pixelcontest] Rund um den Kürbis
      Bild
      Abstimmung
      Siegerehrung

      Das Wunder der Berge
      Bild
      Abstimmung
      Siegerehrung
    • Meine Contests
      Bild Ein Schreibcontest in Arbeit! : D Bild
  • Joseys Spiele

    • Endless Ending
      :rmxp: Endless Ending
      (Arbeitstitel, "ernstes Projekt")

      Bild

      Eine Reise durch die Wüste.
      Sieben mächtige Gegenstände.
      Unendlich viele Aufgaben.

      Und die Götter haben die Würfel.
    • Scripted Desaster
      :rmxp: Scripted Desaster
      ("nicht ganz so ernstes Projekt")

      Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
      Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
      Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.

      Das bedeutet doch Spaß...
    • Pokémon EV
      :rmxp: Pokemon EV
      ("Zeitvertreib nebenbei - Kreatief-Helfer")

      Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
      Ist inzwischen alles schonmal dagewesen. XD
    • Lost Island
      :rmxp: Harvest Moon - Lost Island
      (Arbeitstitel, "Eventtechnik-Projekt")

      Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
      Das Spiel ist ein Harvest Moon Abklatsch. XD
      Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
  • Joseys Fortschritt

    • Endless Ending
      :hourglass: Story: 60%
      :foaf: Charas: 20%
      :leaf: Maps: 01%
      :ruby: Zeichnungen: 05%
      :color: Grafiken: 30%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      ...ist nicht viel, huh? ^^°
    • Scripted Desaster
      :hourglass: Story: 10%
      :foaf: Charas: 60%
      :leaf: Maps: 30%
      :ruby: Zeichnungen: 01%
      :color: Grafiken: 60%
      :clipboard: Scripte: 70%
      :music-beam-16: Musik: 00%
      Gut Ding...
    • Pokemon EV
      :hourglass: Story: 60%
      :foaf: Charas: 10%
      :leaf: Maps: 00%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 80%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 70%
      Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht...
    • Lost Island
      :hourglass: Story: 100%
      :foaf: Charas: 10%
      :leaf: Maps: 90%
      :ruby: Zeichnungen: 00%
      :color: Grafiken: 60%
      :clipboard: Scripte: 90%
      :music-beam-16: Musik: 00%
      Das macht richtig Spaß XD
  • Huiii

    Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.

Ähnliche Themen

Verwendete Tags

dauerhaft, swap, Tile, Tiles, Verändern

Social Bookmarks