Project1

标题: 请问装备的暴击和回避属性在写插件的时候怎么调用? [打印本页]

作者: salvareless    时间: 2016-2-10 23:54
标题: 请问装备的暴击和回避属性在写插件的时候怎么调用?
如题,想在修改一下YEP_itemcode,这个插件,以实现在道具栏里显示当前光标选中的装备时,可以显示它的回避和暴击数值。
但是YEP的代码引擎里好像没有重新定义回避和暴击这两个属性,而YEP_itemcode里面,那一段的相关引用又是直接引用YEP代码引擎中的语句,我尝试了一下,不能直接写this.item.eva,或者this.item.xparam(1),之类的写法= =都不对,原谅我不懂代码。
请教一下各路大神,当前装备的回避和暴击要怎么引用啊。这段具体该怎么写= =具体代码在YEP_itemcode的1233行。
  1. Window_ItemStatus.prototype.drawEquipInfo = function(item) { //装备信息
  2.     var rect = new Rectangle();
  3.     if (eval(Yanfly.Param.ItemShowIcon)) {
  4.       rect.width = (this.contents.width - Window_Base._faceWidth) / 2;
  5.     } else {
  6.       rect.width = this.contents.width / 2;
  7.     }
  8.     for (var i = 0; i < 6; ++i) {
  9.       rect = this.getRectPosition(rect, i);
  10.       var dx = rect.x + this.textPadding();
  11.       var dw = rect.width - this.textPadding() * 2;
  12.       this.changeTextColor(this.systemColor());
  13.       this.drawText(TextManager.param(i), dx, rect.y, dw);
  14.       this.changeTextColor(this.paramchangeTextColor(item.params[i]));
  15.       var text = Yanfly.Util.toGroup(item.params[i]);
  16.       if (item.params[i] >= 0) text = '+' + text;
  17.       if (text === '+0') this.changePaintOpacity(false);
  18.       this.drawText(text, dx, rect.y, dw, 'right');
  19.       this.changePaintOpacity(true);
  20.     }
  21.                 //闪避——然而是错的= =
  22.       rect = this.getRectPosition(rect, 6);
  23.       var dx = rect.x + this.textPadding();
  24.       var dw = rect.width - this.textPadding() * 2;               
  25.       this.changeTextColor(this.systemColor());
  26.       this.drawText("闪避", dx, rect.y, dw);
  27.       this.changeTextColor(this.paramchangeTextColor(item.eva));
  28.       var text = Yanfly.Util.toGroup(item.eva);
  29.       if (item.eva >= 0) text = '+' + text;
  30.       if (text === '+0') this.changePaintOpacity(false);
  31.       this.drawText(text, dx, rect.y, dw, 'right');
  32.       this.changePaintOpacity(true);
  33.                 //暴击——然而还是错的= =
  34.           rect = this.getRectPosition(rect, 7);
  35.       var dx = rect.x + this.textPadding();
  36.       var dw = rect.width - this.textPadding() * 2;
  37.       this.changeTextColor(this.systemColor());
  38.       this.drawText("暴击", dx, rect.y, dw);
  39.       this.changeTextColor(this.paramchangeTextColor(item.params[10]));
  40.       var text = Yanfly.Util.toGroup(item.params[10]);
  41.       if (item.params[10] >= 0) text = '+' + text;
  42.       if (text === '+0') this.changePaintOpacity(false);
  43.       this.drawText(text, dx, rect.y, dw, 'right');
  44.       this.changePaintOpacity(true);
  45. };
复制代码

作者: 汪汪    时间: 2016-2-11 09:04
item.eva?
作者: chd114    时间: 2016-2-11 10:03
item.xparams[1]可行吗?(首先你要确定你的角色有闪避)
作者: salvareless    时间: 2016-2-11 20:23
本帖最后由 salvareless 于 2016-2-11 20:30 编辑

console.log(item),返回值是这个,这个情况是不是要改yep的代码引擎啊= =
  1. ObjectanimationId: 4
  2. atbStartFlat: 0atbStartRate: 0
  3. atbTurnFlat: 0atbTurnRate: 0
  4. baseItemIconIndex: 97
  5. baseItemId: 1
  6. baseItemName: "剑
  7. "baseItemPrice: 500
  8. boostCount: 0
  9. cooldownChange: Object
  10. cooldownDuration: Object
  11. cooldownRate: Object
  12.     __proto__: Object
  13. description: "这是说明↵这是说明"
  14. eBodyIconImages: Array[0]
  15.     length: 0
  16.     __proto__: Array[0]
  17. etypeId: 1
  18. gauge1: "UNDEFINED"
  19. gauge2: "UNDEFINED"
  20. gauge3: "UNDEFINED"
  21. gaugeIcon1: "UNDEFINED"
  22. gaugeIcon2: "UNDEFINED"
  23. gaugeIcon3: "UNDEFINED"
  24. globalCooldownChange: 0
  25. globalCooldownDuration: 1
  26. globalCooldownRate: 1
  27. globalWarmupChange: 0
  28. iconIndex: 97
  29. id: 3001
  30. maxItem: 100
  31. meta: Object
  32.     __proto__: Object
  33. name: "剑"
  34. namePrefix: ""
  35. nameSuffix: ""
  36. nonIndepdent: false
  37. note: ""
  38. params: Array[8]
  39. 0: 0
  40. 1: 0
  41. 2: 10
  42. 3: 0
  43. 4: 0
  44. 5: 0
  45. 6: 0
  46. 7: 0
  47. length: 8
  48.     __proto__: Array[0]
  49. passiveStates: Array[0]
  50.     length: 0
  51.     __proto__: Array[0]
  52. price: 500
  53. priorityName: ""
  54. randomVariance: 0
  55. reflectAnimationId: 0
  56. setPriorityName: false
  57. spriteCannotMove: false
  58. stypeCooldownChange: Object
  59. stypeCooldownDuration: Object
  60. stypeCooldownRate: Object
  61. stypeWarmupChange: Object
  62. traits: Array[4]
  63. warmupChange: Object
  64. wtypeId: 2
  65. __proto__: Object
复制代码

作者: salvareless    时间: 2016-2-11 20:53
本帖最后由 salvareless 于 2016-2-11 22:27 编辑

我去,我突然间找到了正确的写法= =。但是要固定数据库的设置方式,右侧的额外属性栏的前4个当中的第二个到第四个必须按照如下顺序(咱不知道解决方式):第二行·额外参数:命中率;第三行·额外参数:回避率;第四行·额外参数:暴击率。
正确的获取方式是:item.traits[3].value,当中的:item.traits[3].value。对应的意思应该是,item的traits属性中的第3+1项当中的value的值,如果按照我说的设置事件额外属性的值的方式,那么对应的就是暴击率这一条,如果是item.traits[2].value就是回避率这一条,同理item.traits[1].value就是命中率。应该还能够衍生更多。不过我就只需要这些了,哇哈哈哈,误打误撞欸~~~~

又测试了一下,有BUG,就是所有的武器和装备都必须要写上固定的四条属性,不然就报错= =
正在测试排除BUG中。

BUG排除,增加一个判断。例子如下,这样就可以不用一一设置闪避暴击了,不设也不会报错:
                //暴击
      rect = this.getRectPosition(rect, 6);
      var dx = rect.x + this.textPadding();
      var dw = rect.width - this.textPadding() * 2;               
      this.changeTextColor(this.systemColor());
      this.drawText("暴击", dx, rect.y, dw);
          if (typeof(item.traits[3]) == "undefined"){
          this.changeTextColor(this.paramchangeTextColor(0));  //这一行是没有这个属性是把颜色设为灰,是为了字体颜色统一化。
          this.changePaintOpacity(false);
      this.drawText("+0%", dx, rect.y, dw, 'right');
          this.changePaintOpacity(true);
          }
          else{
      this.changeTextColor(this.paramchangeTextColor(item.traits[3].value));
      var text = Yanfly.Util.toGroup(item.traits[3].value);
      if (item.traits[3].value >= 0) text = '+' + text * 100 + '%';
      if (text === '+0') this.changePaintOpacity(false);
      this.drawText(text, dx, rect.y, dw, 'right');
      this.changePaintOpacity(true);
          }

作者: cjlzbb    时间: 2016-2-26 11:32
salvareless 发表于 2016-2-11 20:53
我去,我突然间找到了正确的写法= =。但是要固定数据库的设置方式,右侧的额外属性栏的前4个当中的第二个到 ...


虽然不懂脚本,但是有点不明白

item.traits[ i ].XXXX应该可以确定这条参数是暴击还是回避的吧,
遍历额外属性栏里的所有条目累加所有暴击项的值(VA里是可以在一个物品上写上两条暴击+X%的)
这样子比较好吧
作者: salvareless    时间: 2016-2-28 08:54
在MV里不行= =如果不按照顺序设的话,item.traits[3].value就不能正确获取到暴击这一条属性的值。
因为看F8里返回的值,额外属性并没有固定的位置,而是在数据库中,先写了哪个,哪个就排在前面,额外属性traits本身是一个数组,traits[3]是其内的一个小数组,内容大约是“ID区别属性,value表示值”。
traits[3]里的3,是指附加属性数组中的第三个小数组,而不是定位到命中,回避,暴击…………这样具体的属性,而且,如果你不再数据库里面设置,比如默认一个道具只有攻击属性:物理,命中率:100。你不增加上第三条回避,和第四条暴击的话,上面的代码就会报错,因为不存在traits[3]。
所以这里有一点麻烦,像我这样写了之后,就必须把数据库里面的额外属性的前4个固定顺序。我加上了一行判断也是为了保险和偷懒,毕竟不可能每个装备都加暴击回避,我有24个装备,每个都有暴击回避的话,分分钟破100
作者: cjlzbb    时间: 2016-2-28 09:08
那先判断item.traits[3]是否存在,然后判断item.traits[3].ID,再是item.traits[3].valve。

这样子不行的吗
每个都要一模一样的话有点蛋疼了。。




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