Project1

标题: 如何修改地图上一个点的通行状况 [打印本页]

作者: hotzhl3    时间: 2019-1-5 16:04
标题: 如何修改地图上一个点的通行状况
如题,如何得到和修改地图上一个点的通行状况?
这个点可能是一个不能通行的原件,上面可能还有一个事件。而且,我要能把他改回来。
最好是用脚本的方法,告诉我方法就可以,谢谢!
作者: 灯笼菜刀王    时间: 2019-1-5 18:08
在game map 脚本里找到定义通行的方法

def passable?(x, y, d, self_event = nil)

然后,在下面,根据你要的条件, 让它的值返回真就可以了

比如说, 当1号开关打开的时候, X10,Y10的这个格子就必定可以通行

if $game_switches[1] and x == 10 and y == 10
  return true
end

比如说, 1号角色学会 2号技能的时候, 在3号地形标志的地方都可以通行

if $game_actors[1].skill_learn?(2) and $game_player.terrain_tag == 3
  return true
end

只要分歧出条件, 就可以随意改变通行度了
作者: 张咚咚    时间: 2019-1-5 20:45
本帖最后由 张咚咚 于 2019-1-5 20:48 编辑

1.将下面脚本插到main之前。
  1. class Game_System
  2.   attr_accessor :global
  3.   def pass_set(id, x, y, passable)
  4.     @global ||= {}
  5.     @global[id] ||= {}
  6.     @global[id][[x, y]] = passable
  7.     true # 防止XP事件末尾返回BUG
  8.   end
  9.   def pass_remove(id, x, y)
  10.     @global ||= {}
  11.     @global[id] ||= {}
  12.     @global[id].delete [x, y]
  13.     true # 防止XP事件末尾返回BUG
  14.   end
  15.   def isPassable?(id, x, y)
  16.     return ((@global || {})[id] || {})[[x, y]]
  17.   end
  18. end
复制代码


2.下面脚本插入到【Game_Map】的第212行下面。
  1.     pass = $game_system.isPassable?(@map_id, x, y)
  2.     return pass unless pass.nil?
复制代码


3.事件调用。
$game_system.pass_set(1, 9, 5, true) # 1号地图的9,5位置可通行。
$game_system.pass_set(1, 9, 5, false) # 1号地图的9,5位置不可通行。
$game_system.pass_remove(1, 9, 5) # 删除1号地图的9,5位置的通行设置(还原为默认)。
作者: hotzhl3    时间: 2019-1-5 20:50
灯笼菜刀王 发表于 2019-1-5 18:08
在game map 脚本里找到定义通行的方法

def passable?(x, y, d, self_event = nil)

谢谢大佬!
想问一下Game_Map 里的passable 跟 Game_Character里的passable 有什么区别,分别是判定什么的?
作者: hotzhl3    时间: 2019-1-5 22:02
张咚咚 发表于 2019-1-5 20:45
1.将下面脚本插到main之前。

2.下面脚本插入到【Game_Map】的第212行下面。

哇!太贴心了,感谢大佬!

作者: hotzhl3    时间: 2019-1-7 00:03
张咚咚 发表于 2019-1-5 20:45
1.将下面脚本插到main之前。

2.下面脚本插入到【Game_Map】的第212行下面。

3楼大神提供的代码只对地图元件的通行状况生效,如果要对事件也同时生效
要在Game_Character 1的139行添加如下代码:

pass = $game_system.isPassable?(@map_id, new_x, new_y)
      return pass unless pass.nil?

passable?函数里一堆乱七八糟的判定我到现在也看不懂。
我实验结果时如果passable?(x,y,d)为true表示从这个点向d方向可通行,但反之却未必。
所以要修改 new_x, new_y 来让我进入这个点。
这个函数目前够我用了,但我觉得还是会有bug.欢迎指正吧……
作者: 张咚咚    时间: 2019-1-7 00:16
本帖最后由 张咚咚 于 2019-1-7 00:19 编辑
hotzhl3 发表于 2019-1-7 00:03
3楼大神提供的代码只对地图元件的通行状况生效,如果要对事件也同时生效
要在Game_Character 1的139行添 ...


回复的太快,解决了就好。。




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