Project1

标题: 求助,关于加长文章的脚本 [打印本页]

作者: banbianzhang    时间: 2013-10-2 21:08
标题: 求助,关于加长文章的脚本
本帖最后由 banbianzhang 于 2013-10-3 00:30 编辑

这是一个长文章脚本,上面写了文章后边用“ _”可以延长文章长度,文章后面可以接上选择项、文章和数值输入,我后边接文章和选择项都没问题,为什么接上数值输入文章就不可以连在一起了?
文章和数值输入连不起来。
文章和选择项就没问题。
以下是脚本:


=begin
没记错的话这是站上第4个长文章脚本了吧。。。。

效果:通过在“显示文章”的事件末尾加上续行符"_",可以实现文章的连续显示,
不需要进行特殊设置。最大可以显示12行(超过12行,屏幕也不够用了)

使用方法:将以下脚本插入到Main之前,在需要文章连辍显示的场合,在“显示文章”
的文本最后一行末尾处,加入一个空格和一个下划线,例:
显示文章:这是第一行
          这是第二行
          这是第三行
          这是第四行 _
显示文章:这是第五行
          这是第六行 _
显示选择项:C1,C2,C3

以上事件在游戏里将会变成一个大文本框,里面有九行,最后三行是选择项
......
注意:
1. 续行符仅写在“显示文章”事件的最后一行末尾才有效果,写在中间行末尾会被直接过
滤掉,写在不是行末尾的地方会当作普通字符显示,续行符对后续的“显示文章”“显示选
择项”“输入数值”均有收纳作用。
2. 续行符前面必须有一个空格,否则会当作普通字符显示出来且没有效果。
3. 当文章长度已经积累到12行时,续行符失效



--------------------------------------------------------------------------------


几点说明:

1. 整合的窗口是默认的窗口,如果使用的是增加窗口或fuki的话。。。可能refresh被定义
过。。。请自己调试

2. 因为除了这段脚本其他的全都是默认的,就不上传测试工程了

脚本有完整注释,如果你使用了小字体导致允许显示12行以上的文章,可以修改相应地方




脚本内容
------------------------------------------------------------------------------
=end
#============================================================================
# ■ 续行符文章连辍显示 by SailCat
#============================================================================
class Window_Message
alias sailcat_refresh refresh
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
   lines = 0
   $game_temp.message_text.each {lines += 1}
   lines = 4 if lines < 4
   self.height = lines * 32 + 32
   self.contents = Bitmap.new(width - 32, height - 32)
   reset_window
   sailcat_refresh
end
#--------------------------------------------------------------------------
# ● 设置窗口位置与不透明度
#--------------------------------------------------------------------------
def reset_window
   if $game_temp.in_battle
     self.y = 16
   else
     case $game_system.message_position
     when 0  # 上
       self.y = 16
     when 1  # 中
       self.y = 240 - self.height / 2
     when 2  # 下
       self.y = 464 - self.height
     end
   end
   if $game_system.message_frame == 0
     self.opacity = 255
   else
     self.opacity = 0
   end
   self.back_opacity = 160
end
end
class Interpreter
#--------------------------------------------------------------------------
# ● 显示文章
#--------------------------------------------------------------------------
def command_101
   # 另外的文章已经设置过 message_text 的情况下
   if $game_temp.message_text != nil
     # 结束
     return false
   end
   # 设置信息结束后待机和返回调用标志
   @message_waiting = true
   $game_temp.message_proc = Proc.new { @message_waiting = false }
   # message_text 设置为 1 行
   $game_temp.message_text = @list[@index].parameters[0] + "\n"
   line_count = 1
   # 最大 4 行
   line_max = 1
   # 循环
   loop do
     # 下一个事件指令为文章两行以上的情况
     if @list[@index+1].code == 401
       # message_text 添加到第 2 行以下
       $game_temp.message_text += @list[@index+1].parameters[0] + "\n"
       line_count += 1
     # 下一个事件指令为显示文章,且本行末尾有续行标记的情况
     elsif @list[@index+1].code == 101 and @list[@index].parameters[0][-2, 2] == " _"
       # 如果已经达到 12 行就返回
       if line_count == 12
         # 清除续行标记
         $game_temp.message_text.gsub!(/ _$/, "")
         # 继续
         return true
       end
       # message_text 添加到第 2 行以下
       $game_temp.message_text += @list[@index+1].parameters[0] + "\n"
       line_count += 1
       # 增加 4 行空间,最多 12 行
       line_max += 4 if line_max < 12
     # 事件指令不在文章两行以下的情况
     else
       # 如果本行末尾有续行标记则增加到 12 行
       if @list[@index].parameters[0][-2, 2] == " _"
         line_max = 12
       end
       # 下一个事件指令为显示选择项的情况下
       if @list[@index+1].code == 102
         # 如果选择项能收纳在画面里
         if @list[@index+1].parameters[0].size <= line_max - line_count
           # 推进索引
           @Index += 1
           # 设置选择项
           $game_temp.choice_start = line_count
           setup_choices(@list[@index].parameters)
         end
       # 下一个事件指令为处理输入数值的情况下
       elsif @list[@index+1].code == 103 or
         # 如果数值输入窗口能收纳在画面里
         if line_count < line_max
           # 推进索引
           @index += 1
           # 设置输入数值
           $game_temp.num_input_start = line_count
           $game_temp.num_input_variable_id = @list[@index].parameters[0]
           $game_temp.num_input_digits_max = @list[@index].parameters[1]
         end
       end
       # 清除续行标记
       $game_temp.message_text.gsub!(/ _$/, "")
       # 继续
       return true
     end
     # 推进索引
     @index += 1
   end
end
end


作者: 紫英晓狼1130    时间: 2013-10-3 07:14
RMXP不用其他脚本,文章和选择项就可以连在一起
作者: banbianzhang    时间: 2013-10-3 15:08
本帖最后由 banbianzhang 于 2013-10-3 15:49 编辑
紫英晓狼1130 发表于 2013-10-3 07:14
RMXP不用其他脚本,文章和选择项就可以连在一起


哈哈哈!终于找到问题了!
把“ elsif @list[@index+1].code == 103 or”这一句最后的“or”改成“and”就可以了!




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