Project1
标题:
怎么让装备自动添加一个随机的前缀
[打印本页]
作者:
kingybk1976
时间:
2022-11-25 20:03
标题:
怎么让装备自动添加一个随机的前缀
请教:一件装备掉落时,随机附加一个前缀,比如一把武器:单手剑,掉落实际获得的是强力的单手剑或敏捷的单手剑,属性根据前缀来附加。
有没有什么方法或插件?
作者:
apple5740
时间:
2022-11-25 21:31
本帖最后由 apple5740 于 2022-11-25 23:02 编辑
感觉这个问题跟你之前随机属性的问题有点类似。。
武器,装备这款我还没学习到,不过应该跟角色数据差不多。
所有同id的武器应该共用一条数据,这条数据被保存在 Weapons.json 中,可以通过$dataWeapons来查看。
实现的方式有很多种。。
我的理解是每出现一个新词条武器,就需要新建一个武器数据,并且写入 Weapons.json中
//按照武器的id生成一件复制的武器,比如使用 CreateWeapon(1)方法,在原版的Weapons.json数据下就可以生成一把剑。
//使用下面的方法时,请务必备份一次 data/Weapons.json 数据,以防万一。。
//不足之处:新档也可能会共享新生成的数据...
var CreateWeapon = function(id){
if (!id) return;
var Weapon = JsonEx.makeDeepCopy($dataWeapons[id]);
Weapon.id = $dataWeapons.length;
//这里修改weapon的属性,比如生成一个攻击力+10的剑
//修改其他属性,或者名字什么的都可以写在这里,具体属性 可以通过控制台进行查看
// 随机 Math.floor(Math.random()*10 + 1) 随机出1-10的数值
Weapon.params[2] = 10;
//分割线
$dataWeapons[Weapon.id] = Weapon;
var fs = require('fs');
fs.writeFileSync( 'data/Weapons.json', JSON.stringify($dataWeapons));
}
复制代码
作者:
小秋橙
时间:
2022-11-25 22:09
楼上这怎么还用fs去写文件了……我上次确实说过「要写入$dataWeapons」但不是写入文件。
DataManager.loadDatabase = function () {
const test = this.isBattleTest() || this.isEventTest();
const prefix = test ? "Test_" : "";
for (const databaseFile of this._databaseFiles) {
this.loadDataFile(databaseFile.name, prefix + databaseFile.src);
}
if (this.isEventTest()) {
this.loadDataFile("$testEvent", prefix + "Event.json");
}
}
DataManager.loadGame = function (savefileId) {
const saveName = this.makeSavename(savefileId);
return StorageManager.loadObject(saveName).then(contents => {
this.createGameObjects();
this.extractSaveContents(contents);
this.correctDataErrors();
return 0;
});
}
首先我们看一下这两个函数,函数1是「启动游戏时执行一次」,会把data文件夹下面的所有json文件(地图除外)读一遍,保存在各个$dataXxx中。
函数2是「读取存档时执行一次」,会根据存档的内容把各个$gameXxx(比如变量和开关)设置好。
假设编号为n的武器「在一个周目中只能获取一件」,那么我们只要在获取前对$dataWeapons[n]的某些属性赋值。比如对name赋值来得到新的前缀,对params赋值来修改八项属性。
但是这样做有两个问题:一是关掉游戏重新启动以后,函数1会把你刚才辛辛苦苦设置好的值覆盖掉。二是如果返回标题然后读取另一个存档,则会把当前游戏进度中的值带到读档以后……
为了避免这两个问题,我们需要两点保证:
1. 修改过的值必须在存档时被一起保存,比如保存在开关、变量里。
2. 读取存档时需要先额外调用一次函数1将数据库恢复到初始状态,然后再根据上一点保证中的变量和开关对数据库进行调整。
示例的话,比如说我们有一个插件定义了下面的函数3,并且在读取存档时新增了一行:
DataManager.update = function () {
if ($gameVariables.value(10) > 50) $dataWeapons[1].name = "修复的剑"; else $dataWeapons[1].name = "生锈的剑";
}
DataManager.loadGame = function (savefileId) {
const saveName = this.makeSavename(savefileId);
return StorageManager.loadObject(saveName).then(contents => {
this.createGameObjects();
this.extractSaveContents(contents);
this.correctDataErrors();
DataManager.loadDatabase(); // 新增的一行,重置数据库
DataManager.update(); // 根据变量和开关等调整数据库
return 0;
});
}
然后在游戏中,什么时候需要把1号武器的名字从「生锈的剑」改成「修复的剑」,就什么时候把10号变量改成大于50的值,然后调用一次DataManager.update()让其生效。
作者:
wxh811211
时间:
2022-11-29 08:17
GF的独立装备系统满足你的随机属性和前缀,后缀等一切.关键还对独立装备优化了.
作者:
neethime
时间:
2023-4-9 21:27
wxh811211 发表于 2022-11-29 08:17
GF的独立装备系统满足你的随机属性和前缀,后缀等一切.关键还对独立装备优化了. ...
官方有独立装备系统吗 求详细
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1