Project1

标题: 字体转换脚本的问题 [打印本页]

作者: 迅雷進    时间: 2009-5-7 17:24
标题: 字体转换脚本的问题
很早以前小弟曾经求过一个字体转换脚本的问题,
随后也解决了,
但是问题又来了,
以下是当年的脚本:
  1. module Conv
  2. def self.c(str)
  3.   
  4.   m2w = Win32API.new("kernel32","MultiByteToWideChar",'ilpipi','i')
  5.   w2m = Win32API.new("kernel32","WideCharToMultiByte",'ilpipipp','i')
  6.   lcms = Win32API.new("kernel32","LCMapString",'llpipi','i')

  7.   len = m2w.call(65001,0,str,-1,nil,0)
  8.   buf = "\0"*(len*2)

  9.   m2w.call(65001,0,str,-1,buf,len)

  10.   len = w2m.call(0,0,buf,-1,nil,0,nil,nil)
  11.   ret = "\0"*len

  12.   w2m.call(0,0,buf,-1,ret,len,nil,nil)

  13.   len = m2w.call(936,0,ret,-1,nil,0)
  14.   buf01 = "\0"*(len*2+1)
  15.   lcms.call(0x0804,0x04000000,ret,-1,buf01,len*2)
  16.   
  17.   len = m2w.call(0,0,buf01,-1,nil,0)
  18.   buf = "\0" * (len*2)
  19.   m2w.call(0,0,buf01,-1,buf,len)

  20.   len = w2m.call(65001,0,buf,-1,nil,0,nil,nil)
  21.   ret = "\0" * (len-1)
  22.   w2m.call(65001,0,buf,-1,ret,len-1,nil,nil)
  23.   
  24.   return ret
  25. end

  26. end
  27. $t = false
  28. class Bitmap
  29. unless $I_LOVE_RMXP_6RWORDCONV
  30.    alias dx draw_text
  31.    def draw_text(p1, p2, p3 = 0, p4 = 3, p5 = nil, p6 = 0)
  32.      case p1
  33.      when Rect
  34.        str = Conv.c(p2)
  35.      $t ? dx(p1, str, p3) : dx(p1, p2, p3)
  36.      else
  37.        str = Conv.c(p5)
  38.      $t ? dx(p1, p2, p3, p4, str, p6) : dx(p1, p2, p3, p4, p5, p6)  
  39.      end
  40.    end
  41.    $I_LOVE_RMXP_6RWORDCONV = true
  42. end
  43. end
复制代码

当字体转换成繁体以后,
然后就储存游戏,
但是读取游戏后字体又还原了简体,
请问要怎样做才能够让玩家选择了他们要的字体过后然后储存游戏,
等下次再读取游戏之后还是用回他们所选的字体呢?
请前辈们指教~ {/hx} {/hx} {/gg} {/gg} [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 紫苏    时间: 2009-5-7 18:00
这个脚本直接重写了 Bitmap 的 draw_text 方法,把原来的简体字符串映射到了繁体,理论上就算重新读档也不会再次变回简体啊~
我测试了下也没有出现迅兄说的情况诶……
作者: 迅雷進    时间: 2009-5-7 18:27
以下引用紫苏于2009-5-7 10:00:35的发言:

这个脚本直接重写了 Bitmap 的 draw_text 方法,把原来的简体字符串映射到了繁体,理论上就算重新读档也不会再次变回简体啊~
我测试了下也没有出现迅兄说的情况诶……
这是小弟的简繁工程,
请前辈过目过目~ {/gg} {/gg}

>>> ttp://jinraixin.com/entertainment/Download/Project11.rar

作者: 紫苏    时间: 2009-5-7 18:41
哦~原来是在事件中动态更改……
那可以把 $1 这个变量保存到存档文件中,读取时再读回来就行了:
unless $PRAGMA_ONCE

class Scene_Save < Scene_File
  #--------------------------------------------------------------------------
  # ● 写入存档数据
  #     file : 写入用文件对像 (已经打开)
  #--------------------------------------------------------------------------
  alias write_save_data_old write_save_data if
    !method_defined? :write_save_data_old
  def write_save_data(file)
     write_save_data_old(file)
     Marshal.dump($t, file)
  end
end

class Scene_Load < Scene_File
  alias read_save_data_old read_save_data if
    !method_defined? :read_save_data_old
  #--------------------------------------------------------------------------
  # ● 读取存档数据
  #     file : 读取用文件对像 (已经打开)
  #--------------------------------------------------------------------------
  def read_save_data(file)
    read_save_data_old(file)
    $t = Marshal.load(file)
  end
end

$PRAGMA_ONCE = 1
end

作者: 迅雷進    时间: 2009-5-7 18:54
此脚本该加在哪里呢?
作者: 紫苏    时间: 2009-5-7 18:55
以下引用迅雷進于2009-5-7 10:54:24的发言:

此脚本该加在哪里呢?

Main 之前,简体转换繁体脚本之后……
作者: 迅雷進    时间: 2009-5-7 19:11
第25行出现 EOFError
End of file reached...
作者: 紫苏    时间: 2009-5-7 19:12
以下引用迅雷進于2009-5-7 11:11:11的发言:

第25行出现 EOFError
End of file reached...

先把以前的存档删了……因为之前的存档没保存 $1
作者: 迅雷進    时间: 2009-5-7 19:18
建新了新的存档同样还是有问题的说… {/dk} {/dk}
要劳烦前辈看看了。
作者: 紫苏    时间: 2009-5-7 19:24
你看看这个工程吧,我反复测试了下也没有发现问题{/gg}
http://rpg.blue/upload_program/d/紫苏_Project11_122124234.rar
作者: 迅雷進    时间: 2009-5-7 19:41
以下引用紫苏于2009-5-7 11:24:28的发言:
你看看这个工程吧,我反复测试了下也没有发现问题
前辈,
可能是小弟RPWT,
还是一样有 Error 的说。
前辈有没有试过储存过后就马上关掉游戏,
然后再运行游戏读取存档呢?
作者: 紫苏    时间: 2009-5-7 19:57
以下引用迅雷進于2009-5-7 11:41:23的发言:

前辈,
可能是小弟RPWT,
还是一样有 Error 的说。
前辈有没有试过储存过后就马上关掉游戏,
然后再运行游戏读取存档呢?

嗯~试过……诡异了,你试过直接读取我工程里面带的那两个存档么?
作者: 紫苏    时间: 2009-5-7 20:07
重新下载解压一次吧,顺便贴一下你看到的工程中两个存档文件的大小(字节)和修改日期~
作者: 迅雷進    时间: 2009-5-7 20:24
储存1(小弟的):30.1KB
修改日期    :2009年5月7号12:20
储存2(前辈的):30.2KB
修改日期    :2009年5月7号11:37
储存3(前辈的):30.1KB
修改日期    :2009年5月6号23:22
作者: 紫苏    时间: 2009-5-7 21:01
save2 和 save3 大小应该是一样的,都是 30918 个字节啊~
能否上传一个你存的存档文件?

实在不行的话试试这个吧,很累赘,每个存档又额外分配一个文件来存 $t ……
unless $PRAGMA_ONCE

class Scene_Save < Scene_File
  #--------------------------------------------------------------------------
  # ● 写入存档数据
  #     file : 写入用文件对像 (已经打开)
  #--------------------------------------------------------------------------
  alias write_save_data_old write_save_data if
    !method_defined? :write_save_data_old
  def write_save_data(file)
    write_save_data_old(file)
    File.open(File.basename(file.path) + ".rxdata", "w") {
      |fout|  Marshal.dump($t, fout)
    }

  end
end

class Scene_Load < Scene_File
  alias read_save_data_old read_save_data if
    !method_defined? :read_save_data_old
  #--------------------------------------------------------------------------
  # ● 读取存档数据
  #     file : 读取用文件对像 (已经打开)
  #--------------------------------------------------------------------------
  def read_save_data(file)
    read_save_data_old(file)
    File.open(File.basename(file.path) + ".rxdata", "r") {
      |fin|  $t = Marshal.load(fin)
    }

  end
end

$PRAGMA_ONCE = 1
end
[LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: 迅雷進    时间: 2009-5-7 21:17
哦哦哦!
这次就可以了~
作者: 迅雷進    时间: 2009-6-12 08:00
有试过,
也是一样出 Error,
然后自己再存档一次,
结果还是一样… {/ll} {/ll}
怎么办?




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1