扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 104|回复: 0

[转载发布] 【脚本】吸血效果

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    6 小时前
  • 签到天数: 178 天

    连续签到: 3 天

    [LV.7]常住居民III

    2575

    主题

    710

    回帖

    2万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    16917
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    20230

    灌水之王

    发表于 前天 21:23 | 显示全部楼层 |阅读模式
    RUBY 代码
    1. #==============================================================================
    2. # $SDrop$
    3. # 吸血效果  By猫易箱
    4. #------------------------------------------------------------------------------
    5. # 在 角色、职业、技能、武器、护甲、敌人、状态 备注使用:
    6. #
    7. #          - 通用吸血:让持有者造成伤害时,产生吸血效果
    8. #          - 技能吸血:技能专用!让技能自带吸血效果
    9. #          - 暴击吸血:A的变种,暴击时产生吸血效果
    10. #
    11. #      - 攻击方的吸血修正(大于100%增加,小于100%减少)
    12. #      - 受击方的吸血修正(大于100%增加,小于100%减少)
    13. #
    14. #   吸血公式:伤害 × 吸血率 × 吸血加成 × 吸血抗性
    15. #   战斗消息显示:XXX受到了100点的伤害!被偷取了50HP!
    16. #
    17. #==============================================================================
    18. $imported = {}if$imported.nil?
    19. $imported["SDrop_LifeSteal"] = true
    20. #==============================================================================
    21. # ■ RPG::BaseItem
    22. #==============================================================================
    23. classRPG::BaseItem
    24.   #--------------------------------------------------------------------------
    25.   # ● 获取吸血A比率
    26.   #--------------------------------------------------------------------------
    27.   def life_steal_a_rate
    28.     @life_steal_a_rate ||= load_life_steal_a_rate
    29.   end
    30.   #--------------------------------------------------------------------------
    31.   # ● 加载吸血A比率
    32.   #--------------------------------------------------------------------------
    33.   def load_life_steal_a_rate
    34.     self.note =~ //i ? $1.to_i / 100.0 : 0.0
    35.   end
    36.   #--------------------------------------------------------------------------
    37.   # ● 获取吸血C比率(暴击时触发)
    38.   #--------------------------------------------------------------------------
    39.   def life_steal_c_rate
    40.     @life_steal_c_rate ||= load_life_steal_c_rate
    41.   end
    42.   #--------------------------------------------------------------------------
    43.   # ● 加载吸血C比率
    44.   #--------------------------------------------------------------------------
    45.   def load_life_steal_c_rate
    46.     self.note =~ //i ? $1.to_i / 100.0 : 0.0
    47.   end
    48.   #--------------------------------------------------------------------------
    49.   # ● 获取吸血修正倍率
    50.   #--------------------------------------------------------------------------
    51.   def life_steal_mod_rate
    52.     @life_steal_mod_rate ||= load_life_steal_mod_rate
    53.   end
    54.   #--------------------------------------------------------------------------
    55.   # ● 加载吸血修正倍率
    56.   #--------------------------------------------------------------------------
    57.   def load_life_steal_mod_rate
    58.     self.note =~ //i ? $1.to_i / 100.0 : 1.0
    59.   end
    60.   #--------------------------------------------------------------------------
    61.   # ● 获取吸血抗性倍率
    62.   #--------------------------------------------------------------------------
    63.   def life_steal_resist_rate
    64.     @life_steal_resist_rate ||= load_life_steal_resist_rate
    65.   end
    66.   #--------------------------------------------------------------------------
    67.   # ● 加载吸血抗性
    68.   #--------------------------------------------------------------------------
    69.   def load_life_steal_resist_rate
    70.     self.note =~ //i ? $1.to_i / 100.0 : 1.0
    71.   end
    72. end
    73. #==============================================================================
    74. # ■ RPG::Skill
    75. #==============================================================================
    76. classRPG::Skill
    77.   #--------------------------------------------------------------------------
    78.   # ● 获取吸血B比率(技能单独使用)
    79.   #--------------------------------------------------------------------------
    80.   def life_steal_b_rate
    81.     @life_steal_b_rate ||= load_life_steal_b_rate
    82.   end
    83.   #--------------------------------------------------------------------------
    84.   # ● 加载吸血B比率
    85.   #--------------------------------------------------------------------------
    86.   def load_life_steal_b_rate
    87.     self.note =~ //i ? $1.to_i / 100.0 : 0.0
    88.   end
    89. end
    90. #==============================================================================
    91. # ■ Game_BattlerBase
    92. #==============================================================================
    93. class Game_BattlerBase
    94.   #--------------------------------------------------------------------------
    95.   # ● 获取总吸血A比率(从所有特性中累计)
    96.   #--------------------------------------------------------------------------
    97.   def life_steal_a_total
    98.     result = 0.0
    99.     feature_objects.eachdo |obj|
    100.       result += obj.life_steal_a_rateif obj.respond_to?(:life_steal_a_rate)
    101.     end
    102.     [[result, 1.0].min, 0.0].max
    103.   end
    104.   #--------------------------------------------------------------------------
    105.   # ● 获取总吸血C比率(从所有特性中累计)
    106.   #--------------------------------------------------------------------------
    107.   def life_steal_c_total
    108.     result = 0.0
    109.     feature_objects.eachdo |obj|
    110.       result += obj.life_steal_c_rateif obj.respond_to?(:life_steal_c_rate)
    111.     end
    112.     [[result, 1.0].min, 0.0].max
    113.   end
    114.   #--------------------------------------------------------------------------
    115.   # ● 获取总吸血加成倍率(所有修正倍率的乘积)
    116.   #--------------------------------------------------------------------------
    117.   def life_steal_mod_total
    118.     result = 1.0
    119.     feature_objects.eachdo |obj|
    120.       if obj.respond_to?(:life_steal_mod_rate)
    121.         result *= obj.life_steal_mod_rate
    122.       end
    123.     end
    124.     result
    125.   end
    126.   #--------------------------------------------------------------------------
    127.   # ● 获取总吸血抗性倍率(所有抗性倍率的乘积)
    128.   #--------------------------------------------------------------------------
    129.   def life_steal_resist_total
    130.     result = 1.0
    131.     feature_objects.eachdo |obj|
    132.       if obj.respond_to?(:life_steal_resist_rate)
    133.         result *= obj.life_steal_resist_rate
    134.       end
    135.     end
    136.     result
    137.   end
    138. end
    139. #==============================================================================
    140. # ■ Game_ActionResult
    141. #==============================================================================
    142. class Game_ActionResult
    143.   #--------------------------------------------------------------------------
    144.   # ● 定义实例变量
    145.   #--------------------------------------------------------------------------
    146.   attr_accessor :life_steal               # 吸血量
    147.   attr_accessor :life_steal_active         # 是否触发吸血
    148.   attr_accessor :life_steal_c_trigger      # 是否由暴击触发
    149.   #--------------------------------------------------------------------------
    150.   # ● 初始化对象
    151.   #--------------------------------------------------------------------------
    152.   alias life_steal_initialize initialize
    153.   def initialize(battler)
    154.     life_steal_initialize(battler)
    155.     @life_steal = 0
    156.     @life_steal_active = false
    157.     @life_steal_c_trigger = false
    158.   end
    159.   #--------------------------------------------------------------------------
    160.   # ● 清除
    161.   #--------------------------------------------------------------------------
    162.   alias life_steal_clear clear
    163.   def clear
    164.     life_steal_clear
    165.     @life_steal = 0
    166.     @life_steal_active = false
    167.     @life_steal_c_trigger = false
    168.   end
    169.   #--------------------------------------------------------------------------
    170.   # ● 生成伤害
    171.   #--------------------------------------------------------------------------
    172.   alias life_steal_make_damage make_damage
    173.   def make_damage(value, item)
    174.     life_steal_make_damage(value, item)
    175.     @life_steal = @hp_damageif@hp_damage > 0 && @hp_drain == 0
    176.   end
    177.   #--------------------------------------------------------------------------
    178.   # ● 获取HP伤害的文字(包含吸血信息)
    179.   #--------------------------------------------------------------------------
    180.   def hp_damage_text
    181.     if@life_steal_active && @hp_damage > 0
    182.       if@life_steal_c_trigger
    183.         # 暴击触发的吸血特殊显示
    184.         fmt = @battler.actor? ? "%s受到了%s点的伤害!被偷取了%sHP!" : "%s受到了%s点的伤害!被偷取了%sHP!"
    185.       else
    186.         fmt = @battler.actor? ? "%s受到了%s点的伤害!被偷取了%sHP!" : "%s受到了%s点的伤害!被偷取了%sHP!"
    187.       end
    188.       sprintf(fmt, @battler.name, @hp_damage, @life_steal)
    189.     elsif@hp_drain > 0
    190.       fmt = @battler.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
    191.       sprintf(fmt, @battler.name, Vocab::hp, @hp_drain)
    192.     elsif@hp_damage > 0
    193.       fmt = @battler.actor? ? Vocab::ActorDamage : Vocab::EnemyDamage
    194.       sprintf(fmt, @battler.name, @hp_damage)
    195.     elsif@hp_damage < 0
    196.       fmt = @battler.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
    197.       sprintf(fmt, @battler.name, Vocab::hp, -hp_damage)
    198.     else
    199.       fmt = @battler.actor? ? Vocab::ActorNoDamage : Vocab::EnemyNoDamage
    200.       sprintf(fmt, @battler.name)
    201.     end
    202.   end
    203. end
    204. #==============================================================================
    205. # ■ Game_Action
    206. #==============================================================================
    207. class Game_Action
    208.   #--------------------------------------------------------------------------
    209.   # ● 获取技能/物品的总吸血率
    210.   #--------------------------------------------------------------------------
    211.   def total_life_steal_rate
    212.     rate = 0.0
    213.     # 类型A:从所有特性中累计
    214.     rate += subject.life_steal_a_total
    215.     # 类型B:从当前技能中获取(如果存在)
    216.     if item && item.respond_to?(:life_steal_b_rate)
    217.       rate += item.life_steal_b_rate
    218.     end
    219.     # 类型C:暴击时触发,这里先记录,实际触发在item_apply中判断
    220.     @life_steal_c_rate = subject.life_steal_c_total
    221.     [[rate, 1.0].min, 0.0].max
    222.   end
    223.   #--------------------------------------------------------------------------
    224.   # ● 获取技能/物品的暴击吸血率
    225.   #--------------------------------------------------------------------------
    226.   def life_steal_c_rate
    227.     @life_steal_c_rate || 0.0
    228.   end
    229.   #--------------------------------------------------------------------------
    230.   # ● 判定是否有吸血效果(普通吸血)
    231.   #--------------------------------------------------------------------------
    232.   def life_steal?
    233.     total_life_steal_rate > 0
    234.   end
    235.   #--------------------------------------------------------------------------
    236.   # ● 判定是否有暴击吸血效果
    237.   #--------------------------------------------------------------------------
    238.   def life_steal_c?
    239.     life_steal_c_rate > 0
    240.   end
    241. end
    242. #==============================================================================
    243. # ■ Game_Battler
    244. #==============================================================================
    245. class Game_Battler
    246.   #--------------------------------------------------------------------------
    247.   # ● 应用技能/物品的效果
    248.   #--------------------------------------------------------------------------
    249.   alias life_steal_item_apply item_apply
    250.   def item_apply(user, item)
    251.     # 记录吸血率
    252.     @life_steal_rate = 0
    253.     @life_steal_c_rate = 0
    254.     @life_steal_mod = 1.0
    255.     @life_steal_resist = 1.0
    256.     if user.current_action
    257.       action = user.current_action
    258.       @life_steal_rate = action.total_life_steal_rate
    259.       @life_steal_c_rate = action.life_steal_c_rate
    260.     end
    261.     # 记录使用者的吸血加成倍率
    262.     @life_steal_mod = user.life_steal_mod_totalif user.respond_to?(:life_steal_mod_total)
    263.     # 执行原处理
    264.     life_steal_item_apply(user, item)
    265.     # 处理吸血效果
    266.     if@result.hp_damage > 0 && @result.hp_drain == 0
    267.       # 计算目标的吸血抗性倍率
    268.       @life_steal_resist = self.life_steal_resist_total
    269.       base_steal = 0
    270.       is_critical_steal = false
    271.       # 处理普通吸血
    272.       if@life_steal_rate > 0
    273.         base_steal = (@result.hp_damage * @life_steal_rate).to_i
    274.       end
    275.       # 处理暴击吸血(如果本次攻击是暴击)
    276.       if@result.critical && @life_steal_c_rate > 0
    277.         c_steal = (@result.hp_damage * @life_steal_c_rate).to_i
    278.         base_steal += c_steal
    279.         is_critical_steal = true
    280.       end
    281.       if base_steal > 0
    282.         # 应用吸血加成
    283.         if@life_steal_mod != 1.0
    284.           base_steal = (base_steal * @life_steal_mod).to_i
    285.         end
    286.         # 应用吸血抗性倍率
    287.         if@life_steal_resist != 1.0
    288.           base_steal = (base_steal * @life_steal_resist).to_i
    289.         end
    290.         if base_steal > 0
    291.           # 保存吸血量
    292.           @result.life_steal = base_steal
    293.           @result.life_steal_active = true
    294.           @result.life_steal_c_trigger = is_critical_steal
    295.           # 给使用者加血
    296.           user.hp += base_steal
    297.           # 播放恢复音效(不喜欢的可自行修改或删除)
    298.           Sound.play_recoveryif user.actor?
    299.         end
    300.       end
    301.     end
    302.     @life_steal_rate = 0
    303.     @life_steal_c_rate = 0
    304.     @life_steal_mod = 1.0
    305.     @life_steal_resist = 1.0
    306.   end
    307. end
    308. #==============================================================================
    309. # ■ Window_BattleLog
    310. #==============================================================================
    311. class Window_BattleLog
    312.   #--------------------------------------------------------------------------
    313.   # ● 显示HP伤害
    314.   #--------------------------------------------------------------------------
    315.   def display_hp_damage(target, item)
    316.     returnif target.result.hp_damage == 0 && item && !item.damage.to_hp?
    317.     if target.result.hp_damage > 0 && target.result.hp_drain == 0 && !target.result.life_steal_active
    318.       target.perform_damage_effect
    319.     end
    320.     Sound.play_recoveryif target.result.hp_damage < 0
    321.     add_text(target.result.hp_damage_text)
    322.     wait
    323.   end
    324. end
    复制代码


    在 角色、职业、技能、武器、护甲、敌人、状态 备注栏添加使用:

    通用吸血:持有者造成伤害时,回复20%HP。

    技能吸血:仅技能备注生效,使该技能造成伤害时回复20%HP。

    暴击吸血:仅暴击时,触发吸血效果。

    吸血A 吸血B 吸血C 可组合生效!

    如:
    吸血A[10%] × 吸血B[20%] × 吸血C[30%]
    吸血A[15%] × 吸血A[15%] × 吸血B[20%]
    吸血C[10%] × 吸血C[10%] × 吸血C[10%]

    注意!吸血ABC最大的组合限制为100%

    如果想“造成100的伤害,吸200的血”可以通过“吸血加成”和“吸血抗性”来实现

    吸血时的效果修正

    被吸血时的效果修正

    110%等于+10%,90%等于-10%

    战斗日志会显示吸了多少血
    XXX受到了100点的伤害!被偷取了50HP!
                本帖来自P1论坛作者SmallDrop,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=498671  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2026-3-8 06:36 , Processed in 0.136731 second(s), 50 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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