查看: 2151|回复: 9

[已经过期] 自动存读档的脚本冲突

[复制链接]
梦石
0
星屑
400
在线时间
602 小时
注册时间
2014-5-8
回帖
602
发表于 2014-8-1 10:24:41 | 显示全部楼层 |阅读模式

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

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

×
我用了自动存读档的脚本,与人物跟随脚本重突
自动存读档的脚本如下
[pre lang="ruby" line="1"]module Kernel

alias origin_exit exit unless method_defined? :exit

def exit(*args)
   case $scene
   when Scene_Map
     AutoSave.common_save unless $game_system.map_interpreter.running?
   when Scene_Battle
     AutoSave.common_save unless $game_system.battle_interpreter.running?
   else
     if $scene.type != NilClass and $scene.type != Scene_Title
       AutoSave.common_save
     end
   end
   origin_exit(*args)
end

end


module AutoSave

if @scene_proc.nil?
   @last_scene = nil.class
   @scene_proc = proc do |value|
     if value.nil? or value.is_a?(Scene_Title)
       if @last_scene != NilClass and @last_scene != Scene_Title
         AutoSave.common_save
       end
     end
     @last_scene = value.type
   end
   trace_var(:$scene,@scene_proc)
end

module_function

def common_save
   filename = "System.rxdata"    #byakki
   file = File.open(filename, "wb")
   write_save_data(file)
   file.close
end
  #--------------------------------------------------------------------------
  # ● 写入存档数据
  #     file : 写入用文件对像 (已经打开)
  #--------------------------------------------------------------------------
def write_save_data(file)
    # 生成描绘存档文件用的角色图形
    characters = []
    for i in 0...$game_party.actors.size
      actor = $game_party.actors
      characters.push([actor.character_name, actor.character_hue])
    end
    # 写入描绘存档文件用的角色数据
    Marshal.dump(characters, file)
    # 写入测量游戏时间用画面计数
    Marshal.dump(Graphics.frame_count, file)
    # 增加 1 次存档次数
    $game_system.save_count += 1
    # 保存魔法编号
    # (将编辑器保存的值以随机值替换)
    $game_system.magic_number = $data_system.magic_number
    # 写入各种游戏对像
    Marshal.dump($game_system, file)
    Marshal.dump($game_switches, file)
    Marshal.dump($game_variables, file)
    Marshal.dump($game_self_switches, file)
    Marshal.dump($game_screen, file)
    Marshal.dump($game_actors, file)
    Marshal.dump($game_party, file)
    Marshal.dump($game_troop, file)
    Marshal.dump($game_map, file)
    Marshal.dump($game_player, file)
  end
end [/pre]
人物跟随脚本如下:[pre lang="ruby" line="1"]#===================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#===================================================================
# ————————————————————————————————————
# ▼▲▼ XRXS13. パーティ列車移動 ver.1.02 ▼▲▼
# by fukuyama
#
# Train_Actor
#
# fukuyama@alles.or.jp
# http://www4.big.or.jp/~fukuyama/rgss/Train_Actor.txt
#
module Train_Actor

  #是否使用停止跟随的方法,也就是说,这里false改为true的时候,如果TRANSPARENT_SWITCHES_INDEX
  #开关打开,跟随的人物就消失了(其实只是变成透明而已)
  TRANSPARENT_SWITCH = true
  TRANSPARENT_SWITCHES_INDEX = 20
  #举例:第一个为true,第二个为20,则打开20号开关,后面的人都没了。

  #跟随人数的最大数目,可以更改为2、3什么的。
  TRAIN_ACTOR_SIZE_MAX = 6

  # 定数
  #Input::DOWN = 2
  #Input::LEFT = 4
  #Input::RIGHT = 6
  #Input::UP = 6
  DOWN_LEFT = 1
  DOWN_RIGHT = 3
  UP_LEFT = 7
  UP_RIGHT = 9
  JUMP = 5

  class Game_Party_Actor < Game_Character
   
    def initialize
        super()

        @through = true
    end
      
    def setup(actor)

        # キャラクターのファイル名と色相を設定
        if actor != nil
           @character_name = actor.character_name
           @character_hue = actor.character_hue
           @tempneme = actor.name           
        else
           @character_name = ""
           @character_hue = 0
           @tempneme = ""      
        end
        # 不透明度と合成方法を初期化
        @opacity = 255
        @blend_type = 0
    end

    def screen_z(height = 0)
        if $game_player.x == @x and $game_player.y == @y
           return $game_player.screen_z(height) - 1
        end
        super(height)
    end
   
    def name
        return @tempneme
    end
   
    #--------------------------------------------------------------------------
    # ● 下に移動
    # turn_enabled : その場での向き変更を許可するフラグ
    #--------------------------------------------------------------------------
    def move_down(turn_enabled = true)
        # 下を向く
        if turn_enabled
           turn_down
        end
        # 通行可能な場合
        if passable?(@x, @y, Input::DOWN)
           # 下を向く
           turn_down
           # 座標を更新
           @y += 1
        end
    end
#--------------------------------------------------------------------------
# ● 左に移動
# turn_enabled : その場での向き変更を許可するフラグ
#--------------------------------------------------------------------------
def move_left(turn_enabled = true)
# 左を向く
if turn_enabled
turn_left
end
# 通行可能な場合
if passable?(@x, @y, Input::LEFT)
# 左を向く
turn_left
# 座標を更新
@x -= 1
end
end
#--------------------------------------------------------------------------
# ● 右に移動
# turn_enabled : その場での向き変更を許可するフラグ
#--------------------------------------------------------------------------
def move_right(turn_enabled = true)
# 右を向く
if turn_enabled
turn_right
end
# 通行可能な場合
if passable?(@x, @y, Input::RIGHT)
# 右を向く
turn_right
# 座標を更新
@x += 1
end
end
#--------------------------------------------------------------------------
# ● 上に移動
# turn_enabled : その場での向き変更を許可するフラグ
#--------------------------------------------------------------------------
def move_up(turn_enabled = true)
# 上を向く
if turn_enabled
turn_up
end
# 通行可能な場合
if passable?(@x, @y, Input::UP)
# 上を向く
turn_up
# 座標を更新
@y -= 1
end
end
#--------------------------------------------------------------------------
# ● 左下に移動
#--------------------------------------------------------------------------
def move_lower_left
# 向き固定でない場合
unless @direction_fix
# 右向きだった場合は左を、上向きだった場合は下を向く
@direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::UP ? Input::DOWN : @direction)
end
# 下→左、左→下 のどちらかのコースが通行可能な場合
if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
(passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
# 座標を更新
@x -= 1
@y += 1
end
end
#--------------------------------------------------------------------------
# ● 右下に移動
#--------------------------------------------------------------------------
def move_lower_right
# 向き固定でない場合
unless @direction_fix
# 左向きだった場合は右を、上向きだった場合は下を向く
@direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::UP ? Input::DOWN : @direction)
end
# 下→右、右→下 のどちらかのコースが通行可能な場合
if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
(passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
# 座標を更新
@x += 1
@y += 1
end
end
#--------------------------------------------------------------------------
# ● 左上に移動
#--------------------------------------------------------------------------
def move_upper_left
# 向き固定でない場合
unless @direction_fix
# 右向きだった場合は左を、下向きだった場合は上を向く
@direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::DOWN ? Input::UP : @direction)
end
# 上→左、左→上 のどちらかのコースが通行可能な場合
if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
(passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
# 座標を更新
@x -= 1
@y -= 1
end
end
#--------------------------------------------------------------------------
# ● 右上に移動
#--------------------------------------------------------------------------
def move_upper_right
# 向き固定でない場合
unless @direction_fix
# 左向きだった場合は右を、下向きだった場合は上を向く
@direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::DOWN ? Input::UP : @direction)
end
# 上→右、右→上 のどちらかのコースが通行可能な場合
if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
(passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
# 座標を更新
@x += 1
@y -= 1
end
end
attr_writer :move_speed
attr_writer :step_anime
end
module Spriteset_Map_Module
def setup_actor_character_sprites?
return @setup_actor_character_sprites_flag != nil
end
def setup_actor_character_sprites(characters)
if !setup_actor_character_sprites?
index_game_player = 0
@character_sprites.each_index do |i|
if @character_sprites.character.instance_of?(Game_Player)
index_game_player = i
break
end
end
for character in characters.reverse
@character_sprites.unshift(
Sprite_Character.new(@viewport1, character)
)
end
@setup_actor_character_sprites_flag = true
end
end
end
module Scene_Map_Module
def setup_actor_character_sprites(characters)
@spriteset.setup_actor_character_sprites(characters)
end
end
module Game_Party_Module
def set_transparent_actors(transparent)
@transparent = transparent
end
def setup_actor_character_sprites
if @characters == nil
@characters = []
for i in 1 ... TRAIN_ACTOR_SIZE_MAX
@characters.push(Game_Party_Actor.new)
end
end
for i in 1 ... TRAIN_ACTOR_SIZE_MAX
@characters[i - 1].setup(actors)
end
if $scene.class.method_defined?('setup_actor_character_sprites')
$scene.setup_actor_character_sprites(@characters)
end
end
def update_party_actors
setup_actor_character_sprites
transparent = $game_player.transparent
if transparent == false
if TRANSPARENT_SWITCH
transparent = $game_switches[TRANSPARENT_SWITCHES_INDEX]
end
end
for character in @characters
character.transparent = transparent
character.move_speed = $game_player.move_speed
character.step_anime = $game_player.step_anime
character.update
end
end
def moveto_party_actors( x, y )
setup_actor_character_sprites
for character in @characters
character.moveto( x, y )
end
if @move_list == nil
@move_list = []
end
move_list_setup
end
def move_party_actors
if @move_list == nil
@move_list = []
move_list_setup
end
@move_list.each_index do |i|
if @characters != nil
case @move_list.type
when Input::DOWN
@characters.move_down(@move_list.args[0])
when Input::LEFT
@characters.move_left(@move_list.args[0])
when Input::RIGHT
@characters.move_right(@move_list.args[0])
when Input::UP
@characters.move_up(@move_list.args[0])
when DOWN_LEFT
@characters.move_lower_left
when DOWN_RIGHT
@characters.move_lower_right
when UP_LEFT
@characters.move_upper_left
when UP_RIGHT
@characters.move_upper_right
when JUMP
@characters.jump(@move_list.args[0],@move_list.args[1])
end
end
end
end
class Move_List_Element
def initialize(type,args)
@type = type
@args = args
end
def type() return @type end
def args() return @args end
end
def move_list_setup
for i in 0 .. TRAIN_ACTOR_SIZE_MAX
@move_list = nil
end
end
def add_move_list(type,*args)
@move_list.unshift(Move_List_Element.new(type,args)).pop
end
def move_down_party_actors(turn_enabled = true)
move_party_actors
add_move_list(Input::DOWN,turn_enabled)
end
def move_left_party_actors(turn_enabled = true)
move_party_actors
add_move_list(Input::LEFT,turn_enabled)
end
def move_right_party_actors(turn_enabled = true)
move_party_actors
add_move_list(Input::RIGHT,turn_enabled)
end
def move_up_party_actors(turn_enabled = true)
move_party_actors
add_move_list(Input::UP,turn_enabled)
end
def move_lower_left_party_actors
move_party_actors
add_move_list(DOWN_LEFT)
end
def move_lower_right_party_actors
move_party_actors
add_move_list(DOWN_RIGHT)
end
def move_upper_left_party_actors
move_party_actors
add_move_list(UP_LEFT)
end
def move_upper_right_party_actors
move_party_actors
add_move_list(UP_RIGHT)
end
def jump_party_actors(x_plus, y_plus)
move_party_actors
add_move_list(JUMP,x_plus, y_plus)
end
end
module Game_Player_Module
def update
$game_party.update_party_actors
super
end
def moveto( x, y )
$game_party.moveto_party_actors( x, y )
super( x, y )
end
def move_down(turn_enabled = true)
if passable?(@x, @y, Input::DOWN)
$game_party.move_down_party_actors(turn_enabled)
end
super(turn_enabled)
end
def move_left(turn_enabled = true)
if passable?(@x, @y, Input::LEFT)
$game_party.move_left_party_actors(turn_enabled)
end
super(turn_enabled)
end
def move_right(turn_enabled = true)
if passable?(@x, @y, Input::RIGHT)
$game_party.move_right_party_actors(turn_enabled)
end
super(turn_enabled)
end
def move_up(turn_enabled = true)
if passable?(@x, @y, Input::UP)
$game_party.move_up_party_actors(turn_enabled)
end
super(turn_enabled)
end
def move_lower_left
# 下→左、左→下 のどちらかのコースが通行可能な場合
if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
(passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
$game_party.move_lower_left_party_actors
end
super
end
def move_lower_right
# 下→右、右→下 のどちらかのコースが通行可能な場合
if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
(passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
$game_party.move_lower_right_party_actors
end
super
end
def move_upper_left
# 上→左、左→上 のどちらかのコースが通行可能な場合
if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
(passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
$game_party.move_upper_left_party_actors
end
super
end
def move_upper_right
# 上→右、右→上 のどちらかのコースが通行可能な場合
if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
(passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
$game_party.move_upper_right_party_actors
end
super
end
def jump(x_plus, y_plus)
# 新しい座標を計算
new_x = @x + x_plus
new_y = @y + y_plus
# 加算値が (0,0) の場合か、ジャンプ先が通行可能な場合
if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y, 0)
$game_party.jump_party_actors(x_plus, y_plus)
end
super(x_plus, y_plus)
end
attr_reader :move_speed
attr_reader :step_anime
end
end # module Train_Actor
class Game_Party
include Train_Actor::Game_Party_Module
end
class Game_Player
include Train_Actor::Game_Player_Module
end
class Spriteset_Map
include Train_Actor::Spriteset_Map_Module
end
class Scene_Map
include Train_Actor::Scene_Map_Module
end

#==================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==================================================================
[/pre]
DUF{HA})FPMMGUQ}CWTV6C1.jpg
冲突句:@spriteset.setup_actor_character_sprites(characters)

薄凉看客

梦石
0
星屑
50
在线时间
1269 小时
注册时间
2010-6-20
回帖
1223
发表于 2014-8-1 11:00:08 | 显示全部楼层
存档修改的是exit
人物跟随修改的是Game_Party
这两是完全不搭的事情,不可能冲突
你要是不信,新建个工程,把两脚本放里边测试一下就知道了。

就算冲突也该是和其他修改了Game_Party的脚本冲突!!

点评

那应该怎么办?  发表于 2014-8-1 11:35
回复

使用道具 举报

梦石
0
星屑
68
在线时间
585 小时
注册时间
2013-5-25
回帖
1484
发表于 2014-8-1 13:14:17 | 显示全部楼层
把这两个脚本扔一起测试完全不会出错……
查看下是不是和别的脚本冲突了,你可以把你的工程发上来检查下

点评

我也试过,的确和这两个没关系,工程正在上传。  发表于 2014-8-1 14:01
回复

使用道具 举报

梦石
0
星屑
400
在线时间
602 小时
注册时间
2014-5-8
回帖
602
 楼主| 发表于 2014-8-1 14:02:39 | 显示全部楼层
本帖最后由 布罗利 于 2014-8-1 14:05 编辑

重装机兵风云再起.7z (4.37 MB, 下载次数: 39)
@芯☆淡茹水
回复

使用道具 举报

梦石
0
星屑
400
在线时间
602 小时
注册时间
2014-5-8
回帖
602
 楼主| 发表于 2014-8-1 14:03:34 | 显示全部楼层
克莉丝 发表于 2014-8-1 13:14
把这两个脚本扔一起测试完全不会出错……
查看下是不是和别的脚本冲突了,你可以把你的工程发上来检查下 ...

工程已发
回复

使用道具 举报

梦石
0
星屑
68
在线时间
585 小时
注册时间
2013-5-25
回帖
1484
发表于 2014-8-1 14:38:28 | 显示全部楼层
在你的标题事件中加入一句可以解决
$scene.main
脚本太乱查了半天没照出来冲突原因
QQ截图20140801143722.jpg

评分

参与人数 1星屑 +120 收起 理由
RyanBern + 120 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
400
在线时间
602 小时
注册时间
2014-5-8
回帖
602
 楼主| 发表于 2014-8-1 14:42:56 | 显示全部楼层
克莉丝 发表于 2014-8-1 14:38
在你的标题事件中加入一句可以解决
$scene.main
脚本太乱查了半天没照出来冲突原因

太好了,果然解决了。

点评

我注意到,你是想用部分读取型的。 这样可以做到设置一些通关后才有的开关。 第二周目可以激活一些特殊的东西。 如果你需要的话,可以喊我  发表于 2014-8-1 22:09
回复

使用道具 举报

梦石
0
星屑
68
在线时间
585 小时
注册时间
2013-5-25
回帖
1484
发表于 2014-8-1 14:44:37 | 显示全部楼层
布罗利 发表于 2014-8-1 14:42
太好了,果然解决了。

还有你的事件标题logo能设置空格快进嘛,每次测试都要等5秒钟的标题动画最后怒删了

点评

怎么消除?  发表于 2014-8-1 15:00
$game_screen.pictures.each{|p|p.erase}  发表于 2014-8-1 14:51
手动消除全部图片啊……  发表于 2014-8-1 14:48
......,那个读取存档后为什么会留下两张图片?怎么消失都不行  发表于 2014-8-1 14:47
回复

使用道具 举报

梦石
0
星屑
68
在线时间
585 小时
注册时间
2013-5-25
回帖
1484
发表于 2014-8-1 15:26:41 | 显示全部楼层
如果你的工程用不到读档和存档那就用下边这个
重装机兵风云再起.7z (160.09 KB, 下载次数: 32)
咱家在测试的时候遇到了死皮赖脸的bug

点评

这个是啥?  发表于 2014-8-1 15:34
回复

使用道具 举报

梦石
0
星屑
400
在线时间
602 小时
注册时间
2014-5-8
回帖
602
 楼主| 发表于 2014-8-2 09:03:23 | 显示全部楼层
克莉丝 发表于 2014-8-1 14:44
还有你的事件标题logo能设置空格快进嘛,每次测试都要等5秒钟的标题动画最后怒删了 ...

为什么读档后按菜单会发生错误?
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部