Project1

标题: 求2种装备做法 [打印本页]

作者: raisewing    时间: 2015-2-3 22:25
标题: 求2种装备做法
本帖最后由 raisewing 于 2015-2-3 22:26 编辑

1.我想制作类似北欧女神2中有一些装备的效果是当装备者处于某状态下时,按装备者能力值百分比提高全能力值,状态解除时就恢复,这个怎么做?
2.当队友处于无法战斗状态时,装备者提高全能力值,队友复活恢复,根据死亡队友数量分级别按装备者能力百分比提高全能力值。
请大神们赐教!~~

作者: 三途亚梦    时间: 2015-2-3 23:51
如果你能把图书馆那个被动技能的帖子里的做法看懂就都好解决了
作者: raisewing    时间: 2015-2-4 08:52
三途亚梦 发表于 2015-2-3 23:51
如果你能把图书馆那个被动技能的帖子里的做法看懂就都好解决了

图书馆被动技能的帖子昨天我看了一晚上,但是失败了!~
也许是我太笨了!~~
我先是在Game_BattlerBase里添加了
@hp == 0 ? ? add_state(33) : remove_state(33)  当生命值等于0时角色处于33状态
设置33号状态为尸体
设置34号状态为孤军奋战LV.1 主角全能力值200%
设置35号状态为孤军奋战LV.2 主角全能力值300%
加入公共事件当人物B处于33号状态时,主角附加34号状态
加入公共事件当人物C处于33号状态时,主角附加34号状态
加入公共事件当人物BC处于33号状态时,主角附加35号状态
我还应该怎么改呢?!~

作者: 三途亚梦    时间: 2015-2-4 14:44
本帖最后由 三途亚梦 于 2015-2-4 16:38 编辑
raisewing 发表于 2015-2-4 08:52
图书馆被动技能的帖子昨天我看了一晚上,但是失败了!~
也许是我太笨了!~~
我先是在Game_BattlerBase里 ...


嗯,果然你没理解那个帖子的原理呀。

公共事件不是必要的,帖子里的公共事件只是为了给状态追加一个开关,
而且那个魔法盾只要打开无论敌我都会获得状态。

我一点点说给你听吧。

#=====================================
Game_BattlerBase中refresh方法的作用是:
在角色数据变动的时候也会立即调用,
主要是用来检测角色的状态,确定hp和mp的数值是否小于0或大于其max值,并在hp为0时赋予战斗不能状态。

然后,我具体告诉你第一种的做法,其它的都同理。
其中 self 的意思就是被检测的主体,它包括玩家人物和敌人。
  1.     if self.state?(2) && self.actor?
  2.       #↑这句的意思是当self在状态2且是玩家人物时返回true进入接下来的判断,否者跳过。
  3.       # 因为敌人是没有装备的,所以不添加是否是玩家的判断会报错。
  4.       self.armors.include?($data_armors[1]) ? add_state(3) : remove_state(3)
  5.       # 上面这句的格式叫“三目运算符”,它的作用是当?号前的内容是true时返回 : 前的内容,如果不是则返回 : 后的内容;
  6.       # self.armors.include?($data_armors[1]) 的意思就是当主体的装备有防具1(也就是布衣时),
  7.       # 自动附加状态3,否则移除状态3。
  8.     end
复制代码
第二种需要写一个特殊一些的句子,估计你也不会……
这次我就写给你吧。

首先你需要TD触的这个脚本
然后写入下面这段
  1.     if self.actor? && $game_actors.include?(self) #这里是判断角色是否是玩家,且所有人物是否已经初始化
  2.       dead = 0 #这里是设置了一个临时变量
  3.       $game_party.battle_members.each {|actor| dead += 1 if actor.dead?} #检测参战人物中死亡者的个数,如果有则让dead变量+1
  4.       case dead #根据dead变量的值,判断主体是否带有特定装备,并附加对应的状态
  5.       when 1 #如果死亡者为1个,附加状态3
  6.         self.armors.include?($data_armors[1]) ? add_state(3) : remove_state(3)
  7.       when 2 #如果死亡者为2个,附加状态4
  8.         self.armors.include?($data_armors[1]) ? add_state(4) : remove_state(4)
  9.       when 3 #如果死亡者为3个,附加状态5
  10.         self.armors.include?($data_armors[1]) ? add_state(5) : remove_state(6)
  11.       end
  12.     end
复制代码

作者: raisewing    时间: 2015-2-4 20:04
三途亚梦 发表于 2015-2-4 14:44
嗯,果然你没理解那个帖子的原理呀。

公共事件不是必要的,帖子里的公共事件只是为了给状态追加一个开关 ...

膜拜大触!~~~第一种装备做法非常完美的说!~~
可是第二种我设置好之后没有效果,是因为人物没有初始化的问题么?
其实我没有搞明白这里的人物初始化是怎么理解的!


作者: raisewing    时间: 2015-2-4 22:11
三途亚梦 发表于 2015-2-4 14:44
嗯,果然你没理解那个帖子的原理呀。

公共事件不是必要的,帖子里的公共事件只是为了给状态追加一个开关 ...

像这样,只有前者有效果!~~
#--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    state_resist_set.each {|state_id| erase_state(state_id) }
    @hp = [[@hp, mhp].min, 0].max
    @mp = [[@mp, mmp].min, 0].max
    @hp == 0 ? add_state(death_state_id) : remove_state(death_state_id)
    if self.actor? && $game_actors.include?(self) #这里是判断角色是否是玩家,且所有人物是否已经初始化
      dead = 0 #这里是设置了一个临时变量
      $game_party.battle_members.each {|actor| dead += 1 if actor.dead?} #检测参战人物中死亡者的个数,如果有则让dead变量+1
      case dead #根据dead变量的值,判断主体是否带有特定装备,并附加对应的状态
      when 1 #如果死亡者为1个,附加状态3
        self.armors.include?($data_armors[52]) ? add_state(36) : remove_state(36)
      when 2 #如果死亡者为2个,附加状态4
        self.armors.include?($data_armors[52]) ? add_state(37) : remove_state(37)
      when 3 #如果死亡者为3个,附加状态5
        self.armors.include?($data_armors[52]) ? add_state(38) : remove_state(38)
          if self.state?(2) && self.actor?
      #↑这句的意思是当self在状态2且是玩家人物时返回true进入接下来的判断,否者跳过。
      # 因为敌人是没有装备的,所以不添加是否是玩家的判断会报错。
  self.armors.include?($data_armors[58]) ? add_state(30) : remove_state(30)
      # 上面这句的格式叫“三目运算符”,它的作用是当?号前的内容是true时返回 : 前的内容,如果不是则返回 : 后的内容;
      # self.armors.include?($data_armors[1]) 的意思就是当主体的装备有防具1(也就是布衣时),
      # 自动附加状态3,否则移除状态3。
      end
    end
  end
  end

作者: 三途亚梦    时间: 2015-2-4 22:16
raisewing 发表于 2015-2-4 22:11
像这样,只有前者有效果!~~
#-------------------------------------------------------------------- ...
  1.     if self.state?(2) && self.actor?
  2.       #↑这句的意思是当self在状态2且是玩家人物时返回true进入接下来的判断,否者跳过。
  3.       # 因为敌人是没有装备的,所以不添加是否是玩家的判断会报错。
  4.       self.armors.include?($data_armors[1]) ? add_state(3) : remove_state(3)
  5.       # 上面这句的格式叫“三目运算符”,它的作用是当?号前的内容是true时返回 : 前的内容,如果不是则返回 : 后的内容;
  6.       # self.armors.include?($data_armors[1]) 的意思就是当主体的装备有防具1(也就是布衣时),
  7.       # 自动附加状态3,否则移除状态3。
  8.     end
  9.     if self.actor? && $game_actors.include?(self) #这里是判断角色是否是玩家,且所有人物是否已经初始化
  10.       dead = 0 #这里是设置了一个临时变量
  11.       $game_party.battle_members.each {|actor| dead += 1 if actor.dead?} #检测参战人物中死亡者的个数,如果有则让dead变量+1
  12.       case dead #根据dead变量的值,判断主体是否带有特定装备,并附加对应的状态
  13.       when 1 #如果死亡者为1个,附加状态3
  14.         self.armors.include?($data_armors[1]) ? add_state(3) : remove_state(3)
  15.       when 2 #如果死亡者为2个,附加状态4
  16.         self.armors.include?($data_armors[1]) ? add_state(4) : remove_state(4)
  17.       when 3 #如果死亡者为3个,附加状态5
  18.         self.armors.include?($data_armors[1]) ? add_state(5) : remove_state(6)
  19.       end
  20.     end
复制代码
这个才是一起用的正确姿势。
作者: raisewing    时间: 2015-2-7 18:43
三途亚梦 发表于 2015-2-4 22:16
这个才是一起用的正确姿势。

版主大人,关于这个帖子本来我也以为已经完美解决了!~~
可是在我之后测试整个工程的过程中问题暴露出来了!~
就是在战斗中附加的这种因异常状态而提高全能力的效果,在战斗结束后恢复则,提高的能力依然在。。。。
这怎么破?{:2_272:}





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