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

Project1

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

[已经解决] 请教角色所穿的防具中若有防御第666号状态则add_state(666)无效

[复制链接]

Lv4.逐梦者

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

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

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

x
本帖最后由 taeckle 于 2021-12-31 18:33 编辑

我用了一个笨方法,在默认脚本Class Battler下def add_state(state_id, force = false)里面这么写的:

  1.     if state_id==666 #免疫第666号状态
  2.      if self.is_a?(Game_Actor)
  3.       armor1 = $data_armors[@armor1_id]
  4.       armor2 = $data_armors[@armor2_id]
  5.       armor3 = $data_armors[@armor3_id]
  6.       armor4 = $data_armors[@armor4_id]      
  7.       if armor1!=nil && armor1.guard_state_set.include?(state_id)
  8.       return
  9.       elsif armor2!=nil && armor2.guard_state_set.include?(state_id)
  10.       return
  11.       elsif armor3!=nil && armor3.guard_state_set.include?(state_id)
  12.       return
  13.       elsif armor4!=nil && armor4.guard_state_set.include?(state_id)
  14.       return      
  15.       end
  16.      end  
  17.     end
复制代码



请问大家有更简单的方法嘛?最好是用一行就解决这个问题,还请大家指点一二,多谢了!

Lv5.捕梦者

梦石
0
星屑
26239
在线时间
5352 小时
注册时间
2016-3-8
帖子
1655
2
发表于 2021-12-3 08:31:02 | 只看该作者
本帖最后由 alexncf125 于 2021-12-3 08:39 编辑
我只想说个理解误区,简单和复杂不是代码行数的决定的,你想要把循环式脚本写得简洁就可以用本楼得那些数组自带方法,随便搜下都有很多,什么each, map, find_all, any?等等在某些情况下的确可以让代码变成一行。本楼提供的运行逻辑和楼主你写的没有太大区别,主要式更懂得利用一些函数,理论上它并没有更简单。

评分

参与人数 2星屑 +50 +1 收起 理由
RyanBern + 50 认可答案
taeckle + 1 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42312
在线时间
7596 小时
注册时间
2009-7-6
帖子
13505

开拓者贵宾

3
发表于 2021-12-3 12:55:30 | 只看该作者
用楼上的写法画瓢就行了

不过如果只是想防御状态的话,根本不需要写脚本


创建一个免疫666号状态的状态,把它附加给目标就可以了

评分

参与人数 2星屑 +20 +1 收起 理由
RyanBern + 20 我很赞同
taeckle + 1 我很赞同

查看全部评分

RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
帖子
234
4
发表于 2021-12-3 15:59:46 | 只看该作者
已有 Game_Actor#state_guard?  ● 判定防御属性。
RPG::Armor#guard_state_set意思就是免疫状态(无论好坏)。
指令【更改状态】直接调用的 Game_Battlerr#add_state,该方法不考虑 RPG::Armor#guard_state_set。
不含公共事件事件的【技能】、【物品】直接调用的 Game_Battler#states_plus,该方法考虑 RPG::Armor#guard_state_set。

要么自行修改Game_Battler#add_state,要么合理运用状态的附加方式。
最后还是建议你先看看脚本吧……

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9163
在线时间
466 小时
注册时间
2015-5-8
帖子
866
5
 楼主| 发表于 2021-12-8 07:56:36 | 只看该作者
本帖最后由 taeckle 于 2021-12-8 07:58 编辑
alexncf125 发表于 2021-12-3 08:31
[fold= 我只想说个理解误区,简单和复杂不是代码行数的决定的,你想要把循环式脚本写得简洁就可以用本楼得 ...


报告大神,我们这个写法其实还有个漏洞,如果角色没装备任何防具的话会报错,所以应该改成这样:
  1.     if state_id==666 #免疫第666号状态
  2.      if self.is_a?(Game_Actor)
  3.       armor1 = $data_armors[@armor1_id]
  4.       armor2 = $data_armors[@armor2_id]
  5.       armor3 = $data_armors[@armor3_id]
  6.       armor4 = $data_armors[@armor4_id]      
  7.       if armor1!=nil && armor1.guard_state_set.include?(state_id)
  8.       return
  9.       elsif armor2!=nil && armor2.guard_state_set.include?(state_id)
  10.       return
  11.       elsif armor3!=nil && armor3.guard_state_set.include?(state_id)
  12.       return
  13.       elsif armor4!=nil && armor4.guard_state_set.include?(state_id)
  14.       return      
  15.       end
  16.      end  
  17.     end
复制代码


请问下这么改过之后还能用你在上面第2楼的方法只用一行表达出来吗?
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7981
在线时间
1183 小时
注册时间
2007-7-29
帖子
2055
6
发表于 2021-12-8 17:22:40 | 只看该作者
taeckle 发表于 2021-12-8 07:56
报告大神,我们这个写法其实还有个漏洞,如果角色没装备任何防具的话会报错,所以应该改成这样:
  1. armor1!=nil && armor1.guard_state_set.include?(state_id)
复制代码

你不是写出来了吗?
如果 n 对应的就是 @armorn_id把 armorn !=nil 直接用 $data_armors[n] != nill 来表达即可不是吗?
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9163
在线时间
466 小时
注册时间
2015-5-8
帖子
866
7
 楼主| 发表于 2021-12-8 21:21:29 | 只看该作者
enghao_lim 发表于 2021-12-8 17:22
你不是写出来了吗?
如果 n 对应的就是 @armorn_id把 armorn !=nil 直接用 $data_armors[n] != nill 来 ...


我是想问这个问题可不可以也用find_all, any?之类之类的句式,就像你在上面第2楼的方法只用一行那样
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-10 23:50

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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