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

Project1

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

[原创发布] 简易藏宝图插件

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1603
在线时间
253 小时
注册时间
2020-1-24
帖子
45
跳转到指定楼层
1
发表于 2023-5-27 20:25:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 中二幻者 于 2023-5-31 20:04 编辑


将代码复制粘贴到txt文本中,然后改成Treasure.js就可以了。
这个插件可以设置多个藏宝图,为每一个藏宝图设置对应的地图坐标。
奖励和概率之类的就在公共事件里自己设置,弄好之后在物品的效果那把这个公共事件添加上就行,物品记得设置成非消耗品。
最后说一句AI牛逼,有时间继续让AI完善这个插件,比如把奖励的概率啥的都弄在插件里。



JAVASCRIPT 代码复制
  1. //=============================================================================
  2. // RPG Maker MZ -
  3. //=============================================================================
  4.  
  5. /*:
  6.  * @target MZ
  7.  * @plugindesc 简单的藏宝图插件,检查队伍与指定坐标是否重叠,重叠则获得奖励,奖励需要在公共事件中添加对应的事件即可。
  8.  * @author A.I
  9.  * @url
  10.  * @orderAfter
  11.  
  12.  * @plugindesc 检查队伍与指定坐标是否重叠
  13.  * @param treasures
  14.  * @text 藏宝图信息
  15.  * @type struct[]
  16.  * @desc 指定藏宝图的信息(地图ID、X轴和Y轴,以及物品ID)。
  17.  * @default ["{\"mapID\": \"1\",\"x\": \"5\",\"y\": \"10\",\"itemID\": \"1\"}","{\"mapID\": \"2\",\"x\": \"20\",\"y\": \"15\",\"itemID\": \"2\"}","{\"mapID\": \"3\",\"x\": \"10\",\"y\": \"5\",\"itemID\": \"3\"}","{\"mapID\": \"4\",\"x\": \"15\",\"y\": \"20\",\"itemID\": \"4\"}","{\"mapID\": \"5\",\"x\": \"25\",\"y\": \"30\",\"itemID\": \"5\"}"]
  18.  *
  19.  * @help Treasure.js
  20.  *
  21.  * 简易藏宝图插件
  22.  * 检查队伍与指定坐标是否重叠,如果是则获得奖励。
  23.  * 奖励内容和概率在公共事件中设置,物品设置为非消耗品。
  24.  *
  25.  */
  26.  
  27. (function() {
  28.   var parameters = PluginManager.parameters('Treasure');
  29.   var treasures = JSON.parse(parameters['treasures'] || "[]");
  30.  
  31.   var _Scene_Item_useItem = Scene_Item.prototype.useItem;
  32.   Scene_Item.prototype.useItem = function() {
  33.     _Scene_Item_useItem.call(this);
  34.     for (var i = 0; i < treasures.length; i++) {
  35.       var treasure = JSON.parse(treasures[i]);
  36.       if (this.item() === $dataItems[treasure.itemID] && $gameMap.mapId() === Number(treasure.mapID)) {
  37.         if ($gamePlayer.x === Number(treasure.x) && $gamePlayer.y === Number(treasure.y)) {
  38.           //$gameParty.gainGold(100);
  39.           $gameParty.gainItem($dataItems[treasure.itemID], -1);
  40.           $gameMessage.add('你发现了宝藏!');
  41.         } else if ($gamePlayer.x < Number(treasure.x) && $gamePlayer.y < Number(treasure.y)) {
  42.           $gameMessage.add('向右下一些');
  43.         } else if ($gamePlayer.x < Number(treasure.x) && $gamePlayer.y > Number(treasure.y)) {
  44.           $gameMessage.add('向右上一些');
  45.         } else if ($gamePlayer.x > Number(treasure.x) && $gamePlayer.y < Number(treasure.y)) {
  46.           $gameMessage.add('向左下一些');
  47.         } else if ($gamePlayer.x > Number(treasure.x) && $gamePlayer.y > Number(treasure.y)) {
  48.           $gameMessage.add('向左上一些');
  49.         } else if ($gamePlayer.x === Number(treasure.x) && $gamePlayer.y < Number(treasure.y)) {
  50.           $gameMessage.add('向下一些');
  51.         } else if ($gamePlayer.x === Number(treasure.x) && $gamePlayer.y > Number(treasure.y)) {
  52.           $gameMessage.add('向上一些');
  53.         } else if ($gamePlayer.y === Number(treasure.y) && $gamePlayer.x < Number(treasure.x)) {
  54.           $gameMessage.add('向右一些');
  55.         } else if ($gamePlayer.y === Number(treasure.y) && $gamePlayer.x > Number(treasure.x)) {
  56.           $gameMessage.add('向左一些');
  57.         }
  58.         return;
  59.       }
  60.     }
  61.     $gameMessage.add('宝藏不在这个地图');
  62.   };
  63. })();

Lv3.寻梦者

梦石
0
星屑
3637
在线时间
583 小时
注册时间
2022-11-26
帖子
283
2
发表于 2023-5-27 22:04:19 | 只看该作者
本帖最后由 余杭 于 2023-5-27 22:17 编辑

运行有效果啊

不过这代码是在地图上一直点点点,不是用物品触发的

另外,这个可以用事件写,不过只限数量少
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1603
在线时间
253 小时
注册时间
2020-1-24
帖子
45
3
 楼主| 发表于 2023-5-27 22:51:30 | 只看该作者
余杭 发表于 2023-5-27 22:04
运行有效果啊

不过这代码是在地图上一直点点点,不是用物品触发的

原来是这个效果啊,但和我想的还是不一样,最好是能用物品触发。
事件我会弄,但是数量多就麻烦了,弄成插件简单,就想试一试,结果还是没弄懂。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3637
在线时间
583 小时
注册时间
2022-11-26
帖子
283
4
发表于 2023-5-28 00:51:49 | 只看该作者
中二幻者 发表于 2023-5-27 22:51
原来是这个效果啊,但和我想的还是不一样,最好是能用物品触发。
事件我会弄,但是数量多就麻烦了,弄成 ...


插件思路就是        给藏宝图定义四个属性,分别是地图ID,地图X,地图Y,奖励。

有前三个就可以定位一个藏宝地,然后可以让藏宝图随机生成这三个属性。

使用方法的话,通过公共事件,将三个属性分别带入变量1、2、3,
然后就可以通过分支去判断到没到藏宝地,到了的话就得到 奖励,

但是具体怎么写插件就看你的了,感觉这样写插件会简单一点。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1603
在线时间
253 小时
注册时间
2020-1-24
帖子
45
5
 楼主| 发表于 2023-5-28 13:27:58 | 只看该作者
余杭 发表于 2023-5-28 00:51
插件思路就是        给藏宝图定义四个属性,分别是地图ID,地图X,地图Y,奖励。

有前三个就可以定位一 ...

随机好像不太行,毕竟地图上有些地方是过不去的。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5524
在线时间
1139 小时
注册时间
2013-12-3
帖子
271
6
发表于 2023-5-28 14:50:42 | 只看该作者
首先你加一张宝藏表/Json
里面定义一下宝藏图ID、宝藏所在地图ID、宝藏所在X、Y轴、奖励等字段

然后给宝藏图上绑定一个公共事件

公共事件内容
用脚本获取当前使用的道具(宝藏图)ID,根据ID索引到宝藏位置
条件分支 当前地图ID==宝藏地图ID && 当前角色X坐标==宝藏X坐标 && 当前角色Y坐标==宝藏Y坐标
条件成立获得奖励
条件不成立比对一下几个变量给出对应提示
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1603
在线时间
253 小时
注册时间
2020-1-24
帖子
45
7
 楼主| 发表于 2023-5-31 17:18:16 | 只看该作者
HM495 发表于 2023-5-28 14:50
首先你加一张宝藏表/Json
里面定义一下宝藏图ID、宝藏所在地图ID、宝藏所在X、Y轴、奖励等字段

呃,我会设置公共事件,我只想在插件中写出来,今天又问了一下AI,已经基本实现了我想要的效果。只不过只能设置一个藏宝图,我改成数组就没了效果了。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5524
在线时间
1139 小时
注册时间
2013-12-3
帖子
271
8
发表于 2023-5-31 17:37:58 | 只看该作者
本帖最后由 HM495 于 2023-5-31 18:02 编辑
中二幻者 发表于 2023-5-31 17:18
呃,我会设置公共事件,我只想在插件中写出来,今天又问了一下AI,已经基本实现了我想要的效果。只不过只 ...


没明白你的需求,你要“使用藏宝图”作为触发条件,那公共事件就是留给你用的现成接口
一张表/json/数组,一个公共事件,半事件半代码就可以以简单的方法做到不同道具对应不同藏宝地点
为啥非得纠结用代码实现…还是我对需求理解有误

像是具体功能方面,你是一张藏宝图对应多个地点?还是多张藏宝图对应各自不同的地点?地点数据从哪里获取?地点和奖励怎么关联如何配置?
这种关键逻辑啥都没有不明不白的,别说AI了,人也没法给你写啊

  1. var treasure = treasures; →  var treasure = treasures[i];
复制代码

代码用code括一下,不然会有地方被吞掉
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1603
在线时间
253 小时
注册时间
2020-1-24
帖子
45
9
 楼主| 发表于 2023-5-31 18:28:31 | 只看该作者
HM495 发表于 2023-5-31 17:37
没明白你的需求,你要“使用藏宝图”作为触发条件,那公共事件就是留给你用的现成接口
一张表/json/数组 ...

已经解决了,AI牛逼。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-10 19:00

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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