Project1

标题: 想做个残血爆种的能力【已解决】 [打印本页]

作者: 间桐樱    时间: 5 天前
标题: 想做个残血爆种的能力【已解决】
本帖最后由 间桐樱 于 2024-10-14 20:33 编辑

主角的hp在一定量以下时全属性增幅,然后出现问题了
比如hp在10%以下全属性强化,一旦治疗回血超过10%,残血爆种的效果就消失了,想让它触发后持续到战斗结束,不知道能不能成功
for param in 2..7
  @battle_add_status[param] = 0 unless @battle_add_status[param]
  if read_1[0] > (self.hp * 100 / self.mhp)
  @battle_add_status[param] += read_1[1]
  end
作者: 魔法丶小肉包    时间: 5 天前
不用搞这么麻烦,做个状态,战斗结束时解除,然后你脚本那边只判断10%以下添加该状态就可以了
作者: 间桐樱    时间: 5 天前
魔法丶小肉包 发表于 2024-10-11 20:52
不用搞这么麻烦,做个状态,战斗结束时解除,然后你脚本那边只判断10%以下添加该状态就可以了 ...

唔......我是想做成被动技能的......
作者: 间桐樱    时间: 4 天前
间桐樱 发表于 2024-10-11 21:17
唔......我是想做成被动技能的......

大佬,我还是更想加个判定,触发后hp不等于0或战斗不结束,爆种就不结束
作者: soulsaga    时间: 4 天前
间桐樱 发表于 2024-10-12 10:03
大佬,我还是更想加个判定,触发后hp不等于0或战斗不结束,爆种就不结束 ...


你用状态做这个效果不影响做成被动技能还简单许多
作者: 间桐樱    时间: 前天 16:41
  def set_b_add_status #爆种
    return unless $game_party.in_battle
    read_1 = battler_add_ability(10)
    @battle_add_status = [] unless @battle_add_status
    for param in 2..7
      @battle_add_status[param] = 0 unless @battle_add_status[param]
      if read_1[0] > (self.hp * 100 / self.mhp)
        @battle_add_status[param] += read_1[1]
      end
    end

  def battler_add_ability(id) # 备注
    battler_add = Array.new
    cheak_note = ""
    cheak_note = @note if @note
    when 10
      read_arr = Array.new
      while cheak_note do
        cheak_note.match(/<SEED\s?(\d+)\s?,\s?(\d+)%\s?>/)
        if $1 && $2
          read_arr.push([$1.to_i, $2.to_i])
        end
        cheak_note = $'
      end
      battler_add = read_arr

  def battler_add_ability(add_ability_id) # 备注判定
    all_list = Array.new
    if actor?
      actor = call_job_cache(1, add_ability_id)
      equip = call_equip_cache(1, add_ability_id)
      passive = passive_skills.collect{|obj| obj.battler_add_ability(add_ability_id)}
      sta = states.collect{|obj| obj.battler_add_ability(add_ability_id)}
      all_list += actor + equip + passive + sta
    end
    if enemy?
      enemy_e = [$data_enemies[@enemy_id].battler_add_ability(add_ability_id)]
      sta_e = states.collect{|obj| obj.battler_add_ability(add_ability_id)}
      all_list += enemy_e + sta_e
    end
    all_list.flatten!
    value = 0
    case add_ability_id
    when 10
      value = [0,0]
      for list in 0..all_list.size - 1
        if list % 2 == 0
          if all_list[list] && all_list[list + 1]
            if all_list[list + 1] > value[1]
              value[0] = all_list[list]
              value[1] = all_list[list + 1]
            end
          end
        end
      end

  def param_base(param_id) #基础能力值
    base_class = $data_actors[@actor_id].base_param_index
    if base_class == 0
      class_base = self.class.params[param_id, @level]
    else
      class_base = $data_classes[base_class].params[param_id, @level]
    end
    sub_class_base = 0 #副职业
    if KURE::BaseScript::USE_JOBLv == 1
      sub_class_base = self.sub_class.params[param_id, @sub_class_level] if @sub_class_id != 0
      sub_class_base = sub_class_base * KURE::JobLvSystem::SUB_CLASS_STATUS_RATE
      class_base = class_base * KURE::JobLvSystem::MAIN_CLASS_STATUS_RATE if @sub_class_id != 0
    end
    param_plus_base = 0 #加算能力
    if @param_plus && @param_plus[param_id]
      param_plus_base = @param_plus[param_id]
    end
    passive_base = 0 # 被动
    for i in 0..passive_skills.size - 1
      passive_base += passive_skills[i].params[param_id] if passive_skills[i].kind_of?(RPG::EquipItem)
    end
    status_divide_base = 0 # 状态
    if @status_divide && @status_divide[param_id]
      status_divide_base = @status_divide[param_id]
    end
    battle_add = 0 # 爆种能力
    if @battle_add_status && @battle_add_status[param_id]
      battle_add = @battle_add_status[param_id]
    end
    sum = class_base + sub_class_base + param_plus_base + passive_base + status_divide_base # 合计
    sum *= 1 + battle_add
    return sum.to_i
  end
作者: 间桐樱    时间: 前天 16:45
soulsaga 发表于 2024-10-12 17:09
你用状态做这个效果不影响做成被动技能还简单许多

肉包大佬,脚本我发楼下了,这也是我从别处‘借鉴’过来的脚本,能让它运行已经是我搞过好多次的了,再多的因素判定实在是超过我的能力范畴了
作者: 魔法丶小肉包    时间: 前天 18:52
本帖最后由 魔法丶小肉包 于 2024-10-14 18:54 编辑
间桐樱 发表于 2024-10-14 16:45
肉包大佬,脚本我发楼下了,这也是我从别处‘借鉴’过来的脚本,能让它运行已经是我搞过好多次的了,再多 ...


头晕...你还是发不全脚本,随便举个例子吧,这些方法在哪个类?set_b_add_status在哪里调用的?为什么有两个battler_add_ability方法?它们在同一个类中吗?还是这些方法分别在多个类里你只是复制了把它们凑到一块的呢?另外有一大堆的语法错误已经看不下去了...
算了,先全局搜索一下下面三条
@battle_add_status = nil
@battle_add_status = []
@battle_add_status[param] = 0
看看有没有在其他地方写过
然后再在set_b_add_status方法里面return unless $game_party.in_battle下面那行写个p 1
并在@battle_add_status[param] = 0 unless @battle_add_status[param]下面那行写个p @battle_add_status[param]
打开控制台,测试一下游戏然后看输出的结果,一般来说有以下几种可能性
1.如果控制台里一直在输出1,并且一直在输出0
那你就写
class Game_Actor
  def die
    super
    @set_b = false
  end
  def on_battle_end
    super
    @set_b = false
  end
end
然后在set_b_add_status方法里的@battle_add_status[param] += read_1[1]下面写@set_b = true,并在该方法的第一行写return if @set_b

2.如果控制台里没有一直输出1,但是另一个结果输出的全是0,那么还是按照上面的操作,如果另一个结果输出的有不是0的,那你就得全局搜索@battle_add_status并把所有结果都发出来了
作者: 间桐樱    时间: 前天 18:58
本帖最后由 间桐樱 于 2024-10-14 18:59 编辑
魔法丶小肉包 发表于 2024-10-14 18:52
头晕...你还是发不全脚本,随便举个例子吧,这些方法在哪个类?set_b_add_status在哪里调用的?为什么有 ...


大佬,我在能力值上限那里也做了类似改动,是不是改动这里更简单些?如果行的话改这里,之后我可以借鉴一下自己研究
  def param_max(param_id)
    return 99999 if param_id == 0
    return 99999 if param_id == 1
    if self.hp >= self.mhp / 2
      return 999
    else
      return 9999
    end
作者: 间桐樱    时间: 昨天 16:11
魔法丶小肉包 发表于 2024-10-14 18:52
头晕...你还是发不全脚本,随便举个例子吧,这些方法在哪个类?set_b_add_status在哪里调用的?为什么有 ...

大佬,能力值上限也能做持续到战斗不能或战斗结束的【限制解除】吗?我昨天自己试了一下还是没成功




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