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

Project1

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

[有事请教] 仿VA自定义技能公式

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1066
在线时间
172 小时
注册时间
2010-10-11
帖子
23
跳转到指定楼层
1
发表于 2019-5-1 23:56:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
首先附上自己瞎写的脚本,这个是配合沉影不器大大的读取备注栏脚本写的,思路大概就是自己定义攻防精神系数来自定义技能伤害(仿VA MV)
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● VX版重新定义技能  by ZYYNOV  需要配合读取备注栏脚本使用
  3.   #     power => 技能基础伤害
  4.   #     atk_ef => 攻击系数
  5.   #     def_ef => 防御系数
  6.   #     spi_ef => 精神攻击系数
  7.   #     mdef_ef => 精神防御系数
  8.   # 按照这个格式写到技能的备注栏中,就可以自己定义技能伤害公式了。
  9.   #--------------------------------------------------------------------------
  10. class Game_Battler
  11.   def make_obj_damage_value(user, obj)
  12.     damage = obj.read_note('power') # 基础计算
  13.     if damage > 0                                   # 若伤害为正
  14.       damage += user.atk * obj.read_note('atk_ef') * obj.atk_f / 100      # 使用者攻击力关系度
  15.       damage += user.spi * obj.read_note('spi_ef') * obj.spi_f / 100      # 使用者精神力关系度
  16.       unless obj.ignore_defense                     # 除非无视防御力
  17.         damage -= self.def * obj.read_note('def_ef') * obj.atk_f / 100    # 目标攻击力关系度
  18.         damage -= self.spi * obj.read_note('mdef_ef') * obj.spi_f / 100    # 目标精神力关系度
  19.       end
  20.       damage = 0 if damage < 0                      # 设负数伤害为0
  21.     elsif damage < 0                                # 若伤害为负
  22.       damage -= user.atk * 4 * obj.atk_f / 100      # 使用者攻击力关系度
  23.       damage -= user.spi * 2 * obj.spi_f / 100      # 使用者精神力关系度
  24.     end
  25.     damage *= elements_max_rate(obj.element_set)    # 属性校正
  26.     damage /= 100
  27.     damage = apply_variance(damage, obj.variance).to_i# 分散度
  28.     damage = apply_guard(damage)                    # 防御校正
  29.     if obj.damage_to_mp  
  30.       @mp_damage = damage                           # 伤害魔力
  31.     else
  32.       @hp_damage = damage                           # 伤害体力
  33.     end
  34.   end
  35. end


目前测试下来暂时没什么问题,唯一问题就是,假如我要实现角色的最大生命这些特殊属性作为技能伤害,那备注栏写法理论来说应该是
atk_ef = 0
def_ef = 0
spi_ef = 0
mdef_ef = 0
power = user.maxhp
但是这样肯定出错,毕竟读取备注栏的module没有定义user这个东西,但user在Game_Battler里面是定义过的,所以现在很尴尬,如果用全局变量比如power =  $game_actors[1].maxhp
的话肯定是没问题的,但这样只能一个角色用用这个技能了......

1.PNG (74.52 KB, 下载次数: 9)

1.PNG

Lv5.捕梦者

梦石
10
星屑
39440
在线时间
1914 小时
注册时间
2010-11-14
帖子
3315

R考场第七期纪念奖

2
发表于 2019-5-2 00:34:28 | 只看该作者
直接用eval有什么不好
尽管安全性差一点,但VA的实现就是eval(只不过稍微加以封装)

既然已经能读注释了,就自己定义一个正则,直接读取字符串用来eval

评分

参与人数 1+1 收起 理由
guoxiaomi + 1 塞糖

查看全部评分

用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1066
在线时间
172 小时
注册时间
2010-10-11
帖子
23
3
 楼主| 发表于 2019-5-2 00:50:54 | 只看该作者
KB.Driver 发表于 2019-5-2 00:34
直接用eval有什么不好
尽管安全性差一点,但VA的实现就是eval(只不过稍微加以封装)

谢谢啦!差不多搞定了已经~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-19 11:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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