查看: 3989|回复: 4

[原创发布] 【】为游戏提供多语言支持的脚本

[复制链接]
梦石
0
星屑
635
在线时间
24 小时
注册时间
2020-4-22
回帖
23
发表于 2020-11-14 23:02:46 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
以前搞过很多,个人汉化
一个人打开数据库慢慢改
然后发现这样好傻啊
[pre lang="ruby"]=begin
多语言系统插件V1.0
by 炽天裁决


这个插件可以导出数据库中的文本,然后做成外挂翻译


使用方法,放入此插件,将模式改为“save”运行游戏
然后会生成一个文档,在每一行后面添加对应的翻译
然后将模式改成“load”,即可


注意:此插件目前只支持替换数据库中的文本


脚本库善用查找功能就能轻松解决。。。吧






=end

module Dictionary
  MODE = "load"#模式,save表示储存原始文本,load表示读取翻译文本
  SAVE = "System/text_input.txt"#原始文本保存位置
  NAME = "System/text_input.txt"#翻译文本保存位置
  SPLIT = "``"#间隔符号
  ENTER = "~~"#换行符号
  
end
$classlist = []
$init = false

############################################################################
if  Dictionary::MODE == "save"
  module DataManager
    class <<self; alias sv_load_normal_database load_normal_database; end
    def self.load_normal_database
      sv_load_normal_database
      save_all
    end
    def self.save_all
      save_actor
      save_class
      save_skill
      save_item
      save_weapon
      save_armor
      save_enemy
      save_state
      save_troop
      save_common_event
      save_system
      save_mapinfo
    end
    def self.sv_text(i,kind = "none",d = "#",id = 0)
      id = id.to_s
      return unless i.class == String
      x = i.delete("0123456789,./*-+=% ")
      return if x == ""
      sv = File.new(Dictionary::SAVE, "a")
      sv.syswrite(kind+"#{Dictionary::SPLIT}"+d+"#{Dictionary::SPLIT}"+id+"#{Dictionary::SPLIT}"+i + "#{Dictionary::SPLIT}\n#{Dictionary::ENTER}")
      sv.close
    end

    def self.save_actor
      kind = "$data_actors"
      $data_actors.each{|a|
      next if a == nil
      sv_text(a.name,kind,"#name","#{a.id}")
      sv_text(a.description,kind,"#description","#{a.id}")
      sv_text(a.nickname,kind,"#nickname","#{a.id}")
      
      }
    end
    def self.save_class
      kind = "$data_classes"
      $data_classes.each{|a|
      next if a == nil
      sv_text(a.name,kind,"#name","#{a.id}")
      sv_text(a.description,"#description","#{a.id}")
      }
    end
    def self.save_skill
      kind = "$data_skills"
      $data_skills.each{|a|
      next if a == nil
      sv_text(a.name,kind,"#name","#{a.id}")
      sv_text(a.description,kind,"#description","#{a.id}")
      sv_text(a.message1,kind,"#message1","#{a.id}")
      sv_text(a.message2,kind,"#message2","#{a.id}")
      }
    end
    def self.save_item
      kind = "$data_items"
      $data_items.each{|a|
      next if a == nil
      sv_text(a.name,kind,"#name","#{a.id}")
      sv_text(a.description,kind,"#description","#{a.id}")
      }
    end
    def self.save_weapon
      kind = "$data_weapons"
      $data_weapons.each{|a|
      next if a == nil
      sv_text(a.name,kind,"#name","#{a.id}")
      sv_text(a.description,kind,"#description","#{a.id}")
      }
    end
    def self.save_armor
      kind = "$data_armors"
      $data_armors.each{|a|
      next if a == nil
      sv_text(a.name,kind,"#name","#{a.id}")
      sv_text(a.description,kind,"#description","#{a.id}")
      }
    end
    def self.save_enemy
      kind = "$data_enemies"
      $data_enemies.each{|a|
      next if a == nil
      sv_text(a.name,kind,"#name","#{a.id}")
      sv_text(a.description,kind,"#description","#{a.id}")
      }
    end

    def self.save_state
      kind = "$data_states"
      $data_states.each{|a|
      next if a == nil
      sv_text(a.name,kind,"#name","#{a.id}")
      sv_text(a.description,kind,"#description","#{a.id}")
      sv_text(a.message1,kind,"#message1","#{a.id}")
      sv_text(a.message2,kind,"#message2","#{a.id}")
      sv_text(a.message3,kind,"#message3","#{a.id}")
      sv_text(a.message4,kind,"#message4","#{a.id}")
      }
    end

    def self.save_troop
      kind = "$data_troops"
      $data_troops.each{|a|
      next if a == nil
      sv_text(a.name,kind,"#name","#{a.id}")
      a.pages.each{|i|
      next if i == nil
      i.list.each{|c|
      next if c == nil
      if input?(c)
      c.parameters.each{|s|
      sv_text(s,kind,"#event","#{a.id}")
     
      }
      end
      }
      }
      }
    end

    def self.save_common_event
      kind = "$data_common_events"
      $data_common_events.each{|a|
      next if a == nil
      a.list.each{|i|
      next if i == nil
      if input?(i)
      i.parameters.each{|s|
      sv_text(s,kind,"#event","#{a.id}")
      }
      end
      }
      }
    end


    def self.save_system
      kind = "$data_system "
      a = $data_system
      sv_text(a.game_title,kind,"#game_title")
      sv_text(a.currency_unit,kind,"#currency_unit")
      a.elements.each{|i|
      sv_text(i,kind,"#elements")
      }
      a.weapon_types.each{|i|
      sv_text(i,kind,"#weapon_types")
      }
      a.skill_types.each{|i|
      sv_text(i,kind,"#skill_types")
      }
     # a.switches.each{|i|
     # sv_text(i,kind,"#switches")
      #}
     # a.variables.each{|i|
    #  sv_text(i,kind,"#variables")
     # }
      a.terms.basic.each{|i|
      sv_text(i,kind,"#terms.basic")
      }
      a.terms.params.each{|i|
      sv_text(i,kind,"#terms.params")
      }
      a.terms.etypes.each{|i|
      sv_text(i,kind,"#terms.etypes")
      }
      a.terms.commands.each{|i|
      sv_text(i,kind,"#terms.commands")
      }
    end




    def self.save_mapinfo
      kind = "$data_mapinfos"
      $data_mapinfos.each{|b,a|
      next if a == nil
      sv_text(a.name,kind,"#name","#{a.parent_id}")
      next if a.parent_id == 0
      map = load_data(sprintf("Data/Map%03d.rvdata2", a.parent_id))
      kind2 = (sprintf("Map%03d", a.parent_id))
      sv_text(map.display_name,kind2,"#display_name","#{a.parent_id}")
      map.events.each{|k,v|
      next if v == nil
      v.pages.each{|p|
      next if p == nil
      p.list.each{|c|
      next if c == nil
      if input?(c)
      c.parameters.each{|s|
      sv_text(s,kind2,"#envent","#{a.parent_id}")
      }
      end
      }
      }
      }
      }
    end
    def self.input?(i)
      a = [401]
      return a.include?(i.code)
    end

  end
  
end




if  Dictionary::MODE == "load"
  $tsl_list = {}
  ld = File.read(Dictionary::NAME).split("\n#{Dictionary::ENTER}")
  ld.each{|line|
  a = line.split("#{Dictionary::SPLIT}")
  $tsl_list[a[0]] = {} if $tsl_list[a[0]] == nil
  $tsl_list[a[0]][a[2]] = {} if $tsl_list[a[0]][a[2]] == nil
  $tsl_list[a[0]][a[2]][a[3]] = a[4] if a.size == 5
  }
  
  module DataManager
    class <<self; alias ld_load_normal_database load_normal_database; end
    def self.load_normal_database
      ld_load_normal_database
      load_all
    end
    def self.load_all
      load_actor
      load_class
      load_skill
      load_item
      load_weapon
      load_armor
      load_enemy
      load_state
      load_troop
      load_common_event
      load_system
      load_mapinfo
    end
    def self.ld_text(i,kind = "none",b = "#",id = 0)
      id = id.to_s
      return false unless i.class == String
      x = i.delete("0123456789,./*-+=% ")
      return false if x == ""
      return false if $tsl_list[kind] == nil
      return false if $tsl_list[kind][id] == nil
      m = $tsl_list[kind][id]
      return false if m == nil
      return m
    end

    def self.load_actor
      kind = "$data_actors"
      data = [nil]
      $data_actors.each{|a|
      next if a == nil
      n = ld_text(a.name,kind,"#name","#{a.id}")
      a.name = n if n != false
      n = ld_text(a.description,kind,"#description","#{a.id}")
      a.description = n if n != false
      n = ld_text(a.nickname,kind,"#nickname","#{a.id}")
      a.nickname = n if n != false
      data+=[a]
      }
      $data_actors = data
    end
    def self.load_class
      kind = "$data_classes"
      data = [nil]
      $data_classes.each{|a|
      next if a == nil
      n = ld_text(a.name,kind,"#name","#{a.id}")
      a.name = n if n != false
      n = ld_text(a.description,kind,"#description","#{a.id}")
      a.description = n if n != false
      data+=[a]
      }
      $data_classes = data
    end
    def self.load_skill
      kind = "$data_skills"
      data = [nil]
      $data_skills.each{|a|
      next if a == nil
      n = ld_text(a.name,kind,"#name","#{a.id}")
      a.name = n if n != false
      n = ld_text(a.description,kind,"#description","#{a.id}")
      a.description = n if n != false
      n = ld_text(a.message1,kind,"#message1","#{a.id}")
      a.message1 = n if n != false
      n = ld_text(a.message2,kind,"#message2","#{a.id}")
      a.message2 = n if n != false
      data+=[a]
      }
      $data_skills = data
    end
    def self.load_item
      kind = "$data_items"
      data = [nil]
      $data_items.each{|a|
      next if a == nil
      n = ld_text(a.name,kind,"#name","#{a.id}")
      a.name = n if n != false
      n = ld_text(a.description,kind,"#description","#{a.id}")
      a.description = n if n != false
      data+=[a]
      }
      $data_items = data
    end
    def self.load_weapon
      kind = "$data_weapons"
      data = [nil]
      $data_weapons.each{|a|
      next if a == nil
      n = ld_text(a.name,kind,"#name","#{a.id}")
      a.name = n if n != false
      n = ld_text(a.description,kind,"#description","#{a.id}")
      a.description = n if n != false
      data+=[a]
      }
      $data_weapons = data
    end
    def self.load_armor
      kind = "$data_armors"
      data = [nil]
      $data_armors.each{|a|
      next if a == nil
      n = ld_text(a.name,kind,"#name","#{a.id}")
      a.name = n if n != false
      n = ld_text(a.description,kind,"#description","#{a.id}")
      a.description = n if n != false
      data+=[a]
      }
      $data_armors = data
    end
    def self.load_enemy
      kind = "$data_enemies"
      data = [nil]
      $data_enemies.each{|a|
      next if a == nil
      n = ld_text(a.name,kind,"#name","#{a.id}")
      a.name = n if n != false
      n = ld_text(a.description,kind,"#description","#{a.id}")
      a.description = n if n != false
      data+=[a]
      }
      $data_enemies = data
    end

    def self.load_state
      kind = "$data_states"
      data = [nil]
      $data_states.each{|a|
      next if a == nil
      n = ld_text(a.name,kind,"#name","#{a.id}")
      a.name = n if n != false
      n = ld_text(a.description,kind,"#description","#{a.id}")
      a.description = n if n != false
      n = ld_text(a.message1,kind,"#message1","#{a.id}")
      a.message1 = n if n != false
      n = ld_text(a.message2,kind,"#message2","#{a.id}")
      a.message2 = n if n != false
      n = ld_text(a.message3,kind,"#message3","#{a.id}")
      a.message3 = n if n != false
      n = ld_text(a.message4,kind,"#message4","#{a.id}")
      a.message4 = n if n != false
      data+=[a]
      }
      $data_states = data
    end

    def self.load_troop
      kind = "$data_troops"
      data = [nil]
      $data_troops.each{|a|
      next if a == nil
      n = ld_text(a.name,kind,"#name","#{a.id}")
      a.name = n if n != false
      a.pages.each_index{|i|
      next if a.pages == nil
      a.pages.list.each_index{|c|
      next if a.pages.list[c] == nil
      if input?(a.pages.list[c])
      a.pages.list[c].parameters.each_index{|s|
      n = ld_text(a.pages.list[c].parameters,kind,"#event","#{a.id}")
      a.pages.list[c].parameters = n if n != false
      
     
      }
      end
      }
      }
      
      data+=[a]
      }
      $data_troops = data
    end

    def self.load_common_event
      kind = "$data_common_events"
      $data_common_events.each_index{|a|
      next if $data_common_events[a] == nil
      $data_common_events[a].list.each_index{|i|
      next if $data_common_events[a].list == nil
      if input?($data_common_events[a].list)
      $data_common_events[a].list.parameters.each_index{|s|
      n = ld_text($data_common_events[a].list.parameters,kind,"#event","#{$data_common_events[a].id}")
      $data_common_events[a].list.parameters = n if n != false
      }
      end
      }
      
      }
    end


    def self.load_system
      kind = "$data_system "
      a = $data_system
      n = ld_text(a.game_title,kind,"#game_title")
      a.game_title = n if n != false
      n = ld_text(a.currency_unit,kind,"#currency_unit")
      a.currency_unit = n if n != false
      a.elements.each_index{|i|
      n = ld_text(a.elements,kind,"#elements")
      a.elements = n if n != false
      }
      a.weapon_types.each_index{|i|
      n = ld_text(a.weapon_types,kind,"#weapon_types")
      a.weapon_types = n if n != false
      }
      a.skill_types.each_index{|i|
      n = ld_text(a.skill_types,kind,"#skill_types")
      a.skill_types = n if n != false
      }
      a.switches.each_index{|i|
      n = ld_text(a.switches,kind,"#switches")
      a.switches = n if n != false
      }
      a.variables.each_index{|i|
      n = ld_text(a.variables,kind,"#variables")
      a.variables = n if n != false
      }
      a.terms.basic.each_index{|i|
      n = ld_text(a.terms.basic,kind,"#terms.basic")
      a.terms.basic = n if n != false
      }
      a.terms.params.each_index{|i|
      n = ld_text(a.terms.params,kind,"#terms.params")
      a.terms.params = n if n != false
      }
      a.terms.etypes.each_index{|i|
      n = ld_text(a.terms.etypes,kind,"#terms.etypes")
      a.terms.etypes = n if n != false
      }
      a.terms.commands.each_index{|i|
      n = ld_text(a.terms.commands,kind,"#terms.commands")
      a.terms.commands = n if n != false
      }
      
      $data_system = a
    end




    def self.load_mapinfo
      kind = "$data_mapinfos"
      data = [nil]
      $data_mapinfos.each{|b,a|
      next if a == nil
      n = ld_text(a.name,kind,"#name","#{a.parent_id}")
      $data_mapinfos.name = n if n != false
      data+=[a]
      
      }
      $data_mapinfos = data
    end
    def self.load_map(id)
      map = load_data(sprintf("Data/Map%03d.rvdata2", id))
      kind2 = (sprintf("Map%03d", id))
      n = ld_text(map.display_name,kind2,"#display_name","#{id}")
      map.display_name = n if n != false
      map.events.each{|k,v|
      next if v == nil
      v.pages.each_index{|p|
      next if v.pages[p] == nil
      v.pages[p].list.each_index{|c|
      next if v.pages[p].list[c] == nil
      if input?(v.pages[p].list[c])
      v.pages[p].list[c].parameters.each_index{|s|
      n = ld_text(v.pages[p].list[c].parameters,kind2,"#envent","#{id}")
      map.events[k].pages[p].list[c].parameters = n if n != false
      }
      
      end
      }
      }
      }
      return map
    end
    def self.input?(i)
      a = [401]
      return a.include?(i.code)
    end

  end
  class Game_Map
    alias ld_setup setup
    def setup(map_id)
      ld_setup(map_id)
      @map_id = map_id
      @map = DataManager.load_map(map_id) unless @map_id == Region_Effects::SPAWN_MAP_ID
      @tileset_id = @map.tileset_id
      @display_x = 0
      @display_y = 0
      referesh_vehicles
      setup_events
      setup_scroll
      setup_parallax
      setup_battleback
      @need_refresh = false
    end
  end
  
  
end[/pre]
于是写了这个
如果从制作者的角度考虑,其实还有点用
梦石
0
星屑
14555
在线时间
22062 小时
注册时间
2010-10-24
回帖
302
发表于 2020-11-15 01:15:25 | 显示全部楼层
这个 好像很有意思 谢谢
噫
回复

使用道具 举报

梦石
2
星屑
6767
在线时间
501 小时
注册时间
2018-3-23
回帖
487

R考场第七期银奖

发表于 2020-11-15 10:28:59 | 显示全部楼层
然而我的游戏只使用脚本不使用数据库……?
祝好。
回复

使用道具 举报

梦石
0
星屑
29901
在线时间
5734 小时
注册时间
2016-3-8
回帖
1653
发表于 2020-11-15 10:44:00 | 显示全部楼层
然而不是导出成csv能用excel编辑后再导入
txt简直杂乱无章

点评

我是参考着某个独立游戏的格式制作的 大概notepad会有办法吧  发表于 2020-11-15 11:02
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部