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

Project1

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

[交流讨论] 基于YEP插件的随机元素增强功能

[复制链接]

Lv2.观梦者

梦石
0
星屑
568
在线时间
74 小时
注册时间
2017-12-22
帖子
42
跳转到指定楼层
1
发表于 2022-11-8 17:26:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x

因为使用了YEP_ItemCore物品核心和YEP_ElementCore元素核心插件,但元素核心插件只提供了单个元素的增强功能,元素比较多的时候,如果想要同级别装备涵盖所有元素的增强,要么全部设计在同一件装备上,要么就要做很多同样的装备进行随机,为了简化操作提高效率,就想着能不能直接做一个随机元素增强的功能出来。

查看了元素核心的代码,发现是直接读取了标签后写入数据库,没想出怎么改。
JAVASCRIPT 代码复制
  1. else if (line.match(noteC1)) {
  2.         var elementId = parseInt(RegExp.$1);
  3.         var rate = parseFloat(RegExp.$2 * 0.01);
  4.         obj.elementAmplify[elementId] = rate;


这一段是元素增强,重要的变量有2个,一个是elementId 元素ID,一个是rate 增强的概率。

但问题是这里是把元素增强的属性写进数据库,相当于设置了一个初始值,这里随机的话相当于只随机一次就固定了,肯定是不行的。

然后去查看了ItemCore 的生成代码。想找到和随机属性相关的代码看看有没有什么突破点。

然后就发现了这个方法

JAVASCRIPT 代码复制
  1. ItemManager.randomizeInitialItem = function(baseItem, newItem) {
  2.     if ($gameTemp.varianceStock()) return;
  3.     if (DataManager.isItem(baseItem)) {
  4.       this.randomizeInitialEffects(baseItem, newItem);
  5.     } else {
  6.       this.randomizeInitialStats(baseItem, newItem);
  7.     }
  8. };


看了一下似乎是在装备生成前,调整装备属性数值的方法。又分为2部分,具体都是什么我也不太清楚,看起来像是物品,所以我又看了下面的方法
JAVASCRIPT 代码复制
  1. ItemManager.randomizeInitialStats = function(baseItem, newItem) {
  2.     if (baseItem.randomVariance <= 0) return;
  3.     var randomValue = baseItem.randomVariance * 2 + 1;
  4.     var offset = baseItem.randomVariance;
  5.     for (var i = 0; i < 8; ++i) {
  6.       if (newItem.params[i] === 0) continue;
  7.       newItem.params[i] += Math.floor(Math.random() * randomValue - offset);
  8.       if (!Yanfly.Param.ItemNegVar && baseItem.params[i] >= 0) {
  9.         newItem.params[i] = Math.max(newItem.params[i], 0);
  10.       }}
  11. };


这应该就是我要找的了,在for循环里加了几行代码,就变成了下面这样。

JAVASCRIPT 代码复制
  1. ItemManager.randomizeInitialStats = function(baseItem, newItem) {
  2.     if (baseItem.randomVariance <= 0) return;
  3.     var randomValue = baseItem.randomVariance * 2 + 1;
  4.     var offset = baseItem.randomVariance;
  5.     for (var i = 0; i < 8; ++i) {
  6.       if (newItem.params[i] === 0) continue;
  7.       newItem.params[i] += Math.floor(Math.random() * randomValue - offset);
  8.       if (!Yanfly.Param.ItemNegVar && baseItem.params[i] >= 0) {
  9.         newItem.params[i] = Math.max(newItem.params[i], 0);
  10.       }
  11.           if(newItem.elementAmplify[1]!=0){
  12.                   newItem.elementAmplify[parseInt(Math.randomInt(8) + 2)] = newItem.elementAmplify[1];
  13.                   newItem.elementAmplify[1] = 0;
  14.           }
  15.     }
  16. };



elementAmplify就是元素增强,抄自元素核心插件,加了一段判断了一下元素1的增幅,如果元素1的值不为0,就把元素1的值赋值给元素2-9里的随机一个元素,然后把元素1的增强清空。

因为元素1是物理,也就是说,元素增强标签写成<Element Amplify 1: +10%>的时候,会随机增强任意一个ID为2-9的元素。

代价就是物理元素无法增强,但其实也可以单独创建一个随机元素,然后把代码里elementAmplify[1] 的中括号内的数字替换成随机元素的ID就行了。

测试了一下似乎可以实现。

以此类推,似乎也可以调整其他属性乃至随机词条。emmm.....






游戏爱好者

Lv3.寻梦者

梦石
0
星屑
1339
在线时间
69 小时
注册时间
2010-12-22
帖子
124
2
发表于 2022-11-8 20:47:31 | 只看该作者
我晕~~~
哪儿有这么复杂?
你用“YEP_ItemCore”的脚本来制作几个元素加强的前缀或者后缀,比如说:1、烈火之(火焰增强)、2、寒冰之(冰冻增强)、3、闪电之(雷电加强),然后你所需要随机增强元素的装备(比如是勇者之剑)备注栏写上插件指令:
<Prefixes>
1 30%
2 30%
3 30%
1-3 10%
</Prefixes>
(实际概率自己调整)这样就会概率出现火焰加强(烈火之勇者之剑)、冰霜加强(寒冰之勇者之剑)、雷电加强(闪电之勇者之剑)以及全部一起加强的装备了呀。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 21:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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