collapse collapse

 Community


 User Info




Willkommen Gast. Bitte einloggen oder registrieren.

 Partnerseiten

rpgvx.net

Das Forum ist offline

Autor Thema: Erfolge wie Gamerscore in XBox 360, Version 0.51a  (Gelesen 5887 mal)

Offline Michael Funkel

  • Event-Jongleur
  • **
  • Beiträge: 52
  • Derzeit fleißig am scripten
Erfolge wie Gamerscore in XBox 360, Version 0.51a
« am: Oktober 06, 2009, 18:24:03 »
Endlich ist es soweit! Ich habe mein erstes Script geschrieben. :D

Was macht das Script?
Das Script bereichert das Spiel um einen Erfolgs-Bildschirm. Die Erfolge funktionieren hierbei fast genauso wie der Gamerscore
bei XBox-360-Spielen. Für jeden, der es nicht kennt, hier eine kurze Erklärung:
Mit dem Script können Aufgaben versteckt werden, die, wenn der Spieler sie erreicht hat, freigeschaltet werden. Jeder Erfolg
belohnt den Spieler mit einer diesem Erfolg zugeordneten Punktzahl. Das Script erlaubt außerdem, bestimmte Erfolge als
geheime Erfolge zu kennzeichnen. Dann wird deren Voraussetzung um sie zu erhalten, erst dann angezeigt, wenn man sie auch erfüllt hat.

Screenshot
Spoiler for Hiden:

Credits
Michael Funkel

Anleitung
Um einen Erfolg freizuschalten, einfach nur im Event-Command Script "gib_erfolg(ID)" eingeben, ID ist hierbei die Nummer,
welche der Erfolg in der Liste hat. Diese List befindet sich im Modul zu Beginn des Scripts. Alles weitere dürfte ausführlich
genug im Script erklärt sein.

Edit:
Für diejenigen, die keine Ahnung von Scripten haben und sich Version 0.51a geholt haben, welche noch nicht automatisch ins Menü integriert ist, so geht's:
- scrollt im Script-Editor bis zu "Scene_Menu".
- dort sucht ihr den Eintrag "create_command_window" und fügt sX = "..." (X für eine beliebige Nummer, ... für den Namen, mit welchem es im Menü steht) zu den anderen sY hinzu (sowohl am Anfang bei sY = ..., als auch darunter bei @command_window = ...)
- anschließend geht ihr eine Methode weiter zu "update_command_window" und schreibt dort ans Ende
      when 6      # Erfolge
        $scene = Scene_Erfolge.new
Anschließend findet ihr den Erfolgs-Screen im Menü an der Stelle, an dem ihr ihn bei @command_window eingetragen habt unter dem Namen eurer Wahl.

Script (mittlerweile gepatcht auf 0.52a)
Spoiler for Hiden:
#===============================================================================
#
# MK3 - Phoenix Power Productions Presents: Erfolge 0.52a
# Letztes Update: Dienstag, 06.10.2009
# Level: Leicht
#
# Dieses Script erweitert das Spiel um die Möglichkeit, einen Gamerscore ähnlich
# dem bei der XBox 360 einzubauen.
#
#===============================================================================
# Updates:
# ----------------------------------------------------------------------------
# o 05.10.2009 - Beginn des Scripts.
# o 06.10.2009 - Vollendung der Pre-A, offiziell Version 0.51a
#===============================================================================
# Anleitung
#===============================================================================
#
# 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 ausführlich angezeigt werden.
# 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.
#
#===============================================================================
#
# Kompatibilität
# - Alias: Scene_Title: start
# - Alias: Scene_File: write_save_data, load_save_data
#
#===============================================================================

module MK3
  module Erfolge
    # Mit diesem Namen wird der Erfolgs-Bildschirm-Aufruf betitelt
    ERFOLGE_NAME = "Erfolge"
    
    # 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.
    # Mit einem "|" wird Zeilenumbruch angegeben.
    ERFOLGE_LISTE = {
    # ID     Titel            Beschreibung          Score
      1 => ["Erste Aufgabe", "Sprich mit dem Mann.|Er steht rechts.", 5],
      2 => ["Zweite Aufgabe", "Besiege den Gegner", 15],
      3 => ["Test", "Nicht erfüllbar", 10]
      }
      
    # 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
    # Gibt den Index des Icons an, welches bei erhaltenen Erfolgen gezeigt wird
    ERHALTEN_ICON = 36
    
    # 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 = [2, 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
    GEHEIM_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 "
  end
end

$imported = {} if $imported == nil
$imported["Erfolge"] = true

module MK3::Commands
  def gib_erfolg(id)
    if !$Erfolge_erhalten.include?(id) then
      $Erfolge_erhalten << id
    end
  end
end

class Game_Interpreter
  include MK3::Commands
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_Help < Window_Base
 
   def initialize(x = 0, y = 0, width = 544, height = WLH + 32)
     super(x, y, width, height)
   end
end

class Window_Erfolge < Window_Selectable
  def initialize(x, y, width, height)
    super(x, y, width, height)
    self.index = 0
    refresh
  end
  
  def refresh
    sortiere_erhalten
    self.contents.clear
    @data = []
    for id in $Erfolge_erhalten do
      @data.push(id)
    end
    MK3::Erfolge::ERFOLGE_LISTE.each_key do |key|
      if !$Erfolge_erhalten.include?(key) then
        @data.push(key)
      end
    end
    create_contents
    @item_max = @data.size
    for i in 1...@item_max+1
      draw_erfolg(i)
    end
  end
  
  def sortiere_erhalten
  end
  
  def draw_erfolg(id)
    if MK3::Erfolge::Geheime_Erfolge.include?(id) and !$Erfolge_erhalten.include?(id) then
      self.contents.font.color = text_color(0)
      text = MK3::Erfolge::GEHEIM_TITEL
    elsif $Erfolge_erhalten.include?(id) then
      draw_icon(MK3::Erfolge::ERHALTEN_ICON, 0, (24 * id)-24)
      self.contents.font.color = text_color(17)
      erfolg = MK3::Erfolge::ERFOLGE_LISTE[id]
      next unless erfolg != nil
        text = erfolg[0]
    else
      self.contents.font.color = text_color(0)
      erfolg = MK3::Erfolge::ERFOLGE_LISTE[id]
      next unless erfolg != nil
        text = erfolg[0]
    end
    self.contents.draw_text(25, (24 * id)-24, contents.width, 24, text, 0)
  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  
end

class Scene_File < Scene_Base
  alias mk_write_save_data write_save_data
  alias mk_read_save_data read_save_data
  
  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_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
    @help_window = Window_Help.new(0, 0, 404)
    @help_window.contents.clear
    @help_window.set_text (text, 1)
    @score_window = Window_ErfolgsScore.new(404, 0, 140, 56)
    @erfolg_titel_window = Window_Erfolge.new(0, 56, 544, 280)
    @erfolg_def_window = Window_ErfolgsBeschreibung.new(0, 336, 544, 80)
    @erfolg_titel_window.active = true
  end
  
  def terminate
    super
    dispose_menu_background
    @help_window.dispose
    @score_window.dispose
    @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
      $scene = @scene.new()
    end
  end
  
  def update_erfolg_def(id)
    id += 1
    if MK3::Erfolge::Geheime_Erfolge.include?(id) and !$Erfolge_erhalten.include?(id) then
      text = MK3::Erfolge::GEHEIM_BESCHREIBUNG
    else
      erfolg = MK3::Erfolge::ERFOLGE_LISTE[id]
      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)
    }
  end
end

Edit:
Wer Version 0.51a nutzt, hat noch einen kleinen Bug, man kann nicht richtig runterscrollen, sobald es mehr Erfolge sind, als auf eine Seite passen. Dieses Addon zur Version 0.52a behebt diesen Bug, einfach im Erfolgs-Script zum Ende der class Window_Erfolge scrollen (geht am schnellsten mit Strg+F => "Window_ErfolgsBeschreibung", ist nämlich die class nach Window_Erfolge ;)) und dann vor dem letzten end diesen Text einfügen:
Spoiler for Hiden:
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
Dann sollte es funktionieren.
P.S.: Wer sich den Code 0.51a noch nicht gedownloadet hat; ab jetzt ist der Code eingefügt.

Schlusswort
Das Script als solches ist zwar schon fertig gestellt, allerdings will ich es im Laufe der Zeit noch um weitere Features erweitern, deshalb läuft es im Moment noch unter der Versionsnummer 0.51a

Edit:
Habe das Script noch ein wenig erweitert. Es hat nun noch eine Custom-Menu-Funktion und die Möglichkeiten im Modul sind ein wenig ausgebaut. Die Menü-Funktionen sind allerdings noch nicht 100% getestet, deshalb stelle ich hier noch einmal extra das Script in der Version 0.73b hinein.
Spoiler for Hiden:
#===============================================================================
#
# MK3 - Phoenix Power Productions Presents: Erfolge 0.73b
# Letztes Update: Mittwoch, 07.10.2009
# 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.73b
#===============================================================================
# Anleitung
#===============================================================================
#
# 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 ausführlich angezeigt werden.
# 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.
#
#===============================================================================
#
# Kompatibilität
# - Alias: Scene_Title: start
# - Alias: Scene_File: write_save_data, load_save_data
# - Alias: Scene_Menu: create_command_window, update_command_selection
# - Overwrite: Scene_Menu: update
#
#===============================================================================

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 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 dari 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_Erfolge", ERFOLGE_NAME],
      6 => ["Scene_File", "Save"],
      7 => ["Scene_End", "Shutdown"],
      }
    
    # 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 = [1, 2, 3, 4, 6, 7, 5]
    
    # 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 ID muss mit der in MENU_LIST übereinstimmen.
    CHAR_WAHL = [2, 3, 4]
    
    # 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).
    ERFOLGE_LISTE = {
    # ID     Titel            Beschreibung                           Score
      1 => ["Erste Aufgabe", "Sprich mit dem Mann.|Er steht rechts.", 5],
      2 => ["Zweite Aufgabe", "Besiege den Gegner",                  15],
      3 => ["Test", "Nicht erfüllbar",                               10],
      }
      
    # 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.
    ICON_ZEIGEN = true
    
    # Gibt den Index des Icons an, welches bei erhaltenen Erfolgen gezeigt wird
    ERHALTEN_ICON = 36
    
    # 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 = [2, 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 = "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 "
  end
end

$imported = {} if $imported == nil
$imported["Erfolge"] = true

module MK3::Commands
  def gib_erfolg(id)
    if !$Erfolge_erhalten.include?(id) then
      $Erfolge_erhalten << id
    end
  end
end

class Game_Interpreter
  include MK3::Commands
end

class Window_Help < Window_Base
 
   def initialize(x = 0, y = 0, width = 544, height = WLH + 32)
     super(x, y, width, height)
   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 = []
    for id in $Erfolge_erhalten do
      @data.push(id)
    end
    MK3::Erfolge::ERFOLGE_LISTE.each_key do |key|
      if !$Erfolge_erhalten.include?(key) then
        @data.push(key)
      end
    end
    @item_max = @data.size
    create_contents
    for i in 1...@item_max+1
      draw_erfolg(i)
    end
  end
  
  def draw_erfolg(id)
    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 MK3::Erfolge::ICON_ZEIGEN then
        draw_icon(MK3::Erfolge::ERHALTEN_ICON, 0, (WLH * id)-WLH)
      end
      erfolg = MK3::Erfolge::ERFOLGE_LISTE[id]
      if erfolg != nil
        text = erfolg[0]
      end
    else
      erfolg = MK3::Erfolge::ERFOLGE_LISTE[id]
      if erfolg != nil
        text = erfolg[0]
      end
    end
    self.contents.draw_text(25, WLH * (id - 1), 480, 24, text, 0)
  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)
    rect.width = ((contents.width + @spacing) / @column_max - @spacing) - 25
    rect.height = WLH
    rect.x = (index % @column_max * (rect.width + @spacing)) + 25
    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

  def top_row
    return self.oy / WLH
  end

  def top_row=(row)
    row = 0 if row < 0
    row = row_max - 1 if row > row_max - 1
    self.oy = row * WLH
  end

  def page_row_max
    return (self.height - 32) / WLH
  end

  def page_item_max
    return page_row_max * @column_max
  end

  def bottom_row
    return top_row + page_row_max - 1
  end

  def bottom_row=(row)
    self.top_row = row - (page_row_max - 1)
  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  
end

class Scene_Menu < Scene_Base
  alias mk_create_command_window create_command_window
  alias mk_update_command_selection update_command_selection
  
  def update
    super
    update_menu_background
    @command_window.update
    @gold_window.update
    @status_window.update
    if @command_window.active
      update_command_selection
    elsif @status_window.active
      if MK3::Erfolge::MENU_ACCESS then
        mk_update_actor_selection
      else
        update_actor_selection
      end
    end
  end

  def create_command_window
    if MK3::Erfolge::MENU_ACCESS
      @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_File < Scene_Base
  alias mk_write_save_data write_save_data
  alias mk_read_save_data read_save_data
  
  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_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
    @help_window = Window_Help.new(0, 0, 404)
    @help_window.contents.clear
    @help_window.set_text (text, 1)
    @score_window = Window_ErfolgsScore.new(404, 0, 140, 56)
    @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
    @score_window.dispose
    @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
      $scene = @scene.new()
    end
  end
  
  def update_erfolg_def(id)
    id += 1
    if MK3::Erfolge::Geheime_Erfolge.include?(id) and !$Erfolge_erhalten.include?(id) then
      text = MK3::Erfolge::GEHEIM_BESCHREIBUNG
    else
      erfolg = MK3::Erfolge::ERFOLGE_LISTE[id]
      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)
    }
  end
end

Edit:
Jetzt beide Versionen mit Stand-Alone-Bugfix. Rate aber dennoch jedem, die neueste Version weiter unten zu nehmen, da diese weitaus mehr Optionen bietet.
« Letzte Änderung: Oktober 08, 2009, 23:04:55 von Michael Funkel »
Und nie vergessen - Wir haben nur eine Welt...
Wenn sie zerbricht haben wir zwei.

Ruby sollte sich als Standard-Sprache etablieren!

Bitte bewahrt uns vorm Verhungern!

Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a

Offline Psychodelics

  • RTP-Mapper
  • *
  • Beiträge: 21
Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a
« Antwort #1 am: Oktober 07, 2009, 07:58:44 »
Das ist wirklich ne gute Idee. Gefällt mir^^

Muss ich gleich mal ausprobieren. Das eröffnet einem die Möglichkeit auch weitreichendere Quests zu verteilen.
Quests, die sich über mehrere Stunden(Levels) hinweg ziehen, wie zum Beispiel "Töte 1.000 Gegener", "Sammel 50.000 Gold"
Aber auch komplexere Ideen, wie "Finde die 5 Artefakte, die in der Welt versteckt sind" und dafür dann natürlich fette Belohnung^^

Danke Michael xD

Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a

Offline Michael Funkel

  • Event-Jongleur
  • **
  • Beiträge: 52
  • Derzeit fleißig am scripten
Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a
« Antwort #2 am: Oktober 07, 2009, 11:22:19 »
Aber bitte sehr, Psychodelics! ^^

Habe zusätzlich ein Update hochgeladen, findet sich im Edit. Ist jetzt auf Version 0.73b und hat eine umfangreiche Menü-Funktion hinzugefügt bekommen. Reicht noch nicht an YanFlys Scene_Menu_ReDux ran, kann aber immerhin
schon ein paar Features.

Edit:
P.S.: Werde im Laufe des Tages, der Woche spätestens, mit einem Add-On beginnen, welches das Script um die Möglichkeit erweitert, auf einfache Weise Erfolge einzurichten, welche von der Stufe eines Actors, dem Gesamtvermögen, usw. abhängig sind. Wenn noch jemand Vorschläge für weitere Add-Ons hat: Bin jederzeit offen für Vorschläge! ;)
« Letzte Änderung: Oktober 07, 2009, 13:01:09 von Michael Funkel »
Und nie vergessen - Wir haben nur eine Welt...
Wenn sie zerbricht haben wir zwei.

Ruby sollte sich als Standard-Sprache etablieren!

Bitte bewahrt uns vorm Verhungern!

Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a

Offline Boogatie Roll

  • VX-Meister
  • ****
  • Beiträge: 676
  • Java[Spiele] Programmierer
    • BRolls Game Website
Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a
« Antwort #3 am: Oktober 07, 2009, 16:35:16 »
Wo soll man das neue Script einfügen?
Bei Materialien?

Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a

Offline Michael Funkel

  • Event-Jongleur
  • **
  • Beiträge: 52
  • Derzeit fleißig am scripten
Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a
« Antwort #4 am: Oktober 07, 2009, 17:58:17 »
@Boogatie Roll:
Meinst du das Erfolgs-Script an sich? Egal, ob Version 0.52a oder 0.73b gilt: Ja, unter Materialien, aber über Main. Bei den anderen Eintragungen in den Script-Editor habe ich des ja eigentlich hingeschrieben.
Aber da du schon fragst: Gute Idee, werde es gleich in die Anleitung des Scripts schreiben.
Und ich hätte ja früher geschrieben, aber ich wollte noch das Add-On vorher fertigschreiben.

Hier lade ich dann mal die neueste Version hoch, ist jetzt auf dem Stand 0.81, an sich fertig, soll bis 1.0 nur noch um ein paar Optionen bezüglich Aussehen erweitert werden. Jetz neu mit Stand-Alone-Bugfix
Spoiler for Hiden:
#===============================================================================
#
# MK3 - Phoenix Power Productions Presents: Erfolge 0.81
# Letztes Update: Mittwoch, 07.10.2009
# 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.81
#===============================================================================
# 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 ausführlich angezeigt werden.
# 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.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.
#
#===============================================================================
#
# 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
# - Overwrite: Scene_Menu: update
#
#===============================================================================

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 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 dari 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_Erfolge", ERFOLGE_NAME],
      6 => ["Scene_File", "Save"],
      7 => ["Scene_End", "Shutdown"],
      }
    
    # 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 = [1, 2, 3, 4, 6, 7, 5]
    
    # 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 ID muss mit der in MENU_LIST übereinstimmen.
    CHAR_WAHL = [2, 3, 4]
    
    # 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).
    ERFOLGE_LISTE = {
    # ID     Titel            Beschreibung                                 Score
      1 => ["Stufe 2", "Bringe einen beliebigen Charakter|auf Stufe 2.",     5],
      2 => ["Kleiner Reichtum", "Sammel 150 Gold an.",                      10],
      3 => ["Wanderslust", "Gehe 10 Schritte",                              10],
      4 => ["Einer auf 4", "Bringe einen beliebigen Charakter|auf Stufe 4", 15],
      5 => ["Der Held ist 4", "Bringe den dritten Chara auf Stufe 4",        1],
      }
      
    # 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.
    ICON_ZEIGEN = true
    
    # Gibt den Index des Icons an, welches bei erhaltenen Erfolgen gezeigt wird
    ERHALTEN_ICON = 36
    
    # 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 = [2]
    
    # 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 = "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 "
  end
end

$imported = {} if $imported == nil
$imported["Erfolge"] = true

module MK3::Commands
  def gib_erfolg(id)
    if !$Erfolge_erhalten.include?(id) then
      $Erfolge_erhalten << id
    end
  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
    end
  end
end

class Game_System
  alias mk_initialize initialize
  
  def initialize
    mk_initialize
    $mk = MK3_Commands.new
  end
end

class Window_Help < Window_Base
 
   def initialize(x = 0, y = 0, width = 544, height = WLH + 32)
     super(x, y, width, height)
   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 = []
    for id in $Erfolge_erhalten do
      @data.push(id)
    end
    MK3::Erfolge::ERFOLGE_LISTE.each_key do |key|
      if !$Erfolge_erhalten.include?(key) then
        @data.push(key)
      end
    end
    @item_max = @data.size
    create_contents
    for i in 1...@item_max+1
      draw_erfolg(i)
    end
  end
  
  def draw_erfolg(id)
    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 MK3::Erfolge::ICON_ZEIGEN then
        draw_icon(MK3::Erfolge::ERHALTEN_ICON, 0, (WLH * id)-WLH)
      end
      erfolg = MK3::Erfolge::ERFOLGE_LISTE[id]
      if erfolg != nil
        text = erfolg[0]
      end
    else
      erfolg = MK3::Erfolge::ERFOLGE_LISTE[id]
      if erfolg != nil
        text = erfolg[0]
      end
    end
    self.contents.draw_text(25, WLH * (id - 1), 480, 24, text, 0)
  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)
    rect.width = ((contents.width + @spacing) / @column_max - @spacing) - 25
    rect.height = WLH
    rect.x = (index % @column_max * (rect.width + @spacing)) + 25
    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  
end

class Scene_Menu < Scene_Base
  alias mk_create_command_window create_command_window
  alias mk_update_command_selection update_command_selection
  
  def update
    super
    update_menu_background
    @command_window.update
    @gold_window.update
    @status_window.update
    if @command_window.active
      update_command_selection
    elsif @status_window.active
      if MK3::Erfolge::MENU_ACCESS then
        mk_update_actor_selection
      else
        update_actor_selection
      end
    end
  end

  def create_command_window
    if MK3::Erfolge::MENU_ACCESS
      @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_File < Scene_Base
  alias mk_write_save_data write_save_data
  alias mk_read_save_data read_save_data
  
  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_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
    @help_window = Window_Help.new(0, 0, 404)
    @help_window.contents.clear
    @help_window.set_text (text, 1)
    @score_window = Window_ErfolgsScore.new(404, 0, 140, 56)
    @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
    @score_window.dispose
    @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
      $scene = @scene.new()
    end
  end
  
  def update_erfolg_def(id)
    id += 1
    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
      erfolg = MK3::Erfolge::ERFOLGE_LISTE[id]
      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)
    }
  end
end

Darüber hinaus stelle ich hier noch das erste Add-On rein. Dafür gilt natürlich dasselbe wie für das eigentliche Erfolgs-Script: unter Material, dafür über Main. ;)
Das Add-On erweitert das Script um Abfragen, die es mit relativ leichter Konfiguration erlauben, Erfolge auf bestimmte Level von bestimmten oder beliebigen Actors, die aktuelle Goldmenge und die zurückgelegte Strecke zu setzen.

Add-On 1, Version 0.9b: (ist noch nicht zu 100% getestet, scheint aber zu funktionieren)
Spoiler for Hiden:
#===============================================================================
#
# MK3 - Phoenix Power Productions Presents: Erfolge - Add-On 01, V 0.9b
# Letztes Update: Mittwoch, 07.10.2009
# Level: Normal
#
# Das erste Add-On zu meinem Erfolgs-Script erweitert es um die Möglichkeit, mit
# einfachen Mitteln Erfolge auf bestimmte Actor-Level, egal ob bestimmte oder
# beliebige Actors, sowie minimale Schrittzahl und Gesamtvermögen.
#
#===============================================================================
# Updates:
# ----------------------------------------------------------------------------
# o 07.10.2009 - Beginn des Projekts auf V 0.1, bis V 0.9b bearbeitet
#===============================================================================
# Installation und Anleitung
#===============================================================================
#
# Platziere das Script unter Erfolge, aber über Main. Natürlich wird das Erfolgs-
# script benötigt, damit dieses Script hier funktioniert.
# Kompatibel mit Erfolgs-Script ab V. 0.81, für ältere Versionen bitte den Patch
# aus dem Forum entnehmen, welcher die Voraussetzungen erfüllt.
# Im Modul Add_On kannst du Einstellen, ob ein Erfolg bei dem Levelaufstieg eines
# Charakters auf ein bestimmtes Level freigeschaltet wird, wobei dabei bestimmt
# werden kann, ob es ein bestimmter Actor oder ein beliebiger Actor sein kann.
# Darüber hinaus können Erfolge nun einfach bei einer bestimmten Goldsumme oder
# einer zurückgelegten Strecke automatisch freigeschaltet werden. Die Erfolge,
# welche durch dieses Add-On beeinflusst werden, werden ganz normal wie im Grund-
# script an eben jenem Ort bearbeitet.
#
#===============================================================================
#
# Kompatibilität
# - Alias: Game_Actor: level_up
# - Alias: Game_Party: increase_steps, gain_gold
#
#===============================================================================

module MK3
  module Erfolge
    module Add_On
      # Mit ACTOR_AT_LEVEL kann man einstellen, auf welchem Level eines Actors
      # ein Erfolg freigeschaltet wird. Dies schreibt sich nach folgender Regel:
      # "ID => [x, y, z, ...],", wobei ID für die Position des Actors steht, 0
      # steht hierbei für beliebigen Actor und x/y/z/... steht für die Level,
      # auf welchen der jeweilige Erfolg freigeschaltet wird. Welcher Erfolg
      # davon betroffen ist, wird in ACTOR_LEVEL_ERFOLG berücksicht.
      # In dem unten gegebenen Beispiel werden 3 Erfolge freigeschaltet. Einer,
      # wenn Actor Nr. 3 Level 4 erreicht, zwei weitere, wenn ein beliebiger
      # Actor je die Level 2 und 4 erreicht.
      ACTOR_AT_LEVEL = {
        0 => [2, 4], # Diese Zeile nicht löschen
        1 => [],
        2 => [],
        3 => [4],
        4 => [],
        }
      
      # ACTOR_LEVEL_ERFOLG ist die Ergänzung zu ACTOR_AT_LEVEL. Es dient dazu,
      # auf die jeweiligen Erfolge zu zeigen, welche durch ACTOR_AT_LEVEL frei-
      # geschaltet werden, sobald man das nötige Level mit dem entsprechenden
      # Charakter erreicht. Es funktioniert nach demselben Prinzip wie sein
      # "Partner", allerdings geben die Zahlen in den []-Klammern an, welcher
      # Erfolg von dem jeweiligen Levelaufstieg freigeschaltet wird. Wichtig ist
      # hierbei, dass die Reihenfolge der Zahlen hier identisch mit den jeweiligen
      # Zahlen bei ACTOR_AT_LEVEL übereinstimmt.
      # In diesem Beispiel hier würde etwa Actor 3 beim Erreichen der vierten
      # Stufe (s. ACTOR_AT_LEVEL: 3 => [4]) damit Erfolg mit dem Eintrag 5 im
      # Modul Erfolge freischalten (s. ACTOR_LEVEL_ERFOLG: 3 => [5]).
      # Actor 0 ist weiterhin für jeden beliebigen Actor.
      ACTOR_LEVEL_ERFOLG = {
        0 => [1, 4], # Diese Zeile nicht löschen
        1 => [],
        2 => [],
        3 => [5],
        4 => [],
        }
      
      # Dieses Script hier weißt jedem Goldbetrag eine Erfolgsnummer zu. Sobald
      # man also in diesem Beispiel 150 Gold oder mehr auf einmal angesammelt
      # hat, wird dadurch Erfolg 2 freigeschaltet.
      # Hierbei kann man die Liste beliebig erweitern, stets nach der Regelung:
      # "Goldbetrag => Erfolgs-ID,"
      AKTUELL_GOLD = {
        150 => 2,
        }
      
      # Dies funktioniert nach demselben Prinzip wie Gold, nur eben mit Schritten.
      MAX_SCHRITTE = {
        10 => 3,
        }
    end
  end
end

class Game_Actor < Game_Battler
  alias mk_level_up level_up
  
  def level_up
    mk_level_up
    @level_erfolg_all = MK3::Erfolge::Add_On::ACTOR_AT_LEVEL[0]
    if @level_erfolg_all.include?(@level)
      id = @level_erfolg_all.index(@level)
      @gain_erfolg = MK3::Erfolge::Add_On::ACTOR_LEVEL_ERFOLG[0]
      return if @gain_erfolg.nil?
      $mk.gib_erfolg(@gain_erfolg[id])
    end
    return if MK3::Erfolge::Add_On::ACTOR_AT_LEVEL[@actor_id].nil?
    @level_erfolg_one = MK3::Erfolge::Add_On::ACTOR_AT_LEVEL[@actor_id]
    if @level_erfolg_one.include?(@level)
      id = @level_erfolg_one.index(@level)
      return if MK3::Erfolge::Add_On::ACTOR_LEVEL_ERFOLG[@actor_id].nil?
      @gain_erfolg = MK3::Erfolge::Add_On::ACTOR_LEVEL_ERFOLG[@actor_id]
      $mk.gib_erfolg(@gain_erfolg[id])
    end
  end
end

class Game_Party < Game_Unit
  alias mk_increase_steps increase_steps
  alias mk_gain_gold gain_gold
  
  def increase_steps
    mk_increase_steps
    schrittzaehler = []
    MK3::Erfolge::Add_On::MAX_SCHRITTE.each_key do |key|
      schrittzaehler << key
    end
    if schrittzaehler.include?(@steps)
      $mk.gib_erfolg(MK3::Erfolge::Add_On::MAX_SCHRITTE[@steps])
    end
  end
  
  def gain_gold(gain_gold)
    mk_gain_gold(gain_gold)
    goldzaehler = []
    MK3::Erfolge::Add_On::AKTUELL_GOLD.each_key do |key|
      goldzaehler << key
    end
    goldzaehler.each do |goldsumme|
      if @gold > goldsumme
        $mk.gib_erfolg(MK3::Erfolge::Add_On::AKTUELL_GOLD[goldsumme])
      end
    end
  end
end

Um das Add-On nutzen zu können, benötigt man entweder Erfolge ab Version 0.81, oder man installiert diesen Zusatz im bereits bestehenden Erfolgs-Script bei niedrigerer Versions-Nummer:
Spoiler for Hiden:
class MK3_Commands
  def initialize
  end
  
  def gib_erfolg(id)
    if !$Erfolge_erhalten.include?(id)
      $Erfolge_erhalten << id
    end
  end
end

class Game_System
  alias mk_initialize initialize
  
  def initialize
    mk_initialize
    $mk = MK3_Commands.new
  end
end

Edit:
Derzeit in Arbeit: das zweite Add-On. Kann ein bissl länger dauern als das erste, da es etwas mehr Features bieten wird.
Vorab schon einmal die geplanten Elemente, welche Erfolge freischalten können:
Spoiler for Hiden:
- Die Menge an Gold, die man im Spiel insgesamt angesammelt hat (im Gegensatz zur aktuellen Menge, welche in Add-On 1 integriert war
- Die Menge an Gold, welche man insgesamt ausgegeben hat
- Die Anzahl Kämpfe, die man bestritten hat
- Die Menge an Schaden, welche man insgesamt verursacht hat (Heilen wird ignoriert)
- Die Menge an Schaden, die man geheilt hat (also das Gegenteil von letztem Punkt)
- Beide letztgenannten Punkte haben Schalter, welcher erlaubt, dass das Hinzufügen bzw. wieder entfernen von Status-Veränderungen einen Punktwert zugewiesen bekommen können, um welchen Schaden/Heilen erhöht wird, wobei man jeden einzelnen Status-Wert einzeln einem Schadens- und einem Heilwert zuordnen kann.

Edit:
Aktueller Stand des Add-Ons Nr. 2 (V 0.5):
Spoiler for Hiden:
- Spielzeit kann als Erfolgsbedingung verwendet werden (wird aber derzeit nur bei Menü-Aufruf verwendet)
- Kämpfe, investiertes Gold und insgesamt erhaltenes Gold sind gescripted aber noch ungetestet
- Status-Veränderungen und Schadens-/Heilungsberechner fehlen noch.
« Letzte Änderung: Oktober 08, 2009, 23:01:59 von Michael Funkel »
Und nie vergessen - Wir haben nur eine Welt...
Wenn sie zerbricht haben wir zwei.

Ruby sollte sich als Standard-Sprache etablieren!

Bitte bewahrt uns vorm Verhungern!

Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a

Offline Kyoshiro

  • Global Mod
  • RPGVX-Forengott
  • ****
  • Beiträge: 1623
  • Stand up and fight!
    • Mein Blog
Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a
« Antwort #5 am: Oktober 08, 2009, 10:56:02 »
Ein ähnliches Script, bzw. eigentlich ist es das Gleiche nur in einer anderen Ausführung, habe ich schon einmal auf rpgrevolution.com gesehen, wobei mir dies hier besser gefällt.
Vor allem die Möglichkeit es ins Menü einzubauen finde ich gut.
Ich habe keine passende Stelle gefunden, mit welchem Befehl kann man das Fenster als Event öffnen?
Die Menüeinbindung ist nett, ich würde es wenn aber eher nur an bestimmten Orten anzeigen lassen. :)

Kyoshiro

Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a

Offline Boogatie Roll

  • VX-Meister
  • ****
  • Beiträge: 676
  • Java[Spiele] Programmierer
    • BRolls Game Website
Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a
« Antwort #6 am: Oktober 08, 2009, 12:37:30 »
So das funktioniert jetzt.
Man sieht im Menü Erfolge, doch wenn man Erfolge auswählt,
passiert dass:
Spoiler for Hiden:
Hab die Version 0.81 genommen und unter Materials eingefügt...
...und ehm kann man auch machen das jeder Erfolg ein eigenes Icon hat..
Weil ich wollte zwei verschiedene Arten von Erfolgen machen, wo eine Art ein Icon hat,
und die andere Art von Erfolgen ein anderes Icon....
Also nicht alle das selbe Icon.
« Letzte Änderung: Oktober 08, 2009, 12:44:46 von Boogatie Roll »

Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a

Offline Michael Funkel

  • Event-Jongleur
  • **
  • Beiträge: 52
  • Derzeit fleißig am scripten
Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a
« Antwort #7 am: Oktober 08, 2009, 13:23:53 »
@ Kyo:
Ja, ich weiß, dass es schon das ein oder andere Erfolgs-Script gibt, allerdings haben die alle nicht die Features unterstützt, welche ich haben wollte, darum habe ich angefangen, mein eigenes zu Scripten.
Werde für dich dann noch einen Event-Befehl einbauen. ;)

Edit:
Hier ist die gewünschte Änderung. Kopiere den Code unter
module MK3
  module Commands
rein. Um es aufzurufen, gib einfach in einem Event "ruf_erfolge(scene)" ohne "" ein, wobei Scene für die derzeit aktive Scene steht (normalerweise Scene_Map).
 def ruf_erfolg(scene)
    $scene = Scene_Erfolge.new(scene)
  end
P.S.: Auf die Art kann man auch beispielsweise bei einem Kampf per Event freischalten. Muss man halt für scene Scene_Battle statt Scene_Map eingeben (funktioniert theoretisch auch bei allen anderen Scenes).

@ Boogatie:
Das klingt für mich so, als würde beim Aufruf des Erfolgs-Scripts versucht, der Speicher-Screen aufgerufen zu werden. Hast du noch andere Scripts, die das Menü verändern, oder etwas an den Menü-Einstellungen im Modul verändert?
Und die Sache mit den Icons: Ja, das wollte ich noch variabel gestalten, allerdings erst, wenn mein zweites Add-On fertig gestellt ist (derzeit auf V 0.6).
Edit:
Und hier für dich und alle, die es sonst noch möchten: Habe die Icons nun freier gestaltet. Man kann nun je nach Wahl für nicht freigeschaltete Erfolge ein Icon einrichten, wahlweise mit oder ohne geheimen (die eigene Icons erhalten können), sowie jedem freigeschalteten Erfolg entweder das gewohnte Standard-Icon, ein individuelles oder ein nach Punkten zugeteiltes Icon geben. Ist jetzt Erfolge 0.95b, also fast vollendet. Jetz neu mit Stand-Alone-Bugfix.
Spoiler for Hiden:
#===============================================================================
#
# MK3 - Phoenix Power Productions Presents: Erfolge 0.95b
# Letztes Update: Donnerstag, 08.10.2009
# 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.95b erhöht
#===============================================================================
# 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
# - Overwrite: Scene_File: return_scene
# - Overwrite: Scene_Menu: update
#
#===============================================================================

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 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 dari 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_Erfolge", ERFOLGE_NAME],
      6 => ["Scene_File", "Save"],
      7 => ["Scene_End", "Shutdown"],
      }
    
    # 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 = [1, 2, 3, 4, 6, 7, 5]
    
    # Dieser Schalter bestimmt, ob die bisherige Spielzeit im Menü angezeigt wird.
    # Funktioniert nur, wenn "MENU_ACCESS = true".
    SHOW_TIME = true
    
    # 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 ID muss mit der in MENU_LIST übereinstimmen.
    CHAR_WAHL = [2, 3, 4]
    
    # 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 => ["Erfolg-Titel", "Erfolg-Beschreibung|neue Zeile",    1,      36],
      2 => ["Geheim-Erfolg", "Dieser Erfolg ist erst zu sehen,|wenn du ihn erfüllst", 10],
      3 => ["Was zu tun?", "Diese Beschreibung erscheint erst|nach Erhalt des Erfolgs", 9, 99],
      }
      
    # 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 = 99
    
    # 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 = 100
    
    # 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 = 36
    
    # 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 => 96,
      10 => 97,
      15 => 98,
      }
    
    # 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
    
    # 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 = [2]
    
    # 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_Help < Window_Base
 
   def initialize(x = 0, y = 0, width = 544, height = WLH + 32)
     super(x, y, width, height)
   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 = []
    for id in $Erfolge_erhalten do
      @data.push(id)
    end
    MK3::Erfolge::ERFOLGE_LISTE.each_key do |key|
      if !$Erfolge_erhalten.include?(key) then
        @data.push(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_erfolg(id)
    contents.font.color = text_color(0)
    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
      erfolg = MK3::Erfolge::ERFOLGE_LISTE[id]
      if erfolg != nil
        if MK3::Erfolge::HAT_ERFOLG_FARBE
          contents.font.color = text_color(MK3::Erfolge::ERFOLG_FARBE)
        end
        text = erfolg[0]
      end
    else
      erfolg = MK3::Erfolge::ERFOLGE_LISTE[id]
      if erfolg != nil
        text = erfolg[0]
      end
    end
    self.contents.draw_text(25, WLH * (id - 1), 480, 24, text, 0)
  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)
    rect.width = ((contents.width + @spacing) / @column_max - @spacing) - 25
    rect.height = WLH
    rect.x = (index % @column_max * (rect.width + @spacing)) + 25
    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  
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 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
    text = game_time
    @time_window.update(text)
    @status_window.update
    if @command_window.active
      update_command_selection
    elsif @status_window.active
      if MK3::Erfolge::MENU_ACCESS then
        mk_update_actor_selection
      else
        update_actor_selection
      end
    end
  end
  
  def terminate
    mk_terminate
    @time_window.dispose
  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_File < Scene_Base
  alias mk_write_save_data write_save_data
  alias mk_read_save_data read_save_data
  
  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

  def return_scene
    if @from_title
      $scene = Scene_Title.new
    elsif @from_event
      $scene = Scene_Map.new
    else
      $scene = Scene_Menu.new#(4)
    end
  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
    @help_window = Window_Help.new(0, 0, 404)
    @help_window.contents.clear
    @help_window.set_text (text, 1)
    @score_window = Window_ErfolgsScore.new(404, 0, 140, 56)
    @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
    @score_window.dispose
    @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
      $scene = @scene.new()
    end
  end
  
  def update_erfolg_def(id)
    id += 1
    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
      erfolg = MK3::Erfolge::ERFOLGE_LISTE[id]
      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)
    }
  end
end

Und ich würde mich freuen, wenn mir noch ein paar Erweiterungen vorgeschlagen würden wie von Kyo und Boogatie, damit ich sie gleich ins Script einbauen kann. ;)
« Letzte Änderung: Oktober 08, 2009, 23:00:32 von Michael Funkel »
Und nie vergessen - Wir haben nur eine Welt...
Wenn sie zerbricht haben wir zwei.

Ruby sollte sich als Standard-Sprache etablieren!

Bitte bewahrt uns vorm Verhungern!

Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a

Offline Boogatie Roll

  • VX-Meister
  • ****
  • Beiträge: 676
  • Java[Spiele] Programmierer
    • BRolls Game Website
Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a
« Antwort #8 am: Oktober 08, 2009, 20:33:11 »
Ich hab jetzt zum Test ein Neues Projekt gemacht, das Script so gelassen und unter Main eingefügt.
Dann Teststart und das Menü geöffnet. Dann auf Erfolge und schwupps...
passiert dasselbe wie oben gezeigt..
Also funktioniert bei mir irgendwie nicht....

Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a

Offline Michael Funkel

  • Event-Jongleur
  • **
  • Beiträge: 52
  • Derzeit fleißig am scripten
Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a
« Antwort #9 am: Oktober 08, 2009, 22:58:48 »
@ Boogatie und alle anderen:

Ja, Sorry, dass das Erfolgs-Script alleinestehend zu diesem Fehler führt. Habe die Quelle gefunden und stelle deshalb die aktuelle Version des Scripts hoch, in welcher der Fehler behoben ist (habe sie selbst so in ein leeres Projekt gestellt und getestet, hatte funktioniert, also müsste der Fehler jetzt ein für allemal behoben sein). Werde den Bugfix auch in alle anderen Stellen eintragen.

Spoiler for Hiden:
#===============================================================================
#
# MK3 - Phoenix Power Productions Presents: Erfolge 0.96b
# Letztes Update: Donnerstag, 08.10.2009
# 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.96b erhöht
#===============================================================================
# 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
# - Overwrite: Window_Help: initialize
# - Overwrite: Scene_File: return_scene
# - Overwrite: Scene_Menu: update
#
#===============================================================================

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 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 dari 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_Erfolge", ERFOLGE_NAME],
      6 => ["Scene_File", "Save"],
      7 => ["Scene_End", "Shutdown"],
      }
    
    # 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 = [1, 2, 3, 4, 6, 7, 5]
    
    # Dieser Schalter bestimmt, ob die bisherige Spielzeit im Menü angezeigt wird.
    # Funktioniert nur, wenn "MENU_ACCESS = true".
    SHOW_TIME = true
    
    # 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 ID muss mit der in MENU_LIST übereinstimmen.
    CHAR_WAHL = [2, 3, 4]
    
    # 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 => ["Beispiel-Erfolg", "Mit dem Zeichen hinter diesem Wort|Beginnt eine neue Zeile.", 5],
      2 => ["Geheimer Titel", "Dies ist zur Demonstration von geheimen|Erfolgen.",                  10],
      3 => ["Hier nur Beschreibung", "Mich siehst du erst|wenn freigeschaltet.",                          15],
      }
      
    # 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 = 99
    
    # 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 = 100
    
    # 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 = 36
    
    # 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 => 96,
      10 => 97,
      15 => 98,
      }
    
    # 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.
    
    # 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 = [2]
    
    # 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 = []
    for id in $Erfolge_erhalten do
      @data.push(id)
    end
    MK3::Erfolge::ERFOLGE_LISTE.each_key do |key|
      if !$Erfolge_erhalten.include?(key) then
        @data.push(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_erfolg(id)
    contents.font.color = text_color(0)
    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
      erfolg = MK3::Erfolge::ERFOLGE_LISTE[id]
      if erfolg != nil
        if MK3::Erfolge::HAT_ERFOLG_FARBE
          contents.font.color = text_color(MK3::Erfolge::ERFOLG_FARBE)
        end
        text = erfolg[0]
      end
    else
      erfolg = MK3::Erfolge::ERFOLGE_LISTE[id]
      if erfolg != nil
        text = erfolg[0]
      end
    end
    self.contents.draw_text(25, WLH * (id - 1), 480, 24, text, 0)
  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)
    rect.width = ((contents.width + @spacing) / @column_max - @spacing) - 25
    rect.height = WLH
    rect.x = (index % @column_max * (rect.width + @spacing)) + 25
    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  
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 < Window_Base
  
   def initialize(x = 0, y = 0, width = 544, height = WLH + 32)
     super(x, y, width, height)
   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
    text = game_time
    @time_window.update(text)
    @status_window.update
    if @command_window.active
      update_command_selection
    elsif @status_window.active
      if MK3::Erfolge::MENU_ACCESS then
        mk_update_actor_selection
      else
        update_actor_selection
      end
    end
  end
  
  def terminate
    mk_terminate
    @time_window.dispose
  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_File < Scene_Base
  alias mk_write_save_data write_save_data
  alias mk_read_save_data read_save_data
  
  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

  def return_scene
    if @from_title
      $scene = Scene_Title.new
    elsif @from_event
      $scene = Scene_Map.new
    else
      $scene = Scene_Menu.new#(4)
    end
  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
    @help_window = Window_Help.new(0, 0, 404)
    @help_window.contents.clear
    @help_window.set_text (text, 1)
    @score_window = Window_ErfolgsScore.new(404, 0, 140, 56)
    @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
    @score_window.dispose
    @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
      $scene = @scene.new()
    end
  end
  
  def update_erfolg_def(id)
    id += 1
    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
      erfolg = MK3::Erfolge::ERFOLGE_LISTE[id]
      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)
    }
  end
end

Wer eine alte Version einfach patchen will:
Irgendwo außerhalb der Module und Klassen des Scripts diesen Code einfügen.
class Window_Help < Window_Base
  
   def initialize(x = 0, y = 0, width = 544, height = WLH + 32)
     super(x, y, width, height)
   end
end

Und ich will mich nochmal entschuldigen... hatte nicht mehr daran gedacht, dass ich Standard-Script ebenfalls geändert hatte, ist halt mein erstes Script. Wieder was dazugelernt... ^^'

Edit:
In Zukunft werde ich die Scripts stärker auf Kompatibilität und Unabhängigkeit prüfen, ehe ich sie on stelle, versprochen!
« Letzte Änderung: Oktober 08, 2009, 23:43:30 von Michael Funkel »
Und nie vergessen - Wir haben nur eine Welt...
Wenn sie zerbricht haben wir zwei.

Ruby sollte sich als Standard-Sprache etablieren!

Bitte bewahrt uns vorm Verhungern!

Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a

Offline Boogatie Roll

  • VX-Meister
  • ****
  • Beiträge: 676
  • Java[Spiele] Programmierer
    • BRolls Game Website
Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a
« Antwort #10 am: Oktober 09, 2009, 08:16:56 »
Jetzt gehts!
Echt Erste Sahne das Script...
Das Gibt nen fetten Credits eintrag!

Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a

Offline Michael Funkel

  • Event-Jongleur
  • **
  • Beiträge: 52
  • Derzeit fleißig am scripten
Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a
« Antwort #11 am: Oktober 09, 2009, 11:24:19 »
Werde heute, spätestens hoffentlich am Wochenende, wenn ich's heute nicht mehr schaffe, Version 1.0 fertigstellen. Folgende Features sollen noch eingebaut werden:
- Das Erfolgs-Score-Window soll deaktivierbar sein (so kann man die Punkte für Icon-Zuweisung verwenden, ohne sie im eigentlichen Spiel zu verwenden) Edit: Done!
- Die Erfolge sollen optional spielbezogen statt Spielstand-abhängig sein. Sprich: wenn man dieses Feature nutzt, wird ein separater Spielstand angelegt, welcher die Erfolge abspeichert. So kann man einrichten, dass ein Spiel mehrmals durchgespielt wird, um wirklich alle Erfolge freizuschalten. Edit: Done!
- Das Erfolgs-Window soll eine Sortierfunktion erhalten, die optional vom Entwickler auch für den Spieler per Button-Eingabe aufgerufen werden kann.
- Das Lied, welches bei Erfolgserhalt abgespielt werden kann, soll freier konfigurierbar sein Edit: Done!
- Es soll optional eine frei konfigurierbare Einblendung bei Erhalt eines Erfolges erscheinen
- Die jeweilige Punktzahl des Erfolges soll nach Wahl gar nicht, beim Erfolgs-Titel oder bei der Beschreibung eingeblendet werden, wahlweise mit Anhängsel wie z.B. " Punkte", differenziert dabei nach einem Punkt oder mehreren (weil 1 Punkt/mehrere Punkte). Edit: Done!

Anschließend soll der Code noch ein wenig bereinigt und geordnet werden. Weitere Updates folgen dann in Form meiner Add-Ons (von denen ja bereits wie mitgeteilt Teil II in Mache ist) und Patches, sollten noch weitere Bugs auftauchen, beispielsweise durch Inkompatibilität mit anderen Scripten. Wenn noch weitere Features gewünscht werden, werde ich diese nach Möglichkeit in das nächst-folgende Add-On einbetten.
« Letzte Änderung: Oktober 17, 2009, 16:14:52 von Michael Funkel »
Und nie vergessen - Wir haben nur eine Welt...
Wenn sie zerbricht haben wir zwei.

Ruby sollte sich als Standard-Sprache etablieren!

Bitte bewahrt uns vorm Verhungern!

Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a

Offline Boogatie Roll

  • VX-Meister
  • ****
  • Beiträge: 676
  • Java[Spiele] Programmierer
    • BRolls Game Website
Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a
« Antwort #12 am: Oktober 09, 2009, 13:19:53 »
Hab auch noch ne gute Idee:
-Erneuerbare Erfolge:
Wenn man sie freigeschalten hat, kann man sie immer noch mal überbieten.
ZUm Beispiel: Man muss 5 Hasen fangen. Sobald das geschafft ist bekommt man den ERfolg.
Wenn man dann aber beim zweiten mal 7 Hasen fängt, steht bei dem ERfolg sozusagen noch
die Highscore da.
und....
-Punkte-Anzeige:
Dass man (wenn man will) sehen kann wie viele Punkte der einzelne Erfolg gibt.
« Letzte Änderung: Oktober 09, 2009, 14:16:27 von Boogatie Roll »

Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a

Offline Michael Funkel

  • Event-Jongleur
  • **
  • Beiträge: 52
  • Derzeit fleißig am scripten
Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a
« Antwort #13 am: Oktober 09, 2009, 14:49:43 »
@Boogatie:
Die Punkte-Anzeige ist bereits integriert. Der letzte Punkt der geplanten Features in meinem letzten Post ist eben genau das (es sei denn, ich verstehe dich falsch). Dieses Feature ist bereits eingebaut, allerdings werde ich es erst hochladen, wenn 1.0 fertig gestellt ist (könnte mit heute ein bissl eng werden...). Dabei kann man beliebig einstellen, ob die Punktzahl bei den Erfolgs-Titeln, bei der Beschreibung oder gar nicht angezeigt wird.
Und mit den erneuerbaren Erfolgen: man kann ja aufstufen. Zum Beispiel bei den Add-Ons mehrere Erfolge in eine Liste setzen, wie es bei Goldwert, Level und dergleichen geht. Wenn du willst, dass man Erfolge jedoch gegen andere ersetzen kann, werde ich das entweder in ein Update für 1.0 erstellen, oder in ein 3. Add-On einbauen. Wird aber auf jeden Fall noch ein paar Tage dauern, vermutlich irgendwann nächste Woche.

Edit:
Habe durch Boogatie erfahren, dass das Menü nennenswert fehlerhaft ist, sobald man weniger als sechs Befehle hat. Habe deswegen beschlossen, noch ein Release vor 1.0 zu machen, nämlich Version 0.98a
Spoiler for Hiden:
#===============================================================================
#
# MK3 - Phoenix Power Productions Presents: Erfolge 0.98a
# Letztes Update: Freitag, 09.10.2009
# 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 = false
    
    # Mit diesem Schalter kann man bestimmen, ob der Erfolgs-Screen per Taste auf
    # der Map gerufen werden kann.
    MAP_ACCESS = true
    
    # 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 dari 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 = true
    
    # 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 => ["Stufe 2", "Bringe einen beliebigen Charakter|auf Stufe 2.", 5],
      2 => ["Kleiner Reichtum", "Sammel 150 Gold an.",                  10],
      3 => ["Wanderslust", "Gehe 10 Schritte",                           1],
      4 => ["Einer auf 4", "Bringe einen beliebigen Charakter|auf Stufe 4", 15],
      5 => ["Der Held ist 4", "Bringe den dritten Chara auf Stufe 4",   10],
      6 => ["Geld geht durch Hände", "Gebe über 1.000 Gold aus",        15],
      7 => ["Langzeitspieler", "Spiele eine Minute lang",                5],
      8 => ["Münzwechsler", "Erhalte insgesamt über 1.500 Gold",        10],
      9 => ["Kämpfer", "Gewinne deinen ersten Kampf.",                   5, 2],
     10 => ["Schadensausteiler", "Teile insgesamt 100 Punkte|Schaden aus.", 5],
     11 => ["Heilerfolg", "Heile insgesamt 5 HP|innerhalb eines Kampfes", 5],
     12 => ["Redselig", "Sprich mit dem Mann rechts",                   14, 115],
      }
      
    # 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 = 99
    
    # 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 = 100
    
    # 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 = 36
    
    # 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 => 96,
      10 => 97,
      15 => 98,
      }
    
    # 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 = [2]
    
    # 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  
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
    text = game_time
    @time_window.update(text)
    @status_window.update
    if @command_window.active
      update_command_selection
    elsif @status_window.active
      if MK3::Erfolge::MENU_ACCESS then
        mk_update_actor_selection
      else
        update_actor_selection
      end
    end
  end
  
  def terminate
    mk_terminate
    @time_window.dispose
  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(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

Dazu gebe ich noch Version 0.6 des zweiten Add-Ons raus. Zwar werden Items noch automatisch mitgezählt und Statusveränderungen können nicht bei MAX_HEAL und MAX_DAMAGE berücksichtigt werden, aber der Rest funktioniert.
Spoiler for Hiden:
#===============================================================================
#
# MK3 - Phoenix Power Productions Presents: Erfolge - Add-On 02, V 0.6
# Letztes Update: Mittwoch, 07.10.2009
# Level: Leicht
#
# Das zweite Add-On zu meinem Erfolgs-Script erweitert es um die Möglichkeit, mit
# einfachen Mitteln Erfolge auf die Gesamtzahl gesammelten Goldes, sowie die Summe
# an investiertem Gold zu setzen. Außerdem zählt es Kämpfe und angerichteten
# Schaden mit, um Erfolge darauf setzen zu können. Wie immer ist es dabei möglich,
# mehrere Erfolge in der jeweiligen Liste einzusetzen.
# Das Script unterstützt darüber hinaus mehrere Optionen für Schadens- und Heil-
# berechnungen.
#
#===============================================================================
# Updates:
# ----------------------------------------------------------------------------
# o 07.10.2009 - Beginn des Projekts auf V 0.5
# o 08.10.2009 - Einbau der Features MAX_DAMAGE und MAX_BATTLES, V 0.6
#===============================================================================
# Installation und Anleitung
#===============================================================================
#
# Platziere das Script unter Material und über Main. Zur Übersicht empfehle ich,
# es nach dem Erfolgs-Script einzufügen.
# Um zu funktionieren, benötigt das Add-On das Erfolgs-Script in der Version 0.91
# oder höher.
#
#===============================================================================
#
# Kompatibilität
# - Alias: Game_Battler: make_attack_damage_value, make_obj_damage_value
# - Alias: Game_Party: gain_gold
# - Alias: Scene_Battle: battle_end
# - Alias: Scene_Title: command_new_game
# - Alias: Scene_Menu: initialize, update
#
#===============================================================================

module MK3
  module Erfolge
    module Add_On
      # Ordnet den Zähler für MAX_GOLD einer Variablen zu. 0 schaltet MAX_GOLD
      # aus.
      MAX_GOLD_VARIABLE = 1
      
      # Dieses Script funktioniert ähnlich dem AKTUELL_GOLD aus Add-On 1. Aller-
      # dings kann man hier die Menge des gesamt verdienten Goldes seit Spielbe-
      # ginn abfragen anstatt des aktuellen Vermögens.
      # Es funktioniert hierbei nach demselben Prinzip: Goldbetrag => Erfolg,
      MAX_GOLD = {
        1500 => 8
        }
      
      # Ordnet den Zähler für LOSE_GOLD einer Variablen zu. 0 schaltet LOSE_GOLD
      # aus.
      LOSE_GOLD_VARIABLE = 2
      
      # Hier kannst du ähnlich MAX_GOLD einen Goldbetrag festlegen, allerdings
      # geht es nicht um die Menge Gold, die man insgesamt besitzt, sondern um
      # die Menge an Gold, die man seit Spielbeginn ausgegeben hat.
      LOSE_GOLD = {
        1000 => 6,
        }
      
      # Ordnet den Zähler für MAX_BATTLE einer Variable zu. 0 schaltet MAX_BATTLE
      # aus.
      MAX_BATTLE_VARIABLE = 3
      
      # Ermöglicht es, Erfolge der Summe bereits absolvierter Kämpfe zuzuordnen.
      # Dies funktioniert nach gewohntem Standard: "Kampf-Zahl => Erfolg-ID".
      MAX_BATTLE = {
        1 => 9
        }
      
      # Gibt die ID der Variable an, in welcher der MAX_DAMAGE-Wert abgespeichert
      # wird. Bei 0 wird MAX_DAMAGE ignoriert.
      MAX_DAMAGE_VARIABLE = 4
      
      # Gibt die ID der Variable an, in welcher der MAX_HEAL-Wert abgespeichert
      # wird. Bei 0 wird MAX_HEAL ignoriert.
      MAX_HEAL_VARIABLE = 5
      
      # Diese Funktion rechnet den seit Spielbeginn ausgeteilten Schaden durch
      # Angriffe, Skills und Items aus, ignoriert dabei jedoch sämtliche hei-
      # lenden Effekte. Eingerichtet wird es durch Schaden => Erfolg,. Also
      # so, wie fast jede Einstellung zu treffen ist. Schreibt man nun z.B.:
      # "10000 => 9," so wird nach insgesamt 10.000 verursachten Schadenspunkten
      # der Erfolg mit der ID 9 freigeschaltet.
      MAX_DAMAGE = {
        100 => 10
        }
      
      # Dieser Wert berechnet die Rate, wie MP-Damage mitberücksichtigt wird beim
      # Berechnen des MAX_DAMAGE-Werts. Eine Rate von 0 bedeutet, dass dieser Wert
      # ignoriert wird. Die Rate wird in Prozen angegeben. Schreibt man also "50"
      # (ohne Anführungszeichen), so wird der Wert zu 50% eingerechnet.
      MAX_MP_DAMAGE_RATE = 50
      
      # MAX_HEAL ist das genaue Gegenteil, es sammelt den Wert, um welchen die
      # Gruppe insgesamt geheilt wurde. Ansonsten funktioniert es identisch.
      MAX_HEAL = {
        5 => 11,
        }
      
      # Dieser Schalter bestimmt, ob Items bei MAX_DAMAGE mitberücksichtigt werden.
      ITEMS_INCLUDE_MAX_DAMAGE = true
      # Dieses Feature ist noch nicht eingebaut.
      
      # Dieser Schalter bestimmt, ob Status-Veränderungen beim Gegner den
      # MAX_DAMAGE Wert verändern oder nicht.
      INCLUDE_STATES_DAMAGE = false
      # Dieses Feature ist noch nicht eingebaut.
      
      # Dieser Schalter bestimmt, ob Items bei MAX_HEAL mitberücksichtigt werden.
      ITEMS_INCLUDE_MAX_HEAL = true
      # Dieses Feature ist noch nicht eingebaut.
      
      # Dieser Schalter bestimmt, ob das Heilen von Status-Veränderungen bei
      # Gruppenmitgliedern den MAX_HEAL Wert erhöhen oder nicht
      INCLUDE_STATES_HEAL = false
      # Dieses Feature ist noch nicht eingebaut.
      
      # Ordnet jeder State-ID den Wert zu, um welchen MAX_DAMAGE erhöht wird,
      # wenn ein Angriff des Spielers die Statusveränderung beim Gegner verur-
      # sacht. Dies schreibt sich "State-ID => X" (ohne ""), wobei State-ID eben
      # jene ID der entsprechenden Status-Veränderung ist und X der Wert, um den
      # die MAX_DAMAGE-Variable erhöht wird.
      STATE_DAMAGE_VALUE = {
        }
      
      # Ordnet jeder State-ID den Wert zu, um welchen MAX_HEAL erhöht wird, wenn
      # ein Angriff des Spielers die Statusveränderung beim Gegner verursacht.
      # Dies schreibt sich "State-ID => X" (ohne ""), wobei State-ID eben jene
      # ID der entsprechenden Status-Veränderung ist und X der Wert, um den die
      # MAX_HEAL-Variable erhöht wird.
      STATE_HEAL_VALUE = {
        }
      
      # Ordnet Erfolge der bereits verstrichenen Spielzeit zu. Hierbei muss ange-
      # merkt werden, dass die Spielzeit von dem Script derzeit nur beim Menüauf-
      # ruf geladen wird, weshalb Erfolge nicht sofort, sondern erst beim nächsten
      # Menüstart freigeschaltet werden.
      # Die Spielzeit schreibt sich dabei "XXYYZZ" (mit ""), wobei XX für Stunden,
      # YY für Minuten und ZZ für Sekunden steht.
      MAX_SPIELZEIT = {
      "000100" => 7,
        }
    end
  end
end

$imported = {} if $imported == nil
$imported["MK3_Erfolge_Add2"] = true

class Game_Battler
  alias mk_make_attack_damage_value make_attack_damage_value
  alias mk_make_obj_damage_value make_obj_damage_value
  
  def make_attack_damage_value(attacker)
    mk_make_attack_damage_value(attacker)
    if attacker.name != nil
      if MK3::Erfolge::Add_On::MAX_DAMAGE_VARIABLE > 0
        $game_variables[MK3::Erfolge::Add_On::MAX_DAMAGE_VARIABLE] += @hp_damage if @hp_damage > 0
        schadenzaehler = []
        MK3::Erfolge::Add_On::MAX_DAMAGE.each_key do |key|
          schadenzaehler << key
        end
        schadenzaehler.each do |schadenmax|
          if $game_variables[MK3::Erfolge::Add_On::MAX_DAMAGE_VARIABLE] >= schadenmax
            $mk.gib_erfolg(MK3::Erfolge::Add_On::MAX_DAMAGE[schadenmax])
          end
        end
      end
    end
  end
  
  def make_obj_damage_value(user, obj)
    mk_make_obj_damage_value(user, obj)
    if user.name != nil
      if MK3::Erfolge::Add_On::MAX_DAMAGE_VARIABLE > 0
        $game_variables[MK3::Erfolge::Add_On::MAX_DAMAGE_VARIABLE] += @hp_damage if @hp_damage > 0
        if @mp_damage > 0
          mpd = @mp_damage
          $game_variables[MK3::Erfolge::Add_On::MAX_DAMAGE_VARIABLE] += mpd * MK3::Erfolge::Add_On::MAX_MP_DAMAGE_RATE
        end
        schadenzaehler = []
        MK3::Erfolge::Add_On::MAX_DAMAGE.each_key do |key|
          schadenzaehler << key
        end
        schadenzaehler.each do |schadenmax|
          if $game_variables[MK3::Erfolge::Add_On::MAX_DAMAGE_VARIABLE] >= schadenmax
            $mk.gib_erfolg(MK3::Erfolge::Add_On::MAX_DAMAGE[schadenmax])
          end
        end
      end
    end
    if user.name != nil
      if MK3::Erfolge::Add_On::MAX_HEAL_VARIABLE > 0
        $game_variables[MK3::Erfolge::Add_On::MAX_HEAL_VARIABLE] -= @hp_damage if @hp_damage < 0
        heilzaehler = []
        MK3::Erfolge::Add_On::MAX_HEAL.each_key do |key|
          heilzaehler << key
        end
        heilzaehler.each do |heilmax|
          if $game_variables[MK3::Erfolge::Add_On::MAX_HEAL_VARIABLE] >= heilmax
            $mk.gib_erfolg(MK3::Erfolge::Add_On::MAX_HEAL[heilmax])
          end
        end
      end
    end
  end
end

class Game_Party < Game_Unit
  alias mk_gain_gold_2 gain_gold
  
  def gain_gold(n)  
    mk_gain_gold_2(n)
    if n > 0
      if MK3::Erfolge::Add_On::MAX_GOLD_VARIABLE > 0
        $game_variables[MK3::Erfolge::Add_On::MAX_GOLD_VARIABLE] += n
        goldkombi = []
        MK3::Erfolge::Add_On::MAX_GOLD.each_key do |key|
          goldkombi << key
        end
        goldkombi.each do |goldmax|
          if $game_variables[MK3::Erfolge::Add_On::MAX_GOLD_VARIABLE] >= goldmax
            $mk.gib_erfolg(MK3::Erfolge::Add_On::MAX_GOLD[goldmax])
          end
        end
      end
    end
    if n < 0
      if MK3::Erfolge::Add_On::LOSE_GOLD_VARIABLE > 0
        $game_variables[MK3::Erfolge::Add_On::LOSE_GOLD_VARIABLE] -= n
      end
      goldzaehler = []
      MK3::Erfolge::Add_On::LOSE_GOLD.each_key do |key|
        goldzaehler << key
      end
      goldzaehler.each do |goldsumme|
        if $game_variables[MK3::Erfolge::Add_On::LOSE_GOLD_VARIABLE] >= goldsumme
          $mk.gib_erfolg(MK3::Erfolge::Add_On::LOSE_GOLD[goldsumme])
        end
      end
    end
  end
end

class Scene_Title < Scene_Base
  alias mk_command_new_game command_new_game
  
  def command_new_game
    mk_command_new_game
    if MK3::Erfolge::Add_On::MAX_GOLD_VARIABLE > 0
      $game_variables[MK3::Erfolge::Add_On::MAX_GOLD_VARIABLE]
    end
    if MK3::Erfolge::Add_On::LOSE_GOLD_VARIABLE > 0
      $game_variables[MK3::Erfolge::Add_On::LOSE_GOLD_VARIABLE]
    end
    if MK3::Erfolge::Add_On::MAX_BATTLE_VARIABLE > 0
      $game_variables[MK3::Erfolge::Add_On::MAX_BATTLE_VARIABLE] = 0
    end
    if MK3::Erfolge::Add_On::MAX_DAMAGE_VARIABLE > 0
      $game_variables[MK3::Erfolge::Add_On::MAX_DAMAGE_VARIABLE] = 0
    end
    if MK3::Erfolge::Add_On::MAX_HEAL_VARIABLE > 0
      $game_variables[MK3::Erfolge::Add_On::MAX_HEAL_VARIABLE] = 0
    end
  end
end

class Scene_Menu < Scene_Base
  alias mk_initialize initialize
  alias mk2_update update
  
  def initialize(index = 0)
    mk_initialize(index)
    check_playtime
  end
  
  def update
    mk2_update
    check_playtime
  end
  
  def check_playtime
    text = game_time(true)
    zeitzaehler = []
    MK3::Erfolge::Add_On::MAX_SPIELZEIT.each_key do |key|
      zeitzaehler << key
    end
    zeitzaehler.each do |zeit|
      if text.to_i >= zeit.to_i
        $mk.gib_erfolg(MK3::Erfolge::Add_On::MAX_SPIELZEIT[zeit])
      else
        return
      end
    end
  end
end

class Scene_Battle
  alias mk_battle_end battle_end
  
  def battle_end(result)
    mk_battle_end(result)
    if MK3::Erfolge::Add_On::MAX_BATTLE_VARIABLE > 0
      $game_variables[MK3::Erfolge::Add_On::MAX_BATTLE_VARIABLE] += 1
      if !MK3::Erfolge::Add_On::MAX_BATTLE.nil?
        battlezaehler = []
        MK3::Erfolge::Add_On::MAX_BATTLE.each_key do |key|
          battlezaehler << key
        end
        battlezaehler.each do |kampfsumme|
          if $game_variables[MK3::Erfolge::Add_On::MAX_BATTLE_VARIABLE] >= kampfsumme
            $mk.gib_erfolg(MK3::Erfolge::Add_On::MAX_BATTLE[kampfsumme])
          return
          end
        end
      end
    end
  end
end
« Letzte Änderung: Oktober 09, 2009, 22:30:41 von Michael Funkel »
Und nie vergessen - Wir haben nur eine Welt...
Wenn sie zerbricht haben wir zwei.

Ruby sollte sich als Standard-Sprache etablieren!

Bitte bewahrt uns vorm Verhungern!

Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a

Offline PD

  • Mr. MACK-Tile
  • ***
  • Beiträge: 277
    • Nocturn Offiziell (Youtube-Kanal)
Re: Erfolge wie Gamerscore in XBox 360, Version 0.51a
« Antwort #14 am: Oktober 12, 2009, 20:46:42 »
Also ersma, hammer Script ;)
Allerdings kommt bei mir folgende Fehlermeldung:

wenn ich das Menü öffne...
Aber nur wenn ich es so umschalte SHOW_TIME = false
Version 0.98a

Ich benutze noch dieses Menü Script und denke,
dass es vielleicht daran liegt, da in diesem Script auch die Spieldauer
angezeigt wird:

Spoiler for Hiden:
=begin                  
                          BigEd781' Final Fantasy IX Menu
            Credit to PainHurt at rpgmakervx.net for most of the graphics
=end

module FF9_Config  
    
  # set this to 'true' if you would like to use a cusotm background image
  USE_CUSTOM_BACK = true
  # the name of the custom background image, without the file extension (no .png)
  BACK_NAME = 'StoneBackground'
  # if you set this to 'true', you must be using the enhanced
  # Window class script that I posted:  You can get that script here:
  # http://www.rpgmakervx.net/index.php?showtopic=8042&hl=
  # this will make the provided FF9 windowskin look really good.
  USE_TILED_WINDOW = false
  
  # When this is set to 'true', the menu cirsor will animate back and forth.
  # When set to 'false', it will stay in place
  ANIMATE_CURSOR = false
  
  # When set to 'true', four background panels are always drawn.
  # When set to 'false', a panel is only drawn for each party member
  DRAW_FOR_ALL = true
  
  # the name of the font used in the menu.  
  # use 'Font.default_name' for the default font.  Try 'Centaur' for a nice, smaller font.
  DEFAULT_FONT = Font.default_name
  
  # set this to true to enable the font above for all windows.
  # also sets the back_opacity to 255 for all windows.  
  # I recommend setting this to 'true' to maintain a consistent look.
  USE_FOR_ALL = true
  
  # the icon id for your gold window portion of the menu, 194 by default.
  GOLD_ICON_ID = 194
  
end

if FF9_Config::USE_FOR_ALL    
  
  Font.default_name = FF9_Config::DEFAULT_FONT
  
  class Window_Base < Window
    
    alias :eds_pre_ff9_menu_base_initialize :initialize
    def initialize(*args)
      eds_pre_ff9_menu_base_initialize(*args)  
      self.stretch = false if FF9_Config::USE_TILED_WINDOW
      self.back_opacity = 255
    end
    
  end
  
end

class Window_Base < Window
  
  CAPTION_COLOR = Color.new(255,255,255)#(228, 228, 228)
  CAPTION_HEIGHT = 12
  X_OFFSET = 16
  Y_OFFSET = -5
  
  alias :eds_pre_window_caption_intialize :initialize
  def initialize(*args)      
    eds_pre_window_caption_intialize(*args)    
    @caption_sprite = Sprite_Base.new(self.viewport)
    create_caption_bitmap(1, CAPTION_HEIGHT)        
    @caption_sprite.x = self.x + X_OFFSET
    @caption_sprite.y = self.y + Y_OFFSET
    @caption_sprite.z = self.z + 1
  end
  
  def x=(value)
    super
    @caption_sprite.x = value + X_OFFSET unless @caption_sprite.nil?
  end
  
  def y=(value)
    super
    @caption_sprite.y = value + Y_OFFSET unless @caption_sprite.nil?
  end
  
  def z=(value)
    super
    @caption_sprite.z = value + 1 unless @caption_sprite.nil?
  end
  
  def caption=(text)
    return unless text.is_a?(String)
    return if text.empty?
    @caption = text
    width = @caption_sprite.bitmap.text_size(@caption).width
    create_caption_bitmap(width, CAPTION_HEIGHT)    
    draw_caption
  end  
  
  def create_caption_bitmap(w, h)
    @caption_sprite.bitmap = Bitmap.new(w, h)    
    @caption_sprite.bitmap.font.size = 12
    @caption_sprite.bitmap.font.color = CAPTION_COLOR
    @caption_sprite.bitmap.font.bold = true  
  end
  
  def draw_caption
    unless @caption.nil?
      h = @caption_sprite.bitmap.height
      w = @caption_sprite.bitmap.width
      rect = Rect.new( 0, h / 2, w, h / 4 )
      @caption_sprite.bitmap.fill_rect(rect, Color.new(0, 0, 0, 96))      
      @caption_sprite.bitmap.draw_text(@caption_sprite.src_rect, @caption)      
    end
  end
  
  alias :eds_pre_caption_window_dispose :dispose
  def dispose
    eds_pre_caption_window_dispose
    @caption_sprite.dispose
  end
  
  def find_window_width(text)              
    return Bitmap.new(544, 416).text_size(text).width + 32
  end    
  
end

class Window_TimeGold < Window_Base  
    
  def initialize(x, y)  
    width = find_window_width("9999999")
    width = 140 if width < 140
    super(x, y, width, WLH + 58)    
    self.back_opacity = 255
    self.stretch = false if FF9_Config::USE_TILED_WINDOW
    self.contents.font.name = FF9_Config::DEFAULT_FONT
    self.caption = ""
    @time_icon = Cache.picture('Timer')  
    @intern_frame_count = 0
    refresh
  end
  
  def draw_time
    sec = (Graphics.frame_count / 60) % 60
    min = (Graphics.frame_count / 3600) % 60
    hrs = Graphics.frame_count / 216000    
    self.contents.font.color = Color.new(255, 255, 255)    
    time = "%02d:%02d:%02d" % [hrs, min, sec]
    self.contents.draw_text(0, 0, self.contents.width, WLH, time, 2)    
  end  
  
  def refresh
    self.contents.clear
    self.contents.blt(0, 0, @time_icon, @time_icon.rect)
    draw_icon(FF9_Config::GOLD_ICON_ID, 2, WLH)  
    draw_currency_value($game_party.gold, 0, WLH, self.contents.width)
    draw_time
  end
  
  def draw_currency_value(value, x, y, width)
    gold_text = Vocab.gold
    cx = contents.text_size(gold_text[0,1]).width
    self.contents.font.color = normal_color
    self.contents.draw_text(x, y, width - cx - 2, WLH, value, 2)
    self.contents.font.color = system_color
    # just print the first character of Vocab::gold
    self.contents.draw_text(x, y, width, WLH, gold_text[0,1], 2)
  end
  
  def update
    super
    @intern_frame_count += 1
    return if (@intern_frame_count % 60) != 0          
    refresh
  end
  
  def find_window_width(text)              
    return Bitmap.new(544, 416).text_size(text).width + 80
  end
  
end

class Window_MenuLocation < Window_Base
  
  def initialize(x, y)
    @map_name = load_data("Data/MapInfos.rvdata")[$game_map.map_id].name
    width = find_window_width(@map_name)
    super(x, y, width, WLH + 32)    
    self.stretch = false if FF9_Config::USE_TILED_WINDOW
    self.contents.font.name = FF9_Config::DEFAULT_FONT
    self.back_opacity = 255
    self.caption = ""
    refresh
  end
  
  def refresh
    self.contents.clear    
    self.contents.draw_text(0, 0, self.contents.width, WLH,  @map_name, 1)
  end
  
  def find_window_width(text)              
    return Bitmap.new(544, 416).text_size(text).width + 48
  end
  
end

class Window_Command < Window_Selectable
  
  alias :eds_pre_ff9_menu_win_command_init :initialize
  def initialize(*args)
    @font_name = Font.default_name    
    eds_pre_ff9_menu_win_command_init(*args)    
  end
  #--------------------------------------------------------------------------
  # * OVERWRITTEN
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear    
    self.contents.font.name = @font_name
    for i in 0...@item_max
      draw_item(i)
    end
  end
  
  def font_name=(name)
    @font_name = name    
  end
  
end

class Window_Uses < Window_Base  
  
  def initialize(right, y, item)    
    @remaining_text = "Remaining: #{$game_party.item_number(item)}"
    w = 160
    x = right ? (544 - w) : 0    
    super(x, y, w, WLH + 32)    
    self.stretch = false if FF9_Config::USE_TILED_WINDOW
    self.contents.font.name = FF9_Config::DEFAULT_FONT
    refresh
  end
  
  def item=(item)    
    return unless item.is_a?(RPG::Item)
    @remaining_text = "Remaining: #{$game_party.item_number(item)}"      
    refresh
  end
  
  def visible=(value)
    super
    refresh if value
  end
  
  def refresh
    self.contents.clear
    self.contents.draw_text(self.contents.rect, @remaining_text, 1)
  end
  
end

class Window_SkillUses < Window_Base  
  
  def initialize(right, y, actor, skill)    
    @remaining_text = make_info_string(actor, skill)
    w = 182
    x = right ? (544 - w) : 0        
    super(x, y, w, WLH + 32)  
    self.stretch = false if FF9_Config::USE_TILED_WINDOW
    self.contents.font.name = FF9_Config::DEFAULT_FONT
    refresh
  end
  
  def make_info_string(actor, skill)
    return if actor.nil? || skill.nil?
    cost = actor.calc_mp_cost(skill)
    return "Unlimited" if cost < 1
    return "Remaining: #{actor.mp / cost}"
  end
  
  def set_skill(actor, skill)
    return if actor.nil? || skill.nil?
    return unless skill.is_a?(RPG::Skill)
    @remaining_text = make_info_string(actor, skill)    
    refresh
  end
  
  def visible=(value)
    super
    refresh if value
  end
  
  def refresh    
    self.contents.clear
    self.contents.draw_text(self.contents.rect, @remaining_text, 1)
  end
  
end

class Window_MenuStatus < Window_Selectable
    
  #--------------------------------------------------------------------------
  # * OVERWRITTEN
  #--------------------------------------------------------------------------
  def initialize(x, y)
    super(x, y, 452, 352)      
    @bg_image = Cache.picture('FF9_MenuBar')  
    @arrow_image = Cache.picture('Pointer')
    create_arrow_sprites
    @sprite_last_draw_x = 0
    @sprite_inc_x = 1
    @intern_frame_count = 0    
    self.stretch = false if FF9_Config::USE_TILED_WINDOW
    self.contents.font.name = FF9_Config::DEFAULT_FONT
    self.opacity = 0    
    self.z = 99        
    self.active = false
    self.index = -1
    refresh
  end
  #--------------------------------------------------------------------------
  # * create_arrow_sprites
  #--------------------------------------------------------------------------
  def create_arrow_sprites  
    @arrow_sprites = []
    for i in 0..3
      @arrow_sprites << Sprite.new
      @arrow_sprites.bitmap = Bitmap.new(@arrow_image.width + 7, @arrow_image.height)
      @arrow_sprites.x = self.x
      @arrow_sprites.y = (i * 80) + self.y + 40      
      @arrow_sprites.z = 999        
    end
  end
  #--------------------------------------------------------------------------
  # * OVERWRITTEN
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    @item_max = $game_party.members.size
    draw_background_windows if FF9_Config::DRAW_FOR_ALL
    for actor in $game_party.members
      x = 104
      y = actor.index * 80      
      y_offset = 6      
      draw_background_window(0, y) unless FF9_Config::DRAW_FOR_ALL
      draw_actor_face(actor, 19, y + 4, 73)
      draw_actor_name(actor, x, y + y_offset)
      draw_actor_class(actor, x + 125, y + y_offset) if actor.states.empty?
      draw_actor_level(actor, x, y + WLH * 1)      
      draw_actor_state(actor, x + 125, y + y_offset)
      draw_actor_hp(actor, x, ((y) + (WLH * 2) - 5))
      draw_actor_mp(actor, x + 125, ((y) + (WLH * 2) - 5))
    end
  end  
  #--------------------------------------------------------------------------
  # * OVERWRITTEN
  #--------------------------------------------------------------------------
  def update_cursor              
    if @index < 0              
      #refactor into update arrow method
      @arrow_sprites.each { |sprite| sprite.bitmap.clear }
      return
    end
    @intern_frame_count += 1
    return unless (@intern_frame_count % 5) == 0
    if @sprite_last_draw_x >= 7      
      @sprite_inc_x = -1
    elsif @sprite_last_draw_x <= 0
      @sprite_inc_x = 1
    end
    update_arrow_sprites
  end
  #--------------------------------------------------------------------------
  # * update_arrow_sprites
  #--------------------------------------------------------------------------
  def update_arrow_sprites    
    @arrow_sprites.each { |sprite| sprite.bitmap.clear }    
    if @index == 99   # all selected        
      return unless (@intern_frame_count % 10) == 0
      draw_arrow_sprites(@arrow_sprites, false)      
    else
      draw_arrow_sprites([@arrow_sprites[@index]], FF9_Config::ANIMATE_CURSOR)      
    end
  end
  #--------------------------------------------------------------------------
  # * draw_arrow_sprites
  #--------------------------------------------------------------------------
  def draw_arrow_sprites(sprites, animated=true)
    for sprite in sprites          
      image_x = animated ? @sprite_last_draw_x + @sprite_inc_x : 0
      @sprite_last_draw_x = image_x            
      sprite.bitmap.blt(image_x, 0, @arrow_image, @arrow_image.rect)
    end
  end
  #--------------------------------------------------------------------------
  # * y=
  #--------------------------------------------------------------------------
  def y=(value)
    super
    unless @arrow_sprites.nil?
      for i in 0..3
        @arrow_sprites.y = (i * 80) + value + 40
      end
    end
  end
  #--------------------------------------------------------------------------
  # * x=
  #--------------------------------------------------------------------------
  def x=(value)
    super
    unless @arrow_sprites.nil?
      @arrow_sprites.each { |sprite| sprite.x = value }
    end
  end
  #--------------------------------------------------------------------------
  # * draw_background_windows
  #--------------------------------------------------------------------------
  def draw_background_windows  
    self.contents.blt(0, 0, @bg_image, @bg_image.rect)    
    self.contents.blt(0, 80, @bg_image, @bg_image.rect)    
    self.contents.blt(0, 160, @bg_image, @bg_image.rect)    
    self.contents.blt(0, 240, @bg_image, @bg_image.rect)    
  end  
  #--------------------------------------------------------------------------
  # * draw_background_window (single)
  #--------------------------------------------------------------------------
  def draw_background_window(x, y)
    self.contents.blt(x, y, @bg_image, @bg_image.rect)    
  end
  #--------------------------------------------------------------------------
  # * visible
  #--------------------------------------------------------------------------
  def visible=(value)
    super
    @arrow_sprites.each { |sprite| sprite.visible = value }
  end
  #--------------------------------------------------------------------------
  # * dispose
  #--------------------------------------------------------------------------
  alias :eds_pre_ff9_win_stat_dispose :dispose
  def dispose
    eds_pre_ff9_win_stat_dispose
    @arrow_sprites.each { |sprite| sprite.dispose }
  end
  
  def enable_cursor?(rect=nil)
    # for compatibility with the improved command window
    return false
  end    
  
end

class Scene_Menu
      
  #--------------------------------------------------------------------------
  # * create_menu_background (only if USE_CUSTOM_BACK == true)
  #--------------------------------------------------------------------------
  if FF9_Config::USE_CUSTOM_BACK
    
    def create_menu_background
      @menuback_sprite = Sprite.new
      @menuback_sprite.bitmap = Cache.picture(FF9_Config::BACK_NAME)
      @menuback_sprite.color.set(16, 16, 16, 128)
      update_menu_background
    end
    
  end
  #--------------------------------------------------------------------------
  # * OVERWRITTEN
  #--------------------------------------------------------------------------    
  def create_command_window
    s1 = Vocab::item
    s2 = Vocab::skill
    s3 = Vocab::equip
    s4 = Vocab::status
    s5 = Vocab::game_end
    # just changed the width of the window here
    @command_window = Window_Command.new(132, [s1, s2, s3, s4, s5])
    @command_window.index = @menu_index
    @command_window.stretch = false if FF9_Config::USE_TILED_WINDOW
    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      
    # new stuff here    
    @command_window.font_name = FF9_Config::DEFAULT_FONT
    @command_window.x = 528 - @command_window.width
    @command_window.y = 16
    @command_window.back_opacity = 255
  end
  #--------------------------------------------------------------------------
  # * This method is intended to fix some compatibility problems
  #   that scripts run into when they change the command window
  #   in some way.  So, we let them override "create_command_window"
  #   and we simply don't call it from the "start" method.
  #   Instead, we call this method which does some extra checking.
  #--------------------------------------------------------------------------
  def eds_create_command_window
    create_command_window
    old_commands = @command_window.commands
    return if old_commands == [ Vocab::item,
                                Vocab::skill,
                                Vocab::equip,
                                Vocab::status,
                                Vocab::game_end ]

    # so we know that the default command window is not being used
    # we don't want to create another window, so we manually resize it
    # before the player can see.  
    long = ''
    # dynamically size the width based on the longest command
    old_commands.each { |command| long = command if command.length > long.length }
    # set the index to -1 so that the rectangle disappears.
    # if we don't do this, you can see the selection rectangle resize.
    @command_window.index = -1
    @command_window.width = @command_window.contents.text_size(long).width + 42
    @command_window.contents = Bitmap.new( @command_window.width - 32,
                                           @command_window.height - 32 )    
    @command_window.font_name = FF9_Config::DEFAULT_FONT
    @command_window.x = 528 - @command_window.width
    @command_window.y = 16
    @command_window.back_opacity = 255        
    @command_window.refresh
    @command_window.index = @menu_index
  end
  #--------------------------------------------------------------------------
  # * OVERWRITTEN
  #--------------------------------------------------------------------------
  def start
    super
    create_menu_background
    #call this method for compatibility
    eds_create_command_window
    @gold_window = Window_TimeGold.new(372, 342)
    @gold_window.y -= @gold_window.height
    @gold_window.x = 528 - @gold_window.width
    @status_window = Window_MenuStatus.new(0, 12)
    @location_window = Window_MenuLocation.new(0, 0)
    @location_window.x = 528 - @location_window.width  
    @location_window.y = 398 - @location_window.height
  end
  
  #--------------------------------------------------------------------------
  # * Termination Processing
  #--------------------------------------------------------------------------
  alias :eds_pre_ff9_menu_scene_menu_terminate :terminate
  def terminate
    eds_pre_ff9_menu_scene_menu_terminate
    @location_window.dispose
  end
  
end

class Scene_Item < Scene_Base
  
  #--------------------------------------------------------------------------
  # * start
  #--------------------------------------------------------------------------
  alias :eds_pre_ff9_menu_scene_item_start :start
  def start        
    eds_pre_ff9_menu_scene_item_start
    @target_window.y = 58    
    @uses_window = Window_Uses.new(true, @help_window.height, nil)
    @uses_window.visible = false
  end  
  #--------------------------------------------------------------------------
  # * OVERWRITTEN
  #   - right-align flag ignored
  #--------------------------------------------------------------------------
  alias :eds_pre_ff9_menu_win_stat_show_target_window :show_target_window
  def show_target_window(right)  
    @uses_window.item = @item_window.item
    @uses_window.visible = true    
    @item_window.visible = false    
    @item_window.active = false    
    @target_window.visible = true
    @target_window.active = true  
    @viewport.rect.set(0, 0, 544, 416)
    @viewport.ox = 0
  end
  #--------------------------------------------------------------------------
  # * hide_target_window
  #--------------------------------------------------------------------------
  alias :eds_pre_ff9_menu_scene_item_hide_target_window :hide_target_window
  def hide_target_window
    eds_pre_ff9_menu_scene_item_hide_target_window  
    @uses_window.visible = false unless @uses_window.nil?
    @item_window.visible = true        
  end
  #--------------------------------------------------------------------------
  # * determine_target
  #--------------------------------------------------------------------------
  alias :eds_pre_ff9_menu_scene_item_determine_target :determine_target
  def determine_target    
    eds_pre_ff9_menu_scene_item_determine_target
    @uses_window.item = @item_window.item
  end    
  #--------------------------------------------------------------------------
  # * Termination Processing
  #--------------------------------------------------------------------------
  alias :eds_pre_ff9_menu_scene_item_terminate :terminate
  def terminate
    eds_pre_ff9_menu_scene_item_terminate
    @uses_window.dispose
  end
  
end

class Scene_Skill < Scene_Base
  
  #--------------------------------------------------------------------------
  # * start
  #--------------------------------------------------------------------------
  alias :eds_pre_ff9_menu_scene_skill_start :start
  def start        
    eds_pre_ff9_menu_scene_skill_start
    @target_window.y = 58          
    @uses_window = Window_SkillUses.new(true, @help_window.height, nil, nil)
    @uses_window.visible = false
  end  
  #--------------------------------------------------------------------------
  # * OVERWRITTEN
  #   - right-align flag ignored
  #--------------------------------------------------------------------------
  def show_target_window(right)
    @uses_window.set_skill($game_party.members[@actor_index], @skill_window.skill)
    @uses_window.visible = true
    @status_window.visible = false
    @skill_window.visible = false
    @skill_window.active = false    
    @target_window.visible = true
    @target_window.active = true  
    @viewport.rect.set(0, 0, 544, 416)
    @viewport.ox = 0
  end
  #--------------------------------------------------------------------------
  # * hide_target_window
  #--------------------------------------------------------------------------
  alias :eds_pre_ff9_menu_scene_skill_hide_target_window :hide_target_window
  def hide_target_window
    eds_pre_ff9_menu_scene_skill_hide_target_window  
    @uses_window.visible = false unless @uses_window.nil?
    @skill_window.visible = true
    @status_window.visible = true
  end
  #--------------------------------------------------------------------------
  # * determine_target
  #--------------------------------------------------------------------------
  alias :eds_pre_ff9_menu_scene_skill_determine_target :determine_target
  def determine_target    
    eds_pre_ff9_menu_scene_skill_determine_target
    @uses_window.set_skill($game_party.members[@actor_index], @skill_window.skill)
  end    
  #--------------------------------------------------------------------------
  # * Termination Processing
  #--------------------------------------------------------------------------
  alias :eds_pre_ff9_menu_scene_item_terminate :terminate
  def terminate
    eds_pre_ff9_menu_scene_item_terminate
    @uses_window.dispose
  end
  
end

« Letzte Änderung: Oktober 12, 2009, 20:47:28 von Nocturn »

 


 Bild des Monats

rooftop party

Views: 3581
By: papilion

 Umfrage

  • Wer soll das BdM gewinnen?
  • Dot Kandidat 1
  • 3 (25%)
  • Dot Kandidat 2
  • 1 (8%)
  • Dot Kandidat 3
  • 2 (16%)
  • Dot Kandidat 4
  • 0 (0%)
  • Dot Kandidat 5
  • 6 (50%)
  • Stimmen insgesamt: 12
  • View Topic

 Schnellsuche





SimplePortal 2.3.3 © 2008-2010, SimplePortal