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

Project1

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

存檔擴展比較詭異的問題。。-V-

 关闭 [复制链接]

Lv1.梦旅人

空靈

梦石
0
星屑
50
在线时间
11 小时
注册时间
2006-7-27
帖子
521
跳转到指定楼层
1
发表于 2008-10-1 16:32:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
追加幾分。。-V-。。再問兩個問題。。-V-
----------------------------------------------------------------------
出現了一個比較詭異的問題。。雖然正常情況下是不會注意到。。-V-。。但是還是很問題。。-V-超囧的。。-V-
如圖。。

出現方法。。-V-。。光標指針放到第一個存檔欄裡面。。持續按下。。出現了。。-V-
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================
  4. class Scene_File
  5.   #——最大存档数量,一般我认为最多50足够了,20比较合适
  6.   SAVEFILE_MAX = 100
  7.   # -------------------
  8.   def initialize(help_text)
  9.     @help_text = help_text
  10.   end
  11.   # -------------------
  12.   def main
  13.     @help_window = Window_Help.new
  14.     @help_window.set_text(@help_text)
  15.     @savefile_windows = []
  16.     @cursor_displace = 0
  17.     for i in 0..3
  18.       @savefile_windows.push(Window_SaveFile.new(i, make_filename(i), i))
  19.     end
  20.     @file_index = 0
  21.     @savefile_windows[@file_index].selected = true
  22.    
  23.     #生成存档图片
  24.     @menu_com = Sprite.new
  25.     @menu_com.bitmap = RPG::Cache.picture("進度.png")
  26.    
  27.     Graphics.transition   
  28.     loop do
  29.       Graphics.update
  30.       Input.update
  31.       update
  32.       if $scene != self
  33.         break
  34.       end
  35.     end
  36.     Graphics.freeze
  37.     @help_window.dispose
  38.     for i in @savefile_windows
  39.       i.dispose
  40.     end
  41.   end
  42.   # -------------------
  43.   def update
  44.     # 刷新窗口
  45.     @help_window.update
  46.     for i in @savefile_windows
  47.       i.update
  48.     end
  49.     if Input.trigger?(Input::C)
  50.       on_decision(make_filename(@file_index))
  51.       $game_temp.last_file_index = @file_index
  52.       return
  53.     end
  54.     if Input.trigger?(Input::B)
  55.       on_cancel
  56.       return
  57.     end
  58.     if Input.repeat?(Input::DOWN)
  59.       if Input.trigger?(Input::DOWN) or @file_index < SAVEFILE_MAX - 1
  60.         if @file_index == SAVEFILE_MAX - 1
  61.           $game_system.se_play($data_system.buzzer_se)
  62.           return
  63.         end
  64.         @cursor_displace += 1
  65.         if @cursor_displace == 4
  66.           @cursor_displace = 3
  67.           for i in @savefile_windows
  68.             i.dispose
  69.           end
  70.           @savefile_windows = []
  71.           for i in 0..3
  72.             f = i - 2 + @file_index
  73.             name = make_filename(f)
  74.             @savefile_windows.push(Window_SaveFile.new(f, name, i))
  75.             @savefile_windows[i].selected = false
  76.           end
  77.         end
  78.         $game_system.se_play($data_system.cursor_se)
  79.         @file_index = (@file_index + 1)
  80.         if @file_index == SAVEFILE_MAX
  81.           @file_index = SAVEFILE_MAX - 1
  82.         end
  83.         for i in 0..3
  84.           @savefile_windows[i].selected = false
  85.         end
  86.         @savefile_windows[@cursor_displace].selected = true
  87.         return
  88.       end
  89.     end
  90.     if Input.repeat?(Input::UP)
  91.       if Input.trigger?(Input::UP) or @file_index > 0
  92.         if @file_index == 0
  93.           $game_system.se_play($data_system.buzzer_se)
  94.           return
  95.         end
  96.         @cursor_displace -= 1
  97.         if @cursor_displace == -1
  98.           @cursor_displace = 0
  99.           for i in @savefile_windows
  100.             i.dispose
  101.           end
  102.           @savefile_windows = []
  103.           for i in 0..3
  104.             f = i - 1 + @file_index
  105.             name = make_filename(f)
  106.             @savefile_windows.push(Window_SaveFile.new(f, name, i))
  107.             @savefile_windows[i].selected = false
  108.           end
  109.         end
  110.         $game_system.se_play($data_system.cursor_se)
  111.         @file_index = (@file_index - 1)
  112.         if @file_index == -1
  113.           @file_index = 0
  114.         end
  115.         for i in 0..3
  116.           @savefile_windows[i].selected = false
  117.         end
  118.         @savefile_windows[@cursor_displace].selected = true
  119.         return
  120.       end
  121.     end
  122.   end
  123.   # -------------------
  124.   def make_filename(file_index)
  125.     return "Save/Save#{file_index + 1}.rxdata"
  126.   end
  127.   # -------------------
  128. end




  129. class Window_SaveFile < Window_Base
  130.   # -------------------
  131.   def initialize(file_index, filename, position)
  132.     y = 64 + position * 104
  133.     super(0, y, 640, 104)
  134.     self.contents = Bitmap.new(width - 32, height - 32)
  135.     @file_index = file_index
  136.     @filename = "Save/Save#{@file_index + 1}.rxdata"
  137.     @time_stamp = Time.at(0)
  138.     @file_exist = FileTest.exist?(@filename)
  139.     if @file_exist
  140.       file = File.open(@filename, "r")
  141.       @time_stamp = file.mtime
  142.       @characters = Marshal.load(file)
  143.       @frame_count = Marshal.load(file)
  144.       @game_system = Marshal.load(file)
  145.       @game_switches = Marshal.load(file)
  146.       @game_variables = Marshal.load(file)
  147.       @total_sec = @frame_count / Graphics.frame_rate
  148.       file.close
  149.     end
  150.     self.opacity = 0
  151.     refresh
  152.     @selected = false
  153.   end
  154. end


  155. #==============================================================================
  156. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  157. #==============================================================================
复制代码


順便提一下。。進入遊戲後。。如果有進入過存檔畫面。。那么返回到標題畫面的時候。。竟然會顯示那張存檔的背景。。-V-。。再到標題畫面。。-V-。。好詭異。。-V-

版务信息:本贴由楼主自主结贴~

星星在哪里都是很亮的,就看你有沒有抬頭去看他們                       --------華麗麗的百變暖暖窩
本人之作《夙誓》龜速進行中。。= =!

Lv1.梦旅人

梦石
0
星屑
50
在线时间
2 小时
注册时间
2008-5-2
帖子
140
2
发表于 2008-10-1 18:30:03 | 只看该作者
在下水平有限,请前辈发工程,凭脚本在下看不出
回复 支持 反对

使用道具 举报

Lv1.梦旅人

空靈

梦石
0
星屑
50
在线时间
11 小时
注册时间
2006-7-27
帖子
521
3
 楼主| 发表于 2008-10-2 00:45:30 | 只看该作者
以下引用分子轨道理论于2008-10-1 10:30:03的发言:

在下水平有限,请前辈发工程,凭脚本在下看不出

工程啊。。-V-。。呃。。如果下一個人再看不懂再放吧。。-V-

星星在哪里都是很亮的,就看你有沒有抬頭去看他們                       --------華麗麗的百變暖暖窩
本人之作《夙誓》龜速進行中。。= =!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

孤独守望

梦石
0
星屑
3137
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

4
发表于 2008-10-2 00:56:50 | 只看该作者
用这个脚本,存档失败,提示找不到Save1。rxdata
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

Lv1.梦旅人

空靈

梦石
0
星屑
50
在线时间
11 小时
注册时间
2006-7-27
帖子
521
5
 楼主| 发表于 2008-10-2 01:14:07 | 只看该作者
    return "Save/Save#{file_index + 1}.rxdata"

請注意看這個。。

星星在哪里都是很亮的,就看你有沒有抬頭去看他們                       --------華麗麗的百變暖暖窩
本人之作《夙誓》龜速進行中。。= =!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

孤独守望

梦石
0
星屑
3137
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

6
发表于 2008-10-2 01:21:44 | 只看该作者
先解决第二个问题
37行    @help_window.dispose
改成
    @help_window.dispose
    @menu_com.dispose
前面一个我怎么也弄不出来OTZ,具体点的说明……
系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

Lv1.梦旅人

空靈

梦石
0
星屑
50
在线时间
11 小时
注册时间
2006-7-27
帖子
521
7
 楼主| 发表于 2009-6-12 08:00:00 | 只看该作者
以下引用IamI于2008-10-1 17:21:44的发言:

先解决第二个问题
37行    @help_window.dispose
改成
   @help_window.dispose
   @menu_com.dispose
前面一个我怎么也弄不出来OTZ,具体点的说明……
[本贴由作者于 2008-10-1 17:21:58 最后编辑]

先謝過第二個問題。。
前面一個難道是我RP。。-V-。。呃。。我是有鼠標腳本的。。今天改了些東西。。但是沒改之前也會這樣。。-V-呃。。就是鼠標指針放到進度一那一欄裡面。。持續按“↓”。。就出現了。。-V-

  1. #==============================================================================
  2. # ■ 完整鼠标系统(八方向)
  3. #------------------------------------------------------------------------------
  4. #  使用时务必配合专用寻路算法
  5. #   By whbm
  6. #==============================================================================
  7. #下面做一下介绍与使用说明:
  8. #    在屏幕上单击鼠标的时候,会自动进行寻路,这里为了速度更快并且为了进行迷
  9. #宫时的难度寻路被限定在当时的屏幕内部。(否则玩家直接点到终点,呵呵....知道
  10. #后果了吧)
  11. #    在角色移动过程中再次单击鼠标(即双击)并在单击第二次鼠标的时候不松手,
  12. #角色将会跟随鼠标方向移动。(这个应该好理解,不用多说吧)当角色贴着欲被启动
  13. #的事件的时候,单击NPC即可启动事件。若未贴着,将会产生自动寻路到NPC附近的某
  14. #点,那时在单击NPC即可。
  15. #    当鼠标停在某些事件上时候会发现有不同的图标,设置方法为:宝箱事件请在事
  16. #件的执行内容中添加 注释,注释内容为 Item 注意大小写。NPC事件请在事件的执行
  17. #内容中添加 注释注释内容为 NPC 注意大小写。若不箱改变某事件的图标,则不要写
  18. #那两个注释。
  19. #    当把脚本转到您工程的时候千万别忘了那个寻路用的脚本。
  20. #==============================================================================
  21. class Game_Event
  22.   attr_accessor :flag
  23. end

  24. #==============================================================================
  25. # ■ Game_Map
  26. #------------------------------------------------------------------------------
  27. #  处理地图的类。包含卷动以及可以通行的判断功能。
  28. # 本类的实例请参考 $game_map 。
  29. #==============================================================================
  30. class Game_Map
  31.   def show_rate(event)
  32.     return 1
  33.   end
  34.   #--------------------------------------------------------------------------
  35.   # ● 检查鼠标处是否有自定义的事件并返回类型
  36.   #--------------------------------------------------------------------------
  37.   def check_event_custom(mouse_x, mouse_y)
  38.     for event in $game_map.events.values #循环所有事件检查
  39.       rate =  show_rate(event)
  40.       event_width = (RPG::Cache.character(event.character_name,event.character_hue).width / $c3_每一步的帧数) * rate
  41.       event_height = (RPG::Cache.character(event.character_name,event.character_hue).height / 8) * rate
  42.       if mouse_x > event.screen_x - event_width / 2 and mouse_x < event.screen_x + event_width / 2 and mouse_y + 32 > event.screen_y + 32 - event_height and mouse_y + 32 < event.screen_y + 32
  43.         for i in 0...event.list.size
  44.           if event.list[i].parameters[0] == "Item" #类型判断
  45.             event.flag = 1
  46.           elsif event.list[i].parameters[0] == "Npc" #类型判断
  47.             event.flag = 2
  48.           else
  49.             event.flag = 0 if $game_player.get_mouse_sta != 2 #无标志
  50.           end
  51.           return event.flag #返回事件类型标志
  52.         end
  53.       end
  54.     end
  55.     return 0 if $game_player.get_mouse_sta != 2 #如果不是在跟随鼠标状态,则返回无标志
  56.     return $mouse_icon_id #使鼠标图不变化
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 检查鼠标处是否有事件可以开启
  60.   #--------------------------------------------------------------------------
  61.   def check_event_custom_start(mouse_x, mouse_y)
  62.     for event in $game_map.events.values #循环所有事件检查
  63.       #事件角色图片宽度、高度
  64.       rate =  show_rate(event)
  65.       event_width = (RPG::Cache.character(event.character_name,event.character_hue).width / $c3_每一步的帧数) * rate
  66.       event_height = (RPG::Cache.character(event.character_name,event.character_hue).height / 8) * rate
  67.       #判断是否鼠标在事件上
  68.       if mouse_x > event.screen_x - event_width / 2 and mouse_x < event.screen_x + event_width / 2 and mouse_y + 32 > event.screen_y + 32 - event_height and mouse_y + 32 < event.screen_y + 32
  69.         way_x = $game_player.x - event.x
  70.         way_y = $game_player.y - event.y
  71.         if [1,0,-1].include?($game_player.x-event.x) and [1,0,-1].include?($game_player.y-event.y)
  72.           for i in 0...event.list.size
  73.             if ["Item","Npc"].include?(event.list[i].parameters[0]) #当事件属于自定义事件
  74.               #判断主角朝向
  75.               if way_x == -1
  76.                 p_direction = 3 if way_y == -1
  77.                 p_direction = 6 if way_y == 0
  78.                 p_direction = 9 if way_y == 1
  79.               elsif way_x == 0
  80.                 p_direction = 2 if way_y == -1
  81.                 p_direction = 8 if way_y == 1
  82.               else
  83.                 p_direction = 1 if way_y == -1
  84.                 p_direction = 4 if way_y == 0
  85.                 p_direction = 7 if way_y == 1
  86.               end
  87.               event.start #开启事件
  88.               return 1, p_direction #返回即将开启事件以及角色朝向
  89.             end
  90.           end
  91.         end
  92.       end
  93.     end
  94.     return 0, 5 #返回不会开启事件以及角色朝向不变
  95.   end
  96.   #--------------------------------------------------------------------------
  97.   # ● 检查鼠标处是否存在自定义事件 for 寻路
  98.   #--------------------------------------------------------------------------
  99.   def check_event_custom_exist(mouse_x, mouse_y)
  100.     for event in $game_map.events.values #循环所有事件检查
  101.       #事件角色图片宽度、高度
  102.       rate =  show_rate(event)
  103.       event_width = (RPG::Cache.character(event.character_name,event.character_hue).width / $c3_每一步的帧数) * rate
  104.       event_height = (RPG::Cache.character(event.character_name,event.character_hue).height / 8) * rate
  105.       if mouse_x > event.screen_x - event_width / 2 and mouse_x < event.screen_x + event_width / 2 and mouse_y + 32 > event.screen_y + 32 - event_height and mouse_y + 32 < event.screen_y + 32
  106.         for i in 0...event.list.size
  107.           return 1, event if ["Item", "Npc"].include?(event.list[i].parameters[0]) #返回存在自定义事件以及事件体
  108.         end
  109.       end
  110.     end
  111.     return 0, event #返回不存在自定义事件,以及事件体
  112.   end
  113. end
  114. #-----------------------------------------------------
  115. #鼠标是否移动
  116. $mouse_move

  117. #=================以下两个用来调整战斗时的手感问题,可以自己试试。
  118. $敌人选框扩大 = 20
  119. $角色选框扩大 = 30

  120. #==============================================================================
  121. # ● API调用
  122. #==============================================================================
  123. $ShowCursor = Win32API.new("user32", "ShowCursor", 'i', 'l')
  124. $GetCursorPos = Win32API.new("user32", "GetCursorPos", 'p', 'i')
  125. $ScreenToClient = Win32API.new("user32", "ScreenToClient", 'ip', 'i')
  126. $GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, 'l')
  127. $Window_HWND = $GetActiveWindow.call
  128. $GetKeyState = Win32API.new("user32", "GetKeyState", 'i', 'i')
  129. module Mouse  
  130. LEFT = 0x01
  131. RIGHT = 0x02

  132. def self.init(sprite = nil)
  133.    $ShowCursor.call(0)
  134.    
  135.    @show_cursor = false
  136.    
  137.    @mouse_sprite = Sprite.new
  138.    @mouse_sprite.z = 99999
  139.    @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/光標')

  140.    @left_press = false
  141.    @right_press = false
  142.    @left_trigger = false
  143.    @right_trigger = false
  144.    @left_repeat = false
  145.    @right_repeat = false
  146.    @click_lock = false
  147.    
  148.    update
  149. end
  150. def self.exit
  151.    @mouse_sprite.bitmap.dispose
  152.    @mouse_sprite.dispose
  153.    @show_cursor = true
  154.    $ShowCursor.call(1)
  155. end
  156. def self.mouse_debug
  157.    return @mouse_debug.bitmap
  158. end
  159. def self.update
  160.    left_down = $GetKeyState.call(0x01)
  161.    right_down = $GetKeyState.call(0x02)
  162.    if Graphics.frame_count * 3 / Graphics.frame_rate != @total_sec
  163.      @total_sec = Graphics.frame_count * 3 / Graphics.frame_rate
  164.      @a = !@a
  165.    end
  166.    if $scene.is_a?(Scene_Map) == false
  167.      $mouse_icon_id = 0
  168.    end
  169.    if $mouse_icon_id != $mouse_icon_id_last
  170.      case $mouse_icon_id
  171.      when 1
  172.        if @a
  173.          @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/GetItem1')
  174.        else
  175.          @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/GetItem2')
  176.        end
  177.      when 2
  178.        if @a
  179.          @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/TalkTo1')
  180.        else
  181.          @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/TalkTo2')
  182.        end
  183.      when 11
  184.        @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/Mouse_LOWER_LEFT')
  185.      when 12
  186.        @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/Mouse_DOWN')
  187.      when 13
  188.        @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/Mouse_LOWER_RIGHT')
  189.      when 14
  190.        @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/Mouse_LEFT')
  191.      when 16
  192.        @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/Mouse_RIGHT')
  193.      when 17
  194.        @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/Mouse_UPPER_LEFT')
  195.      when 18
  196.        @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/Mouse_UP')
  197.      when 19
  198.        @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/Mouse_UPPER_RIGHT')
  199.      when 0
  200.        @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/光標')
  201.      end
  202.      $mouse_icon_id_last = $mouse_icon_id
  203.    end
  204.    @click_lock = false
  205.    mouse_x, mouse_y = self.get_mouse_pos
  206.    if @mouse_sprite != nil
  207.      @mouse_sprite.x = mouse_x
  208.      @mouse_sprite.y = mouse_y
  209.    end
  210.    if left_down[7] == 1
  211.      @left_repeat = (not @left_repeat)
  212.      @left_trigger = (not @left_press)
  213.      @left_press = true
  214.    else
  215.      @left_press = false
  216.      @left_trigger = false
  217.      @left_repeat = false
  218.    end
  219.    if right_down[7] == 1
  220.      @right_repeat = (not @right_repeat)
  221.      @right_trigger = (not @right_press)
  222.      @right_press = true
  223.    else
  224.      @right_press = false
  225.      @right_trigger = false
  226.      @right_repeat = false
  227.    end

  228.     if @mouse_sprite != nil
  229.     if @old_x != @mouse_sprite.x or @old_y != @mouse_sprite.y or
  230.       Mouse.press?(Mouse::LEFT) or
  231.       Mouse.press?(Mouse::RIGHT)
  232.       @waittime = 80
  233.       @mouse_sprite.opacity = 255
  234.       ###########
  235.       $mouse_move = true
  236.       ###########
  237.     end
  238.     @waittime -= 1 if @waittime != 0
  239.     @mouse_sprite.opacity -= 8 if @waittime == 0 and @mouse_sprite.opacity > 0
  240.     @old_x = @mouse_sprite.x
  241.     @old_y = @mouse_sprite.y
  242.      ###########
  243.      if @mouse_sprite.opacity < 100 or @waittime < 40   #这里是用透明度或者等待时间来判断鼠标是否正在使用中
  244.        $mouse_move = false
  245.        end
  246.        ###########
  247.     end
  248.    
  249.   end
  250. def self.get_mouse_pos
  251.    point_var = [0, 0].pack('ll')
  252.    if $GetCursorPos.call(point_var) != 0
  253.      if $ScreenToClient.call($Window_HWND, point_var) != 0
  254.        x, y = point_var.unpack('ll')
  255.        if (x < 0) or (x > 10000) then x = 0 end
  256.        if (y < 0) or (y > 10000) then y = 0 end
  257.        if x > 640 then x = 640 end
  258.        if y > 480 then y = 480 end
  259.        return x, y
  260.      else
  261.        return 0, 0
  262.      end
  263.    else
  264.      return 0, 0
  265.    end
  266. end
  267. def self.press?(mouse_code)
  268.    if mouse_code == LEFT
  269.      if @click_lock
  270.        return false
  271.      else
  272.        return @left_press
  273.      end
  274.    elsif mouse_code == RIGHT
  275.      return @right_press
  276.    else
  277.      return false
  278.    end
  279. end
  280. def self.trigger?(mouse_code)
  281.    if mouse_code == LEFT
  282.      if @click_lock
  283.        return false
  284.      else
  285.        return @left_trigger
  286.      end
  287.    elsif mouse_code == RIGHT
  288.      return @right_trigger
  289.    else
  290.      return false
  291.    end
  292. end
  293. def self.repeat?(mouse_code)
  294.    if mouse_code == LEFT
  295.      if @click_lock
  296.        return false
  297.      else
  298.        return @left_repeat
  299.      end
  300.    elsif mouse_code == RIGHT
  301.      return @right_repeat
  302.    else
  303.      return false
  304.    end
  305. end
  306. def self.click_lock?
  307.    return @click_lock
  308. end
  309. def self.click_lock
  310.    @click_lock = true
  311. end
  312. def self.click_unlock
  313.    @click_lock = false
  314. end
  315. end
  316. module Input
  317. if @self_update == nil
  318.    @self_update = method('update')
  319.    @self_press = method('press?')
  320.    @self_trigger = method('trigger?')
  321.    @self_repeat = method('repeat?')
  322. end
  323. def self.update
  324.    @self_update.call
  325.    Mouse.update
  326. end
  327. def self.press?(key_code)
  328.    if @self_press.call(key_code)
  329.      return true
  330.    end
  331.    if key_code == C
  332.      return Mouse.press?(Mouse::LEFT)
  333.    elsif key_code == B
  334.      return Mouse.press?(Mouse::RIGHT)
  335.    else
  336.      return @self_press.call(key_code)
  337.    end
  338. end
  339. def self.trigger?(key_code)
  340.    if @self_trigger.call(key_code)
  341.      return true
  342.    end
  343.    if key_code == C
  344.      return Mouse.trigger?(Mouse::LEFT)
  345.    elsif key_code == B
  346.      return Mouse.trigger?(Mouse::RIGHT)
  347.    else
  348.      return @self_trigger.call(key_code)
  349.    end
  350. end
  351. def self.repeat?(key_code)
  352.    if @self_repeat.call(key_code)
  353.      return true
  354.    end
  355.    if key_code == C
  356.      return Mouse.repeat?(Mouse::LEFT)
  357.    elsif key_code == B
  358.      return Mouse.repeat?(Mouse::RIGHT)
  359.    else
  360.      return @self_repeat.call(key_code)
  361.    end
  362. end
  363. end
  364. #==============================================================================
  365. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  366. #==============================================================================

  367. class Window_Selectable
  368.   if @self_alias == nil
  369.     alias self_update update
  370.     @self_alias = true
  371.   end
  372.   def update
  373.     #self.cursor_rect.empty
  374.     self_update
  375.     if self.active and @item_max > 0
  376.       index_var = @index
  377.       tp_index = @index
  378.       mouse_x, mouse_y = Mouse.get_mouse_pos
  379.       mouse_not_in_rect = true
  380.       for i in 0...@item_max
  381.         @index = i
  382.        update_cursor_rect if $mouse_move#####
  383.        top_x = self.cursor_rect.x + self.x + 16
  384.        top_y = self.cursor_rect.y + self.y + 16
  385.        bottom_x = top_x + self.cursor_rect.width
  386.        bottom_y = top_y + self.cursor_rect.height
  387.        if (mouse_x > top_x) and (mouse_y > top_y) and
  388.           (mouse_x < bottom_x) and (mouse_y < bottom_y)
  389.          mouse_not_in_rect = false if $mouse_move#####
  390.         # if tp_index != @index
  391.         #   tp_index = @index if $mouse_move#####
  392.         #   $game_system.se_play($data_system.cursor_se)
  393.          if tp_index != @index and $mouse_move#####
  394.           tp_index = @index #if $mouse_move#####
  395.           $game_system.se_play($data_system.cursor_se)
  396.          end
  397.          break
  398.        end
  399.      end
  400.      if mouse_not_in_rect
  401.        @index = index_var
  402.        update_cursor_rect if $mouse_move#####
  403.        Mouse.click_lock
  404.      else
  405.        Mouse.click_unlock               
  406.      end
  407.    end
  408. end
  409. end
  410. class Window_NameInput
  411. if @self_alias == nil
  412.    alias self_update update
  413.    @self_alias = true
  414. end
  415. def update
  416.    self_update
  417.    if self.active
  418.      index_var = @index
  419.      mouse_x, mouse_y = Mouse.get_mouse_pos
  420.      mouse_not_in_rect = true
  421.      for i in (0...CHARACTER_TABLE.size).to_a.push(180)
  422.        @index = i
  423.        update_cursor_rect if $mouse_move#####
  424.        top_x = self.cursor_rect.x + self.x + 16
  425.        top_y = self.cursor_rect.y + self.y + 16
  426.        bottom_x = top_x + self.cursor_rect.width
  427.        bottom_y = top_y + self.cursor_rect.height
  428.        if (mouse_x > top_x) and (mouse_y > top_y) and
  429.           (mouse_x < bottom_x) and (mouse_y < bottom_y)
  430.          mouse_not_in_rect = false if $mouse_move#####
  431.          break
  432.        end
  433.      end
  434.      if mouse_not_in_rect
  435.        @index = index_var
  436.        update_cursor_rect if $mouse_move#####
  437.        Mouse.click_lock
  438.      else
  439.        Mouse.click_unlock
  440.      end
  441.    end
  442. end
  443. end
  444. class Window_InputNumber
  445. if @self_alias == nil
  446.    alias self_update update
  447.    @self_alias = true
  448. end
  449. def update
  450.    self_update
  451.    mouse_x, mouse_y = Mouse.get_mouse_pos
  452.    if self.active and @digits_max > 0
  453.      index_var = @index
  454.      mouse_not_in_rect = true
  455.      for i in 0...@digits_max
  456.        @index = i
  457.        update_cursor_rect if $mouse_move#####
  458.        top_x = self.cursor_rect.x + self.x + 16
  459.        bottom_x = top_x + self.cursor_rect.width
  460.        if (mouse_x > top_x) and (mouse_x < bottom_x)
  461.          mouse_not_in_rect = false if $mouse_move#####
  462.          break
  463.        end
  464.      end
  465.      if mouse_not_in_rect
  466.        @index = index_var
  467.        update_cursor_rect if $mouse_move#####
  468.        Mouse.click_lock
  469.      else
  470.        Mouse.click_unlock
  471.      end
  472.    end
  473.    if @last_mouse_y == nil
  474.      @last_mouse_y = mouse_y
  475.    end
  476.    check_pos = (@last_mouse_y - mouse_y).abs
  477.    if check_pos > 10
  478.      $game_system.se_play($data_system.cursor_se)
  479.      place = 10 ** (@digits_max - 1 - @index)
  480.      n = @number / place % 10
  481.      @number -= n * place
  482.      n = (n + 1) % 10 if mouse_y < @last_mouse_y
  483.      n = (n + 9) % 10 if mouse_y > @last_mouse_y
  484.      @number += n * place
  485.      refresh
  486.      @last_mouse_y = mouse_y
  487.    end
  488. end
  489. end
  490. class Scene_File
  491. if @self_alias == nil
  492.    alias self_update update
  493.    @self_alias = true
  494. end
  495. def update
  496.    mouse_x, mouse_y = Mouse.get_mouse_pos
  497.    Mouse.click_lock
  498.    idx = 0
  499.    for i in @savefile_windows
  500.      top_x = i.x + 16
  501.      top_y = i.y + 16
  502.      bottom_x = top_x + i.width
  503.      bottom_y = top_y + i.height
  504.      if (mouse_x > top_x) and (mouse_y > top_y) and
  505.         (mouse_x < bottom_x) and (mouse_y < bottom_y)
  506.        i.selected = true
  507.        if @file_index != idx
  508.          @file_index = idx
  509.          $game_system.se_play($data_system.cursor_se)
  510.        end            
  511.        Mouse.click_unlock
  512.      else
  513.        i.selected = false
  514.      end
  515.      idx += 1
  516.    end
  517.    self_update
  518. end
  519. end
  520. class Arrow_Enemy
  521. if @self_alias == nil
  522.    alias self_update update
  523.    @self_alias = true
  524. end
  525. def update
  526.    mouse_x, mouse_y = Mouse.get_mouse_pos
  527.    idx = 0
  528.    for i in $game_troop.enemies do
  529.      if i.exist?
  530.        top_x = i.screen_x - self.ox
  531.        top_y = i.screen_y - self.oy
  532.        bottom_x = top_x + self.src_rect.width
  533.        bottom_y = top_y + self.src_rect.height
  534.        if (mouse_x > top_x - $敌人选框扩大) and (mouse_y > top_y - $敌人选框扩大) and
  535.           (mouse_x < bottom_x + $敌人选框扩大) and (mouse_y < bottom_y + $敌人选框扩大)
  536.          if @index != idx
  537.            $game_system.se_play($data_system.cursor_se)
  538.            @index = idx
  539.          end
  540.        end
  541.      end
  542.      idx += 1
  543.    end
  544.    self_update
  545. end
  546. end
  547. class Arrow_Actor
  548. if @self_alias == nil
  549.    alias self_update update
  550.    @self_alias = true
  551. end
  552. def update
  553.    mouse_x, mouse_y = Mouse.get_mouse_pos
  554.    idx = 0
  555.    for i in $game_party.actors do
  556.      if i.exist?
  557.        top_x = i.screen_x - self.ox
  558.        top_y = i.screen_y - self.oy
  559.        bottom_x = top_x + self.src_rect.width
  560.        bottom_y = top_y + self.src_rect.height
  561.        if (mouse_x > top_x - $角色选框扩大) and (mouse_y > top_y - $角色选框扩大) and
  562.           (mouse_x < bottom_x + $角色选框扩大) and (mouse_y < bottom_y + $角色选框扩大)
  563.          if @index != idx
  564.            $game_system.se_play($data_system.cursor_se)
  565.            @index = idx
  566.          end
  567.        end
  568.      end
  569.      idx += 1
  570.    end
  571.    self_update
  572. end
  573. end
  574. #==============================================================================
  575. # ■ Game_Player
  576. #------------------------------------------------------------------------------
  577. #  处理主角的类。事件启动的判定、以及地图的滚动等功能。
  578. # 本类的实例请参考 $game_player。
  579. #   鼠标控制角色的主程序
  580. #==============================================================================
  581. class Game_Player
  582. if @self_alias == nil
  583.    alias self_update update
  584.    @self_alias = true
  585. end
  586. #--------------------------------------------------------------------------
  587. # ● 得到鼠标的状态
  588. #--------------------------------------------------------------------------
  589. def get_mouse_sta
  590.    return @mouse_sta
  591. end
  592. #--------------------------------------------------------------------------
  593. # ● 完整鼠标系统
  594. #--------------------------------------------------------------------------
  595. def update
  596.    mouse_x, mouse_y = Mouse.get_mouse_pos
  597.    @mtp_x = mouse_x
  598.    @mtp_y = mouse_y
  599.    unless $game_system.map_interpreter.running? and @mouse_sta == 2 #鼠标状态不为跟随状态
  600.      #得到鼠标图标方向
  601.      $mouse_icon_id = $game_map.check_event_custom(mouse_x,mouse_y)  if not [11, 12, 13, 14, 16, 17, 18, 19].include?($mouse_icon_id)
  602.    else
  603.      #令鼠标图标为正常
  604.      $mouse_icon_id = 0 if @mouse_sta != 2
  605.    end
  606.    
  607.    #单击鼠标时进行判断寻路或跟随
  608.    if Mouse.trigger?(Mouse::LEFT) #当点击鼠标时
  609.      unless $game_system.map_interpreter.running? or
  610.             @move_route_forcing or $game_temp.message_window_showing #各种无效情况的排除
  611.        #初始化
  612.        @mouse_sta = 1
  613.        p_direction = 5
  614.        #检查鼠标处能否开启事件
  615.        event_start,p_direction = $game_map.check_event_custom_start(mouse_x, mouse_y)
  616.        #若在移动中再次点击鼠标左键(即双击左键),则改鼠标状态为跟随状态
  617.        @mouse_sta = 2 if @paths_id != nil and @paths_id != @paths.size
  618.        if @mouse_sta != 2
  619.          #鼠标状态不为跟随状态则取数据并初始化路径
  620.          trg_x = (mouse_x + $game_map.display_x / 4) / 32
  621.          trg_y = (mouse_y + $game_map.display_y / 4) / 32
  622.          @paths = []
  623.          @paths_id = 0
  624.          if event_start == 0 #若不能开启事件
  625.            if trg_x != $game_player.x or trg_y != $game_player.y #若目标不为自身则开始寻路
  626.              find_path = Find_Path.new
  627.              @paths = find_path.find_player_short_path(trg_x, trg_y, @mtp_x, @mtp_y)
  628.            end
  629.          else #若能开启事件则改变角色朝向
  630.            @direction = p_direction
  631.          end
  632.        end
  633.      end
  634.    end

  635.    #开始移动
  636.    if @mouse_sta != nil and @mouse_sta == 1 #若鼠标状态为寻路状态
  637.      unless moving? or $game_system.map_interpreter.running? or
  638.             @move_route_forcing or $game_temp.message_window_showing #排除无效情况
  639.        if @paths_id != nil and @paths != nil and @paths_id <= @paths.size #若没有完成路径
  640.          case @paths[@paths_id] #判断路径
  641.          when 6
  642.            @last_move_x = true
  643.            move_right
  644.            @paths_id += 1
  645.            @direction = 6
  646.          when 4
  647.            @last_move_x = true
  648.            move_left
  649.            @paths_id += 1
  650.            @direction = 4
  651.          when 2
  652.            @last_move_x = false
  653.            move_down
  654.            @direction = 2
  655.            @paths_id += 1
  656.          when 8
  657.            @last_move_x = false
  658.            move_up
  659.            @direction = 8
  660.            @paths_id += 1
  661.          #斜四方向
  662.          when 1
  663.            @last_move_x = false
  664.            move_lower_left
  665.            @direction = 1
  666.            @paths_id += 1
  667.          when 3
  668.            @last_move_x = false
  669.            move_lower_right
  670.            @direction = 3
  671.            @paths_id += 1
  672.          when 7
  673.            @last_move_x = false
  674.            move_upper_left
  675.            @direction = 7
  676.            @paths_id += 1
  677.          when 9
  678.            @last_move_x = false
  679.            move_upper_right
  680.            @direction = 9
  681.            @paths_id += 1
  682.          end
  683.        end
  684.      end
  685.    elsif @paths != nil and @mouse_sta == 2 #当鼠标状态为跟随,且在移动中
  686.      if Mouse.press?(Mouse::LEFT) #持续按住鼠标
  687.        unless moving? or $game_system.map_interpreter.running? or
  688.               @move_route_forcing or $game_temp.message_window_showing #排除无效情况
  689.          #跟随方向判断并跟随
  690.          rate =  $game_map.show_rate(self)
  691.          width = (RPG::Cache.character(self.character_name,self.character_hue).width / $c3_每一步的帧数) * rate
  692.          height = (RPG::Cache.character(self.character_name,self.character_hue).height / 8) * rate
  693.          self_ox = (self.screen_x - width / 2 + self.screen_x + width / 2) / 2
  694.          self_oy = (self.screen_y - height + self.screen_y) / 2
  695.          #self_ox = self.screen_x
  696.          #self_oy = self.screen_y
  697.          if (@mtp_x - self_ox)*(@mtp_x - self_ox) + (@mtp_y - self_oy)*(@mtp_y - self_oy) >= 961
  698.            if @mtp_x > self_ox
  699.              if self_oy - @mtp_y < 0.4 * (@mtp_x - self_ox) and
  700.                 @mtp_y - self_oy < 0.4 * (@mtp_x - self_ox)
  701.                move_right
  702.                $mouse_icon_id = 16
  703.                @direction = 6
  704.              end
  705.              if @mtp_y - self_oy > - 0.4 * ( self_ox - @mtp_x ) and
  706.                 @mtp_y - self_oy < - 2.4 * ( self_ox - @mtp_x )
  707.                move_lower_right
  708.                $mouse_icon_id = 13
  709.                @direction = 3
  710.              end
  711.              if @mtp_y - self_oy < 0.4 * ( self_ox - @mtp_x ) and
  712.                 @mtp_y - self_oy > 2.4 * ( self_ox - @mtp_x )
  713.                move_upper_right
  714.                $mouse_icon_id = 19
  715.                @direction = 9
  716.              end
  717.              if @mtp_y - self_oy > 2.4 * ( @mtp_x - self_ox )
  718.                move_down
  719.                $mouse_icon_id = 12
  720.                @direction = 2
  721.              end
  722.              if @mtp_y - self_oy < - 2.4 * ( @mtp_x - self_ox )
  723.                move_up
  724.                $mouse_icon_id = 18
  725.                @direction = 8
  726.              end
  727.            end
  728.            if @mtp_x < self_ox
  729.              if @mtp_y - self_oy > - 0.4 * ( self_ox - @mtp_x ) and
  730.                 @mtp_y - self_oy < 0.4 * ( self_ox - @mtp_x )
  731.                move_left
  732.                $mouse_icon_id = 14
  733.                @direction = 4
  734.              end
  735.              if @mtp_y - self_oy > 0.4 * ( self_ox - @mtp_x ) and
  736.                 @mtp_y - self_oy < 2.4 * ( self_ox - @mtp_x )
  737.                move_lower_left
  738.                $mouse_icon_id = 11
  739.                @direction = 1
  740.              end
  741.              if @mtp_y - self_oy < - 0.4 * ( self_ox - @mtp_x ) and
  742.                 @mtp_y - self_oy > - 2.4 * ( self_ox - @mtp_x )
  743.                move_upper_left
  744.                $mouse_icon_id = 17
  745.                @direction = 7
  746.              end
  747.              if @mtp_y - self_oy > 2.4 * ( self_ox - @mtp_x )
  748.                move_down
  749.                $mouse_icon_id = 12
  750.                @direction = 2
  751.              end
  752.              if @mtp_y - self_oy < - 2.4 * ( self_ox - @mtp_x )
  753.                move_up
  754.                $mouse_icon_id = 18
  755.                @direction = 8
  756.              end
  757.            end
  758.          end
  759.            #...................................................................
  760.            if @mtp_x > self_ox
  761.              if @mtp_y - self_oy > - 0.4 * ( @mtp_x - self_ox ) and
  762.                 @mtp_y - self_oy < 0.4 * ( @mtp_x - self_ox )
  763.                $mouse_icon_id = 16
  764.                @direction = 6
  765.              end
  766.              if @mtp_y - self_oy > 0.4 * ( @mtp_x - self_ox ) and
  767.                @mtp_y - self_oy < 2.4 * ( @mtp_x - self_ox )
  768.                $mouse_icon_id = 13
  769.                @direction = 3
  770.              end
  771.              if @mtp_y - self_oy < - 0.4 * ( @mtp_x - self_ox ) and
  772.                @mtp_y - self_oy > - 2.4 * ( @mtp_x - self_ox )
  773.                $mouse_icon_id = 19
  774.                @direction = 9
  775.              end
  776.              if @mtp_y - self_oy > 2.4 * ( @mtp_x - self_ox )
  777.                $mouse_icon_id = 12
  778.                @direction = 2
  779.              end
  780.              if @mtp_y - self_oy < - 2.4 * ( @mtp_x - self_ox )
  781.                $mouse_icon_id = 18
  782.                @direction = 8
  783.              end
  784.            end
  785.            if @mtp_x < self_ox
  786.              if @mtp_y - self_oy > - 0.4 * ( self_ox - @mtp_x ) and
  787.                 @mtp_y - self_oy < 0.4 * ( self_ox - @mtp_x )
  788.                $mouse_icon_id = 14
  789.                @direction = 4
  790.              end
  791.              if @mtp_y - self_oy > 0.4 * ( self_ox - @mtp_x ) and
  792.                 @mtp_y - self_oy < 2.4 * ( self_ox - @mtp_x )
  793.                $mouse_icon_id = 11
  794.                @direction = 1
  795.              end
  796.              if @mtp_y - self_oy < - 0.4 * ( self_ox - @mtp_x ) and
  797.                 @mtp_y - self_oy > - 2.4 * ( self_ox - @mtp_x )
  798.                $mouse_icon_id = 17
  799.                @direction = 7
  800.              end
  801.              if @mtp_y - self_oy > 2.4 * ( self_ox - @mtp_x )
  802.                $mouse_icon_id = 12
  803.                @direction = 2
  804.              end
  805.              if @mtp_y - self_oy < - 2.4 * ( self_ox - @mtp_x )
  806.                $mouse_icon_id = 18
  807.                @direction = 8
  808.              end
  809.            end
  810.            #...................................................................
  811.        end
  812.      else #没状态的情况
  813.        $mouse_icon_id = 0
  814.        @mouse_sta = 0
  815.        @paths_id = @paths.size #终止寻路移动
  816.      end
  817.    end
  818.    self_update
  819. end
  820. end
  821. Mouse.init
  822. END { Mouse.exit }
复制代码

星星在哪里都是很亮的,就看你有沒有抬頭去看他們                       --------華麗麗的百變暖暖窩
本人之作《夙誓》龜速進行中。。= =!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

孤独守望

梦石
0
星屑
3137
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

8
发表于 2008-10-2 02:16:34 | 只看该作者
诡异,太诡异了。这只是我给出的作为一种治标不治本的解答
70行左右

          for i in 0..3
            f = i - 2 + @file_index
            name = make_filename(f)
            @savefile_windows.push(Window_SaveFile.new(f, name, i))
            @savefile_windows.selected = false
          end
在此前插入

          @file_index = 2 if @file_index < 2
等待高人吧,我这个方法可能有Bug。
系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

Lv1.梦旅人

空靈

梦石
0
星屑
50
在线时间
11 小时
注册时间
2006-7-27
帖子
521
9
 楼主| 发表于 2008-10-2 02:55:56 | 只看该作者
新增兩個問題。。-V-。。不想再開新帖那么麻煩。。-V-追加積分了。。-V-
這兩個問題跟
順便提一下。。進入遊戲後。。如果有進入過存檔畫面。。那么返回到標題畫面的時候。。竟然會顯示那張存檔的背景。。-V-。。再到標題畫面。。-V-。。好詭異。。-V-

差不多。。但因為那啥。。腳本有點不同。。-V-。。所以又不會改了。。-V-

  1. #==============================================================================
  2. # ■ chaochao的人物仓库ver1.02正式版
  3. #==============================================================================
  4. class Chaochao_Window_PartyLeft < Window_Selectable
  5.   def initialize
  6.     super(0, 0, 320, 224)
  7.     self.contents = Bitmap.new(width - 32, height - 32)
  8.     self.index = 0
  9.     self.opacity = 0
  10.     @commands = []
  11.     @menu_com = Sprite.new
  12.     @menu_com.bitmap = RPG::Cache.picture("行伍.png")
  13.     refresh
  14.   end
  15.   def actor
  16.     return @actors[self.index]
  17.   end
  18.   def refresh
  19.     if self.contents != nil
  20.       self.contents.dispose
  21.       self.contents = nil
  22.     end
  23.     @actors = []
  24.     for i in 0...$game_party.actors.size
  25.       @actors.push($game_party.actors[i])
  26.     end
  27.    
  28.     @item_max = 4
  29.     if @item_max > 0
  30.       self.contents = Bitmap.new(width - 32, (row_max+1) * 32)
  31.       for i in 0...@item_max
  32.         draw_item(i)
  33.       end
  34.     end
  35.   end
  36.   def draw_item(index)
  37.     if @actors[index] != nil
  38.       actor = @actors[index]
  39.       text = @actors[index].name
  40.       self.contents.font.size = 16
  41.       lv = @actors[index].level.to_s + " "
  42.       if $game_party.chaochao.include?(actor.id) or $game_party.actors.size <= 1
  43.         self.contents.font.color = Color.new(100, 100, 100) #不能被移动的颜色
  44.       else
  45.         self.contents.font.color = Color.new(20, 60, 30) #可以被移动的颜色
  46.       end
  47.       self.contents.draw_text(4, index * 32 + 32, 288, 32, text)
  48.       self.contents.font.color = normal_color
  49.       self.contents.font.size = 16
  50.       self.contents.draw_text(4, index * 32 + 36, 288, 32,  "修為:   ", 2)
  51.       colorx = [255.0000 - 255.0000/60 * @actors[index].level,0].max
  52.       colory = [255.0000 / 60 * @actors[index].level,255].min
  53.       self.contents.font.color = Color.new(colorx, colory, 0)
  54.       self.contents.draw_text(4, index * 32 + 36, 288, 32,  lv, 2)
  55.       self.contents.font.color = normal_color
  56.       self.contents.font.size = 22
  57.     else
  58.       self.contents.font.size = 16
  59.       self.contents.draw_text(4, index * 32 + 32, 288, 32,  "空位")
  60.     end
  61.   end
  62.   def update_cursor_rect
  63.     if @index < 0
  64.       self.cursor_rect.empty
  65.       return
  66.     end
  67.     row = @index / @column_max
  68.     if row < self.top_row
  69.       self.top_row = row
  70.     end
  71.     if row > self.top_row + (self.page_row_max - 1)
  72.       self.top_row = row - (self.page_row_max - 1)
  73.     end
  74.     cursor_width = self.width / @column_max - 32
  75.     x = @index % @column_max * (cursor_width + 32)
  76.     y = @index / @column_max * 32 - self.oy + 32
  77.     self.cursor_rect.set(x, y, cursor_width, 32)
  78.   end
  79.   def item_max
  80.     return @item_max
  81.   end
  82.   def actor?(index)
  83.     return @actors[index] == nil ? false : true
  84.   end
  85.   def set_index(x)
  86.     @index = x
  87.   end
  88. end
  89. #------------------------------------------------------------------------------
  90. class Chaochao_Window_PartyData < Window_Base
  91.   
  92.   def initialize
  93.     super(0, 224, 640, 256)
  94.     self.contents = Bitmap.new(width - 32, height - 32)
  95.     self.opacity = 0
  96.     @actor = nil
  97.   end
  98.   
  99.   def set_actor(actor)
  100.     self.contents.clear
  101.     draw_actor_name(actor, 4, 0)
  102.     def draw_actor_state(actor, x, y, width = 120)
  103.     self.contents.font.size = 16
  104.     text = make_battler_state_text(actor, width, true)
  105.     self.contents.font.color = actor.hp == 0 ? knockout_color : normal_color
  106.     self.contents.draw_text(x, y, width, 32, text)
  107.     self.contents.font.size = 18
  108.   end
  109.     draw_actor_state(actor, 140, 0)
  110.     draw_actor_hp(actor, 284, 0)
  111.     draw_actor_sp(actor, 460, 0)
  112.     @actor = actor
  113.     self.visible = true
  114.   end
  115.   def clear
  116.     self.contents.clear
  117.   end
  118. end

  119. #------------------------------------------------------------------------------

  120. class Game_Party
  121.   attr_reader   :actors2
  122.   attr_reader   :chaochao#不能从队伍向备用角色移动的角色ID
  123.   attr_reader   :chaochao2#不能从备用角色向队伍移动的角色ID
  124.   def initialize
  125.     @actors = []
  126.     @gold = 0
  127.     @steps = 0
  128.     @items = {}
  129.     @weapons = {}
  130.     @armors = {}
  131.     @actors2 = []
  132.     @chaochao = []
  133.     @chaochao2 = []
  134.   end
  135.   def add_actor(actor_id,type=1)#type为1是向队伍中添加,为2则相反。
  136.     case type
  137.     when 1
  138.       if $game_actors[actor_id] != nil
  139.         actor = $game_actors[actor_id]
  140.         #如果队伍没有满和队伍中没有此角色
  141.         if @actors.size < 4 and not @actors.include?(actor) and not @actors2.include?(actor)
  142.           @actors.push(actor)
  143.           $game_player.refresh
  144.         end
  145.       end
  146.     when 2
  147.       if $game_actors[actor_id] != nil
  148.         actor = $game_actors[actor_id]
  149.         #如果角色不在队伍中和不在备用角色队伍中的情况下
  150.         #向备用角色中添加角色
  151.         if not @actors.include?(actor) and not @actors2.include?(actor)
  152.           @actors2.push(actor)
  153.           $game_player.refresh
  154.         end
  155.       end
  156.     end
  157.   end
  158.   
  159.   def huanren(index,type=1)#type为1是从备用角色向队伍中移动,为2则相反。
  160.     case type
  161.     when 1
  162.       id = @actors2[index].id
  163.       actor = $game_actors[id]
  164.       if @actors.size < 4  and not @chaochao2.include?(index) #and not @actors.include?(actor)
  165.         @actors.push(actor)
  166.         #@actors2.delete(actor)
  167.         @actors2.each do |i|
  168.           @actors2.delete(i) if i.id == actor.id
  169.         end
  170.         $game_system.se_play($data_system.decision_se)
  171.         $game_player.refresh
  172.       end
  173.     when 2
  174.       id = @actors[index].id
  175.       actor = $game_actors[id]
  176.       if actor != nil  and not @chaochao.include?(index)
  177.         @actors2.push(actor)
  178.         @actors.each do |i|
  179.           @actors.delete(i) if i.id == actor.id
  180.         end
  181.         $game_system.se_play($data_system.decision_se)
  182.         $game_player.refresh
  183.       end
  184.     end
  185.   end
  186.   
  187.   #type1,1是操作队伍中的角色能否向备用队伍移动,2则相反。
  188.   #type2,1是添加不能移动的,2是删除不能移动的。
  189.   def yidong(actor_id,type1,type2=1)
  190.     case type2
  191.     when 1
  192.       case type1
  193.       when 1
  194.         @chaochao.push(actor_id)
  195.       when 2
  196.         @chaochao2.push(actor_id)
  197.       end
  198.     when 2
  199.       case type1
  200.       when 1
  201.         @chaochao.delete(actor_id)
  202.       when 2
  203.         @chaochao2.delete(actor_id)
  204.       end
  205.     end
  206.   end
  207.   
  208.   #type,1从队伍中离开,2从备用角色中离开,3从队伍和备用角色中离开。
  209.   def remove_actor(actor_id,type=1)
  210.     actor = $game_actors[actor_id]
  211.     case type
  212.     when 1
  213.       @actors.delete(actor)
  214.       $game_player.refresh
  215.     when 2
  216.       @actors2.delete(actor)
  217.       $game_player.refresh
  218.     when 3
  219.       @actors.delete(actor)
  220.       @actors2.delete(actor)
  221.       $game_player.refresh
  222.     end
  223.   end
  224.   
  225.   def refresh
  226.     new_actors = []
  227.     new_actors2 = []
  228.     for i in [email protected]
  229.       if $game_actors[@actors[i].id] != nil
  230.         new_actors.push($game_actors[@actors[i].id])
  231.       end
  232.     end
  233.     @actors = new_actors
  234.     for i in [email protected]
  235.       if $game_actors[@actors2[i].id] != nil
  236.         new_actors2.push($game_actors[@actors2[i].id])
  237.       end
  238.     end
  239.     @actors2 = new_actors2
  240.   end
  241. end


  242. #------------------------------------------------------------------------------

  243. class Chaochao_Window_PartyRight < Window_Selectable
  244.   def initialize
  245.     super(320, 32, 320, 224)#(320, 0, 320, 224)
  246.     self.contents = Bitmap.new(width - 32, height - 32)   
  247.     self.index = -1
  248.     self.opacity = 0
  249.     refresh
  250.   end
  251.   def actor
  252.     return @actors[self.index]
  253.   end
  254.   def refresh
  255.     if self.contents != nil
  256.       self.contents.dispose
  257.       self.contents = nil
  258.     end
  259.     @actors = []
  260.     for i in 0...$game_party.actors2.size
  261.       @actors.push($game_party.actors2[i])
  262.     end
  263.    
  264.     @item_max = $game_party.actors2.size
  265.     if @item_max > 0
  266.       self.contents = Bitmap.new(width - 32, row_max * 32)
  267.       for i in 0...@item_max
  268.         draw_item(i)
  269.       end
  270.     elsif @item_max == 0
  271.       
  272.     end
  273.   end
  274.   def draw_item(index)
  275.     actor = @actors[index]
  276.     text = @actors[index].name
  277.     self.contents.font.size = 16
  278.     lv = @actors[index].level.to_s + " "
  279.     if $game_party.chaochao2.include?(actor.id) or $game_party.actors.size >= 4
  280.         self.contents.font.color = Color.new(100, 100, 100) #不能被移动的颜色
  281.       else
  282.         self.contents.font.color = Color.new(20, 60, 30) #可以被移动的颜色
  283.       end
  284.     self.contents.draw_text(4, index * 32, 288, 32, text)
  285.     self.contents.font.color = normal_color
  286.     self.contents.font.size = 16
  287.     self.contents.draw_text(4, index * 32 + 4, 288, 32,  "修為:   ", 2)
  288.     colorx = [255.0000 - 255.0000/60 * @actors[index].level,0].max
  289.     colory = [255.0000 / 60 * @actors[index].level,255].min
  290.     self.contents.font.color = Color.new(colorx, colory, 0)
  291.     self.contents.draw_text(4, index * 32 + 4, 288, 32,  lv, 2)
  292.     self.contents.font.color = normal_color
  293.     self.contents.font.size = 22
  294.   end
  295.   def update_cursor_rect
  296.     if @index < 0
  297.       self.cursor_rect.empty
  298.       return
  299.     end
  300.     row = @index / @column_max
  301.     if row < self.top_row
  302.       self.top_row = row
  303.     end
  304.     if row > self.top_row + (self.page_row_max - 1)
  305.       self.top_row = row - (self.page_row_max - 1)
  306.     end
  307.     cursor_width = self.width / @column_max - 32
  308.     x = @index % @column_max * (cursor_width + 32)
  309.     y = @index / @column_max * 32 - self.oy
  310.     self.cursor_rect.set(x, y, cursor_width, 32)
  311.   end
  312.   def item_max
  313.     return @item_max
  314.   end
  315.   def actor?(index)
  316.     return @actors[index] == nil ? false : true
  317.   end
  318.   def set_index(x)
  319.     @index = x
  320.   end
  321. end


  322. #------------------------------------------------------------------------------

  323. class Chaochao_Scene_Party
  324.   def main
  325.     @left_temp_command = 0
  326.     @right_temp_command = 0
  327.     @temp = 0
  328.     @left_window = Chaochao_Window_PartyLeft.new
  329.     @left_window.active = true
  330.     @right_window = Chaochao_Window_PartyRight.new
  331.     @right_window.active = false
  332.     @data_window = Chaochao_Window_PartyData.new
  333.     update_data
  334.     Graphics.transition
  335.     loop do
  336.       Graphics.update
  337.       Input.update
  338.       update
  339.       if $scene != self
  340.         break
  341.       end
  342.     end
  343.     Graphics.freeze
  344.     @left_window.dispose
  345.     @right_window.dispose
  346.     @data_window.dispose
  347.   end
  348.   
  349.   def update
  350.     @left_window.update
  351.     @right_window.update
  352.     @data_window.update
  353.     update_command
  354.     update_data
  355.   end
  356.   
  357.   def update_command
  358.     if Input.trigger?(Input::B)
  359.       $game_system.se_play($data_system.cancel_se)
  360.       #画面切换
  361.       $scene = Scene_Map.new
  362.       return
  363.     end
  364.     if @left_window.active
  365.       update_left
  366.       return
  367.     end
  368.     if @right_window.active
  369.       update_right
  370.       return
  371.     end
  372.   end
  373.   
  374.   def update_left
  375.     if Input.trigger?(Input::RIGHT)
  376.       if @right_window.item_max > 0
  377.         @left_temp_command = @left_window.index
  378.         @left_window.set_index(-1)
  379.         $game_system.se_play($data_system.cursor_se)
  380.         @left_window.active = false
  381.         @right_window.active = true
  382.         @left_window.refresh
  383.         @right_window.refresh
  384.         @right_window.set_index(@right_temp_command)
  385.         return
  386.       else
  387.         $game_system.se_play($data_system.buzzer_se)
  388.         return
  389.       end
  390.     end
  391.     if Input.trigger?(Input::C)
  392.       if @left_window.active and @left_window.actor?(@left_window.index) and $game_party.actors.size > 1 and not $game_party.chaochao.include?($game_party.actors[@left_window.index].id)
  393.         $game_party.huanren(@left_window.index,2)#type为1是从备用角色向队伍中移动,为2则相反。
  394.         @left_window.refresh
  395.         @right_window.refresh
  396.       else
  397.         $game_system.se_play($data_system.buzzer_se)
  398.       end
  399.     end
  400.     return
  401.   end
  402.   
  403.   def update_right
  404.     if Input.trigger?(Input::LEFT)
  405.       if @left_window.item_max > 0
  406.         @right_temp_command = @right_window.index
  407.         @right_window.set_index(-1)
  408.         $game_system.se_play($data_system.cursor_se)
  409.         @left_window.active = true
  410.         @right_window.active = false
  411.         @left_window.refresh
  412.         @right_window.refresh
  413.         @left_window.set_index(@left_temp_command)
  414.         return
  415.       else
  416.         $game_system.se_play($data_system.buzzer_se)
  417.         return
  418.       end
  419.     end
  420.     if Input.trigger?(Input::C)
  421.       if $game_party.actors.size >= 4
  422.         $game_system.se_play($data_system.buzzer_se)
  423.         return
  424.       end
  425.       if @right_window.active and @right_window.actor?(@right_window.index) and not $game_party.chaochao2.include?($game_party.actors2[@right_window.index].id)
  426.         $game_party.huanren(@right_window.index,1)#type为1是从备用角色向队伍中移动,为2则相反。
  427.         if $game_party.actors2.size == 0
  428.           @right_temp_command = @right_window.index
  429.           @right_window.set_index(-1)
  430.           $game_system.se_play($data_system.cursor_se)
  431.           @left_window.active = true
  432.           @right_window.active = false
  433.           @left_window.refresh
  434.           @right_window.refresh
  435.           @left_window.set_index(@left_temp_command)
  436.         end
  437.         if @right_window.index > 0
  438.           @right_window.set_index(@right_window.index-1)
  439.         end
  440.         @left_window.refresh
  441.         @right_window.refresh
  442.       else
  443.         $game_system.se_play($data_system.buzzer_se)
  444.       end
  445.     end
  446.     return
  447.   end
  448.   
  449.   def update_data
  450.     if @left_window.active
  451.       if $game_party.actors[@left_window.index] != nil
  452.         @data_window.set_actor($game_party.actors[@left_window.index])
  453.       else
  454.         @data_window.clear
  455.       end
  456.       return
  457.     end
  458.     if @right_window.active
  459.       if $game_party.actors2[@right_window.index] != nil
  460.         @data_window.set_actor($game_party.actors2[@right_window.index])
  461.       else
  462.         @data_window.clear
  463.       end
  464.       return
  465.     end
  466.   end
  467. end

  468. #==============================================================================
  469. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  470. #==============================================================================
复制代码

剩餘字數不够了。。-V-

星星在哪里都是很亮的,就看你有沒有抬頭去看他們                       --------華麗麗的百變暖暖窩
本人之作《夙誓》龜速進行中。。= =!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

空靈

梦石
0
星屑
50
在线时间
11 小时
注册时间
2006-7-27
帖子
521
10
 楼主| 发表于 2008-10-2 02:56:18 | 只看该作者
問題2
  1. =begin
  2. --------------------------------------------------------------------------
  3. 详尽任务显示界面 v2.1
  4. --------------------------------------------------------------------------
  5. By 叶子

  6. 日期与更新
  7. 3-29-2006 -v1.0
  8. 4-3-2006  -v2.0
  9. -可以改变文字颜色,显示变量,显示图标,显示图片
  10. -大幅简化了编写任务内容的过程,加入自动换行功能
  11. -精简了窗口,使其还可以用作图鉴系统、日记系统等等
  12. 4-6-2006  -v2.1
  13. -增加了获得全部任务与删除全部任务命令
  14. -改正通假字,修改了示例任务3
  15. --------------------------------------------------------------------------
  16. 顾名思义,就是显示任务资料的界面
  17. 任务资料要预先在这里设定好
  18. 下载范例工程,能帮助你更快更好地掌握使用方法
  19. --------------------------------------------------------------------------
  20. 使用方法:

  21. 1、召唤任务显示界面:$scene = Scene_Task.new

  22. 可以在事件中的“脚本”指令加入这段东西,又或者修改 Scene_Menu 来增加一个显示
  23. 任务的选项。如果是修改 Scene_Menu 增加选项的话,在脚本倒数第30行左右,
  24. 把 $scene = Scene_Map.new 修改成 $scene = Scene_Menu.new(任务界面index)

  25. 2、设置任务资料

  26.   2.1、相关内容解析
  27.   
  28.   所有内容文字必须用双引号括住
  29.   
  30.   名称:任务的名字(显示在左边窗口中),大小为208×32,如果全部为文字的话,
  31.         够放九个全角字符
  32.         
  33.   简介:任务的介绍(显示在右边窗口中),宽368,高不限
  34.   
  35.         文字可以自动换行
  36.   
  37.    2.1.1、控制码解析
  38.    
  39.    名称和内容均可用控制码,注意两条反斜线都要打!
  40.    
  41.    \\v[n] 显示n号变量
  42.    \\c[n] 改变字体颜色。
  43.           n=1~7 时同“显示文章”的\c[n],n=8 时为半透明色,n=9 时为系统色(青色)
  44.    \\n[i] 显示i号角色名字
  45.    \\i[文件名] 显示图标
  46.    \\p[文件名] 显示图片
  47.    
  48.    2.1.2、高级:内嵌表达式
  49.         
  50.    请参考帮助-脚本入门-字符串-内嵌表达式相关内容。
  51.    它可以用来在任务的名称和简介那里显示变量。
  52.    常用的表达式(注意不要漏了井号和大括号):
  53.    #{$game_variables[n]}       ——插入n号变量的值
  54.    #{$game_party.item_number(n)}  ——插入持有n号物品数量
  55.                                       同理还有weapon_number,armor_number
  56.    还可以预先定义一个变量,再插入(例子见示例任务3-灵魂线)
  57.    
  58.   2.2、注意事项
  59.   
  60.    2.2.1、括号、逗号和双引号 [ ] , " 必须使用半角符号(英文输入),
  61.           引号内的内容则没有关系
  62.          
  63.    2.2.2、单引号 ' 和双引号 " 的区别:
  64.           为了不出错误,全部用双引号吧!当然如果你对Ruby很熟悉,那就没所谓了
  65.   
  66.   2.3、开始设置吧!
  67.   从107行开始设置任务资料,可以参考示例任务来设置,请仔细阅读附加讲解
  68.   
  69. 3、接受任务

  70. 事件里的“脚本”指令输入:get_task(任务ID)
  71. 例如 get_task(1) 就是接受1号任务

  72.   3.1、获得全部任务
  73.   
  74.   事件里的“脚本”指令输入:get_all_task
  75.   这个功能基本上是用来在编写好所有任务资料后测试排版的
  76.   

  77. 4、完成/删除任务

  78. 事件里的“脚本”指令输入:finish_task(任务ID)
  79. 例如 finish_task(1) 就是完成1号任务

  80. 注意:本脚本不负责完成任务后的奖励之类的东西,请自行在事件中判断,
  81.        这里的完成任务指的是从任务列表中删去此任务

  82.   4.1、删除全部任务
  83.   
  84.   事件里的“脚本”指令输入:finish_all_task
  85.   作为获得全部任务的对应功能存在,似乎不会怎么用到
  86. =end

  87. class Scene_Task
  88.   # 这里设置任务内容翻页音效
  89.   CHANGE_PAGE_SE = "Audio/SE/046-Book01"
  90. end

  91. class Game_Party
  92.   #--------------------------------------------------------------------------
  93.   # ● 设置任务资料
  94.   #--------------------------------------------------------------------------
  95.   def get_tasks_info
  96.     @tasks_info = []
  97.    
  98.     #-讲解-
  99.     # 三个示例任务由浅入深,其实只要看懂第一个就可以使用了。
  100.     # 任务的写法多种多样,不限于这三个任务的方法
  101.     #----
  102.     #-----------------------------
  103.     # 示例任务1:星湖
  104.     #-----------------------------
  105.     名称 = "\\c[6]去『星湖』看看"
  106.     #-讲解-
  107.     # 注意!脚本编辑器的变色功能并不是非常完善,所以换行后字变黑了,但仍然是字符
  108.     # 串的一部分,所以不要忘记在内容最后打一个双引号
  109.     # 按回车是强制换行
  110.     #----
  111.     简介 = "\\c[6]去星湖看看是否有異。

  112. \\c[9]任務目標:
  113. 去『星湖』調查。

  114. \\c[0]

  115.       "
  116.     #-讲解-
  117.     # 每个任务最后一定要加上:
  118.     # @tasks_info[任务ID] = Game_Task.new(名称, 简介)
  119.     # 接受任务和完成任务都是用这个任务ID来索引
  120.     #----
  121.     @tasks_info[1] = Game_Task.new(名称, 简介)
  122.    
  123.     #-----------------------------
  124.     # 示例任务2:克萝莉亚的药瓶
  125.     #-----------------------------
  126.     名称 = "\\c[6]克萝莉亚的药瓶"
  127.     #-讲解-
  128.     # 这里使用了字符串相加,例如 s = "a" + "b" ,s 就是 "ab"
  129.     # 还用了内嵌表达式,$game_party.item_number(38) 就是38号物品的数量
  130.     #----
  131.     简介 = 名称 + "
  132.    
  133. \\c[9]任务目标:
  134. 问克萝莉亚要一个药瓶,交给西露达

  135. \\c[0]药瓶:#{$game_party.item_number(38)}/1

  136. 西露达:
  137. 克萝莉亚就在西边的屋子里"
  138.     @tasks_info[2] = Game_Task.new(名称, 简介)
  139.    
  140.     #-----------------------------
  141.     # 示例任务3:灵魂线
  142.     #-----------------------------
  143.     #-讲解-
  144.     # 这里用了条件判断,当3号变量大于等于1时,加上“完成”字样,同时变色
  145.     #----
  146.     if $game_variables[3] >= 1
  147.       名称 = "\\c[8]灵魂线(完成)"
  148.       item = "\\c[8]灵魂线:#{$game_variables[3]}/1 (完成)"
  149.     else
  150.       名称 = "\\c[2]灵魂线"
  151.       item = "\\c[0]灵魂线:#{$game_variables[3]}/1"
  152.     end
  153.     #-讲解-
  154.     # 预先定义变量,用内嵌表达式插入
  155.     # 最后用了显示图标
  156.     #----
  157.     简介 = "#{名称}
  158.    
  159. \\c[9]任务目标:
  160. 找到埋起来的灵魂线,交给克萝莉亚

  161. #{item}

  162. \\c[0]克萝莉亚:
  163. 灵魂线就埋在其中一棵树下,给我好好找\\i[046-Skill03]"
  164.     @tasks_info[3] = Game_Task.new(名称, 简介)
  165.    
  166.   end
  167. end
  168.    
  169. #==============================================================================
  170. # ■ Interpreter
  171. #------------------------------------------------------------------------------
  172. #  执行事件命令的解释器。本类在 Game_System 类
  173. # 与 Game_Event 类的内部使用。
  174. #==============================================================================

  175. class Interpreter
  176.   #--------------------------------------------------------------------------
  177.   # ● 接受任务
  178.   #--------------------------------------------------------------------------
  179.   def get_task(id)
  180.     task = $game_party.tasks_info[id]
  181.     return true if (task.nil? or $game_party.current_tasks.include?(task.id))
  182.     $game_party.current_tasks.unshift(task.id)
  183.     return true
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   # ● 获得全部任务
  187.   #--------------------------------------------------------------------------
  188.   def get_all_task
  189.     # 清空当前任务
  190.     $game_party.current_tasks.clear
  191.     for task in $game_party.tasks_info
  192.       next if task.nil?
  193.       $game_party.current_tasks.unshift(task.id)
  194.     end
  195.     return true
  196.   end
  197.   #--------------------------------------------------------------------------
  198.   # ● 完成/放弃任务
  199.   #--------------------------------------------------------------------------
  200.   def finish_task(id)
  201.     task = $game_party.tasks_info[id]
  202.     return true if task.nil?
  203.     $game_party.current_tasks.delete(task.id)
  204.     return true
  205.   end
  206.   #--------------------------------------------------------------------------
  207.   # ● 删除全部任务
  208.   #--------------------------------------------------------------------------
  209.   def finish_all_task
  210.     $game_party.current_tasks.clear
  211.     return true
  212.   end
  213. end

  214. #==============================================================================
  215. # ■ Game_Party
  216. #------------------------------------------------------------------------------
  217. #  处理同伴的类。包含金钱以及物品的信息。本类的实例
  218. # 请参考 $game_party。
  219. #==============================================================================

  220. class Game_Party
  221.   #--------------------------------------------------------------------------
  222.   # ● 定义实例变量
  223.   #--------------------------------------------------------------------------
  224.   attr_writer     :latest_task                  # 上次查看的任务
  225.   #--------------------------------------------------------------------------
  226.   # ● 取得任务资料
  227.   #--------------------------------------------------------------------------
  228.   def tasks_info
  229.     if @tasks_info.nil?
  230.       get_tasks_info
  231.     end
  232.     return @tasks_info
  233.   end
  234.   #--------------------------------------------------------------------------
  235.   # ● 取得当前任务
  236.   #--------------------------------------------------------------------------
  237.   def current_tasks
  238.     if @current_tasks.nil?
  239.       @current_tasks = []
  240.     end
  241.     return @current_tasks
  242.   end
  243.   #--------------------------------------------------------------------------
  244.   # ● 上次查看的任务
  245.   #--------------------------------------------------------------------------
  246.   def latest_task
  247.     if !current_tasks.include?(@latest_task)
  248.       @latest_task = current_tasks[0]
  249.     end
  250.     return @latest_task
  251.   end
  252. end

  253. #==============================================================================
  254. # ■ Game_Task
  255. #------------------------------------------------------------------------------
  256. #  处理任务的类。包含任务的信息。
  257. #==============================================================================

  258. class Game_Task
  259.   attr_accessor   :name                   # 名称
  260.   attr_accessor   :briefing               # 简介
  261.   def initialize(name, briefing)
  262.     @name = name
  263.     @briefing = briefing
  264.   end
  265.   def height
  266.     text = @briefing.clone
  267.     x = 0
  268.     y = 64
  269.     min_y = 0
  270.     # 限制文字处理
  271.     begin
  272.       last_text = text.clone
  273.       text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  274.     end until text == last_text
  275.     text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  276.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  277.     end
  278.     # 为了方便、将 "\\\\" 变换为 "\000"
  279.     text.gsub!(/\\\\/) { "\000" }
  280.     # "\C" 变为 "\001"
  281.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  282.     # "\I" 变为 "\002"
  283.     text.gsub!(/\\[Ii]/) { "\002" }
  284.     # "\P" 变为 "\003"
  285.     text.gsub!(/\\[Pp]/) { "\003" }
  286.     # c 获取 1 个字 (如果不能取得文字就循环)
  287.     while ((c = text.slice!(/./m)) != nil)
  288.       # \\ 的情况下
  289.       if c == "\000"
  290.         # 还原为本来的文字
  291.         c = "\\"
  292.       end
  293.       # \C[n] 的情况下
  294.       if c == "\001"
  295.         # 更改文字色
  296.         text.sub!(/\[([0-9]+)\]/, "")
  297.         # 下面的文字
  298.         next
  299.       end
  300.       # 图标的情况下
  301.       if c == "\002"
  302.         icon_name = ''
  303.         while ((cha = text.slice!(/./m)) != ']')
  304.           next if cha == '['
  305.           icon_name += cha
  306.         end
  307.         icon = RPG::Cache.icon(icon_name)
  308.         if x + icon.width > 368
  309.           x = 0
  310.           y += [32, min_y].max
  311.           min_y = 0
  312.         end
  313.         x += 28
  314.         next
  315.       end
  316.       # 图片的情况下
  317.       if c == "\003"
  318.         pic_name = ''
  319.         while ((cha = text.slice!(/./m)) != ']')
  320.           next if cha == '['
  321.           pic_name += cha
  322.         end
  323.         pic = RPG::Cache.picture(pic_name)
  324.         if x + pic.width > 368
  325.           x = 0
  326.           y += [32, min_y].max
  327.           min_y = 0
  328.         end
  329.         x += pic.width
  330.         min_y = [pic.height, 32].max
  331.         next
  332.       end
  333.       # 另起一行文字的情况下
  334.       if c == "\n"
  335.         y += [32, min_y].max
  336.         min_y = 0
  337.         x = 0
  338.         # 下面的文字
  339.         next
  340.       end
  341.       # 自动换行处理
  342.       if x + 22 > 368
  343.         y += [32, min_y].max
  344.         min_y = 0
  345.         x = 0
  346.       end
  347.       # x 为要描绘文字的加法运算
  348.       x += 22
  349.     end
  350.     return (y + [32, min_y].max)
  351.   end
  352.   def id
  353.     return $game_party.tasks_info.index(self)
  354.   end
  355. end

  356. #==============================================================================
  357. # ■ Window_Task_Name
  358. #------------------------------------------------------------------------------
  359. #  任务名称显示窗口。
  360. #==============================================================================

  361. class Window_Task_Name < Window_Selectable
  362.   #--------------------------------------------------------------------------
  363.   # ● 初始化对像
  364.   #--------------------------------------------------------------------------
  365.   def initialize(tasks)
  366.     super(0, 0, 240, 480)
  367.     @tasks = []
  368.     for id in tasks
  369.       @tasks.push($game_party.tasks_info[id])
  370.     end
  371.     @item_max = tasks.size
  372.     self.contents = Bitmap.new(
  373.     self.width - 32, @item_max == 0 ? 32 : @item_max * 32)
  374.     refresh
  375.     self.index = 0
  376.     self.opacity = 0
  377.     @commands = []
  378.     @menu_com = Sprite.new
  379.     @menu_com.bitmap = RPG::Cache.picture("記事.png")
  380.   end
  381.   #--------------------------------------------------------------------------
  382.   # ● 刷新
  383.   #--------------------------------------------------------------------------
  384.   def refresh
  385.     self.contents.clear
  386.     if @tasks != []
  387.       for task in @tasks
  388.         draw_item(task)
  389.       end
  390.     else
  391.       draw_blank
  392.     end
  393.   end
  394.   #--------------------------------------------------------------------------
  395.   # ● 描绘项目
  396.   #--------------------------------------------------------------------------
  397.   def draw_item(task)
  398.     text = task.name.clone
  399.     x = 0
  400.     y = @tasks.index(task) * 32
  401.     # 限制文字处理
  402.     begin
  403.       last_text = text.clone
  404.       text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  405.     end until text == last_text
  406.     text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  407.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  408.     end
  409.     # 为了方便、将 "\\\\" 变换为 "\000"
  410.     text.gsub!(/\\\\/) { "\000" }
  411.     # "\\C" 变为 "\001"
  412.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  413.     # "\I" 变为 "\002"
  414.     text.gsub!(/\\[Ii]/) { "\002" }
  415.     # "\P" 变为 "\003"
  416.     text.gsub!(/\\[Pp]/) { "\003" }
  417.     # c 获取 1 个字 (如果不能取得文字就循环)
  418.     while ((c = text.slice!(/./m)) != nil)
  419.       # \\ 的情况下
  420.       if c == "\000"
  421.         # 还原为本来的文字
  422.         c = "\\"
  423.       end
  424.       # \C[n] 的情况下
  425.       if c == "\001"
  426.         # 更改文字色
  427.         text.sub!(/\[([0-9]+)\]/, "")
  428.         color = $1.to_i
  429.         if color >= 0 and color <= 7
  430.           self.contents.font.color = text_color(color)
  431.         elsif color == 8
  432.           self.contents.font.color = disabled_color
  433.         elsif color == 9
  434.           self.contents.font.color = system_color
  435.         end
  436.         # 下面的文字
  437.         next
  438.       end
  439.       # 图标的情况下
  440.       if c == "\002"
  441.         icon_name = ''
  442.         while ((cha = text.slice!(/./m)) != ']')
  443.           next if cha == '['
  444.           icon_name += cha
  445.         end
  446.         icon = RPG::Cache.icon(icon_name)
  447.         if x + icon.width > self.contents.width
  448.           x = 0
  449.           y += [32, min_y].max
  450.           min_y = 0
  451.         end
  452.         self.contents.blt(x + 4, y + 4, icon, Rect.new(0, 0, 24, 24))
  453.         x += 28
  454.         next
  455.       end
  456.       # 图片的情况下
  457.       if c == "\003"
  458.         pic_name = ''
  459.         while ((cha = text.slice!(/./m)) != ']')
  460.           next if cha == '['
  461.           pic_name += cha
  462.         end
  463.         pic = RPG::Cache.picture(pic_name)
  464.         if x + pic.width > self.contents.width
  465.           x = 0
  466.           y += [32, min_y].max
  467.           min_y = 0
  468.         end
  469.         self.contents.blt(x + 4, y, pic, Rect.new(0, 0, pic.width, pic.height))
  470.         x += pic.width
  471.         next
  472.       end
  473.       # 描绘文字
  474.       self.contents.draw_text(4 + x, y, 40, 32, c)
  475.       # x 为要描绘文字的加法运算
  476.       x += self.contents.text_size(c).width
  477.     end
  478.   end
  479.   #--------------------------------------------------------------------------
  480.   # ● 描绘空行
  481.   #--------------------------------------------------------------------------
  482.   def draw_blank
  483.     self.contents.font.color = disabled_color
  484.     rect = Rect.new(4, 0, self.contents.width - 8, 32)
  485.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  486.     self.contents.draw_text(rect, '   ')
  487.   end
  488.   #--------------------------------------------------------------------------
  489.   # ● 获取任务
  490.   #--------------------------------------------------------------------------
  491.   def task
  492.     return @tasks[self.index]
  493.   end
  494. end
  495.   
  496. #==============================================================================
  497. # ■ Window_Task
  498. #------------------------------------------------------------------------------
  499. #  任务内容显示窗口。
  500. #==============================================================================

  501. class Window_Task < Window_Base
  502.   #--------------------------------------------------------------------------
  503.   # ● 初始化对像
  504.   #--------------------------------------------------------------------------
  505.   def initialize(task_id)
  506.     super(240, 0, 400, 480)
  507.     self.opacity = 0
  508.     refresh(task_id)
  509.   end
  510.   #--------------------------------------------------------------------------
  511.   # ● 刷新内容
  512.   #--------------------------------------------------------------------------
  513.   def refresh(task_id)
  514.     self.oy = 0
  515.     self.visible = true
  516.     return if task_id.nil?
  517.     task = $game_party.tasks_info[task_id]
  518.     if !task.nil?
  519.       self.contents = Bitmap.new(self.width - 32, task.height)
  520.     else
  521.       self.contents = Bitmap.new(self.width - 32, self.height - 32)
  522.       return
  523.     end
  524.     self.contents.font.color = normal_color
  525.     # 描绘任务内容
  526.     draw_task_info(task)
  527.   end
  528.   #--------------------------------------------------------------------------
  529.   # ● 描绘任务内容
  530.   #--------------------------------------------------------------------------
  531.   def draw_task_info(task)
  532.     # 记录文字x坐标
  533.     x = 0
  534.     # 记录文字y坐标
  535.     y = 0
  536.     # 记录换行时y坐标最小加值
  537.     min_y = 0
  538.     self.contents.font.color = normal_color
  539.     # 描绘任务简介
  540.     text = task.briefing.clone
  541.     # 限制文字处理
  542.     begin
  543.       last_text = text.clone
  544.       text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  545.     end until text == last_text
  546.     text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  547.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  548.     end
  549.     # 为了方便、将 "\\\\" 变换为 "\000"
  550.     text.gsub!(/\\\\/) { "\000" }
  551.     # "\C" 变为 "\001"
  552.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  553.     # "\I" 变为 "\002"
  554.     text.gsub!(/\\[Ii]/) { "\002" }
  555.     # "\P" 变为 "\003"
  556.     text.gsub!(/\\[Pp]/) { "\003" }
  557.     # c 获取 1 个字 (如果不能取得文字就循环)
  558.     while ((c = text.slice!(/./m)) != nil)
  559.       # \\ 的情况下
  560.       if c == "\000"
  561.         # 还原为本来的文字
  562.         c = "\\"
  563.       end
  564.       # \C[n] 的情况下
  565.       if c == "\001"
  566.         # 更改文字色
  567.         text.sub!(/\[([0-9]+)\]/, "")
  568.         color = $1.to_i
  569.         if color >= 0 and color <= 7
  570.           self.contents.font.color = text_color(color)
  571.         elsif color == 8
  572.           self.contents.font.color = disabled_color
  573.         elsif color == 9
  574.           self.contents.font.color = system_color
  575.         end
  576.         # 下面的文字
  577.         next
  578.       end
  579.       # 图标的情况下
  580.       if c == "\002"
  581.         icon_name = ''
  582.         while ((cha = text.slice!(/./m)) != ']')
  583.           next if cha == '['
  584.           icon_name += cha
  585.         end
  586.         icon = RPG::Cache.icon(icon_name)
  587.         if x + icon.width > self.contents.width
  588.           x = 0
  589.           y += [32, min_y].max
  590.           min_y = 0
  591.         end
  592.         self.contents.blt(x + 4, y + 4, icon, Rect.new(0, 0, 24, 24))
  593.         x += 28
  594.         next
  595.       end
  596.       # 图片的情况下
  597.       if c == "\003"
  598.         pic_name = ''
  599.         while ((cha = text.slice!(/./m)) != ']')
  600.           next if cha == '['
  601.           pic_name += cha
  602.         end
  603.         pic = RPG::Cache.picture(pic_name)
  604.         if x + pic.width > self.contents.width
  605.           x = 0
  606.           y += [32, min_y].max
  607.           min_y = 0
  608.         end
  609.         self.contents.blt(x + 4, y, pic, Rect.new(0, 0, pic.width, pic.height))
  610.         x += pic.width
  611.         min_y = [pic.height, 32].max
  612.         next
  613.       end
  614.       # 另起一行文字的情况下
  615.       if c == "\n"
  616.         y += [32, min_y].max
  617.         min_y = 0
  618.         x = 0
  619.         # 下面的文字
  620.         next
  621.       end
  622.       # 自动换行处理
  623.       if x + self.contents.text_size(c).width > self.contents.width
  624.         y += [32, min_y].max
  625.         min_y = 0
  626.         x = 0
  627.       end
  628.       # 描绘文字
  629.       self.contents.draw_text(4 + x, y, 40, 32, c)
  630.       # x 为要描绘文字的加法运算
  631.       x += self.contents.text_size(c).width
  632.     end
  633.   end
  634. end

  635. #==============================================================================
  636. # ■ Scene_Task
  637. #------------------------------------------------------------------------------
  638. #  处理任务画面的类。
  639. #==============================================================================

  640. class Scene_Task
  641.   #--------------------------------------------------------------------------
  642.   # ● 主处理
  643.   #--------------------------------------------------------------------------
  644.   def main
  645.     # 刷新任务资料
  646.     $game_party.get_tasks_info
  647.     # 生成任务名称窗口
  648.     @task_names_window = Window_Task_Name.new($game_party.current_tasks)
  649.     @task_names_window.active = true
  650.     if $game_party.current_tasks != []
  651.       @task_names_window.index = $game_party.current_tasks.index($game_party.latest_task)
  652.     end
  653.     # 生成任务内容窗口
  654.     @task_info_window = Window_Task.new($game_party.latest_task)
  655.     @task_info_window.active = true
  656.     # 执行过渡
  657.     Graphics.transition
  658.     # 主循环
  659.     loop do
  660.       # 刷新游戏画面
  661.       Graphics.update
  662.       # 刷新输入信息
  663.       Input.update
  664.       # 刷新画面
  665.       update
  666.       # 如果画面被切换的话就中断循环
  667.       if $scene != self
  668.         break
  669.       end
  670.     end
  671.     # 准备过渡
  672.     Graphics.freeze
  673.     # 释放窗口
  674.     @task_names_window.dispose
  675.     @task_info_window.dispose
  676.   end
  677.   #--------------------------------------------------------------------------
  678.   # ● 刷新画面
  679.   #--------------------------------------------------------------------------
  680.   def update
  681.     # 刷新窗口
  682.     @task_names_window.update
  683.     @task_info_window.update
  684.     update_task_names_window
  685.   end
  686.   #--------------------------------------------------------------------------
  687.   # ● 刷新任务名称窗口
  688.   #--------------------------------------------------------------------------
  689.   def update_task_names_window
  690.     # 按下 B 键的情况下
  691.     if Input.trigger?(Input::B)
  692.       # 演奏取消 SE
  693.       $game_system.se_play($data_system.cancel_se)
  694.       # 这里设置返回的场景,返回地图是Scene_Map.new,菜单是Scene_Menu.new(任务界面index)
  695.       $scene = Scene_Map.new
  696.       return
  697.     end
  698.     # 按下 C 键的情况下
  699.     if Input.trigger?(Input::C)
  700.       # 无任务可显示的话
  701.       if @task_names_window.task == nil
  702.         # 演奏冻结 SE
  703.         $game_system.se_play($data_system.buzzer_se)
  704.         return
  705.       end
  706.       # 如果光标没有移动的话,翻页
  707.       if $game_party.latest_task == @task_names_window.task.id
  708.         if @task_info_window.oy + @task_info_window.height - 32 > @task_info_window.contents.height
  709.           @task_info_window.oy = 0
  710.         else
  711.           @task_info_window.oy += 480-32
  712.         end
  713.         if @task_info_window.contents.height > @task_info_window.height - 32
  714.           # 演奏翻页 SE
  715.           Audio.se_play(CHANGE_PAGE_SE)
  716.         end
  717.       else
  718.         @task_info_window.refresh(@task_names_window.task.id)
  719.         $game_party.latest_task = @task_names_window.task.id
  720.         # 演奏确定 SE
  721.         $game_system.se_play($data_system.decision_se)
  722.       end
  723.     end
  724.   end
  725. end
复制代码

星星在哪里都是很亮的,就看你有沒有抬頭去看他們                       --------華麗麗的百變暖暖窩
本人之作《夙誓》龜速進行中。。= =!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-12 12:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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