查看: 2945|回复: 3

[已经解决] 做游戏时发现一些错误,求大佬解决一下QAQ,两个脚本问题

[复制链接]
梦石
0
星屑
347
在线时间
43 小时
注册时间
2016-5-8
回帖
49
发表于 2019-6-30 10:48:22 | 显示全部楼层 |阅读模式
悬赏50星屑已解决
本帖最后由 VIPArcher 于 2019-7-23 09:05 编辑

这个是打开技能界面出现的bug 3LRV_0%PTGOV{4WRUBIGQNS.png
貌似和我其他脚本无关。
这是存档脚本问题 MMZJ78XXI4Z4Q99Q8]5CUY2.png
存档脚本的编码为
发生了什么我也不是很清楚,这是我所有的脚本截图 EXI265(X94[]ROI{}S(G%@R.png IHKJC6@H{`PD5CN(V[@.png
然后如果需要我的游戏工程才能解决我可以提供,dalao们先看一下需不需要我的源文件吧emmmm
[pre lang="ruby"]#encoding:utf-8
#==============================================================================
# ■ 薄雾年代记 —— 存档公开版 by LBQ v0.2
#------------------------------------------------------------------------------
#  只是一个笨蛋存档读档界面罢了
#==============================================================================


$imported||={}
$imported[:mcr_save] = '0.2'
module MCR
  module Save
    CHAPTER_NUM = 1 #章节数用变量 0对应的是第一章 1是第二章 2是第三章
  end
end



module DataManager

  #--------------------------------------------------------------------------
  # ● 生成存档的头数据
  #--------------------------------------------------------------------------
  def self.make_save_header
    header = {}
    header[:characters] = $game_party.characters_for_savefile
    header[:playtime_s] = $game_system.playtime_s
    header[:variables]  = $game_variables
    header
  end
end

class Sprite
  #blt(x, y, src_bitmap, src_rect[, opacity])
  def paste(bitmap)
    sb = bitmap
    a = 0
    b = 0
    src_rect = Rect.new(a,b,sb.width,sb.height)
    self.bitmap.blt(a,b,sb,src_rect)
    bitmap.dispose
  end
  
end



class Part_Save
  include MCR::Save
  def initialize(index)
    @index = index
    @delegates = []
    @sprite = Sprite.new
    @delegates << @sprite
    @sprite.bitmap  = Cache.system("save#{index+1}")
    @number = Sprite_Number.new(play_time_s)
    @delegates << @number
    @empty_file = Sprite.new
    if does_not_exist
      @empty_file.bitmap = Cache.system("empty_file")
    else
      @sprite.paste Cache.system("chapter#{self.variables[CHAPTER_NUM]+1}")
    end
    unselected
  end
  
  
  
  def recreate_sprite
    index = @index
   
   
    @sprite.bitmap  = Cache.system("save#{index+1}")
    if does_not_exist
      @sprite.paste Cache.system("empty_file")
    else
      @sprite.paste Cache.system("chapter#{self.variables[CHAPTER_NUM]+1}")
    end
  end
  
  
  
  def play_time_s
    return "00:00" if does_not_exist
    return header[:playtime_s].split(":")[0..1].join(':')
  end
  
  
  def does_not_exist
    !header
  end
  
  
  
  def variables
    return if does_not_exist
    return header[:variables]
  end
  
  def dispose
    @empty_file.dispose
    @sprite.dispose
    @sprite=nil
    @number.dispose
    @empty_file.dispose
  end
  
  
  
  
  def header
    return DataManager.load_header(@index)
  end
  
  def selected?
    @selected
  end
  
  def update
    if @selected
      @delegates.each do |d|
        d.opacity = [@sprite.opacity+12,255].min
      end
    else
      
      @delegates.each do |d|
        d.opacity = [@sprite.opacity-12,150].max
      end
      
    end
    @empty_file.y = @sprite.y
   
  end
  
  
  def selected
    @selected = true
    #self.opacity = 255
  end
  
  
  def unselected
    @selected = false
    #self.opacity = 180
  end
  
  
  
  def method_missing(id,*args,&block)
    sended = false
    @delegates.each do |d|
      if d.respond_to? id
        sended = true
        d.send id,*args,&block
      end
      
    end
   
   
    unless sended
      super
    end
   
   
  end
  
  
end



module Scene_EasyLoad_Plugin
  def easy_load(index)
    DataManager.load_game(index)
    Sound.play_load
    fadeout_all
    $game_system.on_after_load
    SceneManager.goto(Scene_Map)
  end
end


class Scene_Base
  include Scene_EasyLoad_Plugin
end




class Scene_File < Scene_MenuBase
  public_instance_methods(false).each do |m|
    undef_method m
  end
  
  
  #--------------------------------------------------------------------------
  # ● 释放背景
  #--------------------------------------------------------------------------
  def dispose_background
    @bg.dispose
  end
  
  def start
    super
    @main_timer = 0
    methods.each do |m|
      if m.to_s.include? 'create_'
        send m
      end
    end
    post_create
    @start_fade_out = false
  end
  
  
  def terminate
    super
    terminate_all_sprites
  end
  
  
  
  def terminate_all_sprites
    @parts.each(&:dispose)
  end
  
  
  
  
  
  def post_create
    @parts[0].selected
  end
  
  
  def return_scene
    return
    @start_fade_out = true
  end
  
  
  
  
  def create_background
    @bg = Plane.new
    @bg.bitmap = Cache.system('bg')
    @bg.oy =330
  end
  
  
  def create_header
    @header = Sprite.new
    @header.z = 10
    @header.bitmap = Cache.system('save_header')
  end
  
  def create_parts
    @parts = []
    @parts[0] = Part_Save.new(0)
    @parts[0].y = 50
   
   
   
    @parts[1] = Part_Save.new(1)
    @parts[1].y = 180
  end
  
  
  def create_mask
    @mask = Sprite.new
    w = Graphics.width
    h = Graphics.height
    @mask.bitmap = Bitmap.new w, h
    @mask.bitmap.fill_rect(0,0,w,h,Color.new(0,0,0))
    @mask.z = 999
  end
  
  
  
  def update
    @main_timer += 1
    methods.each do |m|
      if m.to_s.include? 'update_'
        send m
      end
    end
    deal_with_mask_fade if @start_fade_out
  end
  
  
  def deal_with_mask_fade
    @mask.opacity +=8
    if @mask.opacity >=255
      fadeout_all
      SceneManager.return
      
    end
   
  end
  

  
  
  #--------------------------------------------------------------------------
  # ● 获取渐变速度
  #--------------------------------------------------------------------------
  def transition_speed
    return 20
  end
  
  
  def update_input
   
    if Input.trigger? :UP
      i_am_going_to_select  = @parts[current_selected_index - 1]
      if i_am_going_to_select && current_selected_index!=0
        current_selected.unselected
        i_am_going_to_select.selected
        Sound.play_cursor
      else
        Sound.play_buzzer
      end
      
    end
   
   
    if Input.trigger? :DOWN
      i_am_going_to_select = @parts[current_selected_index + 1]
      if i_am_going_to_select
        current_selected.unselected
        i_am_going_to_select.selected
        Sound.play_cursor
      else
        Sound.play_buzzer
      end
      
      
    end
   
   
    if Input.trigger? :C
      deal_with_on_ok
    end
   
   
    if Input.trigger? :B
      Sound.play_cancel
      SceneManager.return
    end
   
  end
  
  def update_background
    @bg.ox += 1 if @main_timer % 2 == 0
  end
  
  
  def update_mask
    @mask.opacity -= 4
  end
  
  
  def current_selected
    return @parts.select{|p|p.selected?}[0]
  end
  
  def current_selected_index
    return @parts.index current_selected
  end
  
  def update_parts
    @parts.each(&:update)
  end
  
end


class Scene_Save < Scene_File
  def deal_with_on_ok
    DataManager.save_game(current_selected_index)
    Sound.play_save
    SceneManager.return
  end
end

class Scene_Load < Scene_File
  def deal_with_on_ok
    if current_selected.does_not_exist
      Sound.play_buzzer
      return
    end
   
    easy_load(current_selected_index)
  end
end


module Cache
  class << self
    def number(name)
      load_bitmap("Graphics/Numbers/", name)
    end
   
  end
end


class Sprite_Number < Sprite
  
  INDENT = [123,97]
  
  def initialize(text)
    super(nil)
    @text = text
    refresh
  end
  
  DIC = {
   ':' => 'colon'
  }
  
  
  def text=(x)
    @text = x
    refresh
  end
  
  
  def text
    return @text
  end
  
  def refresh
    self.bitmap = Bitmap.new(Graphics.width,Graphics.height)
    deal_with_text
  end

  def deal_with_text
   
    cursor = INDENT[0]
    @text.each_char do |c|
      
      
      if DIC[c]
        c = DIC[c]
        cursor+=3
      end
      
      new_bitmap = Cache.number(c)
      a = cursor
      b = INDENT[1]
      sb = new_bitmap
      sr = Rect.new(0,0,sb.width,sb.height)
      self.bitmap.blt(a,b,sb,sr)
      cursor += sb.width*0.75
      sb.dispose
    end # each
  end
  
end

class Scene_Number < Scene_Base
  def start
    super
    @timer = 0
    @sprite = Sprite_Number.new($game_system.playtime_s)
  end
  
  def update
    super
    @timer += 1
    if @timer %60==0
      @sprite.text= $game_system.playtime_s
    end
  end
end

class Scene_Menu
  #--------------------------------------------------------------------------
  # ● 执行进入场景时的渐变
  #--------------------------------------------------------------------------
  def perform_transition
    if Graphics.brightness == 0
      Graphics.transition(0)
      fadein(30)
    else
      super
    end
  end
end
[/pre]

最佳答案

查看完整内容

[s]一上来塞这么多插件脚本……反正我是没这个勇气整合[/s] 就事论事,首先第一个是你有两个“自动换行”脚本,删掉第二个即可 第二个是 MCR_Save 和“音量设置”脚本冲突,按最小修复原则,在 MCR_Save 的 206 行将 if m.to_s.include? 'create_' 修改为 if m.to_s.include? 'create_' and method(m).arity == 0 即可,同时请删掉任何现有存档 我悲观估计你这个工程还会出各种各样的 bug,建议扔沟 ...
梦石
0
星屑
9862
在线时间
580 小时
注册时间
2017-9-28
回帖
203
发表于 2019-6-30 10:48:23 | 显示全部楼层
本帖最后由 hyrious 于 2019-6-30 12:03 编辑

一上来塞这么多插件脚本……反正我是没这个勇气整合
就事论事,首先第一个是你有两个“自动换行”脚本,删掉第二个即可
第二个是 MCR_Save 和“音量设置”脚本冲突,按最小修复原则,在 MCR_Save 的 206 行将 if m.to_s.include? 'create_' 修改为 if m.to_s.include? 'create_' and method(m).arity == 0 即可,同时请删掉任何现有存档

Snipaste_2019-06-30_11-52-48.png

我悲观估计你这个工程还会出各种各样的 bug,建议扔沟

点评

谢谢,解决掉了,暂时目前还没有出现各种bug,因为这些脚本,有前面的大佬帮我试过毒,兼容性还是挑好的来的。自动换行的脚本忘记text了罢了emmm  发表于 2019-7-14 11:17
喵喵喵
回复

使用道具 举报

梦石
0
星屑
347
在线时间
43 小时
注册时间
2016-5-8
回帖
49
 楼主| 发表于 2019-6-30 10:56:29 | 显示全部楼层
链接:https://pan.baidu.com/s/1-VYEDF9jM3KH-4pbFknylw
提取码:s0ow
想了一下,若是有需要源文件就拿去吧,如果对我游戏里的脚本有兴趣也可以拿去用,先说啦,这这是个连整理的脚本都没有的游戏,甚至连一个游戏正常体验都没有,估计连范例都做不到,里面的资源你们随意拿吧,求解决+1
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部