Project1

标题: 【已解决】如何初始化某张ID地图 [打印本页]

作者: l734273398    时间: 2020-12-14 11:59
标题: 【已解决】如何初始化某张ID地图
本帖最后由 l734273398 于 2020-12-17 15:40 编辑

如题:如何做到在地图中初始化某张ID的地图【初始化该地图出现的所有开关、变量等等】

打个比方:我想初始化某张ID的地图,但又不想整个游戏中所有地图都初始化了,只想初始化1号ID地图【或10号ID地图】的地图中的所有开关和变量

就是将某张ID的地图初始化为最初状态,所有的事件的独立开关都关闭,所有的事件都回归未触发状态。
作者: Im剑侠客    时间: 2020-12-14 20:17
我觉得吧,开关与变量作为全局变量,简单地初始化会有很多隐性问题。
换个角度想,对每一个开关与变量了如指掌、如同自家后院,这不正是一个游戏制作人细腻的体现么。
作者: RPGzh500223    时间: 2020-12-15 12:07
没太看懂你的需求,也没什么思路
如果你只是了解当前地图事件的位置的话
很多游戏不是有一个"地图"的功能吗
你写一个不就行了……
作者: guoxiaomi    时间: 2020-12-16 20:13
关闭所有的独立开关很简单,但是如何知道变量和开关应该设置为什么值呢?估计只能这样做:
1. 读取所有的事件的触发条件,记录其中的开关ID和变量ID
2. 在某时刻记录这些开关、变量的值,然后在另一时刻还原
作者: RPGzh500223    时间: 2020-12-16 20:33
只能帮你关闭某张ID地图的所有事件的独立开关
class Game_Map
  def self_switches_refresh!(a_map_id)
    if a_map_id > 0
      the_map = load_data(sprintf("Data/Map%03d.rxdata", a_map_id))        
      for event in the_map.events.values
        for page in event.pages
          ch = page.condition.self_switch_ch
          key = [a_map_id, event.id, ch]
          $game_self_switches[key] = false
        end
      end
    end
  end
end
比如重置2号地图的独立开关
$game_map.self_switches_refresh!(2)
作者: enghao_lim    时间: 2020-12-17 01:22
拿了楼上的脚本改了改,顺便把开关和变量一起放进去了,只是开关和变量其实会随着流程更懂,顶多能帮你就是把被设为条件的开关关闭和把变量设置成0。
在main之前插入脚本:
  1. class Game_Map
  2.   attr_reader:map_id
  3.   def reset(a_map_id)
  4.     if a_map_id > 0
  5.       the_map = load_data(sprintf("Data/Map%03d.rxdata", a_map_id))        
  6.       for event in the_map.events.values
  7.         for page in event.pages
  8.           c = page.condition
  9.           $game_switches[c.switch1_id] = false if c.switch1_valid
  10.           $game_switches[c.switch2_id] = false if c.switch2_valid
  11.           $game_variables[c.variable_id] = 0 if c.variable_valid
  12.           $game_self_switches[[a_map_id, event.id, c.self_switch_ch]] = false if c.self_switch_valid
  13.         end
  14.       end
  15.       if (@map_id == a_map_id)
  16.         @need_refresh = true
  17.       end
  18.     end
  19.   end
  20. end
复制代码

在事件里调用脚本:
  1. $game_map.reset(地图的ID);
复制代码

如果当前的地图和重置地图ID相同会顺便触发地图刷新。




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