Project1

标题: 小小研究成果-仿皇家骑士团-命运之轮的不死系敌人。 [打印本页]

作者: 黑夜守望者    时间: 2012-6-22 21:31
标题: 小小研究成果-仿皇家骑士团-命运之轮的不死系敌人。
本帖最后由 黑夜守望者 于 2012-6-22 21:41 编辑

说明:
玩过PSP上面皇家骑士团-命运之轮的人应该知道,里面的不死系单位有个特性,就是被打到HP=0的时候会转为假死状态,3回合后HP完全回复再次复活。并且有个“除灵”的技能,能将假死中的不死系敌人完全消灭。
接下来是自己研究出来的一种实现方法:
先设置数据库:
1.不死状态:我设置是30号状态(此状态最好是设置一下闪烁的色调,以便区分不死系敌人)
2.假死状态:我设置是31号状态,限制:不行动,3回合(可在数据库中设定回合数)后100%概率解除
3.除灵技能:效果:去除31号假死状态,真正清除不死系敌人
4.开关:假死状态复活还原色调用,我是设置20号开关
更改几处脚本:
第一处:Game_Battler 1
#--------------------------------------------------------------------------
# ● 战斗不能判定 + 去除不死情况
#--------------------------------------------------------------------------
  def dead?
    return (@hp == 0 and not @immortal and not self.state?(30) and not self.state?(31))
  end
  #--------------------------------------------------------------------------
  # ● 存在判定 + 假死中的不死系
#--------------------------------------------------------------------------
  def exist?
    return (not @hidden and (@hp > 0 or @immortal or self.state?(31)))
  end


第二处:Game_Battler 2
#--------------------------------------------------------------------------
  # ● 状态自然解除 (回合改变时调用)
  #--------------------------------------------------------------------------
  def remove_states_auto
    for i in @states_turn.keys.clone
      if @states_turn > 0
        @states_turn -= 1
      elsif rand(100) < $data_states.auto_release_prob
        #===================达到假死状态设定的回合数后复活========
        if self.state?(31)
         remove_state(31)
         add_state(30)
         @hp = self.maxhp#复活后加满HP
         Audio.se_play("Audio/SE/"+"139-Darkness02",100,100)#复活的音效
         $game_switches[20] = true#20号开关开启,用于还原假死状态设置的色调
        end
        #=========================================================
        remove_state(i)
      end
    end
  end


第三处:Sprite_Battler

# korapusu
      if @battler.damage == nil and @battler.dead?
       if @battler.is_a?(Game_Enemy)
          $game_system.se_play($data_system.enemy_collapse_se)
        else
          $game_system.se_play($data_system.actor_collapse_se)
        end
        collapse
        @battler_visible = false
      end
      #=========进入假死状态==================
      if @battler.damage == nil and @battler.hp == 0 and @battler.state?(30)
         @battler.remove_state(30)
         @battler.add_state(31)
         $game_system.se_play($data_system.enemy_collapse_se)#死亡(假死)的音效
         self.color.set(0, 0, 0, 255)#假死状态色调
       end
      #====================================
      #=============假死状态复活后还原色调(开关编号:20)========
      if $game_switches[20]
        self.color.set(255, 255, 255, 0)
        $game_switches[20] = false
        #self.opacity = 80
        end
      #=====================================
    end
    # 设置活动块的坐标
    self.x = @battler.screen_x
    self.y = @battler.screen_y
    self.z = @battler.screen_z
  end
end


如此,附加有30号不死状态的丧尸敌人或角色在被打死后3回合后复活,要想完全消灭必须用技能“除灵”解除假死状态中的单位。
注意:不死这个状态对己方角色也有用,建议设置一个技能(necromancy之类的……附加上31号状态),用在己方HP=0的角色身上,可以体验到做死灵法师的快感……
作者: chd114    时间: 2012-6-23 11:54
横版无视···不过我的确在做不死的属性····
作者: 黑夜守望者    时间: 2012-6-23 19:32
本帖最后由 黑夜守望者 于 2012-6-24 00:44 编辑

忘了一件事,就是不死状态下回复技能和回复药效果为伤害:
更改脚本Game_Battler 3的两处位置:
第一处:
应用特技效果那边增加判断:
# 伤害符号正确的情况下
      if self.damage > 0
        # 防御修正
        if self.guarding?
          self.damage /= 2
        end
      end
      #================不死状态下回复效果转为伤害==
      if self.damage < 0 and self.state?(30)
        self.damage *= -1
      end
      #============================================
      # 分散
      if skill.variance > 0 and self.damage.abs > 0
        amp = [self.damage.abs * skill.variance / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end


第二处:
应用物品效果那边增加判断:

# 回复量符号为负的情况下
      if recover_hp < 0
        # 防御修正
        if self.guarding?
          recover_hp /= 2
        end
      end
      #================不死状态下回复效果转为伤害==
      if recover_hp > 0 and self.state?(30)
        recover_hp *= -1
      end
      #============================================
      # HP 回复量符号的反转、设置伤害值
      self.damage = -recover_hp


还有,如果用装备附加自动状态的话,Game_Battler 2要改一下:
# 强制附加的场合(不死状态只附加一次)====================
    if force and not self.state?(30)#这里要修改成这样
      # 设置为自然解除的最低回数 -1 (无效)
      @states_turn[state_id] = -1
    end
作者: s101010aq    时间: 2012-6-28 15:16
×.0,很富扎的样子。
作者: stevenrock    时间: 2012-6-30 23:02
哇哦,发现了好东西呢!支持LZ,现在就去试用一下,待会测试完了再来提意见。




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