851 lines
24 KiB
Ruby
851 lines
24 KiB
Ruby
# #---------------------------------------------------------------
|
|
# #
|
|
# # Langscore CoreScript "Unison"
|
|
# # Version 0.9.3
|
|
# # Written by BreezeSinfonia 來奈津
|
|
# #
|
|
# # 注意:このスクリプトは自動生成されました。編集は非推奨です。
|
|
# #---------------------------------------------------------------
|
|
# module Langscore
|
|
|
|
# SUPPORT_LANGUAGE = ["ja","zh-cn"]
|
|
# DEFAULT_LANGUAGE = "ja"
|
|
|
|
# LS_FONT = {
|
|
# "ja" => {:name => "VL Gothic", :size => 22},
|
|
# "zh-cn" => {:name => "Source Han Sans CN Regular", :size => 22},
|
|
# }
|
|
|
|
|
|
# TRANSLATE_FOLDER = "Data/Translate"
|
|
|
|
|
|
# $langscore_current_language = Langscore::DEFAULT_LANGUAGE
|
|
# #ハッシュそのものからハッシュを格納するハッシュに変更。
|
|
# #イベント中にマップ移動が行われた場合、翻訳内容がクリアされる問題への対応のため。
|
|
# $ls_current_map = {}
|
|
# $ls_graphic_cache = {}
|
|
|
|
# end
|
|
|
|
# #-----------------------------------------------------
|
|
# String.class_eval <<-eval
|
|
# def lstrans(line_info, *args)
|
|
# text = Langscore.translate_for_script(line_info)
|
|
# return sprintf(text, *args)
|
|
# end
|
|
# eval
|
|
|
|
# #==========LSCSV==========
|
|
# class LsDumpData
|
|
# attr_accessor :data
|
|
# end
|
|
|
|
# class LSCSV
|
|
|
|
# $lscsv_resource_locker = Mutex::new
|
|
# def self.to_hash(file_name)
|
|
# $lscsv_resource_locker.lock
|
|
# file = open(Langscore::TRANSLATE_FOLDER + "/" + file_name)
|
|
# $lscsv_resource_locker.unlock
|
|
# return {} if file == nil
|
|
|
|
# header = fetch_header(file)
|
|
|
|
# rows = parse_col(header, parse_row(file))
|
|
# varidate(file_name, header, rows)
|
|
|
|
# row_index = [*1..header.size].select! do |i|
|
|
# Langscore::SUPPORT_LANGUAGE.include?(header[i])
|
|
# end
|
|
|
|
# #To Hash
|
|
# result = {}
|
|
# rows[1...rows.size].each do |r|
|
|
# origin = r[0]
|
|
# trans = r[1...header.size]
|
|
|
|
# transhash = {}
|
|
# row_index.each do |i|
|
|
# transhash[header[i]] = r[i]
|
|
# end
|
|
# result[origin] = transhash
|
|
# end
|
|
# result
|
|
# end
|
|
|
|
# def self.to_array_without_origin(file_name)
|
|
# hash = to_hash(file_name)
|
|
# return hash.values
|
|
# end
|
|
|
|
# def self.varidate(file_name, header, rows)
|
|
# raise "Invalid CSV Data" if header.nil?
|
|
# size = rows[0].size
|
|
# mismatch_cells = rows.select{ |r| r.size != size }
|
|
# if mismatch_cells.empty? == false
|
|
# p "Error! : Missmatch Num Cells : #{mismatch_cells.first}"
|
|
# p "File : #{file_name}, Header size : #{size}, Languages : #{rows[0]}"
|
|
# raise "Error! : Missmatch Num Cells : #{mismatch_cells.first}"
|
|
# end
|
|
# end
|
|
|
|
# def self.open(name)
|
|
# result = nil
|
|
# begin
|
|
# file_name = name+".rvdata2"
|
|
# trans_file = load_data(file_name)
|
|
# if trans_file.class == LsDumpData
|
|
# p "load_data #{file_name}"
|
|
# result = trans_file.data
|
|
# end
|
|
# rescue => e
|
|
# begin
|
|
|
|
# file_name = name+".csv"
|
|
# trans_file = File.open(file_name, "rb:utf-8:utf-8")
|
|
# p "open #{file_name}"
|
|
# result = trans_file.read
|
|
# rescue
|
|
# p "Warning : Not Found Transcript File #{file_name}"
|
|
# end
|
|
# end
|
|
|
|
# return result
|
|
# end
|
|
|
|
# def self.fetch_header(csv_text)
|
|
# if !csv_text.nil? && 0<csv_text.length
|
|
# splited = csv_text.split("\n", 2)
|
|
# #2行無ければ無効
|
|
# return nil if splited.size < 2
|
|
|
|
# header = splited[0].split(',')
|
|
# header.map!{|lang| lang.chomp }
|
|
# return header
|
|
# end
|
|
|
|
# return nil
|
|
# end
|
|
|
|
# def self.parse_row(csv_text)
|
|
# return nil if csv_text.length == 0
|
|
# return csv_text
|
|
# end
|
|
|
|
# def self.parse_col(header, rows)
|
|
# return if rows == nil
|
|
# result = []
|
|
# cols = []
|
|
# find_quote = false
|
|
|
|
# add_col = lambda do |col|
|
|
# col.chomp! #末尾に改行があれば削除
|
|
# #セルに分けた時点で先頭・末尾の"が不要になるため、削除する
|
|
# if col.start_with?("\"") && col.end_with?("\"")
|
|
# col = col.slice!(1..col.length-2)
|
|
# end
|
|
|
|
# #"を表すための""はCSVでのみ必須のため、読み込み時点で""は"と解釈。
|
|
# col.gsub!("\"\"", "\"")
|
|
# cols.push(col)
|
|
# end
|
|
|
|
# col = ""
|
|
# rows.each_char do |c|
|
|
|
|
# if c=="\""
|
|
# find_quote = !find_quote
|
|
# end
|
|
|
|
# if find_quote
|
|
# #""内なら無条件で追加
|
|
# col += c
|
|
# next
|
|
# end
|
|
|
|
# #以下は""で括られていない場合に通る
|
|
# if c==","
|
|
# find_quote = false
|
|
# add_col.call(col)
|
|
# col = ""
|
|
# elsif c=="\n"
|
|
# col += c #一旦改行を追加。add_col内のchompが適用できるようにする。
|
|
# find_quote = false
|
|
# add_col.call(col)
|
|
# col = ""
|
|
|
|
# #念のため、行中のセルがヘッダーと一致しない場合に空セルで埋める。
|
|
# #最終列が空の場合で該当する。
|
|
# #埋めないとvaridateで弾かれる。
|
|
# if cols.size < header.size
|
|
# cols.fill("", cols.size, header.size-cols.size)
|
|
# end
|
|
# result.push(cols)
|
|
# cols = []
|
|
# else
|
|
# col += c
|
|
# end
|
|
|
|
# end
|
|
|
|
# #最終行の行末がEOFの場合colに内容が残りっぱなしになるので、ここで確認する。
|
|
# if col.empty? == false
|
|
# add_col.call(col)
|
|
# end
|
|
|
|
# if cols.empty? == false
|
|
# #最終行の行末がnlではなくEOFの場合に、この条件に引っかかる
|
|
# if cols.size < header.size
|
|
# cols.fill("", cols.size, header.size-cols.size)
|
|
# end
|
|
# result.push(cols)
|
|
# end
|
|
|
|
# result
|
|
# end
|
|
# end
|
|
# #==========LSCSV==========
|
|
|
|
# #-----------------------------------------------------
|
|
|
|
# module Langscore
|
|
# def self.translate(text, langscore_hash, lang = $langscore_current_language)
|
|
|
|
# return text if langscore_hash == nil
|
|
|
|
# key = text
|
|
|
|
# if langscore_hash.has_key?(key)
|
|
# translist = langscore_hash[key]
|
|
# if translist.has_key?(lang)
|
|
# t = translist[lang]
|
|
# text = t unless t.empty?
|
|
# end
|
|
# end
|
|
# text
|
|
# end
|
|
|
|
# def self.translate_for_map(text)
|
|
# $ls_current_map.each_value do |trans|
|
|
# result = Langscore.translate(text, trans)
|
|
# if result != text
|
|
# return result
|
|
# end
|
|
# end
|
|
# return text
|
|
# end
|
|
|
|
# def self.translate_for_script(text)
|
|
# result = self.translate(text, $ls_scripts_tr)
|
|
# result
|
|
# end
|
|
|
|
# def self.fetch_original_text(transed_text, langscore_hash)
|
|
|
|
# origin = transed_text
|
|
# result = langscore_hash.each do |k,hash|
|
|
# if hash.values.include?(transed_text)
|
|
# origin = k
|
|
# break
|
|
# end
|
|
# end
|
|
|
|
# origin
|
|
# end
|
|
|
|
# def self.translate_list_reset
|
|
# return if $TEST == false
|
|
# $ls_actor_tr.clear
|
|
# $ls_system_tr.clear
|
|
# $ls_classes_tr.clear
|
|
# $ls_skill_tr.clear
|
|
# $ls_states_tr.clear
|
|
# $ls_weapons_tr.clear
|
|
# $ls_armors_tr.clear
|
|
# $ls_item_tr.clear
|
|
# $ls_enemies_tr.clear
|
|
# $ls_graphics_tr = LSCSV.to_hash("Graphics")
|
|
# $ls_scripts_tr = LSCSV.to_hash("Scripts")
|
|
# $ls_troop_tr ||= LSCSV.to_hash("Troops")
|
|
# $ls_common_event ||= LSCSV.to_hash("CommonEvents")
|
|
|
|
# changeLanguage($langscore_current_language)
|
|
# end
|
|
|
|
# def self.changeLanguage(lang)
|
|
|
|
# $langscore_current_language = lang
|
|
# Langscore.Translate_Script_Text
|
|
# Langscore.updateFont(lang)
|
|
|
|
# #データベースを初期化
|
|
# DataManager.ls_base_load_normal_database
|
|
|
|
# functions = [
|
|
# lambda{Langscore.updateSkills},
|
|
# lambda{Langscore.updateClasses},
|
|
# lambda{Langscore.updateStates},
|
|
# lambda{Langscore.updateEnemies},
|
|
# lambda{Langscore.updateItems},
|
|
# lambda{Langscore.updateArmors},
|
|
# lambda{Langscore.updateWeapons},
|
|
# lambda{Langscore.updateSystem},
|
|
# ]
|
|
# updateThreads = []
|
|
# functions.each do |f|
|
|
# updateThreads << Thread.new do
|
|
# f.call
|
|
# end
|
|
# end
|
|
# updateThreads.each do |t| t.join end
|
|
|
|
# #Game_Actors.newをしているため並列処理から除外
|
|
# Langscore.updateActor
|
|
|
|
# $ls_graphic_cache ||= {}
|
|
# $ls_graphic_cache.clear
|
|
# GC.start
|
|
# end
|
|
|
|
# private
|
|
# def self.updateFont(lang)
|
|
|
|
# beforeFontName = Font.default_name
|
|
# if LS_FONT[lang] == nil
|
|
# return beforeFontName != Font.default_name
|
|
# end
|
|
|
|
# Font.default_name = LS_FONT[lang][:name]
|
|
# Font.default_size = LS_FONT[lang][:size]
|
|
|
|
# if SceneManager.scene != nil
|
|
# SceneManager.scene.instance_variables.each do |varname|
|
|
# #instance_variablesだけだとself.instance_variablesになるので、
|
|
# #ちゃんとシーンを指定する。
|
|
# ivar = SceneManager.scene.instance_variable_get(varname)
|
|
# #シーンが持っているウィンドウ全てのフォントを更新
|
|
# #disposedをチェックしないと、解放済みの場合に死ぬ
|
|
# if ivar.is_a?(Window_Base) && ivar.disposed? == false
|
|
# ivar.contents.font.name = Font.default_name
|
|
# ivar.contents.font.size = Font.default_size
|
|
# end
|
|
# end
|
|
# end
|
|
# return beforeFontName != Font.default_name
|
|
# end
|
|
|
|
# def self.updateForNameAndDesc(data_list, tr_list)
|
|
# elm_trans = lambda do |el|
|
|
# el = Langscore.translate(el, tr_list)
|
|
# end
|
|
# data_list.each.with_index do |obj,i|
|
|
# next if data_list[i].nil?
|
|
# data_list[i].name = elm_trans.call(obj.name)
|
|
# data_list[i].description = elm_trans.call(obj.description)
|
|
# end
|
|
# end
|
|
|
|
# def self.updateForName(data_list, tr_list)
|
|
# elm_trans = lambda do |el|
|
|
# el = Langscore.translate(el, tr_list)
|
|
# end
|
|
# data_list.each.with_index do |obj,i|
|
|
# next if data_list[i].nil?
|
|
# data_list[i].name = elm_trans.call(obj.name)
|
|
# end
|
|
# end
|
|
|
|
# def self.updateActor
|
|
# $ls_actor_tr ||= LSCSV.to_hash("Actors")
|
|
|
|
# #大元のデータベースを更新。Game_Actor作成時に使用されるため必要。
|
|
# updateForNameAndDesc($data_actors, $ls_actor_tr)
|
|
|
|
# elm_trans = lambda do |el|
|
|
# el = Langscore.translate(el, $ls_actor_tr)
|
|
# end
|
|
|
|
# #既にGame_Actorが作成されている場合、インスタンス側も更新。
|
|
# #他のデータベースと同様に初期化を行うと、パラメータ値等も全部初期化されるので、名前以外の内容は保持する。
|
|
# actors = $game_actors.instance_variable_get(:@data)
|
|
# return unless actors
|
|
# actors.each do |actor|
|
|
# next unless actor #空アクターの場合はnil
|
|
# actor_id = actor.instance_variable_get(:@actor_id)
|
|
# name = Langscore.fetch_original_text(actor.name, $ls_actor_tr)
|
|
# nickname = Langscore.fetch_original_text(actor.nickname, $ls_actor_tr)
|
|
# $game_actors[actor_id].name = elm_trans.call(name)
|
|
# $game_actors[actor_id].nickname = elm_trans.call(nickname)
|
|
# end
|
|
# end
|
|
|
|
# def self.updateSystem
|
|
# $ls_system_tr ||= LSCSV.to_hash("System")
|
|
|
|
# elm_trans = lambda do |el|
|
|
# el = Langscore.translate(el, $ls_system_tr)
|
|
# end
|
|
# $data_system.elements.map! &elm_trans
|
|
# $data_system.skill_types.map! &elm_trans
|
|
# $data_system.terms.params.map! &elm_trans
|
|
# $data_system.terms.etypes.map! &elm_trans
|
|
# $data_system.terms.commands.map! &elm_trans
|
|
# $data_system.terms.basic.map! &elm_trans
|
|
|
|
# $data_system.currency_unit = Langscore.translate($data_system.currency_unit, $ls_system_tr)
|
|
# end
|
|
|
|
# def self.updateClasses
|
|
# $ls_classes_tr ||= LSCSV.to_hash("Classes")
|
|
# updateForName($data_classes, $ls_classes_tr)
|
|
# end
|
|
|
|
# def self.updateSkills
|
|
# $ls_skill_tr ||= LSCSV.to_hash("Skills")
|
|
|
|
# elm_trans = lambda do |el|
|
|
# el = Langscore.translate(el, $ls_skill_tr)
|
|
# end
|
|
# $data_skills.each.with_index do |skill,i|
|
|
# next if $data_skills[i].nil?
|
|
# $data_skills[i].name = elm_trans.call(skill.name)
|
|
# $data_skills[i].description = elm_trans.call(skill.description)
|
|
# $data_skills[i].message1 = elm_trans.call(skill.message1)
|
|
# $data_skills[i].message2 = elm_trans.call(skill.message2)
|
|
# end
|
|
# end
|
|
|
|
# def self.updateStates
|
|
# $ls_states_tr ||= LSCSV.to_hash("States")
|
|
|
|
# elm_trans = lambda do |el|
|
|
# el = Langscore.translate(el, $ls_states_tr)
|
|
# end
|
|
# $data_states.each.with_index do |skill,i|
|
|
# next if $data_states[i].nil?
|
|
# $data_states[i].name = elm_trans.call(skill.name)
|
|
# $data_states[i].message1 = elm_trans.call(skill.message1)
|
|
# $data_states[i].message2 = elm_trans.call(skill.message2)
|
|
# $data_states[i].message3 = elm_trans.call(skill.message3)
|
|
# $data_states[i].message4 = elm_trans.call(skill.message4)
|
|
# end
|
|
# end
|
|
|
|
# def self.updateWeapons
|
|
# $ls_weapons_tr ||= LSCSV.to_hash("Weapons")
|
|
# updateForNameAndDesc($data_weapons, $ls_weapons_tr)
|
|
# end
|
|
|
|
# def self.updateArmors
|
|
# $ls_armors_tr ||= LSCSV.to_hash("Armors")
|
|
# updateForNameAndDesc($data_armors, $ls_armors_tr)
|
|
# end
|
|
|
|
# def self.updateItems
|
|
# $ls_item_tr ||= LSCSV.to_hash("Items")
|
|
# updateForNameAndDesc($data_items, $ls_item_tr)
|
|
# end
|
|
|
|
# def self.updateEnemies
|
|
# $ls_enemies_tr ||= LSCSV.to_hash("Enemies")
|
|
# updateForName($data_enemies, $ls_enemies_tr)
|
|
# end
|
|
|
|
# end
|
|
|
|
|
|
# #-----------------------------------------------------
|
|
|
|
# class Game_Map
|
|
|
|
# def Game_Map.ls_finalize
|
|
# proc {
|
|
# $ls_current_map.delete(@map_id)
|
|
# }
|
|
# end
|
|
|
|
# alias ls_base_setup setup
|
|
# def setup(map_id)
|
|
# ls_base_setup(map_id)
|
|
# load_langscore_file(map_id)
|
|
# end
|
|
|
|
# def load_langscore_file(map_id)
|
|
# file_name = sprintf("Map%03d", @map_id)
|
|
|
|
# return if $ls_current_map.include?(@map_id)
|
|
# $ls_current_map[@map_id] = LSCSV.to_hash(file_name)
|
|
# #メモリ節約のためファイナライズで翻訳内容を消す。GC頼りなのでおまじない程度の気持ち。
|
|
# #会話中に何故かクラッシュした場合は真っ先に外す。
|
|
# ObjectSpace.define_finalizer(self, Game_Map.ls_finalize)
|
|
# end
|
|
# end
|
|
|
|
# class Window_Base < Window
|
|
|
|
# alias ls_base_convert_escape_characters convert_escape_characters
|
|
# def convert_escape_characters(text)
|
|
|
|
# if text.empty?
|
|
# return ls_base_convert_escape_characters(text)
|
|
# end
|
|
|
|
# #マップ・バトル・コモンイベントかを判別できないので苦肉の策
|
|
# result_text = [text, text, text]
|
|
# updateThreads = []
|
|
# if $ls_current_map
|
|
# updateThreads << Thread.new do
|
|
# result_text[0] = Langscore.translate_for_map(text)
|
|
# end
|
|
# end
|
|
# updateThreads << Thread.new do
|
|
# result_text[1] = Langscore.translate(text, $ls_troop_tr)
|
|
# end
|
|
# updateThreads << Thread.new do
|
|
# result_text[2] = Langscore.translate(text, $ls_common_event)
|
|
# end
|
|
|
|
# updateThreads.each { |t| t.join }
|
|
|
|
# result = result_text.select do |t|
|
|
# t != text
|
|
# end
|
|
|
|
# if result.empty?
|
|
# return ls_base_convert_escape_characters(text)
|
|
# end
|
|
|
|
# ls_base_convert_escape_characters(result[0])
|
|
# end
|
|
|
|
# end
|
|
|
|
|
|
# #モジュールの上書き
|
|
# #シーン遷移に関わらない翻訳ファイルは初期化時に読み込み
|
|
# DataManager::module_eval <<-eval
|
|
# class << DataManager
|
|
# alias ls_base_load_normal_database load_normal_database
|
|
# alias ls_make_save_contents make_save_contents
|
|
# alias ls_extract_save_contents extract_save_contents
|
|
# alias ls_reload_map_if_updated reload_map_if_updated
|
|
# end
|
|
|
|
# #戦闘テスト用は未対応
|
|
# def self.load_normal_database
|
|
# ls_base_load_normal_database
|
|
|
|
# updateThreads = []
|
|
|
|
# updateThreads << Thread.new do
|
|
# $ls_graphics_tr ||= LSCSV.to_hash("Graphics")
|
|
# end
|
|
|
|
# updateThreads << Thread.new do
|
|
# $ls_scripts_tr ||= LSCSV.to_hash("Scripts")
|
|
# end
|
|
|
|
# updateThreads << Thread.new do
|
|
# $ls_troop_tr ||= LSCSV.to_hash("Troops")
|
|
# end
|
|
|
|
# updateThreads << Thread.new do
|
|
# $ls_common_event ||= LSCSV.to_hash("CommonEvents")
|
|
# end
|
|
|
|
# updateThreads.each { |t| t.join }
|
|
|
|
# Langscore.changeLanguage($langscore_current_language)
|
|
# end
|
|
|
|
# #セーブを行う際は原文で保存
|
|
# #プラグインを外した際に変に翻訳文が残ることを避ける。
|
|
# def self.make_save_contents
|
|
|
|
# data_temp = Marshal.dump($game_actors)
|
|
|
|
# actors = $game_actors.instance_variable_get(:@data)
|
|
# actors.each.with_index do |actor,i|
|
|
# next unless actor #空アクターの場合はnil
|
|
# actor_id = actor.instance_variable_get(:@actor_id)
|
|
# $game_actors[actor_id].name = Langscore.fetch_original_text(actor.name, $ls_actor_tr)
|
|
# $game_actors[actor_id].nickname = Langscore.fetch_original_text(actor.nickname, $ls_actor_tr)
|
|
# end
|
|
|
|
# #セーブ本処理
|
|
# result = ls_make_save_contents
|
|
|
|
# $game_actors = Marshal.load(data_temp)
|
|
|
|
# result
|
|
# end
|
|
|
|
# #セーブデータは原文で保存されているため、起動時の言語設定で置き換える。
|
|
# #これを省くと中国語で起動した際に、再度翻訳を適用するまで日本語のまま……といった事が起きる。
|
|
# def self.extract_save_contents(contents)
|
|
# ls_extract_save_contents(contents)
|
|
|
|
# Langscore.changeLanguage($langscore_current_language)
|
|
# end
|
|
|
|
# #セーブデータロード時のマップ更新はversion_idに依存しているが、
|
|
# #version_idの更新タイミングが謎なのでMapが更新されたりされなかったりするように見える。
|
|
# #Langscoreの場合$game_map.setupが行われないと翻訳文が読み込まれないため、
|
|
# #reload_map_if_updatedの分岐に関わらずロードするようにする。
|
|
# def self.reload_map_if_updated
|
|
# ls_reload_map_if_updated
|
|
# $game_map.load_langscore_file($game_map.map_id)
|
|
# end
|
|
|
|
# eval
|
|
|
|
# Cache::module_eval <<-eval
|
|
|
|
# class << Cache
|
|
# alias ls_base_load_bitmap load_bitmap
|
|
# end
|
|
|
|
# def self.load_bitmap(folder_name, filename, hue = 0)
|
|
|
|
# path = folder_name+filename
|
|
# ts_path = Langscore.translate(path, $ls_graphics_tr)
|
|
# if ts_path != path
|
|
# filename = ts_path.sub(folder_name, "")
|
|
# else
|
|
# #翻訳テキスト内で明示的に画像が指定されていない場合、ファイル名検索
|
|
# #filenameは元から拡張子なしなのでそのまま結合
|
|
# new_filename = filename + '_' + $langscore_current_language
|
|
|
|
# has_key = $ls_graphic_cache.has_key?(filename)
|
|
# if has_key == false
|
|
# begin
|
|
# bitmap = ls_base_load_bitmap(folder_name, new_filename, hue)
|
|
# $ls_graphic_cache[filename] = true
|
|
# return bitmap
|
|
# rescue => e
|
|
# $ls_graphic_cache[filename] = false
|
|
# end
|
|
# end
|
|
|
|
# if $ls_graphic_cache[filename]
|
|
# filename = new_filename
|
|
# end
|
|
# end
|
|
|
|
# ls_base_load_bitmap(folder_name, filename, hue)
|
|
# end
|
|
# #ロード時の変換処理も必須
|
|
# eval
|
|
|
|
# module Langscore
|
|
|
|
# SYSTEM1 = "現在選択中の言語が表示されます。"
|
|
# $langscore_system = {
|
|
# SYSTEM1 => {
|
|
# "ja" => "現在選択中の言語が表示されます。",
|
|
# "zh-cn" => "显示当前选择的语言。",
|
|
# }
|
|
# }
|
|
# SYSTEM2 = {
|
|
# "ja" => "日本語",
|
|
# "zh-cn" => "中文(簡体)",
|
|
# }
|
|
|
|
# module UI
|
|
# class Window_Langscore < Window_Command
|
|
|
|
# attr_accessor :recreate
|
|
|
|
# def initialize
|
|
# super(0,0)
|
|
# self.x = (Graphics.width - self.window_width ) / 2
|
|
# self.y = (Graphics.height - self.window_height) / 2
|
|
# @_recreate = false
|
|
|
|
# SUPPORT_LANGUAGE.each.with_index do |l, i|
|
|
# select(i) if $langscore_current_language == l
|
|
# end
|
|
|
|
# open
|
|
# end
|
|
|
|
# def window_width
|
|
# return 210
|
|
# end
|
|
|
|
# def make_command_list
|
|
# SUPPORT_LANGUAGE.each.with_index do |l, i|
|
|
# add_command(SYSTEM2[l], l.to_sym)
|
|
# end
|
|
# end
|
|
|
|
# def cursor_up(wrap = false)
|
|
# super wrap
|
|
# call_handler(:ls_update)
|
|
# end
|
|
|
|
# def cursor_down(wrap = false)
|
|
# super wrap
|
|
# call_handler(:ls_update)
|
|
# end
|
|
|
|
# end
|
|
|
|
|
|
# class Window_Langscore_OKCancel < Window_HorzCommand
|
|
# def initialize(y)
|
|
|
|
# @gray_color = $game_system.window_tone
|
|
# @gray_color.gray = 255
|
|
# @def_color = $game_system.window_tone
|
|
|
|
# super((Graphics.width - self.window_width ) / 2, y)
|
|
# select(1)
|
|
|
|
# deactivate
|
|
# open
|
|
# end
|
|
|
|
# def make_command_list
|
|
# add_command("OK", :ok)
|
|
# add_command("Reselect", :select)
|
|
# add_command("Cancel", :cancel)
|
|
# end
|
|
|
|
# def window_width
|
|
# return 380
|
|
# end
|
|
|
|
# def col_max
|
|
# return 3
|
|
# end
|
|
|
|
# def activate
|
|
# self.tone.set(@def_color)
|
|
# super
|
|
# end
|
|
|
|
# def deactivate
|
|
# self.tone.set(@gray_color)
|
|
# super
|
|
# end
|
|
|
|
# end
|
|
|
|
# class Scene_Language < Scene_MenuBase
|
|
# def start
|
|
# super
|
|
# @before_lang = $langscore_current_language
|
|
# create_help_window
|
|
# create_lsmain_window
|
|
# create_ok_cancel_window
|
|
|
|
# @okcancel_window.deactivate
|
|
|
|
# end
|
|
|
|
# def terminate
|
|
# super
|
|
# @command_window.dispose
|
|
# Langscore.changeLanguage($langscore_current_language)
|
|
# LSSetting.save()
|
|
# end
|
|
|
|
|
|
# def create_lsmain_window
|
|
# @command_window.dispose unless @command_window.nil?
|
|
# @command_window = Window_Langscore.new
|
|
# @command_window.viewport = @viewport
|
|
|
|
# @command_window.set_handler(:ok, method(:to_okcancel))
|
|
# @command_window.set_handler(:ls_update, method(:select_lang))
|
|
# @command_window.set_handler(:cancel, method(:return_scene))
|
|
# @help_window.set_text(Langscore.translate(SYSTEM1, $langscore_system))
|
|
# end
|
|
|
|
# def update_basic
|
|
# super
|
|
# if @command_window != nil && @command_window.recreate
|
|
# @help_window.dispose unless @help_window.nil?
|
|
# create_help_window
|
|
# create_lsmain_window
|
|
# end
|
|
# end
|
|
|
|
# def select_lang
|
|
# return if @command_window.index == -1
|
|
# $langscore_current_language = SUPPORT_LANGUAGE[@command_window.index]
|
|
# @help_window.set_text(Langscore.translate(SYSTEM1, $langscore_system))
|
|
# if Langscore.updateFont($langscore_current_language)
|
|
# @command_window.recreate = true
|
|
# end
|
|
# end
|
|
|
|
# def to_okcancel
|
|
# @command_window.deactivate
|
|
# @okcancel_window.activate
|
|
# end
|
|
|
|
# def create_ok_cancel_window
|
|
# @okcancel_window.dispose unless @okcancel_window.nil?
|
|
# y_pos = @command_window.y + @command_window.height + 8
|
|
# @okcancel_window = Window_Langscore_OKCancel.new(y_pos)
|
|
# @okcancel_window.viewport = @viewport
|
|
|
|
# @okcancel_window.set_handler(:select, method(:reselect))
|
|
# @okcancel_window.set_handler(:ok, method(:accept))
|
|
# @okcancel_window.set_handler(:cancel, method(:reject))
|
|
# end
|
|
|
|
# def reselect
|
|
# @command_window.activate
|
|
# @okcancel_window.deactivate
|
|
# end
|
|
|
|
# def accept
|
|
# self.return_scene
|
|
# end
|
|
|
|
# def reject
|
|
# $langscore_current_language = @before_lang
|
|
# self.return_scene
|
|
# end
|
|
# end
|
|
|
|
# end #module UI
|
|
|
|
|
|
# class LSSetting
|
|
# GetPrivateProfileString = Win32API.new('kernel32', 'GetPrivateProfileString', %w(p p p p l p), 'L')
|
|
# WritePrivateProfileString = Win32API.new('kernel32', 'WritePrivateProfileString', %w(p p p p), 'i')
|
|
|
|
# BufferSize = 16+1
|
|
|
|
# def self.load
|
|
# result = ' ' * BufferSize
|
|
# r = GetPrivateProfileString.call("Langscore", "Lang", "ja", result, BufferSize, "./Game.ini")
|
|
# if r == BufferSize-2
|
|
# $langscore_current_language = "ja"
|
|
# else
|
|
# $langscore_current_language = result.slice(0...r)
|
|
# p "Langscore Load ini : #{$langscore_current_language}"
|
|
# end
|
|
# end
|
|
|
|
# def self.save
|
|
# WritePrivateProfileString.call("Langscore", "Lang", $langscore_current_language, "./Game.ini")
|
|
# end
|
|
# end
|
|
|
|
# LSSetting.load()
|
|
|
|
# def self.saveIni
|
|
# LSSetting.save()
|
|
# end
|
|
|
|
# def self.loadIni
|
|
# LSSetting.load()
|
|
# end
|
|
|
|
# end # module Langscore
|