Project1

标题: 护盾技能,给角色添加额外血量,可用于阻挡伤害 [打印本页]

作者: 契约师Vi    时间: 2019-11-5 09:21
标题: 护盾技能,给角色添加额外血量,可用于阻挡伤害
比如说LOL,辅助给ADC,加盾。三个回合盾自动消除,或者被敌方技能打破。 有没有大佬写出过这样的脚本
作者: taeckle    时间: 2019-11-5 16:07
护盾功能你可以在 def skill_effect(user, skill) 里这么搞:
先用搜索找到那个“self.hp -= self.damage”,
然后在这句话上面加上这句:
if self.state?(20)       #比如说第20号状态就是护盾状态
self.damage -= 500  #比如说这个护盾可以帮你抵消500点HP伤害
end
作者: guoxiaomi    时间: 2019-11-5 23:33
有,参见我签名里的《战斗调用公共事件》,里面有个范例实现了类似“魔法盾”的效果
作者: y967    时间: 2019-11-28 10:00
本帖最后由 y967 于 2019-11-28 11:26 编辑

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

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

RUBY 代码复制
  1. if self.states.include?(37)
  2.          self.damage /= 1.3
  3.             self.damage = self.damage.to_i


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

RUBY 代码复制
  1. if self.states.include?(41)
  2.         if self.damage > 200
  3.         self.damage -= 200
  4.       end


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

RUBY 代码复制
  1. if self.states.include?(66)
  2.            $game_variables[30] = self.damage
  3.             $game_variables[29] -=  $game_variables[30]
  4.  
  5.            if $game_variables[29] <= 0
  6.        self.damage = self.damage
  7.  
  8.      else
  9.         self.damage = 1
  10.  
  11.     end
  12.          end


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

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


作者: 契约师Vi    时间: 2020-2-10 19:49
本帖最后由 契约师Vi 于 2020-2-10 20:39 编辑
y967 发表于 2019-11-28 10:00
我设想用变量存储血量,伤害和这个变量挂钩,只要某个状态下,这个就生效。当状态存在时,不扣血,只扣变量 ...


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

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




作者: 契约师Vi    时间: 2020-2-10 20:51
taeckle 发表于 2019-11-5 16:07
护盾功能你可以在 def skill_effect(user, skill) 里这么搞:
先用搜索找到那个“self.hp -= self.damage” ...

没事 我放的位置问题
作者: 契约师Vi    时间: 2020-2-10 20:56
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 00:47
我在VA写过  有点乱而且不是XP的就不整理发出来了
基本思路就是 给角色一个类似@hp的变量  然后之后你可以随便操作它了

判断伤害的时候护盾不为0就先扣护盾  
作者: y967    时间: 5 天前
叫AI随便写了个护盾脚本,能用,就是不能显示护盾,看状态吧
RUBY 代码复制
  1. #==============================================================================
  2. # ** RPG::ShieldSystem
  3. #------------------------------------------------------------------------------
  4. # 护盾系统核心逻辑
  5. #==============================================================================
  6. module RPG
  7.   class ShieldSystem
  8.     # 初始化护盾值(默认0)
  9.     attr_accessor :shield_value
  10.  
  11.     def initialize
  12.       @shield_value = 0
  13.     end
  14.  
  15.     # 设置护盾值
  16.     # value: 新的护盾数值
  17.     def set_shield(value)
  18.       @shield_value = [value, 0].max
  19.     end
  20.  
  21.     # 增加护盾值
  22.     # amount: 增加的数值
  23.     def add_shield(amount)
  24.       @shield_value += amount
  25.       @shield_value = [@shield_value, 0].max
  26.     end
  27.  
  28.     # 扣除护盾值(返回实际扣除量)
  29.     # damage: 尝试扣除的伤害值
  30.     def reduce_shield(damage)
  31.       actual = [damage, @shield_value].min
  32.       @shield_value -= actual
  33.       return actual
  34.     end
  35.  
  36.     # 检查是否有护盾
  37.     def has_shield?
  38.       @shield_value > 0
  39.     end
  40.   end
  41. end
  42.  
  43. # 绑定到Game_Actor类
  44. class Game_Actor
  45.   attr_reader :shield
  46.  
  47.   alias shield_initialize initialize
  48.   def initialize(actor_id)
  49.     shield_initialize(actor_id)
  50.     @shield = RPG::ShieldSystem.new
  51.   end
  52.  
  53.   # 重写受伤逻辑
  54.   def hp=(hp)
  55.     if @shield.has_shield? && hp < self.hp
  56.       damage = self.hp - hp
  57.       shield_damage = @shield.reduce_shield(damage)
  58.       hp = self.hp - (damage - shield_damage)
  59.     end
  60.     @hp = [[hp, 0].max, maxhp].min
  61.   end
  62. end
  63.  
  64. # 新增脚本指令
  65. class Interpreter
  66.   # 设置角色护盾值
  67.   # actor_id: 角色ID
  68.   # value: 护盾数值
  69.   def set_actor_shield(actor_id, value)
  70.     $game_actors[actor_id].shield.set_shield(value)
  71.   end
  72.  
  73.   # 增加角色护盾值
  74.   def add_actor_shield(actor_id, amount)
  75.     $game_actors[actor_id].shield.add_shield(amount)
  76.   end
  77. end





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