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

Project1

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

Sherryx整合脚本里的FUKI对话框

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-6-23
帖子
12
跳转到指定楼层
1
发表于 2008-7-7 04:05:04 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽

Lv1.梦旅人

梦石
0
星屑
75
在线时间
386 小时
注册时间
2007-7-27
帖子
4106

开拓者

6
发表于 2008-7-8 16:18:46 | 只看该作者
其实你可以找作者的……
给“天圣的马甲”这个ID发论坛短信即可……
(于是我被天圣PIA飞……)
吸吸
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-6-23
帖子
12
5
 楼主| 发表于 2008-7-8 08:13:38 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-6-23
帖子
12
4
 楼主| 发表于 2008-7-8 04:02:13 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2007-8-18
帖子
701
3
发表于 2008-7-7 04:54:29 | 只看该作者
恩,换脚本可行,或者加个if判断。。。
笑天下谁是敌手,问千年谁主沉浮
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
4 小时
注册时间
2008-6-5
帖子
312
2
发表于 2008-7-7 04:51:53 | 只看该作者
使用这个脚本看看
  1. class Game_Event < Game_Character
  2. #===========================================================================
  3. # 便于返回姓名和修改姓名
  4. #===========================================================================
  5. def name
  6.    return @event.name
  7. end
  8. def name=(na)
  9.    @event.name = na
  10. end
  11. end
  12. #==============================================================================
  13. #
  14. #    呼出对话框 ver. 1.31 By パラ犬(日)
  15. #  来自 http://rpg.para.s3p.net/
  16. #
  17. #  汉化修改 66RPG bbschat(2006.1.5)
  18. #    来自 http://rpg.blue/web/
  19. #
  20. #    脚本更新:by KKME◎66RPG.com,2007年2月
  21. #
  22. #    脚本更新:by 绫晓露雪萌◎66RPG.com,2007年7月
  23. #
  24. #==============================================================================

  25. module FUKI

  26. # 头像图片保存目录的设定
  27. HEAD_PIC_DIR = "Graphics/Heads/"

  28. # 是否显示尾部图标
  29. TAIL_SHOW = true

  30. # Skin的设定
  31. # 使用数据库默认窗口Skin情况下这里使用[""]
  32. FUKI_SKIN_NAME = "001-Blue01"   # 呼出对话框用Skin
  33. NAME_SKIN_NAME = "001-Blue01"   # 角色名字窗口用Skin

  34. # 字体大小
  35. MES_FONT_SIZE = 19    # 呼出对话框
  36. NAME_FONT_SIZE = 14   # 角色名字窗口

  37. # 字体颜色
  38. #(设定为 Color.new(0, 0, 0, 0) 表示使用普通文字色)
  39. FUKI_COLOR = Color.new(0, 0, 0, 255)  # 呼出对话框
  40. NAME_COLOR = Color.new(0, 0, 0, 255)  # 角色名字窗口

  41. # 窗口透明度
  42. # 如修改窗口透明度请同时修改尾部箭头图形内部的透明度
  43. FUKI_OPACITY = 255    # 呼出对话框
  44. MES_OPACITY = 255     # 默认信息窗口
  45. NAME_OPACITY = 255    # 角色名字窗口

  46. # 角色名字窗口的相对位置
  47. NAME_SHIFT_X = 0      # 横坐标
  48. NAME_SHIFT_Y = 16     # 纵坐标

  49. # 窗口表示时是否根据画面大小自动检查窗口出现的位置,
  50. # 自动改变位置( true / false )
  51. # 设置成 true 在某些变态情况下可能出现箭头图标颠倒的问题 <- bbschat <= KKME
  52. POS_FIX = true

  53. # 在画面最边缘表示时的稍微挪动
  54. # 使用圆形Skin的角和方框的角重合的情况下为 true
  55. CORNER_SHIFT = false
  56. SHIFT_PIXEL = 4   # true 时挪动的象素

  57. # 角色高度尺寸
  58. CHARACTOR_HEIGHT = 108
  59. # 呼出对话框的相对位置(纵坐标)
  60. POP_SHIFT_TOP = 0         # 表示位置为上的时候
  61. POP_SHIFT_UNDER = 2       # 表示位置为下的时候

  62. # 信息的表示速度(数字越小速度越快,0为瞬间表示)
  63. # 游戏中 可随时用数字代入 $mes_speed 来改变消息表示速度。
  64. MES_SPEED = 1

  65. end


  66. #==============================================================================
  67. # 初始化两个变量,不要动(by KKME◎66RPG.com)
  68. #==============================================================================
  69. $mes_name = ""
  70. $mes_id   = nil


  71. #==============================================================================
  72. # 方便用户同时设置2个常用参数而使用的函数
  73. #==============================================================================
  74. def chat(id = nil,name = "")
  75. $mes_id = id
  76. $mes_name = name
  77. end

  78. #==============================================================================
  79. # □ Game_Temp
  80. #==============================================================================

  81. class Game_Temp
  82. attr_accessor  :namebmp              #保存头像图片的Hash表
  83. alias initialize_fuki initialize
  84. def initialize
  85.    initialize_fuki
  86.    # 如果不想使用角色名字直接作为头像文件名
  87.    # 可在这里重新设定角色名字与文件名的对应关系
  88.    @namebmp ={"玩家"=>"维斯特"}
  89. end
  90. end

  91. #==============================================================================
  92. # □ Window_Message
  93. #==============================================================================

  94. class Window_Message < Window_Selectable

  95. #--------------------------------------------------------------------------
  96. # ● 初始化状态
  97. #--------------------------------------------------------------------------
  98. def initialize
  99.    super(80, 304, 480, 160)
  100.    self.contents = Bitmap.new(width - 32, height - 32)
  101.    self.contents.font.color = text_color(0)
  102.    self.visible = false
  103.    self.z = 9998
  104.    @fade_in = false
  105.    @fade_out = false
  106.    @contents_showing = false
  107.    @cursor_width = 0
  108.    @kkme_name = ""
  109.    self.active = false
  110.    self.index = -1
  111.    @w = 0
  112.    @h = 0
  113.    @wait = 0
  114.    @dx = 0
  115.    @dy = 0
  116.    $mes_speed = FUKI::MES_SPEED
  117.    
  118.    #------------------------
  119.    # ★ 特殊时期中断标志
  120.    #------------------------
  121.    @no_term_stop = false
  122.    @save_x = 0
  123.    @save_y = 0
  124.    @old_text_info = []
  125. end

  126. #--------------------------------------------------------------------------
  127. # ○ 决定窗口尺寸并生成窗口
  128. #--------------------------------------------------------------------------
  129. def refresh_create
  130.    unless @no_term_stop
  131.      @pic_skin.dispose if @pic_skin != nil
  132.    end
  133.      @kkme_name = ""
  134.      begin
  135.        @kkme_name = $game_temp.message_text.split(":")[0] if $game_temp.message_text.split(":")[1] != nil
  136.        if @kkme_name != ""
  137.          jiajia = '\c[1]【' + @kkme_name + '】\c[0]'
  138.          $game_temp.message_text = jiajia + $game_temp.message_text[@kkme_name.size + 2,$game_temp.message_text.size]
  139.       else
  140.          $game_temp.message_text =$game_temp.message_text #'\c[0]' + $game_temp.message_text
  141.        end      
  142.      rescue
  143.      end
  144.    unless @no_term_stop
  145.      self.contents.clear
  146.      self.contents.font.color = Color.new(0, 0, 0, 255)
  147.      self.contents.font.size = FUKI::MES_FONT_SIZE
  148.      # 取得窗口尺寸
  149.      get_windowsize
  150.      w = @w + 32 + 8
  151.      h = @h * (self.contents.font.size + 10) + 26
  152.      # 生成呼出窗口   
  153.      # 生成角色名字窗口
  154.      set_fukidasi(self.x, self.y, w, h)
  155.      set_namewindow
  156.      pic_back
  157.    end
  158.    # 初始化信息表示使用的变量
  159.    @dx = @save_x # 0
  160.    @dy = @save_y # 0
  161.    @cursor_width = 0
  162.    @contents_drawing = true
  163.    update
  164.    # 瞬间表示的情况下
  165.    if $mes_speed == 0
  166.      # 循环信息描绘处理
  167.      while $game_temp.message_text != ""
  168.        draw_massage
  169.      end
  170.      draw_opt_text
  171.      @contents_showing_end = true
  172.      @contents_drawing = false
  173.    else
  174.      # 一个一个描绘文字
  175.      refresh_drawtext
  176.    end
  177. end

  178. #--------------------------------------------------------------------------
  179. # ○ 一个一个描绘文字
  180. #--------------------------------------------------------------------------
  181. def refresh_drawtext
  182.    if $game_temp.message_text != nil
  183.      if @wait > 0
  184.        @wait -= 1
  185.      elsif @wait == 0
  186.        # 描绘处理
  187.        draw_massage
  188.        @wait = $mes_speed
  189.      end
  190.    end
  191.    # 描绘结束
  192.    if $game_temp.message_text == ""
  193.      draw_opt_text
  194.      @contents_showing_end = true
  195.      @contents_drawing = false
  196.    end
  197. end

  198. #--------------------------------------------------------------------------
  199. # ○ 取得窗口尺寸
  200. #--------------------------------------------------------------------------
  201. def get_windowsize
  202.    x = y = 0
  203.    @h = @w = 0
  204.    @cursor_width = 0
  205.    # 有选择项的话,处理字的缩进
  206.    if $game_temp.choice_start == 0
  207.      x = 16
  208.    end
  209.    # 有等待显示的文字的情况下
  210.    if $game_temp.message_text != nil
  211.    text = $game_temp.message_text.clone
  212.      # 限制文字处理
  213.      begin
  214.        last_text = text.clone
  215.        text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  216.      end until text == last_text
  217.      text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  218.        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  219.      end
  220.      # 为了方便、将 "\\\\" 变换为 "\000"
  221.      text.gsub!(/\\\\/) { "\000" }
  222.      # "\\C" 变为 "\001" 、"\\G" 变为 "\002"
  223.      text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001" }
  224.      text.gsub!(/\\[Gg]/) { "\002" }
  225.      # c 获取 1 个字 (如果不能取得文字就循环)
  226.      while ((c = text.slice!(/./m)) != nil)
  227.        # \\ 的情况下
  228.        if c == "\000"
  229.          # 还原为本来的文字
  230.          c = "\\"
  231.        end
  232.        # \C[n] 或者 \G 的情况下
  233.        if c == "\001" or c == "\002"
  234.          # 下面的文字
  235.          next
  236.        end
  237.        # 另起一行文字的情况下
  238.        if c == "\n"
  239.          # y 累加 1
  240.          y += 1
  241.          # 取得纵横尺寸
  242.          @h = y
  243.          @w = x > @w ? x : @w
  244.          if y >= $game_temp.choice_start
  245.            @w = x + 8 > @w ? x + 8 : @w
  246.          end
  247.          x = 0
  248.          # 移动到选择项的下一行
  249.          if y >= $game_temp.choice_start
  250.            x = 8
  251.          end
  252.          # 下面的文字
  253.          next
  254.        end
  255.        # x 为要描绘文字的宽度加法运算
  256.        x += self.contents.text_size(c).width
  257.      end
  258.    end
  259.    # 输入数值的情况
  260.    if $game_temp.num_input_variable_id > 0
  261.      digits_max = $game_temp.num_input_digits_max
  262.      number = $game_variables[$game_temp.num_input_variable_id]
  263.      @h += 1
  264.      x = digits_max * self.contents.font.size + 16
  265.      @w = x > @w ? x : @w
  266.    end
  267. end

  268. #--------------------------------------------------------------------------
  269. # ○ 描绘信息处理
  270. #--------------------------------------------------------------------------
  271. def draw_massage
  272.    # 有等待显示的文字的情况下
  273.    if $game_temp.message_text != nil or @old_text_info != nil
  274.      text = $game_temp.message_text
  275.      # 限制文字处理
  276.      begin
  277.        last_text = text.clone
  278.        text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  279.      end until text == last_text
  280.      text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  281.        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  282.      end
  283.      # 为了方便、将 "\\\\" 变换为 "\000"
  284.      text.gsub!(/\\\\/) { "\000" }
  285.      # "\\C" 变为 "\001"、"\\G" 变为 "\002"
  286.      text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  287.      text.gsub!(/\\[Gg]/) { "\002" }
  288.      # c 获取 1 个字
  289.      c = text.slice!(/./m)
  290.      # 选择项的情况 修改
  291.      if @dy >= $game_temp.choice_start
  292.        self.contents.font.color = Color.new(0, 0, 0, 255)
  293.        # 处理字的缩进
  294.        @dx = 8
  295.        # 描绘文字
  296.        self.contents.draw_text(4 + @dx, 32 * @dy, 40, 32, c)
  297.        # x 为要描绘文字宽度的加法运算
  298.        @dx += self.contents.text_size(c).width
  299.        # 循环
  300.        while ((c = text.slice!(/./m)) != "\n")
  301.          # 描绘文字
  302.          self.contents.draw_text(4 + @dx, 32 * @dy, 40, 32, c)
  303.          # x 为要描绘文字宽度的加法运算
  304.          @dx += self.contents.text_size(c).width
  305.        end
  306.        if c == "\n"
  307.          # 更新光标宽度
  308.          @cursor_width = [@cursor_width, @dx].max
  309.          # dy 累加 1
  310.          @dy += 1
  311.          @dx = 0
  312.        end
  313.        return
  314.      end
  315.      # \\ 的情况下
  316.      if c == "\000"
  317.        # 还原为本来的文字
  318.        c = "\\"
  319.      end
  320.      #\C[n] 的情况下
  321.      if c == "\001"
  322.        # 更改文字色
  323.        text.sub!(/\[([0-9]+)\]/, "")
  324.        color = $1.to_i
  325.        if color >= 0 and color <= 7
  326.          self.contents.font.color = text_color(color)
  327.        end
  328.      end
  329.      # \G 的情况下
  330.      if c == "\002"
  331.        # ★生成金钱窗口★
  332.        @contents_showing_end = true
  333.        @contents_drawing = false
  334.        terminate_messageX
  335.        @save_x = @dx
  336.        @save_y = @dy
  337.      end
  338.      # 另起一行文字的情况下
  339.      if c == "\n"
  340.        # dy 累加 1
  341.        @dy += 1
  342.        @dx = 0
  343.      end
  344.      # 描绘文字
  345.      
  346.      size_zy = 6 # 设定文字动态增大——别问我这么重要的参数为什么放在这里而不放在顶部,有特殊原因的。
  347.      
  348.      
  349.      unless @old_text_info == []
  350.        self.contents.fill_rect (4 + @old_text_info[0], (@old_text_info[2]+10-size_zy)*@old_text_info[1] - size_zy/2 ,@old_text_info[2],@old_text_info[2],Color.new(0,0,0,0))
  351.        col = self.contents.font.color.clone
  352.        self.contents.font.color = @old_text_info[3].clone
  353.        self.contents.font.size = @old_text_info[2] -= size_zy
  354.        self.contents.draw_text(4 + @old_text_info[0], (@old_text_info[2]+10)*@old_text_info[1],@old_text_info[2],@old_text_info[2],@old_text_info[4])
  355.        self.contents.font.color = col
  356.        @old_text_info = []
  357.      end
  358.      if c != nil
  359.        self.contents.font.size = FUKI::MES_FONT_SIZE
  360.        font_size = self.contents.font.size += size_zy
  361.        @old_text_info.push(@dx , @dy , font_size, self.contents.font.color.clone, c)
  362.        self.contents.draw_text(4+@dx, (font_size+10-size_zy)*@dy - size_zy/2, font_size, font_size, c)
  363.        self.contents.font.size -= size_zy
  364.        # dx 为要描绘文字的宽度加法运算
  365.        @dx += self.contents.text_size(c).width
  366.      end
  367.    end
  368. end

  369. #--------------------------------------------------------------------------
  370. # ○ 选择项和输入数值的情况下
  371. #--------------------------------------------------------------------------
  372. def draw_opt_text
  373.    # 选择项的情况下
  374.    if $game_temp.choice_max > 0
  375.      @item_max = $game_temp.choice_max
  376.      self.active = true
  377.      self.index = 0
  378.    end
  379.    # 输入数值的情况下
  380.    if $game_temp.num_input_variable_id > 0
  381.      digits_max = $game_temp.num_input_digits_max
  382.      number = $game_variables[$game_temp.num_input_variable_id]
  383.      @input_number_window = Window_InputNumber.new(digits_max)
  384.      @input_number_window.number = number
  385.      @input_number_window.x = self.x + 8
  386.      @input_number_window.y = self.y + $game_temp.num_input_start * 32
  387.    end
  388. end

  389. def pic_back
  390.    @pic_skin.dispose if @pic_skin != nil
  391.    @pic_skin = Sprite.new
  392.    @pic_skin.opacity = 0 unless @no_term_stop
  393.    @pic_skin.bitmap = Bitmap.new(self.width + 35, self.height + 35)
  394.    @pic_skin.x = self.x + 2
  395.    @pic_skin.y = self.y + 2
  396.    @pic_skin.z = self.z
  397.    @pic_skin.bitmap.blt(0, 0, RPG::Cache.icon("message_左上"),  RPG::Cache.icon("message_左上").rect)
  398.    @pic_skin.bitmap.blt(self.width - 35, 0, RPG::Cache.icon("message_右上"),  RPG::Cache.icon("message_右上").rect)
  399.    @pic_skin.bitmap.blt(0, self.height - 35, RPG::Cache.icon("message_左下"),  RPG::Cache.icon("message_左下").rect)
  400.    @pic_skin.bitmap.blt(self.width - 35, self.height - 35, RPG::Cache.icon("message_右下"),  RPG::Cache.icon("message_右下").rect)
  401.    @pic_skin.bitmap.stretch_blt(Rect.new(0,35,35,self.height-70), RPG::Cache.icon("message_左"), RPG::Cache.icon("message_左").rect)
  402.    @pic_skin.bitmap.stretch_blt(Rect.new(self.width - 35,35,35,self.height-70), RPG::Cache.icon("message_右"), RPG::Cache.icon("message_右").rect)
  403.    @pic_skin.bitmap.stretch_blt(Rect.new(35,0,self.width-70,35), RPG::Cache.icon("message_上"), RPG::Cache.icon("message_上").rect)
  404.    @pic_skin.bitmap.stretch_blt(Rect.new(35,self.height-35,self.width-70,35), RPG::Cache.icon("message_下"), RPG::Cache.icon("message_下").rect)
  405.    @pic_skin.bitmap.stretch_blt(Rect.new(35,35,self.width-70,self.height-70), RPG::Cache.icon("message_中"), RPG::Cache.icon("message_中").rect)
  406. end
  407.    

  408. #--------------------------------------------------------------------------
  409. # ○ 设置呼出对话框
  410. #--------------------------------------------------------------------------
  411. def set_fukidasi(x, y, width, height)
  412.    begin
  413.      # 不显示暂停标志
  414.      self.pause = false
  415.      # 取得对话框位置
  416.      pos = get_fuki_pos(width, height)
  417.      x = pos[0]
  418.      y = pos[1]
  419.      skin = FUKI::FUKI_SKIN_NAME != "" ? FUKI::FUKI_SKIN_NAME : $game_system.windowskin_name
  420.      # 生成呼出对话框
  421.      self.windowskin = RPG::Cache.windowskin(skin)
  422.      self.x = x
  423.      self.y = y
  424.      self.height = height
  425.      self.width = width
  426.      #self.opacity = 0
  427.      
  428.      unless @no_term_stop
  429.        self.contents.dispose
  430.        self.contents = Bitmap.new(width - 32, height - 32)
  431.        self.back_opacity = FUKI::FUKI_OPACITY
  432.        self.contents.clear
  433.        self.contents.font.color = Color.new(0, 0, 0, 255)
  434.        self.contents.font.size = FUKI::MES_FONT_SIZE
  435.      end
  436.      # 描绘尾部图标
  437.      if $game_system.message_frame == 0
  438.        # 取得位置
  439.        tale_pos = get_tale_pos
  440.        @tale = Sprite.new
  441.        @tale.opacity = 200
  442.        # 是否显示尾部图标 <- bbschat
  443.        if FUKI::TAIL_SHOW == true
  444.          case @message_position
  445.            when 0  # 上
  446.              @tale.bitmap = RPG::Cache.icon("message_箭头")
  447.              @tale.x = tale_pos[0]
  448.              @tale.y = tale_pos[1]
  449.              @tale.z = self.z + 1
  450.            when 1  # 中
  451.              @tale.dispose
  452.              @tale = nil
  453.            when 2  # 下
  454.              @tale.bitmap = RPG::Cache.icon("message_箭头2")
  455.              @tale.x = tale_pos[0]
  456.              @tale.y = tale_pos[1]
  457.              @tale.z = self.z + 1
  458.          end
  459.        end
  460.      end
  461.    rescue
  462.      del_fukidasi
  463.      reset_window(width, height)
  464.    end
  465. end
  466. #--------------------------------------------------------------------------
  467. # ○ 新功能:根据输入文章计算呼出对话框的位置
  468. #--------------------------------------------------------------------------
  469. def get_character_KKME
  470.    if @kkme_name == "" or @kkme_name == nil
  471.      return nil
  472.    else
  473.      @kkme_name.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  474.        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  475.      end
  476.      $mes_name = @kkme_name
  477.      for ev in $game_map.events.values
  478.        if ev.name == @kkme_name
  479.          return ev
  480.        end
  481.      end
  482.      for actor in $game_party.actors
  483.        if actor.name == @kkme_name
  484.          return $game_player
  485.        end
  486.      end
  487.      return nil
  488.    end
  489. end
  490.    

  491. #--------------------------------------------------------------------------
  492. # ○ 计算呼出对话框的位置
  493. #--------------------------------------------------------------------------
  494. def get_fuki_pos(width, height)
  495.    
  496.    # 取得角色
  497.    if $mes_id != nil
  498.      @character = get_character($mes_id)
  499.    else
  500.      @character = get_character_KKME
  501.    end
  502.    
  503.    if @character == nil
  504.      # 角色不存在的情况下使用默认信息框
  505.      del_fukidasi
  506.      reset_window(width, height)
  507.      return
  508.    end
  509.    # 处理坐标
  510.    x = ( @character.real_x - $game_map.display_x + 64 ) * 32 / 128 - (width / 2)
  511.    # 为尽量显示在画面内而移动横坐标
  512.    if x + width > 640
  513.      x = 640 - width
  514.    elsif x < 0
  515.      x = 0
  516.    end
  517.    # 决定窗口位置
  518.    case $game_system.message_position
  519.      when 0  # 上
  520.        y = (@character.real_y - $game_map.display_y + 64) * 32 / 128 - height - FUKI::CHARACTOR_HEIGHT + FUKI::POP_SHIFT_TOP
  521.      when 1  # 中
  522.        y = (480 - height) / 2
  523.        x = (640 - width) / 2
  524.      when 2  # 下
  525.        y =  (@character.real_y - $game_map.display_y + 64) * 32 / 128 + 32 + FUKI::POP_SHIFT_UNDER
  526.    end
  527.    # 纪录文章显示位置
  528.    @message_position = $game_system.message_position
  529.    # 如果选择自动修正,则如果文章会显示到画面外则自动改变窗口的尺寸(高度)
  530.    if FUKI::POS_FIX
  531.      case @message_position
  532.        when 0  # 上
  533.          if y <= 0
  534.            @message_position = 2
  535.            y =  (@character.real_y - $game_map.display_y + 64) * 32 / 128 + 32 + FUKI::POP_SHIFT_UNDER
  536.          end
  537.        when 2  # 下
  538.          if y + height >= 480
  539.            @message_position = 0
  540.            y = (@character.real_y - $game_map.display_y + 64) * 32 / 128 - height - FUKI::CHARACTOR_HEIGHT + FUKI::POP_SHIFT_TOP
  541.          end
  542.      end
  543.    end
  544.    return [x,y]
  545.    
  546. end

  547. #--------------------------------------------------------------------------
  548. # ○ 计算尾部图标的位置
  549. #--------------------------------------------------------------------------
  550. def get_tale_pos
  551.    case @message_position
  552.      when 0  # 上
  553.        # 处理坐标
  554.        x = ( @character.real_x - $game_map.display_x + 64 ) * 32 / 128 - 16
  555.        # 画面边缘的话则移动位置
  556.        if FUKI::CORNER_SHIFT
  557.          if x == 0
  558.            x = FUKI::SHIFT_PIXEL
  559.          elsif x == 640 - 32
  560.            x = 640 - 32 - FUKI::SHIFT_PIXEL
  561.          end
  562.        end
  563.        y = self.y + self.height - 16
  564.      when 1  # 中
  565.        x = nil
  566.        y = nil
  567.      when 2  # 下
  568.        # 处理坐标
  569.        x = ( @character.real_x - $game_map.display_x + 64 ) * 32 / 128 - 16
  570.        # 画面边缘的话则移动位置
  571.        if FUKI::CORNER_SHIFT
  572.          if x == 0
  573.            x = FUKI::SHIFT_PIXEL
  574.          elsif @tale.x == 640 - 32
  575.            x = 640 - 32 - FUKI::SHIFT_PIXEL
  576.          end
  577.        end
  578.        y = self.y - 16
  579.    end
  580.    return [x+8, y+10]
  581. end

  582. #--------------------------------------------------------------------------
  583. # ○ 计算名字窗口的位置
  584. #--------------------------------------------------------------------------
  585. def get_name_pos
  586.    case @face_pic_txt
  587.      when 0  # 文字
  588.        x = self.x + FUKI::NAME_SHIFT_X
  589.        y = self.y - FUKI::NAME_FONT_SIZE - 16 + FUKI::NAME_SHIFT_Y
  590.      when 1  # 图片
  591.        if self.x >= @pic_width + 5
  592.          # 默认头像显示在对话框左边
  593.          x = self.x-@pic_width-5
  594.        else
  595.          # 对话框左边放不下时头像显示在右边
  596.          x = self.x + self.width
  597.        end
  598.        y = self.y+self.height/2 - (@pic_height + 5)/2
  599.      end

  600.    return [x,y]
  601. end

  602. #--------------------------------------------------------------------------
  603. # ○ 设置角色名字窗口
  604. #--------------------------------------------------------------------------
  605. def set_namewindow
  606.    
  607.    # $mes_name为空时不显示角色名字窗口
  608.    if $mes_name == nil or $mes_name == ""
  609.      return
  610.    else
  611.      # 设定变量
  612.      mes_name = $mes_name
  613.      skin = FUKI::NAME_SKIN_NAME != "" ? FUKI::NAME_SKIN_NAME : $game_system.windowskin_name
  614.      
  615.      #判断名称是否有对应的图片"Graphics/heads/" +
  616.      if $game_temp.namebmp[mes_name] == nil then
  617.        sFile = "Graphics/heads/" + mes_name + ".png"
  618.      else
  619.        sFile = "Graphics/heads/" + $game_temp.namebmp[mes_name] + ".png"
  620.      end
  621.      
  622.      #if FileTest.exist?(sFile) == true then
  623.      begin
  624.                
  625.        @face_pic_txt = 1                       #名字窗口使用头像<- bbschat
  626.       
  627.        # 生成头像
  628.        bmp = Bitmap.new(sFile)
  629.        @pic_width = bmp.width
  630.        @pic_height = bmp.height
  631.       
  632.        self.width += @pic_width
  633.       
  634.        if self.x >= @pic_width + 5
  635.          # 默认头像显示在对话框左边
  636.          name_x = self.x-@pic_width-5
  637.        else
  638.          # 对话框左边放不下时头像显示在右边
  639.          name_x = self.x + self.width
  640.        end
  641.        name_y = self.y+self.height/2 - (@pic_height + 5)/2
  642.       
  643.        # 生成角色头像窗口
  644.        #@name_win = Window_Base.new(name_x, name_y, @pic_width + 5, @pic_height + 5)
  645.        #@name_win.windowskin = RPG::Cache.windowskin(skin)
  646.        #@name_win.opacity =0     
  647.        #@name_win.z = self.z + 1
  648.        @name_contents.dispose if @name_contents != nil
  649.        @name_contents = Sprite.new
  650.        @name_contents.x = self.x + self.width - bmp.width
  651.        @name_contents.y = name_y - 7
  652.        @name_contents.bitmap = bmp
  653.        @name_contents.z = self.z + 3
  654.        @name_contents.opacity = 0
  655.        #self.width += 50
  656.        #@name_contents.z = @name_win.z + 2     #这个用了似乎效果不好<- bbschat
  657.       
  658.      rescue
  659.      end
  660.    end

  661. end

  662. #--------------------------------------------------------------------------
  663. # ○ 释放呼出对话框和角色名字窗口
  664. #--------------------------------------------------------------------------
  665. def del_fukidasi
  666.    if @tale != nil
  667.      @tale.dispose
  668.      @tale = nil
  669.    end
  670.    if @name_win != nil
  671.      @name_win.dispose
  672.      @name_win = nil
  673.      @name_contents.dispose
  674.      @name_contents = nil
  675.    end
  676.    self.opacity = 0
  677.    self.x = 90
  678.    self.width = 460
  679.    self.height = 120
  680.    self.contents.dispose
  681.    self.contents = Bitmap.new(width - 32, height - 32)
  682.    self.pause = true
  683. end

  684. #--------------------------------------------------------------------------
  685. # ○ 取得角色
  686. #     parameter : 参数
  687. #--------------------------------------------------------------------------
  688. # def get_character(parameter)
  689.    # 参数分歧
  690. #   case parameter
  691. #   when -1  # 玩家
  692.   #   return $game_player
  693. #  when 0   # 该事件
  694. #    events = $game_map.events
  695. #    return events == nil ? nil : events[$active_event_id]
  696. #  else     # 特定事件
  697. #    events = $game_map.events
  698. #    return events == nil ? nil : events[parameter]
  699. #  end
  700. # end
  701.   #-------------------------------------------------------------------
  702. # ○ 取得角色
  703. #     parameter : 参数
  704. #-------------------------------------------------------------------
  705. def get_character(parameter)
  706. # 参数分歧
  707. case parameter
  708. when -1  # 玩家
  709.    return $game_player
  710. when 0   # 该事件
  711.    events = $game_map.events
  712.    return events == nil ? nil : events[$active_event_id]
  713. else     # 特定事件
  714.    if parameter >0
  715.      events = $game_map.events
  716.      return events == nil ? nil : events[parameter]
  717.    else
  718.      $game_party.return_char(-parameter-2)
  719.    end
  720. end
  721. end

  722. #--------------------------------------------------------------------------
  723. # ● 设定窗口位置和不透明度
  724. #--------------------------------------------------------------------------
  725. def reset_window(width = nil, height = nil)
  726.    if $game_temp.in_battle
  727.      self.y = 16
  728.    else
  729.      case $game_system.message_position
  730.      when 0  # 上
  731.        self.y = 16
  732.      when 1  # 中
  733. #      if height != nil and width != nil
  734.    #      self.y = (480 - height) / 2 - 32
  735.    ##      self.x = (640 - width) / 2
  736.     #     self.width = width
  737.    #      self.height = height
  738.    #      self.contents.dispose
  739.    #      self.contents = Bitmap.new(width - 32, height - 32)
  740.    #    else
  741.          self.y = 160
  742.     #   end
  743.      when 2  # 下
  744.        self.y = 324
  745.      end
  746.    end
  747.    #if $game_system.message_frame == 0
  748.      #self.opacity = 255
  749.    #else
  750.      self.opacity = 0
  751.    #end
  752.    self.back_opacity = FUKI::MES_OPACITY
  753. end

  754. #--------------------------------------------------------------------------
  755. # ● 刷新画面
  756. #--------------------------------------------------------------------------
  757. def update
  758.    super
  759.    #if @no_term_stop
  760.      #terminate_messageX      
  761.    #end
  762.    
  763.    # 呼出模式下跟随事件移动
  764.    if @tale != nil
  765.      pos = get_fuki_pos(self.width, self.height)
  766.      self.x = pos[0]
  767.      self.y = pos[1]

  768.      tale_pos = get_tale_pos
  769.      @tale.x = tale_pos[0]
  770.      @tale.y = tale_pos[1]
  771.    
  772.      @pic_skin.x = self.x + 2
  773.      @pic_skin.y = self.y + 2
  774.      if @name_contents != nil and !@name_contents.disposed?
  775.      @name_contents.x = self.x + self.width - @name_contents.bitmap.width - 22
  776.      @name_contents.y = self.y + self.height - @name_contents.bitmap.height - 6
  777.      end
  778.    
  779.      if @name_win != nil
  780.        name_pos = get_name_pos
  781.        @name_win.x = name_pos[0]
  782.        @name_win.y = name_pos[1]
  783.        case @face_pic_txt
  784.          when 0  # 文字
  785.            @name_contents.x = @name_win.x + 12
  786.            @name_contents.y = @name_win.y + 8
  787.          when 1  # 图片
  788.            @name_contents.x = @name_win.x + 2
  789.            @name_contents.y = @name_win.y + 2
  790.          end
  791.      end
  792.    end
  793.    
  794.    # 渐变的情况下
  795.    if @fade_in
  796.      #if @no_term_stop
  797.        #@fade_in = false
  798.        #return
  799.      #else        
  800.        self.contents_opacity += 24
  801.        @pic_skin.opacity += 20
  802.        if @name_win != nil
  803.          @name_win.opacity += 24
  804.        end
  805.        if @tale != nil
  806.          @name_contents.opacity += 24 if @name_contents != nil and !@name_contents.disposed?
  807.          @tale.opacity += 20
  808.        end
  809.        if @input_number_window != nil
  810.          @input_number_window.contents_opacity += 24
  811.        end
  812.        if self.contents_opacity == 255
  813.          @fade_in = false
  814.        end
  815.        return
  816.      #end
  817.    end
  818.    # 显示信息中的情况下
  819.    if @contents_drawing
  820.      refresh_drawtext
  821.      return
  822.    end
  823.    # 输入数值的情况下
  824.    if @input_number_window != nil
  825.      @input_number_window.update
  826.      # 确定
  827.      if Input.trigger?(Input::C)
  828.        $game_system.se_play($data_system.decision_se)
  829.        $game_variables[$game_temp.num_input_variable_id] =
  830.          @input_number_window.number
  831.        $game_map.need_refresh = true
  832.        # 释放输入数值窗口
  833.        @input_number_window.dispose
  834.        @input_number_window = nil
  835.        terminate_message
  836.      end
  837.      return
  838.    end
  839.    # 显示信息结束的情况下
  840.    if @contents_showing_end
  841.      # 不是显示选择项且不是呼出对话模式则显示暂停标志
  842.      if $game_temp.choice_max == 0 and @tale == nil
  843.        self.pause = true
  844.      else
  845.        self.pause = false
  846.      end
  847.      # 取消
  848.      if Input.trigger?(Input::B)
  849.        if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
  850.          $game_system.se_play($data_system.cancel_se)
  851.          $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
  852.          terminate_message
  853.        end
  854.      end
  855.      # 确定
  856.      if Input.trigger?(Input::C)
  857.        if $game_temp.choice_max > 0
  858.          $game_system.se_play($data_system.decision_se)
  859.          $game_temp.choice_proc.call(self.index)
  860.        end
  861.        terminate_message
  862.        # 释放呼出窗口
  863.        del_fukidasi
  864.      end
  865.      return
  866.    end
  867.    # 在渐变以外的状态下有等待显示的信息与选择项的场合
  868.    if @fade_out == false and $game_temp.message_text != nil
  869.      @contents_showing = true
  870.      $game_temp.message_window_showing = true
  871.      reset_window
  872.      refresh_create
  873.      if @no_term_stop
  874.        self.visible = true        
  875.      else
  876.        if @name_win != nil
  877.          @name_win.opacity = 0
  878.        end
  879.        if @tale != nil
  880.          @tale.opacity = 0
  881.        end
  882.        Graphics.frame_reset
  883.        self.visible = true
  884.        self.contents_opacity = 0
  885.        if @input_number_window != nil
  886.          @input_number_window.contents_opacity = 0
  887.        end
  888.        @fade_in = true
  889.      end
  890.      return
  891.    end
  892.    
  893.    # 没有可以显示的信息、但是窗口为可见的情况下
  894.    unless @no_term_stop
  895.      if self.visible
  896.        @fade_out = true
  897.        self.opacity -= 48
  898.        @name_contents.opacity -= 48 if @name_contents != nil and !@name_contents.disposed?
  899.        @pic_skin.opacity -= 48 if @pic_skin != nil and !@pic_skin.disposed?
  900.        if @name_win != nil
  901.          @name_win.opacity -= 48        
  902.        end
  903.        if @tale != nil
  904.          @tale.opacity -= 48 if @tale != nil and [email protected]?
  905.        end
  906.        if (@name_contents == nil) or @name_contents.disposed? or (@name_contents.opacity == 0)
  907.          self.visible = false
  908.          @name_contents.dispose if @name_contents != nil
  909.          @pic_skin.dispose
  910.          @fade_out = false
  911.          $game_temp.message_window_showing = false
  912.          del_fukidasi
  913.        end
  914.        return
  915.      end
  916.    else
  917.      $game_temp.message_window_showing = false   
  918.    end
  919.    
  920. end

  921. #--------------------------------------------------------------------------
  922. # ● 释放
  923. #--------------------------------------------------------------------------
  924. def dispose
  925.    terminate_message
  926.    $game_temp.message_window_showing = false
  927.    if @input_number_window != nil
  928.      @input_number_window.dispose
  929.    end
  930.    super
  931. end

  932. #--------------------------------------------------------------------------
  933. # ● 信息结束处理
  934. #--------------------------------------------------------------------------
  935. def terminate_message
  936.    self.active = false
  937.    self.pause = false
  938.    self.index = -1
  939.    self.contents.clear
  940.    # 清除显示中标志
  941.    @contents_showing = false
  942.    @contents_showing_end = false
  943.    unless @kkme_name == "" or @kkme_name == nil
  944.      $mes_name = ""
  945.      @kkme_name = ""
  946.    end
  947.    # 呼叫信息调用
  948.    if $game_temp.message_proc != nil
  949.      $game_temp.message_proc.call
  950.    end
  951.    # 清除文章、选择项、输入数值的相关变量
  952.    $game_temp.message_text = nil
  953.    $game_temp.message_proc = nil
  954.    $game_temp.choice_start = 99
  955.    $game_temp.choice_max = 0
  956.    $game_temp.choice_cancel_type = 0
  957.    $game_temp.choice_proc = nil
  958.    $game_temp.num_input_start = 99
  959.    $game_temp.num_input_variable_id = 0
  960.    $game_temp.num_input_digits_max = 0
  961.    # 释放金钱窗口
  962.    if @gold_window != nil
  963.      @gold_window.dispose
  964.      @gold_window = nil
  965.    end
  966.    @no_term_stop = false
  967.    @save_x = 0
  968.    @save_y = 0
  969. end

  970. #--------------------------------------------------------------------------
  971. # ● ★信息结束处理★
  972. #--------------------------------------------------------------------------
  973. def terminate_messageX
  974.    self.active = false
  975.    self.pause = false
  976.    self.index = -1
  977.    # 清除显示中标志
  978.    @contents_showing = false
  979.    @contents_showing_end = false
  980.    # 呼叫信息调用
  981.    if $game_temp.message_proc != nil
  982.      $game_temp.message_proc.call
  983.    end
  984.    # 清除文章、选择项、输入数值的相关变量
  985.    $game_temp.message_text = nil
  986.    $game_temp.message_proc = nil
  987.    @no_term_stop = true
  988. end

  989. def clear
  990.    self.contents.clear   
  991.    @save_x = 0
  992.    @save_y = 0
  993. end
  994. #--------------------------------------------------------------------------
  995. # ● 刷新光标矩形
  996. #--------------------------------------------------------------------------
  997. def update_cursor_rect
  998.    if @index >= 0
  999.      n = $game_temp.choice_start + @index
  1000.      self.cursor_rect.set(8, n * 32, @cursor_width, 32)
  1001.    else
  1002.      self.cursor_rect.empty
  1003.    end
  1004. end
  1005. #--------------------------------------------------------------------------
  1006. # ● 取得普通文字色
  1007. #--------------------------------------------------------------------------
  1008. def normal_color
  1009.    nil_color = Color.new(0,0,0,255)
  1010.    if FUKI::FUKI_COLOR != nil_color
  1011.      color = FUKI::FUKI_COLOR
  1012.    else
  1013.      color = super
  1014.    end
  1015.    return color
  1016. end
  1017. end
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-8-8 18:13

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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