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

Project1

 找回密码
 注册会员
搜索
楼主: 救世小树
打印 上一主题 下一主题

[原创发布] 我跟你讲,VA的计算公式,赞!通过公式实现一些功能

[复制链接]

Lv1.梦旅人

梦石
0
星屑
49
在线时间
276 小时
注册时间
2011-6-5
帖子
133
21
 楼主| 发表于 2013-5-20 19:52:05 | 只看该作者
本帖最后由 救世小树 于 2013-5-20 19:54 编辑
lirn 发表于 2013-5-20 18:04
总结一下使用心得。

如果设置了两个以上的判断公式(value *= ),那么只会有一个起效果,所以如果你想多 ...


关于暴击:
这里是我先前搞错了,额,不好意思了,仔细看了下 Game_Battler 中的 item_apply ,发现计算是否暴击是在计算伤害之前,
而计算暴击修正只是将伤害根据是否暴击乘了个倍数。。

也就是说是否是暴击在计算伤害前就已经确定了。。。
这样的话想做出你所需要的效果,纯事件就简单得多了。。。
我记得以前看过一个帖子。。本体好像是使用技能前显示图片,
他说事件当中有一个强制战斗指令的,然后我就默默记下了,还有状态法巧解“对xxx无效”的做法也是从那里学的:
首先,角色使用的技能(马甲技能)

还有真正使用的本体技能

然后,相关的状态(加暴击的状态就不上了)

和最重要的公共事件

黄色高亮是重点
测试效果拔群,不算太复杂,值得一试。

P.S.默认脚本公共事件的判定一定是在最后的。

关于法力燃烧;
这个是先算技能能烧的mp,然后再算现有的mp够不够,缺多少mp,不够的mp用hp扣,不是特别方便设双公式,
要设定也可以,那肯定是首先要算烧多少mp,主要就是算来算去的问题了。


  1. if item.is_a?(RPG::Skill) && item.id == 140
  2.   tem = [@mp_damage - @battler.mp ,0].max
  3.   $法力燃烧hp = (tem*(1+self.mhp/200.0)).to_i      #以目标的hp上限修正法力燃烧的去血量200点变为原来的2倍,400点3倍等等
  4.   $法力燃烧hp = (tem*100.0/(100+self.mdf)).to_i   #以目标魔防修正去血量,100点魔防变为原来一半,200点变1/3、、、
  5.   #等等等等,最简单的就是 $法力燃烧hp=(1.5*tem).to_i
  6. else
  7.   $法力燃烧hp = 0
  8. end
复制代码
研表究明,汉字的序顺并不定一能影阅响读,比如当你看完这话句后,才发这现里的字全是都乱的
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1019 小时
注册时间
2012-4-25
帖子
799
22
发表于 2013-5-20 23:04:47 | 只看该作者
crow2006 发表于 2013-5-11 23:53
楼主的例子用纯事件就可以实现,好比我在我的游戏中设置的“感电状态”,搭配横版“0回合解除”,可以实现 ...

我这个是当附加必杀,既然是先判断必杀,那么我就在判断必杀前先加上状态,于是我尝试在这里增加判断条件,
  1. #--------------------------------------------------------------------------
  2.   # ● 应用技能/物品的效果
  3.   #--------------------------------------------------------------------------

  4.   def item_apply(user, item)             
  5.     if item.is_a?(RPG::Skill) && item.id ==87
  6.           if user.agi >= (self.agi * 1.2)
  7.             user.add_state(457).to_i
  8.           end
  9.         end
  10.     @result.clear
复制代码
这样就能做到可以条件附加必杀,至少在我通过更改敏捷的更改发现必杀的变化,但是如果是这种的话,那就必须要通过公共事件解除临时状态,如果是回合结束时候自动解除,那么下一回合就会出现无法附加临时状态的情况。


另外,关于法力燃烧,我想我们之间的理解不一样吧。我的意思是这样的。

技能A=======》造成MP伤害

如果对象B附带某状态C时。

技能A======》造成MP伤害+HP伤害。

我是希望,这两个伤害都可以通过各自公式确定。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
301
在线时间
573 小时
注册时间
2005-10-27
帖子
1164
23
发表于 2013-5-22 02:18:39 | 只看该作者
能不能利用这个做出技能使用方在某种状态下,技能的威力有加成的效果呢?

点评

4L+1,主楼也有,状态判断用“a.state?(44) ? 公式1 : 公式2” 或“(a.state?(44) ? 1.5 : 1)*(公式)”  发表于 2013-5-24 10:57
4楼?最好爬楼都看完,因为当中有些实际操作问题  发表于 2013-5-22 10:12
认真地猥琐,猥琐地认真
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
276 小时
注册时间
2011-6-5
帖子
133
24
 楼主| 发表于 2013-5-24 10:51:29 | 只看该作者
本帖最后由 救世小树 于 2013-5-24 10:53 编辑
lirn 发表于 2013-5-20 23:04
我这个是当附加必杀,既然是先判断必杀,那么我就在判断必杀前先加上状态,于是我尝试在这里增加判断条件 ...

另外,关于法力燃烧,我想我们之间的理解不一样吧。我的意思是这样的。

技能A=======》造成MP伤害

如果对象B附带某状态C时。

技能A======》造成MP伤害+HP伤害。

我是希望,这两个伤害都可以通过各自公式确定。


这样就好做了,首先新建一个技能

然后脚本Game_Battler

最后测试

成功,28号状态和145号技能自己设定吧;
相关脚本:

  1.   def make_damage_value(user, item)
  2.     value = item.damage.eval(user, self, $game_variables)
  3.     if item.is_a?(RPG::Skill)
  4.       case item.id
  5.       when 145
  6.         if self.state?(28)
  7.            make_damage_extra(user,item)
  8.         end
  9.       end
  10.     end
  11.     value *= item_element_rate(user, item)
  12.     value *= pdr if item.physical?
  13.     value *= mdr if item.magical?
  14.     value *= rec if item.damage.recover?
  15.     value = apply_critical(value) if @result.critical
  16.     value = apply_variance(value, item.damage.variance)
  17.     value = apply_guard(value)
  18.     @result.make_damage(value.to_i, item)
  19.   end
  20.   def make_damage_extra(user,item)
  21.     if item.is_a?(RPG::Skill)
  22.       case item.id
  23.       when 145
  24.         value = user.mat - self.mdf
  25.         #↑↑↑↑↑↑↑↑写hp伤害的公式,底下的各种修正很据情况可删可留
  26.         #user→a  self→b
  27.         value *= item_element_rate(user, item)
  28.         value *= pdr if item.physical?
  29.         value *= mdr if item.magical?
  30.         value *= rec if item.damage.recover?
  31.         value = apply_critical(value) if @result.critical
  32.         value = apply_variance(value, item.damage.variance)
  33.         value = apply_guard(value)
  34.       end
  35.       @result.hp_damage = value.to_i
  36.     end
  37.   end
复制代码
研表究明,汉字的序顺并不定一能影阅响读,比如当你看完这话句后,才发这现里的字全是都乱的
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
301
在线时间
573 小时
注册时间
2005-10-27
帖子
1164
25
发表于 2013-5-26 03:57:06 | 只看该作者
谢谢大家的指教~俺已经利用这里的资料成功做出了之前想破头都想不到实现方法的东西

点评

偶尔用屁股思考一下会有意外收获的哦  发表于 2013-5-26 09:47
认真地猥琐,猥琐地认真
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
120
在线时间
486 小时
注册时间
2007-5-27
帖子
807
26
发表于 2013-6-4 07:06:24 | 只看该作者
……
那个,问一下,附加状态里有个物理攻击100%,记得默认的1号技能攻击就有这个……
这东西实现的是什么效果啊?

点评

好的,多谢……我试试看能不能找出这东西的具体作用……  发表于 2013-6-5 07:59
物理技能也不需要加这个,只要把命中类型设置成物理,伤害公式设计和物理防御负相关就行,说实话这个状态我还没在技能里用过  发表于 2013-6-4 20:46
……那样啊……是不是物理技能都可以添加上这个东西呢?  发表于 2013-6-4 13:50
那个状态是第0号状态,看了下脚本,跟判断攻击是否有效有关(不知道说得对不对),好像不是什么重要的东西。(欢迎大家指正)  发表于 2013-6-4 12:34
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
120
在线时间
486 小时
注册时间
2007-5-27
帖子
807
27
发表于 2013-7-2 08:23:42 | 只看该作者
……
好的,继续在这里提问……
如何做到用目标为敌人的技能同时给自己附加某种状态……

点评

……哦哦!多谢!嗯,这个不知道给怪物用行不行……  发表于 2013-7-2 17:35
这个就很简单了,公式写 a.mat-b.mdf+a.add_state(state_id).to_i 【前面伤害公式随便改,state_id是附加的状态id】【还可以直接用公共事件】  发表于 2013-7-2 12:46

评分

参与人数 1星屑 +15 收起 理由
vince3725 + 15 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
189 小时
注册时间
2013-1-26
帖子
72
28
发表于 2013-7-5 09:46:22 | 只看该作者
本帖最后由 ninesound 于 2013-7-5 09:47 编辑
救世小树 发表于 2013-5-24 10:51
这样就好做了,首先新建一个技能

然后脚本Game_Battler


成功,28号状态和145号技能自己设定吧;
相关脚本:

  def make_damage_value(user, item)
    value = item.damage.eval(user, self, $game_variables)
    if item.is_a?(RPG::Skill)
      case item.id
      when 145
        if self.state?(28)
           make_damage_extra(user,item)
        end
      end
    end
    value *= item_element_rate(user, item)
    value *= pdr if item.physical?
    value *= mdr if item.magical?
    value *= rec if item.damage.recover?
    value = apply_critical(value) if @result.critical
    value = apply_variance(value, item.damage.variance)
    value = apply_guard(value)
    @result.make_damage(value.to_i, item)
  end
  def make_damage_extra(user,item)
    if item.is_a?(RPG::Skill)
      case item.id
      when 145
        value = user.mat - self.mdf
        #↑↑↑↑↑↑↑↑写hp伤害的公式,底下的各种修正很据情况可删可留
        #user→a  self→b
        value *= item_element_rate(user, item)
        value *= pdr if item.physical?
        value *= mdr if item.magical?
        value *= rec if item.damage.recover?
        value = apply_critical(value) if @result.critical
        value = apply_variance(value, item.damage.variance)
        value = apply_guard(value)
      end
      @result.hp_damage = value.to_i
    end
  end


请问如果是多个技能都要这样子写该怎么办呢?

我照你的方法添加第二个技能
第一个就失效了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
276 小时
注册时间
2011-6-5
帖子
133
29
 楼主| 发表于 2013-7-5 11:16:51 | 只看该作者
ninesound 发表于 2013-7-5 09:46
请问如果是多个技能都要这样子写该怎么办呢?

我照你的方法添加第二个技能

那就再来一组状态/技能

  1.   def make_damage_value(user, item)
  2.     value = item.damage.eval(user, self, $game_variables)
  3.     if item.is_a?(RPG::Skill)
  4.       case item.id
  5.       when 145
  6.         if self.state?(28)
  7.            make_damage_extra(user,item)
  8.         end
  9.       ####################
  10.       when 146
  11.         if self.state?(29)
  12.            make_damage_extra(user,item)
  13.         end
  14.       ####################
  15.       end
  16.     end
  17.     value *= item_element_rate(user, item)
  18.     value *= pdr if item.physical?
  19.     value *= mdr if item.magical?
  20.     value *= rec if item.damage.recover?
  21.     value = apply_critical(value) if @result.critical
  22.     value = apply_variance(value, item.damage.variance)
  23.     value = apply_guard(value)
  24.     @result.make_damage(value.to_i, item)
  25.   end
  26.   def make_damage_extra(user,item)
  27.     if item.is_a?(RPG::Skill)
  28.       case item.id
  29.       when 145,146 #加上另一个技能id
  30.         value = user.mat - self.mdf if self.state?(28)    #写出28号状态对应145技能的hp伤害公式【mp公式在技能面板写】
  31.         value = 2*user.mat - self.mdf if self.state?(29)#写出29号状态对应146技能的hp伤害公式【mp公式在技能面板写】
  32.         #↑↑↑↑↑↑↑↑写hp伤害的公式,底下的各种修正很据情况可删可留
  33.         #user→a  self→b
  34.         value *= item_element_rate(user, item)
  35.         value *= pdr if item.physical?
  36.         value *= mdr if item.magical?
  37.         value *= rec if item.damage.recover?
  38.         value = apply_critical(value) if @result.critical
  39.         value = apply_variance(value, item.damage.variance)
  40.         value = apply_guard(value)
  41.       end
  42.       @result.hp_damage = value.to_i
  43.     end
  44.   end
复制代码
研表究明,汉字的序顺并不定一能影阅响读,比如当你看完这话句后,才发这现里的字全是都乱的
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
189 小时
注册时间
2013-1-26
帖子
72
30
发表于 2013-7-5 12:56:53 | 只看该作者
救世小树 发表于 2013-7-5 11:16
那就再来一组状态/技能

谢谢回答
可是还有一些问题

when 235,236
        value = 公式1 if self.state?(29)   
        value = 公式2 if self.state?(29)

我是235,236两个技能
而我的目标状态都要同一个 29

不同技能打下去会不同公式

可是我235和236两个技能都只会用公式2去运算而已
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-22 09:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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