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

Project1

 找回密码
 注册会员
搜索

自定义状态

查看数: 2040 | 评论数: 7 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2015-9-6 00:27

正文摘要:

期望效果:用27号技能造成伤害后记录伤害值x,并使使用者增加x点防御 主要问题还是不太清楚user的具体类是什么 目前是这样写的: Game_BattleBase: RUBY 代码复制def param(param_id&# ...

回复

Silentever 发表于 2015-9-6 20:45:16
想获得最终伤害值用@result.hp_damage,
然后建议在item_user_effect里面处理。

点评

下午已经解决啦,谢谢  发表于 2015-9-6 21:53
acv255 发表于 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
紫苍焰 发表于 2015-9-6 15:10:29
……
这个效果用技能公式+变量再配合公共事件就能实现了吧……
saturnfjh 发表于 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 我很赞同

查看全部评分

acv255 发表于 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里的判断条件要怎么写才能正常进行“是拥有该状态的玩家”这个判断
acv255 发表于 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
墨凌羽 发表于 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的语法介绍部分以及一些教本教程
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

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

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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