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

Project1

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

公共事件自制菜单的方法是否和XP一样?

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-8-21
帖子
118
跳转到指定楼层
1
发表于 2009-1-22 08:51:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我感觉不太一样!

我只需要  存档和结束  这两个选项, 我按照XP那样做对不对?

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
001:并行处理
  名称:                目标:               条件开关:
  并行处理              并行处理             0007:游戏开始
  
  执行内容:
  
  条件分歧:按钮 B 被按下时
      开关操作: [0008:菜单] = ON
      开关操作: [0007:游戏开始] = OFF
  分歧结束


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


002:菜单
  名称:                目标:               条件开关:
  菜单                  自动执行             0008:菜单

  执行内容:
  
  文章:需要怎样?
  显示选择项:存档,结束,取消
   [存档] 的场合
      播放SE:  …………
      打开存档画面
   
   [结束] 的场合
      游戏结束

   [取消] 的场合

   分歧结束
   开关操作: [0008:菜单] = OFF
   开关操作: [0007:游戏开始] = ON


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


我这样做之后游戏中储存的时候有时会显示

脚本'Scene-File'的第 223 行发生了 TypeError。
no marshal_dump is defined for class Sprite

就是这句     Marshal.dump($game_player,         file)    有问题

不是每次储存都会出现,有时好好的,但是有时就会出现这种情况,为什么会这样??


这一句到底是什么意思呢?

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

Lv2.观梦者

天仙

梦石
0
星屑
620
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

2
发表于 2009-1-22 09:30:20 | 只看该作者
上传工程看看
公共事件应该一样
可能是你的脚本哪里出了问题
VA脚本开工中...
偷窃脚本1.0 - 已完成
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-8-21
帖子
118
3
 楼主| 发表于 2009-1-22 23:12:55 | 只看该作者
既然一样,那为什么我使用这个  公共事件  自制的  存档  和  结束  就会出现这个问题
而如果我不使用这个公共事件,用 默认菜单 储存或结束 的话就什么问题都没有呢


顺便问一句~怎么上传工程
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3309
在线时间
3620 小时
注册时间
2006-9-6
帖子
37400

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

4
发表于 2009-1-22 23:30:52 | 只看该作者
应该是你脚本改错了吧,
事件是没区别的。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-8-21
帖子
118
5
 楼主| 发表于 2009-1-23 00:41:39 | 只看该作者
我没改过脚本,上面说了~我用这个公共事件就会出现这个

脚本'Scene-File'的第 223 行发生了 TypeError。
no marshal_dump is defined for class Sprite

如国不用就什么事都没~~~这怎么解释呢??
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-8-21
帖子
118
6
 楼主| 发表于 2009-1-23 05:29:03 | 只看该作者
更正一下!!
现在我用默认的储存方法也会出现这个问题,我在地图1储存一下,然后场景移动,到地图2,如果储存的话就会出错!!
我现在极度郁闷这到底是什么引起的!!我就用了这4个脚本

升级提示:


  1. #=======================================================================
  2. #★升级提示★
  3. #-----------------------------------------------------------------------
  4. #★作者: Zhong_zw
  5. #★联系方式:66RPG.com论坛短信 或 [email protected]
  6. #=======================================================================
  7. class Game_Actor < Game_Battler

  8.   attr_accessor :last_level   
  9.    def initialize(actor_id)
  10.     super()
  11.     setup(actor_id)
  12.     @last_level = 0
  13.     @last_skill_id = 0
  14.    end
  15.    def last_atk
  16.     return actor.parameters[2,@last_level]
  17.   end
  18.   def last_def
  19.     return actor.parameters[3,@last_level]
  20.   end
  21.   def last_spi
  22.     return actor.parameters[4,@last_level]
  23.   end
  24.   def last_agi
  25.     return actor.parameters[5,@last_level]
  26.    end
  27.   def now_atk
  28.     return actor.parameters[2,@level]
  29.   end
  30.   def now_def
  31.     return actor.parameters[3,@level]
  32.   end
  33.   def now_spi
  34.     return actor.parameters[4,@level]
  35.   end
  36.   def now_agi
  37.     return actor.parameters[5,@level]
  38.   end  
  39.    def change_exp(exp, show)
  40.     @last_level = @level
  41.     last_skills = skills
  42.    
  43.     @exp = [[exp, 9999999].min, 0].max
  44.    while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
  45.       level_up
  46.     end
  47.     while @exp < @exp_list[@level]
  48.       level_down
  49.     end
  50.     @hp = [@hp, maxhp].min
  51.     @mp = [@mp, maxmp].min
  52.     if show and @level > last_level
  53.       
  54.       zhonglevelup_push(skills - last_skills)
  55.     end
  56.   end
  57.    #==========================================================================
  58.   #★角色升级显示
  59.   #==========================================================================
  60.   
  61.   def zhonglevelup_push(new_skills)
  62.    
  63.     text = [@actor_id,new_skills]
  64.     $game_temp.levelup_texts.push(text)
  65.   end
  66. end



  67. class Scene_Battle < Scene_Base

  68. def display_level_up
  69.     exp = $game_troop.exp_total
  70.     $game_party.remove_states_battle
  71.     @message_window.contents_opacity = 0
  72.     @message_window.opacity = 0
  73.     @levelup_window = Window_zhonglevelup.new
  74.     for actor in $game_party.existing_members
  75.       last_level = actor.level
  76.       last_skills = actor.skills
  77.       actor.gain_exp(exp, true)
  78.     end
  79.    
  80.     update_zhonglevelup
  81.    
  82.    
  83.   end
  84.   #==========================================================================
  85.   #★等待升级窗口刷新
  86.   #==========================================================================
  87.    def update_zhonglevelup
  88.       @levelup_window.update
  89.      while @levelup_window.visible
  90.        @levelup_window.update
  91.        Graphics.update
  92.        Input.update
  93.      end
  94.    end
  95.    
  96. end   

  97. class Game_Temp
  98.     attr_accessor :levelup_texts
  99.   #--------------------------------------------------------------------------
  100.   # ● オブジェクト初期化
  101.   #--------------------------------------------------------------------------
  102.   alias oldinitialize initialize
  103.   def initialize
  104.     @levelup_texts = []
  105.     oldinitialize
  106.   end  
  107.   
  108. end


  109. class Window_zhonglevelup < Window_Base

  110.   attr_accessor :index
  111.   def initialize
  112.     super(122, 15, 350, 345)
  113.     $game_temp.levelup_texts = []
  114.     @index = 0
  115.     @skill_index = 0
  116.     @skill_window = Window_Base.new(122,23,260,36)
  117.     @skill_window.opacity = 0
  118.     @skill_window.z = self.z - 1
  119.     @main_window = Window_Base.new(122,59,260,290)
  120.     @main_window.opacity = 0
  121.     @main_window.z = self.z - 1
  122.    
  123.     self.opacity = 0
  124.     self.visible = false
  125.    
  126.     #update
  127.    
  128.    end
  129.   
  130.   
  131.   #--------------------------------------------------------------------------
  132.   # ★ $game_temp.levelup_texts = [角色id,新特技]
  133.   #--------------------------------------------------------------------------
  134.   def update
  135.    
  136.    
  137.     zhonginputupdate if @index <= $game_temp.levelup_texts.size-1
  138.      
  139.     if @index <= $game_temp.levelup_texts.size-1      
  140.       
  141.       self.visible = true
  142.       @main_window.opacity = 150
  143.       actor = $game_actors[$game_temp.levelup_texts[@index][0]]
  144.       if @skill_index == 0 and $game_temp.levelup_texts[@index][1].size != 0
  145.         @skill_index = $game_temp.levelup_texts[@index][1].size
  146.       end  
  147.       level = actor.level
  148.       last_level = actor.last_level
  149.       atk = actor.now_atk
  150.       now_def = actor.now_def
  151.       spi = actor.now_spi
  152.       agi = actor.now_agi
  153.       last_atk = actor.last_atk
  154.       last_def = actor.last_def
  155.       last_spi = actor.last_spi
  156.       last_agi = actor.last_agi
  157.       
  158.       
  159.       self.contents.clear
  160.       
  161.       # x = 122
  162.       # y = 58
  163.        @skill_window.opacity = $game_temp.levelup_texts[@index][1].size != 0 ? 150 : 0
  164.        skill_name = $game_temp.levelup_texts[@index][1][@skill_index - 1].name if @skill_index != 0
  165.        level_name = Vocab::level
  166.        atk_name = Vocab::atk
  167.        def_name = Vocab::def
  168.        spi_name = Vocab::spi
  169.        agi_name = Vocab::agi
  170.        font = self.contents.font.size
  171.        x = 5
  172.        y = 165
  173.        self.contents.draw_text(x,y,60,60,atk_name)
  174.        self.contents.draw_text(x,y+30,60,60,def_name)
  175.        self.contents.draw_text(x,y+60,60,60,spi_name)
  176.        self.contents.draw_text(x,y+90,60,60,agi_name)
  177.        self.contents.draw_text(x + 45,y,60,60, last_atk)
  178.        self.contents.draw_text(x + 45,y+30,60,60,last_def)
  179.        self.contents.draw_text(x + 45,y+60,60,60,last_spi)
  180.        self.contents.draw_text(x + 45,y + 90,60,60,last_agi)
  181.        self.contents.draw_text(x,y-30,60,60,level_name)
  182.        self.contents.draw_text(x + 45,y-30,60,60,last_level)
  183.        self.contents.font.color = Color.new(0,255,0,255)
  184.        self.contents.draw_text(x + 105,y-30,60,60,level)
  185.        bitmap_5 = Bitmap.new("Graphics/system/箭头")
  186.        rect_5 = Rect.new(0,0,bitmap_5.width,bitmap_5.height)
  187.        self.contents.blt(x + 70,y - 18,bitmap_5,rect_5)
  188.        if atk > last_atk
  189.          self.contents.draw_text(x+105,y,60,60,atk)
  190.          atk_opacity = 255
  191.        else
  192.          atk_opacity = 0
  193.        end  
  194.        bitmap_1 = Bitmap.new("Graphics/system/箭头")
  195.        rect_1 = Rect.new(0,0,bitmap_1.width,bitmap_1.height)
  196.        self.contents.blt(x+70,y+12,bitmap_1,rect_1,atk_opacity)
  197.       
  198.       
  199.        if now_def > last_def
  200.          self.contents.draw_text(x+105,y+30,60,60,now_def)
  201.          def_opacity = 255
  202.        else
  203.          def_opacity = 0
  204.        end
  205.        bitmap_2 = Bitmap.new("Graphics/system/箭头")
  206.        rect_2 = Rect.new(0,0,bitmap_1.width,bitmap_1.height)
  207.        self.contents.blt(x+70,y+42,bitmap_1,rect_1,def_opacity)
  208.       
  209.        if spi > last_spi
  210.          self.contents.draw_text(x+105,y+60,60,60,spi)
  211.          spi_opacity = 255
  212.        else
  213.          spi_opacity = 0
  214.        end
  215.       
  216.        bitmap_3 = Bitmap.new("Graphics/system/箭头")
  217.        rect_3 = Rect.new(0,0,bitmap_1.width,bitmap_1.height)
  218.        self.contents.blt(x+70,y+72,bitmap_1,rect_1,spi_opacity)
  219.       
  220.        if agi > last_agi
  221.          self.contents.draw_text(x + 105,y + 90,60,60,agi)
  222.          agi_opacity = 255
  223.        else
  224.          agi_opacity = 0
  225.        end
  226.        bitmap_4 = Bitmap.new("Graphics/system/箭头")
  227.        rect_4 = Rect.new(0,0,bitmap_1.width,bitmap_1.height)
  228.        self.contents.blt(x+70,y+102,bitmap_1,rect_1,agi_opacity)
  229.          
  230.       
  231.       
  232.       
  233.        self.contents.font.color = normal_color
  234.        self.contents.font.size = 16
  235.        self.contents.draw_text(60, -19, 120, 60,"学会了 #{skill_name}")if @skill_index != 0
  236.        self.contents.font.color = Color.new(255,255,0,255)
  237.        self.contents.draw_text(61, -19,120,60,"       #{skill_name}")
  238.        self.contents.font.size = font
  239.        draw_face(actor.face_name, actor.face_index,3, 55, size = 80)
  240.        draw_actor_name(actor, 92, 55)
  241.        draw_actor_hp(actor, 95, 85)
  242.        draw_actor_mp(actor, 95, 115)
  243.       
  244.        self.contents.font.color = normal_color
  245.        actor.hp = [actor.maxhp,9999].min
  246.        actor.mp = [actor.maxmp,9999].min
  247.       
  248.       
  249.    
  250.      else
  251.        @main_window.visible = false
  252.        @skill_window.visible =false
  253.        self.visible = false
  254.       
  255.     end   
  256.    
  257.    
  258.      
  259.   end
  260.   #==========================================================================
  261.   #★窗口按键刷新
  262.   #==========================================================================
  263.    def zhonginputupdate
  264.      if Input.trigger?(Input::DOWN)
  265.        if @skill_index != 0
  266.          @skill_index -= 1
  267.          end
  268.          @index += 1 if @skill_index == 0
  269.      end
  270.      if Input.trigger?(Input::UP)
  271.         
  272.         if @skill_index != 0
  273.          @skill_index -= 1
  274.          end
  275.          @index += 1 if @skill_index == 0
  276.       end
  277.       if Input.trigger?(Input::RIGHT)
  278.         
  279.        if @skill_index != 0
  280.          @skill_index -= 1
  281.          end
  282.          @index += 1 if @skill_index == 0
  283.         
  284.       end
  285.       if Input.trigger?(Input::LEFT)
  286.          
  287.          if @skill_index != 0
  288.          @skill_index -= 1
  289.          end
  290.          @index += 1 if @skill_index == 0
  291.          
  292.       end
  293.       if Input.trigger?(Input::B)
  294.          
  295.           if @skill_index != 0
  296.          @skill_index -= 1
  297.          end
  298.          @index += 1 if @skill_index == 0
  299.         
  300.       end
  301.       if Input.trigger?(Input::C)
  302.          if @skill_index != 0
  303.          @skill_index -= 1
  304.          end
  305.          @index += 1 if @skill_index == 0
  306.          
  307.       end
  308.    end
  309.    
  310.   #==========================================================================  
  311.    
  312.   def dispose
  313.     super
  314.     @skill_window.dispose
  315.     @main_window.dispose
  316.   end  
  317.   
  318.   
  319. end

  320. class Scene_Map < Scene_Base
  321.   
  322. def start
  323.     super
  324.     $game_map.refresh
  325.     @spriteset = Spriteset_Map.new
  326.     @message_window = Window_Message.new
  327.     @levelup_window = Window_zhonglevelup.new
  328.     @lus_window = Window_Base.new(122,23,260,36)
  329.     @m_window = Window_Base.new(122,59,260,290)
  330.     @m_window.opacity = 0
  331.     @lus_window.opacity = 0
  332.     @m_window.z = 9998
  333.     @lus_window.z = 9998
  334.     @levelup_window.z = 9999
  335.   end
  336.   
  337. def update
  338.     super
  339.     $game_map.interpreter.update   
  340.     $game_map.update                  
  341.     $game_player.update               
  342.     $game_system.update               
  343.     @spriteset.update                 
  344.     @message_window.update            
  345.    
  346.     unless $game_message.visible      
  347.       update_levelup_window
  348.       update_transfer_player
  349.       update_encounter
  350.       update_call_menu
  351.       update_call_debug
  352.       update_scene_change
  353.     end
  354.   end
  355.   
  356.   def update_levelup_window
  357.       @levelup_window.update
  358.       while @levelup_window.visible
  359.         
  360.         @lus_window.opacity = $game_temp.levelup_texts[@levelup_window.index][1].size != 0 ? 150 : 0
  361.         @m_window.opacity = 150
  362.         @levelup_window.update
  363.         Graphics.update
  364.         Input.update
  365.        end
  366.      @m_window.opacity = 0
  367.     @lus_window.opacity = 0
  368.    
  369.   end   
  370. def terminate
  371.     super
  372.     if $scene.is_a?(Scene_Battle)     # バトル画面に切り替え中の場合
  373.       @spriteset.dispose_characters   # 背景作成のためにキャラを隠す
  374.     end
  375.     snapshot_for_background
  376.     @spriteset.dispose
  377.     @message_window.dispose
  378.     @levelup_window.dispose
  379.     @m_window.dispose
  380.     @lus_window.dispose
  381.     if $scene.is_a?(Scene_Battle)     # バトル画面に切り替え中の場合
  382.       perform_battle_transition       # 戦闘前トランジション実行
  383.     end
  384.   end
  385. end


复制代码



自动显示地图名

  1. #====================================================================
  2. #★显示地名脚本
  3. #--------------------------------------------------------------------
  4. #★作者:Zhong_Zw
  5. #★联系方式:66rpg.com论坛短信 或 [email protected]
  6. #★注:与站上的肯定有区别,因为是我默写的,如有雷同,纯属巧合!
  7. #=====================================================================


  8. SWICHES = 3
  9. class Mapname_window < Window_Base
  10.    def initialize
  11.     super(0, 0, 280, WLH + 64)
  12.     self.opacity = 0
  13.     refresh
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # ● リフレッシュ
  17.   #--------------------------------------------------------------------------
  18.   def refresh
  19.     self.contents.clear
  20.     self.contents.font.size = 32
  21.     self.contents.font.color = Color.new(0,0,0,255)
  22.     self.contents.draw_text(1,1,120,32,$game_map.name,2)
  23.     self.contents.font.color = normal_color
  24.     self.contents.draw_text(0,0,120,32,$game_map.name,2)
  25.   end
  26.   def update
  27.     super
  28.     refresh
  29.   end   
  30.   
  31. end


  32. class Game_Map
  33.   attr_accessor :name
  34.   def setup(map_id)
  35.     @map_id = map_id
  36.     @map = load_data(sprintf("Data/Map%03d.rvdata", @map_id))
  37.     @mapinfo = load_data("Data/MapInfos.rvdata")
  38.     #============================
  39.     @name = @mapinfo[@map_id].name
  40.     #============================
  41.     @display_x = 0
  42.     @display_y = 0
  43.     @passages = $data_system.passages
  44.     referesh_vehicles
  45.     setup_events
  46.     setup_scroll
  47.     setup_parallax
  48.     @need_refresh = false
  49.   end
  50. end  

  51. class Scene_Map < Scene_Base
  52.   alias oldstart start
  53.   def start
  54.     oldstart
  55.     @mapname_window = Mapname_window.new
  56.     @mapname_window.x = 272
  57.     @levelup_window = Window_zhonglevelup.new
  58.     @lus_window = Window_Base.new(122,23,260,36)
  59.     @m_window = Window_Base.new(122,59,260,290)
  60.     @m_window.opacity = 0
  61.     @lus_window.opacity = 0
  62.     @m_window.z = 9998
  63.     @lus_window.z = 9998
  64.     @levelup_window.z = 9999
  65.     @last_mapname = $game_map.name
  66.     unless $game_switches[SWICHES]  
  67.       @mapname_window.opacity = 0
  68.       @mapname_window.contents_opacity = 0
  69.     end  
  70.   end
  71.   def update
  72.     super
  73.     $game_map.interpreter.update      
  74.     $game_map.update                  
  75.     $game_player.update              
  76.     $game_system.update               
  77.     @spriteset.update               
  78.     @message_window.update            
  79.     if @last_name != $game_map.name
  80.        @last_name = $game_map.name
  81.       if $game_switches[SWICHES]
  82.       @mapname_window.update
  83.       #@mapname_window.opacity = 200
  84.       @mapname_window.x = 272
  85.       @mapname_window.contents_opacity = 255
  86.       end
  87.     end  
  88.     if @mapname_window.x <= 440
  89.       @mapname_window.x += 1
  90.      # @mapname_window.opacity -= 2
  91.       @mapname_window.contents_opacity -= 2
  92.     end  
  93.     unless $game_message.visible      
  94.       update_levelup_window
  95.       update_transfer_player
  96.       update_encounter
  97.       update_call_menu
  98.       update_call_debug
  99.       update_scene_change
  100.     end
  101.   end
  102.   def update_levelup_window
  103.       @levelup_window.update
  104.       while @levelup_window.visible
  105.         
  106.         @lus_window.opacity = $game_temp.levelup_texts[@levelup_window.index][1].size != 0 ? 150 : 0
  107.         @m_window.opacity = 150
  108.         @levelup_window.update
  109.         Graphics.update
  110.         Input.update
  111.        end
  112.      @m_window.opacity = 0
  113.     @lus_window.opacity = 0
  114.    
  115.   end   
  116.   
  117.   
  118.   alias oldterminate  terminate
  119.   def terminate
  120.      @mapname_window.dispose
  121.     oldterminate
  122.   end  
  123. end

复制代码






路牌提示:


  1. #==============================================================================
  2. # 路牌提示系统 by 沉影不器
  3. #------------------------------------------------------------------------------
  4. # 功能说明:
  5. #   仿照《黑暗圣剑传说2 序章》(柳柳)的介绍里提到的效果写的,据说是空之轨迹里的效果
  6. #   原游戏的实现方式是公共事件播放动画, 以下引用原描述:
  7. #     "方便玩家的路牌设计, 当靠近路牌的时候, 路牌就会指引玩家的方向"
  8. #------------------------------------------------------------------------------
  9. # 使用说明(详见范例工程):
  10. #   ① 制作路牌皮肤文件, 包含三个文件(64×64的窗体和两个箭头标志)
  11. #   ② 在地图上创建路牌事件, 并在事件中用注释写上指路内容, 允许多项
  12. #   ③ 指路内容格式为(忽略空格): 方向代号 = 该方向所指向的名称
  13. #      其中方向代号为: 2 4 6 8
  14. #      例: 2 = 悦来客栈        显示"↓ 悦来客栈"
  15. #   ④ 创建与路牌事件同名的区域, 表示玩家进入该区域时激活相应路牌
  16. #==============================================================================
  17. # □ Spriteset_Roadsign
  18. #==============================================================================
  19. class Spriteset_Roadsign
  20.   #--------------------------------------------------------------------------
  21.   # ○ 参数设定
  22.   #--------------------------------------------------------------------------
  23.   WIDTH_MIN = 96                      # 窗体最小宽度
  24.   SHOW_TIME = 60                      # 窗体显示时间
  25.   
  26.   FONT = "黑体"                       # 字体
  27.   FONT_SIZE = 14                      # 字体大小
  28.   FONT_SHADOW = false                 # 字体阴影
  29.   FONT_COLOR = Color.new(0,0,0)       # 字体颜色
  30.   
  31.   SIGN_SKIN = "Roadsign"              # 路牌皮肤
  32.   SKIN_SIZE = 8                       # 皮肤厚度(边框)
  33.   SIGN_OPACITY = 192                  # 路牌不透明度
  34.   
  35.   X_ADJ = 0                           # 路牌箭头坐标微调
  36.   Y_ADJ = 0
  37.   #--------------------------------------------------------------------------
  38.   # ○ 初始化对象
  39.   #     event : 事件
  40.   #--------------------------------------------------------------------------
  41.   def initialize(event)
  42.     @event = event
  43.     # 显示控制符
  44.     @show = true
  45.     # 显示时间计数
  46.     @show_count = 0
  47.     # 相对定位
  48.     @x_plus = 0
  49.     @y_plus = 0
  50.     # 描绘内容
  51.     @texts = get_texts
  52.     # 主'窗体'
  53.     @base_sprite = Sprite.new
  54.     @base_sprite.z = 999
  55.     @base_sprite.opacity = 0
  56.     # 大小和尺寸
  57.     set_size
  58.     get_pos
  59.     reset_pos
  60.     # 描绘皮肤
  61.     draw_skin
  62.     refresh
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ○ 释放
  66.   #--------------------------------------------------------------------------
  67.   def dispose
  68.     @base_sprite.bitmap.dispose
  69.     @base_sprite.dispose
  70.     @arrow_sprite.bitmap.dispose
  71.     @arrow_sprite.dispose
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ○ 是否释放
  75.   #--------------------------------------------------------------------------
  76.   def disposed?
  77.     return @base_sprite.disposed?
  78.   end
  79.   #--------------------------------------------------------------------------
  80.   # ○ 更新画面
  81.   #--------------------------------------------------------------------------
  82.   def update
  83.     # 跟随路牌
  84.     reset_pos
  85.     # 显示期
  86.     if @show_count > 0
  87.       @show_count -= 1
  88.       return
  89.     end
  90.     # 开始显示期
  91.     if @base_sprite.opacity >= 255
  92.       @show_count = SHOW_TIME
  93.       @show = false
  94.     end
  95.     # 显示中或隐藏中
  96.     if @show
  97.       @base_sprite.opacity += 8 if @base_sprite.opacity < 255
  98.     else
  99.       @base_sprite.opacity -= 8 if @base_sprite.opacity > 0
  100.     end
  101.     @arrow_sprite.opacity = @base_sprite.opacity
  102.     # 自释放
  103.     self.dispose if !@show and @base_sprite.opacity <= 0
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # ○ 获取描绘文本
  107.   #--------------------------------------------------------------------------
  108.   def get_texts
  109.     down  = @event.read_roadsign("2")
  110.     left  = @event.read_roadsign("4")
  111.     right = @event.read_roadsign("6")
  112.     up    = @event.read_roadsign("8")
  113.     texts = []
  114.     texts.push("↓ " + down)  if down  != ""
  115.     texts.push("← " + left)  if left  != ""
  116.     texts.push("→ " + right) if right != ""
  117.     texts.push("↑ " + up)    if up    != ""
  118.     return texts
  119.   end
  120.   #--------------------------------------------------------------------------
  121.   # ○ 创建位图
  122.   #--------------------------------------------------------------------------
  123.   def create_bitmap(width, height)
  124.     @base_sprite.bitmap = Bitmap.new(width, height)
  125.     # 字体设定
  126.     @base_sprite.bitmap.font = Font.new(FONT, FONT_SIZE)
  127.     @base_sprite.bitmap.font.shadow = FONT_SHADOW
  128.     @base_sprite.bitmap.font.color = FONT_COLOR
  129.   end
  130.   #--------------------------------------------------------------------------
  131.   # ○ 设定尺寸
  132.   #--------------------------------------------------------------------------
  133.   def set_size
  134.     # 最小宽度
  135.     width = WIDTH_MIN
  136.     # 测试宽度的临时位图
  137.     test_bitmap = Bitmap.new(1, 1)
  138.     test_bitmap.font = Font.new(FONT, FONT_SIZE)
  139.     for text in @texts
  140.       c_width = test_bitmap.text_size(text).width
  141.       width = c_width if c_width > width
  142.     end
  143.     height = @texts.size * line_height
  144.     create_bitmap(width+SKIN_SIZE*2, height+SKIN_SIZE*2)
  145.     # 释放临时位图
  146.     test_bitmap.dispose
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ○ 获取坐标
  150.   #--------------------------------------------------------------------------
  151.   def get_pos
  152.     x = @event.screen_x - width/2
  153.     if @event.screen_y > height
  154.       y = @event.screen_y - height - 32
  155.       # 箭头类型标志
  156.       up = true
  157.     else
  158.       y = @event.screen_y
  159.       # 箭头类型标志
  160.       up = false
  161.     end
  162.     # 相对定位
  163.     @x_plus = x - @event.screen_x
  164.     @y_plus = y - @event.screen_y
  165.     set_arrow_sprite(up)
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ○ 重设坐标
  169.   #--------------------------------------------------------------------------
  170.   def reset_pos
  171.     # 相对定位
  172.     @base_sprite.x = @event.screen_x + @x_plus
  173.     @base_sprite.y = @event.screen_y + @y_plus
  174.     @arrow_sprite.x = @event.screen_x - 16 + X_ADJ
  175.     @arrow_sprite.y = @event.screen_y - 32 + Y_ADJ
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ○ 设定箭头
  179.   #--------------------------------------------------------------------------
  180.   def set_arrow_sprite(up = true)
  181.     @arrow_sprite = Sprite.new
  182.     @arrow_sprite.opacity = 0
  183.     # 上下两套箭头
  184.     case up
  185.     when true
  186.       bitmap = Cache.system(SIGN_SKIN + "_arrow_up")
  187.       rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  188.       @arrow_sprite.bitmap = Bitmap.new(rect.width, rect.height)
  189.       @arrow_sprite.bitmap.blt(0, 0, bitmap, rect, SIGN_OPACITY)
  190.     when false
  191.       bitmap = Cache.system(SIGN_SKIN + "_arrow_down")
  192.       rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  193.       @arrow_sprite.bitmap = Bitmap.new(rect.width, rect.height)
  194.       @arrow_sprite.bitmap.blt(0, 0, bitmap, rect, SIGN_OPACITY)
  195.     end
  196.     bitmap.dispose
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ○ 获取宽度
  200.   #--------------------------------------------------------------------------
  201.   def width
  202.     return @base_sprite.width
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ○ 获取高度
  206.   #--------------------------------------------------------------------------
  207.   def height
  208.     return @base_sprite.height
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # ○ 获取行高
  212.   #--------------------------------------------------------------------------
  213.   def line_height
  214.     return FONT_SIZE + 2
  215.   end
  216.   #--------------------------------------------------------------------------
  217.   # ○ 描绘皮肤
  218.   #--------------------------------------------------------------------------
  219.   def draw_skin
  220.     # 皮肤文件
  221.     skin = Cache.system(SIGN_SKIN)
  222.     @base_sprite.bitmap.clear
  223.     # 描绘角
  224.     src_rect = Rect.new(0,0,16,16)
  225.     @base_sprite.bitmap.blt(0, 0, skin, src_rect, SIGN_OPACITY)
  226.     src_rect = Rect.new(48,0,16,16)
  227.     @base_sprite.bitmap.blt(width-16, 0, skin, src_rect, SIGN_OPACITY)
  228.     src_rect = Rect.new(0,48,16,16)
  229.     @base_sprite.bitmap.blt(0, height-16, skin, src_rect, SIGN_OPACITY)
  230.     src_rect = Rect.new(48,48,16,16)
  231.     @base_sprite.bitmap.blt(width-16, height-16, skin, src_rect, SIGN_OPACITY)
  232.     # 描绘边
  233.     dest_rect = Rect.new(16,0,width-32,16)
  234.     src_rect = Rect.new(16,0,32,16)
  235.     @base_sprite.bitmap.stretch_blt(dest_rect, skin, src_rect, SIGN_OPACITY)
  236.     dest_rect = Rect.new(16,height-16,width-32,16)
  237.     src_rect = Rect.new(16,48,32,16)
  238.     @base_sprite.bitmap.stretch_blt(dest_rect, skin, src_rect, SIGN_OPACITY)
  239.     dest_rect = Rect.new(0,16,16,height-32)
  240.     src_rect = Rect.new(0,16,16,32)
  241.     @base_sprite.bitmap.stretch_blt(dest_rect, skin, src_rect, SIGN_OPACITY)
  242.     dest_rect = Rect.new(width-16,16,16,height-32)
  243.     src_rect = Rect.new(48,16,16,32)
  244.     @base_sprite.bitmap.stretch_blt(dest_rect, skin, src_rect, SIGN_OPACITY)
  245.     # 描绘底
  246.     dest_rect = Rect.new(16,16,width-32,height-32)
  247.     src_rect = Rect.new(16,16,32,32)
  248.     @base_sprite.bitmap.stretch_blt(dest_rect, skin, src_rect, SIGN_OPACITY)
  249.     # 释放皮肤文件
  250.     skin.dispose
  251.   end
  252.   #--------------------------------------------------------------------------
  253.   # ○ 刷新
  254.   #--------------------------------------------------------------------------
  255.   def refresh
  256.     # 逐行
  257.     for i in [email protected]
  258.       rect = Rect.new(SKIN_SIZE, i*line_height+SKIN_SIZE, @base_sprite.width, line_height)
  259.       text = @texts[i]
  260.       @base_sprite.bitmap.draw_text(rect, text)
  261.     end
  262.   end
  263. end

  264. #==============================================================================
  265. # ■ Game_Event
  266. #==============================================================================
  267. class Game_Event < Game_Character
  268.   #--------------------------------------------------------------------------
  269.   # ◎ 定义实例变量
  270.   #--------------------------------------------------------------------------
  271.   attr_reader   :name                    # 事件名称
  272.   attr_accessor :roadsign                # 路牌标志
  273.   #--------------------------------------------------------------------------
  274.   # ◎ 刷新
  275.   #--------------------------------------------------------------------------
  276.   alias old_refresh refresh
  277.   def refresh
  278.     # 事件名称
  279.     @name = @event.name
  280.     # 路牌
  281.     @roadsign = ''
  282.     old_refresh
  283.   end
  284.   #-------------------------------------------------------------------------
  285.   # ○ 读取路牌指定字段
  286.   #     section : 字段名
  287.   #     ignore_caps : 忽略大小写(仅字段名)
  288.   #-------------------------------------------------------------------------
  289.   def read_roadsign(section, ignore_caps = false)
  290.     result = ''
  291.     # 忽略大小写时,全部转大写
  292.     section.upcase! if ignore_caps
  293.     # 转symbol方便比较
  294.     s = section.to_sym
  295.     @roadsign.each_line{|line|
  296.       temp = line.split(/=/)
  297.       # 去掉干扰字符
  298.       temp.each {|i| i.strip!}
  299.       temp[0].upcase! if ignore_caps
  300.       if temp[0].to_sym == s
  301.         unless temp[1] == nil
  302.           result = temp[1]
  303.         end
  304.         # 如果希望同名字段值覆盖前面的字段,去掉下一行
  305.         break
  306.       end
  307.     }
  308.     return result
  309.   end
  310. end

  311. #==============================================================================
  312. # ■ Game_Player
  313. #==============================================================================
  314. class Game_Player < Game_Character
  315.   #--------------------------------------------------------------------------
  316.   # ◎ 刷新画面
  317.   #--------------------------------------------------------------------------
  318.   alias old_update update
  319.   def update
  320.     old_update
  321.     # 路牌窗体刷新
  322.     unless @roadsign_sprite == nil or @roadsign_sprite.disposed?
  323.       @roadsign_sprite.update
  324.     end
  325.   end
  326.   #--------------------------------------------------------------------------
  327.   # ◎ 增加步数
  328.   #--------------------------------------------------------------------------
  329.   alias old_increase_steps increase_steps
  330.   def increase_steps
  331.     old_increase_steps
  332.     # 路牌操作
  333.     setup_roadsign_spriteset
  334.   end
  335.   #--------------------------------------------------------------------------
  336.   # ○ 显示路牌
  337.   #--------------------------------------------------------------------------
  338.   def setup_roadsign_spriteset
  339.     name = roadsign_name
  340.     return if name == "" or name == @old_name
  341.     @old_name = name
  342.     event = get_event(name)
  343.     return if event == nil
  344.     roadsign_event = setup_roadsign_event(event)
  345.     return if roadsign_event == nil
  346.     # 生成路牌窗体
  347.     if @roadsign_sprite == nil or @roadsign_sprite.disposed?
  348.       @roadsign_sprite = Spriteset_Roadsign.new(roadsign_event)
  349.     end
  350.   end
  351.   #--------------------------------------------------------------------------
  352.   # ○ 设置路牌
  353.   #     event   : 事件(Game_Map内部)
  354.   #--------------------------------------------------------------------------
  355.   def setup_roadsign_event(event)
  356.     return if event.list == nil
  357.     for line in event.list
  358.       if line.code == 108 or 408
  359.         unless line.parameters.empty?
  360.           event.roadsign += line.parameters.to_s + "\r\n"
  361.         end
  362.       end
  363.     end
  364.     return event
  365.   end
  366.   #--------------------------------------------------------------------------
  367.   # ○ 查找路牌名称
  368.   #--------------------------------------------------------------------------
  369.   def roadsign_name
  370.     for area in $data_areas.values
  371.       return area.name if $game_player.in_area?(area)
  372.     end
  373.     @old_name = ""
  374.     return @old_name
  375.   end
  376.   #--------------------------------------------------------------------------
  377.   # ○ 获取事件
  378.   #     event_name   : 事件名
  379.   #--------------------------------------------------------------------------
  380.   def get_event(event_name)
  381.     $game_map.events.each_value {|event|
  382.     return event if event.name == event_name}
  383.     return nil
  384.   end
  385. end
复制代码




回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-8-21
帖子
118
7
 楼主| 发表于 2009-1-23 05:30:05 | 只看该作者
一次发不完  还有这个

截图存档:

  1. #==============================================================================
  2. # vx新截图存档 by 沉影不器
  3. #------------------------------------------------------------------------------
  4. # ☆ 核心部分是内存位图的输入输出
  5. #    (快速存储Bitmap的Marshal 作者: 柳之一) 强大啊
  6. #------------------------------------------------------------------------------
  7. # ▼ 相比rmxp正版截图存档(作者: 柳柳),主要变动如下:
  8. #     ① 省去了 screenshot.dll 文件 (因快速存储Bitmap的Marshal的存在)
  9. #     ② 无须人工新建存档文件夹,脚本将自建
  10. #     ③ 方便地更改最大存档数,只需设置最大值
  11. #==============================================================================
  12. MAX_SAVE_ID = 12                          # 最大存档数
  13. SAVE_DIR = "Saves/"                       # 改变的存档目录(不希望改变目录请删)
  14. #==============================================================================
  15. # (快速存储Bitmap的Marshal 作者: 柳之一) 强大啊
  16. #==============================================================================
  17. class Font
  18.   def marshal_dump
  19.   end
  20.   def marshal_load(obj)
  21.   end
  22. end

  23. class Bitmap
  24.   # 传送到内存的API函数
  25.   RtlMoveMemory_pi = Win32API.new('kernel32', 'RtlMoveMemory', 'pii', 'i')
  26.   RtlMoveMemory_ip = Win32API.new('kernel32', 'RtlMoveMemory', 'ipi', 'i')
  27.   def _dump(limit)
  28.     data = "rgba" * width * height
  29.     RtlMoveMemory_pi.call(data, address, data.length)
  30.     [width, height, Zlib::Deflate.deflate(data)].pack("LLa*") # 压缩
  31.   end
  32.   def self._load(str)
  33.     w, h, zdata = str.unpack("LLa*")
  34.     b = self.new(w, h)
  35.     RtlMoveMemory_ip.call(b.address, Zlib::Inflate.inflate(zdata), w * h * 4)
  36.     return b
  37.   end
  38. # [[[bitmap.object_id * 2 + 16] + 8] + 16] == 数据的开头
  39.   def address
  40.     buffer, ad = "rgba", object_id * 2 + 16
  41.     RtlMoveMemory_pi.call(buffer, ad, 4)
  42.     ad = buffer.unpack("L")[0] + 8
  43.     RtlMoveMemory_pi.call(buffer, ad, 4)
  44.     ad = buffer.unpack("L")[0] + 16
  45.     RtlMoveMemory_pi.call(buffer, ad, 4)
  46.     return buffer.unpack("L")[0]
  47.   end
  48. end

  49. #==============================================================================
  50. # ■ Game_Temp
  51. #==============================================================================
  52. class Game_Temp
  53.   #--------------------------------------------------------------------------
  54.   # ● 定义实例变量
  55.   #--------------------------------------------------------------------------
  56.   attr_accessor :save_bitmap        # 存档位图
  57.   #--------------------------------------------------------------------------
  58.   # ● 初始化对象
  59.   #--------------------------------------------------------------------------
  60.   alias ini initialize
  61.   def initialize
  62.     ini
  63.     @save_bitmap = Bitmap.new(1, 1)
  64.   end
  65. end

  66. #==============================================================================
  67. # ■ Window_SaveFile
  68. #==============================================================================
  69. class Window_SaveFile < Window_Base
  70.   #--------------------------------------------------------------------------
  71.   # ● 定义实例变量
  72.   #--------------------------------------------------------------------------
  73.   attr_reader   :filename                 # 文件名
  74.   attr_reader   :file_exist               # 文件存在标志
  75.   #--------------------------------------------------------------------------
  76.   # ● 初始化对象
  77.   #     file_index : 存档文件索引 (0~3)
  78.   #     filename   : 文件名
  79.   #--------------------------------------------------------------------------
  80.   def initialize(file_index, filename)
  81.     super(160, 56, 384, 360)
  82.     @file_index = file_index
  83.     @filename = filename
  84.     make_dir(SAVE_DIR) if SAVE_DIR != nil
  85.     load_gamedata
  86.     refresh(@file_index)
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 读取部分游戏数据
  90.   #--------------------------------------------------------------------------
  91.   def load_gamedata
  92.     @file_exist = FileTest.exist?(SAVE_DIR + @filename)
  93.     if @file_exist
  94.       file = File.open(SAVE_DIR + @filename, "r")
  95.       begin
  96.         @characters          = Marshal.load(file)
  97.         @frame_count         = Marshal.load(file)
  98.         @last_bgm            = Marshal.load(file)
  99.         @last_bgs            = Marshal.load(file)
  100.         @game_system         = Marshal.load(file)
  101.         @game_message        = Marshal.load(file)
  102.         @game_switches       = Marshal.load(file)
  103.         @game_variables      = Marshal.load(file)
  104.         @game_self_switches  = Marshal.load(file)
  105.         @game_actors         = Marshal.load(file)
  106.         @game_party          = Marshal.load(file)
  107.         @game_troop          = Marshal.load(file)
  108.         @game_map            = Marshal.load(file)
  109.         @game_player         = Marshal.load(file)
  110.         # 读取截图
  111.         @file_bitmap         = Marshal.load(file)
  112.         @total_sec = @frame_count / Graphics.frame_rate
  113.       rescue
  114.         @file_exist = false
  115.       ensure
  116.         file.close
  117.       end
  118.     end
  119.   end
  120.   #--------------------------------------------------------------------------
  121.   # ● 刷新
  122.   #     index : 索引
  123.   #--------------------------------------------------------------------------
  124.   def refresh(index)
  125.     file_index = index
  126.     self.contents.clear
  127.     self.contents.font.color = normal_color
  128.     if @file_exist
  129.       # 描绘底部阴影
  130.       self.contents.fill_rect(12+3, 4+3, 326,249, Color.new(0,0,64))
  131.       # 描绘截图
  132.       draw_snap_bitmap(12, 4)
  133.       draw_party_characters(152, 296)
  134.       draw_playtime(0, 296+8, contents.width - 40, 2)
  135.     else
  136.       self.contents.draw_text(0, 296, 384-32, 24, "无此存档!", 1)
  137.     end
  138.   end
  139.   #--------------------------------------------------------------------------
  140.   # ◎ 更改索引
  141.   #     index : 索引
  142.   #--------------------------------------------------------------------------
  143.   def file_index=(file_index)
  144.     @file_index = file_index
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ● 描绘游戏人物
  148.   #     x : 描画先 X 座標
  149.   #     y : 描画先 Y 座標
  150.   #--------------------------------------------------------------------------
  151.   def draw_party_characters(x, y)
  152.     for i in [email protected]
  153.       name = @characters[i][0]
  154.       index = @characters[i][1]
  155.       draw_character(name, index, x + i * 48, y)
  156.     end
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # ◎ 生成保存路径
  160.   #     path : 路径
  161.   #--------------------------------------------------------------------------
  162.   def make_dir(path)
  163.     dir = path.split("/")
  164.     for i in 0...dir.size
  165.       unless dir == "."
  166.         add_dir = dir[0..i].join("/")
  167.         begin
  168.           Dir.mkdir(add_dir)
  169.         rescue
  170.         end
  171.       end
  172.     end
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # ◎ 生成文件名
  176.   #     file_index : 存档文件索引 (0~3)
  177.   #--------------------------------------------------------------------------
  178.   def make_filename(file_index)
  179.     return "Save#{file_index + 1}.rvdata"
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   # ◎ 描绘截图
  183.   #     x : 描画先 X 座標
  184.   #     y : 描画先 Y 座標
  185.   #--------------------------------------------------------------------------
  186.   def draw_snap_bitmap(x, y)
  187.     bitmap = @file_bitmap
  188.     if bitmap == nil
  189.       self.contents.draw_text(0, 112, 384-32, 24, "找不到截图文件!", 1)
  190.     else
  191.       self.contents.blur
  192.       rect = Rect.new(0, 0, 0, 0)
  193.       rect.width = bitmap.width
  194.       rect.height = bitmap.height
  195.       self.contents.blt(x, y, bitmap, rect)
  196.     end
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ● 描绘游戏时间
  200.   #     x     : 描绘目标 X 坐标
  201.   #     y     : 描绘目标 Y 坐标
  202.   #     width : 宽
  203.   #     align : 配置
  204.   #--------------------------------------------------------------------------
  205.   def draw_playtime(x, y, width, align)
  206.     hour = @total_sec / 60 / 60
  207.     min = @total_sec / 60 % 60
  208.     sec = @total_sec % 60
  209.     time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
  210.     self.contents.font.color = normal_color
  211.     self.contents.draw_text(x, y, width, WLH, time_string, 2)
  212.   end
  213. end

  214. #==============================================================================
  215. # ■ Scene_Base
  216. #==============================================================================
  217. class Scene_Base
  218.   #--------------------------------------------------------------------------
  219.   # ◎ 生成存档位图快照
  220.   #--------------------------------------------------------------------------
  221.   def snapshot_for_save
  222.     d_rect = Rect.new(0, 0, 326, 249)
  223.     s_rect = Rect.new(0, 0, 544, 416)
  224.     save_bitmap = Graphics.snap_to_bitmap
  225.     $game_temp.save_bitmap.dispose
  226.     $game_temp.save_bitmap = Bitmap.new(326, 249)
  227.     $game_temp.save_bitmap.stretch_blt(d_rect, save_bitmap, s_rect)
  228.   end
  229. end

  230. #==============================================================================
  231. # ■ Scene_Map
  232. #==============================================================================
  233. class Scene_Map < Scene_Base
  234.   #--------------------------------------------------------------------------
  235.   # ● 结束处理
  236.   #--------------------------------------------------------------------------
  237.   alias save_terminate terminate
  238.   def terminate
  239.     snapshot_for_save
  240.     save_terminate
  241.   end
  242. end

  243. #==============================================================================
  244. # ■ Scene_Title
  245. #==============================================================================
  246. class Scene_Title < Scene_Base
  247.   #--------------------------------------------------------------------------
  248.   # ● 判断继续是否有效
  249.   #--------------------------------------------------------------------------
  250.   def check_continue
  251.     @continue_enabled = (Dir.glob(SAVE_DIR + 'Save*.rvdata').size > 0)
  252.   end
  253. end

  254. #==============================================================================
  255. # ■ Scene_File
  256. #------------------------------------------------------------------------------
  257. #  处理文件的类。
  258. #==============================================================================
  259. class Scene_File < Scene_Base
  260.   #--------------------------------------------------------------------------
  261.   # ● 初始化对象
  262.   #     saving     : 存档标志 (false 为载入画面)
  263.   #     from_title : 调用标题画面的 "继续" 标志
  264.   #     from_event : 事件的 "调用存档画面" 的调用标志
  265.   #--------------------------------------------------------------------------
  266.   def initialize(saving, from_title, from_event)
  267.     @saving = saving
  268.     @from_title = from_title
  269.     @from_event = from_event
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● 开始处理
  273.   #--------------------------------------------------------------------------
  274.   def start
  275.     super
  276.     create_menu_background
  277.     @help_window = Window_Help.new
  278.     create_command_window
  279.     if @saving
  280.       @index = $game_temp.last_file_index
  281.       @help_window.set_text(Vocab::SaveMessage)
  282.     else
  283.       @index = self.latest_file_index
  284.       @help_window.set_text(Vocab::LoadMessage)
  285.     end
  286.     @refresh_index = @command_window.index = @index
  287.     @item_max = MAX_SAVE_ID
  288.     create_savefile_window
  289.   end
  290.   #--------------------------------------------------------------------------
  291.   # ● 结束处理
  292.   #--------------------------------------------------------------------------
  293.   def terminate
  294.     super
  295.     dispose_menu_background
  296.     @help_window.dispose
  297.     dispose_item_windows
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # ● 还原至原先的画面
  301.   #--------------------------------------------------------------------------
  302.   def return_scene
  303.     if @from_title
  304.       $scene = Scene_Title.new
  305.     elsif @from_event
  306.       $scene = Scene_Map.new
  307.     else
  308.       $scene = Scene_Menu.new(4)
  309.     end
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ● 更新画面
  313.   #--------------------------------------------------------------------------
  314.   def update
  315.     super
  316.     update_menu_background
  317.     @help_window.update
  318.     update_savefile_windows
  319.     update_savefile_selection
  320.   end
  321.   #--------------------------------------------------------------------------
  322.   # ◎ 生成存档文件列表窗口
  323.   #--------------------------------------------------------------------------
  324.   def create_command_window
  325.     file_names = []
  326.     digit = MAX_SAVE_ID.to_s.size
  327.     str_f = ""
  328.     digit.times{|n| str_f += "0"}
  329.     str_f[str_f.size-1, 1] = digit.to_s
  330.     for i in 0...MAX_SAVE_ID
  331.       id = sprintf("%#{str_f}d", i+1)
  332.       file_names.push(Vocab::File + "\s" + id)
  333.     end
  334.     @command_window = Window_Command.new(160, file_names)
  335.     @command_window.height = 360
  336.     @command_window.y = 56
  337.   end
  338.   #--------------------------------------------------------------------------
  339.   # ● 生成存档文件窗口
  340.   #--------------------------------------------------------------------------
  341.   def create_savefile_window
  342.     @savefile_window = Window_SaveFile.new(@command_window.index, make_filename(@command_window.index))
  343.   end
  344.   #--------------------------------------------------------------------------
  345.   # ● 释放存档文件
  346.   #--------------------------------------------------------------------------
  347.   def dispose_item_windows
  348.     @command_window.dispose
  349.     @savefile_window.dispose
  350.   end
  351.   #--------------------------------------------------------------------------
  352.   # ● 更新存档文件窗口
  353.   #--------------------------------------------------------------------------
  354.   def update_savefile_windows
  355.     @command_window.update
  356.     @savefile_window.update
  357.   end
  358.   #--------------------------------------------------------------------------
  359.   # ● 更新存档文件选择
  360.   #--------------------------------------------------------------------------
  361.   def update_savefile_selection
  362.     if Input.trigger?(Input::C)
  363.       determine_savefile
  364.     end
  365.     if Input.trigger?(Input::B)
  366.       Sound.play_cancel
  367.       return_scene
  368.     end
  369.     if @refresh_index != @command_window.index
  370.       @refresh_index = @command_window.index
  371.       @savefile_window.dispose
  372.       create_savefile_window
  373.       end
  374.   end
  375.   #--------------------------------------------------------------------------
  376.   # ● 确定存档文件
  377.   #--------------------------------------------------------------------------
  378.   def determine_savefile
  379.     if @saving
  380.       Sound.play_save
  381.       do_save
  382.     else
  383.       if @savefile_window.file_exist
  384.         Sound.play_load
  385.         do_load
  386.       else
  387.         Sound.play_buzzer
  388.         return
  389.       end
  390.     end
  391.     $game_temp.last_file_index = @index
  392.   end
  393.   #--------------------------------------------------------------------------
  394.   # ◎ 生成文件名
  395.   #     file_index : 存档文件索引
  396.   #--------------------------------------------------------------------------
  397.   def make_filename(file_index)
  398.     return "Save#{file_index + 1}.rvdata"
  399.   end
  400.   #--------------------------------------------------------------------------
  401.   # ● 按时间戳选择最新的文件
  402.   #--------------------------------------------------------------------------
  403.   def latest_file_index
  404.     index = 0
  405.     latest_time = Time.at(0) # 时间戳
  406.     for i in 0...MAX_SAVE_ID
  407.       file_name = make_filename(i)
  408.       if FileTest.exist?(SAVE_DIR + file_name)
  409.         file = File.open(SAVE_DIR + file_name, "r")
  410.         if file.mtime > latest_time
  411.           latest_time = file.mtime
  412.           index = i
  413.         end
  414.       end
  415.     end
  416.     return index
  417.   end
  418.   #--------------------------------------------------------------------------
  419.   # ● 执行存档
  420.   #--------------------------------------------------------------------------
  421.   def do_save
  422.     file_name = make_filename(@command_window.index)
  423.     file = File.open(SAVE_DIR + file_name, "wb")
  424.     write_save_data(file)
  425.     # 保存位图
  426.     $file_bitmap = $game_temp.save_bitmap
  427.     Marshal.dump($file_bitmap, file)
  428.     file.close
  429.     return_scene
  430.   end
  431.   #--------------------------------------------------------------------------
  432.   # ● 执行载入
  433.   #--------------------------------------------------------------------------
  434.   def do_load
  435.     file_name = make_filename(@command_window.index)
  436.     file = File.open(SAVE_DIR + file_name, "rb")
  437.     read_save_data(file)
  438.     file.close
  439.     $scene = Scene_Map.new
  440.     RPG::BGM.fade(1500)
  441.     Graphics.fadeout(60)
  442.     Graphics.wait(40)
  443.     @last_bgm.play
  444.     @last_bgs.play
  445.   end
  446. end
复制代码




回复 支持 反对

使用道具 举报

Lv1.梦旅人

包菜

梦石
0
星屑
71
在线时间
16 小时
注册时间
2008-2-20
帖子
743

第一届化妆舞会最佳表演奖

8
发表于 2009-1-23 06:28:47 | 只看该作者
是不是脚本里面用到的那个没被定义啊?{/bz}
2006-2015,一晃十年。
物换星移几度秋。
又过了8年 @ 2023
——
http://rpg.blue/upload_program/d/轩辕民_真是个好人啊_114275378.jpg
[b]真是个好人啊![/b]
史上无敌·十字花科·包菜君是也!XDDDD</strong>
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
29 小时
注册时间
2007-5-7
帖子
278
9
发表于 2009-1-24 18:03:18 | 只看该作者
是文件的问题么?
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3309
在线时间
3620 小时
注册时间
2006-9-6
帖子
37400

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

10
发表于 2009-1-24 19:05:28 | 只看该作者
你删几个别的脚本掉试试,
我估计是脚本冲突。 [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-10 04:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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