设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1317|回复: 6
打印 上一主题 下一主题

[已经解决] 找个对话框脚本

 关闭 [复制链接]

Lv1.梦旅人

青天

梦石
0
星屑
86
在线时间
232 小时
注册时间
2007-12-15
帖子
2091

开拓者

跳转到指定楼层
1
发表于 2009-8-3 11:02:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 浩气青天 于 2009-8-3 11:15 编辑

那啥,哪位同志有空帮小弟解决一下。
我想找一个对话框的宽度大小刚好覆盖整个游戏画面的对话框的脚本
左边有个框框内显示对话头像,右边的框框的是说的话。
具体如下图所示:

如果有这个脚本的话,麻烦告诉一下,谢谢。
开坑准备中

Lv1.梦旅人

青天

梦石
0
星屑
86
在线时间
232 小时
注册时间
2007-12-15
帖子
2091

开拓者

2
 楼主| 发表于 2009-8-3 11:32:21 | 只看该作者
囧,没有这个脚本么?
左边的框框显示头像的。
右边对话框里的名字是自己打上去的,
或者可以根据角色的名字自动填写。
只要有左边显示头像的对话脚本就可以了。
开坑准备中
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
18 小时
注册时间
2009-7-25
帖子
411
3
发表于 2009-8-3 13:53:18 | 只看该作者
本帖最后由 flzt5354 于 2009-8-3 14:01 编辑

也不是没有啦,那个宽度是自己改的我用的是苹果梨的
不过名字是显示在头像下面- -将就下吧
已经改了.拿去吧把原来的Window_Message删除,新建个GPRA Window_Message
  1. #==============================================================================
  2. # ◎ GPRA_Window_Message
  3. #------------------------------------------------------------------------------
  4. # ◎ 显示文章的信息窗口加强。
  5. #------------------------------------------------------------------------------
  6. # 制作者:绿梨子红苹果
  7. # 个人主页:vbgm.9126.com
  8. # E-Mail:[email protected]
  9. # QQ:42378361
  10. #==============================================================================

  11. class Window_Message < Window_Selectable
  12.   #--------------------------------------------------------------------------
  13.   # ● 初始化状态
  14.   #--------------------------------------------------------------------------
  15.   def initialize
  16.     super(80, 304, 620, 160)
  17.     self.contents = Bitmap.new(width - 32, height - 32)
  18.     self.visible = false
  19.     self.z = 9998
  20.     @fade_in = false
  21.     @fade_out = false
  22.     @contents_showing = false
  23.     @cursor_width = 0
  24.     @op = 255 # 不透明度
  25.     @head_bmp = nil # 装载头像用
  26.     @head_file = nil # 头像文件名
  27.     @text = nil # 记录所处理文字
  28.     @skip = false # 记录是否跳过此次对话
  29.     @auto_close = -1 # 默认不打开自动关闭
  30.     @show_head = false # 记录是否显示头像了
  31.     @type_mode=-1 # 打字模式
  32.     @auto_newline=false # 默认不开启自动换行功能
  33.     @delay=-1 # 等待n帧标志
  34.     @finish=false # 记录文字处理是否结束
  35.     @ts = TextStream.new # 创建一个新的TXT读取流
  36.     @is_read_txt =false # 默认不是在读取txt文件
  37.     @pic = nil # 显示图片用
  38.     @pic_x = 0 # 显示图片的X坐标
  39.     @pic_y = 0 # 显示图片的Y坐标
  40.     self.active = false
  41.     self.index = -1
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ● 释放
  45.   #--------------------------------------------------------------------------
  46.   def dispose
  47.     terminate_message
  48.     $game_temp.message_window_showing = false
  49.     if @input_number_window != nil
  50.       @input_number_window.dispose
  51.     end
  52.     super
  53.   end
  54.   #--------------------------------------------------------------------------
  55.   # ● 处理信息结束
  56.   #--------------------------------------------------------------------------
  57.   def terminate_message
  58.     self.active = false
  59.     self.pause = false
  60.     self.index = -1
  61.     self.contents.clear
  62.     # 清除显示中标志
  63.     @contents_showing = false
  64.     # 呼叫信息调用
  65.     if $game_temp.message_proc != nil
  66.       $game_temp.message_proc.call
  67.     end
  68.     # 清除文章、选择项、输入数值的相关变量
  69.     $game_temp.message_text = nil
  70.     $game_temp.message_proc = nil
  71.     $game_temp.choice_start = 99
  72.     $game_temp.choice_max = 0
  73.     $game_temp.choice_cancel_type = 0
  74.     $game_temp.choice_proc = nil
  75.     $game_temp.num_input_start = 99
  76.     $game_temp.num_input_variable_id = 0
  77.     $game_temp.num_input_digits_max = 0
  78.     # 开放金钱窗口
  79.     if @gold_window != nil
  80.       @gold_window.dispose
  81.       @gold_window = nil
  82.     end
  83.   end
  84.   #--------------------------------------------------------------------------
  85.   # ● 刷新
  86.   #--------------------------------------------------------------------------
  87.   def refresh
  88.     # 清空原先内容
  89.     self.contents.clear
  90.     # 恢复一般字色
  91.     self.contents.font.color = normal_color
  92.     # 恢复字体大小
  93.     self.contents.font.size = 20
  94.     # 绘制文字位置初始化
  95.     @x = @y = 0
  96.     # 字体高度记录
  97.     @height = 32
  98.     # 文字不透明度设定为255
  99.     @op = 255
  100.     # 默认不显示头像
  101.     @show_head = false
  102.     # 头像默认显示在右边
  103.     @right = true
  104.     # 头像默认显示一般表情
  105.     @face = nil
  106.     # 默认显示角色姓名
  107.     @name = nil
  108.     # 默认是不显示图片的
  109.     @pic = nil
  110.     # 默认不跳过此次对话
  111.     @skip = false
  112.     # 从变量读取自动关闭设置
  113.     @auto_close = $game_variables[2]
  114.     # 从变量读取打字模式设置
  115.     @type_mode=$game_variables[3]
  116.     # 从变量读取自动换行设置
  117.     @auto_newline= ($game_variables[4]==0 ? false : true)
  118.     # 默认不等待
  119.     @delay=-1
  120.     # 设定文字没有处理结束
  121.     @finish=false
  122.     # 光标宽度初始化为零
  123.     @cursor_width = 0
  124.     # 到选择项的下一行字
  125.     if $game_temp.choice_start == 0
  126.       @x = 16
  127.     end
  128.     # 有等待显示的文字的情况下
  129.     # (注:因为一旦文字非空就处理,所以可以设定 $game_temp.message_text 达到显示文章的效果)
  130.     if $game_temp.message_text != nil
  131.       # @text 功能改进
  132.       if @text==nil or @text==""
  133.         @text = $game_temp.message_text.dup
  134.       else
  135.         @text = @text + $game_temp.message_text
  136.       end
  137.       
  138.       # 最先必须要将 "\\\\" 变换为 "\000"
  139.       @text.gsub!(/\\\\/)                { "\000" }
  140.       
  141.       # 在TXT模式还没有打开的时候
  142.       if !@is_read_txt
  143.         # TXT读取模式打开
  144.         if @text.slice!(/\\[Tt][Xx][Tt]\[(\w+)\]\[(\w+)\]/)!=nil
  145.           # 打开文件,成功打开后再进入后面部分
  146.           if @ts.open($1,$2)
  147.             if @auto_newline==true
  148.               #自动换行时只打开一行文字
  149.               @text =  @ts.get_text(1)
  150.             else
  151.               # 根据显示模式确定需要打开行数
  152.               case $game_variables[1]
  153.               when 0 # 正常模式
  154.                 @text =  @ts.get_text(4)
  155.               when 1 # 图书模式
  156.                 @text =  @ts.get_text(12)
  157.               when 2 # 全屏模式
  158.                 @text =  @ts.get_text(15)
  159.               end
  160.             end
  161.             # 如果包含[END]
  162.             if @text.gsub!(/\[END\]/){""}!=nil
  163.               #退出TXT读取模式
  164.               @is_read_txt=false
  165.             else
  166.               #否则设置正在读取标志
  167.               @is_read_txt=true
  168.             end
  169.           end
  170.         else
  171.           if @text.slice!(/\\[Tt][Xx][Tt]\[(\w+)\]/)!=nil
  172.             # 打开文件,成功打开后再进入后面部分
  173.             if @ts.open($1,"")
  174.               if @auto_newline==true
  175.                 #自动换行时只打开一行文字
  176.                 @text =  @ts.get_text(1)
  177.               else
  178.                 # 根据显示模式确定需要打开行数
  179.                 case $game_variables[1]
  180.                 when 0 # 正常模式
  181.                   @text =  @ts.get_text(4)
  182.                 when 1 # 图书模式
  183.                   @text =  @ts.get_text(12)
  184.                 when 2 # 全屏模式
  185.                   @text =  @ts.get_text(15)
  186.                 end
  187.               end
  188.               # 如果包含[END]
  189.               if @text.gsub!(/\[END\]/){""}!=nil
  190.                 #退出TXT读取模式
  191.                 @is_read_txt=false
  192.               else
  193.                 #否则设置正在读取标志
  194.                 @is_read_txt=true
  195.               end
  196.             end
  197.           end
  198.         end
  199.       end
  200.         
  201.       # 如果取得的字符含"\\~"时
  202.       if @text.slice!(/\\~/)!=nil
  203.         # 跳过此次对话
  204.         terminate_message
  205.         # 设置跳过此次对话标志
  206.         @skip = true
  207.         # 直接返回等待连接后面部分
  208.         return
  209.       end
  210.       
  211.       # 限制文字处理(注:这里是默认功能。)
  212.       begin
  213.         last_text = @text.clone
  214.         @text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  215.       end until @text == last_text
  216.       @text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  217.         $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  218.       end
  219.       #(注:后面将单个字符循环判断,所以这里将控制符全部换成单个字符)
  220.       # 为了方便将 "\\C" 变为 "\001"
  221.       @text.gsub!(/\\[Cc]\[([0-9#a-zA-Z]+)\]/)  { "\001[#{$1}]" }
  222.       # "\\G" 变为 "\002"
  223.       @text.gsub!(/\\[Gg]/)              { "\002" }
  224.       
  225.       # ========================增强功能========================
  226.       
  227.       # 在自动换行模式下,首先删除所有换行符号,然后"\/"用于强制换行
  228.       if @auto_newline
  229.         # 删除原来的所有换行。
  230.         @text.gsub!(/\n/) {""}
  231.         # 然后"\/"替换成强制换行
  232.         @text.gsub!(/\\\//) {"\n"}
  233.       # 在非自动换行模式下,"\/"用于删除多于的换行符号
  234.       else
  235.         # "\\/" 删除行尾换行符号
  236.         @text.gsub!(/\\\/\n/) {""}
  237.         # 去掉不在行尾的"\\/"符号,防止出错
  238.         @text.gsub!(/\\\//) {""}
  239.       end
  240.         
  241.       # "\\I" 物品图标+名称显示
  242.       @text.gsub!(/\\[Ii]\[([0-9]+)\]/) { "\003[#{$1}]"+$data_items[$1.to_i].name }
  243.       # "\\K" 技能图标+名称显示
  244.       @text.gsub!(/\\[Kk]\[([0-9]+)\]/) { "\004[#{$1}]"+$data_skills[$1.to_i].name }
  245.       # "\\W" 武器图标+名称显示
  246.       @text.gsub!(/\\[Ww]\[([0-9]+)\]/) { "\005[#{$1}]"+$data_weapons[$1.to_i].name }
  247.       # "\\A" 防具图标+名称显示
  248.       @text.gsub!(/\\[Dd]\[([0-9]+)\]/) { "\006[#{$1}]"+$data_armors[$1.to_i].name }
  249.       
  250.       # 注:大量显示图片将是游戏的速度大大减慢
  251.       # "\\I1" 物品图标显示
  252.       @text.gsub!(/\\[Ii]1\[([0-9]+)\]/) { "\003[#{$1}]" }
  253.       # "\\K1" 技能图标显示
  254.       @text.gsub!(/\\[Kk]1\[([0-9]+)\]/) { "\004[#{$1}]" }
  255.       # "\\W1" 武器图标显示
  256.       @text.gsub!(/\\[Ww]1\[([0-9]+)\]/) { "\005[#{$1}]" }
  257.       # "\\A1" 防具图标显示
  258.       @text.gsub!(/\\[Dd]1\[([0-9]+)\]/) { "\006[#{$1}]" }
  259.       
  260.       # "\\I2" 物品名称显示
  261.       @text.gsub!(/\\[Ii]2\[([0-9]+)\]/) { $data_items[$1.to_i].name }
  262.       # "\\K2" 技能名称显示
  263.       @text.gsub!(/\\[Kk]2\[([0-9]+)\]/) { $data_skills[$1.to_i].name }
  264.       # "\\W2" 武器名称显示
  265.       @text.gsub!(/\\[Ww]2\[([0-9]+)\]/) { $data_weapons[$1.to_i].name }
  266.       # "\\A2" 防具名称显示
  267.       @text.gsub!(/\\[Dd]2\[([0-9]+)\]/) { $data_armors[$1.to_i].name }
  268.       
  269.       # "\\S" 字体大小(只修改第一个"\\S")
  270.       # 这里首先删掉能找到的第一个"\\S"
  271.       if @text.slice!(/\\[Ss]\[([0-9]+)\]/)!=nil
  272.         # 当找了"\\S"时满足上述条件,就设置文字大小
  273.         self.set_font_size($1.to_i)
  274.       end
  275.       # "\\O" 文字透明度(使用注意同上,模拟声音变小……)
  276.       if @text.slice!(/\\[Oo]\[([0-9]+)\]/)!=nil
  277.         self.set_font_op($1.to_i)
  278.       end

  279.       # "\\=" 停顿固定帧(延时)
  280.       @text.gsub!(/\\=\[([0-9]+)\]/)    { "\024[#{$1}]" }
  281.       # "\\." 停顿3帧
  282.       @text.gsub!(/\\\./)               { "\024[3]" }
  283.       # "\\_" 停顿1秒(30帧)
  284.       @text.gsub!(/\\_/)                { "\024[30]" }
  285.       
  286.       # "\\L" 指定头像左边显示
  287.       if @text.slice!(/\\[Ll]/)!=nil
  288.         # 设定头像居右标志为假
  289.         @right=false
  290.         # 顺便要设置@x=104,文字在右边显示
  291.         @x=104
  292.       end
  293.       # "\\X" 指定不要显示姓名,带参数就是指定显示姓名(可内部使用"\\N[]")
  294.       # 首先是寻找有没有带参数的"\\X"
  295.       if @text.slice!(/\\[Xx]\[(\w+)\]/)!=nil
  296.         # 找到的话将参数赋予@name
  297.         @name=$1
  298.       # 没有找到的话
  299.       else
  300.         # 再去寻找有没有不带参数的"\\X"
  301.         if @text.slice!(/\\[Xx]/)!=nil
  302.           # 找到的话就将姓名变成"???"
  303.           @name="???"
  304.         end
  305.       end
  306.       # "\\F" 指定表情(Face 用来指定表情啦)
  307.       # 这里"\w"表示匹配字母+数字还有下划线,同样支持中文
  308.       if @text.slice!(/\\[Ff]\[(\w+)\]/)!=nil
  309.         # 找到的话就设定表情
  310.         @face=$1
  311.       end
  312.       # "\\H" 显示头像(不明白大家为什么都喜欢用 Face 表示头像……)
  313.       # 这里我将把显示头像放到字串的最前面,因为头像应该先显示出来
  314.       if @text.slice!(/\\[Hh]\[([0-9]+)\]/)!=nil
  315.         # 显示了头像,将标记记录为真
  316.         @show_head = true
  317.         # 找到的话就提到字符串最前面
  318.         @text="\030[#{$1}]"+@text
  319.       end
  320.       # "\\Pic" 显示图片,用来在报刊等场合添加图片
  321.       if @text.slice!(/\\[Pp][Ii][Cc]\[([0-9]+)\]\[([0-9]+)\]\[(\w+)\]/)!=nil
  322.         # 找到的话就提到字符串最前面
  323.         @text="\031"+@text
  324.         # 载入要显示的图片
  325.         @pic = RPG::Cache.picture($3)
  326.         # 然后要记录显示图片的坐标
  327.         @pic_x=$1.to_i
  328.         @pic_y=$2.to_i
  329.       end
  330.       
  331.       # ================ 分析部分结束,下面是显示部分 ================
  332.    
  333.       # 在此调用过程完成,因为在update部分也会有相同代码
  334.       self.refresh_

  335.     end
  336.     # 选择项的情况
  337.     if $game_temp.choice_max > 0
  338.       @item_max = $game_temp.choice_max
  339.       self.active = true
  340.       self.index = 0
  341.     end
  342.     # 输入数值的情况
  343.     if $game_temp.num_input_variable_id > 0
  344.       digits_max = $game_temp.num_input_digits_max
  345.       number = $game_variables[$game_temp.num_input_variable_id]
  346.       @input_number_window = Window_InputNumber.new(digits_max)
  347.       @input_number_window.number = number
  348.       @input_number_window.x = self.x + 8
  349.       @input_number_window.y = self.y + $game_temp.num_input_start * 32
  350.     end
  351.   end
  352.   #--------------------------------------------------------------------------
  353.   # ● 设置窗口位置与不透明度
  354.   #--------------------------------------------------------------------------
  355.   def reset_window
  356.     # 判断现在的显示模式
  357.     case $game_variables[1]
  358.     when 0 # 普通模式
  359.       self.width=600
  360.       self.height=160
  361.       self.contents = Bitmap.new(width - 32, height - 32)
  362.       self.x = 20
  363.       if $game_temp.in_battle
  364.         self.y = 16
  365.       else
  366.         case $game_system.message_position
  367.         when 0  # 上
  368.           self.y = 16
  369.         when 1  # 中
  370.           self.y = 160
  371.         when 2  # 下
  372.           self.y = 304
  373.         end
  374.       end
  375.     when 1 # 图书模式
  376.       self.width=532
  377.       self.height=416
  378.       self.contents = Bitmap.new(width - 32, height - 32)
  379.       self.x = 54
  380.       self.y = 32
  381.     when 2 # 全屏模式
  382.       self.width=672
  383.       self.height=512
  384.       self.contents = Bitmap.new(width - 32, height - 32)
  385.       self.x = -16
  386.       self.y = -16
  387.     end
  388.     if $game_system.message_frame == 0
  389.       self.opacity = 255
  390.     else
  391.       self.opacity = 0
  392.     end
  393.     self.back_opacity = 192
  394.   end
  395.   #--------------------------------------------------------------------------
  396.   # ● 刷新画面
  397.   #--------------------------------------------------------------------------
  398.   def update
  399.     super
  400.     # 渐变的情况下
  401.     if @fade_in
  402.       # 脚本在这里设定透明度
  403.       self.contents_opacity += @op/8
  404.       if @input_number_window != nil
  405.         @input_number_window.contents_opacity += 32
  406.       end
  407.       if self.contents_opacity >= @op
  408.         @fade_in = false
  409.       end
  410.       return
  411.     end
  412.     # 输入数值的情况下
  413.     if @input_number_window != nil
  414.       @input_number_window.update
  415.       # 确定
  416.       if Input.trigger?(Input::C)
  417.         $game_system.se_play($data_system.decision_se)
  418.         $game_variables[$game_temp.num_input_variable_id] =
  419.           @input_number_window.number
  420.         $game_map.need_refresh = true
  421.         # 释放输入数值窗口
  422.         @input_number_window.dispose
  423.         @input_number_window = nil
  424.         terminate_message
  425.       end
  426.       return
  427.     end
  428.     # 显示信息中的情况下
  429.     if @contents_showing
  430.       # 刷新文本
  431.       self.refresh_
  432.       # 如果不是在显示选择项中就显示暂停标志
  433.       if $game_temp.choice_max == 0
  434.         self.pause = true
  435.       end
  436.       # 取消
  437.       if Input.trigger?(Input::B)
  438.         if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
  439.           $game_system.se_play($data_system.cancel_se)
  440.           $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
  441.           terminate_message
  442.         end
  443.       end
  444.       # @auto_close自减计数
  445.       @auto_close-=1
  446.       # 确定或者自动关闭
  447.       if Input.trigger?(Input::C) or @auto_close==0 # @auto_close为0自动关闭,所以一开始为负数或0就不会自动关闭
  448.         # 文字还没有处理完的时候
  449.         if !@finish and @auto_close!=0
  450.           # 删除所有停顿效果
  451.           @text.gsub!(/\024\[([0-9]+)\]/) { "" }
  452.           # 删除当前延迟效果
  453.           @delay = 0
  454.           # 关闭打字效果
  455.           @type_mode=-1
  456.           # 一次处理完所有的字
  457.           self.refresh_
  458.         else
  459.           # 有选择项的情况
  460.           if $game_temp.choice_max > 0
  461.             $game_system.se_play($data_system.decision_se)
  462.             $game_temp.choice_proc.call(self.index)
  463.           end
  464.           # 清空文字
  465.           terminate_message
  466.           # 在读取TXT的模式下,需要继续打开文字
  467.           if @is_read_txt
  468.             if @auto_newline==true
  469.               #自动换行时只打开一行文字
  470.               $game_temp.message_text =  @ts.get_text(1)
  471.             else
  472.               # 根据显示模式确定需要打开行数
  473.               case $game_variables[1]
  474.               when 0 # 正常模式
  475.                 $game_temp.message_text =  @ts.get_text(4)
  476.               when 1 # 图书模式
  477.                 $game_temp.message_text =  @ts.get_text(12)
  478.               when 2 # 全屏模式
  479.                 $game_temp.message_text =  @ts.get_text(15)
  480.               end
  481.             end
  482.             # 如果包含[END]则退出TXT读取模式
  483.             if $game_temp.message_text.gsub!(/\[END\]/){""}!=nil
  484.               @is_read_txt=false
  485.             end
  486.           end
  487.         end
  488.       end
  489.       return
  490.     end
  491.     # 在渐变以外的状态下有等待显示的信息与选择项的场合
  492.     if @fade_out == false and !($game_temp.message_text == nil or $game_temp.message_text == "")
  493.       @contents_showing = true
  494.       $game_temp.message_window_showing = true
  495.       reset_window
  496.       refresh
  497.       Graphics.frame_reset
  498.       # 当不跳过对话时才进行淡入操作
  499.       if !@skip
  500.         self.visible = true
  501.         self.contents_opacity = 0
  502.         if @input_number_window != nil
  503.           @input_number_window.contents_opacity = 0
  504.         end
  505.         @fade_in = true
  506.       end
  507.       return
  508.     end
  509.     # 没有可以显示的信息、但是窗口为可见的情况下
  510.     if self.visible
  511.       @fade_out = true
  512.       self.opacity -= 48
  513.       if self.opacity == 0
  514.         self.visible = false
  515.         @fade_out = false
  516.         $game_temp.message_window_showing = false
  517.       end
  518.       return
  519.     end
  520.   end
  521.   #--------------------------------------------------------------------------
  522.   # ● 刷新光标矩形
  523.   #--------------------------------------------------------------------------
  524.   def update_cursor_rect
  525.     if @index >= 0
  526.       n = $game_temp.choice_start + @index
  527.       self.cursor_rect.set(8, n * 32, @cursor_width, 32)
  528.     else
  529.       self.cursor_rect.empty
  530.     end
  531.   end
  532.   #--------------------------------------------------------------------------
  533.   # ● 设定字体大小
  534.   #--------------------------------------------------------------------------
  535.   def set_font_size(size=20)
  536.     # 最大字96号,再大就超过文字栏了,而且Ruby本来有限制……
  537.     if size>96
  538.       size=96
  539.     end
  540.     # 设定字的大小
  541.     self.contents.font.size = size
  542.     # 如果字太大了就要加高每行文字高度。
  543.     if size > 28
  544.       @height=size+4
  545.     else
  546.       @height=32
  547.     end
  548.   end
  549.   #--------------------------------------------------------------------------
  550.   # ● 设定文字透明
  551.   #--------------------------------------------------------------------------
  552.   def set_font_op(op=255)
  553.     # 限制透明度为0-255
  554.     if op>255
  555.       op=255
  556.     elsif op<0
  557.       op=0
  558.     end
  559.     # 这里设定文字透明是没有用的,设定透明在update过程开始
  560.     @op = op
  561.   end
  562.   #--------------------------------------------------------------------------
  563.   # ● 显示文字/头像过程
  564.   #--------------------------------------------------------------------------
  565.   def refresh_
  566.     # 处理已经结束的情况下直接return
  567.     if @finish
  568.       return
  569.     end
  570.     # 延时处理
  571.     @delay-=1
  572.     if @delay<=0
  573.       # 每次处理i个标志,这里i就设置为@type_mode了
  574.       i=@type_mode
  575.       # c 获取 1 个字 (如果不能取得文字就循环)
  576.       while ((c = @text.slice!(/./m)) != nil)
  577.         # ======================== 默认功能 ========================
  578.         # \\ 的情况下
  579.         if c == "\000"
  580.           # 还原为本来的文字
  581.           c = "\\"
  582.         end
  583.         # \C[n] 的情况下
  584.         if c == "\001"
  585.           # 取得字色编码
  586.           @text.sub!(/\[([0-9#a-zA-Z]+)\]/, "")
  587.           # 如果是设定RGB颜色
  588.           if $1[0,1]=="#"
  589.             # 先拷贝一下文字
  590.             c=$1.dup
  591.             # 分3段分别取出R,G,B颜色
  592.             c.sub!(/#([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})/, "")
  593.             # 设定文字颜色
  594.             self.contents.font.color = Color.new($1.to_i(16), $2.to_i(16), $3.to_i(16),@op)
  595.             next
  596.           else
  597.             # 记录到变量 color
  598.             color = $1.to_i
  599.             # 字色0~7是有效的
  600.             if color >= 0 and color <= 7
  601.               # 设置文字颜色
  602.               self.contents.font.color = text_color(color)
  603.             end
  604.           end
  605.           # 进行下次循环
  606.           next
  607.         end
  608.         # 显示金钱窗口,这个……不用说了吧……
  609.         if c == "\002"
  610.           if @gold_window == nil
  611.             @gold_window = Window_Gold.new
  612.             @gold_window.x = 560 - @gold_window.width
  613.             if $game_temp.in_battle
  614.               @gold_window.y = 192
  615.             else
  616.               @gold_window.y = self.y >= 128 ? 32 : 384
  617.             end
  618.             @gold_window.opacity = self.opacity
  619.             @gold_window.back_opacity = self.back_opacity
  620.           end
  621.           next
  622.         end
  623.         # 另起一行文字的情况下
  624.         if c == "\n"
  625.           # 刷新选择项及光标的高
  626.           if @y >= $game_temp.choice_start
  627.             @cursor_width = [@cursor_width, @x>440 ? 448 : @x+8].max
  628.           end
  629.           # y 加 1
  630.           @y += 1
  631.           # 因为字体大小会变化,这里添加判断语句,超出就不显示了
  632.           if @y>=self.contents.height/@height
  633.             # 删除@text剩余的所有内容
  634.             @text=nil
  635.             # 然后返回
  636.             break
  637.           end
  638.           # 因为头像的缘故,这里需要改写
  639.           if @right
  640.             # 头像右边显示的时候是0
  641.             @x=0
  642.           else
  643.             # 头像靠左显示时@x要留出绘制头像空间
  644.             @x=104
  645.           end
  646.           # 移动到选择项的下一行
  647.           if @y >= $game_temp.choice_start
  648.             @x=16
  649.           end
  650.           # 下面的文字
  651.           next
  652.         end
  653.         
  654.         # ======================== 加强功能 ========================
  655.         
  656.         # 显示物品图标
  657.         if c == "\003"
  658.           # 取得物品ID
  659.           @text.sub!(/\[([0-9]+)\]/, "")
  660.           # 这里的 RPG::Cache 是高速缓存,不明白的看看帮助文档吧……
  661.           icon = RPG::Cache.icon($data_items[$1.to_i].icon_name)
  662.           # 绘制这个图标
  663.           self.contents.blt(@x+4,@y*@height+(@height-24)/2,icon,Rect.new(0, 0, 24, 24))
  664.           # 将x值增加24
  665.           @x+=24
  666.           # 执行下一次循环
  667.           next
  668.         end
  669.         # 显示技能图标(因为类似物品图标显示,所以省略注释)
  670.         if c == "\004"
  671.           @text.sub!(/\[([0-9]+)\]/, "")
  672.           icon = RPG::Cache.icon($data_skills[$1.to_i].icon_name)
  673.           self.contents.blt(@x+4,@y*@height+(@height-24)/2,icon,Rect.new(0, 0, 24, 24))
  674.           @x+=24
  675.           next
  676.         end
  677.         # 显示武器图标(因为类似物品图标显示,所以省略注释)
  678.         if c == "\005"
  679.           @text.sub!(/\[([0-9]+)\]/, "")
  680.           icon = RPG::Cache.icon($data_weapons[$1.to_i].icon_name)
  681.           self.contents.blt(@x+4,@y*@height+(@height-24)/2,icon,Rect.new(0, 0, 24, 24))
  682.           @x+=24
  683.           next
  684.         end
  685.         # 显示防具图标(因为类似物品图标显示,所以省略注释)
  686.         if c == "\006"
  687.           @text.sub!(/\[([0-9]+)\]/, "")
  688.           icon = RPG::Cache.icon($data_armors[$1.to_i].icon_name)
  689.           self.contents.blt(@x+4,@y*@height+(@height-24)/2,icon,Rect.new(0, 0, 24, 24))
  690.           @x+=24
  691.           next
  692.         end
  693.         
  694.         # 等待n帧
  695.         if c == "\024"
  696.           # 取得参数(需要等待多少帧)
  697.           @text.sub!(/\[([0-9]+)\]/, "")
  698.           # 设定@delay标志
  699.           @delay = $1.to_i
  700.           # 退出此次循环
  701.           break
  702.         end
  703.         
  704.         # 显示头像
  705.         if c == "\030"
  706.           #暂时记录文字大小,用于显示完头像恢复
  707.           size=self.contents.font.size
  708.           # 设定为正常的20号字
  709.           self.contents.font.size=20
  710.           # 设定系统字色,为写名字做准备的
  711.           self.contents.font.color = system_color
  712.           # 取得"[]"内的字符并从原字串中删除这一部分
  713.           @text.sub!(/\[([0-9]+)\]/, "")
  714.           # 记录到head变量
  715.           head=$1
  716.           # 判断头像和原来的是不是一样的
  717.           if @face == nil
  718.             # 不一样
  719.             if @head_file != head
  720.               # 改变成现在的头像文件名
  721.               @head_file = head
  722.               # 不一样的话再重新载入头像
  723.               @head_bmp=RPG::Cache.character("head/gpra_"+@head_file, 0)
  724.             end
  725.           else
  726.             # 当表情不是空的时候需要考虑表情的
  727.             if @head_file != head + "_" + @face
  728.               # 改变成现在的头像文件名
  729.               @head_file = head + "_" + @face
  730.               # 不一样的话再重新载入头像
  731.               @head_bmp=RPG::Cache.character("head/gpra_"+@head_file, 0)
  732.             end
  733.           end
  734.           # 显示头像,分左右两种情况
  735.           if @right
  736.             # 绘制头像图片
  737.             self.contents.blt(348,0,@head_bmp,Rect.new(0,0,100,100))
  738.             # 显示角色姓名
  739.             if @name==nil
  740.               # 取得角色姓名到变量 c
  741.               c = $game_actors[head.to_i].name
  742.               # 描绘角色的姓名
  743.               self.contents.draw_text_s(348,104,100,24,c,1)
  744.             else
  745.               # 取得"???"到变量 c,当然这个"???"可以改为其他的默认值
  746.               c = @name
  747.               # 描绘角色的姓名
  748.               self.contents.draw_text_s(348,104,100,24,c,1)
  749.             end
  750.           else
  751.             # 绘制头像图片
  752.             self.contents.blt(0,0,@head_bmp,Rect.new(0,0,100,100))
  753.             # 显示角色姓名
  754.             if @name==nil
  755.               # 取得角色姓名到变量 c
  756.               c = $game_actors[head.to_i].name
  757.               # 描绘角色的姓名
  758.               self.contents.draw_text_s(0,104,100,24,c,1)
  759.             else
  760.               # 取得"???"到变量 c,当然这个"???"可以改为其他的默认值
  761.               c = @name
  762.               # 描绘角色的姓名
  763.               self.contents.draw_text_s(0,104,100,24,c,1)
  764.             end
  765.           end
  766.           # 恢复默认字色
  767.           self.contents.font.color = normal_color
  768.           # 恢复字体大小
  769.           self.contents.font.size=size
  770.           # 进行下一次循环
  771.           next
  772.         end
  773.         
  774.         # 显示图片!只需要绘图而已。
  775.         if c == "\031"
  776.           self.contents.blt(@pic_x,@pic_y,@pic,@pic.rect)
  777.           next
  778.         end
  779.         
  780.         # ======================== 以上加强部分 ========================
  781.         
  782.         # 自动换行模式
  783.         if @auto_newline
  784.           # 计算应该换行的最大X坐标
  785.           max_x = self.contents.width - 4
  786.           # 在右侧显示头像的时候,坐标应该左移让出头像的位置
  787.           if @right&&@show_head
  788.             max_x -= 104
  789.           end
  790.           # 并且文字已经超出了显示宽度
  791.           if @x+self.contents.text_size(c).width+4 > max_x
  792.             # 增加一个换行符号,并且将本次准备显示的字符放到下一行
  793.             @text = "\n" + c + @text
  794.             # 跳过这次绘制文字
  795.             next
  796.           end
  797.         end
  798.         
  799.         # 描绘文字
  800.         self.contents.draw_text_s(4+@x,@height*@y, @height, @height, c)
  801.         # x 为描绘文字宽度进行自增运算,计算下一个文字起始位置
  802.         @x += self.contents.text_size(c).width
  803.          
  804.         # 操作了@type_mode个字符后就退出循环了,@type_mode为负则操作一次完成
  805.         i-=1
  806.         if i==0
  807.           break
  808.         end
  809.       
  810.       end
  811.     end
  812.    
  813.     # 如果@text处理结束了
  814.     if @text==nil or @text==""
  815.       # 设置结束标志
  816.       @finish=true
  817.     end
  818.   end
  819. end
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
18 小时
注册时间
2009-7-25
帖子
411
4
发表于 2009-8-3 13:59:49 | 只看该作者
头像的存放地方在Graphics\Characters\head      大小是100X100
命名的方式gpra_001.png
               gpra_001_叹气.png
数字可改,中文也可改,1为1号角色,
使用方式\h[001]\L
显示头像在左边,且自动显示名字
\f[叹气]\h[001]
显示叹气的头像- -
---------------------------------------------------------------------------------------------------------------
特色功能简述:
头像显示(100*100漫画风格"小"头像,放在对话框里)
可以加宽加长默认对话文字输入框
图书显示效果以及全屏显示效果
读取TXT文本载入对话内容
自动关闭对话以及打字/停顿效果
物品技能等图标名称显示
等等……
一切尽在加强中,只要在大家的支持建议下,这个脚本会越来越多功能,越来越完美!
欢迎有好的建议,或者发现有BUG联系我。

苹果梨·对话加强脚本!

完全自制的脚本,所以请尊重版权什么的就是。
大部分重构了Window_Message教本块的refresh等函数,并且加上了大量注释方便学习或者更改。
功能介绍:

默认功能不加缀述

\C[#RRGGBB] 直接设定RGB文字颜色。(摘录改编自SailCat的对话脚本)

\I[n]    物品图标+名称显示,显示ID为n的物品的图标以及名称。
\K[n]    技能图标+名称显示,类似上面。
\W[n]    武器图标+名称显示,类似上面。
\D[n]    防具图标+名称显示,类似上面。
\I1[n]    物品图标显示,显示ID为n的物品的图标。
\K1[n]    技能图标显示,类似上面。
\W1[n]    武器图标显示,类似上面。
\D1[n]    防具图标显示,类似上面。
\I2[n]    物品名称显示,显示ID为n的物品的名称。
\K2[n]    技能名称显示,类似上面。
\W2[n]    武器名称显示,类似上面。
\D2[n]    防具名称显示,类似上面。

因为统一字体好做一点,所以设定这两个修改字体的一句对话只能使用一次,一次对话使用多次此标志会出错(非致命错误)。
\S[n]    字体大小,修改字体大小为n(最大96;最小…不要过分就可以了…建议20以上…)
\O[n]    文字不透明度,修改文字不透明度为n(0~255,255为不透明)(模拟声音变小……)
注:游戏中会根据字体大小自动换行并屏蔽多于显示不了的行。

显示头像时会自动于头像下方显示人物姓名。
姓名以及头像出现位置由下面两个标志指定。未指定姓名时会自动显示角色ID对应姓名。
\L    指定头像左边显示,默认是右边。对话中会自动根据头像位置处理文字对齐。
\X    指定不要显示姓名,显示时名称会是“???”。
\X    带参数,指定显示姓名s,s为任意字串,可以嵌套使用\N[n]指令。

未使用\F指定表情时,打开"Graphics\character\head\gpra_n.*"图片文件显示头像。
使用\F指定表情时,打开"Graphics\character\head\gpra_n_s.*"图片文件显示头像。
例如:“测试!\f[流汗]\h[001]”将会显示"Graphics\character\head\gpra_001_流汗.png"作为头像并同时显示001号角色的姓名。
注:以上路径指相对路径。大家可以从示例工程中找找自己看看。

\F    指定表情,s为字符串。
\H[n]    显示头像,n为角色编号。这个编号对应的角色姓名会自动输出。
注:这里n是可长可短的(就是你写01也可以,打开“gpra_01.png”,角色还是指1号)。

\~ 连接下段对话内容到此次对话内容后面一起显示!(用于加长文字输入框?……)
例如输入的字串如下("\/"功能下面会讲到):
1111
2222
3333
4444\~\/
5555
其中("5555")是输入在第二个对话内容里的,但是显示的时候可以连接在第一个对话的后面为:
1111
2222
3333
44445555
这样就完全克服了对话框不够写的问题了!而且不需要去破解原来的RMXP程序!
可以直接使用统一文字输入功能(Ctrl+N)来写我们所要输出的文字了!

\/ 删除行尾换行符号!(用于加宽文字输入框?……)
大家知道RMXP在我们输入的对话每行后面自动添加一个换行符,我们是想要删除这个换行符的所以制作了这个功能来删除那个换行符。
注意:必须在行尾使用!不在行尾使用的将视为无效字符直接删掉。

等待效果用于制作说话时的思考停顿效果,或者一字一顿那样的效果。
\=[n] 等待n帧
\. 等待3帧
\_ 等待30帧

\TXT[FileName][LineLabel] 打开TXT文件读入对话。FileName为文件名,LineLabel为行号(可选)。
将打开"Text\FileName.txt"文件读取对话,然后从LineLabel行号开始读取内容到下一个行号出现处。
LineLabel在TXT文本中用"["和"]"紧紧包括,左右不允许再有任何的字符。行号标签必须独占一行。
在TXT文本中,大多数以上标识符仍然有效。但是需要注意,读取TXT文本后必须用正常方式(就是指非TXT文本方式)结束对话,不然会陷于死循环无法中指对话,可行的办法就是利用"\~\/"来进行一次“空对话”!
参照示例工程,这个使用我真的讲不清楚……

以下功能利用系统变量完成
0001:对话显示模式,此变量设定值影响对话显示模式:0.正常模式 1.图书模式 2.全屏模式。
0002:对话自动关闭,设定正数n表示对话n帧后自动关闭,设定0或负数表示关闭此效果。
0003:对话打字效果,设定正数n表示对话每帧显示出n个字符,设定0或负数表示关闭此效果。

示例工程,比较简朴啦……:
效果截图(比较大,请耐心等待……):
回复 支持 反对

使用道具 举报

Lv1.梦旅人

青天

梦石
0
星屑
86
在线时间
232 小时
注册时间
2007-12-15
帖子
2091

开拓者

5
 楼主| 发表于 2009-8-4 23:05:47 | 只看该作者
我先试试看
唉,将就着用吧
谁叫自己没能力写个脚本呢
开坑准备中
回复 支持 反对

使用道具 举报

Lv1.梦旅人

青天

梦石
0
星屑
86
在线时间
232 小时
注册时间
2007-12-15
帖子
2091

开拓者

6
 楼主| 发表于 2009-8-4 23:07:00 | 只看该作者
怎么认可的?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
18 小时
注册时间
2009-7-25
帖子
411
7
发表于 2009-8-4 23:10:39 | 只看该作者
http://rpg.blue/viewthread.php?tid=130319
-----------------------------------------
1:放上这贴子的连接
2.认可:XXX
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-15 14:01

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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