Project1

标题: 【XP】裝備會自動回血及回魔 [打印本页]

作者: 銀藍色的零    时间: 2011-12-16 23:30
标题: 【XP】裝備會自動回血及回魔
本帖最后由 月夜神音 于 2011-12-21 22:26 编辑

如何製作出裝備某些防具或武器
在戰鬥時會每回合自動回復一定hp或sp呢?(只有戰鬥時~一般地圖上不會)

就是說不只一個裝備唷
裝備一  回10%hp
裝備二  回20%mp
裝備三  回30%hp.......等

我有看過教程那邊
不過是空白文章
作者: typhon_524    时间: 2011-12-17 08:09
本帖最后由 typhon_524 于 2011-12-17 08:10 编辑

Scene_Battle 4下搜索,在# 连续伤害之下,在# 自然解除状态 之上插入以下脚本,假设附带100号属性的头盔有回血功能:
  1.       if @active_battler.is_a?(Game_Actor) and @active_battler.hp > 0
  2.         if @active_battler.armor2_id != 0 and $data_armors[@active_battler.armor2_id].guard_element_set.include?(100)
  3.           @active_battler.damage = -@active_battler.maxhp/10  #XXOO恢复生命百分比,也可设置固定值
  4.           @active_battler.damage = @active_battler.damage.to_i
  5.           @active_battler.hp-=@active_battler.damage
  6.           @active_battler.animation_id = 21 #自动补血动画编号
  7.           @active_battler.damage_pop = true
  8.         end
  9.       end
复制代码

作者: 銀藍色的零    时间: 2011-12-17 12:05
那如果要設置好幾個呢?
也就是說不只一個
裝備一  回10%hp
裝備二  回20%mp
裝備三  回30%hp.......等
作者: typhon_524    时间: 2011-12-17 22:09
本帖最后由 typhon_524 于 2011-12-17 22:18 编辑

在数据库里给不同的防具勾选上不同的属性防御

     if @active_battler.is_a?(Game_Actor) and @active_battler.hp > 0
        if @active_battler.armor1_id != 0 and $data_armors[@active_battler.armor1_id].guard_element_set.include?(100)
           回10%hp
        end
        if @active_battler.armor2_id != 0 and $data_armors[@active_battler.armor2_id].guard_element_set.include?(101)
           回20%mp
        end
        if @active_battler.armor3_id != 0 and $data_armors[@active_battler.armor3_id].guard_element_set.include?(103)
          回30%hp
        end
      end
作者: 銀藍色的零    时间: 2011-12-18 22:13
兩個方法都測過
不行耶~~~^^|||
作者: 羞射了    时间: 2011-12-19 04:11
用状态法实现,首先设置几个你需要的状态,设置好名字,都打钩连续伤害,不能抵抗,就类似默认的那个毒,将它们设置为装备的自动状态。这里你设计的三个状态分别是17,18,19号。

然后打开脚本,找到Game_Battler3
  #--------------------------------------------------------------------------
  # ● 应用连续伤害效果
  #--------------------------------------------------------------------------
  def slip_damage_effect
    # 设置伤害
    self.damage = self.maxhp / 10
    # 分散
    if self.damage.abs > 0
      amp = [self.damage.abs * 15 / 100, 1].max
      self.damage += rand(amp+1) + rand(amp+1) - amp
    end
    # HP 的伤害减法运算
    self.hp -= self.damage
    # 过程结束
    return true
  end

然后分别定义几个状态,比如说
  #--------------------------------------------------------------------------
  # ● 应用连续伤害效果
  #--------------------------------------------------------------------------
  def slip_damage_effect
      if self.states.include?(17)
        self.damage = - self.maxhp / 10
         self.hp -= self.damage
       elsif self.states.include?(18)
         self.damage = - self.maxsp / 5
         self.sp -= self.damage
      elsif self.states.include?(19)
         self.damage = - self.maxhp / 3
         self.hp -= self.damage  
     else#下面就是默认的毒
    # 设置伤害
    self.damage = self.maxhp / 10
    # 分散
    if self.damage.abs > 0
      amp = [self.damage.abs * 15 / 100, 1].max
      self.damage += rand(amp+1) + rand(amp+1) - amp
    end
    # HP 的伤害减法运算
    self.hp -= self.damage
  end  
    # 过程结束
    return true
  end
作者: 步兵中尉    时间: 2011-12-19 10:22
搜索黑暗圣剑传说的教学程序,跟里面那个剑灵状态一样的设置法
作者: 凌空飘雪    时间: 2011-12-20 18:06
本帖最后由 凌空飘雪 于 2011-12-20 18:07 编辑

先告诉你最基础的设定方法(该方法是最基础的写法,就是麻烦点了,适用于回复的效果数值不是太多时)
在Scene_Battle 4 中搜索 “# 连续伤害”
在 # 连续伤害
    if @active_battler.hp > 0 and @active_battler.slip_damage?
      @active_battler.slip_damage_effect
      @active_battler.damage_pop = true
    end
上面或下面加入     
              if @active_battler.is_a?(Game_Actor)  #如果行动者是角色(怪物可是没有装备的)
               if @active_battler.armor1_id != 0 #(不是没有装备该种类装备的场合=>要小心有人玩裸奔啊)
         if  $data_armors[@active_battler.armor1_id].guard_element_set.include?(1)
               #装备的防御属性包含属性ID1(我先设属性1的说明为 回复10%的HP)
                    @active_battler.damage = - @active_battler.maxhp*10/100 #角色的伤害为负的10%最大生命值
            @active_battler.hp -= @active_battler.damage  #角色的HP 减去 角色的伤害(伤害是负数,就成回复了)
                                   @active_battler.damage_pop = true   #这个可以让角色HP为0时图像消失,也就是挂了
      end
      end
    #要注意,武器和防具的属性设置后缀是不一样的防具是 .guard_element_set.include?(1) 武器是.element_set.include?(i)
                 if @active_battler.weapon_id!= 0  #(不是没有装备武器的场合)
              if $data_weapons[@active_battler.weapon_id].element_set.include?(2)
   #上面已经给了生命回复的,武器和防具是一样的,在这我再设下回复魔法的(我设属性2的说明为 回复10%的SP)
         @active_battler.sp += @active_battler.maxsp* 10/100
    #什么?魔法的太简单了?没有显示魔法伤害的专属脚本,要显示伤害只能用damage,但那样又会覆盖生命的回复数值的
      #至于没有 “@active_battler.damage_pop = true” ,谁没魔法时会挂掉啊?反正我是不知道
                 end
                 end
            end  #这个结束是属于 行动者是角色的判断
#附录 防具比武器麻烦,总共有4种防具 armor1 = 盾,armor2 =头,armor3=身体,armor4=装饰品
#(对于不同的防具,你只要参照防具那段的设定,把armor1 后面的数字改下就行了)
作者: 銀藍色的零    时间: 2011-12-20 19:08
羞射了 大的辦法行不通

凌空飘雪 大的也不行
不過可能是因為我看不懂
所以用不出來~囧|||

作者: 凌空飘雪    时间: 2011-12-20 19:26
本帖最后由 凌空飘雪 于 2011-12-20 19:53 编辑

不会是脚本被覆盖了吧
完整版(直接粘在上面说的 # 连续伤害 从if 到 end的后面)(已经过测试,还出错的话,不是贴错位置,就是脚本冲突了)默认是以【1..3】分别回复HP10%20%30%【4..6】SP10%20%30%
if @active_battler.is_a?(Game_Actor)
      @魔法回复 = 0
      @生命回复 = 0
      for i in 1..6   #回复效果对应的属性ID   
      if i < 4      #回复效果为HP的
       case i
        when 1
          @生命的百分比 = 10
        when 2
          @生命的百分比 = 20
        when 3
          @生命的百分比 = 30
        end
        if @active_battler.armor1_id != 0
       if  $data_armors[@active_battler.armor1_id].guard_element_set.include?(i)
        @生命回复 += @active_battler.maxhp* @生命的百分比 /100
      end
      end
     if @active_battler.armor2_id != 0
      if $data_armors[@active_battler.armor2_id].guard_element_set.include?(i)
        @生命回复 += @active_battler.maxhp* @生命的百分比 /100
      end
    end
     if @active_battler.armor3_id != 0
      if $data_armors[@active_battler.armor3_id].guard_element_set.include?(i)
        @生命回复 += @active_battler.maxhp* @生命的百分比 /100
      end
    end
     if @active_battler.armor4_id != 0
      if $data_armors[@active_battler.armor4_id].guard_element_set.include?(i)
       @生命回复 += @active_battler.maxhp* @生命的百分比 /100
     end
   end
      if @active_battler.weapon_id != 0
      if $data_weapons[@active_battler.weapon_id].element_set.include?(i)
        @生命回复 += @active_battler.maxhp* @生命的百分比 /100
      end
      end
      elsif  i <= 6  #回复效果为SP时
        case i
        when 4
          @魔法的百分比 = 10
        when 5
          @魔法的百分比 = 20
        when 6
          @魔法的百分比 = 30
        end
        
         if @active_battler.armor1_id != 0
       if $data_armors[@active_battler.armor1_id].guard_element_set.include?(i)
        @魔法回复 += @active_battler.maxsp* @魔法的百分比 /100
      end
    end
     if @active_battler.armor2_id != 0
      if $data_armors[@active_battler.armor2_id].guard_element_set.include?(i)
        @魔法回复 += @active_battler.maxsp* @魔法的百分比 /100
      end
    end
     if @active_battler.armor3_id != 0
      if $data_armors[@active_battler.armor3_id].guard_element_set.include?(i)
        @魔法回复 += @active_battler.maxsp* @魔法的百分比 /100
      end
    end
     if @active_battler.armor4_id != 0
      if $data_armors[@active_battler.armor4_id].guard_element_set.include?(i)
       @魔法回复 += @active_battler.maxsp* @魔法的百分比 /100
     end
   end
      if @active_battler.weapon_id != 0
      if $data_weapons[@active_battler.weapon_id].element_set.include?(i)
        @魔法回复 += @active_battler.maxsp* @魔法的百分比 /100
      end
      end
    end
    end
        @active_battler.sp +=  @魔法回复
        @active_battler.damage = -@生命回复
        @active_battler.hp -= @active_battler.damage
        @active_battler.damage_pop = true
    end
作者: 小白玩家    时间: 2011-12-20 19:34
范例,你自己研究下,按照6楼制作的,证实可行,增加17 18 19号状态 附加到 铜盾 铁盾 钢盾上
装备上铜盾 铁盾 钢盾 分别获得每回合10% 20% 30% 回血状态

测试回复.rar

186.86 KB, 下载次数: 29


作者: 銀藍色的零    时间: 2011-12-20 21:28
是成功了!
不過我要改屬性的編號位置會出錯耶!
我想改在51~80間
要怎調?
作者: 小白玩家    时间: 2011-12-20 21:55
本帖最后由 小白玩家 于 2011-12-20 21:58 编辑
銀藍色的零 发表于 2011-12-20 21:28
是成功了!
不過我要改屬性的編號位置會出錯耶!
我想改在51~80間


状态还是防具编号?
  1. #--------------------------------------------------------------------------
  2.    # ● 应用连续伤害效果
  3.    #--------------------------------------------------------------------------
  4.    def slip_damage_effect
  5.        if self.states.include?(17) #状态编号
  6.         self.damage = - self.maxhp / 10
  7.           self.hp -= self.damage
  8.         elsif self.states.include?(18)#状态编号
  9.           self.damage = - self.maxsp / 5
  10.           self.sp -= self.damage
  11.        elsif self.states.include?(19) #状态编号
  12.          self.damage = - self.maxhp / 3
  13.           self.hp -= self.damage  
  14.       else#下面就是默认的毒
  15.      # 设置伤害
  16.      self.damage = self.maxhp / 10
  17.      # 分散
  18.      if self.damage.abs > 0
  19.        amp = [self.damage.abs * 15 / 100, 1].max
  20.        self.damage += rand(amp+1) + rand(amp+1) - amp
  21.      end
  22.      # HP 的伤害减法运算
  23.      self.hp -= self.damage
  24.    end  
  25.      # 过程结束
  26.      return true
  27.    end
复制代码

作者: 銀藍色的零    时间: 2011-12-20 22:13
本帖最后由 銀藍色的零 于 2011-12-20 22:32 编辑

恩!我使用六樓的也成功了
戰鬥時回自動回複
不過在地圖上會有像中毒一樣閃紅光出現~囧|||
也會損血耶?


10樓的部分是
還有分唷?
他是使用屬性的勾選
照他內定的1~6使用是正常的
我改成51~80
就出錯了

作者: 羞射了    时间: 2011-12-21 00:26
本帖最后由 羞射了 于 2011-12-21 00:32 编辑
羞射了 发表于 2011-12-19 04:11
用状态法实现,首先设置几个你需要的状态,设置好名字,都打钩连续伤害,不能抵抗,就类似默认的那个毒,将 ...


不知道你的游戏是否会用到地图上中毒减血的判定,如果用不到,
可以直接搜索$game_party.check_map_slip_damage
把它#注释掉就行;

如果需要用到,则还需要详细修改搜索

  #--------------------------------------------------------------------------
  # ● 检查连续伤害 (地图用)
  #--------------------------------------------------------------------------
  def check_map_slip_damage
    for actor in @actors
         dot = [X]
         actor_slip_damage = false
         for i in 0..dot.size
          if actor.states.include?(dot)
             actor_slip_damage = true
           end
         end  
      if actor.hp > 0 and actor_slip_damage == true


        actor.hp -= [actor.maxhp / 100, 1].max
        if actor.hp == 0
          $game_system.se_play($data_system.actor_collapse_se)
        end
        $game_screen.start_flash(Color.new(255,0,0,128), 4)
        $game_temp.gameover = $game_party.all_dead?
      end
      
    end
  end

然后dot =[]里面填写毒类技能的编号,其他则不算做毒,地图上就不掉血了。
作者: 凌空飘雪    时间: 2011-12-21 11:46
本帖最后由 凌空飘雪 于 2011-12-21 11:49 编辑

对照下之前的,你以后应该就能自己改了(多关注下¥¥标记的部分)
【51..70】分别回复HP10%20%30%……【71..90】SP10%20%30%……
if @active_battler.is_a?(Game_Actor)
      @魔法回复 = 0
      @生命回复 = 0
      for i in 51..90  #回复效果对应的属性ID (¥¥这是总共的属性ID集合)  
      if i < 71      #回复效果为HP的(¥¥这是用来分割成2部分的属性ID)
       case i  #(¥¥这是开始处理具体的属性ID)
        when 51
          @生命的百分比 = 10
        when 52
          @生命的百分比 = 20
        when 53
          @生命的百分比 = 30
        when 54
           @生命的百分比 = 40  #(¥¥ 就这样一直写下去,我就不一一写了)
     else             #(¥¥ 新添的,看你ID弄那么多,如果有些ID你还不想填具体数值,那程序会按下面的处理)
          @生命的百分比 = 0    #(¥¥ ID没有对应的具体数值时,回复率为0)
      end  #¥¥这下面的倒是不用管,原本就已经是优化过的写法,直接看魔法的吧
        if @active_battler.armor1_id != 0
       if  $data_armors[@active_battler.armor1_id].guard_element_set.include?(i)
        @生命回复 += @active_battler.maxhp* @生命的百分比 /100
      end
      end
     if @active_battler.armor2_id != 0
      if $data_armors[@active_battler.armor2_id].guard_element_set.include?(i)
        @生命回复 += @active_battler.maxhp* @生命的百分比 /100
      end
    end
     if @active_battler.armor3_id != 0
      if $data_armors[@active_battler.armor3_id].guard_element_set.include?(i)
        @生命回复 += @active_battler.maxhp* @生命的百分比 /100
      end
    end
     if @active_battler.armor4_id != 0
      if $data_armors[@active_battler.armor4_id].guard_element_set.include?(i)
       @生命回复 += @active_battler.maxhp* @生命的百分比 /100
     end
   end
      if @active_battler.weapon_id != 0
      if $data_weapons[@active_battler.weapon_id].element_set.include?(i)
        @生命回复 += @active_battler.maxhp* @生命的百分比 /100
      end
      end
      elsif  i <= 90  #回复效果为SP时 #(¥¥就是回复效果的属性ID到哪为止
        case i
        when 71
          @魔法的百分比 = 10
        when 72
          @魔法的百分比 = 20
        when 73
          @魔法的百分比 = 30
        when 74
           @魔法的百分比 = 40  #(¥¥ 也是这样一直写下去,我也不一一写了,反正写了你也会改掉)
          else             #(¥¥新添的,看你ID弄那么多,如果有些ID你还不想填具体数值,那程序会按下面的处理)
      @魔法的百分比 = 0    #(¥¥ID没有对应的具体数值时,回复率为0)OK,完事了
     end
        
         if @active_battler.armor1_id != 0
       if $data_armors[@active_battler.armor1_id].guard_element_set.include?(i)
        @魔法回复 += @active_battler.maxsp* @魔法的百分比 /100
      end
    end
     if @active_battler.armor2_id != 0
      if $data_armors[@active_battler.armor2_id].guard_element_set.include?(i)
        @魔法回复 += @active_battler.maxsp* @魔法的百分比 /100
      end
    end
     if @active_battler.armor3_id != 0
      if $data_armors[@active_battler.armor3_id].guard_element_set.include?(i)
        @魔法回复 += @active_battler.maxsp* @魔法的百分比 /100
      end
    end
     if @active_battler.armor4_id != 0
      if $data_armors[@active_battler.armor4_id].guard_element_set.include?(i)
       @魔法回复 += @active_battler.maxsp* @魔法的百分比 /100
     end
   end
      if @active_battler.weapon_id != 0
      if $data_weapons[@active_battler.weapon_id].element_set.include?(i)
        @魔法回复 += @active_battler.maxsp* @魔法的百分比 /100
      end
      end
    end
    end
             @active_battler.sp +=  @魔法回复
        @active_battler.damage = -@生命回复
        @active_battler.hp -= @active_battler.damage
        @active_battler.damage_pop = true
    end




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