Project1
标题:
请问装备的暴击和回避属性在写插件的时候怎么调用?
[打印本页]
作者:
salvareless
时间:
2016-2-10 23:54
标题:
请问装备的暴击和回避属性在写插件的时候怎么调用?
如题,想在修改一下YEP_itemcode,这个插件,以实现在道具栏里显示当前光标选中的装备时,可以显示它的回避和暴击数值。
但是YEP的代码引擎里好像没有重新定义回避和暴击这两个属性,而YEP_itemcode里面,那一段的相关引用又是直接引用YEP代码引擎中的语句,我尝试了一下,不能直接写this.item.eva,或者this.item.xparam(1),之类的写法= =都不对,原谅我不懂代码。
请教一下各路大神,当前装备的回避和暴击要怎么引用啊。这段具体该怎么写= =具体代码在YEP_itemcode的1233行。
Window_ItemStatus.prototype.drawEquipInfo = function(item) { //装备信息
var rect = new Rectangle();
if (eval(Yanfly.Param.ItemShowIcon)) {
rect.width = (this.contents.width - Window_Base._faceWidth) / 2;
} else {
rect.width = this.contents.width / 2;
}
for (var i = 0; i < 6; ++i) {
rect = this.getRectPosition(rect, i);
var dx = rect.x + this.textPadding();
var dw = rect.width - this.textPadding() * 2;
this.changeTextColor(this.systemColor());
this.drawText(TextManager.param(i), dx, rect.y, dw);
this.changeTextColor(this.paramchangeTextColor(item.params[i]));
var text = Yanfly.Util.toGroup(item.params[i]);
if (item.params[i] >= 0) text = '+' + text;
if (text === '+0') this.changePaintOpacity(false);
this.drawText(text, dx, rect.y, dw, 'right');
this.changePaintOpacity(true);
}
//闪避——然而是错的= =
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);
this.changeTextColor(this.paramchangeTextColor(item.eva));
var text = Yanfly.Util.toGroup(item.eva);
if (item.eva >= 0) text = '+' + text;
if (text === '+0') this.changePaintOpacity(false);
this.drawText(text, dx, rect.y, dw, 'right');
this.changePaintOpacity(true);
//暴击——然而还是错的= =
rect = this.getRectPosition(rect, 7);
var dx = rect.x + this.textPadding();
var dw = rect.width - this.textPadding() * 2;
this.changeTextColor(this.systemColor());
this.drawText("暴击", dx, rect.y, dw);
this.changeTextColor(this.paramchangeTextColor(item.params[10]));
var text = Yanfly.Util.toGroup(item.params[10]);
if (item.params[10] >= 0) text = '+' + text;
if (text === '+0') this.changePaintOpacity(false);
this.drawText(text, dx, rect.y, dw, 'right');
this.changePaintOpacity(true);
};
复制代码
作者:
汪汪
时间:
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的代码引擎啊= =
ObjectanimationId: 4
atbStartFlat: 0atbStartRate: 0
atbTurnFlat: 0atbTurnRate: 0
baseItemIconIndex: 97
baseItemId: 1
baseItemName: "剑
"baseItemPrice: 500
boostCount: 0
cooldownChange: Object
cooldownDuration: Object
cooldownRate: Object
__proto__: Object
description: "这是说明↵这是说明"
eBodyIconImages: Array[0]
length: 0
__proto__: Array[0]
etypeId: 1
gauge1: "UNDEFINED"
gauge2: "UNDEFINED"
gauge3: "UNDEFINED"
gaugeIcon1: "UNDEFINED"
gaugeIcon2: "UNDEFINED"
gaugeIcon3: "UNDEFINED"
globalCooldownChange: 0
globalCooldownDuration: 1
globalCooldownRate: 1
globalWarmupChange: 0
iconIndex: 97
id: 3001
maxItem: 100
meta: Object
__proto__: Object
name: "剑"
namePrefix: ""
nameSuffix: ""
nonIndepdent: false
note: ""
params: Array[8]
0: 0
1: 0
2: 10
3: 0
4: 0
5: 0
6: 0
7: 0
length: 8
__proto__: Array[0]
passiveStates: Array[0]
length: 0
__proto__: Array[0]
price: 500
priorityName: ""
randomVariance: 0
reflectAnimationId: 0
setPriorityName: false
spriteCannotMove: false
stypeCooldownChange: Object
stypeCooldownDuration: Object
stypeCooldownRate: Object
stypeWarmupChange: Object
traits: Array[4]
warmupChange: Object
wtypeId: 2
__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