Project1
标题: 自定义状态 [打印本页]
作者: acv255 时间: 2015-9-6 00:27
标题: 自定义状态
期望效果:用27号技能造成伤害后记录伤害值x,并使使用者增加x点防御
主要问题还是不太清楚user的具体类是什么
目前是这样写的:
Game_BattleBase:
def param(param_id)
value = param_base(param_id) + param_plus(param_id)
value *= param_rate(param_id)*param_buff_rate(param_id)
#======================================================
value += $加防 if param_id == 3 && $加防 && self.is_a?(RPG::Actor) && self.state?(17)
#======================================================
[[value, param_max(param_id)].min, param_min(param_id)].max.to_i
end
def param(param_id)
value = param_base(param_id) + param_plus(param_id)
value *= param_rate(param_id)*param_buff_rate(param_id)
#======================================================
value += $加防 if param_id == 3 && $加防 && self.is_a?(RPG::Actor) && self.state?(17)
#======================================================
[[value, param_max(param_id)].min, param_min(param_id)].max.to_i
end
Game_Battler :
def make_damage_value(user, item)
value = item.damage.eval(user, self, $game_variables)
value = apply_critical(value) if @result.critical
value = apply_variance(value, item.damage.variance)
value = apply_guard(value)
if item.is_a?(RPG::Skill)
$加防 = value if user.is_a?(RPG::Actor) && item.id == 27
end
p user.class
@result.make_damage(value.to_i, item)
end
def make_damage_value(user, item)
value = item.damage.eval(user, self, $game_variables)
value = apply_critical(value) if @result.critical
value = apply_variance(value, item.damage.variance)
value = apply_guard(value)
if item.is_a?(RPG::Skill)
$加防 = value if user.is_a?(RPG::Actor) && item.id == 27
end
p user.class
@result.make_damage(value.to_i, item)
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)
作者: 墨凌羽 时间: 2015-9-6 01:50
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的语法介绍部分以及一些教本教程
作者: acv255 时间: 2015-9-6 09:18
本帖最后由 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)
def param(param_id)
value = param_base(param_id) + param_plus(param_id)
value *= param_rate(param_id)*param_buff_rate(param_id)
#======================================================
p self.class unless self.is_a?(Game_Enemy)
value += $加防 if param_id == 3 && $加防 && self.is_a?(Game_Actor) && self.state?(17)
#======================================================
[[value, param_max(param_id)].min, param_min(param_id)].max.to_i
end
def param(param_id)
value = param_base(param_id) + param_plus(param_id)
value *= param_rate(param_id)*param_buff_rate(param_id)
#======================================================
p self.class unless self.is_a?(Game_Enemy)
value += $加防 if param_id == 3 && $加防 && self.is_a?(Game_Actor) && self.state?(17)
#======================================================
[[value, param_max(param_id)].min, param_min(param_id)].max.to_i
end
然后在make_damage_value里加入p user.param(3)来调用param方法
最后角色攻击时在屏幕上只显示了param(3)的值而没有class的信息,这意思是角色也是属于Game_Enemy类?
作者: acv255 时间: 2015-9-6 11:35
墨凌羽 发表于 2015-9-6 01:50
Game_Actor跟RPG::Actor的区别:
从RM的代码来看,RPG::Actor只负责数据存储这种东西大概跟一张数据表差不 ...
这个只能解释“为什么用user.class会冒出来这么一大堆东西”这个小问题,但是我贴的这个问题还是没解决啊...
Battler里user这个形参一直往上推推到个叫attacker的形参就断了
BattlerBase里self.class一直只显示Game_Enemy
我现在只想知道,param里的判断条件要怎么写才能正常进行“是拥有该状态的玩家”这个判断
作者: saturnfjh 时间: 2015-9-6 12:00
本帖最后由 saturnfjh 于 2015-9-6 12:02 编辑
user.class返回的是职业记录表。
unless user.enemy?
应该就可以满足要求了吧
另外user是使用者,self是目标
作者: 紫苍焰 时间: 2015-9-6 15:10
……
这个效果用技能公式+变量再配合公共事件就能实现了吧……
作者: acv255 时间: 2015-9-6 15:52
紫苍焰 发表于 2015-9-6 15:10
……
这个效果用技能公式+变量再配合公共事件就能实现了吧……
光要获取技能最终造成的伤害值就很难靠数据库实现了吧
作者: Silentever 时间: 2015-9-6 20:45
想获得最终伤害值用@result.hp_damage,
然后建议在item_user_effect里面处理。
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |