Project1

标题: 如何制作技能的触发效果? [打印本页]

作者: yjl494356020    时间: 2012-9-24 11:18
标题: 如何制作技能的触发效果?
我想做一个触发类的技能,比如当我用技能A攻击目标时,有几率使自身触发一个状态,该状态可以使我的技能B不消耗魔法值,或是使技能B的伤害提高。该如何实现呢?
作者: 怪蜀黍    时间: 2012-9-24 15:58
本帖最后由 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)

脚本在此:
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Game_Battler
  3. #------------------------------------------------------------------------------
  4. #  处理战斗者的类。Game_Actor 和 Game_Enemy 类的父类。
  5. #==============================================================================
  6.  
  7. class Game_Battler < Game_BattlerBase
  8.   #--------------------------------------------------------------------------
  9.   # ● 应用技能/物品的效果
  10.   #--------------------------------------------------------------------------
  11.   def item_apply(user, item)
  12.     @result.clear
  13.     @result.used = item_test(user, item)
  14.     @result.missed = (@result.used && rand >= item_hit(user, item))
  15.     @result.evaded = (!@result.missed && rand < item_eva(user, item))
  16.     special_state(user, item) # 添加本行,调用自定义函数special_state
  17.     if @result.hit?
  18.       unless item.damage.none?
  19.         @result.critical = (rand < item_cri(user, item))
  20.         make_damage_value(user, item)
  21.         execute_damage(user)
  22.       end
  23.       item.effects.each {|effect| item_effect_apply(user, item, effect) }
  24.       item_user_effect(user, item)
  25.     end
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   # ● 特技附加指定的状态效果(自定义函数)
  29.   #--------------------------------------------------------------------------
  30.   def special_state(user, item)
  31.     return unless item.is_a?(RPG::Skill)  # 如果item不是技能就返回,什么也不做
  32.     case item.id                          # 当item的ID为:
  33.     when 127                              # ID为127时,表示127号技能(P叔技能1)
  34.       user.add_state(26) if rand(100) < 45# 45%概率技能使用者附加26号状态(省魔)
  35.     when 128                              # ID为128时,表示128号技能(P叔技能2)
  36.       user.add_state(27) if rand(100) < 45# 45%概率技能使用者附加27号状态(魔攻增强)
  37.     end  
  38.   end  
  39. end  
  40.  
  41. #==============================================================================
  42. # ■ Game_BattlerBase
  43. #------------------------------------------------------------------------------
  44. #  管理战斗者的类。主要含有能力值计算的方法。Game_Battler 类的父类。
  45. #==============================================================================
  46.  
  47. class Game_BattlerBase
  48.   #--------------------------------------------------------------------------
  49.   # ● 判定是否足够扣除技能的使用消耗
  50.   #--------------------------------------------------------------------------
  51.   def skill_cost_payable?(skill)
  52.     # 如果战斗者是携带26号状态(省魔)并且被判定的技能为128号技能(P叔技能2)时,
  53.     # 就返回“真”,即不判定耗魔,直接允许使用128号技能。
  54.     return true if self.state?(26) and skill.id == 128
  55.     # 当除了以上情况的时候才判定耗魔
  56.     tp >= skill_tp_cost(skill) and mp >= skill_mp_cost(skill)
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 扣除技能的使用消耗
  60.   #--------------------------------------------------------------------------
  61.   def pay_skill_cost(skill)
  62.     # 只有不是“战斗者是携带26号状态(省魔)并且被判定的技能为128号技能(P叔技能2)”
  63.     # 的情况时,才计算MP消耗。
  64.     self.mp -= skill_mp_cost(skill) unless self.state?(26) and skill.id == 128
  65.     self.tp -= skill_tp_cost(skill)
  66.   end
  67. end  
  68.  
  69. #==============================================================================
  70. # ■ Game_Battler
  71. #------------------------------------------------------------------------------
  72. #  处理战斗者的类。Game_Actor 和 Game_Enemy 类的父类。
  73. #==============================================================================
  74.  
  75. class Game_Battler < Game_BattlerBase
  76.   #--------------------------------------------------------------------------
  77.   # ● 计算伤害
  78.   #--------------------------------------------------------------------------
  79.   def make_damage_value(user, item)
  80.     value = item.damage.eval(user, self, $game_variables)
  81.     # 如果item是一种技能,并且技能ID为121(P叔技能1),并且使用者是携带27号状态(魔攻
  82.     # 增强),当以上三个条件同时满足时,伤害增加1000,P叔技能1的伤害变得非常恐怖。
  83.     value += 1000 if item.is_a?(RPG::Skill) and item.id == 127 and user.state?(27)
  84.     value *= item_element_rate(user, item)
  85.     value *= pdr if item.physical?
  86.     value *= mdr if item.magical?
  87.     value *= rec if item.damage.recover?
  88.     value = apply_critical(value) if @result.critical
  89.     value = apply_variance(value, item.damage.variance)
  90.     value = apply_guard(value)
  91.     @result.make_damage(value.to_i, item)
  92.   end
  93. end

作者: yjl494356020    时间: 2012-9-24 19:56
protosssonny 发表于 2012-9-24 15:58
话说P叔不是只回答VX区的问题的吗?  
今天怎么来VA区抢生意啦。
嗷呜,P叔偶尔也想越 ...

哇!好强大,感谢P叔!嘿嘿...
作者: zxz2874    时间: 2012-9-26 12:56
纯事件能解决。。
但这是个学脚本的好范本!




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