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

Project1

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

[已经解决] 自定义状态

[复制链接]

Lv3.寻梦者

梦石
3
星屑
65
在线时间
200 小时
注册时间
2008-7-8
帖子
180
跳转到指定楼层
1
发表于 2015-9-6 00:27:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
期望效果:用27号技能造成伤害后记录伤害值x,并使使用者增加x点防御

主要问题还是不太清楚user的具体类是什么
目前是这样写的:
Game_BattleBase:
RUBY 代码复制
  1. def param(param_id)
  2.     value = param_base(param_id) + param_plus(param_id)
  3.     value *= param_rate(param_id)*param_buff_rate(param_id)
  4.     #======================================================
  5.     value += $加防 if param_id == 3 && $加防 && self.is_a?(RPG::Actor) && self.state?(17)
  6.     #======================================================
  7.     [[value, param_max(param_id)].min, param_min(param_id)].max.to_i
  8.   end

Game_Battler :
RUBY 代码复制
  1. def make_damage_value(user, item)
  2. value = item.damage.eval(user, self, $game_variables)
  3. value = apply_critical(value) if @result.critical
  4. value = apply_variance(value, item.damage.variance)
  5.     value = apply_guard(value)
  6.     if item.is_a?(RPG::Skill)
  7.       $加防 = value if user.is_a?(RPG::Actor) && item.id == 27
  8.     end
  9.     p user.class
  10.     @result.make_damage(value.to_i, item)
  11.   end

代码中用RPG::Actor作判断没有效果
对user的类不太了解,就加了个p user.class 进行测试,结果弹出来附件这个结果...
在Game_Battler里把RPG::Actor换成Game_Actor进行判断,$加防 不再是nil了,但是防御一直没加上去,param里Game_Actor和RPG::Actor都试过,没有用。

想问的是:
类似Game_Actor跟RPG::Actor这些类之间有什么区别?
怎么快速准确知道这些参数的类(我知道用.class方法,但是为什么会弹出这么多...不应该是单个类的名称吗)?
上面这段代码应该怎么改?

userclass.jpg (371.49 KB, 下载次数: 29)

userclass.jpg

Lv1.梦旅人

梦石
0
星屑
48
在线时间
784 小时
注册时间
2013-1-4
帖子
1102
2
发表于 2015-9-6 01:50:45 | 只看该作者
Game_Actor跟RPG::Actor的区别:
从RM的代码来看,RPG::Actor只负责数据存储这种东西大概跟一张数据表差不多(准确的说一个RPG::Actor对应着数据库里的一条记录才对。相应的$data_打头的全局变量才是对应一张表,这些变量都是数组,数组的值都是一个RPG::Actor实例)。RM里的数据是通过直接把对象序列化来存储的。这样的好处就是除了存储数据外还可以提供一些基础的方法(例如RPG::Class的exp_for_level方法)另外ruby对象序列化一方面本身可以提供类似加密的功能,以及不用单独编写数据的读入和存储。
而Game_Actor是游戏内的一个功能模块。他把数据对应的RPG::Actor里的数据读取出来加以处理,并提供一些Actor相关的功能和操作。还有Game_Actors,他和Game_Actor的关系大体和RPG::Actor 与$data_actors之间的关系差不多
至于你所说的参数 Game_Actor直接在脚本编辑器里就能看到对应代码,而RPG::Actor这一类的F1里的RGSS参考中游戏库的RPGVXAce 数据结构部分就是。相应的类都有其源码。中文版的F1帮助文档本版区的顶置就有。另外论坛上边的6R攻略里的技术指南里打开也有包括XP/VA/VX。里面还有Ruby的语法介绍部分以及一些教本教程
RM-GUI延期。。。最近被黑心老板压迫T_T
二次元少女的shitake,长着长脸,身高165,蓝色卷双马尾,FCUP,瞳色黑色,病气和御宅属性,是天才少女。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
3
星屑
65
在线时间
200 小时
注册时间
2008-7-8
帖子
180
3
 楼主| 发表于 2015-9-6 09:18:01 | 只看该作者
本帖最后由 acv255 于 2015-9-6 09:39 编辑
墨凌羽 发表于 2015-9-6 01:50
Game_Actor跟RPG::Actor的区别:
从RM的代码来看,RPG::Actor只负责数据存储这种东西大概跟一张数据表差不 ...


我知道这些定义可以在F1数据结构中找,
我想知道的是,看到user,item这些参数时,怎么知道它们是属于RPG::Skill,Game_Enemy,Game_Actor的呢?
make_damage_value里的user,我用.class查询出来的单次结果就是截图里那一大堆,Game_Actor是试出来的。

而param里的self, 我用self.class查的话整个战斗过程都只显示过Game_Enemy。用RPG::Actor和Game_Actor做判断都无法生效。

我在param里加入 p self.class unless self.is_a?(Game_Enemy)
RUBY 代码复制
  1. def param(param_id)
  2.     value = param_base(param_id) + param_plus(param_id)
  3.     value *= param_rate(param_id)*param_buff_rate(param_id)
  4.     #======================================================
  5.     p self.class unless self.is_a?(Game_Enemy)
  6.     value += $加防 if param_id == 3 && $加防 && self.is_a?(Game_Actor) && self.state?(17)
  7.     #======================================================
  8.     [[value, param_max(param_id)].min, param_min(param_id)].max.to_i
  9.   end

然后在make_damage_value里加入p user.param(3)来调用param方法
最后角色攻击时在屏幕上只显示了param(3)的值而没有class的信息,这意思是角色也是属于Game_Enemy类?

点评

是333。。。ORZ那个Game_Actor被我修改过 行数不对 Game_Actor的333行class方法 如果再不能明白 就该补补ruby的基础知识了  发表于 2015-9-6 11:20
我盯着看了很久,还是没找出你给的这个答复跟我的问题之间的联系...  发表于 2015-9-6 10:42
你真的有看代码吗。。。。Game_Actor339不解释 【形参就不能推了吗 不会找调用的地方区看?  发表于 2015-9-6 10:06
问题是user是形式参数啊,没有他定义的地方= =,而且你看我回帖中的描述不觉得整个过程有点匪夷所思吗...  发表于 2015-9-6 09:51
读代码 全部源码手里都有 直接看不就成了 最简单的直接全局查找方法名找他的定义的地方  发表于 2015-9-6 09:40
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
3
星屑
65
在线时间
200 小时
注册时间
2008-7-8
帖子
180
4
 楼主| 发表于 2015-9-6 11:35:05 | 只看该作者
墨凌羽 发表于 2015-9-6 01:50
Game_Actor跟RPG::Actor的区别:
从RM的代码来看,RPG::Actor只负责数据存储这种东西大概跟一张数据表差不 ...

这个只能解释“为什么用user.class会冒出来这么一大堆东西”这个小问题,但是我贴的这个问题还是没解决啊...
Battler里user这个形参一直往上推推到个叫attacker的形参就断了
BattlerBase里self.class一直只显示Game_Enemy

我现在只想知道,param里的判断条件要怎么写才能正常进行“是拥有该状态的玩家”这个判断
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
719
在线时间
684 小时
注册时间
2009-5-29
帖子
461
5
发表于 2015-9-6 12:00:42 手机端发表。 | 只看该作者
本帖最后由 saturnfjh 于 2015-9-6 12:02 编辑

user.class返回的是职业记录表。

unless user.enemy?

应该就可以满足要求了吧

另外user是使用者,self是目标

点评

总之非常感谢  发表于 2015-9-6 15:53
因为我手头暂时没有VA,所以没有亲测,但是我以前用过这种方法,这样可以省掉很多角色和敌人判定的麻烦  发表于 2015-9-6 14:29
虽然没搞懂问题出在哪,但还是神奇地解决了...  发表于 2015-9-6 14:04
既然这样不如换个思路。直接在class Game_Actor里面重新定义param就好了: def def; n=super; n+=xxxxxxxx; n;end  发表于 2015-9-6 13:49
这个判断跟is_a?(Game_Enemy)是一码事...在make_damage_value里可以,在param中,所有self.class的返回值全是Game_Enemy,所以用enemy?判断就是全部不通过...  发表于 2015-9-6 13:01

评分

参与人数 1星屑 +100 收起 理由
taroxd + 100 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
120
在线时间
486 小时
注册时间
2007-5-27
帖子
807
6
发表于 2015-9-6 15:10:29 | 只看该作者
……
这个效果用技能公式+变量再配合公共事件就能实现了吧……
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
3
星屑
65
在线时间
200 小时
注册时间
2008-7-8
帖子
180
7
 楼主| 发表于 2015-9-6 15:52:46 | 只看该作者
紫苍焰 发表于 2015-9-6 15:10
……
这个效果用技能公式+变量再配合公共事件就能实现了吧……

光要获取技能最终造成的伤害值就很难靠数据库实现了吧

点评

这个获得的只是第一步的伤害值,要获取经过爆击等判定运算最终的值的话我只知道脚本能做到=,= 反正已经用脚本解决了,就不纠结这些了  发表于 2015-9-6 16:09
其实也可以,公式这么写: n=xxxx(计算公式);a.add_state(17);$game_variables[v]=n;n 应该就可以了?没试过,你可以看看  发表于 2015-9-6 15:59
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
80
在线时间
132 小时
注册时间
2014-5-7
帖子
148
8
发表于 2015-9-6 20:45:16 | 只看该作者
想获得最终伤害值用@result.hp_damage,
然后建议在item_user_effect里面处理。

点评

下午已经解决啦,谢谢  发表于 2015-9-6 21:53
「私が来た!  私が見た!  ならば次わ買つだけのこと!」
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 06:19

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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