查看: 5366|回复: 13

[已经过期] 护盾技能,给角色添加额外血量,可用于阻挡伤害

[复制链接]
梦石
0
星屑
1442
在线时间
171 小时
注册时间
2019-10-4
回帖
162
发表于 2019-11-5 09:21:57 | 显示全部楼层 |阅读模式

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

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

×
比如说LOL,辅助给ADC,加盾。三个回合盾自动消除,或者被敌方技能打破。 有没有大佬写出过这样的脚本
梦石
0
星屑
9160
在线时间
466 小时
注册时间
2015-5-8
回帖
704
发表于 2019-11-5 16:07:32 | 显示全部楼层
护盾功能你可以在 def skill_effect(user, skill) 里这么搞:
先用搜索找到那个“self.hp -= self.damage”,
然后在这句话上面加上这句:
if self.state?(20)       #比如说第20号状态就是护盾状态
self.damage -= 500  #比如说这个护盾可以帮你抵消500点HP伤害
end

点评

在敌方攻击力足够低的情况下,攻击显示是回血,但是实际还是会掉血  发表于 2020-2-10 19:38
回复 1 0

使用道具 举报

梦石
1
星屑
24088
在线时间
3339 小时
注册时间
2011-7-8
回帖
3862

开拓者

发表于 2019-11-5 23:33:50 | 显示全部楼层
有,参见我签名里的《战斗调用公共事件》,里面有个范例实现了类似“魔法盾”的效果
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复

使用道具 举报

梦石
0
星屑
17561
在线时间
4249 小时
注册时间
2013-7-18
回帖
2491
发表于 2019-11-28 10:00:36 | 显示全部楼层
本帖最后由 y967 于 2019-11-28 11:26 编辑

我设想用变量存储血量,伤害和这个变量挂钩,只要某个状态下,这个就生效。当状态存在时,不扣血,只扣变量,当变量小于0,状态消失。这样做的好处就是不用另外写脚本,就在Battlle3里写,我想想怎么写。

1,第一种不需要变量,直接用状态,伤害除以一个数,达到比例减伤的效果

[pre lang="ruby"] if self.states.include?(37)
         self.damage /= 1.3
            self.damage = self.damage.to_i[/pre]

2,第二种,也不需要变量,伤害超过一定数值,减伤固定数值

[pre lang="ruby"] if self.states.include?(41)
        if self.damage > 200
        self.damage -= 200
      end[/pre]

3,第三种就是要变量,battle3 里这样写

[pre lang="ruby"] if self.states.include?(66)
           $game_variables[30] = self.damage
            $game_variables[29] -=  $game_variables[30]
           
           if $game_variables[29] <= 0
       self.damage = self.damage
      
     else
        self.damage = 1
     
    end
         end[/pre]

66号状态为盾状态,29号变量为存储盾的血量,30号变量存储当前一次伤害值,设置一个公共事件:

当29号变量小于等于0时,赋予29号变量值 =1000 (盾的血量,要多少写多少),护盾技能带上这个公共事件,亲测有用

退隐....
回复 1 0

使用道具 举报

梦石
0
星屑
1442
在线时间
171 小时
注册时间
2019-10-4
回帖
162
 楼主| 发表于 2020-2-10 19:49:29 | 显示全部楼层
本帖最后由 契约师Vi 于 2020-2-10 20:39 编辑
y967 发表于 2019-11-28 10:00
我设想用变量存储血量,伤害和这个变量挂钩,只要某个状态下,这个就生效。当状态存在时,不扣血,只扣变量 ...


在Gamebattle3里添加 第一种比例减伤确实可行,但是少了个end这个放“self.hp -= self.damage”,上下都可以

“self.hp -= self.damage”第三种和第二种必须放在这个的上面不然,只会显示显示数值正确但是,血量依然被扣



点评

第三种是最接近盾效果的,只是盾的数值要大一点,超过伤害的10倍以上,最后一击实际是不扣盾的,直接判定为掉血,望高人完善。  发表于 2020-2-10 20:33
回复

使用道具 举报

梦石
0
星屑
1442
在线时间
171 小时
注册时间
2019-10-4
回帖
162
 楼主| 发表于 2020-2-10 20:51:38 | 显示全部楼层
taeckle 发表于 2019-11-5 16:07
护盾功能你可以在 def skill_effect(user, skill) 里这么搞:
先用搜索找到那个“self.hp -= self.damage” ...

没事 我放的位置问题
回复

使用道具 举报

梦石
0
星屑
1442
在线时间
171 小时
注册时间
2019-10-4
回帖
162
 楼主| 发表于 2020-2-10 20:56:55 | 显示全部楼层
if self.states.include?(17)
           $game_variables[30] = self.damage
            $game_variables[29] -=  $game_variables[30]

           if $game_variables[29] <= 0
       self.damage = 0 - $game_variables[29] #这一击减掉就可以完美实现护盾减伤

     else
        self.damage = 0

    end
         end
但是我还有一个问题就是能不能添加一个护盾的显示数值

点评

不错啊,你研究出来了最后一击的问题,至于显示,你看看血条显示脚本,自己弄下就可以了,应该不难,反正我不会  发表于 2020-2-11 08:05
回复

使用道具 举报

梦石
0
星屑
4881
在线时间
425 小时
注册时间
2019-10-22
回帖
647
发表于 2020-2-11 00:47:10 | 显示全部楼层
我在VA写过  有点乱而且不是XP的就不整理发出来了
基本思路就是 给角色一个类似@hp的变量  然后之后你可以随便操作它了

判断伤害的时候护盾不为0就先扣护盾  
















回复

使用道具 举报

梦石
0
星屑
17561
在线时间
4249 小时
注册时间
2013-7-18
回帖
2491
发表于 2025-9-1 15:17:56 | 显示全部楼层
叫AI随便写了个护盾脚本,能用,就是不能显示护盾,看状态吧
[pre lang="ruby"]
#==============================================================================
# ** RPG::ShieldSystem
#------------------------------------------------------------------------------
# 护盾系统核心逻辑
#==============================================================================
module RPG
  class ShieldSystem
    # 初始化护盾值(默认0)
    attr_accessor :shield_value
   
    def initialize
      @shield_value = 0
    end
   
    # 设置护盾值
    # value: 新的护盾数值
    def set_shield(value)
      @shield_value = [value, 0].max
    end
   
    # 增加护盾值
    # amount: 增加的数值
    def add_shield(amount)
      @shield_value += amount
      @shield_value = [@shield_value, 0].max
    end
   
    # 扣除护盾值(返回实际扣除量)
    # damage: 尝试扣除的伤害值
    def reduce_shield(damage)
      actual = [damage, @shield_value].min
      @shield_value -= actual
      return actual
    end
   
    # 检查是否有护盾
    def has_shield?
      @shield_value > 0
    end
  end
end

# 绑定到Game_Actor类
class Game_Actor
  attr_reader :shield
  
  alias shield_initialize initialize
  def initialize(actor_id)
    shield_initialize(actor_id)
    @shield = RPG::ShieldSystem.new
  end
  
  # 重写受伤逻辑
  def hp=(hp)
    if @shield.has_shield? && hp < self.hp
      damage = self.hp - hp
      shield_damage = @shield.reduce_shield(damage)
      hp = self.hp - (damage - shield_damage)
    end
    @hp = [[hp, 0].max, maxhp].min
  end
end

# 新增脚本指令
class Interpreter
  # 设置角色护盾值
  # actor_id: 角色ID
  # value: 护盾数值
  def set_actor_shield(actor_id, value)
    $game_actors[actor_id].shield.set_shield(value)
  end
  
  # 增加角色护盾值
  def add_actor_shield(actor_id, amount)
    $game_actors[actor_id].shield.add_shield(amount)
  end
end
[/pre]

点评

好,你喜欢就自己加吧,我有怒气槽了,就加不了了,看个人喜欢加  发表于 2025-9-28 21:07
Window_Base 类似血条描绘那样 可以在获得随机护盾数值 之后添加图形描绘和数值显示 还有就是状态的判断 具体就不说了 还有就是多个护盾分开设置  发表于 2025-9-28 14:27
退隐....
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部