设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2581|回复: 8
打印 上一主题 下一主题

[已经解决] 求教一下如何设置类似冰甲这样能给攻击者加状态的技能

[复制链接]

Lv2.观梦者

梦石
0
星屑
809
在线时间
176 小时
注册时间
2017-1-15
帖子
81
跳转到指定楼层
1
发表于 2019-6-14 21:14:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
比方给某角色上了冰甲的状态之后,敌人如果攻击这个角色,就会被附加“攻击下降”的状态

Lv5.捕梦者

梦石
10
星屑
39587
在线时间
1920 小时
注册时间
2010-11-14
帖子
3320

R考场第七期纪念奖

2
发表于 2019-6-15 17:38:49 | 只看该作者
RUBY 代码复制
  1. #==============================================================================
  2. # ■ 反手状态 by Calendar99
  3. #------------------------------------------------------------------------------
  4. #  在状态备注中写<反手状态 id,rate>
  5. #   则拥有此状态的单位在受到攻击时,令攻击者附加id号状态,附加概率为rate
  6. #   
  7. #   比如<反手状态 1, 10%>,则攻击者有10%概率直接死亡
  8. #
  9. #   若写成<反手状态 id>,则rate自动视为100%
  10. #==============================================================================
  11.  
  12. Counter_State = Struct.new(:id, :rate)
  13.  
  14. class RPG::State
  15.  
  16.   def counter_state?
  17.     !self.counter_states.empty?
  18.   end
  19.  
  20.   def counter_states
  21.     sig = "(?:counter_state|反手状态)"
  22.     int = "[ :=]*"
  23.     cap = "(\\d+)(?:,[ ]*(\\d+)%?)?" # 状态id 概率(单位:百分比整数)
  24.     reg = /<#{sig}#{int}#{cap}>/
  25.  
  26.     md = self.note.match(reg)
  27.     states = []
  28.     if md
  29.       loop do
  30.         states << Counter_State.new(md[1].to_i, md[2].nil? ? 100 : md[2].to_i)
  31.         note = md.post_match
  32.         md = note.match(reg)
  33.         break if !md
  34.       end
  35.     end
  36.  
  37.     return states
  38.   end
  39.  
  40. end
  41.  
  42. class Game_Battler
  43.   #--------------------------------------------------------------------------
  44.   # ● [别名修改]对技能/物品使用者的效果
  45.   #--------------------------------------------------------------------------
  46.   alias item_user_effect_for_counter_state item_user_effect
  47.   def item_user_effect(user, item)
  48.     item_user_effect_for_counter_state(user, item) # 原方法
  49.     if self.states.any?{|s| s.counter_state?} # 存在反手状态
  50.       counter_states = self.states.select{|s| s.counter_state?} # 所有的反手状态
  51.       counter_states.each do |state|
  52.         state.counter_states.each do |s| # 每个反手状态的全部反手附加的状态
  53.           chance = s.rate / 100.0 # 自身概率
  54.           chance *= user.state_rate(s.id) # 攻击者抗性
  55.           chance *= user.luk_effect_rate(self) # 自身幸运影响程度
  56.           if rand < chance
  57.             user.add_state(s.id)
  58.           end
  59.         end
  60.       end
  61.     end
  62.   end
  63. end


测试效果:

解说:玩家身上状态为“寒冰”,受到敌人攻击
时50%概率使敌人下回合无法行动。

解说:敌人身上状态为“接触死亡”,受到玩家
攻击时100%概率使玩家直接死亡。

解说:但是攻击未命中,或者一击杀死敌人的场
合,不会触发反手状态。



点评

此脚本有较大的bug,请寻找下面4楼的修复版。  发表于 2019-7-8 23:09
用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1971
在线时间
926 小时
注册时间
2015-10-26
帖子
356

开拓者

3
发表于 2019-7-8 16:24:56 | 只看该作者
KB.Driver 发表于 2019-6-15 17:38
#==============================================================================
# ■ 反手状态 by Cal ...

大神,搭车求教一下,我用了你这个脚本,发现问题
比方我像LZ那样做一个反击的技能,给人附加状态“反击”,效果就是对这个人攻击的话,攻击者会附加“无法战斗”状态。
但实际测试发现,释放技能的人也会被附加“无法战斗”状态。
打个比方,人物A对人物B释放技能“反击护甲”,让人物B获得状态“反击”的时候,人物A也会被附加“无法战斗”的状态,直接就死了。
怎么办啊?这样的话这个脚本就用不成了。

点评

这个情况的话我加个对队友无效的设定吧,迟一点发在下面。  发表于 2019-7-8 22:05
是的,给队友或者给自己加状态的那个人会被施加“反击技能”。  发表于 2019-7-8 19:06
就是队友之间放技能会出现这个问题吗?  发表于 2019-7-8 18:53
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39587
在线时间
1920 小时
注册时间
2010-11-14
帖子
3320

R考场第七期纪念奖

4
发表于 2019-7-8 23:14:57 | 只看该作者
踢腿水上飘 发表于 2019-7-8 16:24
大神,搭车求教一下,我用了你这个脚本,发现问题
比方我像LZ那样做一个反击的技能,给人附加状态“反击 ...

我测试了一下,之前的版本确实有比较大的问题。
联合你这个问题一起,用下面这个版本吧。

RUBY 代码复制
  1. #==============================================================================
  2. # ■ 反手状态 by Calendar99
  3. #------------------------------------------------------------------------------
  4. # 20190708 更新 *
  5. #   Bug修复:
  6. #     1 修复了友军释放技能附加反手状态时,友军受到反手状态的影响问题
  7. #     2 修复了敌人因反手状态死亡时,战斗图不消失的问题
  8. #------------------------------------------------------------------------------
  9. #  在状态备注中写<反手状态 id,rate>
  10. #   则拥有此状态的单位在受到攻击时,令攻击者附加id号状态,附加概率为rate
  11. #   
  12. #   比如<反手状态 1, 10%>,则攻击者有10%概率直接死亡
  13. #
  14. #   若写成<反手状态 id>,则rate自动视为100%
  15. #==============================================================================
  16.  
  17. Counter_State = Struct.new(:id, :rate)
  18.  
  19. class RPG::State
  20.  
  21.   def counter_state?
  22.     !self.counter_states.empty?
  23.   end
  24.  
  25.   def counter_states
  26.     sig = "(?:counter_state|反手状态)"
  27.     int = "[ :=]*"
  28.     cap = "(\\d+)(?:,[ ]*(\\d+)%?)?" # 状态id 概率(单位:百分比整数)
  29.     reg = /<#{sig}#{int}#{cap}>/
  30.  
  31.     md = self.note.match(reg)
  32.     states = []
  33.     if md
  34.       loop do
  35.         states << Counter_State.new(md[1].to_i, md[2].nil? ? 100 : md[2].to_i)
  36.         note = md.post_match
  37.         md = note.match(reg)
  38.         break if !md
  39.       end
  40.     end
  41.  
  42.     return states
  43.   end
  44.  
  45. end
  46.  
  47. class Game_Battler
  48.   #--------------------------------------------------------------------------
  49.   # ● [别名修改]对技能/物品使用者的效果
  50.   #--------------------------------------------------------------------------
  51.   alias item_user_effect_for_counter_state item_user_effect
  52.   def item_user_effect(user, item)
  53.     item_user_effect_for_counter_state(user, item) # 原方法
  54.     return if ally_with?(user) # 不对友军施加反手状态 0708
  55.     if self.states.any?{|s| s.counter_state?} # 存在反手状态
  56.       counter_states = self.states.select{|s| s.counter_state?} # 所有的反手状态
  57.       counter_states.each do |state|
  58.         state.counter_states.each do |s| # 每个反手状态的全部反手附加的状态
  59.           chance = s.rate / 100.0 # 自身概率
  60.           chance *= user.state_rate(s.id) # 攻击者抗性
  61.           chance *= user.luk_effect_rate(self) # 自身幸运影响程度
  62.           if rand < chance
  63.             user.add_state(s.id)
  64.             user.perform_collapse_effect if s.id == user.death_state_id # 死亡演出 0708
  65.           end
  66.         end
  67.       end
  68.     end
  69.   end
  70.   #--------------------------------------------------------------------------
  71.   # ● [追加]是友军? - 0708
  72.   #--------------------------------------------------------------------------
  73.   def ally_with?(battler)
  74.     (self.actor? && battler.actor?) || (self.enemy? && battler.enemy?)
  75.   end
  76. end

点评

这个好了,没问题了,谢啦  发表于 2019-7-11 06:43

评分

参与人数 1星屑 +100 收起 理由
VIPArcher + 100 认可答案

查看全部评分

用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-16 18:35

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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