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

Project1

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

[已经解决] 请问装备的暴击和回避属性在写插件的时候怎么调用?

[复制链接]

Lv2.观梦者

梦石
0
星屑
637
在线时间
164 小时
注册时间
2012-4-18
帖子
264
跳转到指定楼层
1
发表于 2016-2-10 23:54:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
如题,想在修改一下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. };
复制代码

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
2
发表于 2016-2-11 09:04:07 | 只看该作者
item.eva?

点评

找到位置了,不过也绝望了= =属性中只有8条= =根本没有扩展属性的内容。详细返回值我放在4楼了。  发表于 2016-2-11 20:21
= =我是想问插在哪一行= =  发表于 2016-2-11 20:18
那用这个 console.log(item) ,看看item 是什么东西  发表于 2016-2-11 19:22
添在什么地方啊?我添了,不过不管添在哪里都要报错= =  发表于 2016-2-11 18:22
添加一句 console.log(item.object()) f8看看给出什么内容. 大概是 item.object().xxx  发表于 2016-2-11 14:22
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

3
发表于 2016-2-11 10:03:19 | 只看该作者
item.xparams[1]可行吗?(首先你要确定你的角色有闪避)

点评

是用于道具的,如果没有设的话应该就是0吧= =话说这样写也不对,会有错误提示“Cannot read property '1' of undefind”  发表于 2016-2-11 10:14
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
637
在线时间
164 小时
注册时间
2012-4-18
帖子
264
4
 楼主| 发表于 2016-2-11 20:23:34 | 只看该作者
本帖最后由 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
复制代码
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
637
在线时间
164 小时
注册时间
2012-4-18
帖子
264
5
 楼主| 发表于 2016-2-11 20:53:45 | 只看该作者
本帖最后由 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);
          }
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
696 小时
注册时间
2011-1-4
帖子
208
6
发表于 2016-2-26 11:32:17 | 只看该作者
salvareless 发表于 2016-2-11 20:53
我去,我突然间找到了正确的写法= =。但是要固定数据库的设置方式,右侧的额外属性栏的前4个当中的第二个到 ...


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

item.traits[ i ].XXXX应该可以确定这条参数是暴击还是回避的吧,
遍历额外属性栏里的所有条目累加所有暴击项的值(VA里是可以在一个物品上写上两条暴击+X%的)
这样子比较好吧
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
637
在线时间
164 小时
注册时间
2012-4-18
帖子
264
7
 楼主| 发表于 2016-2-28 08:54:31 | 只看该作者
在MV里不行= =如果不按照顺序设的话,item.traits[3].value就不能正确获取到暴击这一条属性的值。
因为看F8里返回的值,额外属性并没有固定的位置,而是在数据库中,先写了哪个,哪个就排在前面,额外属性traits本身是一个数组,traits[3]是其内的一个小数组,内容大约是“ID区别属性,value表示值”。
traits[3]里的3,是指附加属性数组中的第三个小数组,而不是定位到命中,回避,暴击…………这样具体的属性,而且,如果你不再数据库里面设置,比如默认一个道具只有攻击属性:物理,命中率:100。你不增加上第三条回避,和第四条暴击的话,上面的代码就会报错,因为不存在traits[3]。
所以这里有一点麻烦,像我这样写了之后,就必须把数据库里面的额外属性的前4个固定顺序。我加上了一行判断也是为了保险和偷懒,毕竟不可能每个装备都加暴击回避,我有24个装备,每个都有暴击回避的话,分分钟破100
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
696 小时
注册时间
2011-1-4
帖子
208
8
发表于 2016-2-28 09:08:06 手机端发表。 | 只看该作者
那先判断item.traits[3]是否存在,然后判断item.traits[3].ID,再是item.traits[3].valve。

这样子不行的吗
每个都要一模一样的话有点蛋疼了。。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-8 02:37

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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