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

Project1

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

[已经解决] RPG maker xp的独立开关问题,求解大佬?

[复制链接]

Lv5.捕梦者

梦石
0
星屑
37972
在线时间
5492 小时
注册时间
2006-11-10
帖子
6557
1
发表于 2022-11-23 10:24:01 | 显示全部楼层
本帖最后由 灯笼菜刀王 于 2022-11-23 11:26 编辑

一般来说4个是够用的, 我16年XP使用生涯, 同时使用3个独立开关的情况都没几次,笑

如果你非要扩展也不是不行
  1. class Game_Switches
  2.   #在这里设置id对应的开关名称,注意名称要加双引号,格式: id=>"名称"
  3.   LIST = {1=>"E",2=>"F"}  
  4.   
  5.   #下面不要动--------------------------------
  6.   alias old []
  7.   def [](id)
  8.     a = $game_map.map_id
  9.     b = $game_system.map_interpreter.instance_variable_get(:@event_id)
  10.     return $game_self_switches[[a,b,LIST[id]]] if LIST.keys.include?(id)
  11.     old(id)
  12.   end
  13.   
  14.   alias old2 []=
  15.   def []=(id,val)
  16.     if LIST.keys.include?(id)
  17.       a = $game_map.map_id
  18.       b = $game_system.map_interpreter.instance_variable_get(:@event_id)
  19.       $game_self_switches[[a,b,LIST[id]]] = val
  20.     else
  21.       old(id,val)
  22.     end
  23.   end
  24.   
  25.   def event_page_swi(event_id,id)
  26.     return false if !LIST.keys.include?(id)
  27.     return $game_self_switches[[$game_map.map_id,event_id,LIST[id]]]
  28.   end
  29. end

  30. class Game_Event < Game_Character
  31.   #--------------------------------------------------------------------------
  32.   # ● 刷新
  33.   #--------------------------------------------------------------------------
  34.   def refresh
  35.     # 初始化本地变量 new_page
  36.     new_page = nil
  37.     # 无法暂时消失的情况下
  38.     unless @erased
  39.       # 从编号大的事件页按顺序调查
  40.       for page in @event.pages.reverse
  41.         # 可以参考事件条件 c
  42.         c = page.condition
  43.         # 确认开关条件 1
  44.         if c.switch1_valid
  45.           next if !$game_switches.event_page_swi(@id,c.switch1_id)
  46.         end
  47.         # 确认开关条件 2
  48.         if c.switch2_valid
  49.           next if !$game_switches.event_page_swi(@id,c.switch2_id)
  50.         end
  51.         # 确认变量条件
  52.         if c.variable_valid
  53.           if $game_variables[c.variable_id] < c.variable_value
  54.             next
  55.           end
  56.         end
  57.         # 确认独立开关条件
  58.         if c.self_switch_valid
  59.           key = [@map_id, @event.id, c.self_switch_ch]
  60.           if $game_self_switches[key] != true
  61.             next
  62.           end
  63.         end
  64.         # 设置本地变量 new_page
  65.         new_page = page
  66.         # 跳出循环
  67.         break
  68.       end
  69.     end
  70.     # 与上次同一事件页的情况下
  71.     if new_page == @page
  72.       # 过程结束
  73.       return
  74.     end
  75.     # @page 设置为现在的事件页
  76.     @page = new_page
  77.     # 清除启动中标志
  78.     clear_starting
  79.     # 没有满足条件的页面的时候
  80.     if @page == nil
  81.       # 设置各实例变量
  82.       @tile_id = 0
  83.       @character_name = ""
  84.       @character_hue = 0
  85.       @move_type = 0
  86.       @through = true
  87.       @trigger = nil
  88.       @list = nil
  89.       @interpreter = nil
  90.       # 过程结束
  91.       return
  92.     end
  93.     # 设置各实例变量
  94.     @tile_id = @page.graphic.tile_id
  95.     @character_name = @page.graphic.character_name
  96.     @character_hue = @page.graphic.character_hue
  97.     if @original_direction != @page.graphic.direction
  98.       @direction = @page.graphic.direction
  99.       @original_direction = @direction
  100.       @prelock_direction = 0
  101.     end
  102.     if @original_pattern != @page.graphic.pattern
  103.       @pattern = @page.graphic.pattern
  104.       @original_pattern = @pattern
  105.     end
  106.     @opacity = @page.graphic.opacity
  107.     @blend_type = @page.graphic.blend_type
  108.     @move_type = @page.move_type
  109.     @move_speed = @page.move_speed
  110.     @move_frequency = @page.move_frequency
  111.     @move_route = @page.move_route
  112.     @move_route_index = 0
  113.     @move_route_forcing = false
  114.     @walk_anime = @page.walk_anime
  115.     @step_anime = @page.step_anime
  116.     @direction_fix = @page.direction_fix
  117.     @through = @page.through
  118.     @always_on_top = @page.always_on_top
  119.     @trigger = @page.trigger
  120.     @list = @page.list
  121.     @interpreter = nil
  122.     # 目标是 [并行处理] 的情况下
  123.     if @trigger == 4
  124.       # 生成并行处理用解释器
  125.       @interpreter = Interpreter.new
  126.     end
  127.     # 自动事件启动判定
  128.     check_event_trigger_auto
  129.   end
  130. end
复制代码


把这个脚本塞到 main 这个脚本之上

设置方法, 在第三行的哈希表里设置开关对应关系,  比如 1号开关对应E 就在表里写上 1=>"E" 注意E要加英文标点的双引号, 你可以无限加,不限英文字母,  每个项目之间用英文逗号隔开,要换行就从逗号处换行

设置好后, 你就可以把对应id的开关当独立开关用了, 比如要打开某事件的独立开关E, 那就在该事件里把1号开关打开即可, 注意, 此时1号开关是对应到每个事件的哦, 你在1号事件打开1号开关是影响不了2号事件的

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-23 22:08

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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