Project1

标题: 想修改命中公式(实际使用中插件无效),求指教原因 [打印本页]

作者: lirn    时间: 2015-11-8 21:03
标题: 想修改命中公式(实际使用中插件无效),求指教原因
本帖最后由 lirn 于 2015-11-14 12:51 编辑

虽然我自己本身没有什么语法知识,不过我也不想永远靠人,想以具体事例去学一些基本的知识。


在RMVA里,我是这样修改的
RUBY 代码复制
  1. def item_hit(user, item)
  2.     rate = 1#item.success_rate * 0.01         # 取得成功率
  3.     rate *= (user.hit+ item.success_rate * 0.01 - 0.6 -eva) if item.physical?      # 物理攻击:计算命中率的乘积
  4.     rate *= (user.hit+ item.success_rate * 0.01 - 0.6 -mev) if item.magical?  #魔法攻击:计算命中率的乘积
  5.     return rate                             # 返回计算后的命中率
  6.   end


这个公式的命中是“角色命中+技能命中-60%-回避

如果我没猜错,在MV里应该是这几句了


JAVASCRIPT 代码复制
  1. //1622
  2.     Game_Action.prototype.itemHit = function(target) {
  3.         if (this.isPhysical()) {
  4.             return this.item().successRate * 0.01 + this.subject().hit - 0.6 - target.eva;
  5.         } else if (this.isMagical()) {
  6.             return this.item().successRate * 0.01 + this.subject().hit - 0.6 - target.mev;
  7.         }else {
  8.             return this.item().successRate * 0.01;
  9.         }
  10.     };
  11.  
  12.     Game_Action.prototype.itemEva = function(target) {
  13.         if (this.isPhysical()) {
  14.             return target.pha;
  15.         } else if (this.isMagical()) {
  16.             return target.fdr;
  17.         } else {
  18.             return 0;
  19.         }
  20.  
  21. Game_Action.prototype.itemCri = function(target) {
  22.  
  23.     return this.item().damage.critical ? this.subject().cri  - target.cev : 0;
  24.  
  25. };
  26.  
  27.  
  28. //1825
  29. Game_Action.prototype.itemEffectRecoverHp = function(target, effect) {
  30.  
  31.    var value = (target.mhp * effect.value1 + effect.value2) * target.rec;
  32.  
  33.     if (this.isItem()) {
  34.  
  35.         value *= 1;
  36.  
  37.     }
  38.     value = Math.floor(value);
  39.  
  40.     if (value !== 0) {
  41.  
  42.         target.gainHp(value);
  43.  
  44.         this.makeSuccess(target);
  45.  
  46.     }
  47.  
  48. };
  49.  
  50.  
  51.  
  52. Game_Action.prototype.itemEffectRecoverMp = function(target, effect) {
  53.  
  54.     var value = (target.mmp * effect.value1 + effect.value2) * target.rec;
  55.  
  56.     if (this.isItem()) {
  57.  
  58.         value *= 1;
  59.  
  60.     }
  61.  
  62.     value = Math.floor(value);
  63.  
  64.     if (value !== 0) {
  65.  
  66.         target.gainMp(value);
  67.  
  68.         this.makeSuccess(target);
  69.  
  70.     }
  71.  
  72. };


在这里,我修改为
物理命中率为“技能成功率% + 角色命中-0.6 - 目标回避” 0.6的含义是60%的技能成功率相当于100的基础命中。
魔法命中率为”技能成功率% + 角色命中-0.6 - 目标魔法回避”
必中的就直接为技能成功率

必杀的几率改为“角色必杀-目标必杀回避”

同时我将物理挡格更改为药物知识,将魔法挡格改为地面伤害,因为这两个不太常用。将药物知识相关的系数改为*1,地面伤害的暂时没改。

另外,我好像没有发现必杀伤害倍率的位置?
=============================
论坛的代码的话,JS代码写的名字叫什么?还是随便写一个就好?
作者: trentswd    时间: 2015-11-8 23:18
this是Game_Action的对象,指的是当前进行的动作
.item是动作涉及的东西(可以是道具 可以是技能),subject是动作的执行者
有三种类型
1 必中 没有回避率 只看成功率
2 物理 用物理命中和物理回避计算
3 魔法 用魔法回避计算
作者: lirn    时间: 2015-11-9 01:20
trentswd 发表于 2015-11-8 23:18
this是Game_Action的对象,指的是当前进行的动作
.item是动作涉及的东西(可以是道具 可以是技能),subjec ...

这些的话,我都会去改。改动之后,这些语句直接放入笔记本之后,更改文件类型为JS就可以用了吗?
作者: lirn    时间: 2015-11-9 13:14
已经给出初步的脚本,请指教
作者: taroxd    时间: 2015-11-9 16:42
lirn 发表于 2015-11-9 13:14
已经给出初步的脚本,请指教

你都写完了,还指教什么?
作者: lirn    时间: 2015-11-9 20:59
本帖最后由 lirn 于 2015-11-10 01:32 编辑
taroxd 发表于 2015-11-9 16:42
你都写完了,还指教什么?


就是想问

1:有没有问题。

2:是不是用记事本保存成JS就可以了?

3:我似乎没找的必杀倍数的位置

=========================================

必杀倍数我找到了。

JAVASCRIPT 代码复制
  1. Game_Action.prototype.applyCritical = function(damage) {
  2.     return damage * 3;
  3. };


在VA中,必杀伤害是不能在这里直接跟角色能力挂钩的。而在这里的function也没有target。

如果我想改为跟角色的LUK挂钩,需不需在function()里加上target?

又或者我在必杀判断里增加一个变量?

比如说这样?

JAVASCRIPT 代码复制
  1. Game_Action.prototype.itemCri = function(target) {
  2.  
  3.     var bisha = this.subject().luk
  4.     return this.item().damage.critical ? this.subject().cri  - target.cev : 0;
  5.  
  6. };
  7.  
  8. Game_Action.prototype.applyCritical = function(damage) {
  9.     return damage * bisha;


作者: taroxd    时间: 2015-11-10 07:35
本帖最后由 taroxd 于 2015-11-10 07:37 编辑
lirn 发表于 2015-11-9 20:59
就是想问

1:有没有问题。


1. 不知道。一切以测试为准
2. 是

默认是没有把 target 参数传入 applyCritical 的。你要传进去当然可以,这样的话需要在 Game_Action.prototype.makeDamageValue 里也稍作修改
要在函数里使用变量的话,请注意一下变量的作用域
作者: lirn    时间: 2015-11-13 23:16
JAVASCRIPT 代码复制
  1. //1622
  2.     Game_Action.prototype.itemHit = function(target) {
  3.         if (this.isPhysical()) {
  4.             return this.item().successRate * 0.01 + this.subject().hit - 0.6 - target.eva;
  5.         } else if (this.isMagical()) {
  6.             return this.item().successRate * 0.01 + this.subject().hit - 0.6 - target.mev;
  7.         }else {
  8.             return this.item().successRate * 0.01;
  9.         }
  10.     };
  11.  
  12.     Game_Action.prototype.itemEva = function(target) {
  13.         if (this.isPhysical()) {
  14.             return target.pha;
  15.         } else if (this.isMagical()) {
  16.             return target.fdr;
  17.         } else {
  18.             return 0;
  19.         }
  20.  
  21. Game_Action.prototype.itemCri = function(target) {
  22.  
  23.     return this.item().damage.critical ? this.subject().cri  - target.cev : 0;
  24.  
  25. };
  26.  
  27. //1719
  28. Game_Action.prototype.applyCritical = function(damage) {
  29.     return damage * 2;
  30. };
  31.  
  32.  
  33. //1825
  34. Game_Action.prototype.itemEffectRecoverHp = function(target, effect) {
  35.  
  36.    var value = (target.mhp * effect.value1 + effect.value2) * target.rec;
  37.  
  38.     if (this.isItem()) {
  39.  
  40.         value *= 1;
  41.  
  42.     }
  43.     value = Math.floor(value);
  44.  
  45.     if (value !== 0) {
  46.  
  47.         target.gainHp(value);
  48.  
  49.         this.makeSuccess(target);
  50.  
  51.     }
  52.  
  53. };
  54.  
  55.  
  56.  
  57. Game_Action.prototype.itemEffectRecoverMp = function(target, effect) {
  58.  
  59.     var value = (target.mmp * effect.value1 + effect.value2) * target.rec;
  60.  
  61.     if (this.isItem()) {
  62.  
  63.         value *= 1;
  64.  
  65.     }
  66.  
  67.     value = Math.floor(value);
  68.  
  69.     if (value !== 0) {
  70.  
  71.         target.gainMp(value);
  72.  
  73.         this.makeSuccess(target);
  74.  
  75.     }
  76.  
  77. };



我目前改的就是这样,但目前的测试,好像这个插件完全没用,姑且不说命中公式没改,必杀也还是3倍,是不是还有什么东西忘了改?
作者: lirn    时间: 2015-11-15 17:36
没人能指教一下吗?为什么放到插件里开启无效?难道我必须要直接修改rpg_objects.js?




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