Project1

标题: 求助如何让事件的位置永久的改变 [打印本页]

作者: UTO    时间: 2021-8-19 17:22
标题: 求助如何让事件的位置永久的改变
想做个可以自定义放置物体的房间,采取的方法是把事件隐藏起来,使用道具放置的时候把对应事件移动到角色的面前
防止事件重叠和防止放到墙上的问题都用脚本给解决了,但是每次改变事件的位置,刷新一下地图事件就又跑回去了
虽然可以用变量强行记住位置,但是不知道各位大佬有没有更好的方法?我自己是翻遍了脚本库都没找着能永久改变事件位置的脚本...
好人一生平安~
作者: lqi991    时间: 2021-8-19 17:22
本帖最后由 lqi991 于 2021-10-1 03:36 编辑

两段代码,保存,和刷新位置
1.需要在两段代码注释下设置一个变量ID,和设置需要保存的事件ID
  (注:限一个地图,如果需要多地图保存再说吧)
2.为方便执行代码,可以写在公共事件,一个保存,一个刷新
3.创建一个事件,触发条件:并行处理,调用刷新事件位置代码,然后在底下暂时删除事件,这样地图切换回来就读取位置
保存事件位置:
  1. // 需要一个变量保存,输入ID
  2. let id = 1;
  3. // 需要保存的事件如 1,3,4
  4. // 输入: [1,3,4]
  5. // (注意 , 号,是英文符号)
  6. let sz = [];
  7. (function () {if (!$gameVariables.value(id)) $gameVariables._data[id] = [];let d = $gameVariables._data[id];const sx = ['x', 'y', '_direction', '_directionFix', '_moveSpeed', '_moveFrequency', '_characterName', '_characterIndex', '_pattern', '_walkAnime', '_stepAnime', '_through'];for (let a = 0; a < sz.length; a++) {let sj = $gameMap.event(sz[a]);if (sj) {d[sz[a]] = {};for (let b = 0; b < sx.length; b++) {d[sz[a]][sx[b]] = sj[sx[b]];};};};})();
复制代码


刷新事件位置:
  1. // 输入读取的变量ID
  2. let id = 1;
  3. ;(function () {if (!$gameVariables.value(id)) $gameVariables._data[id] = [];let d = $gameVariables._data[id];for (let n in d) {if (d[n]) {let sj = $gameMap.event(n);if(sj){for(let b in d[n]){sj[b] = d[n][b]};sj.setPosition(d[n].x,d[n].y)}};};})();
复制代码

作者: wabcmcc    时间: 2021-8-19 23:38
visu系列,有事件記錄插件.

自定義放置物品用Triacontane模板事件插件TemplateEvent.js
加事件動態生成插件EventReSpawn.js

作者: q3226257    时间: 2021-8-20 13:08
用两个事件就完事了~
作者: UTO    时间: 2021-8-29 11:56
q3226257 发表于 2021-8-20 13:08
用两个事件就完事了~

那如何维持事件的朝向,我试过几次,结果是虽然位置改变了,即使用了脚本,但是事件的朝向仍然是向下的
作者: UTO    时间: 2021-12-10 02:23
lqi991 发表于 2021-10-1 03:29
两段代码,保存,和刷新位置
1.需要在两段代码注释下设置一个变量ID,和设置需要保存的事件ID
  (注:限一个地 ...

出现了明明事件是第二页事件页但图像是第一页事件的情况,就你收起来,切地图再切回来,那个事件看上去还在原点,但实际上触发的事件已经变成第二页的事件了。相反,你收起来再放下,切地图之后事件的图像变成第二页的图像了,但触发的是第一页的事件,不知道怎么解决
作者: lqi991    时间: 2021-12-11 04:12
本帖最后由 lqi991 于 2021-12-11 04:22 编辑
UTO 发表于 2021-12-10 02:23
出现了明明事件是第二页事件页但图像是第一页事件的情况,就你收起来,切地图再切回来,那个事件看上去还 ...


前面的代码会储存事件以下内容:
  坐标,朝向,移动速度,移动频率,行走图,模式,行走动画,踏步动画,穿透
[line]1[/line]
以下脚本只储存坐标,没有多余的储存了

  1. // 需要一个变量保存,输入ID
  2. let id = 1;
  3. // 需要保存的事件如 1,3,4
  4. // 输入: [1,3,4]
  5. // (注意 , 号,是英文符号)
  6. let sz = [];
  7. (function () {if (!$gameVariables.value(id)) $gameVariables._data[id] = [];let d = $gameVariables._data[id];const sx = ['x', 'y'];for (let a = 0; a < sz.length; a++) {let sj = $gameMap.event(sz[a]);if (sj) {d[sz[a]] = {};for (let b = 0; b < sx.length; b++) {d[sz[a]][sx[b]] = sj[sx[b]];};};};})();
复制代码

作者: UTO    时间: 2021-12-11 13:11
lqi991 发表于 2021-12-11 04:12
前面的代码会储存事件以下内容:
  坐标,朝向,移动速度,移动频率,行走图,模式,行走动画,踏步动画,穿透

谢谢!解决了!




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1