查看: 7629|回复: 20

[已经解决] 请教队伍里有人有第2号状态的话对方的群攻技能变成单体

[复制链接]
梦石
0
星屑
9160
在线时间
466 小时
注册时间
2015-5-8
回帖
704
发表于 2020-12-27 05:16:40 | 显示全部楼层 |阅读模式

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

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

×
我想做一个状态,有此状态后对方释放的群攻技能50%几率变成单体攻击技能,想了下大概需要两步:
1.判断我方队伍里是否有人有第2号状态 (请问下用这个判断用if改怎么写呢?可以写成$game_party.actors.any? {|x| x.state == 2}吗?)
2.判断结果为真的话对方释放的群攻技能50%几率变成单体攻击技能(单体攻击代码是1,群体是2,但就是不知道在哪里写好。。)


还请大家指点指点,多谢了!
梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
回帖
205
发表于 2020-12-27 12:13:50 | 显示全部楼层
本帖最后由 RPGzh500223 于 2020-12-27 12:43 编辑

Game_Battler 的 状态 states(不是state) 是一个数组 并不是数值……
你该好好看脚本啊
这状态是对敌我双方生效还是只有我方?(你的想法部分,直接把这状态只对我方生效)
PS:这状态是“嘲讽”之类的吧

脚本是对敌我都生效
全体技能变为单体技能的目标为2号状态的首位持有者
[pre lang="ruby"]class Scene_Battle
  alias ori_set_target_battlers set_target_battlers
  def set_target_battlers(scope)
    ori_set_target_battlers(scope)
    if scope == 2
      if rand(100) < 50
        target = @target_battlers.find{|battler|battler.states.include?(2)}
        @target_battlers = [target] if target != nil        
      end
    end
  end
end
[/pre]

点评

认可答案,我很赞同  发表于 2020-12-27 13:38

评分

参与人数 2星屑 +100 赞 +2 收起 理由
RyanBern + 100 + 1 认可答案
taeckle + 1 大神威武!

查看全部评分

回复

使用道具 举报

梦石
0
星屑
9160
在线时间
466 小时
注册时间
2015-5-8
回帖
704
 楼主| 发表于 2020-12-27 15:47:34 | 显示全部楼层
RPGzh500223 发表于 2020-12-27 12:13
Game_Battler 的 状态 states(不是state) 是一个数组 并不是数值……
你该好好看脚本啊
这状态是对敌我双方 ...


请问下单独写我方(或敌方)队伍里是否有人有第2号状态的判断该怎么写呢? (可以写成$game_party.actors.any? {|x| x.state.include?(2)}吗?)

点评

大佬这个好像是双方都有效..单独写有必要吗?  发表于 2020-12-27 16:43
回复

使用道具 举报

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2020-12-27 16:45:11 | 显示全部楼层
本帖最后由 soulsaga 于 2020-12-27 16:50 编辑
taeckle 发表于 2020-12-27 15:47
请问下单独写我方(或敌方)队伍里是否有人有第2号状态的判断该怎么写呢?  (可以写成$game_party.actors.an ...


引用大佬的脚本

[pre lang="ruby"]class Scene_Battle
  alias ori_set_target_battlers set_target_battlers
  def set_target_battlers(scope)
    ori_set_target_battlers(scope)
    if scope == 2
      if rand(100) < 50
        target = @target_battlers.find{|battler|battler.states.include?(2) and battler.is_a?(Game_Actor)}#被攻击对像为角色时battler.is_a?(Game_Enemy) 为敌人时
        @target_battlers = [target] if target != nil
      end
    end
  end
end[/pre]

点评

是啊..改改  发表于 2020-12-27 16:50
不是这样写的...target = @target_battlers.find{|battler|battler.states.include?(2) and battler.is_a?(Game_Actor)}...至少也应该像这样  发表于 2020-12-27 16:49

评分

参与人数 1赞 +1 收起 理由
taeckle + 1 多谢大神指点!

查看全部评分

回复

使用道具 举报

梦石
0
星屑
9160
在线时间
466 小时
注册时间
2015-5-8
回帖
704
 楼主| 发表于 2020-12-27 17:07:36 | 显示全部楼层
taeckle 发表于 2020-12-27 15:47
请问下单独写我方(或敌方)队伍里是否有人有第2号状态的判断该怎么写呢?  (可以写成$game_party.actors.an ...


那在公共事件中判断我方队伍里是否有人有第2号状态该怎么写呢?
(可以写成$game_party.actors.any? {|x| x.state.include?(2)}吗?)

点评

那在公共事件中判断敌方队伍里是否有人有第2号状态是不是就写成这样了: $game_troop.enemies.any?{|x| x.states.include?(2)}  发表于 2020-12-28 01:48
$game_party.actors.any? {|x| x.states.include?(2)}  发表于 2020-12-27 17:59
回复

使用道具 举报

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
回帖
205
发表于 2020-12-27 18:46:19 | 显示全部楼层
本帖最后由 RPGzh500223 于 2020-12-27 18:47 编辑
taeckle 发表于 2020-12-27 17:07
那在公共事件中判断我方队伍里是否有人有第2号状态该怎么写呢?
(可以写成$game_party.actors.any? {|x|  ...


连续的操作,为了简单,才写成公共事件
你这只有一个判断……没必要写成公共事件吧
最多写成Game_Party的方法
  1. class Game_Party  
  2.   def have_state?(state_id)
  3.     return @actors.any?{|e|e.states.include?(state_id)}
  4.   end
  5. end
复制代码

使用的话  判断队伍是否有2号状态
$game_party.have_state?(2)

评分

参与人数 1赞 +1 收起 理由
taeckle + 1 精品文章

查看全部评分

回复

使用道具 举报

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
回帖
205
发表于 2020-12-27 18:58:58 | 显示全部楼层
等等 我没理解你的公共事件
(其实这判断你也可以写进事件指令)
你得把判断是否含有2号状态的之后"操作"写进去
不论指令还是脚本
大概
是否含有2号状态
  do something
else
  do someting
end

评分

参与人数 1赞 +1 收起 理由
taeckle + 1 精品文章

查看全部评分

回复

使用道具 举报

梦石
0
星屑
9160
在线时间
466 小时
注册时间
2015-5-8
回帖
704
 楼主| 发表于 2020-12-28 01:52:00 | 显示全部楼层
soulsaga 发表于 2020-12-27 16:45
引用大佬的脚本

class Scene_Battle

大神请问下按照这样写的话当我方全队(4人)全都有第2号状态时是不是敌方的群攻技能还是能群攻呐?
回复

使用道具 举报

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
回帖
205
发表于 2020-12-28 11:25:29 | 显示全部楼层
taeckle 发表于 2020-12-28 01:52
大神请问下按照这样写的话当我方全队(4人)全都有第2号状态时是不是敌方的群攻技能还是能群攻呐? ...

这脚本 就算我方全体都有2号状态
也只会被敌方的全体技能(RMXP默认技能范围里没有群攻)攻击存活的的首位携带2号状态的我方队员
第一次回复你时 已经说明这个问题了啊
其实你要是这状态只对我方有效,只要敌方获得不了这状态即可

下面的脚本是全体技能会攻击所有携带2号状态的目标,只对一方生效的话,参照楼上的回复修改
class Scene_Battle
  alias ori_set_target_battlers set_target_battlers
  def set_target_battlers(scope)
    ori_set_target_battlers(scope)
    if scope == 2
      if rand(100) < 50
        targets = @target_battlers.find_all{|battler|battler.states.include?(2)}
        @target_battlers = targets if targets != []        
      end
    end
  end
end
其实你可以先看看RMXP脚本与F1,累积一定的基础,再制作游戏
我从接触RMXP到现在都一年了,看F1,还是会发现原来理解错的东西或者新东西以及看不懂的东西
回复

使用道具 举报

梦石
0
星屑
34459
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2020-12-28 11:49:17 | 显示全部楼层
本帖最后由 芯☆淡茹水 于 2020-12-28 12:00 编辑

这样好理解些吧

  1. #==============================================================================
  2. class Scene_Battle
  3.   #--------------------------------------------------------------------------
  4.   alias xr_last_set_target_battlers set_target_battlers
  5.   def set_target_battlers(scope)
  6.     xr_last_set_target_battlers(scope)
  7.     result = @active_battler.is_a?(Game_Enemy) && # 攻击者是敌人
  8.              rand < 0.5 &&                         # 一半几率
  9.              scope == 2 &&                        # 用的是全体攻击
  10.              @target_battlers.size > 1 &&         # 实际被攻击角色个数大于 1
  11.              $game_party.actors.any?{|a| a.state?(2) } # 角色队伍有任意一个 2 号状态
  12.     # 从被攻击者中随机一个
  13.     @target_battlers = [@target_battlers[rand(@target_battlers.size)]] if result
  14.   end
  15. end
  16. #==============================================================================
复制代码

评分

参与人数 2星屑 +50 赞 +1 收起 理由
RyanBern + 50 我很赞同
taeckle + 1 大神代码,睥睨天下!

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部