幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3769|回复: 11

[RMVX] 我想在对话时搞显示一个“姓名”方框

[复制链接]

3

主题

10

帖子

132

积分

③业余

积分
132
发表于 2006-9-23 22:16:51 | 显示全部楼层 |阅读模式
我想在对话时搞显示一个“姓名”方框,表示说话人姓名,下面另一个框是文章的内容,可我
输了\name[xxx]:去没能显示一个“xxx”方框,相应的脚本我也打上去了,可就是没用,怎么回
事啊,不知道那里弄错了.
我明天在来看你们的答案 [s:3]表删贴这么快啊! [s:6]
回复

使用道具 举报

255

主题

7092

帖子

330

积分

版主

人类总是重复同样的悲

Rank: 7Rank: 7Rank: 7

积分
330
QQ
发表于 2006-9-23 22:28:56 | 显示全部楼层
这个需要那个对话框加强脚本。
去chaochao的站上吧。
我是化可能为不可能的男人!
回复 支持 反对

使用道具 举报

3

主题

10

帖子

132

积分

③业余

积分
132
 楼主| 发表于 2006-9-23 22:37:20 | 显示全部楼层
什么意思 [s:3]
回复 支持 反对

使用道具 举报

91

主题

3188

帖子

83986万

积分

荣誉群

传说中的Bunny大神~!

积分
839861514
QQ
发表于 2006-9-23 22:46:54 | 显示全部楼层
没用过那个脚本,所以也不太清楚(我没删贴啊。。。)。

不过用得着这样么,显示对话的时候搞成:
XXX(角色名):
^%&&*(&*_)_*()&&%&^%*&(*Y&*&*^*
^%&*^*&)(*&*)()%##@$%^*()UI(OI)(_
^%^&&*((()(*(*_()()(_)_+。(三行废话)

或者说如果角色有头像的话,直接把名字显示在头像边上(用PS改图)。。。
其他所有的Bunny神都素我的部下XD~ 小教程范例收集 Orz感谢邪恶萝卜联盟!!!(原因自己去猜)
回复 支持 反对

使用道具 举报

30

主题

196

帖子

1977

积分

⑥精研

积分
1977
发表于 2006-9-24 02:18:49 | 显示全部楼层
这个用对话加强脚本就可以……我手头倒是有这个,但不知道能不能贴这里的说……
回复 支持 反对

使用道具 举报

1

主题

5

帖子

57

积分

②入门

积分
57
发表于 2006-9-24 10:17:28 | 显示全部楼层
那个脚本好象要先把开关33和34打开吧.. [s:2]
回复 支持 反对

使用道具 举报

161

主题

2733

帖子

126万

积分

⑧专业

黄金会员卡,一秒卡一

积分
1266043
QQ
发表于 2006-9-24 12:31:28 | 显示全部楼层
引用第1楼霜之哀伤2006-09-23 22:28发表的“”:
这个需要那个对话框加强脚本。
去chaochao的站上吧。

好像进不了 [s:5]
回复 支持 反对

使用道具 举报

2

主题

10

帖子

123

积分

③业余

积分
123
发表于 2006-9-25 09:47:29 | 显示全部楼层
用fuki脚本吧,不过那个脚本有点小问题。
回复 支持 反对

使用道具 举报

3

主题

41

帖子

955

积分

⑤进阶

独孤剑

积分
955
发表于 2006-9-26 20:47:42 | 显示全部楼层

[转帖]这就是FUKI的脚本,使用请注明出处!

效果类似于漫画上的人物对话,有个小箭头指向这个人,

箭头后面的框框里面显示文字。

该脚本日文叫Message(メッセージ) FuKiDaSi(吹出し),

汉化意译成“呼出对话框”(又称Fuki)。





使用方法
复制全部脚本内容,在Main脚本之前按insert,插入此脚本全部内容。
  1. #    ●准备工作-窗口Skin
  2. #
  3. #    首先,确认自己使用的对话框窗口Skin,(数据库-系统-窗口外观图形)
  4. #    然后根据该窗口Skin制作对话框尾部使用的两个箭头图形
  5. #    尾部箭头图形命名方式:“窗口skin名-top”,“窗口skin名-under”
  6. #    将该图形文件存放在“Graphics/Windowskins”文件夹下。
  7. #
  8. #    本演示游戏内置2套窗口和箭头图形,
  9. #    一套是游戏默认的“001-Blue01”,一套是定制的“fk”
  10. #    玩家可以根据自己的需要参照样本定制自己的呼出对话框窗口Skin。
  11. #
  12. #    ●呼出对话框使用方法
  13. #
  14. #    在事件命令行使用[脚本]将事件ID代入[$mes_id]
  15. #    该事件就可以使用呼出对话框了。
  16. #   (举例:$mes_id=4)
  17. #
  18. #    ID 代入 -1 表示玩家,代入 0 表示事件自身。
  19. #    代入 nil 或者 "" 则返回成通常的信息窗口。
  20. #    对话框的表示位置可以通过事件的“更改文章选项”来设定(上、中、下)。
  21. #    表示位置为“中央”的话,不管事件位置在哪里,对话框都将显示在画面中央。
  22. #
  23. #    ●角色名字窗口的使用文字的方法
  24. #
  25. #    在事件命令行使用[脚本]将文字列代入[$mes_name]
  26. #    对话框就会显示角色名字窗口
  27. #   (举例:$mes_name="阿尔西斯")
  28. #    代入 nil 或者 "" 则不显示角色名字窗口。
  29. #
  30. #    以上两个机能是独立的,所以可以单独使用
  31. #
  32. #   $mes_id=(ID) + $mes_name="名字"  :呼出对话框显示 + 角色名字窗口
  33. #   $mes_id=(ID) + $mes_name=""      :呼出对话框显示(没有角色名字)
  34. #   $mes_id=nil  + $mes_name="名字"  :默认信息窗口 + 角色名字窗口
  35. #   $mes_id=nil  + $mes_name=""      :默认信息窗口(没有角色名字)
  36. #
  37. #    ●角色名字窗口使用角色图片的方法(汉化特别追加功能,原脚本只能使用文字)
  38. #   
  39. #    如果能在对应文件夹中找到文件名和角色名字相同的图片,   
  40. #    则角色名字窗口显示角色头像图片,角色图片最好能包括角色的名字。
  41. #    默认头像图片保存目录为“Graphics/Heads/”,玩家可自行修改。
  42. #
  43. #    如果不想使用角色名字直接作为头像文件名。
  44. #    可以使用下面在 Game_Temp 类里增加的namebmp属性。
  45. #    重新设定角色名字与文件名的对应关系。
  46. #
  47. #    ●信息表示速度的变更方法
  48. #
  49. #    在事件命令行使用[脚本]将数值代入[$mes_speed]
  50. #    速度为 0 即瞬间显示全部信息,数字越大,信息表示速度越慢。
  51. #   (举例:$mes_speed=1)
  52. #
  53. #    ●其他设置
  54. #
  55. #    请参照注释
  56. 其它
  57. 补一句,用脚本chat(id,"名字")就相当于
  58. $mes_id=ID
  59. $mes_name="名字"
  60. 注意:
  61. 该脚本修改了Scene_Map的main方法,并且替代了Window_Message,所以可能会带来冲突。
  62. 工程附带了2套窗口背景(Graphics/Windowskins下)
  63. 001-Blue01-top_b.png和001-Blue01-under_b.png是半透明窗口用尾部图标。(用的时候去掉_b)
  64. 该脚本可自定义文字,颜色,头像图片目录,是否使用尾部图标等,具体请参看注释。
  65.   
  66. --------------------------------------------------------------------------------
  67.   
  68.    脚本内容
  69. #
  70. #    呼出对话框 ver. 1.31 By パラ犬(日)
  71. #  来自 [url]http://rpg.para.s3p.net/[/url]
  72. #
  73. #  汉化修改 ***** bbschat(2006.1.5)
  74. #    来自
  75. #
  76. #    ●准备工作-窗口Skin
  77. #
  78. #    首先,确认自己使用的对话框窗口Skin,(数据库-系统-窗口外观图形)
  79. #    然后根据该窗口Skin制作对话框尾部使用的两个箭头图形
  80. #    尾部箭头图形命名方式:“窗口skin名-top”,“窗口skin名-under”
  81. #    将该图形文件存放在“Graphics/Windowskins”文件夹下。
  82. #
  83. #    本演示游戏内置2套窗口和箭头图形,
  84. #    一套是游戏默认的“001-Blue01”,一套是定制的“fk”
  85. #    玩家可以根据自己的需要参照样本定制自己的呼出对话框窗口Skin。
  86. #
  87. #    ●呼出对话框使用方法
  88. #
  89. #    在事件命令行使用[脚本]将事件ID代入[$mes_id]
  90. #    该事件就可以使用呼出对话框了。
  91. #   (举例:$mes_id=4)
  92. #
  93. #    ID 代入 -1 表示玩家,代入 0 表示事件自身。
  94. #    代入 nil 或者 "" 则返回成通常的信息窗口。
  95. #    对话框的表示位置可以通过事件的“更改文章选项”来设定(上、中、下)。
  96. #    表示位置为“中央”的话,不管事件位置在哪里,对话框都将显示在画面中央。
  97. #
  98. #    ●角色名字窗口的使用文字的方法
  99. #
  100. #    在事件命令行使用[脚本]将文字列代入[$mes_name]
  101. #    对话框就会显示角色名字窗口
  102. #   (举例:$mes_name="阿尔西斯")
  103. #    代入 nil 或者 "" 则不显示角色名字窗口。
  104. #
  105. #    以上两个机能是独立的,所以可以单独使用
  106. #
  107. #   $mes_id=(ID) + $mes_name="名字"  :呼出对话框显示 + 角色名字窗口
  108. #   $mes_id=(ID) + $mes_name=""      :呼出对话框显示(没有角色名字)
  109. #   $mes_id=nil  + $mes_name="名字"  :默认信息窗口 + 角色名字窗口
  110. #   $mes_id=nil  + $mes_name=""      :默认信息窗口(没有角色名字)
  111. #
  112. #    ●角色名字窗口使用角色图片的方法(汉化特别追加功能,原脚本只能使用文字)
  113. #   
  114. #    如果能在对应文件夹中找到文件名和角色名字相同的图片,   
  115. #    则角色名字窗口显示角色头像图片,角色图片最好能包括角色的名字。
  116. #    默认头像图片保存目录为“Graphics/Heads/”,玩家可自行修改。
  117. #
  118. #    如果不想使用角色名字直接作为头像文件名。
  119. #    可以使用下面在 Game_Temp 类里增加的namebmp属性。
  120. #    重新设定角色名字与文件名的对应关系。
  121. #
  122. #    ●信息表示速度的变更方法
  123. #
  124. #    在事件命令行使用[脚本]将数值代入[$mes_speed]
  125. #    速度为 0 即瞬间显示全部信息,数字越大,信息表示速度越慢。
  126. #   (举例:$mes_speed=1)
  127. #
  128. #    ●其他设置
  129. #
  130. #    请参照下面的注释
  131. #
  132. #    补一句,用脚本chat(id,"名字")就相当于$mes_id=ID;$mes_name="名字"
  133. #==============================================================================
  134. module FUKI
  135. # 头像图片保存目录的设定
  136. HEAD_PIC_DIR = "Graphics/Heads/"
  137. # 是否显示尾部图标
  138. TAIL_SHOW = true
  139. # Skin的设定
  140. # 使用数据库默认窗口Skin情况下这里使用[""]
  141. FUKI_SKIN_NAME = "001-Blue01"   # 呼出对话框用Skin
  142. NAME_SKIN_NAME = "001-Blue01"   # 角色名字窗口用Skin
  143. # 字体大小
  144. MES_FONT_SIZE = 22    # 呼出对话框
  145. NAME_FONT_SIZE = 14   # 角色名字窗口
  146. # 字体颜色
  147. #(设定为 Color.new(0, 0, 0, 0) 表示使用普通文字色)
  148. FUKI_COLOR = Color.new(255, 255, 255, 255)  # 呼出对话框
  149. NAME_COLOR = Color.new(255, 255, 255, 255)  # 角色名字窗口
  150. # 窗口透明度
  151. # 如修改窗口透明度请同时修改尾部箭头图形内部的透明度
  152. FUKI_OPACITY = 255    # 呼出对话框
  153. MES_OPACITY = 255     # 默认信息窗口
  154. NAME_OPACITY = 255    # 角色名字窗口
  155. # 角色名字窗口的相对位置
  156. NAME_SHIFT_X = 0      # 横坐标
  157. NAME_SHIFT_Y = 16     # 纵坐标
  158. # 窗口表示时是否根据画面大小自动检查窗口出现的位置,
  159. # 自动改变位置( true / false )
  160. # 设置成 true 可能出现箭头图标颠倒的问题 <- bbschat
  161. POS_FIX = false
  162. # 在画面最边缘表示时的稍微挪动
  163. # 使用圆形Skin的角和方框的角重合的情况下为 true
  164. CORNER_SHIFT = false
  165. SHIFT_PIXEL = 4   # true 时挪动的象素
  166. # 角色高度尺寸
  167. CHARACTOR_HEIGHT = 48
  168. # 呼出对话框的相对位置(纵坐标)
  169. POP_SHIFT_TOP = 0         # 表示位置为上的时候
  170. POP_SHIFT_UNDER = 0       # 表示位置为下的时候
  171. # 信息的表示速度(数字越小速度越快,0为瞬间表示)
  172. # 游戏中 可随时用数字代入 $mes_speed 来改变消息表示速度。
  173. MES_SPEED = 1
  174. end
  175. #==============================================================================
  176. # 方便用户同时设置2个常用参数而使用的函数
  177. #==============================================================================
  178. def chat(id = 0,name = "")
  179. $mes_id = id
  180. $mes_name = name
  181. end
  182. #==============================================================================
  183. # □ Game_Temp
  184. #==============================================================================
  185. class Game_Temp
  186. attr_accessor  :namebmp              #保存头像图片的Hash表
  187. alias initialize_fuki initialize
  188. def initialize
  189.    initialize_fuki
  190.    # 如果不想使用角色名字直接作为头像文件名
  191.    # 可在这里重新设定角色名字与文件名的对应关系
  192.    @namebmp ={"玩家"=>"001-Player-Face", "维斯特"=>"002-Player-Face"}
  193. end
  194. end
  195. #==============================================================================
  196. # □ Window_FukiMessage
  197. #==============================================================================
  198. class Window_FukiMessage < Window_Selectable
  199. #--------------------------------------------------------------------------
  200. # ● 初始化状态
  201. #--------------------------------------------------------------------------
  202. def initialize
  203.    super(80, 304, 480, 160)
  204.    self.contents = Bitmap.new(width - 32, height - 32)
  205.    self.visible = false
  206.    self.z = 9998
  207.    @fade_in = false
  208.    @fade_out = false
  209.    @contents_showing = false
  210.    @cursor_width = 0
  211.    self.active = false
  212.    self.index = -1
  213.    @w = 0
  214.    @h = 0
  215.    @wait = 0
  216.    @dx = 0
  217.    @dy = 0
  218.    $mes_speed = FUKI::MES_SPEED
  219. end
  220. #--------------------------------------------------------------------------
  221. # ○ 决定窗口尺寸并生成窗口
  222. #--------------------------------------------------------------------------
  223. def refresh_create
  224.    self.contents.clear
  225.    self.contents.font.color = normal_color
  226.    self.contents.font.size = FUKI::MES_FONT_SIZE
  227.    # 取得窗口尺寸
  228.    get_windowsize
  229.    w = @w + 32 + 8
  230.    h = @h * (self.contents.font.size + 10) + 26
  231.    # 生成呼出窗口
  232.    set_fukidasi(self.x, self.y, w, h)
  233.    # 生成角色名字窗口
  234.    set_namewindow
  235.    # 初始化信息表示使用的变量
  236.    @dx = @dy = 0
  237.    @cursor_width = 0
  238.    @contents_drawing = true
  239.    # 瞬间表示的情况下
  240.    if $mes_speed == 0
  241.      # 循环信息描绘处理
  242.      while $game_temp.message_text != ""
  243.        draw_massage
  244.      end
  245.      draw_opt_text
  246.      @contents_showing_end = true
  247.      @contents_drawing = false
  248.    else
  249.      # 一个一个描绘文字
  250.      refresh_drawtext
  251.    end
  252. end
  253. #--------------------------------------------------------------------------
  254. # ○ 一个一个描绘文字
  255. #--------------------------------------------------------------------------
  256. def refresh_drawtext
  257.    if $game_temp.message_text != nil
  258.      if @wait > 0
  259.        @wait -= 1
  260.      elsif @wait == 0
  261.        # 描绘处理
  262.        draw_massage
  263.        @wait = $mes_speed
  264.      end
  265.    end
  266.    # 描绘结束
  267.    if $game_temp.message_text == ""
  268.      draw_opt_text
  269.      @contents_showing_end = true
  270.      @contents_drawing = false
  271.    end
  272. end
  273. #--------------------------------------------------------------------------
  274. # ○ 取得窗口尺寸
  275. #--------------------------------------------------------------------------
  276. def get_windowsize
  277.    x = y = 0
  278.    @h = @w = 0
  279.    @cursor_width = 0
  280.    # 有选择项的话,处理字的缩进
  281.    if $game_temp.choice_start == 0
  282.      x = 16
  283.    end
  284.    # 有等待显示的文字的情况下
  285.    if $game_temp.message_text != nil
  286.    text = $game_temp.message_text.clone
  287.      # 限制文字处理
  288.      begin
  289.        last_text = text.clone
  290.        text.gsub!(/\\\\[Vv]\\[([0-9]+)\\]/) { $game_variables[$1.to_i] }
  291.      end until text == last_text
  292.      text.gsub!(/\\\\[Nn]\\[([0-9]+)\\]/) do
  293.        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  294.      end
  295.      # 为了方便、将 "\\\\\\\\" 变换为 "\\000"
  296.      text.gsub!(/\\\\\\\\/) { "\\000" }
  297.      # "\\\\C" 变为 "\\001" 、"\\\\G" 变为 "\\002"
  298.      text.gsub!(/\\\\[Cc]\\[([0-9]+)\\]/) { "\\001" }
  299.      text.gsub!(/\\\\[Gg]/) { "\\002" }
  300.      # c 获取 1 个字 (如果不能取得文字就循环)
  301.      while ((c = text.slice!(/./m)) != nil)
  302.        # \\\\ 的情况下
  303.        if c == "\\000"
  304.          # 还原为本来的文字
  305.          c = "\\\\"
  306.        end
  307.        # \\C[n] 或者 \\G 的情况下
  308.        if c == "\\001" or c == "\\002"
  309.          # 下面的文字
  310.          next
  311.        end
  312.        # 另起一行文字的情况下
  313.        if c == "\\n"
  314.          # y 累加 1
  315.          y += 1
  316.          # 取得纵横尺寸
  317.          @h = y
  318.          @w = x > @w ? x : @w
  319.          if y >= $game_temp.choice_start
  320.            @w = x + 8 > @w ? x + 8 : @w
  321.          end
  322.          x = 0
  323.          # 移动到选择项的下一行
  324.          if y >= $game_temp.choice_start
  325.            x = 8
  326.          end
  327.          # 下面的文字
  328.          next
  329.        end
  330.        # x 为要描绘文字的宽度加法运算
  331.        x += self.contents.text_size(c).width
  332.      end
  333.    end
  334.    # 输入数值的情况
  335.    if $game_temp.num_input_variable_id > 0
  336.      digits_max = $game_temp.num_input_digits_max
  337.      number = $game_variables[$game_temp.num_input_variable_id]
  338.      @h += 1
  339.      x = digits_max * self.contents.font.size + 16
  340.      @w = x > @w ? x : @w
  341.    end
  342. end
  343. #--------------------------------------------------------------------------
  344. # ○ 描绘信息处理
  345. #--------------------------------------------------------------------------
  346. def draw_massage
  347.    # 有等待显示的文字的情况下
  348.    if $game_temp.message_text != nil
  349.      text = $game_temp.message_text
  350.      # 限制文字处理
  351.      begin
  352.        last_text = text.clone
  353.        text.gsub!(/\\\\[Vv]\\[([0-9]+)\\]/) { $game_variables[$1.to_i] }
  354.      end until text == last_text
  355.      text.gsub!(/\\\\[Nn]\\[([0-9]+)\\]/) do
  356.        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  357.      end
  358.      # 为了方便、将 "\\\\\\\\" 变换为 "\\000"
  359.      text.gsub!(/\\\\\\\\/) { "\\000" }
  360.      # "\\\\C" 变为 "\\001"、"\\\\G" 变为 "\\002"
  361.      text.gsub!(/\\\\[Cc]\\[([0-9]+)\\]/) { "\\001[#{$1}]" }
  362.      text.gsub!(/\\\\[Gg]/) { "\\002" }
  363.      # c 获取 1 个字
  364.      if ((c = text.slice!(/./m)) != nil)
  365.        # 选择项的情况
  366.        if @dy >= $game_temp.choice_start
  367.          # 处理字的缩进
  368.          @dx = 8
  369.          # 描绘文字
  370.          self.contents.draw_text(4 + @dx, 32 * @dy, 40, 32, c)
  371.          # x 为要描绘文字宽度的加法运算
  372.          @dx += self.contents.text_size(c).width
  373.          # 循环
  374.          while ((c = text.slice!(/./m)) != "\\n")
  375.            # 描绘文字
  376.            self.contents.draw_text(4 + @dx, 32 * @dy, 40, 32, c)
  377.            # x 为要描绘文字宽度的加法运算
  378.            @dx += self.contents.text_size(c).width
  379.          end
  380.          if c == "\\n"
  381.            # 更新光标宽度
  382.            @cursor_width = [@cursor_width, @dx].max
  383.            # dy 累加 1
  384.            @dy += 1
  385.            @dx = 0
  386.          end
  387.          return
  388.        end
  389.        # \\\\ 的情况下
  390.        if c == "\\000"
  391.          # 还原为本来的文字
  392.          c = "\\\\"
  393.        end
  394.        #\\C[n] 的情况下
  395.        if c == "\\001"
  396.          # 更改文字色
  397.          text.sub!(/\\[([0-9]+)\\]/, "")
  398.          color = $1.to_i
  399.          if color >= 0 and color <= 7
  400.            self.contents.font.color = text_color(color)
  401.          end
  402.        end
  403.        # \\G 的情况下
  404.        if c == "\\002"
  405.          # 生成金钱窗口
  406.          if @gold_window == nil
  407.            @gold_window = Window_Gold.new
  408.            @gold_window.x = 560 - @gold_window.width
  409.            if $game_temp.in_battle
  410.              @gold_window.y = 192
  411.            else
  412.              @gold_window.y = self.y >= 128 ? 32 : 384
  413.            end
  414.            @gold_window.opacity = self.opacity
  415.            @gold_window.back_opacity = self.back_opacity
  416.          end
  417.        end
  418.        # 另起一行文字的情况下
  419.        if c == "\\n"
  420.          # dy 累加 1
  421.          @dy += 1
  422.          @dx = 0
  423.        end
  424.        # 描绘文字
  425.        self.contents.font.size = FUKI::MES_FONT_SIZE
  426.        font_size = self.contents.font.size
  427.        self.contents.draw_text(4+@dx, (font_size+10)*@dy, font_size, font_size, c)
  428.        # dx 为要描绘文字的宽度加法运算
  429.        @dx += self.contents.text_size(c).width
  430.      end
  431.    end
  432. end
  433. #--------------------------------------------------------------------------
  434. # ○ 选择项和输入数值的情况下
  435. #--------------------------------------------------------------------------
  436. def draw_opt_text
  437.    # 选择项的情况下
  438.    if $game_temp.choice_max > 0
  439.      @item_max = $game_temp.choice_max
  440.      self.active = true
  441.      self.index = 0
  442.    end
  443.    # 输入数值的情况下
  444.    if $game_temp.num_input_variable_id > 0
  445.      digits_max = $game_temp.num_input_digits_max
  446.      number = $game_variables[$game_temp.num_input_variable_id]
  447.      @input_number_window = Window_InputNumber.new(digits_max)
  448.      @input_number_window.number = number
  449.      @input_number_window.x = self.x + 8
  450.      @input_number_window.y = self.y + $game_temp.num_input_start * 32
  451.    end
  452. end
  453. #--------------------------------------------------------------------------
  454. # ○ 设置呼出对话框
  455. #--------------------------------------------------------------------------
  456. def set_fukidasi(x, y, width, height)
  457.    # $mes_id 为空的时候,不显示呼出对话框
  458.    if $mes_id == nil or $mes_id == ""
  459.      del_fukidasi
  460.      reset_window
  461.    else
  462.      # 不显示暂停标志
  463.      self.pause = false
  464.      # 取得对话框位置
  465.      pos = get_fuki_pos(width, height)
  466.      x = pos[0]
  467.      y = pos[1]
  468.      skin = FUKI::FUKI_SKIN_NAME != "" ? FUKI::FUKI_SKIN_NAME : $game_system.windowskin_name
  469.      # 生成呼出对话框
  470.      self.windowskin = RPG::Cache.windowskin(skin)
  471.      self.x = x
  472.      self.y = y
  473.      self.height = height
  474.      self.width = width
  475.      self.contents.dispose
  476.      self.contents = Bitmap.new(width - 32, height - 32)
  477.      self.back_opacity = FUKI::FUKI_OPACITY
  478.      self.contents.clear
  479.      self.contents.font.color = normal_color
  480.      self.contents.font.size = FUKI::MES_FONT_SIZE
  481.      # 描绘尾部图标
  482.      if $game_system.message_frame == 0
  483.        # 取得位置
  484.        tale_pos = get_tale_pos
  485.        @tale = Sprite.new
  486.        # 是否显示尾部图标 <- bbschat
  487.        if FUKI::TAIL_SHOW == true
  488.          case @message_position
  489.            when 0  # 上
  490.              @tale.bitmap = RPG::Cache.windowskin(skin + "-top")
  491.              @tale.x = tale_pos[0]
  492.              @tale.y = tale_pos[1]
  493.              @tale.z = self.z + 1
  494.            when 1  # 中
  495.              @tale.dispose
  496.              @tale = nil
  497.            when 2  # 下
  498.              @tale.bitmap = RPG::Cache.windowskin(skin + "-under")
  499.              @tale.x = tale_pos[0]
  500.              @tale.y = tale_pos[1]
  501.              @tale.z = self.z + 1
  502.          end
  503.        end
  504.      end
  505.    end
  506. end
  507. #--------------------------------------------------------------------------
  508. # ○ 计算呼出对话框的位置
  509. #--------------------------------------------------------------------------
  510. def get_fuki_pos(width, height)
  511.    
  512.    # 取得角色
  513.    @character = get_character($mes_id)
  514.    if @character == nil
  515.      # 角色不存在的情况下使用默认信息框
  516.      del_fukidasi
  517.      reset_window
  518.      return
  519.    end
  520.    # 处理坐标
  521.    x = ( @character.real_x - $game_map.display_x + 64 ) * 32 / 128 - (width / 2)
  522.    # 为尽量显示在画面内而移动横坐标
  523.    if x + width > 640
  524.      x = 640 - width
  525.    elsif x < 0
  526.      x = 0
  527.    end
  528.    # 决定窗口位置
  529.    case $game_system.message_position
  530.      when 0  # 上
  531.        y = (@character.real_y - $game_map.display_y + 64) * 32 / 128 - height - FUKI::CHARACTOR_HEIGHT + FUKI::POP_SHIFT_TOP
  532.      when 1  # 中
  533.        y = (480 - height) / 2
  534.        x = (640 - width) / 2
  535.      when 2  # 下
  536.        y =  (@character.real_y - $game_map.display_y + 64) * 32 / 128 + 32 + FUKI::POP_SHIFT_UNDER
  537.    end
  538.    # 纪录文章显示位置
  539.    @message_position = $game_system.message_position
  540.    # 如果选择自动修正,则如果文章会显示到画面外则自动改变窗口的尺寸(高度)
  541.    if FUKI::POS_FIX
  542.      case @message_position
  543.        when 0  # 上
  544.          if y <= 0
  545.            @message_position = 2
  546.            y =  (@character.real_y - $game_map.display_y + 64) * 32 / 128 + 32 + FUKI::POP_SHIFT_UNDER
  547.          end
  548.        when 2  # 下
  549.          if y + height >= 480
  550.            p "上"
  551.            @message_position = 0
  552.            y = (@character.real_y - $game_map.display_y + 64) * 32 / 128 - height - FUKI::CHARACTOR_HEIGHT + FUKI::POP_SHIFT_TOP
  553.          end
  554.      end
  555.    end
  556.    return [x,y]
  557.    
  558. end
  559. #--------------------------------------------------------------------------
  560. # ○ 计算尾部图标的位置
  561. #--------------------------------------------------------------------------
  562. def get_tale_pos
  563.    case @message_position
  564.      when 0  # 上
  565.        # 处理坐标
  566.        x = ( @character.real_x - $game_map.display_x + 64 ) * 32 / 128 - 16
  567.        # 画面边缘的话则移动位置
  568.        if FUKI::CORNER_SHIFT
  569.          if x == 0
  570.            x = FUKI::SHIFT_PIXEL
  571.          elsif x == 640 - 32
  572.            x = 640 - 32 - FUKI::SHIFT_PIXEL
  573.          end
  574.        end
  575.        y = self.y + self.height - 16
  576.      when 1  # 中
  577.        x = nil
  578.        y = nil
  579.      when 2  # 下
  580.        # 处理坐标
  581.        x = ( @character.real_x - $game_map.display_x + 64 ) * 32 / 128 - 16
  582.        # 画面边缘的话则移动位置
  583.        if FUKI::CORNER_SHIFT
  584.          if x == 0
  585.            x = FUKI::SHIFT_PIXEL
  586.          elsif @tale.x == 640 - 32
  587.            x = 640 - 32 - FUKI::SHIFT_PIXEL
  588.          end
  589.        end
  590.        y = self.y - 16
  591.    end
  592.    return [x,y]
  593. end
  594. #--------------------------------------------------------------------------
  595. # ○ 计算名字窗口的位置
  596. #--------------------------------------------------------------------------
  597. def get_name_pos
  598.    case @face_pic_txt
  599.      when 0  # 文字
  600.        x = self.x + FUKI::NAME_SHIFT_X
  601.        y = self.y - FUKI::NAME_FONT_SIZE - 16 + FUKI::NAME_SHIFT_Y
  602.      when 1  # 图片
  603.        if self.x >= @pic_width + 5
  604.          # 默认头像显示在对话框左边
  605.          x = self.x-@pic_width-5
  606.        else
  607.          # 对话框左边放不下时头像显示在右边
  608.          x = self.x + self.width
  609.        end
  610.        y = self.y+self.height/2 - (@pic_height + 5)/2
  611.      end
  612.    return [x,y]
  613. end
  614. #--------------------------------------------------------------------------
  615. # ○ 设置角色名字窗口
  616. #--------------------------------------------------------------------------
  617. def set_namewindow
  618.    
  619.    # $mes_name为空时不显示角色名字窗口
  620.    if $mes_name == nil or $mes_name == ""
  621.      return
  622.    else
  623.      # 设定变量
  624.      mes_name = $mes_name
  625.      skin = FUKI::NAME_SKIN_NAME != "" ? FUKI::NAME_SKIN_NAME : $game_system.windowskin_name
  626.      
  627.      #判断名称是否有对应的图片"Graphics/heads/" +
  628.      if $game_temp.namebmp[mes_name] == nil then
  629.        sFile = "Graphics/heads/" + mes_name + ".png"
  630.      else
  631.        sFile = "Graphics/heads/" + $game_temp.namebmp[mes_name] + ".png"
  632.      end
  633.      
  634.      if FileTest.exist?(sFile) == true then
  635.       
  636.        @face_pic_txt = 1                       #名字窗口使用头像<- bbschat
  637.       
  638.        # 生成头像
  639.        bmp = Bitmap.new(sFile)
  640.        @pic_width = bmp.width
  641.        @pic_height = bmp.height
  642.       
  643.        if self.x >= @pic_width + 5
  644.          # 默认头像显示在对话框左边
  645.          name_x = self.x-@pic_width-5
  646.        else
  647.          # 对话框左边放不下时头像显示在右边
  648.          name_x = self.x + self.width
  649.        end
  650.        name_y = self.y+self.height/2 - (@pic_height + 5)/2
  651.       
  652.        # 生成角色头像窗口
  653.        @name_win = Window_Base.new(name_x, name_y, @pic_width + 5, @pic_height + 5)
  654.        @name_win.windowskin = RPG::Cache.windowskin(skin)
  655.        @name_win.back_opacity =0     
  656.        @name_win.z = self.z + 1
  657.       
  658.        @name_contents = Sprite.new
  659.        @name_contents.x = name_x + 2
  660.        @name_contents.y = name_y + 2
  661.        @name_contents.bitmap = bmp
  662.        #@name_contents.z = @name_win.z + 2     #这个用了似乎效果不好<- bbschat
  663.       
  664.      else
  665.       
  666.        @face_pic_txt = 0                       #名字窗口使用文字<- bbschat
  667.        # 生成名字
  668.        name_width = mes_name.size / 2 * FUKI::NAME_FONT_SIZE
  669.        name_height = FUKI::NAME_FONT_SIZE
  670.        name_x = self.x + FUKI::NAME_SHIFT_X
  671.        name_y = self.y - name_height - 16 + FUKI::NAME_SHIFT_Y
  672.        # 生成角色名字窗口(只有边框)
  673.        @name_win = Window_Base.new(name_x, name_y, name_width + 16, name_height + 16)
  674.        @name_win.windowskin = RPG::Cache.windowskin(skin)
  675.        @name_win.back_opacity = FUKI::NAME_OPACITY
  676.        @name_win.z = self.z + 1
  677.       
  678.        # 为了使空白比Windows类限定的更小使用双重结构
  679.        @name_contents = Sprite.new
  680.        @name_contents.x = name_x + 12
  681.        @name_contents.y = name_y + 8
  682.        @name_contents.bitmap = Bitmap.new(name_width, name_height)
  683.        @name_contents.z = @name_win.z + 2
  684.       
  685.        # 设定文字色
  686.        nil_color = Color.new(0,0,0,0)
  687.        if FUKI::NAME_COLOR != nil_color
  688.          @name_contents.bitmap.font.color = FUKI::NAME_COLOR
  689.        else
  690.          @name_contents.bitmap.font.color = normal_color
  691.        end
  692.        @name_contents.bitmap.font.size = FUKI::NAME_FONT_SIZE
  693.        # 调整窗口尺寸
  694.        rect = @name_contents.bitmap.text_size(mes_name)
  695.        @name_win.width = rect.width + 32
  696.        # 描画名字
  697.        @name_contents.bitmap.draw_text(rect, mes_name)
  698.      end
  699.    end
  700. end
  701. #--------------------------------------------------------------------------
  702. # ○ 释放呼出对话框和角色名字窗口
  703. #--------------------------------------------------------------------------
  704. def del_fukidasi
  705.    if @tale != nil
  706.      @tale.dispose
  707.      @tale = nil
  708.    end
  709.    if @name_win != nil
  710.      @name_win.dispose
  711.      @name_win = nil
  712.      @name_contents.dispose
  713.      @name_contents = nil
  714.    end
  715.    self.opacity = 0
  716.    self.x = 80
  717.    self.width = 480
  718.    self.height = 160
  719.    self.contents.dispose
  720.    self.contents = Bitmap.new(width - 32, height - 32)
  721.    self.pause = true
  722. end
  723. #--------------------------------------------------------------------------
  724. # ○ 取得角色
  725. #     parameter : 参数
  726. #--------------------------------------------------------------------------
  727. def get_character(parameter)
  728.    # 参数分歧
  729.    case parameter
  730.    when -1  # 玩家
  731.      return $game_player
  732.    when 0   # 该事件
  733.      events = $game_map.events
  734.      return events == nil ? nil : events[$active_event_id]
  735.    else     # 特定事件
  736.      events = $game_map.events
  737.      return events == nil ? nil : events[parameter]
  738.    end
  739. end
  740. #--------------------------------------------------------------------------
  741. # ● 设定窗口位置和不透明度
  742. #--------------------------------------------------------------------------
  743. def reset_window
  744.    if $game_temp.in_battle
  745.      self.y = 16
  746.    else
  747.      case $game_system.message_position
  748.      when 0  # 上
  749.        self.y = 16
  750.      when 1  # 中
  751.        self.y = 160
  752.      when 2  # 下
  753.        self.y = 304
  754.      end
  755.    end
  756.    if $game_system.message_frame == 0
  757.      self.opacity = 255
  758.    else
  759.      self.opacity = 0
  760.    end
  761.    self.back_opacity = FUKI::MES_OPACITY
  762. end
  763. #--------------------------------------------------------------------------
  764. # ● 刷新画面
  765. #--------------------------------------------------------------------------
  766. def update
  767.    super
  768.    # 呼出模式下跟随事件移动
  769.    if @tale != nil
  770.      pos = get_fuki_pos(self.width, self.height)
  771.      self.x = pos[0]
  772.      self.y = pos[1]
  773.      tale_pos = get_tale_pos
  774.      @tale.x = tale_pos[0]
  775.      @tale.y = tale_pos[1]
  776.      
  777.      if @name_win != nil
  778.        name_pos = get_name_pos
  779.        @name_win.x = name_pos[0]
  780.        @name_win.y = name_pos[1]
  781.        case @face_pic_txt
  782.          when 0  # 文字
  783.            @name_contents.x = @name_win.x + 12
  784.            @name_contents.y = @name_win.y + 8
  785.          when 1  # 图片
  786.            @name_contents.x = @name_win.x + 2
  787.            @name_contents.y = @name_win.y + 2
  788.          end
  789.      end
  790.    end
  791.    
  792.    # 渐变的情况下
  793.    if @fade_in
  794.      self.contents_opacity += 24
  795.      if @name_win != nil
  796.        @name_win.opacity += 24
  797.      end
  798.      if @tale != nil
  799.        @tale.opacity += 24
  800.      end
  801.      if @input_number_window != nil
  802.        @input_number_window.contents_opacity += 24
  803.      end
  804.      if self.contents_opacity == 255
  805.        @fade_in = false
  806.      end
  807.      return
  808.    end
  809.    # 显示信息中的情况下
  810.    if @contents_drawing
  811.      refresh_drawtext
  812.      return
  813.    end
  814.    # 输入数值的情况下
  815.    if @input_number_window != nil
  816.      @input_number_window.update
  817.      # 确定
  818.      if Input.trigger?(Input::C)
  819.        $game_system.se_play($data_system.decision_se)
  820.        $game_variables[$game_temp.num_input_variable_id] =
  821.          @input_number_window.number
  822.        $game_map.need_refresh = true
  823.        # 释放输入数值窗口
  824.        @input_number_window.dispose
  825.        @input_number_window = nil
  826.        terminate_message
  827.      end
  828.      return
  829.    end
  830.    # 显示信息结束的情况下
  831.    if @contents_showing_end
  832.      # 不是显示选择项且不是呼出对话模式则显示暂停标志
  833.      if $game_temp.choice_max == 0 and @tale == nil
  834.        self.pause = true
  835.      else
  836.        self.pause = false
  837.      end
  838.      # 取消
  839.      if Input.trigger?(Input::B)
  840.        if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
  841.          $game_system.se_play($data_system.cancel_se)
  842.          $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
  843.          terminate_message
  844.        end
  845.      end
  846.      # 确定
  847.      if Input.trigger?(Input::C)
  848.        if $game_temp.choice_max > 0
  849.          $game_system.se_play($data_system.decision_se)
  850.          $game_temp.choice_proc.call(self.index)
  851.        end
  852.        terminate_message
  853.        # 释放呼出窗口
  854.        del_fukidasi
  855.      end
  856.      return
  857.    end
  858.    # 在渐变以外的状态下有等待显示的信息与选择项的场合
  859.    if @fade_out == false and $game_temp.message_text != nil
  860.      @contents_showing = true
  861.      $game_temp.message_window_showing = true
  862.      reset_window
  863.      refresh_create
  864.      if @name_win != nil
  865.        @name_win.opacity = 0
  866.      end
  867.      if @tale != nil
  868.        @tale.opacity = 0
  869.      end
  870.      Graphics.frame_reset
  871.      self.visible = true
  872.      self.contents_opacity = 0
  873.      if @input_number_window != nil
  874.        @input_number_window.contents_opacity = 0
  875.      end
  876.      @fade_in = true
  877.      return
  878.    end
  879.    # 没有可以显示的信息、但是窗口为可见的情况下
  880.    if self.visible
  881.      @fade_out = true
  882.      self.opacity -= 48
  883.      if @name_win != nil
  884.        @name_win.opacity -= 48
  885.      end
  886.      if @tale != nil
  887.        @tale.opacity -= 48
  888.      end
  889.      if self.opacity == 0
  890.        self.visible = false
  891.        @fade_out = false
  892.        $game_temp.message_window_showing = false
  893.        del_fukidasi
  894.      end
  895.      return
  896.    end
  897. end
  898. #--------------------------------------------------------------------------
  899. # ● 释放
  900. #--------------------------------------------------------------------------
  901. def dispose
  902.    terminate_message
  903.    $game_temp.message_window_showing = false
  904.    if @input_number_window != nil
  905.      @input_number_window.dispose
  906.    end
  907.    super
  908. end
  909. #--------------------------------------------------------------------------
  910. # ● 信息结束处理
  911. #--------------------------------------------------------------------------
  912. def terminate_message
  913.    self.active = false
  914.    self.pause = false
  915.    self.index = -1
  916.    self.contents.clear
  917.    # 清除显示中标志
  918.    @contents_showing = false
  919.    @contents_showing_end = false
  920.    # 呼叫信息调用
  921.    if $game_temp.message_proc != nil
  922.      $game_temp.message_proc.call
  923.    end
  924.    # 清除文章、选择项、输入数值的相关变量
  925.    $game_temp.message_text = nil
  926.    $game_temp.message_proc = nil
  927.    $game_temp.choice_start = 99
  928.    $game_temp.choice_max = 0
  929.    $game_temp.choice_cancel_type = 0
  930.    $game_temp.choice_proc = nil
  931.    $game_temp.num_input_start = 99
  932.    $game_temp.num_input_variable_id = 0
  933.    $game_temp.num_input_digits_max = 0
  934.    # 释放金钱窗口
  935.    if @gold_window != nil
  936.      @gold_window.dispose
  937.      @gold_window = nil
  938.    end
  939. end
  940. #--------------------------------------------------------------------------
  941. # ● 刷新光标矩形
  942. #--------------------------------------------------------------------------
  943. def update_cursor_rect
  944.    if @index >= 0
  945.      n = $game_temp.choice_start + @index
  946.      self.cursor_rect.set(8, n * 32, @cursor_width, 32)
  947.    else
  948.      self.cursor_rect.empty
  949.    end
  950. end
  951. #--------------------------------------------------------------------------
  952. # ● 取得普通文字色
  953. #--------------------------------------------------------------------------
  954. def normal_color
  955.    nil_color = Color.new(0,0,0,0)
  956.    if FUKI::FUKI_COLOR != nil_color
  957.      color = FUKI::FUKI_COLOR
  958.    else
  959.      color = super
  960.    end
  961.    return color
  962. end
  963. end
  964. #==============================================================================
  965. # ■ Interpreter
  966. #==============================================================================
  967. class Interpreter
  968. #--------------------------------------------------------------------------
  969. # ● 设置事件
  970. #     event_id : 事件 ID
  971. #--------------------------------------------------------------------------
  972. alias setup_fuki setup
  973. def setup(list, event_id)
  974.    setup_fuki(list, event_id)
  975.    # 如果不是战斗中
  976.    if !($game_temp.in_battle)
  977.      # 记录事件 ID
  978.      $active_event_id = event_id
  979.    end
  980. end
  981. end
  982. #==============================================================================
  983. # ■ Scene_Map
  984. #==============================================================================
  985. class Scene_Map
  986. #--------------------------------------------------------------------------
  987. # ● 主处理
  988. #--------------------------------------------------------------------------
  989. def main
  990.    # 生成活动块
  991.    @spriteset = Spriteset_Map.new
  992.    # 生成信息窗口
  993.    @message_window = Window_FukiMessage.new
  994.    # 执行过渡
  995.    Graphics.transition
  996.    # 主循环
  997.    loop do
  998.      # 刷新游戏画面
  999.      Graphics.update
  1000.      # 刷新输入信息
  1001.      Input.update
  1002.      # 刷新画面
  1003.      update
  1004.      # 如果画面切换的话就中断循环
  1005.      if $scene != self
  1006.        break
  1007.      end
  1008.    end
  1009.    # 准备过渡
  1010.    Graphics.freeze
  1011.    # 释放活动块
  1012.    @spriteset.dispose
  1013.    # 释放信息窗口
  1014.    @message_window.dispose
  1015.    # 标题画面切换中的情况下
  1016.    if $scene.is_a?(Scene_Title)
  1017.      # 淡入淡出画面
  1018.      Graphics.transition
  1019.      Graphics.freeze
  1020.    end
  1021. end
  1022. end
  1023. #==============================================================================
  1024. # ■ Window_InputNumber
  1025. #==============================================================================
  1026. class Window_InputNumber < Window_Base
  1027. #--------------------------------------------------------------------------
  1028. # ● 初始化对像
  1029. #     digits_max : 位数
  1030. #--------------------------------------------------------------------------
  1031. def initialize(digits_max)
  1032.    @digits_max = digits_max
  1033.    @number = 0
  1034.    # 从数字的幅度计算(假定与 0~9 等幅)光标的幅度
  1035.    dummy_bitmap = Bitmap.new(32, 32)
  1036.    dummy_bitmap.font.size = FUKI::MES_FONT_SIZE
  1037.    @cursor_width = dummy_bitmap.text_size("0").width + 8
  1038.    dummy_bitmap.dispose
  1039.    super(0, 0, @cursor_width * @digits_max + 32, 64)
  1040.    self.contents = Bitmap.new(width - 32, height - 32)
  1041.    self.contents.font.size = FUKI::MES_FONT_SIZE
  1042.    self.z += 9999
  1043.    self.opacity = 0
  1044.    @index = 0
  1045.    refresh
  1046.    update_cursor_rect
  1047. end
  1048. end
复制代码
回复 支持 反对

使用道具 举报

30

主题

196

帖子

1977

积分

⑥精研

积分
1977
发表于 2006-9-27 16:48:05 | 显示全部楼层
我用的那个脚本好象不是楼上的……不过也很好使。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2025-6-29 04:39 , Processed in 0.013056 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表