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

Project1

 找回密码
 注册会员
搜索
楼主: salvareless
打印 上一主题 下一主题

[已经解决] 求教双持角色平砍时分别计算左右手伤害的脚本

[复制链接]

Lv2.观梦者

梦石
0
星屑
642
在线时间
165 小时
注册时间
2012-4-18
帖子
264
11
 楼主| 发表于 2013-11-1 11:09:04 | 只看该作者
喵呜喵5这个公式我昨天看另一个将伤害计算的帖子里面提到过这种分别是两套公式的想法,但是我不知道怎么写判断是不是二刀流。先3Q一个。

但是这个怎么获取角色原本的攻击力和单独每把武器的攻击加成啊?

最后写成这样:return (总攻击力-右手武器)*(1-护甲减免) if a.dual_wield?;总攻击力*(1-护甲减免)

但是这样写其实就相当于用左手的武器攻击了两次。万一左右手的武器攻击力差距比较大怎么办啊。继续求教。
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21631
在线时间
9415 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

12
发表于 2013-11-1 12:38:48 | 只看该作者
salvareless 发表于 2013-11-1 11:09
喵呜喵5这个公式我昨天看另一个将伤害计算的帖子里面提到过这种分别是两套公式的想法,但是我不知道怎么写 ...

所以我一开始就没搞懂你打算怎么计算攻击力……左手第一刀右手第二刀加起来?那和单次攻击没什么区别吧……伤害公式直接除二不就结了……
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
642
在线时间
165 小时
注册时间
2012-4-18
帖子
264
13
 楼主| 发表于 2013-11-1 12:47:19 | 只看该作者
喵呜喵5 发表于 2013-11-1 12:38
所以我一开始就没搞懂你打算怎么计算攻击力……左手第一刀右手第二刀加起来?那和单次攻击没什么区别吧… ...

是这样的,你本身有300攻击,左手武器200攻击,右手武器260点。如果不改就是两道760,一共1520。如果按你说的除以2,就是760.如果按我想的,左手一刀(300+200),右手一刀(300+260),一共是1060。这下清楚了吧。如果两手武器一样攻,return (总攻击力-右手武器)*(1-护甲减免) if a.dual_wield?;总攻击力*(1-护甲减免)的结果和我想的方式结果就是一样的,如果不一样攻就会不一样。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3298
在线时间
1120 小时
注册时间
2009-4-15
帖子
815
14
发表于 2013-11-1 12:58:12 | 只看该作者
salvareless 发表于 2013-11-1 12:47
是这样的,你本身有300攻击,左手武器200攻击,右手武器260点。如果不改就是两道760,一共1520。如果按你 ...

你说我自大?也不知道是谁自大。你是觉得你会脚本所以你比我流逼是吗?
首先很不好意思我已经把你这个需求用脚本写出来了;第二,写的时候就注意到了你的2个平砍加起来和一次伤害就多了个自身攻击的区别;第三,11楼说不知道怎么判定二刀流,13楼才写dual_wield?,真是笑话,二刀流都能说不知道判定的你有什么好意思说别人一定不如你?第四,我一开始就跟你在纠结技能伤害公式,平砍也是技能的一种你懂不懂???我一开始就说了平砍伤害公式设定,你自己没看懂就说我自大???你有好好看吗?有好好理解我的意思吗?你是觉得平砍不是技能的一种所以没有办法改变伤害设定吗?
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3298
在线时间
1120 小时
注册时间
2009-4-15
帖子
815
15
发表于 2013-11-1 13:04:50 | 只看该作者
本帖最后由 tan12345 于 2013-11-1 13:18 编辑

脚本我是不会给你的,实现方法可以告诉你,你比我流逼自己写。(虽然连贴了,但是还是要告诉你。)
class Scene_Battle类下的use item方法
  1. alias aaa use_item
  2.   def use_item
  3.     check_left_targets#判定是否可以执行二刀流,比如如果第一刀敌人就死了,那就别执行了。
  4.     aaa
  5.     execute_left_actions#如果是双持武器,并且第一回合执行普通攻击,而且敌人没死,强制执行左手刀
  6.   end
复制代码
这个只是脚本的一部分,至于多出来的2个方法,你看不起我,自己写吧。
另外,除了在技能公式里区分各职业的普通攻击判定,还可以通过
RUBY 代码复制
  1. class Game_Actor < Game_Battler
  2.   def attack_skill_id
  3.     case @class_id
  4.     when 3#假设职业id=3代表盗贼职业,就是双持武器的职业
  5.       return 340#将双持武器的职业的普通攻击替换成340号技能
  6.     else
  7.       return 1#否则为1号
  8.     end
  9.   end
  10. end

来实现平砍伤害区分。
================================
再说的明白点,双持武器,右手平砍技能id使用340,左手平砍技能id使用341,右手的平砍技能伤害设定自己定,左手的平砍技能伤害自己定,只要这2个设定(就是340号技能、341号技能)比其他职业的平砍(默认1号)伤害低就合理了,平衡了。然后修改默认脚本将双持武器的显示动画分开,最后我给你的脚本1里,如果使用者发动的是340号技能(右手攻击),并且敌人没死,那么强制执行左手攻击(341号技能),说来绕去核心还是右手武器伤害和左手武器伤害,你自己不明白就不"礼貌"和"嘴贱",老觉得你比给你提供思路的人流逼,就你会脚本我们都是脚本盲。
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21631
在线时间
9415 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

16
发表于 2013-11-1 13:15:08 | 只看该作者
salvareless 发表于 2013-11-1 12:47
是这样的,你本身有300攻击,左手武器200攻击,右手武器260点。如果不改就是两道760,一共1520。如果按你 ...

那就把
((总攻击–右手)+(总攻击–左手)/2)
作为角色的最终攻击力计算伤害
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3298
在线时间
1120 小时
注册时间
2009-4-15
帖子
815
17
发表于 2013-11-1 13:21:50 | 只看该作者
salvareless 发表于 2013-11-1 12:47
是这样的,你本身有300攻击,左手武器200攻击,右手武器260点。如果不改就是两道760,一共1520。如果按你 ...

不要怪我没提醒你,在技能伤害公式里计算return (总攻击力-右手武器)*(1-护甲减免) if a.dual_wield?;总攻击力*(1-护甲减免)公式本身没错,逻辑有问题,你考虑过状态加乘吗?比如自身300,右手200,左手100,加起来600,如果你身上有状态,比如攻击力翻倍什么的,就1200了,你减去右手武器300,等于900,这个攻击力对吗?你怎么不减去右手武器300的加乘?

点评

饿,说错了,是减去右手武器200,等于1000……这个1000是没有减去加乘的。  发表于 2013-11-1 13:36
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
642
在线时间
165 小时
注册时间
2012-4-18
帖子
264
18
 楼主| 发表于 2013-11-1 13:41:52 | 只看该作者
喵呜喵5 发表于 2013-11-1 13:15
那就把
((总攻击–右手)+(总攻击–左手)/2)
作为角色的最终攻击力计算伤害 ...

但是这样出来总值虽然相等了,两刀也会砍出同样的伤害,还是不能体现武器性能的不同啊~~~~
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
642
在线时间
165 小时
注册时间
2012-4-18
帖子
264
19
 楼主| 发表于 2013-11-1 13:50:18 | 只看该作者
tan12345。既然您展现出了你真正的水平,我收回之前对你的一切不敬,并郑重向你道歉。我,永月极圣(Salvareless)章告所有看见这张帖子的人,我对您(tan12345)一直以来多有冒犯,敬请您海涵。

关于你提出的两种解决方法。我在同一时间在另一张求教帖里面虽然想出了类似的方法,但并没有写出具体代码,在此非常感谢你给出的具体代码,谢谢。
http://rpg.blue/thread-313180-1-1.html

关于附加状态之后伤害公式BUG的问题,我认为可以用下面的公式来解决。
return (1-左手武器攻击/总攻击)*总攻击*(1-护甲减免) if a.dual_wield?;总攻击力*(1-护甲减免)
不知道对不对,如还有BUG敬请指教。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3298
在线时间
1120 小时
注册时间
2009-4-15
帖子
815
20
发表于 2013-11-1 14:15:21 | 只看该作者
第一,你用了SideView脚本,如果要结合这个脚本,需要一点小改动:SideView的设定里有一个地方叫二刀流设定(就是双持武器,翻译成日语叫二刀流),这个二刀流的设定最后执行的是二刀左,找到二刀左的设定,设置内容为空"二刀左"=> [],之所以这样做,是因为SideView会2次攻击,每次攻击以总攻击力计算,把二刀左设定去掉,是因为我的思路是双持武器的攻击伤害既然区分,干脆就以2个技能方式区分,这样设定伤害也灵活。
第二,15楼给你的第二个脚本是根据职业ID划分普通攻击用的,我看了你的给我的连接,那个缺乏灵活性,我怕你还有别的双持武器的职业,所以我给你第二个脚本可以多次判定不同职业。
第三,你准备好2个平砍技能(左手平砍和右手平砍,我这里假设是340是右手平砍,341是左手平砍),当然,如果你有多个职业是双持武器的,你想区分开各个职业的伤害,就多准备X*2个平砍技能吧。340号技能和341号技能的分开,也是为了更灵活的设定右手刀伤害和左手刀伤害。
第四,脚本,脚本是MOG给我的灵感,这个脚本基于他给的脚本改的。
  1. class Scene_Battle < Scene_Base
  2.   #--------------------------------------------------------------------------
  3.   # ● Use Item
  4.   #--------------------------------------------------------------------------  
  5.   alias aaa use_item
  6.   def use_item
  7.     check_aaa_targets
  8.     aaa
  9.     execute_aaa_actions
  10.   end
  11.   #--------------------------------------------------------------------------
  12.   # ● 检查左手刀的对象(就是获取右手刀的攻击对象id)。
  13.   #--------------------------------------------------------------------------
  14.   def check_aaa_targets
  15.     return if @subject == nil
  16.     targets = @subject.current_action.make_targets.compact      
  17.     return if targets == nil
  18.     if @subject.current_action.item.scope == 1 or#其实只要这一行即可,下面的7、10、11是我自己的脚本需要,没改动是因为他不影响你的脚本
  19.        @subject.current_action.item.scope == 7 or
  20.        @subject.current_action.item.scope == 10 or
  21.        @subject.current_action.item.scope == 11
  22.        @pre_target = targets[0]
  23.        @pre_target_hp = @pre_target.hp
  24.     else   
  25.        @pre_target = nil
  26.        @pre_target_hp = nil
  27.     end  
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● 判定是否可执行左手刀
  31.   #--------------------------------------------------------------------------
  32.   def execute_aaa_actions
  33.     if @pre_target != nil
  34.        return if @pre_target.dead?
  35.        return if !@pre_target.result.hit? and @pre_target.hp == @pre_target_hp
  36.     end
  37.     action_id = 341 if @subject.current_action.item.is_a?(RPG::Skill) and @subject.current_action.item.id == 340 #如果上一次的行动动作是技能341(就是右手刀攻击),那么发动340号技能。
  38.     return if action_id == nil or action_id < 1 #否则直接返回。
  39.     @subject.input.set_skill(action_id)
  40.     execute_action
  41.   end  
  42. end
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 09:32

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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