Project1

标题: 脚本中出现nil值问题 [打印本页]

作者: 浮云桑    时间: 2012-7-5 19:42
标题: 脚本中出现nil值问题
最近修改一个模板中发现没办法把转移到目标工程里面
常常出现以下的问题


members.size
members.level
这些为空(nil)

此外还有就是无法取得
@total_sec的值

我试着将
@total_sec = header[:playtime]   #header[:playtime]=$game_system.playtime
改为
@total_sec = $game_system.playtime

模板是外站的。(我用一个空的工程也无法复制- -蛋疼了,求指教了)
  1. #==============================================================================
  2. # +++ MOG - Scene File A (V1.0) +++
  3. #==============================================================================
  4. # 作者信息By Moghunter
  5. # 引用网站http://www.atelier-rgss.com/
  6. #==============================================================================
  7. # Tela de salvar e carregar animado versão A.
  8. #==============================================================================
  9. # Serão necessários as seguintes imagens na pasta Graphics/System
  10. # 运用到的素材
  11. # Save_Number.png
  12. # Save_Background.png
  13. # Save_Character_Floor.png
  14. # Save_Layout01.png
  15. # Save_Layout02.png
  16. # Save_Window01.png
  17. # Save_Window02.png
  18. #
  19. #==============================================================================
  20. module MOG_SCENE_FILE
  21.   #Quantidade de slots de saves.(文档数设定)
  22.   FILES_MAX = 9
  23. end

  24. #==============================================================================
  25. # ■ Game Temp
  26. #==============================================================================
  27. class Game_Temp

  28.   attr_accessor :scene_save
  29.   #--------------------------------------------------------------------------
  30.   # ● Initialize
  31.   #--------------------------------------------------------------------------
  32.   alias mog_scene_file_initialize initialize
  33.   def initialize
  34.       mog_scene_file_initialize
  35.       @scene_save = false  
  36.   end
  37.   
  38. end
  39. #==============================================================================
  40. # ■ Window_Base
  41. #==============================================================================
  42. class Window_Base < Window
  43.   
  44.   #--------------------------------------------------------------------------
  45.   # ● draw_picture_number(x,y,value,file_name,align, space, frame_max ,frame_index)     
  46.   #--------------------------------------------------------------------------
  47.   # X - Posição na horizontal
  48.   # Y - Posição na vertical
  49.   # VALUE - Valor Numérico
  50.   # FILE_NAME - Nome do arquivo
  51.   # ALIGN - Centralizar 0 - Esquerda 1- Centro 2 - Direita  
  52.   # SPACE - Espaço entre os números.
  53.   # FRAME_MAX - Quantidade de quadros(Linhas) que a imagem vai ter.
  54.   # FRAME_INDEX - Definição do quadro a ser utilizado.
  55.   #--------------------------------------------------------------------------  
  56.   def draw_picture_number(x,y,value, file_name,align = 0, space = 0, frame_max = 1,frame_index = 0)     
  57.       number_image = Cache.system(file_name)
  58.       frame_max = 1 if frame_max < 1
  59.       frame_index = frame_max -1 if frame_index > frame_max -1
  60.       align = 2 if align > 2
  61.       cw = number_image.width / 10
  62.       ch = number_image.height / frame_max
  63.       h = ch * frame_index
  64.       number = value.abs.to_s.split(//)
  65.       case align
  66.          when 0
  67.             plus_x = (-cw + space) * number.size
  68.          when 1
  69.             plus_x = (-cw + space) * number.size
  70.             plus_x /= 2
  71.          when 2  
  72.             plus_x = 0
  73.       end
  74.       for r in 0..number.size - 1      
  75.           number_abs = number[r].to_i
  76.           number_rect = Rect.new(cw * number_abs, h, cw, ch)
  77.           self.contents.blt(plus_x + x + ((cw - space) * r), y , number_image, number_rect)        
  78.       end   
  79.       number_image.dispose  
  80.   end
  81.    
  82.   #--------------------------------------------------------------------------
  83.   # ● Draw Help Layout
  84.   #--------------------------------------------------------------------------
  85.   def draw_face_save(name,x,y,type)
  86.       if type == 0
  87.          image_name = name + "_0"
  88.       elsif type == 1
  89.          image_name = name + "_1"         
  90.       else  
  91.          image_name = name + "_2"
  92.       end
  93.       image = Cache.face(image_name)   
  94.       cw = image.width  
  95.       ch = image.height
  96.       src_rect = Rect.new(0, 0, cw, ch)   
  97.       self.contents.blt(x , y , image, src_rect)  
  98.       image.dispose
  99.   end   
  100.    
  101.   #--------------------------------------------------------------------------
  102.   # ● draw_parameter_layout(绘制layout大小)
  103.   #--------------------------------------------------------------------------  
  104.   def draw_parameter_layout(x,y)
  105.       image = Cache.system("Save_Window01")   
  106.       cw = image.width  
  107.       ch = image.height
  108.       src_rect = Rect.new(0, 0, cw, ch)   
  109.       self.contents.blt(x , y , image, src_rect)     
  110.       image.dispose
  111.   end   
  112.   
  113.   #--------------------------------------------------------------------------
  114.   # ● draw_parameter_layout2绘制layout大小
  115.   #--------------------------------------------------------------------------  
  116.   def draw_parameter_layout2(x,y,type)     #关于type可以判断是否有存档
  117.       if type == 0
  118.          image = Cache.system("Save_Window02")   
  119.       else   
  120.          image = Cache.system("Save_Window03")  
  121.       end  
  122.       cw = image.width  
  123.       ch = image.height
  124.       src_rect = Rect.new(0, 0, cw, ch)   
  125.       self.contents.blt(x , y , image, src_rect)     
  126.       image.dispose
  127.   end      
  128.   #--------------------------------------------------------------------------
  129.   # ● draw_parameter_layout3绘制layout大小
  130.   #--------------------------------------------------------------------------
  131.   def draw_parameter_layout3(x,y,type)     #关于type可以判断是否有存档
  132.       if type == 0
  133.          image = Cache.system("Save_Window04")   
  134.       else   
  135.          image = Cache.system("Save_Window05")  
  136.       end
  137.       cw = image.width  
  138.       ch = image.height
  139.       src_rect = Rect.new(0, 0, cw, ch)   
  140.       self.contents.blt(x , y , image, src_rect)     
  141.       image.dispose
  142.   end      
  143.   #--------------------------------------------------------------------------
  144.   # ● draw_character_floor
  145.   #--------------------------------------------------------------------------  
  146.   def draw_character_floor(x,y)
  147.       image = Cache.system("Save_Character_Floor")   
  148.       cw = image.width  
  149.       ch = image.height
  150.       src_rect = Rect.new(0, 0, cw, ch)   
  151.       self.contents.blt(x , y , image, src_rect)   
  152.       image.dispose
  153.   end
  154.   
  155. end  
  156.    
  157. #==============================================================================
  158. # ■ DataManager
  159. #==============================================================================
  160. module DataManager

  161.   #--------------------------------------------------------------------------
  162.   # ● Make Save Header
  163.   #--------------------------------------------------------------------------  
  164.   def self.make_save_header
  165.       header = {}
  166.       header[:characters] = $game_party.characters_for_savefile
  167.       header[:playtime_s] = $game_system.playtime_s
  168.       header[:playtime] = $game_system.playtime
  169.       header[:map_name] = $game_map.display_name
  170.       header[:members] = $game_party.members
  171.       header
  172.   end  
  173. end  

  174. #==============================================================================
  175. # ■ Window_SaveFile
  176. #==============================================================================
  177. class Window_SaveFile < Window_Base
  178.   attr_reader   :filename               
  179.   attr_reader   :file_exist               
  180.   attr_reader   :time_stamp              
  181.   attr_reader   :selected                 
  182.   attr_reader   :file_index
  183.   
  184.   #--------------------------------------------------------------------------
  185.   # ● Initialize
  186.   #--------------------------------------------------------------------------
  187.   def initialize(file_index, filename)
  188.       super(0, 0,720, 140)
  189.       self.opacity = 0
  190.       @file_index = file_index
  191.       @filename = filename
  192.       load_gamedata
  193.       refresh
  194.       @selected = false
  195.   end
  196.   
  197.   #--------------------------------------------------------------------------
  198.   # ● load_gamedata
  199.   #--------------------------------------------------------------------------
  200.   def load_gamedata
  201.     @time_stamp = Time.at(0)
  202.     @file_exist = FileTest.exist?(@filename)
  203.     if @file_exist
  204.        header = DataManager.load_header(@file_index)
  205.        if header == nil
  206.           @file_exist = false
  207.           return
  208.        end  
  209.        @characters = header[:characters]
  210.        @total_sec = header[:playtime]
  211.        @mapname = header[:map_name]
  212.        @members = header[:members]
  213.     end
  214.   end
  215.   
  216.   #--------------------------------------------------------------------------
  217.   # ● Refresh
  218.   #--------------------------------------------------------------------------
  219.   def refresh
  220.       self.contents.clear
  221.       self.contents.font.color = normal_color
  222.       xp = 96
  223.       ex = 60
  224.       if @file_exist
  225.         draw_parameter_layout2(0,50,0)    #蓝条位置坐标(0,50,0)
  226.         draw_parameter_layout3(0,37,0)
  227.         draw_parameter_layout(-10 + xp,0) #存档窗口(-10+xp,0)
  228.         value = @file_index + 1
  229.         draw_picture_number(13 + xp, 32,value, "Save_Number_01",1,0,3,0) #图片编号
  230.         draw_party_characters(180 + xp, 75,ex) #角色窗口
  231.         draw_playtime(495, 20, contents.width - 4, 2) #游戏时间
  232.         draw_map_location( 400 + xp,64)
  233.         draw_level(185 + xp,85,ex)
  234.         draw_face_save(40 + xp,0)
  235.       else  
  236.         draw_parameter_layout2(0,50,1)#红条位置
  237.         draw_parameter_layout3(0,37,1)
  238.         draw_parameter_layout(-10 + xp,0)
  239.         value = @file_index + 1
  240.         draw_picture_number(13 + xp, 32,value, "Save_Number_01",1,0,3,0)      
  241.          self.contents.draw_text(260, 50, 120, 32, "No Data", 1)
  242.       end
  243.     end
  244.    
  245.   #--------------------------------------------------------------------------
  246.   # ● draw_face
  247.   #--------------------------------------------------------------------------
  248.   def draw_face_save(x,y)
  249.      draw_actor_face(@members[0], x, y)
  250.   end
  251.   
  252.   #--------------------------------------------------------------------------
  253.   # ● draw_level
  254.   #--------------------------------------------------------------------------
  255.   def draw_level(x,y,ex)
  256.       self.contents.font.color = normal_color   
  257.       for i in [email protected]
  258.         break if i > 3
  259.         level = @members[i].level
  260.         draw_picture_number(x + (ex  * i) , y ,level, "Save_Number_01",1,0,3,1)
  261.       end        
  262.   end
  263.   
  264.   #--------------------------------------------------------------------------
  265.   # ● draw_map_location
  266.   #--------------------------------------------------------------------------
  267.   def draw_map_location(x,y)
  268.       self.contents.font.bold = true
  269.       self.contents.font.name = "Georgia"
  270.       self.contents.font.size = 20
  271.       self.contents.font.italic = true
  272.       self.contents.draw_text(x, y, 125, 32, @mapname.to_s, 0)
  273.   end
  274.   #--------------------------------------------------------------------------
  275.   # ● draw_party_characters
  276.   #--------------------------------------------------------------------------
  277.   def draw_party_characters(x, y,ex)
  278.       for i in [email protected]
  279.         break if i > 3
  280.         name = @characters[i][0]
  281.         index = @characters[i][1]
  282.         draw_character_floor(- 35 + x + i * ex,y - 20)      
  283.         draw_character(name, index, x + i * ex, y)
  284.       end
  285.   end
  286.   
  287.   #--------------------------------------------------------------------------
  288.   # ● draw_playtime
  289.   #--------------------------------------------------------------------------
  290.   def draw_playtime(x, y, width, align)
  291.       hour = @total_sec / 60 / 60
  292.       min = @total_sec / 60 % 60
  293.       sec = @total_sec % 60
  294.       time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
  295.       draw_picture_number(x + 18 * 0, y ,0, "Save_Number_01",0,0,3,0) if hour < 10
  296.       draw_picture_number(x + 18 * 1, y ,hour, "Save_Number_01",0,0,3,0)
  297.       draw_picture_number(x + 18 * 3, y ,0, "Save_Number_01",0,0,3,0) if min < 10
  298.       draw_picture_number(x + 18 * 4, y ,min, "Save_Number_01",0,0,3,0)
  299.       draw_picture_number(x + 18 * 6, y ,0, "Save_Number_01",0,0,3,0) if sec < 10
  300.       draw_picture_number(x + 18 * 7, y ,sec , "Save_Number_01",0,0,3,0)     
  301.   end

  302.   #--------------------------------------------------------------------------
  303.   # ● selected
  304.   #--------------------------------------------------------------------------
  305.   def selected=(selected)
  306.       @selected = selected
  307.   end
  308. end

  309. #==============================================================================
  310. # ■ Scene Save
  311. #==============================================================================
  312. class Scene_Save < Scene_File
  313.   #--------------------------------------------------------------------------
  314.   # ● Initialize
  315.   #--------------------------------------------------------------------------
  316.   def initialize
  317.       $game_temp.scene_save = true
  318.       super
  319.   end  
  320. end  
  321. #==============================================================================
  322. # ■ Scene Load
  323. #==============================================================================
  324. class Scene_Load < Scene_File
  325.   #--------------------------------------------------------------------------
  326.   # ● Initialize
  327.   #--------------------------------------------------------------------------
  328.   def initialize
  329.       $game_temp.scene_save = false
  330.       super
  331.   end  
  332. end

  333. #==============================================================================
  334. # ■ Scene_File
  335. #==============================================================================

  336. class Scene_File
  337.   include MOG_SCENE_FILE
  338.   
  339.   
  340.   #--------------------------------------------------------------------------
  341.   # ● initialize
  342.   #--------------------------------------------------------------------------
  343.   def initialize
  344.       @saving = $game_temp.scene_save
  345.       @file_max = FILES_MAX
  346.       @file_max = 1 if FILES_MAX < 1
  347.       create_layout
  348.       create_savefile_windows
  349.       @index = DataManager.last_savefile_index
  350.       @check_prev_index = true
  351.       @savefile_windows[@index].selected = true   
  352.   end
  353.   
  354. #--------------------------------------------------------------------------
  355. # ● Main
  356. #--------------------------------------------------------------------------         
  357. def main
  358.      Graphics.transition
  359.      execute_loop
  360.      execute_dispose
  361. end   

  362. #--------------------------------------------------------------------------
  363. # ● Execute Loop
  364. #--------------------------------------------------------------------------           
  365. def execute_loop
  366.      loop do
  367.           Graphics.update
  368.           Input.update
  369.           update
  370.           if SceneManager.scene != self
  371.               break
  372.           end
  373.      end
  374. end   
  375.   
  376.   #--------------------------------------------------------------------------
  377.   # ● Create_background
  378.   #--------------------------------------------------------------------------  
  379.   def create_layout
  380.       @background = Plane.new  
  381.       @background.bitmap = Cache.system("Save_Background")
  382.       @background.z = 0
  383.       @layout_01 = Sprite.new  
  384.       @layout_01.bitmap = Cache.system("Save_Layout01")
  385.       @layout_01.z = 1      
  386.       @layout_01.blend_type = 1
  387.       @layout_01.y= 0
  388.       image = Cache.system("Save_Layout02")
  389.       @bitmap = Bitmap.new(image.width,image.height)
  390.       cw = image.width
  391.       ch = image.height / 2
  392.       if @saving
  393.          h = ch
  394.       else  
  395.          h = 0
  396.       end  
  397.       src_rect = Rect.new(0, h, cw, ch)
  398.       @bitmap.blt(0,0, image, src_rect)     
  399.       @layout_02 = Sprite.new  
  400.       @layout_02.bitmap = @bitmap
  401.       @layout_02.z = 3
  402.       @layout_02.y = 370
  403.       image.dispose
  404.   end
  405.   
  406.   #--------------------------------------------------------------------------
  407.   # ● Execute Dispose
  408.   #--------------------------------------------------------------------------
  409.   def execute_dispose
  410.       Graphics.freeze
  411.       @background.bitmap.dispose
  412.       @background.dispose
  413.       @layout_01.bitmap.dispose   
  414.       @layout_01.dispose      
  415.       @layout_02.bitmap.dispose
  416.       @layout_02.dispose
  417.       @bitmap.dispose
  418.       dispose_item_windows
  419.   end
  420.   
  421.   #--------------------------------------------------------------------------
  422.   # ● Frame Update
  423.   #--------------------------------------------------------------------------
  424.   def update
  425.       update_savefile_windows
  426.       update_savefile_selection
  427.       check_start_index
  428.   end
  429.   
  430.   #--------------------------------------------------------------------------
  431.   # ● check_start_index
  432.   #--------------------------------------------------------------------------
  433.   def check_start_index
  434.       return if @check_prev_index == false
  435.       @check_prev_index = false
  436.       check_active_window   
  437.   end  
  438.    
  439.   #--------------------------------------------------------------------------
  440.   # ● check_active_window   
  441.   #--------------------------------------------------------------------------
  442.   def check_active_window   
  443.       @index = 0 if @index == nil
  444.       for i in 0...@file_max  
  445.         @pw = @index - 1
  446.         @pw = 0 if @pw > @file_max - 1
  447.         @pw = @file_max- 1 if @pw < 0        
  448.         @aw = @index
  449.         @nw = @index + 1
  450.         @nw = 0 if @nw > @file_max - 1
  451.         @nw = @file_max - 1  if @nw < 0
  452.         case @savefile_windows[i].file_index
  453.            when @pw,@nw
  454.                 @savefile_windows[i].visible = true
  455.                 @savefile_windows[i].contents_opacity = 80
  456.            when @aw  
  457.                 @savefile_windows[i].visible = true
  458.                 @savefile_windows[i].contents_opacity = 255
  459.            else
  460.                 @savefile_windows[i].visible = false
  461.         end
  462.       end         
  463.   end
  464.    
  465.   #--------------------------------------------------------------------------
  466.   # ● Create Save File Window
  467.   #--------------------------------------------------------------------------
  468.   def create_savefile_windows
  469.     @pw_pos = [-160,32]  #摆放位置pw上一个存档排放,aw选中存档,nw下一个存档
  470.     @aw_pos = [-96,160]
  471.     @nw_pos = [-32,288]      
  472.     @savefile_windows = []
  473.     for i in 0...@file_max
  474.         @savefile_windows[i] = Window_SaveFile.new(i, DataManager.make_filename(i))
  475.         @savefile_windows[i].z = 2
  476.         @savefile_windows[i].visible = false
  477.         @savefile_windows[i].x = 400
  478.     end
  479.     check_active_window
  480.     @item_max = @file_max
  481.   end
  482.   
  483.   #--------------------------------------------------------------------------
  484.   # ● Dispose of Save File Window
  485.   #--------------------------------------------------------------------------
  486.   def dispose_item_windows
  487.       for window in @savefile_windows
  488.           window.dispose
  489.       end
  490.   end
  491.   
  492.   #--------------------------------------------------------------------------
  493.   # ● Update Save File Window
  494.   #--------------------------------------------------------------------------
  495.   def update_savefile_windows
  496.       update_slide_window
  497.       for window in @savefile_windows
  498.         window.update
  499.       end
  500.   end
  501.   
  502.   #--------------------------------------------------------------------------
  503.   # ● update_slide_window
  504.   #--------------------------------------------------------------------------  
  505.   def update_slide_window
  506.       @background.ox += 1
  507.       slide_window_x(@pw,@pw_pos[0])
  508.       slide_window_x(@aw,@aw_pos[0])
  509.       slide_window_x(@nw,@nw_pos[0])
  510.       slide_window_y(@pw,@pw_pos[1])
  511.       slide_window_y(@aw,@aw_pos[1])
  512.       slide_window_y(@nw,@nw_pos[1])
  513.   end
  514.    
  515.   #--------------------------------------------------------------------------
  516.   # ● slide_window_x
  517.   #--------------------------------------------------------------------------   
  518.   def slide_window_x(i,x_pos)
  519.       if @savefile_windows[i].x < x_pos
  520.          @savefile_windows[i].x += 15
  521.          @savefile_windows[i].x = x_pos if @savefile_windows[i].x > x_pos
  522.       end  
  523.       if @savefile_windows[i].x > x_pos
  524.          @savefile_windows[i].x -= 15
  525.          @savefile_windows[i].x = x_pos if @savefile_windows[i].x < x_pos        
  526.        end            
  527.   end   
  528.      
  529.   #--------------------------------------------------------------------------
  530.   # ● slide_window_y
  531.   #--------------------------------------------------------------------------   
  532.   def slide_window_y(i,y_pos)
  533.       if @savefile_windows[i].y < y_pos
  534.          @savefile_windows[i].y += 15
  535.          @savefile_windows[i].y = y_pos if @savefile_windows[i].y > y_pos
  536.       end  
  537.       if @savefile_windows[i].y > y_pos
  538.          @savefile_windows[i].y -= 15
  539.          @savefile_windows[i].y = y_pos if @savefile_windows[i].y < y_pos        
  540.        end            
  541.   end   
  542.      
  543.   #--------------------------------------------------------------------------
  544.   # ● reset_position
  545.   #--------------------------------------------------------------------------     
  546.   def reset_position(diretion)
  547.       check_active_window      
  548.       case diretion
  549.          when 0
  550.             @savefile_windows[@pw].y = -64
  551.             @savefile_windows[@pw].x = 0
  552.          when 1  
  553.             @savefile_windows[@nw].y = 440
  554.             @savefile_windows[@nw].x = 0
  555.       end        
  556.   end
  557.    
  558.   #--------------------------------------------------------------------------
  559.   # ● Update Save File Selection
  560.   #--------------------------------------------------------------------------
  561.   def update_savefile_selection
  562.       if Input.trigger?(Input::C)
  563.          on_savefile_ok
  564.       elsif Input.trigger?(Input::B)
  565.          Sound.play_cancel
  566.          return_scene
  567.       else
  568.         last_index = @index
  569.         if Input.trigger?(Input::DOWN)
  570.            execute_index(1)
  571.            if @file_max > 2
  572.               reset_position(1)
  573.            else
  574.               reset_position(0)
  575.            end  
  576.         end
  577.         if Input.trigger?(Input::UP)
  578.            execute_index(-1)
  579.            reset_position(0)
  580.         end
  581.         if @index != last_index
  582.            Sound.play_cursor
  583.            @savefile_windows[last_index].selected = false
  584.            @savefile_windows[@index].selected = true
  585.         end      
  586.       end
  587.   end

  588.   #--------------------------------------------------------------------------
  589.   # ● Execute Index
  590.   #--------------------------------------------------------------------------  
  591.   def execute_index(value)
  592.       @index += value
  593.       @index = @index >= @file_max ? 0 : @index < 0 ? (@file_max - 1) : @index
  594.   end
  595.   
  596. end

  597. $mog_rgss3_scene_file = true
复制代码
dsu_plus_rewardpost_czw
作者: 浮云桑    时间: 2012-7-5 19:54
补充- -我直接将代码原封不动复制过去都是没用。难道是dll文件的问题?

作者: 铅笔描绘的思念    时间: 2012-7-5 20:18
本帖最后由 铅笔描绘的思念 于 2012-7-5 20:23 编辑

队伍中没有人物。。
作者: 浮云桑    时间: 2012-7-5 23:51
铅笔描绘的思念 发表于 2012-7-5 20:18
队伍中没有人物。。

为什么说修改了很久~因为单独那个语句通过修改变量是没有问题的。
我就纳闷了,为什么前面明明声明了,后面无法引用。
最奇怪的还是@total_sec压根就无法得到 playtime的数据
不过我将dll换了一下就能用了~




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