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

Project1

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

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

[复制链接]

Lv2.观梦者

梦石
0
星屑
642
在线时间
165 小时
注册时间
2012-4-18
帖子
264
跳转到指定楼层
1
发表于 2013-10-29 18:14:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 salvareless 于 2013-11-2 00:24 编辑

如题,求一个能让双持角色只在普通攻击时分别计算左手的武器伤害和右手的武器伤害的脚本。

虽然自己想来想觉得略有一些不太现实,但是迫于盗贼职业平砍比技能还牛,又不能改技能(这样会使其他职业渣成shi,牵一发动全身啊= =苦逼),于是只好上开伸手了。

厄,还有就是只是平砍的时候分别计算,技能的时候还是用正常的数据计算。

求各方大神相助。

我,永月极圣(Salvareless)章告所有看见这张帖子的人,在以下楼层我对tan12345一直以来多有冒犯,再次请求tan12345海涵。

本脚本想要实现的功能已经在tan12345,和喵呜喵5的帮助下完成,脚本和伤害公式以及注意事项在后面我就不提前了,请需要的人去后面观看。

Lv2.观梦者

梦石
0
星屑
642
在线时间
165 小时
注册时间
2012-4-18
帖子
264
来自 23楼
 楼主| 发表于 2013-11-1 15:37:56 | 只看该作者
本帖最后由 salvareless 于 2013-11-2 01:40 编辑

测试完毕,可以实现左右手分别用两个公式计算伤害,主手攻击显示主手的武器图标和武器攻击动画。实际的脚本如下:
  1. #本脚本来自于66rpg的tan12345

  2. class Game_Actor < Game_Battler
  3.   def attack_skill_id
  4.     case @class_id
  5.     when 3#假设职业id=3代表盗贼职业,就是双持武器的职业
  6.       return 340#将双持武器的职业的普通攻击替换成340号技能
  7.     else
  8.       return 1#否则为1号
  9.     end
  10.   end
  11. end
  12. class Scene_Battle < Scene_Base
  13.   #--------------------------------------------------------------------------
  14.   # ● Use Item
  15.   #--------------------------------------------------------------------------  
  16.   alias aaa use_item
  17.   def use_item
  18.     check_aaa_targets
  19.     aaa
  20.     execute_aaa_actions
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   # ● 检查左手刀的对象(就是获取右手刀的攻击对象id)。
  24.   #--------------------------------------------------------------------------
  25.   def check_aaa_targets
  26.     return if @subject == nil
  27.     targets = @subject.current_action.make_targets.compact      
  28.     return if targets == nil
  29.     if @subject.current_action.item.scope == 1 or#其实只要这一行即可,下面的7、10、11是我自己的脚本需要,没改动是因为他不影响你的脚本
  30.        @subject.current_action.item.scope == 7 or
  31.        @subject.current_action.item.scope == 10 or
  32.        @subject.current_action.item.scope == 11
  33.        @pre_target = targets[0]
  34.        @pre_target_hp = @pre_target.hp
  35.     else   
  36.        @pre_target = nil
  37.        @pre_target_hp = nil
  38.     end  
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # ● 判定是否可执行左手刀
  42.   #--------------------------------------------------------------------------
  43.   def execute_aaa_actions
  44.     if @pre_target != nil
  45.       return if @pre_target.dead?
  46.       return if !@pre_target.result.hit? and @pre_target.hp == @pre_target_hp
  47.     end
  48.     action_id = 341 if @subject.current_action.item.is_a?(RPG::Skill) and @subject.current_action.item.id == 340#如果上一次的行动动作是技能341(就是右手刀攻击),那么发动340号技能。
  49.     action_id = 342 if @pre_target.dead?
  50.     return if action_id == nil or action_id < 1 #否则直接返回。
  51.     @subject.input.set_skill(action_id)
  52.     execute_action
  53.   end  
  54. end
复制代码
另外需要将下列代码插入SideViewバトラー設定代码页的  def skill_action 方法中

  1.     when 340
  2.       return "双持平砍主手"  #装备栏1号
  3.     when 341
  4.       return "双持平砍副手"  #装备栏2号

复制代码
同时需要将如下代码插入SideViewアクション設定脚本页的  FULLACTION = { }的末端,要插在花括号里面,这一段可能存在脚本被汉化过的问题,请使用者根据普通攻击的定义段自行修改。

  1.   "双持平砍主手"    => ["敵前移動","コラプス禁止","個別開始","武器振りR","対象アニメ武器WT","死亡確認"],
  2.   "双持平砍副手"    => ["武器振りL","死亡確認","対象アニメ武器LWT","個別終了","コラプス禁止解除","次の行動者へ","座標リセットカーブ"],

复制代码
测试BUG,如果第一刀砍死怪物会出现滞留原地的情况。
解决方案,再设置一个技能(空白技能),并修改第一部分代码为:怪物死亡则发动342号技能。同时在第二代码增设342号技能的返回值为“回到原点”,在第三部分设置("回到原点"   =>["個別終了","コラプス禁止解除","次の行動者へ","座標リセットカーブ"],)
另有在伤害公式中调用装备栏1号和2号装备的攻击力的代码未解决。尝试中,尝试好了我会发上来的。这里已改,做出退让接受这个bug。

尝试完毕改善第一刀砍死怪物后不回到原位的BUG,已经修改上述三个脚本。第342号技能需要设为生命值伤害,但是公式写为0(不知道为什么= =)。

至于主手和副手的伤害公式(之前的公式还是存在逻辑问题,必须再调用角色在没有装备和状态下的攻击力,这里暂且叫做原本攻击):
主手(340号技能):(主手攻击+原本攻击)/(主手攻击+原本攻击+副手攻击)*a.atk*(1-b.def/(b.def+b.luk*4+400))    这是护甲减免的部分(1-b.def/(b.def+b.luk*4+400))。
副手(341号技能):(副手攻击+原本攻击)/(主手攻击+原本攻击+副手攻击)*a.atk*(1-b.def/(b.def+b.luk*4+400))

于是乎主手攻击,副手攻击,原本攻击这三个的代码是什么啊,真心要弄死人,找疯了都= =用装备栏ID吧,两手的ID都是0 ,苦逼。
原本攻击都还好,如果只用一个双持职业就可以用他自己的成长算出来。(我设的luk是等于角色等级的,因为怪物没有等级,这样方便统一计算公式。然后原本攻击力就可以这样写,原本攻击=(10+7*a.luk))


经过测试发现脚本会在角色死亡的时候报错,“input没有值”。经过调试发现是return if @pre_target.dead?这一行引起的一种奇怪的BUG,要么接受这个BUG(这怎么能接受啊胃),要么接受在第一刀砍死怪后不回到原本位置,相比之下,还是选择后者吧。于是重新改了最后结论

点评

伤害公式中调用装备栏1号和2号装备的攻击力的代码,你可以从http://bbs.66rpg.com/thread-307316-1-4.html找灵感,也可以从获取角色能力那里入手。我倒是有想法了  发表于 2013-11-1 16:04
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
642
在线时间
165 小时
注册时间
2012-4-18
帖子
264
来自 26楼
 楼主| 发表于 2013-11-2 00:08:43 | 只看该作者
本帖最后由 salvareless 于 2013-11-2 01:04 编辑

自己脚本基本功太差换来换去也没换出正确的组合。于是去求教了,感谢喵呜喵5给出的调用代码:a.equips[0].params[2]。之前自己弄的时候不是少个s就是用错小括号的。
于是公式如下。

主手:a.atk*(1-b.def/(b.def+b.luk*4+400))*(a.equips[0].params[2]+a.luk*7+10)/(a.equips[0].params[2]+a.luk*7+10+a.equips[1].params[2])
副手:a.atk*(1-b.def/(b.def+b.luk*4+400))*(a.equips[1].params[2]+a.luk*7+10)/(a.equips[0].params[2]+a.luk*7+10+a.equips[1].params[2])

公式中的a.luk*7+10,实在只有一个双持职业的情况下,对他的无装备无状态下的攻击力进行计算的式子。10是基础数,7是每一个等级的成长率。
另外为了避免写不下,可以在Game_BattlerBase脚本页的“● 各种能力值的简易访问方法”那部分最下端事先写好如下结构:
  1. def lat    #主手
  2.   equips[0].params[2]
  3. end
  4. def rat   #副手
  5.   equips[1].params[2]
  6. end
复制代码
然后将公式改写为:
主手:a.atk*(1-b.def/(b.def+b.luk*4+400))*(a.lat+a.luk*7+10)/(a.lat+a.luk*7+10+a.rat)
副手:a.atk*(1-b.def/(b.def+b.luk*4+400))*(a.rat+a.luk*7+10)/(a.lat+a.luk*7+10+a.rat)

并没有什么改变只是为了缩短公式防止写不下。特别说明要使用这个公式需要知道这个是用护甲值按比例减免伤害def/(b.def+b.luk*4+400),同时由于怪物没有等级就用怪物的幸运值代替了等级,所以在给怪物设幸运值的时候要额外注意。

然后到这里,这个脚本就全部结束了。
感谢tan12345不计前嫌给出的可行脚本,以及喵呜喵5在另一张帖子上给出的调用公式(我调用老是写不对)。

之前的公式逻辑顺序有误,已经更正。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3298
在线时间
1120 小时
注册时间
2009-4-15
帖子
815
2
发表于 2013-10-29 23:29:19 | 只看该作者
那就不要让他双持武器得了,设置盾牌位置那里有一种武器,这种武器只能盗贼职业装备。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
642
在线时间
165 小时
注册时间
2012-4-18
帖子
264
3
 楼主| 发表于 2013-10-30 13:02:35 | 只看该作者
虽然这么说很不礼貌,但是楼上认为这种办法我都想不到么?
这样做副手武器在背包中会显示在防具一栏,盗贼的副手匕首怎么能是防具呢。而且就算设成防具,你设不设攻击力?设吧,为什么拿两把武器却只攻击一次?不设吧,你说拿把0攻击力的匕首有啥用,还不如拿盾,但是拿盾还算盗贼么,T贼么,这是屌炸天的节奏。
另外设了攻击力攻击的时候也是主副手攻击力合在一起算的。

所以尽管非常不礼貌,但是不能在既定的要求下解决问题的话,请不要回复,看到有提示却空欢喜的心情非常郁闷。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3298
在线时间
1120 小时
注册时间
2009-4-15
帖子
815
4
发表于 2013-10-30 16:04:12 | 只看该作者
第一,你没说你考虑了这些,谁知道满足不满足?就算你觉得不满意,你大可以说你觉得这个不满意就完了,没必要这么“礼貌”。我们也是好心帮你出点子。

第二,经过测试(默认系统),双持武器在普通攻击时,攻击力是左右手叠加的,在发动技能计算伤害时,伤害也是左右手叠加攻击力计算的,我这样说你明白吗?普通攻击默认的伤害公式是a.atk*4-b.def*2,如果你的技能公式伤害比这个高,就不存在平砍比技能伤害高的情况。(这个我已经测试过了,新建个默认系统,测试的技能和1号技能就是普通攻击设定离散度为0,然后分别计算攻击、防御、技能伤害,最后伤害数值就是公式数值。)

第三,默认系统,双持武器的普通攻击和技能,每次动画是显示2次,但是伤害只显示1次,不管是攻击还是技能。我用过横版战斗系统Sideview,在它的设定里,双持武器是攻击2次的,显示的伤害也是2次,而且,每次的伤害是叠加双持武器的伤害来计算的,就是说,每次的伤害是拿总攻击力来计算,计算了2次,于是原本扣血100的就变成了扣血100*2=200,所以你会觉得盗贼的伤害平砍比技能高。所以,我估计你用了这个战斗系统Sideview。

第四,如果第三点是正确的,我再看怎么改。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
642
在线时间
165 小时
注册时间
2012-4-18
帖子
264
5
 楼主| 发表于 2013-10-30 22:12:52 | 只看该作者
回复楼上
请看我主题正文第一行,“如题,求一个能让双持角色只在普通攻击时分别计算左手的武器伤害和右手的武器伤害的脚本。”我需要达到的效果是两只手的武器分别计算伤害,这样计算伤害的结果是使盗贼的平砍伤害下降,同时也可以反映左右手武器的不同攻击力。降低伤害只是让游戏变得更加平衡,而不是最终目的,真正的目的就是两手分别计算伤害,所以说不满足这一点的方式肯定就不对。

然后,我不太明白你的二三条特意说明你的测试情况想表达什么意思,如果是通过单独升高技能的伤害公式来拉开技能和平砍的伤害的话,那其他职业怎么办?盗贼是一个控制职业,能够比输出职业的输出更加高么,游戏平衡还要不?另外,我已经改过默认战斗和横版战斗的脚本,技能(不管是近身的还是远程的)盗贼都只会显示一次动画,计算一次伤害。

最后,嘴贱一下,来问问题的不都是小白,很有可能是跟你一个水平,甚至水品在你之上的人,所以当你回答问题的时候也请考虑到这一点,如此,才能成为吧里那些让人尊敬的大神一样。

另外,我希望有能力解决这个问题,或者能够给我提供帮助才来回答,但凡有帮助我都感激不尽。如果您觉得我的态度伤害了您的自尊心,待您解决问题的时候,我会奉上我最诚挚的道歉。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
758
在线时间
2064 小时
注册时间
2011-10-3
帖子
1686
6
发表于 2013-10-31 01:19:55 | 只看该作者
关于技能牵一发而动全身那个,给盗贼专门弄出一套技能不行吗?把技能复制一下再改改伤害也不难吧?
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
642
在线时间
165 小时
注册时间
2012-4-18
帖子
264
7
 楼主| 发表于 2013-10-31 10:02:57 | 只看该作者
哎呀,我目的是双手分别计算伤害。这样做的其中一个效果是平砍伤害降低。不是真的要以降低伤害为目的。

而且就算你这样做了,比如你重新设计盗贼的技能公式,然后呢?盗贼两把武器,显示的总攻击力怎么说?就算没把匕首只有同类战士单手剑攻击的一半(这也不合理,一般是60%-70%)拿上两把武器之后攻击力还是会和战士一样。两刀下去就是战士平砍伤害的两倍。如果继续削弱武器,太不现实了难道要匕首只有单手剑攻击的25%么,明显不合理啊。

再说了你们知道我的技能公式是什么造型么。改起来的确非常容易,但是该公式并不是我想要的目的啊。:“(a.atk*2+物理伤害附加)*(1-(b.def/(b.def+b.luk*85+400)))+(a.mat*2+魔法伤害附加)*(1-(b.mdf/(b.mdf+b.luk*85+400)))+神圣伤害附加”这是护甲减免和法术抵抗的伤害计算通式。LUK用来代替怪物没有的等级属性。真的要改的话很简单,修改“物理攻击附加”这个值就行了。

再说了,我的要求是“双持武器左右手分别计算伤害”,想绕过这一条来回答的话,你也就可以绕过这贴了。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3298
在线时间
1120 小时
注册时间
2009-4-15
帖子
815
8
发表于 2013-10-31 13:20:04 | 只看该作者
本帖最后由 tan12345 于 2013-10-31 13:22 编辑
salvareless 发表于 2013-10-30 22:12
回复楼上
请看我主题正文第一行,“如题,求一个能让双持角色只在普通攻击时分别计算左手的武器伤害和右手 ...


就冲着你倒数第2段话,嘴贱那一下,你的问题,不想管了,你能力高,自己解决吧,反正你也把脚本改了,我们这些脚本盲比不上你。你也没看明白我第2、3点的意思(我的第2点说的就是平衡,举个例子,把盗贼的平砍单独做成一个技能,只要职业是盗贼,普通攻击返回技能编号X,其余职业用XX,然后盗贼的平砍伤害公式比技能伤害公式低就平衡了)。你非得分开计算,那你自己写吧,我会写有思路我也不说。
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

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

开拓者短篇九导演组冠军

9
发表于 2013-10-31 21:18:08 | 只看该作者
本帖最后由 喵呜喵5 于 2013-10-31 21:40 编辑

你这个伤害要用什么作为实际攻击力来计算?
武器本身的攻击力么?
比较简单的方法,你的平砍技能伤害公式这么写:
RUBY 代码复制
  1. return 双持角色的伤害公式 if a.dual_wield?;其他角色的伤害公式

即可
注意只要删除中文,其他东西不要删除……
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
642
在线时间
165 小时
注册时间
2012-4-18
帖子
264
10
 楼主| 发表于 2013-11-1 10:59:12 | 只看该作者
tan12345 发表于 2013-10-31 13:20
就冲着你倒数第2段话,嘴贱那一下,你的问题,不想管了,你能力高,自己解决吧,反正你也把脚本改了,我 ...

请看楼下,楼下的才是会写的节奏,你这么说只能说明你不会写。而且我也没指望你能解答,请不要自大。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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