Project1
标题: 基于YEP插件的随机元素增强功能 [打印本页]
作者: 无终 时间: 2022-11-8 17:26
标题: 基于YEP插件的随机元素增强功能
因为使用了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.....
作者: loveinyou200 时间: 2022-11-8 20:47
我晕~~~
哪儿有这么复杂?
你用“YEP_ItemCore”的脚本来制作几个元素加强的前缀或者后缀,比如说:1、烈火之(火焰增强)、2、寒冰之(冰冻增强)、3、闪电之(雷电加强),然后你所需要随机增强元素的装备(比如是勇者之剑)备注栏写上插件指令:
<Prefixes>
1 30%
2 30%
3 30%
1-3 10%
</Prefixes>
(实际概率自己调整)这样就会概率出现火焰加强(烈火之勇者之剑)、冰霜加强(寒冰之勇者之剑)、雷电加强(闪电之勇者之剑)以及全部一起加强的装备了呀。。。
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |