Project1

标题: 求教双持角色平砍时分别计算左右手伤害的脚本 [打印本页]

作者: salvareless    时间: 2013-10-29 18:14
标题: 求教双持角色平砍时分别计算左右手伤害的脚本
本帖最后由 salvareless 于 2013-11-2 00:24 编辑

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

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

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

求各方大神相助。

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

本脚本想要实现的功能已经在tan12345,和喵呜喵5的帮助下完成,脚本和伤害公式以及注意事项在后面我就不提前了,请需要的人去后面观看。
作者: tan12345    时间: 2013-10-29 23:29
那就不要让他双持武器得了,设置盾牌位置那里有一种武器,这种武器只能盗贼职业装备。
作者: salvareless    时间: 2013-10-30 13:02
虽然这么说很不礼貌,但是楼上认为这种办法我都想不到么?
这样做副手武器在背包中会显示在防具一栏,盗贼的副手匕首怎么能是防具呢。而且就算设成防具,你设不设攻击力?设吧,为什么拿两把武器却只攻击一次?不设吧,你说拿把0攻击力的匕首有啥用,还不如拿盾,但是拿盾还算盗贼么,T贼么,这是屌炸天的节奏。
另外设了攻击力攻击的时候也是主副手攻击力合在一起算的。

所以尽管非常不礼貌,但是不能在既定的要求下解决问题的话,请不要回复,看到有提示却空欢喜的心情非常郁闷。
作者: tan12345    时间: 2013-10-30 16:04
第一,你没说你考虑了这些,谁知道满足不满足?就算你觉得不满意,你大可以说你觉得这个不满意就完了,没必要这么“礼貌”。我们也是好心帮你出点子。

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

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

第四,如果第三点是正确的,我再看怎么改。
作者: salvareless    时间: 2013-10-30 22:12
回复楼上
请看我主题正文第一行,“如题,求一个能让双持角色只在普通攻击时分别计算左手的武器伤害和右手的武器伤害的脚本。”我需要达到的效果是两只手的武器分别计算伤害,这样计算伤害的结果是使盗贼的平砍伤害下降,同时也可以反映左右手武器的不同攻击力。降低伤害只是让游戏变得更加平衡,而不是最终目的,真正的目的就是两手分别计算伤害,所以说不满足这一点的方式肯定就不对。

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

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

另外,我希望有能力解决这个问题,或者能够给我提供帮助才来回答,但凡有帮助我都感激不尽。如果您觉得我的态度伤害了您的自尊心,待您解决问题的时候,我会奉上我最诚挚的道歉。
作者: 布里蓝    时间: 2013-10-31 01:19
关于技能牵一发而动全身那个,给盗贼专门弄出一套技能不行吗?把技能复制一下再改改伤害也不难吧?
作者: salvareless    时间: 2013-10-31 10:02
哎呀,我目的是双手分别计算伤害。这样做的其中一个效果是平砍伤害降低。不是真的要以降低伤害为目的。

而且就算你这样做了,比如你重新设计盗贼的技能公式,然后呢?盗贼两把武器,显示的总攻击力怎么说?就算没把匕首只有同类战士单手剑攻击的一半(这也不合理,一般是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用来代替怪物没有的等级属性。真的要改的话很简单,修改“物理攻击附加”这个值就行了。

再说了,我的要求是“双持武器左右手分别计算伤害”,想绕过这一条来回答的话,你也就可以绕过这贴了。
作者: tan12345    时间: 2013-10-31 13:20
本帖最后由 tan12345 于 2013-10-31 13:22 编辑
salvareless 发表于 2013-10-30 22:12
回复楼上
请看我主题正文第一行,“如题,求一个能让双持角色只在普通攻击时分别计算左手的武器伤害和右手 ...


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

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

即可
注意只要删除中文,其他东西不要删除……
作者: salvareless    时间: 2013-11-1 10:59
tan12345 发表于 2013-10-31 13:20
就冲着你倒数第2段话,嘴贱那一下,你的问题,不想管了,你能力高,自己解决吧,反正你也把脚本改了,我 ...

请看楼下,楼下的才是会写的节奏,你这么说只能说明你不会写。而且我也没指望你能解答,请不要自大。
作者: salvareless    时间: 2013-11-1 11:09
喵呜喵5这个公式我昨天看另一个将伤害计算的帖子里面提到过这种分别是两套公式的想法,但是我不知道怎么写判断是不是二刀流。先3Q一个。

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

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

但是这样写其实就相当于用左手的武器攻击了两次。万一左右手的武器攻击力差距比较大怎么办啊。继续求教。
作者: 喵呜喵5    时间: 2013-11-1 12:38
salvareless 发表于 2013-11-1 11:09
喵呜喵5这个公式我昨天看另一个将伤害计算的帖子里面提到过这种分别是两套公式的想法,但是我不知道怎么写 ...

所以我一开始就没搞懂你打算怎么计算攻击力……左手第一刀右手第二刀加起来?那和单次攻击没什么区别吧……伤害公式直接除二不就结了……
作者: salvareless    时间: 2013-11-1 12:47
喵呜喵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-护甲减免)的结果和我想的方式结果就是一样的,如果不一样攻就会不一样。
作者: tan12345    时间: 2013-11-1 12:58
salvareless 发表于 2013-11-1 12:47
是这样的,你本身有300攻击,左手武器200攻击,右手武器260点。如果不改就是两道760,一共1520。如果按你 ...

你说我自大?也不知道是谁自大。你是觉得你会脚本所以你比我流逼是吗?
首先很不好意思我已经把你这个需求用脚本写出来了;第二,写的时候就注意到了你的2个平砍加起来和一次伤害就多了个自身攻击的区别;第三,11楼说不知道怎么判定二刀流,13楼才写dual_wield?,真是笑话,二刀流都能说不知道判定的你有什么好意思说别人一定不如你?第四,我一开始就跟你在纠结技能伤害公式,平砍也是技能的一种你懂不懂???我一开始就说了平砍伤害公式设定,你自己没看懂就说我自大???你有好好看吗?有好好理解我的意思吗?你是觉得平砍不是技能的一种所以没有办法改变伤害设定吗?
作者: tan12345    时间: 2013-11-1 13:04
本帖最后由 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号技能),说来绕去核心还是右手武器伤害和左手武器伤害,你自己不明白就不"礼貌"和"嘴贱",老觉得你比给你提供思路的人流逼,就你会脚本我们都是脚本盲。
作者: 喵呜喵5    时间: 2013-11-1 13:15
salvareless 发表于 2013-11-1 12:47
是这样的,你本身有300攻击,左手武器200攻击,右手武器260点。如果不改就是两道760,一共1520。如果按你 ...

那就把
((总攻击–右手)+(总攻击–左手)/2)
作为角色的最终攻击力计算伤害
作者: tan12345    时间: 2013-11-1 13:21
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的加乘?
作者: salvareless    时间: 2013-11-1 13:41
喵呜喵5 发表于 2013-11-1 13:15
那就把
((总攻击–右手)+(总攻击–左手)/2)
作为角色的最终攻击力计算伤害 ...

但是这样出来总值虽然相等了,两刀也会砍出同样的伤害,还是不能体现武器性能的不同啊~~~~
作者: salvareless    时间: 2013-11-1 13:50
tan12345。既然您展现出了你真正的水平,我收回之前对你的一切不敬,并郑重向你道歉。我,永月极圣(Salvareless)章告所有看见这张帖子的人,我对您(tan12345)一直以来多有冒犯,敬请您海涵。

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

关于附加状态之后伤害公式BUG的问题,我认为可以用下面的公式来解决。
return (1-左手武器攻击/总攻击)*总攻击*(1-护甲减免) if a.dual_wield?;总攻击力*(1-护甲减免)
不知道对不对,如还有BUG敬请指教。
作者: tan12345    时间: 2013-11-1 14:15
第一,你用了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
复制代码

作者: salvareless    时间: 2013-11-1 14:29
非常感谢tan1235不计前嫌给出可行脚本。

按照你的方法,我想应该会发生如下情况:
走到怪面前,左手砍一刀,关没死,退回去。再走到怪面前,右手砍一刀,这里的砍一刀出来的武器图标依然是左手武器的图标,再退回去。
我想应该可以结合我在那个帖子里说道的,从新定义340和341为两个新的技能动画类型。然后将如下代码添加到合适部分,已达到较为完美的效果。
然后还是定义动画
    when 340
      return "双持平砍左"
    when 341
      return "双持平砍右"

然后定义
"双持平砍左"        => ["敵前移動","コラプス禁止","個別開始","武器振りL","対象アニメ武器LWT","死亡確認",]       #左手砍了不回原位,除非砍死了
"双持平砍右"        => ["武器振りR","対象アニメ武器WT","個別終了","コラプス禁止解除","次の行動者へ","座標リセットカーブ" ]       #右手砍了再回原位

具体会出现什么问题,等我吃了饭测试下再行讨论,不然我的午饭就喂猫蓝,麻痹死猫在咬老子手办,先这样了。
作者: tan12345    时间: 2013-11-1 14:49
salvareless 发表于 2013-11-1 14:29
非常感谢tan1235不计前嫌给出可行脚本。

按照你的方法,我想应该会发生如下情况:

我测试过了和默认SideView的结合(原先的想法是默认系统可以,所以没考虑到和SideView的结合),显示出来的效果是走到怪前,一刀(确实没考虑武器图标),怪没死,退回去半路都不到,再走到怪前,又一刀。你如果要结合你那个帖子里说的话,我再研究研究,之前没考虑到和SideView的结合。
作者: salvareless    时间: 2013-11-1 15:37
本帖最后由 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(这怎么能接受啊胃),要么接受在第一刀砍死怪后不回到原本位置,相比之下,还是选择后者吧。于是重新改了最后结论
作者: salvareless    时间: 2013-11-1 20:28
调试不出来= =求教怎么调用那三个参数。
作者: tamashii    时间: 2013-11-1 22:47
1.回答问题的人不欠你钱
2.回答问题的人都是来帮你的
3.请结贴
作者: salvareless    时间: 2013-11-2 00:08
本帖最后由 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在另一张帖子上给出的调用公式(我调用老是写不对)。

之前的公式逻辑顺序有误,已经更正。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1