• Login

Josey

Storyteller

  • "Josey" started this thread

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

  • Send private message

181

Wednesday, March 20th 2019, 7:57pm

Zum Text: Funktioniert! :D

Zum Bild: Klappt! :D

Zum PS: Ja, kein Problem, hab ein Worddoku wo genau steht, was für was ist und es fällt mr auch leichter, wenn alles in einzelne Scripts aufgeteilt ist XD

Danke dir! X3

Eine Frage hab ich noch: Wieso kann ich den Cursor im Rezeptmenü noch bewegen, wenn das Help-Window visible ist und im Freien Kochen nicht?
Ich seh den Unterschied nicht :<
<- Hatte vergessen, dass das Fenster nicht geupdated werden soll, wenn das Help_Window visible ist XD

Erstmal wieder fertig! XD
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.

This post has been edited 1 times, last edit by "Josey" (Mar 20th 2019, 7:57pm)


Josey

Storyteller

  • "Josey" started this thread

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

  • Send private message

182

Sunday, May 10th 2020, 4:32pm

Mag sich jemand das Script nochmal kurz anschauen und mir helfen, das Commandmenü zweispaltig zu machen? Das krieg ich nicht hin :)
Hier einmal der Scriptteil, um den es geht:
Das Modul dazu:
Spoiler

Ruby Source code

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
module CRAFTING
  # ----------------------------------------------------------------------------
  # Recipe Categories
  # ---------------------------------------------------------------------------- 
  # RECIPE_CATEGORIES ist ein Array, dessen Elemente Objekte / Structs / Hashs 
  # sind. Sowohl das Array selbst als auch die einzelnen Elemente sind 
  # dynamisch erweiterbar, ohne dass es einen Eingriff in andere Skripte gibt.
  RECIPE_CATEGORIES = [
    # Vorspeisen
    {:category_id => 1,
     :category_name => "Vorspeisen",
     :recipe_ids => [1,2] },
     # Hauptgerichte
    {:category_id => 2,
     :category_name => "Hauptgerichte",
     :recipe_ids => [3,4] },
     # Desserts
    {:category_id => 3,
     :category_name => "Desserts",
     :recipe_ids => [5,0] },
     # Anderes
    {:category_id => 4,
     :category_name => "Anderes",
     :recipe_ids => [1,0,6] }
  ] 
highlight to read

Die Scene:
Spoiler

Ruby Source code

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
#==============================================================================
# ** Scene_Crafting_Start
#------------------------------------------------------------------------------
#  Crafting menu (choice)
#==============================================================================
class Scene_Crafting_Recipe_Menu < Scene_Animation
  # Include HM main module for game data
  include HM
  include CRAFTING
 
  def initialize(menu_index = 0)
    @menu_index = menu_index
  end
 
  #--------------------------------------------------------------------------
  # * Main
  #--------------------------------------------------------------------------
  def main
    # Window commands
    @window_commands = []
    @category_ids = []
    # Füge noch "Alle Rezepte"-Option ein
    @window_commands.push("Alle Rezepte")
    @category_ids.push(0)
    # Gehe jede Kategorie durch aus RECIPE_CATEGORIES
    for category in RECIPE_CATEGORIES do
      @window_commands.push(category[:category_name])
      @category_ids.push(category[:category_id])
    end
    # Füge noch "Zurück"-Option hinzu
    @window_commands.push("Zurück")
 
    text = "Welches Rezept?"
    # Make windows
    # Korrektur y-Koordinate
    @command_window = Window_Command.new(640, @window_commands)
    @command_window.x = 0
    @command_window.y = 480 - @command_window.height
    @command_window.index = @menu_index#0
    @help_window = Window_Help.new(0,256,640,64)
    # Korrektur y-Koordinate
    @help_window.y = 480 - @command_window.height - @help_window.height
    @help_window.set_text(text,0)
    @skill_window = Window_HM_Crafting_Skill.new(0,0)
    # Background sprite
    inititialize_animation(0)
    # Get actor
    @actor = $game_party.actors[0]
    # Execute transition
    Graphics.transition
    # Main loop
    loop do
      # Update game screen
      Graphics.update
      # Update input information
      Input.update
      # Frame update
      update
      # Abort loop if screen is changed
      if $scene != self
        break
      end
    end
    # Prepare for transition
    Graphics.freeze
    # Dispose sprite
    dispose_sprites
    # Dispose windows
    @command_window.dispose
    @help_window.dispose
    @skill_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Update
  #--------------------------------------------------------------------------
  def update
    # Sprite
    update_sprites
    # Command Window
    @command_window.update
    # Command
    update_command
  end
  #--------------------------------------------------------------------------
  # * Update Command
  #--------------------------------------------------------------------------
  def update_command
    # ENTER
    if Input.trigger?(Input::C)
      # Play cancel SE
      $game_system.se_play($data_system.decision_se)
      # Zurück Button
      if @command_window.index == (@window_commands.size-1)
       # Zurück
        # Play cancel SE
        $game_system.se_play($data_system.cancel_se)
        # Switch to map screen
        $scene = Scene_Crafting_Start.new
      else
        # Gehe zu "Kochen nach Rezept"
        $scene = Scene_Crafting_Recipe.new(@category_ids[@command_window.index])
      end
 
      return
    end  
    # ESC
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Switch to map screen
      $scene = Scene_Crafting_Start.new
      return
    end  
  end
  #--------------------------------------------------------------------------
  # * Class End
  #--------------------------------------------------------------------------
end
highlight to read

Das normale Window_Command:
Spoiler

Ruby Source code

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
#==============================================================================
# ** Window_Command
#------------------------------------------------------------------------------
#  This window deals with general command choices.
#==============================================================================
 
class Window_Command < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     width    : window width
  #     commands : command text string array
  #--------------------------------------------------------------------------
  def initialize(width, commands)
    # Compute window height from command quantity
    super(0, 0, width, commands.size * 32 + 32)
    @item_max = commands.size
    @commands = commands
    self.contents = Bitmap.new(width - 32, @item_max * 32)
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@item_max
      draw_item(i, normal_color)
    end
  end
  #--------------------------------------------------------------------------
  # * Draw Item
  #     index : item number
  #     color : text color
  #--------------------------------------------------------------------------
  def draw_item(index, color)
    self.contents.font.color = color
    rect = Rect.new(4, 32 * index, self.contents.width - 8, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, @commands[index])
  end
  #--------------------------------------------------------------------------
  # * Disable Item
  #     index : item number
  #--------------------------------------------------------------------------
  def disable_item(index)
    draw_item(index, disabled_color)
  end
end
highlight to read


Wenn du das ganze Ding brauchst, bitte bescheid sagen, dann kommt ne Demo per PN. Das Script ist inzwischen zu sehr in alles andere integriert, um es sauber herauszulösen.
Zu beachten ist hier nur- neben der automatischen Auswahl der Kategorien aus dem Modul, dass das Ding sich den Index merkt, wo er zuletzt war, wenn man C drückt und den Index löscht, wnen man Zurück oder ESC drückt :)

Momentan sieht das Menü so aus:
Attachment 24201
Ich möchte es gerne so haben:
Attachment 24202

1.) Das ist mein bisheriges Edit des Window_Command, aktuell gibt es ein column_max = 2 im Initialize, und es funktioniert auch technisch (also die Klicks der unteren drei müssen in der rechten Spalte passieren), aber die Schriftzüge und das Fenster passen sich nicht an XD
Spoiler

Ruby Source code

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
#==============================================================================
# ** Window_Command
#------------------------------------------------------------------------------
#  This window deals with general command choices.
#==============================================================================
 
class Window_Command2 < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     width    : window width
  #     commands : command text string array
  #--------------------------------------------------------------------------
  def initialize(width, commands)
    # Compute window height from command quantity
    super(0, 0, width, commands.size * 32 + 32)
    @column_max = 2
    @item_max = commands.size
    @commands = commands
    self.contents = Bitmap.new(width - 32, @item_max * 32)
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@item_max
      draw_item(i, normal_color)
    end
  end
  #--------------------------------------------------------------------------
  # * Draw Item
  #     index : item number
  #     color : text color
  #--------------------------------------------------------------------------
  def draw_item(index, color)
    self.contents.font.color = color
    rect = Rect.new(4, 32 * index, self.contents.width - 8, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, @commands[index])
  end
  #--------------------------------------------------------------------------
  # * Disable Item
  #     index : item number
  #--------------------------------------------------------------------------
  def disable_item(index)
    draw_item(index, disabled_color)
  end
end
highlight to read

Hier der Edit der Scene:
Spoiler

Ruby Source code

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
122
123
124
125
126
127
#==============================================================================
# ** Scene_Crafting_Start
#------------------------------------------------------------------------------
#  Crafting menu (choice)
#==============================================================================
class Scene_Crafting_Recipe_Menu < Scene_Animation
  # Include HM main module for game data
  include HM
  include CRAFTING
 
  def initialize(menu_index = 0)
    @menu_index = menu_index
  end
 
  #--------------------------------------------------------------------------
  # * Main
  #--------------------------------------------------------------------------
  def main
    # Window commands
    @window_commands = []
    @category_ids = []
    # Füge noch "Alle Rezepte"-Option ein
    @window_commands.push("Alle Rezepte")
    @category_ids.push(0)
    # Gehe jede Kategorie durch aus RECIPE_CATEGORIES
    for category in RECIPE_CATEGORIES do
      @window_commands.push(category[:category_name])
      @category_ids.push(category[:category_id])
    end
    # Füge noch "Zurück"-Option hinzu
    @window_commands.push("Zurück")
 
#    # Wenn eine Unterkategorie keine Items enthält, ausgrauen und 
#    # unanklickbar machen
#    if a..@window_commands <= 0 # Jede Kategorie durchschauen
#      # Enthält keine Items
#      @command_window.disable_item(a) # ausgrauen
#      diable index a # unanklickbar machen
#    end
 
 
    text = "Welches Rezept?"
    # Make windows
    # Korrektur y-Koordinate
    @command_window = Window_HM_Command.new(640, @window_commands)
    @command_window.x = 0
    @command_window.y = 480 - @command_window.height
    @command_window.index = @menu_index#0
    @help_window = Window_Help.new(0,256,640,64)
    # Korrektur y-Koordinate
    @help_window.y = 480 - @command_window.height - @help_window.height
    @help_window.set_text(text,0)
    @skill_window = Window_HM_Crafting_Skill.new(0,0)
    # Background sprite
    inititialize_animation(0)
    # Get actor
    @actor = $game_party.actors[0]
    # Execute transition
    Graphics.transition
    # Main loop
    loop do
      # Update game screen
      Graphics.update
      # Update input information
      Input.update
      # Frame update
      update
      # Abort loop if screen is changed
      if $scene != self
        break
      end
    end
    # Prepare for transition
    Graphics.freeze
    # Dispose sprite
    dispose_sprites
    # Dispose windows
    @command_window.dispose
    @help_window.dispose
    @skill_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Update
  #--------------------------------------------------------------------------
  def update
    # Sprite
    update_sprites
    # Command Window
    @command_window.update
    # Command
    update_command
  end
  #--------------------------------------------------------------------------
  # * Update Command
  #--------------------------------------------------------------------------
  def update_command
    # ENTER
    if Input.trigger?(Input::C)
      # Play cancel SE
      $game_system.se_play($data_system.decision_se)
      # Zurück Button
      if @command_window.index == (@window_commands.size-1)
       # Zurück
        # Play cancel SE
        $game_system.se_play($data_system.cancel_se)
        # Switch to map screen
        $scene = Scene_Crafting_Start.new
      else
        # Gehe zu "Kochen nach Rezept"
        $scene = Scene_Crafting_Recipe.new(@category_ids[@command_window.index])
      end
 
      return
    end  
    # ESC
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Switch to map screen
      $scene = Scene_Crafting_Start.new
      return
    end  
  end
  #--------------------------------------------------------------------------
  # * Class End
  #--------------------------------------------------------------------------
end
highlight to read

Ich versuche grad die Höhe des Fensters anzupassen.
Zeile 45 in der Scene:

Ruby Source code

1
    @command_window = Window_HM_Command.new(640, @window_commands)

Ich muss @window_commands gegen @window_commands/2 austauschen, aber das klappt nicht, weil @window_commands keine Zahl ist. Aber scheinbar doch, weils dort als Zahl gilt. Kann mir das einer erklären?

2.) Ich will, dass leere Kategorien ausgegraut und nicht anklickbar sind (siehe Zeile 33). Da fehlen mir Befehle :/

Hilfe? XD
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.

This post has been edited 1 times, last edit by "Josey" (May 10th 2020, 4:09pm)


Playm

RPG Studio Webmaster

  • Send private message

183

Tuesday, May 12th 2020, 2:27am

Richtig gut. :-) Du bist ja selber schon gut zurecht gekommen.

Nur Kleinigkeiten fehlen noch.

Quoted

1.) Das ist mein bisheriges Edit des Window_Command, aktuell gibt es ein column_max = 2 im Initialize, und es funktioniert auch technisch (also die Klicks der unteren drei müssen in der rechten Spalte passieren), aber die Schriftzüge und das Fenster passen sich nicht an XD

In Zeile 15, musst Du die Anzahl der Einträge im commands-Array durch zwei (die Anzahl der Spalten) teilen.

Ruby Source code

15
    super(0, 0, width, commands.size/2 * 32 + 32)


Und dann die Berechnung der Zellen bei Draw-Item.

Ruby Source code

38
39
40
41
42
43
44
45
    self.contents.font.color = color
    # Calculate column width
    column_width = self.width / @column_max - 32
    # Calculate cell coordinates
    x = index % @column_max * (column_width + 32)
    y = index / @column_max * 32
    rect = Rect.new( 4 + x, y, column_width - 8, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))


Im originalen Window_Command gibt es nur eine Spalte, deswegen wird die X-Koordinate konstant mit 4 angegeben. Wir leihen uns die Mathematik aus der Klasse Window_Selectable aus, die für die Berechnung des cursor_rect verwendet wird.

Quoted

2.) Ich will, dass leere Kategorien ausgegraut und nicht anklickbar sind

Bezüglich deiner zweiten Frage mit dem Ausgrauen, wäre meine Idee nach dem das Window erstellt und eingerichtet wurde das folgende zu schreiben

Ruby Source code

48
49
50
51
52
53
    @command_window.index = @menu_index#0
    for a in 1..(@window_commands.size-2)
      if RECIPE_CATEGORIES[a][recipe_ids].empty?
        @command_window.disable_item(a)
      end
    end

Dadurch sollten sie ausgegraut werden - sie können aber trotzdem angeklickt werden.
Zumindest ist so meine Theorie. Ich habe nicht ganz verstanden, wie RECIPE_CATEGORIES funktioniert.

Josey

Storyteller

  • "Josey" started this thread

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

  • Send private message

184

Tuesday, May 12th 2020, 8:52am

Danke X//D
Ich hab mir Mühe gegeben *___*

1.) Super, danke dir! :D
Zum Glück kopier ich nicht nur stoisch, die Zeile self.contents.draw_text fehlte (falls es wer anders auch ausprobieren will)
Aber jetzt hab ich da unten so einen Pfeil, als obs da noch tiefer ginge. Wie kann ich den entfernen? :3

2.) Da kieg ich jetzt ne Fehlermeldung:
---------------------------
Script 'Scene_Crafting_Recipe_Menu' line 52: NameError occurred.

undefined local variable or method `recipe_ids' for #<Scene_Crafting_Recipe_Menu:0x811aa50>
---------------------------

RECIPE_CATEGORIES wird nur in diesem Script verwendet, dass du da siehst und im Modul sind diese beiden EInträge die einzigen, wo das vorkommt:
Spoiler

Ruby Source code

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
#==============================================================================
# ** module CRAFTING
#------------------------------------------------------------------------------
#  Contains game data for crafting system.
#==============================================================================
module CRAFTING
  # ----------------------------------------------------------------------------
  # Recipe Categories
  # ---------------------------------------------------------------------------- 
  # RECIPE_CATEGORIES ist ein Array, dessen Elemente Objekte / Structs / Hashs 
  # sind. Sowohl das Array selbst als auch die einzelnen Elemente sind 
  # dynamisch erweiterbar, ohne dass es einen Eingriff in andere Skripte gibt.
  RECIPE_CATEGORIES = [
    # Vorspeisen
    {:category_id => 1,
     :category_name => "Vorspeisen",
     :recipe_ids => [1,2] },
     # Hauptgerichte
    {:category_id => 2,
     :category_name => "Hauptgerichte",
     :recipe_ids => [3,4] },
     # Desserts
    {:category_id => 3,
     :category_name => "Desserts",
     :recipe_ids => [5,0] },
     # Anderes
    {:category_id => 4,
     :category_name => "Anderes",
     :recipe_ids => [1,0,6] }
  ] 
 
  # ----------------------------------------------------------------------------
  # get_category_recipe_ids : Returns recipe array of category with
  #                           id category_id.
  # ----------------------------------------------------------------------------
  def self.get_category_recipe_ids(category_id)
    recipe_ids = nil
    for category in RECIPE_CATEGORIES
      if category[:category_id] == category_id
        recipe_ids = category[:recipe_ids]
        break
      end
    end
    return recipe_ids
  end
highlight to read


Hab mal :recipe_ids an der Stelle probiert, ging auch nicht :<

Aber so wirds nur ausgegraut, aber anklickbar immer noch? Dann müsste ich nur in der Scene noch bei C die Abfrage stellen, ob die aktuelle Cetegorie_ID disabled wurde, oder? :D

Danke dir! :D
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.

Playm

RPG Studio Webmaster

  • Send private message

185

Tuesday, May 12th 2020, 10:08am

Upps, ja weil das Content Bitmap noch so lang ist, als gäbe es @item_max viele Zeilen.
Du kannst entweder fix durch 2 teilen, oder Du benutzt die Variable @column_max an der Stelle (die ja dann definiert ist) die den Wert 2 hat. Das ist dir überlassen.

Ruby Source code

1
    self.contents = Bitmap.new(width - 32, @item_max/@column_max * 32)


Nächster Versuch für das ausgrauen:

Ruby Source code

1
2
3
4
5
6
    @command_window.index = @menu_index#0
    for a in 1..(@window_commands.size-2)
      if CRAFTING.get_category_recipe_ids(@category_ids[a]).empty?
        @command_window.disable_item(a)
      end
    end

Josey

Storyteller

  • "Josey" started this thread

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

  • Send private message

186

Wednesday, May 13th 2020, 7:20pm

1.) Okay, das funktioniert jetzt, danke XD

Aber wenn man eine ungerade Zahl an Kategorien hat, wird das "Zurück" unten nicht mehr hingeschrieben. Man kann es anklicken, aber das Feld ist leer Oo


2.) Zum Ausgrauen:
Das funktioniert halb. XD
Ich hab das offenbar was nicht bedacht :/
Die Kategorie wird dann ausgegraut, wenn in der Kategorie im Modul nichts drin ist. Aber im Modul wird nur festgelegt, welche Rezepte in welcher Kategorie sind und das prüft dein Codeschnippsel grad.
Was er aber prüfen müsste wäre, ob AKTUELL ein Rezept der Kategorie dem Menü hinzugefügt wurde. ._.

Wenn man eine der Kategorien bestätigt, kommt man hier rein:
Spoiler

Ruby Source code

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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
#==============================================================================
# ** Scene_Crafting_Recipe
#------------------------------------------------------------------------------
#  Crafting menu. Crafting with recipes.
#==============================================================================
class Scene_Crafting_Recipe < Scene_Animation
  # Include HM main module for game data
  include HM
  #--------------------------------------------------------------------------
  # * Initialize
  #--------------------------------------------------------------------------
  def initialize(category_id = 0)
    @category_id = category_id
  end
 
  #--------------------------------------------------------------------------
  # * Main
  #--------------------------------------------------------------------------
  def main
    # Initialize crafting class for calculations
    @crafting = Game_Crafting.new
    # Main Windows (step 1)
    @recipe_window = Window_HM_Recipes.new(50,26, @category_id)
    @help_window_step1 = Window_Help.new(50, 158, 541, 64)
    @material_window = Window_HM_Material.new(50,222)
    # Result windows
    @result_window_icon = Window_HM_Result_Icon.new(254, 90, 132, 132)
    @result_window_icon.visible = false
    @help_window_result = Window_Help.new(70, 222, 500, 255)
    @help_window_result.visible = false
    # Background sprite
    inititialize_animation(1)
    # Sprite
    @sprite = RPG::Sprite.new(Viewport.new(0, 0, 640, 480))
    @sprite.z = 999
    @sprite.x = 320
    @sprite.y = 240
    # Result text
    @result_text = ""
    # Start step = 0
    initialize_step_1
    # Get actor
    @actor = $game_party.actors[0]
 
    # Help_Window
    @help_window = Window_Help.new(0, 276, 640, 204)
    @help_window.z = 999
    @help_window.visible = false
 
 
    # Execute transition
    Graphics.transition
    # Main loop
    loop do
      # Update game screen
      Graphics.update
      # Update input information
      Input.update
      # Frame update
      update
      # Abort loop if screen is changed
      if $scene != self
        break
      end
    end
    # Prepare for transition
    Graphics.freeze
    # Dispose windows
    @crafting = nil
    @recipe_window.dispose
    @material_window.dispose
    @help_window_step1.dispose
    @result_window_icon.dispose
    @help_window_result.dispose
    @help_window.dispose
    # Dispose sprites
    @sprite.dispose
    dispose_sprites
  end
  #--------------------------------------------------------------------------
  # * Update
  #--------------------------------------------------------------------------
  def update
    # Background animation
    update_sprites
    case @step
    when 1
    if !@help_window.visible      
      @recipe_window.update
      @material_window.update
    end  
    when 2
      @result_window_icon.update
      @help_window_result.update
    end
    # Command
    update_command
    # Help Window
    update_help
    # Sprite
    @sprite.update
  end
  #--------------------------------------------------------------------------
  # * Update Help Window
  #--------------------------------------------------------------------------
  def update_help
    case @step
    when 1 # Recipe Choice 
      @material_window.set_recipe(@recipe_window.recipe)
      item = @recipe_window.product
      @help_window_step1.set_text_xy(item == nil ? "" : item.name,4,0,true)
    end
  end
  #--------------------------------------------------------------------------
  # * Update Command
  #--------------------------------------------------------------------------
  def update_command
 
    # R - Show item information
    if Input.trigger?(Input::A)
      if @help_window.visible
        # Play cancel SE
        $game_system.se_play($data_system.cancel_se)
        @help_window.visible = false
        return
      else
        # Play deccision se
        $game_system.se_play($data_system.decision_se)
        item2 = @recipe_window.product
        # Zeichnet Itembeschreibung im Fenster an der Stelle x = 4, y = 0 (Anfang).
        # Durch den "true" Trigger, wird der alte Content des Fensters gelöscht.
        @help_window.draw_description(item2.description, 4, 0, true)
        # Is a item selected?
        if !item2.nil?
          @help_window.y = 232
          @help_window.height = 248
 
          @help_window.visible = true
        else
          # no item is selected (empty help window)
           $game_system.se_play($data_system.buzzer_se)
        end
      return
      end
    end  
 
    # ESC
    if Input.trigger?(Input::B)
 
      if @help_window.visible
        # Play cancel SE
        $game_system.se_play($data_system.cancel_se)
        @help_window.visible = false
        return
      else
 
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      if @step == 1
        # Return to stat choice
        $scene = Scene_Crafting_Recipe_Menu.new(@category_id)
        return
      else
        # Switch to map screen
        $scene = Scene_Map.new
        return
      end
    end  
  end 
 
    # L (Q)
    if Input.trigger?(Input::L)
      if @help_window.visible
#nichts
      else
      if @step == 0
        # Play Decision SE
        $game_system.se_play($data_system.decision_se)
        initialize_step_1
        return
      end
      end
    end
    # ENTER
    if Input.trigger?(Input::C)
      if @help_window.visible
#nichts
      else
      if @step == 1
        if $game_party.available_recipes.size > 0
          craft_item
        else
          # No recipes known
          $game_system.se_play($data_system.buzzer_se)
        end
      elsif @step == 2
        # Play cancel SE
        $game_system.se_play($data_system.cancel_se)
        # Switch to map screen
        ICG.PlayerState_carry()        
        $scene = Scene_Map.new
      end
      return
     end 
    end  
  end
  #--------------------------------------------------------------------------
  # * Item crafting
  #--------------------------------------------------------------------------
 def craft_item
    # Is item craftable?
    recipe = $game_party.available_recipes[@recipe_window.index]
    result_array = @crafting.craftable(recipe)
    result      = result_array[0]
    item_value  = result_array[1]
    mean_values = result_array[2]
    # Quality calculation
    max_value = @crafting.max_value(recipe)
    quality = item_value / max_value * 100
    quality = quality.to_i
    if result
      # Item can be craftet
      result_array = @crafting.crafting_success?(recipe, quality)
      crafting_success = result_array[0]
      skill_points     = result_array[1]
      if crafting_success
        # Crafting successful
        type = 0
        # Play SE
        Audio.se_play("Audio/SE/" + CRAFTING::SUCCESS_SE, 90, 100)
        @crafting.craft_item(recipe, item_value, mean_values)
        @product = @crafting.get_product(recipe, item_value)
        #max_value = @crafting.max_value(recipe)
        #quality = item_value / max_value * 100
        #quality = quality.to_i
        # set text
        @result_text = "Es ist gelungen! /n "
        @result_text += "Ich habe " + @product.name + " gekocht! /n"
        @result_text += "Die Qualität ist " + quality.to_s + "%. /n" 
           if $game_switches[CRAFTING::NEW_RECIPE] == true
            @result_text += "Super! Ich hab das Rezept zum ersten Mal gekocht! /n" 
            $game_switches[CRAFTING::NEW_RECIPE] = false
           end 
        if skill_points > 0
          if skill_points == 1
            @result_text += "Ich erhalte einen Skillpunkt. /n"
          else
            @result_text += "Ich erhalte " + skill_points.to_s + " Skillpunkte. /n"
          end 
        else
          @result_text += "Ich konnte meine Kochfähigkeit nicht verbessern."
        end
        # Give actor skill points
        $game_party.actors[0].crafting_skill += skill_points
        @my_interpreter = Interpreter.new
        @my_interpreter.cooking_level_berechnung
 
           if $game_switches[CRAFTING::LEVEL_UP] == true #Skillevel erhöht
             cooking_level = $game_party.actors[0].cooking_level
            @result_text += "Yay! Mein Koch-Level hat sich auf " + cooking_level.to_s + " erhöht! /n" 
            $game_switches[CRAFTING::LEVEL_UP] = false
           end 
 
      else
        # Crafting failed
        type = 1
        # Play SE
        Audio.se_play("Audio/SE/" + CRAFTING::FAILURE_SE, 90, 100)
        @crafting.craft_item(recipe, item_value, mean_values)
        @product = @crafting.get_failed_product
        # set text
    @result_text = "Kochen fehlgeschlagen! /n "
    @result_text += "Ich habe " + @product.name + " gekocht... /n"
    @result_text += "Ich konnte meine Kochfähigkeit nicht verbessern."
      end
      # Equip actor
      equip_actor(recipe)
      # Play animation
      play_animation(type)
      # Show result
      show_result_window
    else
      # Can not craft item (not enough material)
      $game_system.se_play($data_system.buzzer_se)
    end
  end
  #--------------------------------------------------------------------------
  # * Equips actor with crafted item
  #--------------------------------------------------------------------------
  def equip_actor(recipe)
    if !CRAFTING::FAILURE_PRODUCTS.include?(@product.id)
      # item could have been craftet multiply times
      n = @crafting.product_amount(recipe)
      p n
      if n > 1
        $game_party.add_fridge_item(@product.id, n-1)  
      end
    end
    # Equip crafted item
    @actor.equip_item(@product.id)
  end
  #--------------------------------------------------------------------------
  # * Show result window after crafting item
  #--------------------------------------------------------------------------
  def show_result_window
    # Product Item
    @result_window_icon.set_item(@product)
    @result_window_icon.visible = true
    @result_window_icon.z = 999
    # Text
    @help_window_result.draw_description(@result_text,4,0,false)
    @help_window_result.visible = true
    @help_window_result.z = 999
    # next step
    @step = 2
  end
  #--------------------------------------------------------------------------
  # * initialize_step_0
  #--------------------------------------------------------------------------
  def initialize_step_0
    @recipe_window.index = 0
    @recipe_window.visible = false
    @help_window_step1.visible = false
    @material_window.visible = false
    @step = 0
  end
  #--------------------------------------------------------------------------
  # * initialize_step_1
  #--------------------------------------------------------------------------
  def initialize_step_1
    @recipe_window.visible = true
    @help_window_step1.visible = true
    @material_window.visible = true
    @step = 1
  end
  #--------------------------------------------------------------------------
  # *  play_animation(type) : plays success/fail animation.
  # typ : 0 = success, 1 = fail
  #--------------------------------------------------------------------------
  def play_animation(type)
    # hide windows
    @recipe_window.visible = false
    @help_window_step1.visible = false
    @material_window.visible = false
    # Get animation
    if type == 0
      @sprite.animation($data_animations[CRAFTING::SUCCESS_ANIMATION],true)
      wait_frames = CRAFTING::SUCCESS_DURATION
    elsif type == 1
      @sprite.animation($data_animations[CRAFTING::FAILURE_ANIMATION],true)
      wait_frames = CRAFTING::FAILURE_DURATION 
    end
    # Animation wait
    while wait_frames > 0 do
      Graphics.update
      # Background animation
      update_sprites
      @sprite.update
      wait_frames -=1
    end
    # Change background 
    change_sprites(type)
  end
  #--------------------------------------------------------------------------
  # * Class End
  #--------------------------------------------------------------------------
end
highlight to read

Das Recipe_Window dazu:
Spoiler

Ruby Source code

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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
#==============================================================================
# ** Window_HM_Recipes
#------------------------------------------------------------------------------
# Selectable Window for store classes (cupboard, fridge).
#==============================================================================
class Window_HM_Recipes < Window_HM_Selectable
  attr_reader   :cursor_window 
  #--------------------------------------------------------------------------
  # * Object Initialization
  # type : "cupboard" or "fridge"
  #--------------------------------------------------------------------------
 def initialize(x,y, category_id = 0)
    super(x, y, 541, 132)
    self.x = x
    self.y = y
    choose_inventory
    @recipes = []
    @product = nil
    @avaiable_recipes = []
    @category_id = category_id
    refresh
    self.index = 0
    # If in battle, move window to center of screen
    # and make it semi-transparent
    if $game_temp.in_battle
      self.y = 64
      self.height = 256
      self.back_opacity = 160
    end
  end
  #--------------------------------------------------------------------------
  # * Get Item
  #--------------------------------------------------------------------------
  def product
    if @recipes[index].nil?
      return nil
    end
    products = @recipes[index][@recipes[index].size-3]
    if (products.size-1) / 2 == 0
      @product = $data_items[products[(products.size-1)/2+1]]
    else
      @product = $data_items[products[(products.size-1)/2]]
    end
    return @product
  end
  #--------------------------------------------------------------------------
  # * Get Recipe
  #--------------------------------------------------------------------------
  def recipe
    return @recipes[self.index]
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    # Get available recipes
    @avaiable_recipes = $game_party.available_recipes
    # Filter recipes by category when there is a category filer. 
    # If category id is 0, all recipes are displayed.
    if @category_id > 0
      category_recipe_ids = CRAFTING.get_category_recipe_ids(@category_id)
      if !category_recipe_ids.nil?
        for recipe in @avaiable_recipes
          if category_recipe_ids.include?(recipe[0])
            @recipes.push(recipe)
          end
        end
      else
        # No category filter
        @recipes = @avaiable_recipes
      end
    else
      # No category filter
      @recipes = @avaiable_recipes
    end
    # Sort recipes by id
    @recipes.sort!{ |a,b| a[0] <=> b[0] }
    @item_max = @recipes.size
    # If item count is not 0, make a bit map and draw all items
    if @item_max  > 0
      self.contents = Bitmap.new(width - 32, row_max * @cursor_xy)
    else
      self.contents = Bitmap.new(width - 32, height - 32)
    end
    for i in 0...@recipes.size
      draw_item(i)
    end
  end
  #--------------------------------------------------------------------------
  # * Draw Item
  #     index : item number
  #--------------------------------------------------------------------------
  def draw_item(index)
    # Get product
    products = @recipes[index][@recipes[index].size-3]
    if (products.size-1) / 2 == 0
      product = $data_items[products[(products.size-1)/2+1]]
    else
      product = $data_items[products[(products.size-1)/2]]
    end
    difficulty = @recipes[index][@recipes[index].size-2]
    number = products[products.size-1]
    if !product.nil?
      self.contents.font.color = normal_color
      # Coordinates
      x = @offset_x + index % @column_max * (@height + @abstand_x)
      y = @offset_y + index / @column_max * (@height + @abstand_y)
      rect = Rect.new(x, y, self.width / @column_max - 32, 32)
      self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
      bitmap = RPG::Cache.icon(product.icon_name)
      opacity = 255
      self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 90, 90), opacity)
      self.contents.draw_text(x + 66, y + 66, 24, 32, "x"+number.to_s, 2)
      # Difficulty
      self.contents.font.color = difficulty_color(difficulty)
      self.contents.draw_text(x - 4, y - 4, 24, 32, difficulty.to_s, 2)
    end
  end
  #--------------------------------------------------------------------------
  # * difficulty_color : returns difficulty color
  #--------------------------------------------------------------------------
  def difficulty_color(difficulty)
    # Get current crafting skill
    crafting_skill = $game_party.actors[0].cooking_level #crafting_skill
    delta_skill = difficulty - crafting_skill
    # Get difficulty color
    if delta_skill >= CRAFTING::UPPER_BLACK
      color = CRAFTING::COLOR_BLACK
    elsif delta_skill >= CRAFTING::UPPER_RED
      color = CRAFTING::COLOR_RED
    elsif delta_skill >= CRAFTING::UPPER_ORANGE
      color = CRAFTING::COLOR_ORANGE
    elsif delta_skill >= CRAFTING::UPPER_YELLOW
      color = CRAFTING::COLOR_YELLOW
    else
      color = CRAFTING::COLOR_GREEN
    end
    return color
  end
  #--------------------------------------------------------------------------
  # * Help Text Update
  #--------------------------------------------------------------------------
  def update_help
    #@help_window.set_text_xy(self.item == nil ? "" : self.item.name,4,0,true)
    #@help_window.draw_description(self.item == nil ? "" : self.item.description,4,32,false)
  end
  #--------------------------------------------------------------------------
  # * Update Cursor Rectangle
  #--------------------------------------------------------------------------
  def update_cursor_rect
    # If cursor position is less than 0
    if @index < 0
      self.cursor_rect.empty
      return
    end
    # Get current row
    row = @index / @column_max
    # If current row is before top row
    if row < self.top_row
      # Scroll so that current row becomes top row
      self.top_row = row
    end
    # If current row is more to back than back row
    if row > self.top_row + (self.page_row_max - 1)
      # Scroll so that current row becomes back row
      self.top_row = row - (self.page_row_max - 1)
    end
    # Calculate cursor width
    #cursor_width = self.width / @column_max - 32
    cursor_width = @c_width
    # Calculate cursor coordinates
    #x = @index % @column_max * (cursor_width + 32)
    x = @index % @column_max * (@height + @abstand_x)
    #y = @index / @column_max * @c_height - self.oy
    y = @index / @column_max * (@height + @abstand_y)- self.oy
    # Update cursor rectangle
    self.cursor_rect.set(x, y, cursor_width, @c_height)
  end
  #--------------------------------------------------------------------------
  # * Get Top Row
  #--------------------------------------------------------------------------
  def top_row
    # Divide y-coordinate of window contents transfer origin by 1 row
    # height of 32
    return self.oy / @cursor_xy
  end
  #--------------------------------------------------------------------------
  # * Set Top Row
  #     row : row shown on top
  #--------------------------------------------------------------------------
  def top_row=(row)
    # If row is less than 0, change it to 0
    if row < 0
      row = 0
    end
    # If row exceeds row_max - 1, change it to row_max - 1
    if row > row_max - 1
      row = row_max - 1
    end
    # Multiply 1 row height by 32 for y-coordinate of window contents
    # transfer origin
    self.oy = row * @cursor_xy
  end
  #--------------------------------------------------------------------------
  # * Get Number of Rows Displayable on 1 Page
  #--------------------------------------------------------------------------
  def page_row_max
    # Subtract a frame height of 32 from the window height, and divide it by
    # 1 row height of 32
    return (self.height - 32) / @cursor_xy
  end
  #--------------------------------------------------------------------------
  # * Choose inventory
  # * type = 0 : kleine Tasche
  # * type = 1 : große Tasche
  # * type = 2 : kleiner Rucksack
  # * type = 3 : mittelgroßer Rucksack
  # * type = 4 : großer Rucksack
  #--------------------------------------------------------------------------
  def choose_inventory
    # Get inventory parameters
    # @column_max : Anzahl der Spalten
    # @height     : Icon Höhe
    # @offset_x   : Offset in x Richtung (Icon und Cursor)
    # @offset_y   : Offset in y Richtung (Icon und Cursor)
    # @abstand_x  : Abstand zwischen 2 Icons in x-Richtung
    # @abstand_y  : Abstand zwischen 2 Icons in y-Richtung
    # @cursor_xy  : Cursorabmessung (Annahme, dass er quadratisch ist)
    # @item_max   : max. angezeigte Items
    # Window Parameter
    @column_max = 5
    @height = 90
    @offset_x = 5
    @offset_y = 1
    @abstand_x = 13
    @abstand_y = 10 
    # Cursor
    @cursor_xy = 100
    @c_width  = @cursor_xy
    @c_height = @cursor_xy
    # Items
    #@item_max = 28
  end
end
highlight to read

Dort werden die Kategorien gefüllt, glaub ich.

Die Kategorie sollte grau sein, bis mindestens ein passendes Rezept gelernt wurde (mit "$game_party.add_recipe(x)").
Aktuell sind alle Kategorien weiß, weil sich dein Codeschnippsel auf die Module bezieht, die alle gefüllt sind und nicht darauf, ob wenigstens ein passendes Rezept gelernt wurde.
Hier wird add_recipe definiert, falls das wichtig ist:
Spoiler

Ruby Source code

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
#==============================================================================
# ** Game_Party
#------------------------------------------------------------------------------
# Crafting System
#------------------------------------------------------------------------------
# New methods:
# - available recipes
# - has_material?(material_group)
# - add_recipe(recipe_id)
# - crafting_item_number(item_id)
# - gain_base_item(item_id, n)
#==============================================================================
class Game_Party
  include CRAFTING
  #-----------------------------------------------------------------------------
  # has_material?
  #-----------------------------------------------------------------------------
  def has_material?(material_group)
    result = false
    amount = material_group[material_group.size-1]
    # Iterate through materials
    for i in 0...material_group.size-1
      item_id = material_group[i]
      if (item_number_fridge(item_id) >= amount)
        result = true
      end
    end
    # return result
    return result
  end
  #-----------------------------------------------------------------------------
  # add_recipe(recipe_id) : Adds recipe with recipe_ID to available recipes
  #-----------------------------------------------------------------------------
  def add_recipe(recipe_id)
    # Recipe is not already available
    if !@available_recipes.include?(RECIPES[recipe_id])
      # Searching recipe
      for i in 0...RECIPES.size
        current_recipe = RECIPES[i]
        if current_recipe[0] == recipe_id
          # Recipe was found in crafting module
          @available_recipes.push(current_recipe)
          break
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # * recipe_known?(recipe_id) : Returns true if the recipe with the ID
  #                              recipe_Id is known by the party.
  #--------------------------------------------------------------------------
  def recipe_known?(recipe_id)
    result = false
    # Pass through recipe array
    for i in 0...@available_recipes.size
      # Get current recipe
      current_recipe = @available_recipes[i]
      # Get current recipe ID
      current_recipe_id = current_recipe[0]
      # Has current recipe the id recipe_id?
      if current_recipe_id == recipe_id
        # Id are equivalent
        result = true
        break
      end
    end
    # Return
    return result
  end  
  #--------------------------------------------------------------------------
  # * has_baseitem?(baseitem_id) : Diese Methode überprüft, ob der Spieler das 
  #                                Base Item mit der ID baseitem_id 
  #                                (Eingabeparameter) besitzt.
  #--------------------------------------------------------------------------
  def has_baseitem?(baseitem_id)
    # wird auf true gesetzt, wenn das Item vorhanden ist
    # Überprüfe, ob das baseitem im Hash abgelegt ist
    # Die Anzahl ist > 0, daher ist das Item vorhanden
    # Gebe das Ergebnis zurück
    return base_item_number(baseitem_id) > 0
  end
  #--------------------------------------------------------------------------
  # * crafting_item_number(item_id)
  # Return Item ID of crafting item
  #--------------------------------------------------------------------------
  def crafting_item_number(item_id)
    # If quantity data is in the hash, use it. If not, return 0
    return @crafting_items.include?(item_id) ? @crafting_items[item_id] : 0
  end
  #--------------------------------------------------------------------------
  # * gain_base_item(item_id, n)
  # Gain crafting item for crafting system.
  #--------------------------------------------------------------------------
  def gain_crafting_item(item_id, n)
    # Update quantity data in the hash.
    if item_id > 0
      @crafting_items[item_id] = [[crafting_item_number(item_id) + n, 0].max, 99].min
    end
  end
end
highlight to read


tl;dr:
Die Frage ist aktuell: "Ist ein Rezept im Modul"
Sollte aber so lauten: "Wurde ein Rezept in der Kategorie hinzugefügt?"

Vlt ist es so übersichtlicher: Das sind alle Edits, die Mitsch gemacht hat, als er die Kategorien für mich eingebaut hat:
Spoiler

1.) Dein neues Menü

Ruby Source code

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
#==============================================================================
# ** Scene_Crafting_Start
#------------------------------------------------------------------------------
#  Crafting menu (choice)
#==============================================================================
class Scene_Crafting_Recipe_Menu < Scene_Animation
  # Include HM main module for game data
  include HM
  include CRAFTING
  #--------------------------------------------------------------------------
  # * Main
  #--------------------------------------------------------------------------
  def main
    # Window commands
    s1 = "Vorspeisen"
    s2 = "Hauptgerichte"
    s3 = "Desserts"
    s4 = "Zurück"
 
    @window_commands = []
    @category_ids = []
    # Gehe jede Kategorie durch aus RECIPE_CATEGORIES
    for category in RECIPE_CATEGORIES do
      @window_commands.push(category[:category_name])
      @category_ids.push(category[:category_id])
    end
    # Füge noch "Alle Rezeopte"-Option ein
    @window_commands.push("Alle Rezepte")
    @category_ids.push(0)
    # Füge noch "Zurück"-Option hinzu
    @window_commands.push("Zurück")
 
    text = "Welches Rezept?"
    # Make windows
    # Korrektur y-Koordinate
    @command_window = Window_Command.new(640, @window_commands)
    @command_window.x = 0
    @command_window.y = 480 - @command_window.height
    @command_window.index = 0
    @help_window = Window_Help.new(0,256,640,64)
    # Korrektur y-Koordinate
    @help_window.y = 480 - @command_window.height - @help_window.height
    @help_window.set_text(text,0)
    @skill_window = Window_HM_Crafting_Skill.new(0,0)
    # Background sprite
    inititialize_animation(0)
    # Get actor
    @actor = $game_party.actors[0]
    # Execute transition
    Graphics.transition
    # Main loop
    loop do
      # Update game screen
      Graphics.update
      # Update input information
      Input.update
      # Frame update
      update
      # Abort loop if screen is changed
      if $scene != self
        break
      end
    end
    # Prepare for transition
    Graphics.freeze
    # Dispose sprite
    dispose_sprites
    # Dispose windows
    @command_window.dispose
    @help_window.dispose
    @skill_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Update
  #--------------------------------------------------------------------------
  def update
    # Sprite
    update_sprites
    # Command Window
    @command_window.update
    # Command
    update_command
  end
  #--------------------------------------------------------------------------
  # * Update Command
  #--------------------------------------------------------------------------
  def update_command
    # ENTER
    if Input.trigger?(Input::C)
      # Play cancel SE
      $game_system.se_play($data_system.decision_se)
 
      # Zurück Button
      if @command_window.index == (@window_commands.size-1)
        # Zurück
        # Play cancel SE
        $game_system.se_play($data_system.cancel_se)
        # Switch to map screen
        $scene = Scene_Crafting_Start.new
      else
        # Gehe zu "Kochen nach Rezept"
        $scene = Scene_Crafting_Recipe.new(@category_ids[@command_window.index])
      end
 
      return
    end  
    # ESC
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Switch to map screen
      $scene = Scene_Crafting_Start.new
      return
    end  
  end
  #--------------------------------------------------------------------------
  # * Class End
  #--------------------------------------------------------------------------
end


2.) Scene_Crafting_Recipe
Main Methode ersetzen sowie die obere (neue) initialize Methode hinzufügen:

Ruby Source code

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
  #--------------------------------------------------------------------------
  # * Initialize
  #--------------------------------------------------------------------------
  def initialize(category_id = 0)
    @category_id = category_id
  end
  #--------------------------------------------------------------------------
  # * Main
  #--------------------------------------------------------------------------
  def main
    # Initialize crafting class for calculations
    @crafting = Game_Crafting.new
    # Main Windows (step 1)
    @recipe_window = Window_HM_Recipes.new(50,26, @category_id)
    @help_window_step1 = Window_Help.new(50, 158, 541, 64)
    @material_window = Window_HM_Material.new(50,222)
    # Result windows
    @result_window_icon = Window_HM_Result_Icon.new(254, 90, 132, 132)
    @result_window_icon.visible = false
    @help_window_result = Window_Help.new(70, 222, 500, 255)
    @help_window_result.visible = false
    # Background sprite
    inititialize_animation(1)
    # Sprite
    @sprite = RPG::Sprite.new(Viewport.new(0, 0, 640, 480))
    @sprite.z = 999
    @sprite.x = 320
    @sprite.y = 240
    # Result text
    @result_text = ""
    # Start step = 0
    initialize_step_1
    # Get actor
    @actor = $game_party.actors[0]
 
    # Help_Window
    @help_window = Window_Help.new(0, 276, 640, 204)
    @help_window.z = 999
    @help_window.visible = false
 
 
    # Execute transition
    Graphics.transition
    # Main loop
    loop do
      # Update game screen
      Graphics.update
      # Update input information
      Input.update
      # Frame update
      update
      # Abort loop if screen is changed
      if $scene != self
        break
      end
    end
    # Prepare for transition
    Graphics.freeze
    # Dispose windows
    @crafting = nil
    @recipe_window.dispose
    @material_window.dispose
    @help_window_step1.dispose
    @result_window_icon.dispose
    @help_window_result.dispose
    @help_window.dispose
    # Dispose sprites
    @sprite.dispose
    dispose_sprites
  end


4.) Window_HM_Recipes
initialize und refresh Methoden aktualisieren.

Ruby Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 def initialize(x,y, category_id = 0)
    super(x, y, 541, 132)
    self.x = x
    self.y = y
    choose_inventory
    @recipes = []
    @product = nil
    @avaiable_recipes = []
    @category_id = category_id
    refresh
    self.index = 0
    # If in battle, move window to center of screen
    # and make it semi-transparent
    if $game_temp.in_battle
      self.y = 64
      self.height = 256
      self.back_opacity = 160
    end
  end


Ruby Source code

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
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    # Get available recipes
    @avaiable_recipes = $game_party.available_recipes
    # Filter recipes by category when there is a category filer. 
    # If category id is 0, all recipes are displayed.
    if @category_id > 0
      category_recipe_ids = CRAFTING.get_category_recipe_ids(@category_id)
      if !category_recipe_ids.nil?
        for recipe in @avaiable_recipes
          if category_recipe_ids.include?(recipe[0])
            @recipes.push(recipe)
          end
        end
      else
        # No category filter
        @recipes = @avaiable_recipes
      end
    else
      # No category filter
      @recipes = @avaiable_recipes
    end
    # Sort recipes by id
    @recipes.sort!{ |a,b| a[0] <=> b[0] }
    @item_max = @recipes.size
    # If item count is not 0, make a bit map and draw all items
    if @item_max  > 0
      self.contents = Bitmap.new(width - 32, row_max * @cursor_xy)
    else
      self.contents = Bitmap.new(width - 32, height - 32)
    end
    for i in 0...@recipes.size
      draw_item(i)
    end
  end


3.) CRAFTING
Ganz unten diese neue Methode einfügen.

Ruby Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
  # ----------------------------------------------------------------------------
  # get_category_recipe_ids : Returns recipe array of category with
  #                           id category_id.
  # ----------------------------------------------------------------------------
  def self.get_category_recipe_ids(category_id)
    recipe_ids = nil
    for category in RECIPE_CATEGORIES
      if category[:category_id] == category_id
        recipe_ids = category[:recipe_ids]
        break
      end
    end
    return recipe_ids
  end



PS:
Wird die Category_ID 0 übergeben, interpretiert das der Skript in Window_HM_Recipes als "Alle Rezepte anzeigen".[/quote]
highlight to read


Sorry, ich bin doof. XD°





Wie fragt man nochmal ab, ob die Kategorie disabled wurde? @_@

Ruby Source code

1
is_@command_window.disabled?

?
Ich wollte es hier einbauen:

Ruby Source code

1
2
3
4
5
6
7
#        if Kategorie disabled
#         $game_system.se_play($data_system.buzzer_se)  
#        else
          $game_system.se_play($data_system.decision_se)
          # Gehe zu "Kochen nach Rezept"
          $scene = Scene_Crafting_Recipe.new(@category_ids[@command_window.index])
#        end
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.

This post has been edited 2 times, last edit by "Josey" (May 13th 2020, 7:20pm)


Playm

RPG Studio Webmaster

  • Send private message

187

Monday, May 18th 2020, 8:34pm

Quoted

1.) Okay, das funktioniert jetzt, danke XD

Aber wenn man eine ungerade Zahl an Kategorien hat, wird das "Zurück" unten nicht mehr hingeschrieben. Man kann es anklicken, aber das Feld ist leer Oo

Du hast recht, die Berechnung der Höhe ist mit @item_max/@column_max etwas ungenau. Window_Item benutzt die Funktion row_max, die besser ausrechnet, wieviele Zeilen das Fenster hat. Benutz das einfach auch:

Ruby Source code

1
self.contents = Bitmap.new(width - 32, row_max * 32)


Quoted

Die Frage ist aktuell: "Ist ein Rezept im Modul"
Sollte aber so lauten: "Wurde ein Rezept in der Kategorie hinzugefügt?"

Nächste Idee:

Ruby Source code

1
2
3
4
5
6
    @command_window.index = @menu_index#0
    for a in 1..(@window_commands.size-2)
      if CRAFTING.get_category_recipe_ids(@category_ids[a]).any?{|recipe_id| $game_party.recipe_known?(recipe_id)}
        @command_window.disable_item(a)
      end
    end

Ich werde ja nicht müde, dich neue Sachen ausprobieren zu lassen. :-)

Wenn das funktioniert, kannst Du diese Abfrage auch später nutzen:

Ruby Source code

1
2
3
4
5
if @command_window.index == 0 or CRAFTING.get_category_recipe_ids(@category_ids[@command_window.index]).any?{|recipe_id| $game_party.recipe_known?(recipe_id)}
  print("Kategorie "Alle Rezepze" gewählt oder die Kategorie ist verfügbar")
else
  print("Kategorie gesperrt")  
end

Josey

Storyteller

  • "Josey" started this thread

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

  • Send private message

188

Monday, May 18th 2020, 9:11pm

Du hast recht, die Berechnung der Höhe ist mit @item_max/@column_max etwas ungenau. Window_Item benutzt die Funktion row_max, die besser ausrechnet, wieviele Zeilen das Fenster hat. Benutz das einfach auch:

Ruby Source code

1
self.contents = Bitmap.new(width - 32, row_max * 32)

Vielen Dank, das funktioniert! :D

Quoted

Nächste Idee:

Ruby Source code

1
2
3
4
5
6
    @command_window.index = @menu_index#0
    for a in 1..(@window_commands.size-2)
      if CRAFTING.get_category_recipe_ids(@category_ids[a]).any?{|recipe_id| $game_party.recipe_known?(recipe_id)}
        @command_window.disable_item(a)
      end
    end

Ich werde ja nicht müde, dich neue Sachen ausprobieren zu lassen. :-)

Und ich werd nicht müde, immer wieder nachzufragen XD
Also- das funktioniert, allerdings nur so:

Ruby Source code

1
2
3
4
5
6
    for a in 1..(@window_commands.size-2)
      if CRAFTING.get_category_recipe_ids(@category_ids[a]).any?{|recipe_id| $game_party.recipe_known?(recipe_id)}
      else
        @command_window.disable_item(a)
      end
    end

:P

Quoted

Wenn das funktioniert, kannst Du diese Abfrage auch später nutzen:

Ruby Source code

1
2
3
4
5
if @command_window.index == 0 or CRAFTING.get_category_recipe_ids(@category_ids[@command_window.index]).any?{|recipe_id| $game_party.recipe_known?(recipe_id)}
  print("Kategorie "Alle Rezepze" gewählt oder die Kategorie ist verfügbar")
else
  print("Kategorie gesperrt")  
end

Yay, das klappt! XD

Ich danke dir! :D
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.

Josey

Storyteller

  • "Josey" started this thread

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

  • Send private message

189

Sunday, June 28th 2020, 5:16pm

Spoiler
Wenn ich nicht weiß, wieviele Items im Itemmenü der Spieler hat, aber wissen will, dass der Cursor gerade "ganz unten" ist- wie kann ich das abfragen? Mit Item_max ja nicht. Kann ich irgendwie abfragen, wieviele verschiedene Items gerade da sind und damit berechnen, wieviele Zeilen es sind und mir da die letzte ausspucken lassen?

Ich habe diesen Befehl in dem Schrank-System:

Ruby Source code

1
2
3
4
5
6
7
8
9
10
  #--------------------------------------------------------------------------
  # * total_amount_cupboard: Returns total amount of stored items
  #--------------------------------------------------------------------------
  def total_amount_cupboard
    @amount = 0
    for i in 0...@quantity_cupboard.size
      @amount += @quantity_cupboard[i]
    end
    return @amount
  end


und ich kann hiermit die Zahl speichern:
$game_variables[1]=$game_party.total_amount_horse

Leider werden alle Items gezählt, auch die, die gestapelt sind. :/
Kann ich das irgendwie umgehen?
Also wenn da im Schrank folgendes drin ist:
2x Trank, 1xSupertrank, 3xHypertrank
Soll die Zahl 3 ergeben und nicht 6 :<
highlight to read


Erledigt, hab woanders eine Methode geklaut, die funktioniert XD

Ruby Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
  #--------------------------------------------------------------------------
  # * inventory_space: Returns occupied space of stored items
  #--------------------------------------------------------------------------
  def inventory_space
    @amount = 0
    for i in 0...@items_cupboard.size
      if @quantity_cupboard[i] >= 1
        # Flag nil
      @amount += 1
      end
    end
    return @amount
  end

Danke Vergangenheits-Mitsch XD
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.

This post has been edited 1 times, last edit by "Josey" (Jun 28th 2020, 11:37pm)


Social bookmarks