随机购买装备插件
# 随机购买装备插件
做一个随机购买装备的插件,使用1000元钱,然后随机从设置好的装备列表获得一件装备,主要看运气,有可能获得一件小木剑,也有可能获得屠龙刀。
# 所有装备的列表在哪里呢?
所有装备的列表,是在data文件夹下面以json的形式记录着,在游戏进行的时候,会依照着json文件中的数据创建一个一样的对象,各个对象的对应关系可以从rpg_manager.js中看到,如下代码。我们可以调用$dataWeapons
来获得武器的信息。$dataWeapons
是全局变量,可以直接在你的插件内调用。
DataManager._databaseFiles = [{
name: '$dataActors',
src: 'Actors.json'
},
{
name: '$dataClasses',
src: 'Classes.json'
},
{
name: '$dataSkills',
src: 'Skills.json'
},
{
name: '$dataItems',
src: 'Items.json'
},
{
name: '$dataWeapons',
src: 'Weapons.json'
},
{
name: '$dataArmors',
src: 'Armors.json'
},
{
name: '$dataEnemies',
src: 'Enemies.json'
},
{
name: '$dataTroops',
src: 'Troops.json'
},
{
name: '$dataStates',
src: 'States.json'
},
{
name: '$dataAnimations',
src: 'Animations.json'
},
{
name: '$dataTilesets',
src: 'Tilesets.json'
},
{
name: '$dataCommonEvents',
src: 'CommonEvents.json'
},
{
name: '$dataSystem',
src: 'System.json'
},
{
name: '$dataMapInfos',
src: 'MapInfos.json'
}
];
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 怎么获得装备呢?
通过在各个核心js文件中搜索gain item、 change item等关键词,我们找到了获得物品的函数是放在rpg_objects.js中的Game_Party.prototype.gainItem函数。这样的话,我们也可以调用这个函数来获取装备,如下代码:
//获得物品
Game_Party.prototype.gainItem = function (item, amount, includeEquip) {
//容器 = 物品容器(项目)
var container = this.itemContainer(item);
//如果(容器)
if (container) {
//之前数目 = 物品数字(项目)
var lastNumber = this.numItems(item);
//新数目 = 之前数目 + 数量
var newNumber = lastNumber + amount;
//容器[项目 id] = 新数目 在之间(0 , 最大物品数(项目) )
container[item.id] = newNumber.clamp(0, this.maxItems(item));
//如果(容器[项目 id] === 0 )
if (container[item.id] === 0) {
//删除 容器[项目 id]
delete container[item.id];
}
//如果(包含装备 并且 新数目 < 0 )
if (includeEquip && newNumber < 0) {
//抛弃成员装备(项目 , -新数目 )
this.discardMembersEquip(item, -newNumber);
}
//游戏地图 请求刷新()
$gameMap.requestRefresh();
}
};
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 怎么获得并且控制当前的金钱数量呢?
一样的对gold,money等进行搜索,我们找到了控制金钱数量的方法,Game_Party.prototype.gold等等,如下代码:
//金钱
Game_Party.prototype.gold = function () {
//返回 金钱
return this._gold;
};
//获得金钱
Game_Party.prototype.gainGold = function (amount) {
//金钱 = (金钱 + 数量 ) 在之间(0,最大金钱)
this._gold = (this._gold + amount).clamp(0, this.maxGold());
};
//失去金钱
Game_Party.prototype.loseGold = function (amount) {
//获得金钱(-数量)
this.gainGold(-amount);
};
//最大金钱
Game_Party.prototype.maxGold = function () {
//返回 99999999
return 99999999;
};
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 随机数怎么得到?
这里,我们介绍几个js
自带的函数。
Math.random();
结果为
0-1
间的一个随机数(包括0,不包括1)Math.floor(num);
参数
num
为一个数值,函数结果为num
的整数部分。Math.round(num);
参数
num
为一个数值,函数结果为num
四舍五入后的整数。
利用这三个函数,我们就可以获得我们想要的随机数。
点此阅读很多关于Math对象的API (opens new window)。
# 随机购买装备插件的代码
# 第一版截图形式的代码
以下内容直接取自于第一版截图形式的代码。
# 第二版代码 推荐
第二版推荐使用ES6
的语法来编写插件。在js\plugins
文件内创建名为RandomWeapon.js
的文件。具体代码如下:
/*:
* @plugindesc 随机获得一把武器
* @author 阮中楠(第二版)
*
* @help
* 在合适的地方,执行 globalRandomWeapon.getWeapon(); 函数即可。
*/
/**
* 全局随机武器单例对象
* @description
* 设计原理: 执行某个函数即可完成业务,故使用全局单例对象的写法。
*/
const globalRandomWeapon = {
/**
* 武器列表
* 随机获得武器的id值,id是根据dataweapons.js里面的id属性确定的。
*/
weapensList: [1, 2, 3, 4],
/** 价格 每次武器随机的价格 */
price: 1000,
/** 获得武器 */
getWeapon() {
// 如果玩家当前的金币不够,则退出函数。
if ($gameParty.gold() < this.price) {
// 未来可以在此处优化成全局提示,提示玩家金币不足。
return;
} else {
// 获得0~1的随机数、乘以武器数量后,再取整数部分,作为随机武器数组下标
const randomIndex = Math.ceil(Math.random() * this.weapensList.length);
// 从数组内获取id值
const id = this.weapensList[randomIndex];
// 队伍获得物品。第一个参数是从json内根据id获取武器对象。第二个是获取的物品数量。
$gameParty.gainItem($dataWeapons[id], 1);
// 队伍扣款。
$gameParty.loseGold(this.price);
}
}
};
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 使用插件
在事件内使用脚本即可,调用刚才编写的globalRandomWeapon.getWeapon();
方法即可。在事件页选择脚本选项:
在脚本框内输入刚才编写的globalRandomWeapon.getWeapon();
方法,即实现调用函数:
然后触发事件即可。
在mv的脚本框内增加分号
mv的脚本框之所以可以识别代码,其本质上是使用了eval()
函数。这是一个容易出错的函数,为了保证代码尽可能不会出现错误,第二版推荐各位在此处输入可执行的JavaScript
语句时,总是带上分号。