设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 220|回复: 26
打印 上一主题 下一主题

[有事请教] 想做个残血爆种的能力【已解决】

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1320
在线时间
80 小时
注册时间
2017-9-5
帖子
110
跳转到指定楼层
1
发表于 5 天前 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 间桐樱 于 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

Lv4.逐梦者

梦石
0
星屑
6073
在线时间
1464 小时
注册时间
2015-7-25
帖子
644

开拓者

2
发表于 5 天前 | 只看该作者
不用搞这么麻烦,做个状态,战斗结束时解除,然后你脚本那边只判断10%以下添加该状态就可以了
目前的坑 【不可思议的迷宫】幽灵契约外传:歌莉娅
持续更新中~ 当前进度 v0.275
大版本更新时才会更新网盘文件,预计下次大版本更新:v0.30
完成度:
主线 15% 支线 0% 数据库 6% 系统 86% 美术 6%
新坑~仿psp《梦幻骑士》全套系统准备开坑!
完成度:0%
两边同时填坑~
( 这里是笨肉包~专修魔法!目标是大魔法师!
( 坑太大啦,一个人填不完啦hhh 一定会填完的嗯...
( 每天都和bug们比试魔力~吾之魔法将扫平一切!
( 弱点是美术,魔法修行之余再补补课吧~
( 哼哼哼~这便是魔法的力量!
大家都离开啦,笨肉包也不知道还能坚持多久呀...
这是属于笨肉包一个人的旅行(再见了...蚊子湯,七重酱,笨肉包永远想你们!TwT
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1320
在线时间
80 小时
注册时间
2017-9-5
帖子
110
3
 楼主| 发表于 5 天前 | 只看该作者
魔法丶小肉包 发表于 2024-10-11 20:52
不用搞这么麻烦,做个状态,战斗结束时解除,然后你脚本那边只判断10%以下添加该状态就可以了 ...

唔......我是想做成被动技能的......

点评

这样做就是被动技能呀,在脚本中只需要判断添加该状态的时机,同时再判断角色ID就可以了  发表于 5 天前
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1320
在线时间
80 小时
注册时间
2017-9-5
帖子
110
4
 楼主| 发表于 4 天前 | 只看该作者
间桐樱 发表于 2024-10-11 21:17
唔......我是想做成被动技能的......

大佬,我还是更想加个判定,触发后hp不等于0或战斗不结束,爆种就不结束
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36246
在线时间
10751 小时
注册时间
2009-3-15
帖子
4812
5
发表于 4 天前 | 只看该作者
间桐樱 发表于 2024-10-12 10:03
大佬,我还是更想加个判定,触发后hp不等于0或战斗不结束,爆种就不结束 ...


你用状态做这个效果不影响做成被动技能还简单许多

点评

你问的问题是如何不让效果消失,然后给的信息是加能力的实现过程(而且这部分也没给全),这两者有什么直接关联吗  发表于 前天 15:35
其实很多问题的重点并不是要看脚本实现的过程,而是脚本的起始和末尾,前面和后续,以及使用的位置等因素  发表于 前天 15:29
那最起码把脚本发发全可以吗,你发的这段脚本完全不在重点上,没办法给你加判断  发表于 前天 15:22
你想不用状态做这个?????............跪了  发表于 3 天前
我也知道,状态只要个hp判定就够了,但还是更想要脚本版  发表于 3 天前
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1320
在线时间
80 小时
注册时间
2017-9-5
帖子
110
6
 楼主| 发表于 前天 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
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1320
在线时间
80 小时
注册时间
2017-9-5
帖子
110
7
 楼主| 发表于 前天 16:45 | 只看该作者
soulsaga 发表于 2024-10-12 17:09
你用状态做这个效果不影响做成被动技能还简单许多

肉包大佬,脚本我发楼下了,这也是我从别处‘借鉴’过来的脚本,能让它运行已经是我搞过好多次的了,再多的因素判定实在是超过我的能力范畴了
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6073
在线时间
1464 小时
注册时间
2015-7-25
帖子
644

开拓者

8
发表于 前天 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并把所有结果都发出来了
目前的坑 【不可思议的迷宫】幽灵契约外传:歌莉娅
持续更新中~ 当前进度 v0.275
大版本更新时才会更新网盘文件,预计下次大版本更新:v0.30
完成度:
主线 15% 支线 0% 数据库 6% 系统 86% 美术 6%
新坑~仿psp《梦幻骑士》全套系统准备开坑!
完成度:0%
两边同时填坑~
( 这里是笨肉包~专修魔法!目标是大魔法师!
( 坑太大啦,一个人填不完啦hhh 一定会填完的嗯...
( 每天都和bug们比试魔力~吾之魔法将扫平一切!
( 弱点是美术,魔法修行之余再补补课吧~
( 哼哼哼~这便是魔法的力量!
大家都离开啦,笨肉包也不知道还能坚持多久呀...
这是属于笨肉包一个人的旅行(再见了...蚊子湯,七重酱,笨肉包永远想你们!TwT
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1320
在线时间
80 小时
注册时间
2017-9-5
帖子
110
9
 楼主| 发表于 前天 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

点评

残血恢复后爆种能力完美保留  发表于 前天 19:22
成功了!太感谢大佬了!  发表于 前天 19:21
先不要想别的,把上面说的测试一下再说吧  发表于 前天 19:04
能力值上限代表的是最高能力值能到达的数值,并不是给你做buff的地方  发表于 前天 19:03
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1320
在线时间
80 小时
注册时间
2017-9-5
帖子
110
10
 楼主| 发表于 昨天 16:11 | 只看该作者
魔法丶小肉包 发表于 2024-10-14 18:52
头晕...你还是发不全脚本,随便举个例子吧,这些方法在哪个类?set_b_add_status在哪里调用的?为什么有 ...

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

点评

在Game_BattlerBase加了die和on_battle_end,然后能力值那里扔了@set_a  发表于 昨天 22:09
你是怎么模仿的呢  发表于 昨天 22:05
模仿了,但笨蛋的咱模仿失败了  发表于 昨天 21:48
那你模仿我的,用实例变量去操作就可以了  发表于 昨天 21:41
然后也面临同样问题,只在低hp下有效,一旦战斗中hp恢复到警戒线以上,上限就变回999  发表于 昨天 21:36
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-10-16 18:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表