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