加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
因为使用了YEP_ItemCore物品核心和YEP_ElementCore元素核心插件,但元素核心插件只提供了单个元素的增强功能,元素比较多的时候,如果想要同级别装备涵盖所有元素的增强,要么全部设计在同一件装备上,要么就要做很多同样的装备进行随机,为了简化操作提高效率,就想着能不能直接做一个随机元素增强的功能出来。
查看了元素核心的代码,发现是直接读取了标签后写入数据库,没想出怎么改。
else if (line.match(noteC1)) { var elementId = parseInt(RegExp.$1); var rate = parseFloat(RegExp.$2 * 0.01); obj.elementAmplify[elementId] = rate;
else if (line.match(noteC1)) {
var elementId = parseInt(RegExp.$1);
var rate = parseFloat(RegExp.$2 * 0.01);
obj.elementAmplify[elementId] = rate;
这一段是元素增强,重要的变量有2个,一个是elementId 元素ID,一个是rate 增强的概率。
但问题是这里是把元素增强的属性写进数据库,相当于设置了一个初始值,这里随机的话相当于只随机一次就固定了,肯定是不行的。
然后去查看了ItemCore 的生成代码。想找到和随机属性相关的代码看看有没有什么突破点。
然后就发现了这个方法
ItemManager.randomizeInitialItem = function(baseItem, newItem) { if ($gameTemp.varianceStock()) return; if (DataManager.isItem(baseItem)) { this.randomizeInitialEffects(baseItem, newItem); } else { this.randomizeInitialStats(baseItem, newItem); } };
ItemManager.randomizeInitialItem = function(baseItem, newItem) {
if ($gameTemp.varianceStock()) return;
if (DataManager.isItem(baseItem)) {
this.randomizeInitialEffects(baseItem, newItem);
} else {
this.randomizeInitialStats(baseItem, newItem);
}
};
看了一下似乎是在装备生成前,调整装备属性数值的方法。又分为2部分,具体都是什么我也不太清楚,看起来像是物品,所以我又看了下面的方法
ItemManager.randomizeInitialStats = function(baseItem, newItem) { if (baseItem.randomVariance <= 0) return; var randomValue = baseItem.randomVariance * 2 + 1; var offset = baseItem.randomVariance; for (var i = 0; i < 8; ++i) { if (newItem.params[i] === 0) continue; newItem.params[i] += Math.floor(Math.random() * randomValue - offset); if (!Yanfly.Param.ItemNegVar && baseItem.params[i] >= 0) { newItem.params[i] = Math.max(newItem.params[i], 0); }} };
ItemManager.randomizeInitialStats = function(baseItem, newItem) {
if (baseItem.randomVariance <= 0) return;
var randomValue = baseItem.randomVariance * 2 + 1;
var offset = baseItem.randomVariance;
for (var i = 0; i < 8; ++i) {
if (newItem.params[i] === 0) continue;
newItem.params[i] += Math.floor(Math.random() * randomValue - offset);
if (!Yanfly.Param.ItemNegVar && baseItem.params[i] >= 0) {
newItem.params[i] = Math.max(newItem.params[i], 0);
}}
};
这应该就是我要找的了,在for循环里加了几行代码,就变成了下面这样。
ItemManager.randomizeInitialStats = function(baseItem, newItem) { if (baseItem.randomVariance <= 0) return; var randomValue = baseItem.randomVariance * 2 + 1; var offset = baseItem.randomVariance; for (var i = 0; i < 8; ++i) { if (newItem.params[i] === 0) continue; newItem.params[i] += Math.floor(Math.random() * randomValue - offset); if (!Yanfly.Param.ItemNegVar && baseItem.params[i] >= 0) { newItem.params[i] = Math.max(newItem.params[i], 0); } if(newItem.elementAmplify[1]!=0){ newItem.elementAmplify[parseInt(Math.randomInt(8) + 2)] = newItem.elementAmplify[1]; newItem.elementAmplify[1] = 0; } } };
ItemManager.randomizeInitialStats = function(baseItem, newItem) {
if (baseItem.randomVariance <= 0) return;
var randomValue = baseItem.randomVariance * 2 + 1;
var offset = baseItem.randomVariance;
for (var i = 0; i < 8; ++i) {
if (newItem.params[i] === 0) continue;
newItem.params[i] += Math.floor(Math.random() * randomValue - offset);
if (!Yanfly.Param.ItemNegVar && baseItem.params[i] >= 0) {
newItem.params[i] = Math.max(newItem.params[i], 0);
}
if(newItem.elementAmplify[1]!=0){
newItem.elementAmplify[parseInt(Math.randomInt(8) + 2)] = newItem.elementAmplify[1];
newItem.elementAmplify[1] = 0;
}
}
};
elementAmplify就是元素增强,抄自元素核心插件,加了一段判断了一下元素1的增幅,如果元素1的值不为0,就把元素1的值赋值给元素2-9里的随机一个元素,然后把元素1的增强清空。
因为元素1是物理,也就是说,元素增强标签写成<Element Amplify 1: +10%>的时候,会随机增强任意一个ID为2-9的元素。
代价就是物理元素无法增强,但其实也可以单独创建一个随机元素,然后把代码里elementAmplify[1] 的中括号内的数字替换成随机元素的ID就行了。
测试了一下似乎可以实现。
以此类推,似乎也可以调整其他属性乃至随机词条。emmm.....
|