Project1

标题: 做了个状态耐性无视,求问怎么能让状态无效也无视 [打印本页]

作者: 间桐樱    时间: 2024-5-8 19:44
标题: 做了个状态耐性无视,求问怎么能让状态无效也无视
状态耐性有公式可改,状态无效直接判定了,不知道怎么能做个耐性和无效同时无视的技能
    if user.ignore_state_rate == false && item.ignore_state_rate == false
      chance = effect.value1
      chance *= state_rate(effect.data_id)
      chance *= luk_effect_rate(user)
    else
      chance = 1.0
    end

  def state_resist_set
    features_set(FEATURE_STATE_RESIST)
  end
  def state_resist?(state_id, user)
    state_resist_set.include?(state_id)
  end
  def state_addable?(state_id)
    alive? && $data_states[state_id] && !state_resist?(state_id) &&
    !state_removed?(state_id) && !state_restrict?(state_id)
  end
作者: 魔法丶小肉包    时间: 2024-5-12 21:21
在数据库技能备注里写<无视状态 n,n.....,n>
那么当使用这个技能的时候就会无视所有n号状态的抗性和免疫,不会影响其他技能对这些状态的判定
举例
<无视状态 2>
<无视状态 2,3>

RUBY 代码复制
  1. class RPG::Skill
  2.   def stat_ignore
  3.     a = []
  4.     if note =~ /<无视状态\s+(.+)>/
  5.       $1.split(",").each do |i|
  6.         a << i.to_i
  7.       end
  8.     end
  9.     a
  10.   end
  11. end
  12. class Game_Battler
  13.   alias mf240512ini initialize
  14.   def initialize
  15.     mf240512ini
  16.     @stat_ignore = []
  17.   end
  18.   alias mf240512ieas item_effect_add_state
  19.   def item_effect_add_state(user, item, effect)
  20.     @stat_ignore = item.stat_ignore
  21.     mf240512ieas(user, item, effect)
  22.   end
  23.   alias mf240512strate state_rate
  24.   def state_rate(state_id)
  25.     return 1.0 if @stat_ignore.include?(state_id)
  26.     mf240512strate(state_id)
  27.   end
  28.   alias mf240512stres? state_resist?
  29.   def state_resist?(state_id)
  30.     return false if @stat_ignore.include?(state_id)
  31.     mf240512stres?(state_id)
  32.   end
  33. end

作者: 间桐樱    时间: 2024-5-13 16:56
本帖最后由 间桐樱 于 2024-5-13 19:36 编辑
魔法丶小肉包 发表于 2024-5-12 21:21
在数据库技能备注里写
那么当使用这个技能的时候就会无视所有n号状态的抗性和免疫,不会影响其他技能对这些 ...


大佬,按你的公式,def item_effect_add_state(user, item, effect)里原先的代码还保留吗?不保留怎么区分普通攻击和状态攻击
ps:其实【状态抗性无视】已经成功了,启动游戏后能正常生效,就是【状态免疫无视】那里不知道怎么挂钩
我在state_resist_set.include?(state_id) 后面插入if user.ignore_state_rate == false && item.ignore_state_rate == false报错,只要能把这个挂上其实就没问题了
作者: KB.Driver    时间: 2024-5-13 20:54
伤害公式写
b.add_new_state(状态id);原公式
作者: 间桐樱    时间: 2024-5-15 10:35
间桐樱 发表于 2024-5-13 16:56
大佬,按你的公式,def item_effect_add_state(user, item, effect)里原先的代码还保留吗?不保留怎么区 ...

因为alias的用法不明白,再碰到类似的不能‘魔改’使用
作者: 间桐樱    时间: 2024-5-15 10:39
间桐樱 发表于 2024-5-13 16:56
大佬,按你的公式,def item_effect_add_state(user, item, effect)里原先的代码还保留吗?不保留怎么区 ...

至于放备注,是因为我的‘野心’有点儿大,弄了好多动漫游戏里的东西,比如矢量操作和幻想杀手、比如赛亚人变身,备注可以把这些东西放人物里、放敌人里、放装备里、放状态里,但伤害公式只能放技能里




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