查看: 2541|回复: 3

[已经解决] 如何制作技能的触发效果?

[复制链接]
梦石
0
星屑
143
在线时间
347 小时
注册时间
2010-7-7
回帖
96
发表于 2012-9-24 11:18:35 | 显示全部楼层 |阅读模式

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

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

×
我想做一个触发类的技能,比如当我用技能A攻击目标时,有几率使自身触发一个状态,该状态可以使我的技能B不消耗魔法值,或是使技能B的伤害提高。该如何实现呢?

八宝粥的基叔

梦石
0
星屑
4957
在线时间
5234 小时
注册时间
2009-4-29
回帖
14054

贵宾

发表于 2012-9-24 15:58:59 | 显示全部楼层
本帖最后由 protosssonny 于 2012-9-24 16:08 编辑

话说P叔不是只回答VX区的问题的吗?
今天怎么来VA区抢生意啦。
嗷呜,P叔偶尔也想越越限嘛,不好意思啦。
P叔帮你制作了一个范例,里面的注释写得非常详细,请你拿去好好研究吧。
范例在此: Project1.rar (301.32 KB, 下载次数: 184)
由于只能上传小于999K的附件,所以请在System文件夹下自行添加RGSS300.dll文件!
添加的两种魔法和两种状态:
P叔魔法1(技能ID127):给予单个敌人无属性伤害,有概率让自己附加省魔状态。省魔状态时发动P叔魔法2不消耗MP。
P叔魔法2(技能ID128):给予单个敌人无属性伤害。有概率让自己附加魔攻增强状态,使得P叔魔法1伤害变得异常恐怖。
省魔状态(状态ID26)
魔攻增强状态(状态ID27)

脚本在此:
[pre lang="ruby" line="1"]#==============================================================================
# ■ Game_Battler
#------------------------------------------------------------------------------
#  处理战斗者的类。Game_Actor 和 Game_Enemy 类的父类。
#==============================================================================

class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 应用技能/物品的效果
  #--------------------------------------------------------------------------
  def item_apply(user, item)
    @result.clear
    @result.used = item_test(user, item)
    @result.missed = (@result.used && rand >= item_hit(user, item))
    @result.evaded = (!@result.missed && rand < item_eva(user, item))
    special_state(user, item) # 添加本行,调用自定义函数special_state
    if @result.hit?
      unless item.damage.none?
        @result.critical = (rand < item_cri(user, item))
        make_damage_value(user, item)
        execute_damage(user)
      end
      item.effects.each {|effect| item_effect_apply(user, item, effect) }
      item_user_effect(user, item)
    end
  end
  #--------------------------------------------------------------------------
  # ● 特技附加指定的状态效果(自定义函数)
  #--------------------------------------------------------------------------
  def special_state(user, item)
    return unless item.is_a?(RPG::Skill)  # 如果item不是技能就返回,什么也不做
    case item.id                          # 当item的ID为:
    when 127                              # ID为127时,表示127号技能(P叔技能1)
      user.add_state(26) if rand(100) < 45# 45%概率技能使用者附加26号状态(省魔)
    when 128                              # ID为128时,表示128号技能(P叔技能2)
      user.add_state(27) if rand(100) < 45# 45%概率技能使用者附加27号状态(魔攻增强)
    end  
  end  
end  

#==============================================================================
# ■ Game_BattlerBase
#------------------------------------------------------------------------------
#  管理战斗者的类。主要含有能力值计算的方法。Game_Battler 类的父类。
#==============================================================================

class Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 判定是否足够扣除技能的使用消耗
  #--------------------------------------------------------------------------
  def skill_cost_payable?(skill)
    # 如果战斗者是携带26号状态(省魔)并且被判定的技能为128号技能(P叔技能2)时,
    # 就返回“真”,即不判定耗魔,直接允许使用128号技能。
    return true if self.state?(26) and skill.id == 128
    # 当除了以上情况的时候才判定耗魔
    tp >= skill_tp_cost(skill) and mp >= skill_mp_cost(skill)
  end
  #--------------------------------------------------------------------------
  # ● 扣除技能的使用消耗
  #--------------------------------------------------------------------------
  def pay_skill_cost(skill)
    # 只有不是“战斗者是携带26号状态(省魔)并且被判定的技能为128号技能(P叔技能2)”
    # 的情况时,才计算MP消耗。
    self.mp -= skill_mp_cost(skill) unless self.state?(26) and skill.id == 128
    self.tp -= skill_tp_cost(skill)
  end
end  

#==============================================================================
# ■ Game_Battler
#------------------------------------------------------------------------------
#  处理战斗者的类。Game_Actor 和 Game_Enemy 类的父类。
#==============================================================================

class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 计算伤害
  #--------------------------------------------------------------------------
  def make_damage_value(user, item)
    value = item.damage.eval(user, self, $game_variables)
    # 如果item是一种技能,并且技能ID为121(P叔技能1),并且使用者是携带27号状态(魔攻
    # 增强),当以上三个条件同时满足时,伤害增加1000,P叔技能1的伤害变得非常恐怖。
    value += 1000 if item.is_a?(RPG::Skill) and item.id == 127 and user.state?(27)
    value *= item_element_rate(user, item)
    value *= pdr if item.physical?
    value *= mdr if item.magical?
    value *= rec if item.damage.recover?
    value = apply_critical(value) if @result.critical
    value = apply_variance(value, item.damage.variance)
    value = apply_guard(value)
    @result.make_damage(value.to_i, item)
  end
end  [/pre]

点评

感谢zxz2874让我发现P叔又卖萌了 =v=  发表于 2012-9-26 13:09
节操-666  发表于 2012-9-26 13:08
这次不会有坏人卡了  发表于 2012-9-26 13:07
P叔又卖萌了……  发表于 2012-9-26 13:07
我看到白字了……  发表于 2012-9-26 13:07

评分

参与人数 2星屑 +4 梦石 +2 收起 理由
dorx2010 + 4 强大&amp;gt;&amp;lt; 好范本~~~
Mic_洛洛 + 2 认可答案,附赠6R精美好人卡一张的说!.

查看全部评分

《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
回复

使用道具 举报

梦石
0
星屑
143
在线时间
347 小时
注册时间
2010-7-7
回帖
96
 楼主| 发表于 2012-9-24 19:56:20 | 显示全部楼层
protosssonny 发表于 2012-9-24 15:58
话说P叔不是只回答VX区的问题的吗?  
今天怎么来VA区抢生意啦。
嗷呜,P叔偶尔也想越 ...

哇!好强大,感谢P叔!嘿嘿...
回复

使用道具 举报

梦石
0
星屑
50
在线时间
55 小时
注册时间
2009-6-12
回帖
16
发表于 2012-9-26 12:56:45 | 显示全部楼层
纯事件能解决。。
但这是个学脚本的好范本!
R
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部