#=============================================================================== # # MK3 - Phoenix Power Productions Presents: Erfolge Version 1.0 # Letztes Update: Freitag, 09.10.2009 (by MK3) # # Title Add-On by: HungrySnake # Update on: 2.10.2011 # # Achievements Summary & Saved Achievements # by: Sky00Valentine # Last Update: 01.12.2011 # # Dieses Script erweitert das Spiel um die Möglichkeit, einen Gamerscore ähnlich # dem bei der XBox 360 einzubauen. # Ferner hat es noch ein Custom Menu eingebaut bekommen, dieses ist allerdings # noch nicht so umfangreich ausgebaut und wird später wahrscheinlich in ein # eigenes Script übertragen. # #=============================================================================== # Updates: # ---------------------------------------------------------------------------- # o 05.10.2009 - Beginn des Scripts. # o 06.10.2009 - Vollendung der Pre-A, offiziell Version 0.51a # o 07.10.2009 - Erweiterung des Moduls, Einbau eines Custom-Menus, V 0.91 # o 08.10.2009 - Bei Erhalt eines Erfolgs wird "Battle_end" in der Database # abgespielt, Versionsnummer auf 0.97a erhöht # o 09.10.2009 - Erweiterung der Einstellungsmöglichkeiten, V 0.98 #=============================================================================== # Installation und Anleitung #=============================================================================== # # Platziere dieses Script irgendwo zwischen Material und Main. # Im Modul Erfolge nach dieser Einleitung gibt es einen Punkt "ERFOLGE_LISTE". # In diesen können sämtliche Erfolge eingetragen werden, müssen dabei allerdings # durchgezählt sein, sonst findet die Scene sie nicht. # Mit "Geheime_Erfolge" können die Erfolge angegeben werden, welche nicht von # Anfang an ausführlich angezeigt werden. # Darunter kann man bei "GEHEIM_BESCHREIBUNG" die Erfolgs-IDs reinsetzen, welche # zwar den Namen vor Erhalt anzeigen, nicht jedoch die Beschreibung. # Will man einem Spieler einen Erfolg verleihen (sprich: er hat ihn erreicht), # so funktioniert dies mit dem Befehl "gib_erfolg(ID)" unter 'Script' im Event- # Command 'Advance'. Dabei steht ID für die Nummer, unter welcher der Erfolg in # Aufzählung ERFOLGE_LISTE zu finden ist. # Seit Version 0.71 ist es mit Add-On 1 kompatibel. # Seit Version 0.80 unterstützt das Script auch die Möglichkeit, in anderen Scripts # mit dem Befehl "$mk.gib_erfolg(id)" Erfolge nach denselben Regeln freizuschalten, # wie dies in Events bisher möglich war. # Seit Version 0.91 ist es mit Add-On 2 kompatibel. # Will man das Script ohne Menü-Einbettung nutzen, so kann man es auch per Event # mit dem Script-Command "ruf_erfolg(scene)" (ohne die "") aufrufen. Dabei steht # scene für die Scene, zu welcher nach Verlassen des Erfolgs-Screens zurückgekehrt # werden soll, also Scene_Battle, wenn man es während dem Kampf aufruft, Scene_Map, # wenn man es von der Karte aus aufruft,... # #=============================================================================== # # Kompatibilität # - Alias: Game_System: initialize # - Alias: Scene_Title: start # - Alias: Scene_File: write_save_data, load_save_data # - Alias: Scene_Menu: create_command_window, update_command_selection, terminate # - Alias: Scene_Map: update # - Overwrite: Window_Help: initialize # - Overwrite: Scene_Menu: update # - Overwrite: Scene_Item: return_scene # - Overwrite: Scene_Skill: return_scene # - Overwrite: Scene_Status: return_scene # - Overwrite: Scene_File: return_scene # - Overwrite: Scene_End: return_scene # #=============================================================================== module MK3 module Erfolge # Mit diesem Namen wird der Erfolgs-Bildschirm-Aufruf betitelt, wenn man ihn # über das Custom Menu aufruft. ERFOLGE_NAME = "Achievements" # Dieser Schalter bestimmt, ob der Erfolgs-Screen in den Titel-Bildschirm # integriert wird. Gleichzeitig bewirkt er auch, dass die Erfolge nicht von # einem Spielstand, sondern vom Spiel direkt geladen werden, sind also immer # in jedem Spielstand des jeweiligen Exemplars gleich. INTEGRATE_TITLE = true # Mit diesem Schalter kann man bestimmen, ob der Erfolgs-Screen per Taste auf # der Map gerufen werden kann. MAP_ACCESS = false # Wenn MAP_ACCESS = true, wird mit diesem Button (nach Controller-Regelung) # der Erfolgs-Screen geöffnet. Die Rückkehr erfolg danach automatisch wieder # zurück zur jeweiligen Map. Der Default-Wert "X" wäre in dem Fall zum Bei- # spiel die Taste A auf dem Keyboard, wenn man nicht mit F1 die Tastenbele- # gung geändert hat. MAP_CALL_BUTTON = Input::X # Dieser Schalter bestimmt, ob Erfolge über das Menü aufgerufen werden kann. # Es wird außerdem für die Custom-Menu-Funktionen unten in diesem Modul be- # nötigt. MENU_ACCESS = true # Mit dieser Liste bestimmt ihr die Reihenfolge der Menü-Einträge. Aller- # dings unterstützt sie nur die Grundelemente und das Erfolgs-Script (Rest # muss noch getestet werden). Wer mehr Punkte integrieren möchte, braucht # sich nur dieses Script: # # http://pockethouse.wordpress.com/vx/scene-menu-redux/ # # zu besorgen und sich darin ein wenig einzuarbeiten. Es ist nicht schwierig. # # Die ID muss mit den Zahlen in MENU_SORT übereinstimmen, der erste Eintrag # im Array ist die Scene, welche aufgerufen wird (wenn Parameter übergeben # werden müssen, unterstützt dieses Scriptdabei nur jene aus dem Grundpro- # gramm). Der zweite Eintrag schließlich ist der Name, mit welchem die Scenes # im Menü eingetragen werden. MENU_LIST = { # ID Scene zum Aufruf Name im Menü 1 => ["Scene_Item", "Item"], 2 => ["Scene_Skill", "Skill"], 3 => ["Scene_Equip", "Equip"], 4 => ["Scene_Status", "Status"], 5 => ["Scene_File", "Save"], 6 => ["Scene_End", "Shutdown"], 7 => ["Scene_Erfolge", ERFOLGE_NAME], } # In dem Array unter diesem Kommentar werden die Aufrufe in der Reihenfolge # eingegeben, wie sie im Menü erscheinen sollen. Sie müssen hierbei exakt # mit den IDs in MENU_LIST übereinstimmen. MENU_SORT = [4, 5, 1, 3, 2, 7, 6] # Dieser Schalter bestimmt, ob die bisherige Spielzeit im Menü angezeigt wird. # Funktioniert nur, wenn "MENU_ACCESS = true". SHOW_TIME = false # In diesem Array müssen alle Scenes stehen, bei welchen man zuvor eine # Actor-Auswahl im Menü-Status machen möchte. Standardmäßig sind dies 2 für # Skill, 3 für Equip und 4 für Status. # Dieses Feature ist noch nicht fertig ausgebaut und unterstützt deshalb nur # Skill, Equip und Status, die Zahl, welche man eingibt, gibt die Position an, # in welcher der jeweilige Befehl in MENU_SORT drinsteht (beginnt bei 1). CHAR_WAHL = [1, 4, 5] # In der folgenden Liste kannst du alle Erfolge einrichten. Die ID ist die # Nummer, mit welcher du Erfolge verwalten kannst, Titel ist der Name des # Erfolgs, welcher in der Liste angezeigt wird, Beschreibung sind ein paar # nähere Worte zu dem Erfolg und Score ist die Punktzahl, welche er bringt. # Bei Beschreibung kann man mit dem Zeichen "|" einen Zeilenumbruch anzeigen. # Hierbei empfehle ich aber, nicht mehr als zwei Zeilen zu verwenden, da es # sonst wahrscheinlich nicht richtig angezeigt wird (habe es noch nicht ge- # testet). # Mit Version 0.94 ist eine freiwillige Zeile hinzugekommen. Man kann nun # jedem einzelnen Erfolg eine Icon-ID zuweisen, welche nach Erhalt des Erfolgs # bei diesem angezeigt wird (vorausgesetzt, ICON_ZEIGEN = true). Man kann die # Icon_ID einfach hinter die Position der Punktzahl in den Array schreiben # (Komma nicht vergessen). ERFOLGE_LISTE = { # ID Titel Beschreibung Score Icon-ID 1 => ["Questling", "Finish your 5. Quest.", 5], 2 => ["Questler", "Finish your 50. Quest.", 10], 3 => ["Questor", "Finish your 250. Quest.", 25], } # Im Event-Command "Advanced - Script" kannst du mit dem Befehl "gib_erfolg(ID) # den Erfolg freischalten. Damit wird dem Spieler die Punktzahl des Erfolgs # gutgeschrieben und der Erfolg als erhalten gekennzeichnet # Der Schalter bestimmt, ob ein Icon gezeigt wird oder nicht. Diese Einstellung # betrifft ALLE Icon-Optionen des Scripts, also auch jene bei ERFOLGE_LISTE ICON_ZEIGEN = true # Der Schalter bestimmt, ob zusätzlich zu freigeschalteten Erfolgen auch die # noch nicht erhaltenen Erfolge ein ICON erhalten, wobei dieses immer dasselbe # ist, unabhängig von der Zuweisung bei ERFOLGE_LISTE oder ICON_INDEX. ICON_ZEIGEN_UNDONE = true # Diese Zahl entspricht der Icon-ID, welche angezeigt wird für nicht erhaltene # und nicht geheime Erfolge , wenn ICON_ZEIGEN und ICON_ZEIGEN_UNDONE = true. ICON_UNDONE = 331 # Dieser Schalter bestimmt, ob (wenn ICON_ZEIGEN_UNDONE = true) die Icons von # geheimen Erfolgen versteckt werden sollen. Hierbei bedeutet false, dass die # Icons gezeigt werden. GEHEIM_ICON_ZEIGEN = true # Wenn ICON_ZEIGEN und ICON_ZEIGEN_UNDONE = true und ICON_ZEIGEN_VERSTECKEN = # false, dann wird für nicht freigeschaltete, geheime Erfolge die Icon-ID, # welche in diesem Punkt angegeben ist, angezeigt. ICON_GEHEIM = 331 # Gibt den Index des Icons an, welches bei erhaltenen Erfolgen gezeigt wird. # Wenn man als Wert 0 eingibt, werden Icons nur dort angezeigt, wo man auch # explizit welche wünscht. ERHALTEN_ICON_DEFAULT = 516 # In ICON_INDEX kann man jedem Punktwert eine Icon-ID zuweisen, nämlich mit # "X => Y" (ohne Anführungszeichen), wobei X der jeweilige Punktwert und Y # die dazugehörige Icon-ID ist. Jeder Punktwert, der darin nicht vorkommt, # und auch nicht in ERFOLGE_LISTE ist (welche bevorzugt behandelt wird), kriegt # automatisch die Icon-ID in ERHALTEN_ICON_DEFAULT zugewiesen. ICON_INDEX = { 5 => 516, 10 => 516, 15 => 516, } # Der Schalter bestimmt, ob erlangte Erfolge eingefärbt werden sollen HAT_ERFOLG_FARBE = true # Gibt die Farbe an, in welche der Erfolg eingefärbt wird. ERFOLG_FARBE = 17 # Für diejenigen, die es nicht wissen: die Farbe richtet sich nach den Flächen # unten rechts im Window-Bild, also jener Bild-Datei unter System, welche die # Anzeige sämtlicher Windows steuert. Dabei wird in gewohnter Leserichtung # durchgezählt, begonnen mit 0. # Dieser Schalter bestimmt, ob das Punktefenster oben rechts angezeigt wird. # Ist dieser Schalter false, wird das erklärende Fenster oben links entspre- # chend gestretcht (was einen längeren Erklär-Text ermöglicht) SHOW_SCORE_WINDOW = true # Diese Einstellung steuert die Anzeige des Einzel-Score (also die Darstellung # der Erfolgs-Punktzahl eines einzelnen Erfolges). Steht der Wert auf 1, wird # die Erfolgs-Punktzahl am rechten Rand hinter dem jeweiligen Titel angezeigt, # steht er auf 2 steht er am unteren rechten Rand der Beschreibung. Bei 0 wird # der Score nicht angezeigt. SHOW_SINGLE_SCORE = 1 # Dieser Text bestimmt, was dem Score hintenangestellt werden soll, wenn die # Konstante SHOW_SINGLE_SCORE auf 1 oder 2 steht und der Score über 1 beträgt. SINGLE_SCORE_PLUS = " Points" # Dieser Text funktioniert genauso wie SINGLE_SCORE_PLUS, allerdings berück- # sichtigt er nur Erfolgs-Punkte, die 1 entsprechen. Soll das Anhängsel bei # beiden Fällen gleich sein, einfach dasselbe wie bei SINGLE_SCORE_PLUS ein- # bauen. Tipp: Es sieht besser aus, wenn der Text genauso viele Zeichen ent- # hält wie jener in SINGLE_SCORE_PLUS. SINGLE_SCORE_PLUS_ONE = " Point " # In dieses Feld kannst du einfügen, welcher Text vor der Beschreibung stehen # soll. Soll kein Text da stehen, so schreibe "" in das Feld. BESCHREIBUNG = "Description " # denke an das Leerzeichen, sonst wird es # gequetscht # In diese Liste kannst du alle Erfolge aufzählen, welche vor Erhalt nicht # näher beschrieben werden, sobald sie (mit "gib_erfolg(ID)") freigeschaltet # wurden, werden sie jedoch wie gewohnt angezeigt Geheime_Erfolge = [] # Diese Liste funktioniert fast wie die Liste Geheime_Erfolge, nur versteckt # sie lediglich den beschreibenden Text, der Titel wird hingegen angezeigt. GEHEIME_BESCHREIBUNG = [3] # Dieser Name wird für den Erfolg angezeigt, wenn er in der Liste Geheime_Erfolge # steht und noch nicht freigeschaltet wurde GEHEIM_TITEL = "Geheim" # Diese Beschreibung erhält man, wenn man einen geheimen, nicht freigeschalteten # Erfolg anwählt. Genauso wie bei den Beschreibungen in der ERFOLGE_LISTE kann # auch diese mit "|" mit Zeilenumbruch versehen werden (trotzdem sollte es bei # zwei Zeilen bleiben). GEHEIM_BESCHREIBUNG = "This is a secret achievement!" # Dieser Schalter bestimmt, ob im Hilfe-Fenster die Zahl der gesammelten/ # insgesamten Erfolge angezeigt werden sollen # Steht der Schalter auf false, sollte der Text in ERFOLGE_HILFE dement- # sprechend angepasst werden ERFOLGSZAHL_ZEIGEN = true # Diese Nachricht steht im Hilfe-Fenster, ist "ERFOLGSZAHL_ZEIGEN" (s. oben) # true, so wird der Text um X/Y erweitert, wobei X für die Anzahl bereits # freigeschalteter Bilder steht und Y für die Gesamtzahl aller Erfolge ERFOLGE_HILFE = "These are your achievements: " # Dieser Schalter bestimmt, ob bei Erhalt eines Erfolgs die ME, welche in der # Database bei "Battle_End" (Default: Victory1) abgespielt wird. PLAY_ERFOLG_SOUND = false end end $imported = {} if $imported == nil $imported["MK3_Erfolge_Basis"] = true module MK3::Commands def gib_erfolg(id) if !$Erfolge_erhalten.include?(id) then $Erfolge_erhalten << id if MK3::Erfolge::PLAY_ERFOLG_SOUND $game_system.battle_end_me.play end end end def ruf_erfolg(scene) $scene = Scene_Erfolge.new(scene) end end class Game_Interpreter include MK3::Commands end class MK3_Commands def initialize end def gib_erfolg(id) if !$Erfolge_erhalten.include?(id) $Erfolge_erhalten << id if MK3::Erfolge::PLAY_ERFOLG_SOUND $game_system.battle_end_me.play end end end end class Game_System alias mk_initialize initialize def initialize mk_initialize $mk = MK3_Commands.new end end class Window_ErfolgsScore < Window_Base def initialize(x, y, width, height) super(x, y, width, height) create_contents now_score = get_score text = now_score.to_s + "/" + $score.to_s + " Punkte" contents.draw_text (0, 0, contents.width, WLH, text, 1) end def get_score now_score = 0 for id in $Erfolge_erhalten do erfolg = MK3::Erfolge::ERFOLGE_LISTE[id] next unless erfolg != nil now_score += erfolg[2] end return now_score end end class Window_Erfolge < Window_Selectable WLH = 24 def initialize(x, y, width, height, spacing = 76) super(x, y, width, height, spacing) self.index = 0 refresh end def refresh self.contents.clear @data = [] MK3::Erfolge::ERFOLGE_LISTE.each_key do |key| if $Erfolge_erhalten.include?(key) then @data << key end end MK3::Erfolge::ERFOLGE_LISTE.each_key do |key| if !$Erfolge_erhalten.include?(key) then @data << key end end @item_max = @data.size create_contents for i in 1...@item_max+1 draw_erfolg(i) end end def make_icon(id) if $Erfolge_erhalten.include?(id) get_icon_id = MK3::Erfolge::ERFOLGE_LISTE[id] if get_icon_id[3] != nil icon_id = get_icon_id[3] else icon_weiser = [] MK3::Erfolge::ICON_INDEX.each_key do |key| icon_weiser << key end icon_weiser.each do |id_test| if id_test = get_icon_id[2] icon_id = MK3::Erfolge::ICON_INDEX[id_test] end end end elsif MK3::Erfolge::ICON_ZEIGEN_UNDONE if MK3::Erfolge::Geheime_Erfolge.include?(id) or MK3::Erfolge::GEHEIME_BESCHREIBUNG.include?(id) if MK3::Erfolge::GEHEIM_ICON_ZEIGEN icon_id = MK3::Erfolge::ICON_GEHEIM end else icon_id = MK3::Erfolge::ICON_UNDONE end end draw_icon(icon_id, 0, (WLH * id)-WLH) end def draw_icon(icon_index, x, y, enabled = true) bitmap = Cache.system("Iconset") rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24) self.contents.blt(x, y, bitmap, rect, enabled ? 255 : 128) end def draw_erfolg(id) contents.font.color = text_color(0) erfolg = MK3::Erfolge::ERFOLGE_LISTE[id] # theoretisch mit @data sortierbar if MK3::Erfolge::ICON_ZEIGEN make_icon(id) end if MK3::Erfolge::Geheime_Erfolge.include?(id) and !$Erfolge_erhalten.include?(id) then text = MK3::Erfolge::GEHEIM_TITEL elsif $Erfolge_erhalten.include?(id) then if erfolg != nil if MK3::Erfolge::HAT_ERFOLG_FARBE contents.font.color = text_color(MK3::Erfolge::ERFOLG_FARBE) end text = erfolg[0] end else if erfolg != nil text = erfolg[0] end end case MK3::Erfolge::ICON_ZEIGEN when true x = 25 x_width = 480 else x = 0 x_width = 505 end self.contents.draw_text(x, WLH * (id - 1), x_width, 24, text, 0) if MK3::Erfolge::SHOW_SINGLE_SCORE == 1 case erfolg[2] when 1 bonus = MK3::Erfolge::SINGLE_SCORE_PLUS_ONE when nil bonus = "" else bonus = MK3::Erfolge::SINGLE_SCORE_PLUS end if erfolg[2] != nil score = erfolg[2].to_s + bonus else score = "" end self.contents.draw_text(x, WLH * (id - 1), x_width, 24, score, 2) end end def draw_medal(medal_name, x = 0, y = 0) return if medal_name == nil bitmap = Cache.picture(medal_name) rect = Rect.new(0, 0, 72, 72) self.contents.blt(x, y, bitmap, rect) end def item_rect(index) rect = Rect.new(0, 0, 0, 0) case MK3::Erfolge::ICON_ZEIGEN when true x_width = 25 else x_width = 0 end rect.width = ((contents.width + @spacing) / @column_max - @spacing) - x_width rect.height = WLH rect.x = (index % @column_max * (rect.width + @spacing)) + x_width rect.y = index / @column_max * WLH # Faktor muss identisch sein mit y-Faktor bei Titel return rect end def update super end def create_contents self.contents.dispose self.contents = Bitmap.new(width - 32, [height - 32, row_max * WLH].max) end def row_max return (@item_max + @column_max - 1) / @column_max end end class Window_ErfolgsBeschreibung < Window_Base def initialize(x, y, width, height) super(x, y, width, height) end end class Scene_Title < Scene_Base alias mk_start start def start mk_start if $Erfolge_erhalten == nil then $Erfolge_erhalten = [] end get_erfolgpoints end def get_erfolgpoints $score = 0 MK3::Erfolge::ERFOLGE_LISTE.each_value do |val| $score += val[2] end end def create_command_window s1 = Vocab::new_game s2 = Vocab::continue s3 = Vocab::shutdown if MK3::Erfolge::INTEGRATE_TITLE s4 = MK3::Erfolge::ERFOLGE_NAME @command_window = Window_Command.new(172, [s1, s2, s4,s3]) @command_window.y = 288 - 24 else @command_window = Window_Command.new(172, [s1, s2, s3]) @command_window.y = 288 end @command_window.x = (544 - @command_window.width) / 2 if @continue_enabled # If continue is enabled @command_window.index = 1 # Move cursor over command else # If disabled @command_window.draw_item(1, false) # Make command semi-transparent end @command_window.openness = 0 @command_window.open end def update super @command_window.update if Input.trigger?(Input::C) case @command_window.index when 0; command_new_game when 1; command_continue when 2 if MK3::Erfolge::INTEGRATE_TITLE $scene = Scene_Erfolge.new(Scene_Title) else command_shutdown end end if MK3::Erfolge::INTEGRATE_TITLE case @command_window.index when 3 command_shutdown end end end end end class Window_Time < Window_Base def update(text) self.create_contents self.contents.draw_text(0, 0, 128, 24, text, 1) end end class Window_Help_Vary < Window_Base def initialize(x = 0, y = 0, width = 544, height = WLH + 32) super(x, y, width, height) end def set_text(text, align = 0) if text != @text or align != @align self.contents.clear self.contents.font.color = normal_color self.contents.draw_text(4, 0, self.width - 40, WLH, text, align) @text = text @align = align end end end class Scene_Menu < Scene_Base alias mk_create_command_window create_command_window alias mk_update_command_selection update_command_selection alias mk_terminate terminate def update super update_menu_background @command_window.update @gold_window.update if MK3::Erfolge::SHOW_TIME text = game_time @time_window.update(text) end @status_window.update if @command_window.active update_command_selection elsif @status_window.active if MK3::Erfolge::MENU_ACCESS then #mk_update_actor_selection update_actor_selection else update_actor_selection end end end def terminate mk_terminate if MK3::Erfolge::SHOW_TIME @time_window.dispose end end def game_time(modificate = false) @gametime = Graphics.frame_count / Graphics.frame_rate hours = @gametime / 3600 minutes = @gametime / 60 % 60 seconds = @gametime % 60 if modificate then result = sprintf("%d%02d%02d", hours, minutes, seconds) else result = sprintf("%d:%02d:%02d", hours, minutes, seconds) end return result end def create_command_window if MK3::Erfolge::MENU_ACCESS if MK3::Erfolge::SHOW_TIME @time_window = Window_Time.new(0, 300, 160, 60) @time_window.contents.clear @time_window.create_contents text = game_time @time_window.contents.draw_text(0, 0, 24, 128, text, 1) end @liste = MK3::Erfolge::MENU_SORT @command = [] @liste.each do |id| name = MK3::Erfolge::MENU_LIST[id] @command << name[1] end @command_window = Window_Command.new(160, @command) @command_window.index = @menu_index if $game_party.members.size == 0 # If number of party members is 0 @command_window.draw_item(0, false) # Disable item @command_window.draw_item(1, false) # Disable skill @command_window.draw_item(2, false) # Disable equipment @command_window.draw_item(3, false) # Disable status end if $game_system.save_disabled # If save is forbidden @command_window.draw_item(4, false) # Disable save end else mk_create_command_window end end def update_command_selection if MK3::Erfolge::MENU_ACCESS if Input.trigger?(Input::B) Sound.play_cancel $scene = Scene_Map.new elsif Input.trigger?(Input::C) if $game_party.members.size == 0 and @command_window.index < 4 Sound.play_buzzer return elsif $game_system.save_disabled and @command_window.index == 4 Sound.play_buzzer return end Sound.play_decision befehl = @liste aufruf = MK3::Erfolge::MENU_LIST[befehl[@command_window.index]] if MK3::Erfolge::CHAR_WAHL.include?(@command_window.index + 1) start_actor_selection return end scene = aufruf[0] + ".new" case scene when "Scene_File.new" then scene += "(true, false, false)" end $scene = eval(scene) end else mk_update_command_selection end end def mk_update_actor_selection if Input.trigger?(Input::B) Sound.play_cancel end_actor_selection elsif Input.trigger?(Input::C) $game_party.last_actor_index = @status_window.index Sound.play_decision position = MK3::Erfolge::MENU_SORT[@command_window.index] from = MK3::Erfolge::MENU_LIST[position] if Input.trigger?(Input::C) case from[0] when "Scene_Skill" # skill $scene = Scene_Skill.new(@status_window.index) when "Scene_Equip" # equipment $scene = Scene_Equip.new(@status_window.index) when "Scene_Status" # status $scene = Scene_Status.new(@status_window.index) end end end end end class Scene_Map < Scene_Base alias mk_update update def update mk_update if MK3::Erfolge::MAP_ACCESS if Input.trigger?(MK3::Erfolge::MAP_CALL_BUTTON) $scene = Scene_Erfolge.new(Scene_Map) end end end end class Scene_Base def get_menu_index(scene) MK3::Erfolge::MENU_LIST.each do |key, val| if val.include?(scene) x = MK3::Erfolge::MENU_SORT.index(key) return x != nil ? x : 0 end end end end class Scene_Item < Scene_Base def return_scene x = get_menu_index("Scene_Item") $scene = Scene_Menu.new(x) end end class Scene_Skill < Scene_Base def return_scene x = get_menu_index("Scene_Skill") $scene = Scene_Menu.new(x) end end class Scene_Equip < Scene_Base def return_scene x = get_menu_index("Scene_Equip") $scene = Scene_Menu.new(x) end end class Scene_Status < Scene_Base def return_scene x = get_menu_index("Scene_Status") $scene = Scene_Menu.new(x) end end class Scene_File < Scene_Base alias mk_write_save_data write_save_data alias mk_read_save_data read_save_data def return_scene if @from_title $scene = Scene_Title.new elsif @from_event $scene = Scene_Map.new else x = get_menu_index("Scene_File") $scene = Scene_Menu.new(x) end end def write_save_data(file) mk_write_save_data(file) Marshal.dump($Erfolge_erhalten, file) end def read_save_data(file) mk_read_save_data(file) $Erfolge_erhalten = Marshal.load(file) end end class Scene_End < Scene_Base def return_scene x = get_menu_index("Scene_End") $scene = Scene_Menu.new(x) end end class Scene_Erfolge < Scene_Base def initialize(scene = Scene_Menu) @scene = scene end def start create_menu_background text = MK3::Erfolge::ERFOLGE_HILFE if MK3::Erfolge::ERFOLGSZAHL_ZEIGEN text += $Erfolge_erhalten.length.to_s + "/" + MK3::Erfolge::ERFOLGE_LISTE.length.to_s end if MK3::Erfolge::SHOW_SCORE_WINDOW @score_window = Window_ErfolgsScore.new(404, 0, 140, 56) @help_window = Window_Help_Vary.new(0, 0, 404) else @help_window = Window_Help_Vary.new end @help_window.contents.clear @help_window.set_text (text, 1) @erfolg_titel_window = Window_Erfolge.new(0, 56, 544, 275) @erfolg_def_window = Window_ErfolgsBeschreibung.new(0, 331, 544, 85) @erfolg_titel_window.active = true end def terminate super dispose_menu_background @help_window.dispose if MK3::Erfolge::SHOW_SCORE_WINDOW @score_window.dispose end @erfolg_titel_window.active = false @erfolg_titel_window.dispose @erfolg_def_window.dispose end def update super update_menu_background @erfolg_titel_window.update @erfolg_def_window.update update_erfolg_def(@erfolg_titel_window.index) if Input.trigger?(Input::B) Sound.play_cancel if @scene == Scene_Menu $scene = @scene.new(6)#(get_menu_index("Scene_Erfolge")) elsif @scene == Scene_Title $scene = @scene.new(1) else $scene = @scene.new end end end def update_erfolg_def(id) id += 1 erfolg = MK3::Erfolge::ERFOLGE_LISTE[id] if (MK3::Erfolge::GEHEIME_BESCHREIBUNG.include?(id) or MK3::Erfolge::Geheime_Erfolge.include?(id)) and !$Erfolge_erhalten.include?(id) text = MK3::Erfolge::GEHEIM_BESCHREIBUNG else text = MK3::Erfolge::BESCHREIBUNG text += erfolg[1] end @erfolg_def_window.contents.clear @erfolg_def_window.create_contents y = 0 txsize = 24 nwidth = 512 buf = text.gsub(/\\N(\[\d+\])/i) { "\\__#{$1}" } lines = buf.split(/(?:[|]|\\n)/i) lines.each_with_index { |l, i| l.gsub!(/\\__(\[\d+\])/i) { "\\N#{$1}" } @erfolg_def_window.contents.draw_text(0, i * txsize + y, nwidth, 24, l, 0) } if (MK3::Erfolge::SHOW_SINGLE_SCORE == 2)# and (l = i.size) case erfolg[2] when 1 bonus = MK3::Erfolge::SINGLE_SCORE_PLUS_ONE when nil bonus = "" else bonus = MK3::Erfolge::SINGLE_SCORE_PLUS end if erfolg[2] != nil score = erfolg[2].to_s + bonus else score = "" end @erfolg_def_window.contents.draw_text(0, txsize + y, nwidth, 24, score, 2) end end end