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

Project1

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

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

[复制链接]

Lv4.逐梦者

梦石
0
星屑
9163
在线时间
466 小时
注册时间
2015-5-8
帖子
866
跳转到指定楼层
1
发表于 2020-12-27 05:16:40 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

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


还请大家指点指点,多谢了!

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

13
发表于 2020-12-28 23:24:12 | 只看该作者
另一种方案是按照字面意思,在对方行动前把技能改成群攻就行了。在update_phase4_step2之前执行:
  1. $origin_skill = Marshal.dump($data_skills[100])
  2. if $game_party.actors.find{|a| a.state?(2)}
  3.   if $data_skills[100].scope == 2
  4.     $data_skills[100].scope = 1
  5.   end
  6. end
复制代码

然后在update_phase4_step5之后执行:
  1. $data_skills[100] = $origin_skill
复制代码

评分

参与人数 2星屑 +50 +1 收起 理由
RyanBern + 50 我很赞同
taeckle + 1 多谢大神指点!

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
帖子
234
12
发表于 2020-12-28 14:15:37 | 只看该作者
本帖最后由 RPGzh500223 于 2020-12-28 14:29 编辑
RPGzh500223 发表于 2020-12-28 12:17
假如@target_battlers为空之前就胜负判定,结束战斗了
不从@active_battler角度写
是因为担心“混乱”, ...


我表达错了  "@target_battlers为空"
我想表达的意思是 @target_battlers.empty?
不是@terget_battlers == nil……

好尴尬我把@target_battlers.size > 1 看成  >0

评分

参与人数 1+1 收起 理由
taeckle + 1 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
帖子
234
11
发表于 2020-12-28 12:17:58 | 只看该作者
本帖最后由 RPGzh500223 于 2020-12-28 12:24 编辑


假如@target_battlers为空之前就胜负判定,结束战斗了
不从@active_battler角度写
是因为担心“混乱”,尽管RMXP默认的限制行动没有 “技能攻击队友”

我都忘了Game_Battler.state? 方法了
更简单了

点评

判断目标对象个数是否大于1,不是为空。如果目标只有一个,那就没必要转换全体到单体了。  发表于 2020-12-28 13:32
限制越多,越不容易混乱。  发表于 2020-12-28 13:30
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33412
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

10
发表于 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 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
帖子
234
9
发表于 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,还是会发现原来理解错的东西或者新东西以及看不懂的东西
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9163
在线时间
466 小时
注册时间
2015-5-8
帖子
866
8
 楼主| 发表于 2020-12-28 01:52:00 | 只看该作者
soulsaga 发表于 2020-12-27 16:45
引用大佬的脚本

class Scene_Battle

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

使用道具 举报

Lv4.逐梦者

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

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
帖子
234
6
发表于 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 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9163
在线时间
466 小时
注册时间
2015-5-8
帖子
866
5
 楼主| 发表于 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
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-10 21:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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