Project1

标题: 自动存读档的脚本冲突 [打印本页]

作者: 布罗利    时间: 2014-8-1 10:24
标题: 自动存读档的脚本冲突
我用了自动存读档的脚本,与人物跟随脚本重突
自动存读档的脚本如下
RUBY 代码复制
  1. module Kernel
  2.  
  3. alias origin_exit exit unless method_defined? :exit
  4.  
  5. def exit(*args)
  6.    case $scene
  7.    when Scene_Map
  8.      AutoSave.common_save unless $game_system.map_interpreter.running?
  9.    when Scene_Battle
  10.      AutoSave.common_save unless $game_system.battle_interpreter.running?
  11.    else
  12.      if $scene.type != NilClass and $scene.type != Scene_Title
  13.        AutoSave.common_save
  14.      end
  15.    end
  16.    origin_exit(*args)
  17. end
  18.  
  19. end
  20.  
  21.  
  22. module AutoSave
  23.  
  24. if @scene_proc.nil?
  25.    @last_scene = nil.class
  26.    @scene_proc = proc do |value|
  27.      if value.nil? or value.is_a?(Scene_Title)
  28.        if @last_scene != NilClass and @last_scene != Scene_Title
  29.          AutoSave.common_save
  30.        end
  31.      end
  32.      @last_scene = value.type
  33.    end
  34.    trace_var(:$scene,@scene_proc)
  35. end
  36.  
  37. module_function
  38.  
  39. def common_save
  40.    filename = "System.rxdata"    #byakki
  41.    file = File.open(filename, "wb")
  42.    write_save_data(file)
  43.    file.close
  44. end
  45.   #--------------------------------------------------------------------------
  46.   # ● 写入存档数据
  47.   #     file : 写入用文件对像 (已经打开)
  48.   #--------------------------------------------------------------------------
  49. def write_save_data(file)
  50.     # 生成描绘存档文件用的角色图形
  51.     characters = []
  52.     for i in 0...$game_party.actors.size
  53.       actor = $game_party.actors[i]
  54.       characters.push([actor.character_name, actor.character_hue])
  55.     end
  56.     # 写入描绘存档文件用的角色数据
  57.     Marshal.dump(characters, file)
  58.     # 写入测量游戏时间用画面计数
  59.     Marshal.dump(Graphics.frame_count, file)
  60.     # 增加 1 次存档次数
  61.     $game_system.save_count += 1
  62.     # 保存魔法编号
  63.     # (将编辑器保存的值以随机值替换)
  64.     $game_system.magic_number = $data_system.magic_number
  65.     # 写入各种游戏对像
  66.     Marshal.dump($game_system, file)
  67.     Marshal.dump($game_switches, file)
  68.     Marshal.dump($game_variables, file)
  69.     Marshal.dump($game_self_switches, file)
  70.     Marshal.dump($game_screen, file)
  71.     Marshal.dump($game_actors, file)
  72.     Marshal.dump($game_party, file)
  73.     Marshal.dump($game_troop, file)
  74.     Marshal.dump($game_map, file)
  75.     Marshal.dump($game_player, file)
  76.   end
  77. end

人物跟随脚本如下:
RUBY 代码复制
  1. #===================================================================
  2. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  3. #===================================================================
  4. # ————————————————————————————————————
  5. # ▼▲▼ XRXS13. パーティ列車移動 ver.1.02 ▼▲▼
  6. # by fukuyama
  7. #
  8. # Train_Actor
  9. #
  10. # [email][email protected][/email]
  11. # [url]http://www4.big.or.jp/~fukuyama/rgss/Train_Actor.txt[/url]
  12. #
  13. module Train_Actor
  14.  
  15.   #是否使用停止跟随的方法,也就是说,这里false改为true的时候,如果TRANSPARENT_SWITCHES_INDEX
  16.   #开关打开,跟随的人物就消失了(其实只是变成透明而已)
  17.   TRANSPARENT_SWITCH = true
  18.   TRANSPARENT_SWITCHES_INDEX = 20
  19.   #举例:第一个为true,第二个为20,则打开20号开关,后面的人都没了。
  20.  
  21.   #跟随人数的最大数目,可以更改为2、3什么的。
  22.   TRAIN_ACTOR_SIZE_MAX = 6
  23.  
  24.   # 定数
  25.   #Input::DOWN = 2
  26.   #Input::LEFT = 4
  27.   #Input::RIGHT = 6
  28.   #Input::UP = 6
  29.   DOWN_LEFT = 1
  30.   DOWN_RIGHT = 3
  31.   UP_LEFT = 7
  32.   UP_RIGHT = 9
  33.   JUMP = 5
  34.  
  35.   class Game_Party_Actor < Game_Character
  36.  
  37.     def initialize
  38.         super()
  39.  
  40.         @through = true
  41.     end
  42.  
  43.     def setup(actor)
  44.  
  45.         # キャラクターのファイル名と色相を設定
  46.         if actor != nil
  47.            @character_name = actor.character_name
  48.            @character_hue = actor.character_hue
  49.            @tempneme = actor.name           
  50.         else
  51.            @character_name = ""
  52.            @character_hue = 0
  53.            @tempneme = ""      
  54.         end
  55.         # 不透明度と合成方法を初期化
  56.         @opacity = 255
  57.         @blend_type = 0
  58.     end
  59.  
  60.     def screen_z(height = 0)
  61.         if $game_player.x == @x and $game_player.y == @y
  62.            return $game_player.screen_z(height) - 1
  63.         end
  64.         super(height)
  65.     end
  66.  
  67.     def name
  68.         return @tempneme
  69.     end
  70.  
  71.     #--------------------------------------------------------------------------
  72.     # ● 下に移動
  73.     # turn_enabled : その場での向き変更を許可するフラグ
  74.     #--------------------------------------------------------------------------
  75.     def move_down(turn_enabled = true)
  76.         # 下を向く
  77.         if turn_enabled
  78.            turn_down
  79.         end
  80.         # 通行可能な場合
  81.         if passable?(@x, @y, Input::DOWN)
  82.            # 下を向く
  83.            turn_down
  84.            # 座標を更新
  85.            @y += 1
  86.         end
  87.     end
  88. #--------------------------------------------------------------------------
  89. # ● 左に移動
  90. # turn_enabled : その場での向き変更を許可するフラグ
  91. #--------------------------------------------------------------------------
  92. def move_left(turn_enabled = true)
  93. # 左を向く
  94. if turn_enabled
  95. turn_left
  96. end
  97. # 通行可能な場合
  98. if passable?(@x, @y, Input::LEFT)
  99. # 左を向く
  100. turn_left
  101. # 座標を更新
  102. @x -= 1
  103. end
  104. end
  105. #--------------------------------------------------------------------------
  106. # ● 右に移動
  107. # turn_enabled : その場での向き変更を許可するフラグ
  108. #--------------------------------------------------------------------------
  109. def move_right(turn_enabled = true)
  110. # 右を向く
  111. if turn_enabled
  112. turn_right
  113. end
  114. # 通行可能な場合
  115. if passable?(@x, @y, Input::RIGHT)
  116. # 右を向く
  117. turn_right
  118. # 座標を更新
  119. @x += 1
  120. end
  121. end
  122. #--------------------------------------------------------------------------
  123. # ● 上に移動
  124. # turn_enabled : その場での向き変更を許可するフラグ
  125. #--------------------------------------------------------------------------
  126. def move_up(turn_enabled = true)
  127. # 上を向く
  128. if turn_enabled
  129. turn_up
  130. end
  131. # 通行可能な場合
  132. if passable?(@x, @y, Input::UP)
  133. # 上を向く
  134. turn_up
  135. # 座標を更新
  136. @y -= 1
  137. end
  138. end
  139. #--------------------------------------------------------------------------
  140. # ● 左下に移動
  141. #--------------------------------------------------------------------------
  142. def move_lower_left
  143. # 向き固定でない場合
  144. unless @direction_fix
  145. # 右向きだった場合は左を、上向きだった場合は下を向く
  146. @direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::UP ? Input::DOWN : @direction)
  147. end
  148. # 下→左、左→下 のどちらかのコースが通行可能な場合
  149. if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
  150. (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
  151. # 座標を更新
  152. @x -= 1
  153. @y += 1
  154. end
  155. end
  156. #--------------------------------------------------------------------------
  157. # ● 右下に移動
  158. #--------------------------------------------------------------------------
  159. def move_lower_right
  160. # 向き固定でない場合
  161. unless @direction_fix
  162. # 左向きだった場合は右を、上向きだった場合は下を向く
  163. @direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::UP ? Input::DOWN : @direction)
  164. end
  165. # 下→右、右→下 のどちらかのコースが通行可能な場合
  166. if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
  167. (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
  168. # 座標を更新
  169. @x += 1
  170. @y += 1
  171. end
  172. end
  173. #--------------------------------------------------------------------------
  174. # ● 左上に移動
  175. #--------------------------------------------------------------------------
  176. def move_upper_left
  177. # 向き固定でない場合
  178. unless @direction_fix
  179. # 右向きだった場合は左を、下向きだった場合は上を向く
  180. @direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::DOWN ? Input::UP : @direction)
  181. end
  182. # 上→左、左→上 のどちらかのコースが通行可能な場合
  183. if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
  184. (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
  185. # 座標を更新
  186. @x -= 1
  187. @y -= 1
  188. end
  189. end
  190. #--------------------------------------------------------------------------
  191. # ● 右上に移動
  192. #--------------------------------------------------------------------------
  193. def move_upper_right
  194. # 向き固定でない場合
  195. unless @direction_fix
  196. # 左向きだった場合は右を、下向きだった場合は上を向く
  197. @direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::DOWN ? Input::UP : @direction)
  198. end
  199. # 上→右、右→上 のどちらかのコースが通行可能な場合
  200. if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
  201. (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
  202. # 座標を更新
  203. @x += 1
  204. @y -= 1
  205. end
  206. end
  207. attr_writer :move_speed
  208. attr_writer :step_anime
  209. end
  210. module Spriteset_Map_Module
  211. def setup_actor_character_sprites?
  212. return @setup_actor_character_sprites_flag != nil
  213. end
  214. def setup_actor_character_sprites(characters)
  215. if !setup_actor_character_sprites?
  216. index_game_player = 0
  217. @character_sprites.each_index do |i|
  218. if @character_sprites[i].character.instance_of?(Game_Player)
  219. index_game_player = i
  220. break
  221. end
  222. end
  223. for character in characters.reverse
  224. @character_sprites.unshift(
  225. Sprite_Character.new(@viewport1, character)
  226. )
  227. end
  228. @setup_actor_character_sprites_flag = true
  229. end
  230. end
  231. end
  232. module Scene_Map_Module
  233. def setup_actor_character_sprites(characters)
  234. @spriteset.setup_actor_character_sprites(characters)
  235. end
  236. end
  237. module Game_Party_Module
  238. def set_transparent_actors(transparent)
  239. @transparent = transparent
  240. end
  241. def setup_actor_character_sprites
  242. if @characters == nil
  243. @characters = []
  244. for i in 1 ... TRAIN_ACTOR_SIZE_MAX
  245. @characters.push(Game_Party_Actor.new)
  246. end
  247. end
  248. for i in 1 ... TRAIN_ACTOR_SIZE_MAX
  249. @characters[i - 1].setup(actors[i])
  250. end
  251. if $scene.class.method_defined?('setup_actor_character_sprites')
  252. $scene.setup_actor_character_sprites(@characters)
  253. end
  254. end
  255. def update_party_actors
  256. setup_actor_character_sprites
  257. transparent = $game_player.transparent
  258. if transparent == false
  259. if TRANSPARENT_SWITCH
  260. transparent = $game_switches[TRANSPARENT_SWITCHES_INDEX]
  261. end
  262. end
  263. for character in @characters
  264. character.transparent = transparent
  265. character.move_speed = $game_player.move_speed
  266. character.step_anime = $game_player.step_anime
  267. character.update
  268. end
  269. end
  270. def moveto_party_actors( x, y )
  271. setup_actor_character_sprites
  272. for character in @characters
  273. character.moveto( x, y )
  274. end
  275. if @move_list == nil
  276. @move_list = []
  277. end
  278. move_list_setup
  279. end
  280. def move_party_actors
  281. if @move_list == nil
  282. @move_list = []
  283. move_list_setup
  284. end
  285. @move_list.each_index do |i|
  286. if @characters[i] != nil
  287. case @move_list[i].type
  288. when Input::DOWN
  289. @characters[i].move_down(@move_list[i].args[0])
  290. when Input::LEFT
  291. @characters[i].move_left(@move_list[i].args[0])
  292. when Input::RIGHT
  293. @characters[i].move_right(@move_list[i].args[0])
  294. when Input::UP
  295. @characters[i].move_up(@move_list[i].args[0])
  296. when DOWN_LEFT
  297. @characters[i].move_lower_left
  298. when DOWN_RIGHT
  299. @characters[i].move_lower_right
  300. when UP_LEFT
  301. @characters[i].move_upper_left
  302. when UP_RIGHT
  303. @characters[i].move_upper_right
  304. when JUMP
  305. @characters[i].jump(@move_list[i].args[0],@move_list[i].args[1])
  306. end
  307. end
  308. end
  309. end
  310. class Move_List_Element
  311. def initialize(type,args)
  312. @type = type
  313. @args = args
  314. end
  315. def type() return @type end
  316. def args() return @args end
  317. end
  318. def move_list_setup
  319. for i in 0 .. TRAIN_ACTOR_SIZE_MAX
  320. @move_list[i] = nil
  321. end
  322. end
  323. def add_move_list(type,*args)
  324. @move_list.unshift(Move_List_Element.new(type,args)).pop
  325. end
  326. def move_down_party_actors(turn_enabled = true)
  327. move_party_actors
  328. add_move_list(Input::DOWN,turn_enabled)
  329. end
  330. def move_left_party_actors(turn_enabled = true)
  331. move_party_actors
  332. add_move_list(Input::LEFT,turn_enabled)
  333. end
  334. def move_right_party_actors(turn_enabled = true)
  335. move_party_actors
  336. add_move_list(Input::RIGHT,turn_enabled)
  337. end
  338. def move_up_party_actors(turn_enabled = true)
  339. move_party_actors
  340. add_move_list(Input::UP,turn_enabled)
  341. end
  342. def move_lower_left_party_actors
  343. move_party_actors
  344. add_move_list(DOWN_LEFT)
  345. end
  346. def move_lower_right_party_actors
  347. move_party_actors
  348. add_move_list(DOWN_RIGHT)
  349. end
  350. def move_upper_left_party_actors
  351. move_party_actors
  352. add_move_list(UP_LEFT)
  353. end
  354. def move_upper_right_party_actors
  355. move_party_actors
  356. add_move_list(UP_RIGHT)
  357. end
  358. def jump_party_actors(x_plus, y_plus)
  359. move_party_actors
  360. add_move_list(JUMP,x_plus, y_plus)
  361. end
  362. end
  363. module Game_Player_Module
  364. def update
  365. $game_party.update_party_actors
  366. super
  367. end
  368. def moveto( x, y )
  369. $game_party.moveto_party_actors( x, y )
  370. super( x, y )
  371. end
  372. def move_down(turn_enabled = true)
  373. if passable?(@x, @y, Input::DOWN)
  374. $game_party.move_down_party_actors(turn_enabled)
  375. end
  376. super(turn_enabled)
  377. end
  378. def move_left(turn_enabled = true)
  379. if passable?(@x, @y, Input::LEFT)
  380. $game_party.move_left_party_actors(turn_enabled)
  381. end
  382. super(turn_enabled)
  383. end
  384. def move_right(turn_enabled = true)
  385. if passable?(@x, @y, Input::RIGHT)
  386. $game_party.move_right_party_actors(turn_enabled)
  387. end
  388. super(turn_enabled)
  389. end
  390. def move_up(turn_enabled = true)
  391. if passable?(@x, @y, Input::UP)
  392. $game_party.move_up_party_actors(turn_enabled)
  393. end
  394. super(turn_enabled)
  395. end
  396. def move_lower_left
  397. # 下→左、左→下 のどちらかのコースが通行可能な場合
  398. if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
  399. (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
  400. $game_party.move_lower_left_party_actors
  401. end
  402. super
  403. end
  404. def move_lower_right
  405. # 下→右、右→下 のどちらかのコースが通行可能な場合
  406. if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
  407. (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
  408. $game_party.move_lower_right_party_actors
  409. end
  410. super
  411. end
  412. def move_upper_left
  413. # 上→左、左→上 のどちらかのコースが通行可能な場合
  414. if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
  415. (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
  416. $game_party.move_upper_left_party_actors
  417. end
  418. super
  419. end
  420. def move_upper_right
  421. # 上→右、右→上 のどちらかのコースが通行可能な場合
  422. if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
  423. (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
  424. $game_party.move_upper_right_party_actors
  425. end
  426. super
  427. end
  428. def jump(x_plus, y_plus)
  429. # 新しい座標を計算
  430. new_x = @x + x_plus
  431. new_y = @y + y_plus
  432. # 加算値が (0,0) の場合か、ジャンプ先が通行可能な場合
  433. if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y, 0)
  434. $game_party.jump_party_actors(x_plus, y_plus)
  435. end
  436. super(x_plus, y_plus)
  437. end
  438. attr_reader :move_speed
  439. attr_reader :step_anime
  440. end
  441. end # module Train_Actor
  442. class Game_Party
  443. include Train_Actor::Game_Party_Module
  444. end
  445. class Game_Player
  446. include Train_Actor::Game_Player_Module
  447. end
  448. class Spriteset_Map
  449. include Train_Actor::Spriteset_Map_Module
  450. end
  451. class Scene_Map
  452. include Train_Actor::Scene_Map_Module
  453. end
  454.  
  455. #==================================================================
  456. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  457. #==================================================================


冲突句:@spriteset.setup_actor_character_sprites(characters)
作者: 恐惧剑刃    时间: 2014-8-1 11:00
存档修改的是exit
人物跟随修改的是Game_Party
这两是完全不搭的事情,不可能冲突
你要是不信,新建个工程,把两脚本放里边测试一下就知道了。

就算冲突也该是和其他修改了Game_Party的脚本冲突!!
作者: 克莉丝    时间: 2014-8-1 13:14
把这两个脚本扔一起测试完全不会出错……
查看下是不是和别的脚本冲突了,你可以把你的工程发上来检查下
作者: 布罗利    时间: 2014-8-1 14:02
本帖最后由 布罗利 于 2014-8-1 14:05 编辑

重装机兵风云再起.7z (4.37 MB, 下载次数: 39)
@芯☆淡茹水
作者: 布罗利    时间: 2014-8-1 14:03
克莉丝 发表于 2014-8-1 13:14
把这两个脚本扔一起测试完全不会出错……
查看下是不是和别的脚本冲突了,你可以把你的工程发上来检查下 ...

工程已发
作者: 克莉丝    时间: 2014-8-1 14:38
在你的标题事件中加入一句可以解决
$scene.main
脚本太乱查了半天没照出来冲突原因


作者: 布罗利    时间: 2014-8-1 14:42
克莉丝 发表于 2014-8-1 14:38
在你的标题事件中加入一句可以解决
$scene.main
脚本太乱查了半天没照出来冲突原因

太好了,果然解决了。
作者: 克莉丝    时间: 2014-8-1 14:44
布罗利 发表于 2014-8-1 14:42
太好了,果然解决了。

还有你的事件标题logo能设置空格快进嘛,每次测试都要等5秒钟的标题动画最后怒删了
作者: 克莉丝    时间: 2014-8-1 15:26
如果你的工程用不到读档和存档那就用下边这个
重装机兵风云再起.7z (160.09 KB, 下载次数: 32)
咱家在测试的时候遇到了死皮赖脸的bug
作者: 布罗利    时间: 2014-8-2 09:03
克莉丝 发表于 2014-8-1 14:44
还有你的事件标题logo能设置空格快进嘛,每次测试都要等5秒钟的标题动画最后怒删了 ...

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




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