Project1

标题: 麻烦看看这个工程!!宠物脚本和战斗换人并存的问题 [打印本页]

作者: 幻耶    时间: 2011-9-1 13:02
标题: 麻烦看看这个工程!!宠物脚本和战斗换人并存的问题
本帖最后由 幻耶 于 2011-9-6 09:18 编辑

柳柳的宠物脚本和enghao_lim的战斗中换人脚本并存的问题,请看存档:在战斗中,当A角色(没装备宠物)把B角色(装备了宠物)替换上来,B角色的宠物不起作用,而且也不显示,求解决!:'(

dsu_plus_rewardpost_czw

宠物核心脚本+战斗换人.rar

201.37 KB, 下载次数: 605


作者: 爆焰    时间: 2011-9-1 14:01
里面的两个脚本根本没有任何关联,怎么可能显示
作者: 幻耶    时间: 2011-9-1 15:33
本帖最后由 幻耶 于 2011-9-1 15:34 编辑
爆焰 发表于 2011-9-1 14:01
里面的两个脚本根本没有任何关联,怎么可能显示


好吧,我就是想做到换上场的角色如果带有宠物可以一起出来,换下场的角色如果带有宠物可以一起回去。应该怎样做到?


幻耶于2011-9-1 22:22补充以下内容:
猜想换人脚本分成了两个队伍系统,初始化的时候待命的那个队伍没有算上去?


幻耶于2011-9-2 08:21补充以下内容:
可以自顶了吧!
作者: 英顺的马甲    时间: 2011-9-2 16:02
本帖最后由 英顺的马甲 于 2011-9-2 16:04 编辑

将这个脚本插入在两个脚本的下面就行了。
  1. class Sprite_Pet < RPG::Sprite
  2.   def refresh
  3.     if $game_party.actors[@father_id] != nil
  4.       if $game_party.actors[@father_id].pet_id != 0
  5.         @battler = Game_Pet.new($game_party.actors[@father_id].pet_id)
  6.         self.bitmap = RPG::Cache.battler(@battler.battler_name, @battler.battler_hue)
  7.       else
  8.         @battler = nil
  9.         self.bitmap.clear
  10.       end
  11.     end
  12.   end
  13. end
  14. class Scene_Battle
  15.   def update_phase4_step4
  16.     if @active_battler.current_action.is_change_battler?
  17.       actor1_id = @active_battler.current_action.change_to_battler
  18.       actor2_id = @active_battler.id
  19.       (0...$game_party.actors.size).each do |i|
  20.         if $game_party.actors[i].id == actor2_id
  21.           $game_party.change_actor(i,actor1_id)
  22.           @active_battler = $game_actors[actor1_id]
  23.           @status_window.refresh
  24.         end
  25.       end
  26.       @pet_actor = []
  27.       for ps in $pet_sprites
  28.         ps.refresh
  29.         if ps.battler != nil
  30.           @pet_actor.push(ps.battler)
  31.         end
  32.       end
  33.     end
  34.     for target in @target_battlers
  35.       target.animation_id = @animation2_id
  36.       target.animation_hit = (target.damage != "Miss")
  37.     end
  38.     @wait_count = 8
  39.     @phase4_step = 5
  40.   end
  41. end
复制代码

作者: 幻耶    时间: 2011-9-2 22:41
本帖最后由 幻耶 于 2011-9-2 22:44 编辑
英顺的马甲 发表于 2011-9-2 16:02
将这个脚本插入在两个脚本的下面就行了。


很感谢!我还以为这帖没希望了。。宠物跟随的问题解决了,但是在宠物的战斗图上还有些问题:当带有宠物的A角色下场,把不带宠物的B角色替换上来,然后B下场再让A回到战场,会发现A右下角的宠物战斗图不见了。

另外当带有宠物的A角色下场,把不带宠物的B角色替换上来,如果敌人是和宠物一样的怪物,敌人的战斗图会消失,像下图

11.jpg (42.71 KB, 下载次数: 1)

11.jpg

作者: 英顺的马甲    时间: 2011-9-2 22:53
幻耶 发表于 2011-9-2 22:41
很感谢!我还以为这帖没希望了。。宠物跟随的问题解决了,但是在宠物的战斗图上还有些问题:当带有宠物的 ...

抱歉,这是没注意到的默认的悲哀
第九行改成 self.bitmap = Bitmap.new(1,1)
作者: 精灵使者    时间: 2011-9-2 23:44
其实可以用bitmap.clear。
不过将第六行改为
self.bitmap = RPG::Cache.battler(@battler.battler_name, @battler.battler_hue).clone
就没这个问题了。
作者: 幻耶    时间: 2011-9-3 07:44
英顺的马甲 发表于 2011-9-2 22:53
抱歉,这是没注意到的默认的悲哀
第九行改成 self.bitmap = Bitmap.new(1,1)

再次感谢,解决大问题了,最后请教一下:带宠的A角色下场换成B角色之后,A带的宠物有时候还会攻击敌人一下,能不能做到B角色一上场,A的宠物就停止行动?
作者: 英顺的马甲    时间: 2011-9-5 18:36
幻耶 发表于 2011-9-3 07:44
再次感谢,解决大问题了,最后请教一下:带宠的A角色下场换成B角色之后,A带的宠物有时候还会攻击敌人一 ...

解决了死亡后不会换宠物BUG
  1. class Sprite_Pet < RPG::Sprite
  2.   def refresh
  3.     if $game_party.actors[@father_id] != nil
  4.       if $game_party.actors[@father_id].pet_id != 0
  5.         @battler = Game_Pet.new($game_party.actors[@father_id].pet_id)
  6.         self.bitmap = RPG::Cache.battler(@battler.battler_name, @battler.battler_hue)
  7.       else
  8.         self.bitmap = nil
  9.         @battler = nil
  10.       end
  11.       self.appear
  12.     end
  13.   end
  14. end
  15. class Scene_Battle
  16.   def update_phase4_step4
  17.     if @active_battler.current_action.is_change_battler?
  18.       actor1_id = @active_battler.current_action.change_to_battler
  19.       actor2_id = @active_battler.id
  20.       (0...$game_party.actors.size).each do |i|
  21.         if $game_party.actors[i].id == actor2_id
  22.           $game_party.change_actor(i,actor1_id)
  23.           @active_battler = $game_actors[actor1_id]
  24.           @status_window.refresh
  25.         end
  26.       end
  27.       @pet_actor = []
  28.       for ps in $pet_sprites
  29.         ps.refresh
  30.         if ps.battler != nil
  31.           @pet_actor.push(ps.battler)
  32.         end
  33.       end
  34.     end
  35.     for target in @target_battlers
  36.       target.animation_id = @animation2_id
  37.       target.animation_hit = (target.damage != "Miss")
  38.     end
  39.     @wait_count = 8
  40.     @phase4_step = 5
  41.   end
  42.   def update_phase4_step6
  43.     @target_battlers.each do |target|
  44.       if target.is_a?(Game_Actor) and target.dead? and
  45.          !$game_party.other_actors.all?{|actor|actor.dead?}
  46.         @actor_window = Window_Actor.new
  47.         @actor_window.index = 0
  48.         @actor_window.active = true
  49.         @actor_window.help_window = @help_window
  50.         actor_id = -1
  51.         loop do
  52.           Graphics.update
  53.           Input.update
  54.           @actor_window.update
  55.           if Input.trigger?(Input::C)
  56.             actor = $game_actors[@actor_window.actor_id]
  57.             if actor.dead? or
  58.                (@changed_battler_id.include?(actor.id) and
  59.                 target.current_action.change_to_battler != actor.id) or
  60.                $game_party.actors.include?(actor)
  61.               $game_system.se_play($data_system.buzzer_se)
  62.             else
  63.               actor_id = actor.id
  64.             end
  65.           end
  66.           break if actor_id >= 0
  67.         end
  68.         @actor_window.visible = false
  69.         @actor_window.dispose
  70.         @actor_window = nil
  71.         @help_window.visible = false
  72.         (0...$game_party.actors.size).each do |i|
  73.           if $game_party.actors[i].id == target.id
  74.             $game_party.change_actor(i,actor_id)
  75.             @status_window.refresh
  76.           end
  77.         end
  78.         @pet_actor = []
  79.         for ps in $pet_sprites
  80.           ps.refresh
  81.           if ps.battler != nil
  82.             @pet_actor.push(ps.battler)
  83.           end
  84.         end
  85.       end
  86.     end
  87.     $game_temp.forcing_battler = nil
  88.     if @common_event_id > 0
  89.       common_event = $data_common_events[@common_event_id]
  90.       $game_system.battle_interpreter.setup(common_event.list, 0)
  91.     end
  92.     @phase4_step = 1
  93.   end
  94. end
  95. class Spriteset_Battle
  96.   def effect?
  97.     for sprite in @enemy_sprites + @actor_sprites + $pet_sprites
  98.       return true if sprite.effect?
  99.     end
  100.     return false
  101.   end
  102. end
复制代码





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