查看: 3016|回复: 3

[已经解决] 恢复类技能有概率失败并倒扣生命

[复制链接]
梦石
0
星屑
1501
在线时间
277 小时
注册时间
2017-2-18
回帖
80

开拓者

发表于 2020-1-22 20:10:55 | 显示全部楼层 |阅读模式

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

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

×
如何实现下述效果:当角色A已习得B技能时,使用生命回复类技能有N%几率令恢复效果无效并使恢复数值反转为伤害

梦石
0
星屑
9716
在线时间
2775 小时
注册时间
2008-9-5
回帖
3458

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

发表于 2020-1-26 15:43:16 | 显示全部楼层
有个办法,就是有工作量有点麻烦,
你可以看看恢复类的技能的伤害公式(鼠标悬停在输入框可以看一下参数说明)
例如26号技能的公式:250 + a.mat
要把治疗效果变成伤害效果的话就在整个公式后面乘以 -1,
于是a是使用者,b是目标,
要以使用者是否学会技能B作为判定,这个技能敌我双方都能用,因为敌人没有习得技能的判定,得先排除一下敌方
于是基本的条件:a.is_a?(Game_Actor) and a.skill_learn?($data_skills[技能B的ID])
再加上百分比概率:rand(100) >= N
最后条件就应该是:a.is_a?(Game_Actor) and a.skill_learn?($data_skills[技能B的ID]) and rand(100) >= N
(艹……这个条件可真鸡儿长……)
于是整个伤害公式就改成了:(250 + a.mat) * ( (a.is_a?(Game_Actor) and a.skill_learn?($data_skills[技能B的ID]) and rand(100) >= N) ? -1 : 1)

就提供一个思路,实际操作起来是非常麻烦的,但不需要去动脚本,
也没有实际测试过,可能会存在问题
回复

使用道具 举报

梦石
0
星屑
5217
在线时间
494 小时
注册时间
2018-6-18
回帖
598

超评测参与

发表于 2020-1-27 10:04:50 | 显示全部楼层
找技能变化的脚本
回复

使用道具 举报

梦石
0
星屑
2590
在线时间
452 小时
注册时间
2019-6-22
回帖
68
发表于 2020-1-27 11:03:48 | 显示全部楼层
本帖最后由 kunikai 于 2020-1-27 13:25 编辑
能用脚本解决的要尽量用脚本。

但如果“治疗技能概率扣血”只是特定角色拥有,可以使用“真假技能”的方式来做。

首先将以下两个脚本插入默认脚本以下、Main以上,以消除假技能的提示。
[pre lang="ruby" line="01"]#==============================================================================
#
# ▼ Yanfly Engine Ace - 关闭失败提示 v1.00
# -- 最后更新: 2011.12.23
# -- 使用难度: 普通
# -- 需要脚本: 无
#
#==============================================================================

$imported = {} if $imported.nil?
$imported["YEA-AntiFailMessage"] = true

#==============================================================================
# ▼ Updates
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2011.12.23 - Started Script and Finished.
#
#==============================================================================
# ▼ 介绍
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 本脚本可以在技能/物品造成0伤害时关闭"使用失败"的信息提示,或是将失败提示改变为
# 其他文本.一般用于仅触发公共事件而不造成伤害的技能或物品中.
#
#==============================================================================
# ▼ 安装方式
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 打开脚本编辑器,将本脚本拷贝/复制到一个在▼ 插件脚本之下▼ Main之上的新
# 脚本页/槽中.记得保存你的工程以使脚本生效.
#
# -----------------------------------------------------------------------------
# 技能备注 - 在数据库-技能中可以使用的备注.
# -----------------------------------------------------------------------------
# <关闭失败提示>
# 该技能使用失败时无失败提示.
#
# -----------------------------------------------------------------------------
# 物品备注 - 在数据库-物品中可以使用的备注.
# -----------------------------------------------------------------------------
# <关闭失败提示>
# 该技能使用失败时无失败提示.
#
#==============================================================================
# ▼ 兼容性
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 本脚本仅为RPG Maker VX Ace编写.极不可能在无任何修改的情况下运行于RPG Maker VX.
#
#==============================================================================
# ▼ 编辑以下内容可能会出现电脑损坏、死机,电脑主人脑袋爆炸、昏迷、死亡或口臭
# 所以编辑了后果自负。
#==============================================================================

module YEA
  module REGEXP
  module USABLEITEM
   
    ANTIFAIL = /<(?:ANTI_FAIL|关闭失败提示|antifail)>/i
   
  end # USABLEITEM
  end # REGEXP
end # YEA

#==============================================================================
# ■ DataManager
#==============================================================================

module DataManager
  
  #--------------------------------------------------------------------------
  # alias method: load_database
  #--------------------------------------------------------------------------
  class <<self; alias load_database_antifail load_database; end
  def self.load_database
    load_database_antifail
    load_notetags_antifail
  end
  
  #--------------------------------------------------------------------------
  # new method: load_notetags_antifail
  #--------------------------------------------------------------------------
  def self.load_notetags_antifail
    groups = [$data_skills, $data_items]
    for group in groups
      for obj in group
        next if obj.nil?
        obj.load_notetags_antifail
      end
    end
  end
  
end # DataManager

#==============================================================================
# ■ RPG::UsableItem
#==============================================================================

class RPG::UsableItem < RPG::BaseItem
  
  #--------------------------------------------------------------------------
  # public instance variables
  #--------------------------------------------------------------------------
  attr_accessor :antifail
  
  #--------------------------------------------------------------------------
  # common cache: load_notetags_antifail
  #--------------------------------------------------------------------------
  def load_notetags_antifail
    @antifail = false
    #---
    self.note.split(/[\r\n]+/).each { |line|
      case line
      #---
      when YEA::REGEXP::USABLEITEM::ANTIFAIL
        @antifail = true
      #---
      end
    } # self.note.split
    #---
  end
  
end # RPG::UsableItem

#==============================================================================
# ■ Game_Battler
#==============================================================================

class Game_Battler < Game_BattlerBase
  
  #--------------------------------------------------------------------------
  # alias method: item_user_effect
  #--------------------------------------------------------------------------
  alias game_battler_item_user_effect_antifail item_user_effect
  def item_user_effect(user, item)
    game_battler_item_user_effect_antifail(user, item)
    apply_antifail(item)
  end
  
  #--------------------------------------------------------------------------
  # new method: apply_antifail
  #--------------------------------------------------------------------------
  def apply_antifail(item)
    @result.success = true if item.antifail
  end
  
end # Game_Battler

#==============================================================================
#
# ▼ End of File
#
#==============================================================================[/pre]

[pre lang="ruby" line="01"]class Window_BattleLog
  def display_use_item(subject, item)
    if item.is_a?(RPG::Skill)
      add_text(subject.name + item.message1) if item.message1 != ""
      unless item.message2.empty?
        wait
        add_text(item.message2)
      end
    else
      add_text(sprintf(Vocab::UseItem, subject.name, item.name))
    end
  end
end[/pre]

(脚本2来自站内)


然后设置一个用来“给玩家使用的”治愈技能。
技能(表).png

再设置两种实际使用的技能。

治愈.png 扣血.png

做一个假被动。

假被动2.png

最后在假技能所调用的公共事件中这样设置。

事件.png

好了,我们的目的达到了。(伤害量较少的原因是这里艾里克防御了。)

扣血1.png 伤害.png

评分

参与人数 1星屑 +10 赞 +1 收起 理由
寂静的夜里 + 10 + 1 认可答案

查看全部评分

一介凡人。对大多数事情都有心无力的凡人。
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部