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

Project1

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

[已经解决] 【已解决】如何初始化某张ID地图

[复制链接]

Lv4.逐梦者

梦石
0
星屑
5287
在线时间
1265 小时
注册时间
2018-1-16
帖子
366
跳转到指定楼层
1
发表于 2020-12-14 11:59:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 l734273398 于 2020-12-17 15:40 编辑

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

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

就是将某张ID的地图初始化为最初状态,所有的事件的独立开关都关闭,所有的事件都回归未触发状态。

Lv4.逐梦者

梦石
0
星屑
7921
在线时间
1049 小时
注册时间
2012-4-3
帖子
1271

开拓者

2
发表于 2020-12-14 20:17:11 手机端发表。 | 只看该作者
我觉得吧,开关与变量作为全局变量,简单地初始化会有很多隐性问题。
换个角度想,对每一个开关与变量了如指掌、如同自家后院,这不正是一个游戏制作人细腻的体现么。

点评

地图太大了,每一张都是250*250的大小,还是随机做事件,鬼知道在哪,  发表于 2020-12-15 11:04
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
帖子
234
3
发表于 2020-12-15 12:07:45 | 只看该作者
没太看懂你的需求,也没什么思路
如果你只是了解当前地图事件的位置的话
很多游戏不是有一个"地图"的功能吗
你写一个不就行了……

点评

如题:初始化某张地图内所存在的所有开关、变量等等,就是这张地图出现的所有都回到一开始没有触发的时候  发表于 2020-12-15 12:15
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

4
发表于 2020-12-16 20:13:33 | 只看该作者
关闭所有的独立开关很简单,但是如何知道变量和开关应该设置为什么值呢?估计只能这样做:
1. 读取所有的事件的触发条件,记录其中的开关ID和变量ID
2. 在某时刻记录这些开关、变量的值,然后在另一时刻还原

点评

好的,感谢大佬  发表于 2020-12-17 15:43
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
帖子
234
5
发表于 2020-12-16 20:33:20 | 只看该作者
只能帮你关闭某张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)

点评

好的,感谢大佬  发表于 2020-12-17 15:39
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7951
在线时间
1182 小时
注册时间
2007-7-29
帖子
2055
6
发表于 2020-12-17 01:22:18 | 只看该作者
拿了楼上的脚本改了改,顺便把开关和变量一起放进去了,只是开关和变量其实会随着流程更懂,顶多能帮你就是把被设为条件的开关关闭和把变量设置成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相同会顺便触发地图刷新。

点评

好的,感谢大佬  发表于 2020-12-17 15:39

评分

参与人数 1星屑 +50 收起 理由
RyanBern + 50 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-12 03:35

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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