Advertisement
Guest User

Untitled

a guest
Nov 2nd, 2011
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 29.93 KB | None | 0 0
  1. #===============================================================================
  2. #
  3. # MK3 - Phoenix Power Productions Presents: Erfolge 0.98a
  4. # Letztes Update: Freitag, 09.10.2009
  5. # Title Add-On by: HungrySnake
  6. # Update on: 2.10.2011
  7. # Level: Leicht, Normal
  8. #
  9. # Dieses Script erweitert das Spiel um die Möglichkeit, einen Gamerscore ähnlich
  10. # dem bei der XBox 360 einzubauen.
  11. # Ferner hat es noch ein Custom Menu eingebaut bekommen, dieses ist allerdings
  12. # noch nicht so umfangreich ausgebaut und wird später wahrscheinlich in ein
  13. # eigenes Script übertragen.
  14. #
  15. #===============================================================================
  16. # Updates:
  17. # ----------------------------------------------------------------------------
  18. # o 05.10.2009 - Beginn des Scripts.
  19. # o 06.10.2009 - Vollendung der Pre-A, offiziell Version 0.51a
  20. # o 07.10.2009 - Erweiterung des Moduls, Einbau eines Custom-Menus, V 0.91
  21. # o 08.10.2009 - Bei Erhalt eines Erfolgs wird "Battle_end" in der Database
  22. # abgespielt, Versionsnummer auf 0.97a erhöht
  23. # o 09.10.2009 - Erweiterung der Einstellungsmöglichkeiten, V 0.98
  24. #===============================================================================
  25. # Installation und Anleitung
  26. #===============================================================================
  27. #
  28. # Platziere dieses Script irgendwo zwischen Material und Main.
  29. # Im Modul Erfolge nach dieser Einleitung gibt es einen Punkt "ERFOLGE_LISTE".
  30. # In diesen können sämtliche Erfolge eingetragen werden, müssen dabei allerdings
  31. # durchgezählt sein, sonst findet die Scene sie nicht.
  32. # Mit "Geheime_Erfolge" können die Erfolge angegeben werden, welche nicht von
  33. # Anfang an ausführlich angezeigt werden.
  34. # Darunter kann man bei "GEHEIM_BESCHREIBUNG" die Erfolgs-IDs reinsetzen, welche
  35. # zwar den Namen vor Erhalt anzeigen, nicht jedoch die Beschreibung.
  36. # Will man einem Spieler einen Erfolg verleihen (sprich: er hat ihn erreicht),
  37. # so funktioniert dies mit dem Befehl "gib_erfolg(ID)" unter 'Script' im Event-
  38. # Command 'Advance'. Dabei steht ID für die Nummer, unter welcher der Erfolg in
  39. # Aufzählung ERFOLGE_LISTE zu finden ist.
  40. # Seit Version 0.71 ist es mit Add-On 1 kompatibel.
  41. # Seit Version 0.80 unterstützt das Script auch die Möglichkeit, in anderen Scripts
  42. # mit dem Befehl "$mk.gib_erfolg(id)" Erfolge nach denselben Regeln freizuschalten,
  43. # wie dies in Events bisher möglich war.
  44. # Seit Version 0.91 ist es mit Add-On 2 kompatibel.
  45. # Will man das Script ohne Menü-Einbettung nutzen, so kann man es auch per Event
  46. # mit dem Script-Command "ruf_erfolg(scene)" (ohne die "") aufrufen. Dabei steht
  47. # scene für die Scene, zu welcher nach Verlassen des Erfolgs-Screens zurückgekehrt
  48. # werden soll, also Scene_Battle, wenn man es während dem Kampf aufruft, Scene_Map,
  49. # wenn man es von der Karte aus aufruft,...
  50. #
  51. #===============================================================================
  52. #
  53. # Kompatibilität
  54. # - Alias: Game_System: initialize
  55. # - Alias: Scene_Title: start
  56. # - Alias: Scene_File: write_save_data, load_save_data
  57. # - Alias: Scene_Menu: create_command_window, update_command_selection, terminate
  58. # - Alias: Scene_Map: update
  59. # - Overwrite: Window_Help: initialize
  60. # - Overwrite: Scene_Menu: update
  61. # - Overwrite: Scene_Item: return_scene
  62. # - Overwrite: Scene_Skill: return_scene
  63. # - Overwrite: Scene_Status: return_scene
  64. # - Overwrite: Scene_File: return_scene
  65. # - Overwrite: Scene_End: return_scene
  66. #
  67. #===============================================================================
  68.  
  69. module MK3
  70. module Erfolge
  71. # Mit diesem Namen wird der Erfolgs-Bildschirm-Aufruf betitelt, wenn man ihn
  72. # über das Custom Menu aufruft.
  73. ERFOLGE_NAME = "Erfolge"
  74.  
  75. # Dieser Schalter bestimmt, ob der Erfolgs-Screen in den Titel-Bildschirm
  76. # integriert wird. Gleichzeitig bewirkt er auch, dass die Erfolge nicht von
  77. # einem Spielstand, sondern vom Spiel direkt geladen werden, sind also immer
  78. # in jedem Spielstand des jeweiligen Exemplars gleich.
  79. INTEGRATE_TITLE = true
  80.  
  81. # Mit diesem Schalter kann man bestimmen, ob der Erfolgs-Screen per Taste auf
  82. # der Map gerufen werden kann.
  83. MAP_ACCESS = false
  84.  
  85. # Wenn MAP_ACCESS = true, wird mit diesem Button (nach Controller-Regelung)
  86. # der Erfolgs-Screen geöffnet. Die Rückkehr erfolg danach automatisch wieder
  87. # zurück zur jeweiligen Map. Der Default-Wert "X" wäre in dem Fall zum Bei-
  88. # spiel die Taste A auf dem Keyboard, wenn man nicht mit F1 die Tastenbele-
  89. # gung geändert hat.
  90. MAP_CALL_BUTTON = Input::X
  91.  
  92. # Dieser Schalter bestimmt, ob Erfolge über das Menü aufgerufen werden kann.
  93. # Es wird außerdem für die Custom-Menu-Funktionen unten in diesem Modul be-
  94. # nötigt.
  95. MENU_ACCESS = true
  96.  
  97. # Mit dieser Liste bestimmt ihr die Reihenfolge der Menü-Einträge. Aller-
  98. # dings unterstützt sie nur die Grundelemente und das Erfolgs-Script (Rest
  99. # muss noch getestet werden). Wer mehr Punkte integrieren möchte, braucht
  100. # sich nur dieses Script:
  101. #
  102. # http://pockethouse.wordpress.com/vx/scene-menu-redux/
  103. #
  104. # zu besorgen und sich darin ein wenig einzuarbeiten. Es ist nicht schwierig.
  105. #
  106. # Die ID muss mit den Zahlen in MENU_SORT übereinstimmen, der erste Eintrag
  107. # im Array ist die Scene, welche aufgerufen wird (wenn Parameter übergeben
  108. # werden müssen, unterstützt dieses Scriptdabei nur jene aus dem Grundpro-
  109. # gramm). Der zweite Eintrag schließlich ist der Name, mit welchem die Scenes
  110. # im Menü eingetragen werden.
  111. MENU_LIST = {
  112. # ID Scene zum Aufruf Name im Menü
  113. 1 => ["Scene_Item", "Item"],
  114. 2 => ["Scene_Skill", "Skill"],
  115. 3 => ["Scene_Equip", "Equip"],
  116. 4 => ["Scene_Status", "Status"],
  117. 5 => ["Scene_File", "Save"],
  118. 6 => ["Scene_End", "Shutdown"],
  119. 7 => ["Scene_Erfolge", ERFOLGE_NAME],
  120. }
  121.  
  122. # In dem Array unter diesem Kommentar werden die Aufrufe in der Reihenfolge
  123. # eingegeben, wie sie im Menü erscheinen sollen. Sie müssen hierbei exakt
  124. # mit den IDs in MENU_LIST übereinstimmen.
  125. MENU_SORT = [4, 5, 1, 3, 2, 7, 6]
  126.  
  127. # Dieser Schalter bestimmt, ob die bisherige Spielzeit im Menü angezeigt wird.
  128. # Funktioniert nur, wenn "MENU_ACCESS = true".
  129. SHOW_TIME = false
  130.  
  131. # In diesem Array müssen alle Scenes stehen, bei welchen man zuvor eine
  132. # Actor-Auswahl im Menü-Status machen möchte. Standardmäßig sind dies 2 für
  133. # Skill, 3 für Equip und 4 für Status.
  134. # Dieses Feature ist noch nicht fertig ausgebaut und unterstützt deshalb nur
  135. # Skill, Equip und Status, die Zahl, welche man eingibt, gibt die Position an,
  136. # in welcher der jeweilige Befehl in MENU_SORT drinsteht (beginnt bei 1).
  137. CHAR_WAHL = [1, 4, 5]
  138.  
  139. # In der folgenden Liste kannst du alle Erfolge einrichten. Die ID ist die
  140. # Nummer, mit welcher du Erfolge verwalten kannst, Titel ist der Name des
  141. # Erfolgs, welcher in der Liste angezeigt wird, Beschreibung sind ein paar
  142. # nähere Worte zu dem Erfolg und Score ist die Punktzahl, welche er bringt.
  143. # Bei Beschreibung kann man mit dem Zeichen "|" einen Zeilenumbruch anzeigen.
  144. # Hierbei empfehle ich aber, nicht mehr als zwei Zeilen zu verwenden, da es
  145. # sonst wahrscheinlich nicht richtig angezeigt wird (habe es noch nicht ge-
  146. # testet).
  147. # Mit Version 0.94 ist eine freiwillige Zeile hinzugekommen. Man kann nun
  148. # jedem einzelnen Erfolg eine Icon-ID zuweisen, welche nach Erhalt des Erfolgs
  149. # bei diesem angezeigt wird (vorausgesetzt, ICON_ZEIGEN = true). Man kann die
  150. # Icon_ID einfach hinter die Position der Punktzahl in den Array schreiben
  151. # (Komma nicht vergessen).
  152. ERFOLGE_LISTE = {
  153. # ID Titel Beschreibung Score Icon-ID
  154. 1 => ["Questling", "Beende deine 5. Quest.", 5],
  155. 2 => ["Questler", "Beende deine 25. Quest.", 10],
  156. 3 => ["Questor", "Beende deine 50. Quest.", 25],
  157. 4 => ["Questinator", "Beende deine 100. Quest.", 50]
  158. }
  159.  
  160. # Im Event-Command "Advanced - Script" kannst du mit dem Befehl "gib_erfolg(ID)
  161. # den Erfolg freischalten. Damit wird dem Spieler die Punktzahl des Erfolgs
  162. # gutgeschrieben und der Erfolg als erhalten gekennzeichnet
  163.  
  164. # Der Schalter bestimmt, ob ein Icon gezeigt wird oder nicht. Diese Einstellung
  165. # betrifft ALLE Icon-Optionen des Scripts, also auch jene bei ERFOLGE_LISTE
  166. ICON_ZEIGEN = true
  167.  
  168. # Der Schalter bestimmt, ob zusätzlich zu freigeschalteten Erfolgen auch die
  169. # noch nicht erhaltenen Erfolge ein ICON erhalten, wobei dieses immer dasselbe
  170. # ist, unabhängig von der Zuweisung bei ERFOLGE_LISTE oder ICON_INDEX.
  171. ICON_ZEIGEN_UNDONE = true
  172.  
  173. # Diese Zahl entspricht der Icon-ID, welche angezeigt wird für nicht erhaltene
  174. # und nicht geheime Erfolge , wenn ICON_ZEIGEN und ICON_ZEIGEN_UNDONE = true.
  175. ICON_UNDONE = 331
  176.  
  177. # Dieser Schalter bestimmt, ob (wenn ICON_ZEIGEN_UNDONE = true) die Icons von
  178. # geheimen Erfolgen versteckt werden sollen. Hierbei bedeutet false, dass die
  179. # Icons gezeigt werden.
  180. GEHEIM_ICON_ZEIGEN = true
  181.  
  182. # Wenn ICON_ZEIGEN und ICON_ZEIGEN_UNDONE = true und ICON_ZEIGEN_VERSTECKEN =
  183. # false, dann wird für nicht freigeschaltete, geheime Erfolge die Icon-ID,
  184. # welche in diesem Punkt angegeben ist, angezeigt.
  185. ICON_GEHEIM = 331
  186.  
  187. # Gibt den Index des Icons an, welches bei erhaltenen Erfolgen gezeigt wird.
  188. # Wenn man als Wert 0 eingibt, werden Icons nur dort angezeigt, wo man auch
  189. # explizit welche wünscht.
  190. ERHALTEN_ICON_DEFAULT = 516
  191.  
  192. # In ICON_INDEX kann man jedem Punktwert eine Icon-ID zuweisen, nämlich mit
  193. # "X => Y" (ohne Anführungszeichen), wobei X der jeweilige Punktwert und Y
  194. # die dazugehörige Icon-ID ist. Jeder Punktwert, der darin nicht vorkommt,
  195. # und auch nicht in ERFOLGE_LISTE ist (welche bevorzugt behandelt wird), kriegt
  196. # automatisch die Icon-ID in ERHALTEN_ICON_DEFAULT zugewiesen.
  197. ICON_INDEX = {
  198. 5 => 516,
  199. 10 => 516,
  200. 15 => 516,
  201. }
  202.  
  203. # Der Schalter bestimmt, ob erlangte Erfolge eingefärbt werden sollen
  204. HAT_ERFOLG_FARBE = true
  205.  
  206. # Gibt die Farbe an, in welche der Erfolg eingefärbt wird.
  207. ERFOLG_FARBE = 17
  208. # Für diejenigen, die es nicht wissen: die Farbe richtet sich nach den Flächen
  209. # unten rechts im Window-Bild, also jener Bild-Datei unter System, welche die
  210. # Anzeige sämtlicher Windows steuert. Dabei wird in gewohnter Leserichtung
  211. # durchgezählt, begonnen mit 0.
  212.  
  213. # Dieser Schalter bestimmt, ob das Punktefenster oben rechts angezeigt wird.
  214. # Ist dieser Schalter false, wird das erklärende Fenster oben links entspre-
  215. # chend gestretcht (was einen längeren Erklär-Text ermöglicht)
  216. SHOW_SCORE_WINDOW = true
  217.  
  218. # Diese Einstellung steuert die Anzeige des Einzel-Score (also die Darstellung
  219. # der Erfolgs-Punktzahl eines einzelnen Erfolges). Steht der Wert auf 1, wird
  220. # die Erfolgs-Punktzahl am rechten Rand hinter dem jeweiligen Titel angezeigt,
  221. # steht er auf 2 steht er am unteren rechten Rand der Beschreibung. Bei 0 wird
  222. # der Score nicht angezeigt.
  223. SHOW_SINGLE_SCORE = 1
  224.  
  225. # Dieser Text bestimmt, was dem Score hintenangestellt werden soll, wenn die
  226. # Konstante SHOW_SINGLE_SCORE auf 1 oder 2 steht und der Score über 1 beträgt.
  227. SINGLE_SCORE_PLUS = " Punkte"
  228.  
  229. # Dieser Text funktioniert genauso wie SINGLE_SCORE_PLUS, allerdings berück-
  230. # sichtigt er nur Erfolgs-Punkte, die 1 entsprechen. Soll das Anhängsel bei
  231. # beiden Fällen gleich sein, einfach dasselbe wie bei SINGLE_SCORE_PLUS ein-
  232. # bauen. Tipp: Es sieht besser aus, wenn der Text genauso viele Zeichen ent-
  233. # hält wie jener in SINGLE_SCORE_PLUS.
  234. SINGLE_SCORE_PLUS_ONE = " Punkt "
  235.  
  236. # In dieses Feld kannst du einfügen, welcher Text vor der Beschreibung stehen
  237. # soll. Soll kein Text da stehen, so schreibe "" in das Feld.
  238. BESCHREIBUNG = "Beschreibung: " # denke an das Leerzeichen, sonst wird es
  239. # gequetscht
  240.  
  241. # In diese Liste kannst du alle Erfolge aufzählen, welche vor Erhalt nicht
  242. # näher beschrieben werden, sobald sie (mit "gib_erfolg(ID)") freigeschaltet
  243. # wurden, werden sie jedoch wie gewohnt angezeigt
  244. Geheime_Erfolge = []
  245.  
  246. # Diese Liste funktioniert fast wie die Liste Geheime_Erfolge, nur versteckt
  247. # sie lediglich den beschreibenden Text, der Titel wird hingegen angezeigt.
  248. GEHEIME_BESCHREIBUNG = [3]
  249.  
  250. # Dieser Name wird für den Erfolg angezeigt, wenn er in der Liste Geheime_Erfolge
  251. # steht und noch nicht freigeschaltet wurde
  252. GEHEIM_TITEL = "Geheim"
  253.  
  254. # Diese Beschreibung erhält man, wenn man einen geheimen, nicht freigeschalteten
  255. # Erfolg anwählt. Genauso wie bei den Beschreibungen in der ERFOLGE_LISTE kann
  256. # auch diese mit "|" mit Zeilenumbruch versehen werden (trotzdem sollte es bei
  257. # zwei Zeilen bleiben).
  258. GEHEIM_BESCHREIBUNG = "Beschreibung: Dies ist ein geheimer Erfolg, du musst ihn erst|freischalten, um ihn betrachten zu können"
  259.  
  260. # Dieser Schalter bestimmt, ob im Hilfe-Fenster die Zahl der gesammelten/
  261. # insgesamten Erfolge angezeigt werden sollen
  262. # Steht der Schalter auf false, sollte der Text in ERFOLGE_HILFE dement-
  263. # sprechend angepasst werden
  264. ERFOLGSZAHL_ZEIGEN = true
  265.  
  266. # Diese Nachricht steht im Hilfe-Fenster, ist "ERFOLGSZAHL_ZEIGEN" (s. oben)
  267. # true, so wird der Text um X/Y erweitert, wobei X für die Anzahl bereits
  268. # freigeschalteter Bilder steht und Y für die Gesamtzahl aller Erfolge
  269. ERFOLGE_HILFE = "Dies sind deine Erfolge. Du hast "
  270.  
  271. # Dieser Schalter bestimmt, ob bei Erhalt eines Erfolgs die ME, welche in der
  272. # Database bei "Battle_End" (Default: Victory1) abgespielt wird.
  273. PLAY_ERFOLG_SOUND = true
  274. end
  275. end
  276.  
  277. $imported = {} if $imported == nil
  278. $imported["MK3_Erfolge_Basis"] = true
  279.  
  280. module MK3::Commands
  281. def gib_erfolg(id)
  282. if !$Erfolge_erhalten.include?(id) then
  283. $Erfolge_erhalten << id
  284. if MK3::Erfolge::PLAY_ERFOLG_SOUND
  285. $game_system.battle_end_me.play
  286. end
  287. end
  288. end
  289.  
  290. def ruf_erfolg(scene)
  291. $scene = Scene_Erfolge.new(scene)
  292. end
  293. end
  294.  
  295. class Game_Interpreter
  296. include MK3::Commands
  297. end
  298.  
  299. class MK3_Commands
  300. def initialize
  301. end
  302.  
  303. def gib_erfolg(id)
  304. if !$Erfolge_erhalten.include?(id)
  305. $Erfolge_erhalten << id
  306. if MK3::Erfolge::PLAY_ERFOLG_SOUND
  307. $game_system.battle_end_me.play
  308. end
  309. end
  310. end
  311. end
  312.  
  313. class Game_System
  314. alias mk_initialize initialize
  315.  
  316. def initialize
  317. mk_initialize
  318. $mk = MK3_Commands.new
  319. end
  320. end
  321.  
  322. class Window_ErfolgsScore < Window_Base
  323. def initialize(x, y, width, height)
  324. super(x, y, width, height)
  325. create_contents
  326. now_score = get_score
  327. text = now_score.to_s + "/" + $score.to_s + " Punkte"
  328. contents.draw_text (0, 0, contents.width, WLH, text, 1)
  329. end
  330.  
  331. def get_score
  332. now_score = 0
  333. for id in $Erfolge_erhalten do
  334. erfolg = MK3::Erfolge::ERFOLGE_LISTE[id]
  335. next unless erfolg != nil
  336. now_score += erfolg[2]
  337. end
  338. return now_score
  339. end
  340. end
  341.  
  342. class Window_Erfolge < Window_Selectable
  343. WLH = 24
  344.  
  345. def initialize(x, y, width, height, spacing = 76)
  346. super(x, y, width, height, spacing)
  347. self.index = 0
  348. refresh
  349. end
  350.  
  351. def refresh
  352. self.contents.clear
  353. @data = []
  354. MK3::Erfolge::ERFOLGE_LISTE.each_key do |key|
  355. if $Erfolge_erhalten.include?(key) then
  356. @data << key
  357. end
  358. end
  359. MK3::Erfolge::ERFOLGE_LISTE.each_key do |key|
  360. if !$Erfolge_erhalten.include?(key) then
  361. @data << key
  362. end
  363. end
  364. @item_max = @data.size
  365. create_contents
  366. for i in 1...@item_max+1
  367. draw_erfolg(i)
  368. end
  369. end
  370.  
  371. def make_icon(id)
  372. if $Erfolge_erhalten.include?(id)
  373. get_icon_id = MK3::Erfolge::ERFOLGE_LISTE[id]
  374. if get_icon_id[3] != nil
  375. icon_id = get_icon_id[3]
  376. else
  377. icon_weiser = []
  378. MK3::Erfolge::ICON_INDEX.each_key do |key|
  379. icon_weiser << key
  380. end
  381. icon_weiser.each do |id_test|
  382. if id_test = get_icon_id[2]
  383. icon_id = MK3::Erfolge::ICON_INDEX[id_test]
  384. end
  385. end
  386. end
  387. elsif MK3::Erfolge::ICON_ZEIGEN_UNDONE
  388. if MK3::Erfolge::Geheime_Erfolge.include?(id) or MK3::Erfolge::GEHEIME_BESCHREIBUNG.include?(id)
  389. if MK3::Erfolge::GEHEIM_ICON_ZEIGEN
  390. icon_id = MK3::Erfolge::ICON_GEHEIM
  391. end
  392. else
  393. icon_id = MK3::Erfolge::ICON_UNDONE
  394. end
  395. end
  396. draw_icon(icon_id, 0, (WLH * id)-WLH)
  397. end
  398.  
  399. def draw_icon(icon_index, x, y, enabled = true)
  400. bitmap = Cache.system("Iconset")
  401. rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  402. self.contents.blt(x, y, bitmap, rect, enabled ? 255 : 128)
  403. end
  404.  
  405. def draw_erfolg(id)
  406. contents.font.color = text_color(0)
  407. erfolg = MK3::Erfolge::ERFOLGE_LISTE[id] # theoretisch mit @data sortierbar
  408. if MK3::Erfolge::ICON_ZEIGEN
  409. make_icon(id)
  410. end
  411. if MK3::Erfolge::Geheime_Erfolge.include?(id) and !$Erfolge_erhalten.include?(id) then
  412. text = MK3::Erfolge::GEHEIM_TITEL
  413. elsif $Erfolge_erhalten.include?(id) then
  414. if erfolg != nil
  415. if MK3::Erfolge::HAT_ERFOLG_FARBE
  416. contents.font.color = text_color(MK3::Erfolge::ERFOLG_FARBE)
  417. end
  418. text = erfolg[0]
  419. end
  420. else
  421. if erfolg != nil
  422. text = erfolg[0]
  423. end
  424. end
  425. case MK3::Erfolge::ICON_ZEIGEN
  426. when true
  427. x = 25
  428. x_width = 480
  429. else
  430. x = 0
  431. x_width = 505
  432. end
  433. self.contents.draw_text(x, WLH * (id - 1), x_width, 24, text, 0)
  434. if MK3::Erfolge::SHOW_SINGLE_SCORE == 1
  435. case erfolg[2]
  436. when 1
  437. bonus = MK3::Erfolge::SINGLE_SCORE_PLUS_ONE
  438. when nil
  439. bonus = ""
  440. else
  441. bonus = MK3::Erfolge::SINGLE_SCORE_PLUS
  442. end
  443. if erfolg[2] != nil
  444. score = erfolg[2].to_s + bonus
  445. else
  446. score = ""
  447. end
  448. self.contents.draw_text(x, WLH * (id - 1), x_width, 24, score, 2)
  449. end
  450. end
  451.  
  452. def draw_medal(medal_name, x = 0, y = 0)
  453. return if medal_name == nil
  454. bitmap = Cache.picture(medal_name)
  455. rect = Rect.new(0, 0, 72, 72)
  456. self.contents.blt(x, y, bitmap, rect)
  457. end
  458.  
  459. def item_rect(index)
  460. rect = Rect.new(0, 0, 0, 0)
  461. case MK3::Erfolge::ICON_ZEIGEN
  462. when true
  463. x_width = 25
  464. else
  465. x_width = 0
  466. end
  467. rect.width = ((contents.width + @spacing) / @column_max - @spacing) - x_width
  468. rect.height = WLH
  469. rect.x = (index % @column_max * (rect.width + @spacing)) + x_width
  470. rect.y = index / @column_max * WLH # Faktor muss identisch sein mit y-Faktor bei Titel
  471. return rect
  472. end
  473.  
  474. def update
  475. super
  476. end
  477.  
  478. def create_contents
  479. self.contents.dispose
  480. self.contents = Bitmap.new(width - 32, [height - 32, row_max * WLH].max)
  481. end
  482.  
  483. def row_max
  484. return (@item_max + @column_max - 1) / @column_max
  485. end
  486. end
  487.  
  488. class Window_ErfolgsBeschreibung < Window_Base
  489. def initialize(x, y, width, height)
  490. super(x, y, width, height)
  491. end
  492. end
  493.  
  494. class Scene_Title < Scene_Base
  495. alias mk_start start
  496.  
  497. def start
  498. mk_start
  499. if $Erfolge_erhalten == nil then
  500. $Erfolge_erhalten = []
  501. end
  502. get_erfolgpoints
  503. end
  504.  
  505. def get_erfolgpoints
  506. $score = 0
  507. MK3::Erfolge::ERFOLGE_LISTE.each_value do |val|
  508. $score += val[2]
  509. end
  510. end
  511.  
  512. def create_command_window
  513. s1 = Vocab::new_game
  514. s2 = Vocab::continue
  515. s3 = Vocab::shutdown
  516. if MK3::Erfolge::INTEGRATE_TITLE
  517. s4 = MK3::Erfolge::ERFOLGE_NAME
  518. @command_window = Window_Command.new(172, [s1, s2, s4,s3])
  519. @command_window.y = 288 - 24
  520. else
  521. @command_window = Window_Command.new(172, [s1, s2, s3])
  522. @command_window.y = 288
  523. end
  524. @command_window.x = (544 - @command_window.width) / 2
  525. if @continue_enabled # If continue is enabled
  526. @command_window.index = 1 # Move cursor over command
  527. else # If disabled
  528. @command_window.draw_item(1, false) # Make command semi-transparent
  529. end
  530. @command_window.openness = 0
  531. @command_window.open
  532. end
  533.  
  534. def update
  535. super
  536. @command_window.update
  537. if Input.trigger?(Input::C)
  538. case @command_window.index
  539. when 0; command_new_game
  540. when 1; command_continue
  541. when 2
  542. if MK3::Erfolge::INTEGRATE_TITLE
  543. $scene = Scene_Erfolge.new(Scene_Title)
  544. else
  545. command_shutdown
  546. end
  547. end
  548. if MK3::Erfolge::INTEGRATE_TITLE
  549. case @command_window.index
  550. when 3
  551. command_shutdown
  552. end
  553. end
  554. end
  555. end
  556. end
  557.  
  558. class Window_Time < Window_Base
  559. def update(text)
  560. self.create_contents
  561. self.contents.draw_text(0, 0, 128, 24, text, 1)
  562. end
  563. end
  564.  
  565. class Window_Help_Vary < Window_Base
  566.  
  567. def initialize(x = 0, y = 0, width = 544, height = WLH + 32)
  568. super(x, y, width, height)
  569. end
  570.  
  571. def set_text(text, align = 0)
  572. if text != @text or align != @align
  573. self.contents.clear
  574. self.contents.font.color = normal_color
  575. self.contents.draw_text(4, 0, self.width - 40, WLH, text, align)
  576. @text = text
  577. @align = align
  578. end
  579. end
  580. end
  581.  
  582. class Scene_Menu < Scene_Base
  583. alias mk_create_command_window create_command_window
  584. alias mk_update_command_selection update_command_selection
  585. alias mk_terminate terminate
  586.  
  587. def update
  588. super
  589. update_menu_background
  590. @command_window.update
  591. @gold_window.update
  592. if MK3::Erfolge::SHOW_TIME
  593. text = game_time
  594. @time_window.update(text)
  595. end
  596. @status_window.update
  597. if @command_window.active
  598. update_command_selection
  599. elsif @status_window.active
  600. if MK3::Erfolge::MENU_ACCESS then
  601. #mk_update_actor_selection
  602. update_actor_selection
  603. else
  604. update_actor_selection
  605. end
  606. end
  607. end
  608.  
  609. def terminate
  610. mk_terminate
  611. if MK3::Erfolge::SHOW_TIME
  612. @time_window.dispose
  613. end
  614. end
  615.  
  616. def game_time(modificate = false)
  617. @gametime = Graphics.frame_count / Graphics.frame_rate
  618. hours = @gametime / 3600
  619. minutes = @gametime / 60 % 60
  620. seconds = @gametime % 60
  621. if modificate then
  622. result = sprintf("%d%02d%02d", hours, minutes, seconds)
  623. else
  624. result = sprintf("%d:%02d:%02d", hours, minutes, seconds)
  625. end
  626. return result
  627. end
  628.  
  629. def create_command_window
  630. if MK3::Erfolge::MENU_ACCESS
  631. if MK3::Erfolge::SHOW_TIME
  632. @time_window = Window_Time.new(0, 300, 160, 60)
  633. @time_window.contents.clear
  634. @time_window.create_contents
  635. text = game_time
  636. @time_window.contents.draw_text(0, 0, 24, 128, text, 1)
  637. end
  638. @liste = MK3::Erfolge::MENU_SORT
  639. @command = []
  640. @liste.each do |id|
  641. name = MK3::Erfolge::MENU_LIST[id]
  642. @command << name[1]
  643. end
  644. @command_window = Window_Command.new(160, @command)
  645. @command_window.index = @menu_index
  646. if $game_party.members.size == 0 # If number of party members is 0
  647. @command_window.draw_item(0, false) # Disable item
  648. @command_window.draw_item(1, false) # Disable skill
  649. @command_window.draw_item(2, false) # Disable equipment
  650. @command_window.draw_item(3, false) # Disable status
  651. end
  652. if $game_system.save_disabled # If save is forbidden
  653. @command_window.draw_item(4, false) # Disable save
  654. end
  655. else
  656. mk_create_command_window
  657. end
  658. end
  659.  
  660. def update_command_selection
  661. if MK3::Erfolge::MENU_ACCESS
  662. if Input.trigger?(Input::B)
  663. Sound.play_cancel
  664. $scene = Scene_Map.new
  665. elsif Input.trigger?(Input::C)
  666. if $game_party.members.size == 0 and @command_window.index < 4
  667. Sound.play_buzzer
  668. return
  669. elsif $game_system.save_disabled and @command_window.index == 4
  670. Sound.play_buzzer
  671. return
  672. end
  673. Sound.play_decision
  674. befehl = @liste
  675. aufruf = MK3::Erfolge::MENU_LIST[befehl[@command_window.index]]
  676. if MK3::Erfolge::CHAR_WAHL.include?(@command_window.index + 1)
  677. start_actor_selection
  678. return
  679. end
  680. scene = aufruf[0] + ".new"
  681. case scene
  682. when "Scene_File.new" then
  683. scene += "(true, false, false)"
  684. end
  685. $scene = eval(scene)
  686. end
  687. else
  688. mk_update_command_selection
  689. end
  690. end
  691.  
  692. def mk_update_actor_selection
  693. if Input.trigger?(Input::B)
  694. Sound.play_cancel
  695. end_actor_selection
  696. elsif Input.trigger?(Input::C)
  697. $game_party.last_actor_index = @status_window.index
  698. Sound.play_decision
  699. position = MK3::Erfolge::MENU_SORT[@command_window.index]
  700. from = MK3::Erfolge::MENU_LIST[position]
  701. if Input.trigger?(Input::C)
  702. case from[0]
  703. when "Scene_Skill" # skill
  704. $scene = Scene_Skill.new(@status_window.index)
  705. when "Scene_Equip" # equipment
  706. $scene = Scene_Equip.new(@status_window.index)
  707. when "Scene_Status" # status
  708. $scene = Scene_Status.new(@status_window.index)
  709. end
  710. end
  711. end
  712. end
  713. end
  714.  
  715. class Scene_Map < Scene_Base
  716. alias mk_update update
  717.  
  718. def update
  719. mk_update
  720. if MK3::Erfolge::MAP_ACCESS
  721. if Input.trigger?(MK3::Erfolge::MAP_CALL_BUTTON)
  722. $scene = Scene_Erfolge.new(Scene_Map)
  723. end
  724. end
  725. end
  726. end
  727.  
  728. class Scene_Base
  729. def get_menu_index(scene)
  730. MK3::Erfolge::MENU_LIST.each do |key, val|
  731. if val.include?(scene)
  732. x = MK3::Erfolge::MENU_SORT.index(key)
  733. return x != nil ? x : 0
  734. end
  735. end
  736. end
  737. end
  738.  
  739. class Scene_Item < Scene_Base
  740.  
  741. def return_scene
  742. x = get_menu_index("Scene_Item")
  743. $scene = Scene_Menu.new(x)
  744. end
  745. end
  746.  
  747. class Scene_Skill < Scene_Base
  748.  
  749. def return_scene
  750. x = get_menu_index("Scene_Skill")
  751. $scene = Scene_Menu.new(x)
  752. end
  753. end
  754.  
  755. class Scene_Equip < Scene_Base
  756.  
  757. def return_scene
  758. x = get_menu_index("Scene_Equip")
  759. $scene = Scene_Menu.new(x)
  760. end
  761. end
  762.  
  763. class Scene_Status < Scene_Base
  764.  
  765. def return_scene
  766. x = get_menu_index("Scene_Status")
  767. $scene = Scene_Menu.new(x)
  768. end
  769. end
  770.  
  771. class Scene_File < Scene_Base
  772. alias mk_write_save_data write_save_data
  773. alias mk_read_save_data read_save_data
  774.  
  775. def return_scene
  776. if @from_title
  777. $scene = Scene_Title.new
  778. elsif @from_event
  779. $scene = Scene_Map.new
  780. else
  781. x = get_menu_index("Scene_File")
  782. $scene = Scene_Menu.new(x)
  783. end
  784. end
  785.  
  786. def write_save_data(file)
  787. mk_write_save_data(file)
  788. if !MK3::Erfolge::INTEGRATE_TITLE
  789. Marshal.dump($Erfolge_erhalten, file)
  790. end
  791. end
  792.  
  793. def read_save_data(file)
  794. mk_read_save_data(file)
  795. if !MK3::Erfolge::INTEGRATE_TITLE
  796. $Erfolge_erhalten = Marshal.load(file)
  797. end
  798. end
  799. end
  800.  
  801. class Scene_End < Scene_Base
  802.  
  803. def return_scene
  804. x = get_menu_index("Scene_End")
  805. $scene = Scene_Menu.new(x)
  806. end
  807. end
  808.  
  809. class Scene_Erfolge < Scene_Base
  810. def initialize(scene = Scene_Menu)
  811. @scene = scene
  812. end
  813.  
  814. def start
  815. create_menu_background
  816. text = MK3::Erfolge::ERFOLGE_HILFE
  817. if MK3::Erfolge::ERFOLGSZAHL_ZEIGEN
  818. text += $Erfolge_erhalten.length.to_s + "/" + MK3::Erfolge::ERFOLGE_LISTE.length.to_s
  819. end
  820. if MK3::Erfolge::SHOW_SCORE_WINDOW
  821. @score_window = Window_ErfolgsScore.new(404, 0, 140, 56)
  822. @help_window = Window_Help_Vary.new(0, 0, 404)
  823. else
  824. @help_window = Window_Help_Vary.new
  825. end
  826. @help_window.contents.clear
  827. @help_window.set_text (text, 1)
  828. @erfolg_titel_window = Window_Erfolge.new(0, 56, 544, 275)
  829. @erfolg_def_window = Window_ErfolgsBeschreibung.new(0, 331, 544, 85)
  830. @erfolg_titel_window.active = true
  831. end
  832.  
  833. def terminate
  834. super
  835. dispose_menu_background
  836. @help_window.dispose
  837. if MK3::Erfolge::SHOW_SCORE_WINDOW
  838. @score_window.dispose
  839. end
  840. @erfolg_titel_window.active = false
  841. @erfolg_titel_window.dispose
  842. @erfolg_def_window.dispose
  843. end
  844.  
  845. def update
  846. super
  847. update_menu_background
  848. @erfolg_titel_window.update
  849. @erfolg_def_window.update
  850. update_erfolg_def(@erfolg_titel_window.index)
  851. if Input.trigger?(Input::B)
  852. Sound.play_cancel
  853. if @scene == Scene_Menu
  854. $scene = @scene.new(6)#(get_menu_index("Scene_Erfolge"))
  855. else
  856. $scene = @scene.new
  857. end
  858. end
  859. end
  860.  
  861. def update_erfolg_def(id)
  862. id += 1
  863. erfolg = MK3::Erfolge::ERFOLGE_LISTE[id]
  864. if (MK3::Erfolge::GEHEIME_BESCHREIBUNG.include?(id) or MK3::Erfolge::Geheime_Erfolge.include?(id)) and !$Erfolge_erhalten.include?(id)
  865. text = MK3::Erfolge::GEHEIM_BESCHREIBUNG
  866. else
  867. text = MK3::Erfolge::BESCHREIBUNG
  868. text += erfolg[1]
  869. end
  870. @erfolg_def_window.contents.clear
  871. @erfolg_def_window.create_contents
  872. y = 0
  873. txsize = 24
  874. nwidth = 512
  875. buf = text.gsub(/\\N(\[\d+\])/i) { "\\__#{$1}" }
  876. lines = buf.split(/(?:[|]|\\n)/i)
  877. lines.each_with_index { |l, i|
  878. l.gsub!(/\\__(\[\d+\])/i) { "\\N#{$1}" }
  879. @erfolg_def_window.contents.draw_text(0, i * txsize + y, nwidth, 24, l, 0)
  880. }
  881. if (MK3::Erfolge::SHOW_SINGLE_SCORE == 2)# and (l = i.size)
  882. case erfolg[2]
  883. when 1
  884. bonus = MK3::Erfolge::SINGLE_SCORE_PLUS_ONE
  885. when nil
  886. bonus = ""
  887. else
  888. bonus = MK3::Erfolge::SINGLE_SCORE_PLUS
  889. end
  890. if erfolg[2] != nil
  891. score = erfolg[2].to_s + bonus
  892. else
  893. score = ""
  894. end
  895. @erfolg_def_window.contents.draw_text(0, txsize + y, nwidth, 24, score, 2)
  896. end
  897. end
  898. end
  899.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement