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

Project1

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

[有事请教] NPC只在规定区域里移动?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1360
在线时间
193 小时
注册时间
2020-3-24
帖子
98
跳转到指定楼层
1
发表于 2020-4-24 21:18:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 ranatwo 于 2020-4-25 13:45 编辑

不想让NPC乱跑,有办法让他们在区域里移动吗?
在论坛搜索了很多办法,一一试了没有效果
试了OrangeRegionCollisions插件没有反应
用了YEP_RegionRestrictions就直接报错了...
在陆地上设置一个空白事件可以挡住,海里游的鱼就不行了,游着游着上陆地蛮尴尬的

————————————————————————————————

谢谢大家,我想到办法了,把图块复制一下,设置一个可通行一个不可通行,就能让鱼不游到陆地上了。

Lv4.逐梦者

梦石
0
星屑
11461
在线时间
615 小时
注册时间
2016-8-25
帖子
1402

R考场第七期纪念奖

2
发表于 2020-4-24 22:12:40 | 只看该作者
本帖最后由 PLeaseS 于 2020-4-24 23:26 编辑

有的,你可以搞一个区域
比如你用1号区域框起来,设置事件不能穿过
这只是个思路

不然你就直接设置固定路线把

说到空白事件可以挡住,那你把事件调成都在玩家上方或者下方说不定也可以挡
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1576
在线时间
161 小时
注册时间
2019-7-4
帖子
207
3
发表于 2020-4-25 11:18:58 | 只看该作者
数量少的话干脆用变量判断坐标得了~四个边界都给他看住就可以了
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2727
在线时间
210 小时
注册时间
2017-9-28
帖子
283
4
发表于 2020-4-25 11:45:47 | 只看该作者
YEP不是有个插件就是这效果嘛
你可以去B站看看插件说明及用法

点评

LZ表示:用了YEP_RegionRestrictions就直接报错了...  发表于 2020-4-25 11:51
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1360
在线时间
193 小时
注册时间
2020-3-24
帖子
98
5
 楼主| 发表于 2020-4-25 12:22:55 | 只看该作者
PLeaseS 发表于 2020-4-24 22:12
有的,你可以搞一个区域
比如你用1号区域框起来,设置事件不能穿过
这只是个思路

固定路线作为最后的方案了,在那之前还想挣扎一下。
框起来已经在用了,但是水里的npc设置了穿透,这个就不能实现了
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1360
在线时间
193 小时
注册时间
2020-3-24
帖子
98
6
 楼主| 发表于 2020-4-25 12:25:19 | 只看该作者
zyzzyzzyzzyz 发表于 2020-4-25 11:18
数量少的话干脆用变量判断坐标得了~四个边界都给他看住就可以了

我之前也想过,就是量多一个个设置变量太麻烦了。所以想偷懒问问有没有更简单一点的做法。
谢谢啦~
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
16134
在线时间
3998 小时
注册时间
2015-9-14
帖子
1337

开拓者

7
发表于 2020-4-25 14:01:03 | 只看该作者
事件移動範圍限制插件
作者:Triacontane

  1. /*=============================================================================
  2. EventMovableLimitation.js
  3. ----------------------------------------------------------------------------
  4. (C)2018 Triacontane
  5. This software is released under the MIT License.
  6. http://opensource.org/licenses/mit-license.php
  7. ----------------------------------------------------------------------------
  8. Version
  9. 1.0.0 2018/12/09 初版
  10. ----------------------------------------------------------------------------
  11. [Blog]   : https://triacontane.blogspot.jp/
  12. [Twitter]: https://twitter.com/triacontane/
  13. [GitHub] : https://github.com/triacontane/
  14. =============================================================================*/

  15. /*:
  16. * @plugindesc 事件移動範圍限制插件
  17.    EventMovableLimitationPlugin
  18. * @author triacontane
  19. *
  20. * @param commandPrefix
  21. * @desc 這是您在命名另一個插件和備註字段或插件命令時指定的前綴。 通常您不需要指定它。 [ ]
  22. * 他のプラグインとメモ欄もしくはプラグインコマンドの名称が被ったときに指定する接頭辞です。通常は指定不要です。
  23. * @default
  24. *
  25. * @help EventMovableRange.js
  26. *
  27. * 限制事件的可移動範圍。
  28. * 如果您嘗試超出初始展示位置的限制,則無法移動。
  29. * 請在活動的備忘錄欄中註明如下。
  30. * <移動制限:u, d, l, r>
  31. * <Movable:u, d, l, r>    //同上
  32. *  u : 向上方的可移動瓦片數量
  33. *  d : 向下方的可移動瓦片數量
  34. *  l : 向左方的可移動瓦片數量
  35. *  r : 向右方的可移動瓦片數量
  36. * 如果指定負值(例如-1),則指定方向的移動將變為無限制。
  37. *
  38. * イベントの移動可能な範囲を制限します。
  39. * 初期配置から制限を超えて移動しようとすると移動できなくなります。
  40. * イベントのメモ欄に以下の通り指定してください。
  41. * <移動制限:u, d, l, r>
  42. * <Movable:u, d, l, r>
  43. *  u : 上方向への移動可能タイル数
  44. *  d : 下方向への移動可能タイル数
  45. *  l : 左方向への移動可能タイル数
  46. *  r : 右方向への移動可能タイル数
  47. * -1など負の値を指定すると、指定方向への移動は無制限になります。
  48. *
  49. * This plugin is released under the MIT License.
  50. */
  51. /*:ja
  52. * @plugindesc イベント移動範囲制限プラグイン
  53. * @author トリアコンタン
  54. *
  55. * @param commandPrefix
  56. * @text メモ欄接頭辞
  57. * @desc 他のプラグインとメモ欄もしくはプラグインコマンドの名称が被ったときに指定する接頭辞です。通常は指定不要です。
  58. * @default
  59. *
  60. * @help EventMovableRange.js
  61. *
  62. * イベントの移動可能な範囲を制限します。
  63. * 初期配置から制限を超えて移動しようとすると移動できなくなります。
  64. * イベントのメモ欄に以下の通り指定してください。
  65. * <移動制限:u, d, l, r>
  66. * <Movable:u, d, l, r>
  67. *  u : 上方向への移動可能タイル数
  68. *  d : 下方向への移動可能タイル数
  69. *  l : 左方向への移動可能タイル数
  70. *  r : 右方向への移動可能タイル数
  71. * -1など負の値を指定すると、指定方向への移動は無制限になります。
  72. *
  73. * 利用規約:
  74. *  作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
  75. *  についても制限はありません。
  76. *  このプラグインはもうあなたのものです。
  77. */

  78. (function() {
  79.     'use strict';

  80.     /**
  81.      * Get database meta information.
  82.      * @param object Database item
  83.      * @param name Meta name
  84.      * @returns {String} meta value
  85.      */
  86.     var getMetaValue = function(object, name) {
  87.         var tagName = param.commandPrefix + name;
  88.         return object.meta.hasOwnProperty(tagName) ? convertEscapeCharacters(object.meta[tagName]) : null;
  89.     };

  90.     /**
  91.      * Get database meta information.(for multi language)
  92.      * @param object Database item
  93.      * @param names Meta name array (for multi language)
  94.      * @returns {String} meta value
  95.      */
  96.     var getMetaValues = function(object, names) {
  97.         var metaValue;
  98.         names.some(function(name) {
  99.             metaValue = getMetaValue(object, name);
  100.             return metaValue !== null;
  101.         });
  102.         return metaValue;
  103.     };

  104.     /**
  105.      * Convert escape characters.(require any window object)
  106.      * @param text Target text
  107.      * @returns {String} Converted text
  108.      */
  109.     var convertEscapeCharacters = function(text) {
  110.         var windowLayer = SceneManager._scene._windowLayer;
  111.         return windowLayer ? windowLayer.children[0].convertEscapeCharacters(text.toString()) : text;
  112.     };

  113.     /**
  114.      * Create plugin parameter. param[paramName] ex. param.commandPrefix
  115.      * @param pluginName plugin name(EncounterSwitchConditions)
  116.      * @returns {Object} Created parameter
  117.      */
  118.     var createPluginParameter = function(pluginName) {
  119.         var paramReplacer = function(key, value) {
  120.             if (value === 'null') {
  121.                 return value;
  122.             }
  123.             if (value[0] === '"' && value[value.length - 1] === '"') {
  124.                 return value;
  125.             }
  126.             try {
  127.                 return JSON.parse(value);
  128.             } catch (e) {
  129.                 return value;
  130.             }
  131.         };
  132.         var parameter     = JSON.parse(JSON.stringify(PluginManager.parameters(pluginName), paramReplacer));
  133.         PluginManager.setParameters(pluginName, parameter);
  134.         return parameter;
  135.     };
  136.     var param = createPluginParameter('EventMovableLimitation');

  137.     var _Game_Event_initialize = Game_Event.prototype.initialize;
  138.     Game_Event.prototype.initialize = function(mapId, eventId) {
  139.         _Game_Event_initialize.apply(this, arguments);
  140.         var movables = getMetaValues(this.event(), ['移動制限', 'Movable']);
  141.         if (movables) {
  142.             this._movables = movables.split(',').map(function(value) {
  143.                 return parseInt(value);
  144.             });
  145.             this._initX = this._x;
  146.             this._initY = this._y;
  147.         }
  148.     };

  149.     var _Game_Event_canPass = Game_Event.prototype.canPass;
  150.     Game_Event.prototype.canPass = function(x, y, d) {
  151.         if (this._movables) {
  152.             var x2 = $gameMap.roundXWithDirection(x, d);
  153.             var y2 = $gameMap.roundYWithDirection(y, d);
  154.             if (this._movables[0] >= 0 && this._initY - y2 > this._movables[0]) {
  155.                 return false;
  156.             }
  157.             if (this._movables[1] >= 0 && y2 - this._initY > this._movables[1]) {
  158.                 return false;
  159.             }
  160.             if (this._movables[2] >= 0 && this._initX - x2 > this._movables[2]) {
  161.                 return false;
  162.             }
  163.             if (this._movables[3] >= 0 && x2 - this._initX > this._movables[3]) {
  164.                 return false;
  165.             }
  166.         }
  167.         return _Game_Event_canPass.apply(this, arguments);
  168.     };
  169. })();
复制代码

点评

666如果yep报错就只能找同类型插件替代了,wabcmcc大佬总是带给我们惊喜  发表于 2020-4-25 19:59
感谢!!  发表于 2020-4-25 17:10
66666  发表于 2020-4-25 14:41

评分

参与人数 1+1 收起 理由
白嫩白嫩的 + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3336
在线时间
468 小时
注册时间
2014-2-6
帖子
258
8
发表于 2020-5-3 17:01:47 | 只看该作者
不用插件也可以,你先去找一下获取事件地图坐标的代码,然后用分歧条件判断事件坐标的X,Y,比如:如果X<3且1<X&&Y<3且1<Y,那无事发生,否则让事件走到目标地图X,Y。我记得走到目标坐标的代码也是有的,你去搜索看看

评分

参与人数 1+1 收起 理由
白嫩白嫩的 + 1 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-12 20:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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