RMRK is retiring.
Registration is disabled. The site will remain online, but eventually become a read-only archive. More information.

RMRK.net has nothing to do with Blockchains, Cryptocurrency or NFTs. We have been around since the early 2000s, but there is a new group using the RMRK name that deals with those things. We have nothing to do with them.
NFTs are a scam, and if somebody is trying to persuade you to buy or invest in crypto/blockchain/NFT content, please turn them down and save your money. See this video for more information.
[SOLVED] Achievements - only one bug

0 Members and 1 Guest are viewing this topic.

**
Rep: +0/-0Level 75
RMRK Junior
IN REVISION!

I use an achievement system which has the nice option, to add a field in the title screen to see all the achievements as well as to sum up all scores and their data from the achievements together. There is only a bug:

- Start a game and unlock some achievements.
- After that you have these achievements on the title screen and in all save files.
- Quit the game and restart it.
- You will see now that there are no achievements unlocked. Everything is deleted.

So, I think that all achievements data aren't saved after quitting the game.
Does someone see this bug in the script below and could try to solve it?


Look at Reply #3 post for more details.

CODE
Code: [Select]
#===============================================================================
#
# MK3 - Phoenix Power Productions Presents: Erfolge 0.98a
# Letztes Update: Freitag, 09.10.2009
# Title Add-On by: HungrySnake
# Update on: 2.10.2011
# Level: Leicht, Normal
#
# 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 = "Erfolge"
   
    # 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 => ["5 Quests", "Finish your 5. Quest.", 5],
      2 => ["25 Quests", "Finish your 25. Quest.",                  10],
      3 => ["50 Quests", "Finish your 50. Quest.",         25],
      4 => ["100 Quests", "Finish your 100. Quest.", 50]
      }
     
    # 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 = " Punkte"
   
    # 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 = " Punkt "
   
    # 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 = "Beschreibung: " # 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 = "Beschreibung: Dies ist ein geheimer Erfolg, du musst ihn erst|freischalten, um ihn betrachten zu können"
   
    # 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 = "Dies sind deine Erfolge. Du hast "
   
    # Dieser Schalter bestimmt, ob bei Erhalt eines Erfolgs die ME, welche in der
    # Database bei "Battle_End" (Default: Victory1) abgespielt wird.
    PLAY_ERFOLG_SOUND = true
  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)
    if !MK3::Erfolge::INTEGRATE_TITLE
      Marshal.dump($Erfolge_erhalten, file)
    end
  end
 
  def read_save_data(file)
    mk_read_save_data(file)
    if !MK3::Erfolge::INTEGRATE_TITLE
      $Erfolge_erhalten = Marshal.load(file)
    end
  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"))
      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
« Last Edit: December 01, 2011, 03:51:16 PM by Lysop »

**
Rep: +0/-0Level 75
RMRK Junior
Im still present, if you want to hear this! ;)

**
Rep: +0/-0Level 70
RMRK Junior
HungrySnake here, I guess this is what you want:

http://pastebin.com/X9H6XqXE
« Last Edit: November 02, 2011, 03:19:45 PM by slimmeturq61 »

**
Rep: +0/-0Level 75
RMRK Junior
IN REVISION!

Edit

Thanks for your help, but one thing is missing and there is one bug:

(optional, it would be great if someone could solve this)
- If you want to delete all achievements (really all achievements from all save files) there should be a button in the title screen add-on to delete all achievements without deleting the save files. A button is maybe difficult, because there is no space. It could be a button to press, e.g. "A". Then you will see the option to delete all achievements data from all save files or to leave well alone.
If you load a saved game after deleting all achievements data, every save file has 0 achievements unlocked. Ill hope this is not too complicated. :-\

(really important, please solve this at first)
- The bug is that when you quit the game and start it again, all achievements data are deleted, in the title add-on and in the save files.
Im not sure whether I did sth. wrong, but I tested it in a new project and more than one time.


_____________________________________________________________________________
(optional, it would be great if someone could solve this)
Here is an additional error I have found:



It appears when you use the default icon in line 225.
You have to unlock an achievement with a default icon and look at it in the menu.
Its a general error, so it didnt come with the title add-on.
But it would be great, if someone could solve this error, I dont want to start a new topic for this.
« Last Edit: November 30, 2011, 09:01:28 AM by Lysop »

**
Rep: +0/-0Level 75
RMRK Junior
I'm here! And I hope a second person, too! :-\

**
Rep: +0/-0Level 75
RMRK Junior
One week is over and I'm still alive, wow!  :D

**
Rep: +0/-0Level 75
RMRK Junior
I can help you in exchange, too, no problem, but I need a solution :o .