赞 | 7 |
VIP | 0 |
好人卡 | 3 |
积分 | 6 |
经验 | 8536 |
最后登录 | 2024-11-7 |
在线时间 | 165 小时 |
Lv2.观梦者
- 梦石
- 0
- 星屑
- 642
- 在线时间
- 165 小时
- 注册时间
- 2012-4-18
- 帖子
- 264
|
本帖最后由 salvareless 于 2013-11-2 01:40 编辑
测试完毕,可以实现左右手分别用两个公式计算伤害,主手攻击显示主手的武器图标和武器攻击动画。实际的脚本如下:- #本脚本来自于66rpg的tan12345
- class Game_Actor < Game_Battler
- def attack_skill_id
- case @class_id
- when 3#假设职业id=3代表盗贼职业,就是双持武器的职业
- return 340#将双持武器的职业的普通攻击替换成340号技能
- else
- return 1#否则为1号
- end
- end
- end
- class Scene_Battle < Scene_Base
- #--------------------------------------------------------------------------
- # ● Use Item
- #--------------------------------------------------------------------------
- alias aaa use_item
- def use_item
- check_aaa_targets
- aaa
- execute_aaa_actions
- end
- #--------------------------------------------------------------------------
- # ● 检查左手刀的对象(就是获取右手刀的攻击对象id)。
- #--------------------------------------------------------------------------
- def check_aaa_targets
- return if @subject == nil
- targets = @subject.current_action.make_targets.compact
- return if targets == nil
- if @subject.current_action.item.scope == 1 or#其实只要这一行即可,下面的7、10、11是我自己的脚本需要,没改动是因为他不影响你的脚本
- @subject.current_action.item.scope == 7 or
- @subject.current_action.item.scope == 10 or
- @subject.current_action.item.scope == 11
- @pre_target = targets[0]
- @pre_target_hp = @pre_target.hp
- else
- @pre_target = nil
- @pre_target_hp = nil
- end
- end
- #--------------------------------------------------------------------------
- # ● 判定是否可执行左手刀
- #--------------------------------------------------------------------------
- def execute_aaa_actions
- if @pre_target != nil
- return if @pre_target.dead?
- return if !@pre_target.result.hit? and @pre_target.hp == @pre_target_hp
- end
- action_id = 341 if @subject.current_action.item.is_a?(RPG::Skill) and @subject.current_action.item.id == 340#如果上一次的行动动作是技能341(就是右手刀攻击),那么发动340号技能。
- action_id = 342 if @pre_target.dead?
- return if action_id == nil or action_id < 1 #否则直接返回。
- @subject.input.set_skill(action_id)
- execute_action
- end
- end
复制代码 另外需要将下列代码插入SideViewバトラー設定代码页的 def skill_action 方法中
- when 340
- return "双持平砍主手" #装备栏1号
- when 341
- return "双持平砍副手" #装备栏2号
复制代码 同时需要将如下代码插入SideViewアクション設定脚本页的 FULLACTION = { }的末端,要插在花括号里面,这一段可能存在脚本被汉化过的问题,请使用者根据普通攻击的定义段自行修改。
- "双持平砍主手" => ["敵前移動","コラプス禁止","個別開始","武器振りR","対象アニメ武器WT","死亡確認"],
- "双持平砍副手" => ["武器振り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(这怎么能接受啊胃),要么接受在第一刀砍死怪后不回到原本位置,相比之下,还是选择后者吧。于是重新改了最后结论 |
|