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

Project1

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

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
114
在线时间
9 小时
注册时间
2022-11-21
帖子
15
跳转到指定楼层
1
发表于 2022-11-23 09:05:26 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
RPG maker XP中独立开关设置,只有默认A,B,C,D四个,能不能把这个增加多一些,做事件才能更多花样,求求大佬帮帮忙,谢谢

QQ截图20221123090340.png (53.02 KB, 下载次数: 13)

QQ截图20221123090340.png

Lv1.梦旅人

梦石
0
星屑
114
在线时间
9 小时
注册时间
2022-11-21
帖子
15
2
 楼主| 发表于 2022-11-23 10:39:37 | 显示全部楼层
灯笼菜刀王 发表于 2022-11-23 10:24
一般来说4个是够用的, 我16年XP使用生涯, 同时使用3个独立开关的情况都没几次,笑

如果你非要扩展也不是不 ...

谢谢大佬,主要这种方式简单,脚本晚点也会写的

点评

不用脚本写了, 更新了新版本, 直接操作开关就好  发表于 2022-11-23 10:59
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
114
在线时间
9 小时
注册时间
2022-11-21
帖子
15
3
 楼主| 发表于 2022-11-23 11:09:38 | 显示全部楼层
情歌诀 发表于 2022-11-23 10:39
谢谢大佬,主要这种方式简单,脚本晚点也会写的

出现错误了,我是现在不会ruby脚本

#---------------------------------------------------------------------------
#独立开关设置扩展
#
#在这里设置id对应的开关名称,注意名称要加双引号,格式: id=>"名称"
#设置方法, 在第三行的哈希表里设置开关对应关系,
#比如 1号开关对应E 就在表里写上 1=>"E"
#注意E要加英文标点的双引号, 你可以无限加,不限英文字母,
#每个项目之间用英文逗号隔开,要换行就从逗号处换行
#设置好后, 你就可以把对应id的开关当独立开关用了,
#不过操作独立开关需要用脚本命令:  独立开关("E", 1)
#这样即可把独立开关E打开(1为开,0为关), 注意这里的括号,双引号,逗号都要用英文标点
#---------------------------------------------------------------------------
  CAD_LIST = {1=>"E",2=>"F",3=>"G"}
#下面不要动--------------------------------
  alias old []
  def [](id)
    a = $game_map.map_id
    b = $game_system.map_interpreter.instance_variable_get(:@event_id)
    return $game_self_switches[[a,b,CAD_LIST[id]]] if CAD_LIST.keys.include?(id)
    old(id)
  end
end

class Interpreter
  def 独立开关(key,val)
    $game_self_switches[[$game_map.map_id,@event_id,key]] = (val == 1)
  end
end


是这样设置了,但是显示语法错误提示,无法运行游戏。

点评

不对, 不能这样写, 我想想要怎么做.....  发表于 2022-11-23 11:16
更新一下脚本, 不用写命令了, 另外这个脚本要放到 main 下面  发表于 2022-11-23 11:11
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
114
在线时间
9 小时
注册时间
2022-11-21
帖子
15
4
 楼主| 发表于 2022-11-23 11:22:52 | 显示全部楼层
具体该怎么写,大佬帮帮忙?

点评

更新了脚本, 你重新复制过去试试, 脚本要放在 Main 这个脚本上面  发表于 2022-11-23 11:27
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
114
在线时间
9 小时
注册时间
2022-11-21
帖子
15
5
 楼主| 发表于 2022-11-23 11:31:29 | 显示全部楼层
情歌诀 发表于 2022-11-23 11:22
具体该怎么写,大佬帮帮忙?

我试试,真的是麻烦你了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
114
在线时间
9 小时
注册时间
2022-11-21
帖子
15
6
 楼主| 发表于 2022-11-23 11:41:05 | 显示全部楼层
灯笼菜刀王 发表于 2022-11-23 10:24
一般来说4个是够用的, 我16年XP使用生涯, 同时使用3个独立开关的情况都没几次,笑

如果你非要扩展也不是不 ...

#==============================================================================
# ■ Game_Switches
#------------------------------------------------------------------------------
#  处理开关的类。编入的是类 Array 的外壳。本类的实例请参考
# $game_switches。
#==============================================================================

class Game_Switches
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    @data = []
  end
  #--------------------------------------------------------------------------
  # ● 获取开关
  #     switch_id : 开关 ID
  #--------------------------------------------------------------------------
  def [](switch_id)
    if switch_id <= 5000 and @data[switch_id] != nil
      return @data[switch_id]
    else
      return false
    end
  end
  #--------------------------------------------------------------------------
  # ● 设置开关
  #     switch_id : 开关 ID
  #     value     : ON (true) / OFF (false)
  #--------------------------------------------------------------------------
  def []=(switch_id, value)
    if switch_id <= 5000
      @data[switch_id] = value
    end
  end
end
#---------------------------------------------------------------------------
#独立开关设置扩展
#
#在这里设置id对应的开关名称,注意名称要加双引号,格式: id=>"名称"
#设置方法, 在第三行的哈希表里设置开关对应关系,
#比如 1号开关对应E 就在表里写上 1=>"E"
#注意E要加英文标点的双引号, 你可以无限加,不限英文字母,
#每个项目之间用英文逗号隔开,要换行就从逗号处换行
#设置好后, 你就可以把对应id的开关当独立开关用了,
#不过操作独立开关需要用脚本命令:  独立开关("E", 1)
#这样即可把独立开关E打开(1为开,0为关), 注意这里的括号,双引号,逗号都要用英文标点
#---------------------------------------------------------------------------
  CAD_LIST = {1=>"E",2=>"F",3=>"G"}
  #下面不要动--------------------------------
  alias old []
  def [](id)
    a = $game_map.map_id
    b = $game_system.map_interpreter.instance_variable_get(:@event_id)
    return $game_self_switches[[a,b,LIST[id]]] if LIST.keys.include?(id)
    old(id)
  end
  
  alias old2 []=
  def []=(id,val)
    if LIST.keys.include?(id)
      a = $game_map.map_id
      b = $game_system.map_interpreter.instance_variable_get(:@event_id)
      $game_self_switches[[a,b,LIST[id]]] = val
    else
      old(id,val)
    end
  end
  
  def event_page_swi(event_id,id)
    return false if !LIST.keys.include?(id)
    return $game_self_switches[[$game_map.map_id,event_id,LIST[id]]]
  end
end

class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    # 初始化本地变量 new_page
    new_page = nil
    # 无法暂时消失的情况下
    unless @erased
      # 从编号大的事件页按顺序调查
      for page in @event.pages.reverse
        # 可以参考事件条件 c
        c = page.condition
        # 确认开关条件 1
        if c.switch1_valid
          next if !$game_switches.event_page_swi(@id,c.switch1_id)
        end
        # 确认开关条件 2
        if c.switch2_valid
          next if !$game_switches.event_page_swi(@id,c.switch2_id)
        end
        # 确认变量条件
        if c.variable_valid
          if $game_variables[c.variable_id] < c.variable_value
            next
          end
        end
        # 确认独立开关条件
        if c.self_switch_valid
          key = [@map_id, @event.id, c.self_switch_ch]
          if $game_self_switches[key] != true
            next
          end
        end
        # 设置本地变量 new_page
        new_page = page
        # 跳出循环
        break
      end
    end
    # 与上次同一事件页的情况下
    if new_page == @page
      # 过程结束
      return
    end
    # @page 设置为现在的事件页
    @page = new_page
    # 清除启动中标志
    clear_starting
    # 没有满足条件的页面的时候
    if @page == nil
      # 设置各实例变量
      @tile_id = 0
      @character_name = ""
      @character_hue = 0
      @move_type = 0
      @through = true
      @trigger = nil
      @list = nil
      @interpreter = nil
      # 过程结束
      return
    end
    # 设置各实例变量
    @tile_id = @page.graphic.tile_id
    @character_name = @page.graphic.character_name
    @character_hue = @page.graphic.character_hue
    if @original_direction != @page.graphic.direction
      @direction = @page.graphic.direction
      @original_direction = @direction
      @prelock_direction = 0
    end
    if @original_pattern != @page.graphic.pattern
      @pattern = @page.graphic.pattern
      @original_pattern = @pattern
    end
    @opacity = @page.graphic.opacity
    @blend_type = @page.graphic.blend_type
    @move_type = @page.move_type
    @move_speed = @page.move_speed
    @move_frequency = @page.move_frequency
    @move_route = @page.move_route
    @move_route_index = 0
    @move_route_forcing = false
    @walk_anime = @page.walk_anime
    @step_anime = @page.step_anime
    @direction_fix = @page.direction_fix
    @through = @page.through
    @always_on_top = @page.always_on_top
    @trigger = @page.trigger
    @list = @page.list
    @interpreter = nil
    # 目标是 [并行处理] 的情况下
    if @trigger == 4
      # 生成并行处理用解释器
      @interpreter = Interpreter.new
    end
    # 自动事件启动判定
    check_event_trigger_auto
  end
end



但是游戏还是报错,无法运行游戏,照样是语法错误
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
114
在线时间
9 小时
注册时间
2022-11-21
帖子
15
7
 楼主| 发表于 2022-11-23 11:51:17 | 显示全部楼层
灯笼菜刀王 发表于 2022-11-23 10:24
一般来说4个是够用的, 我16年XP使用生涯, 同时使用3个独立开关的情况都没几次,笑

如果你非要扩展也不是不 ...

#下面不要动--------------------------------
  alias old []
  def [](id)
    a = $game_map.map_id
    b = $game_system.map_interpreter.instance_variable_get(:@event_id)
    return $game_self_switches[[a,b,LIST[id]]] if LIST.keys.include?(id)
    old(id)
  end
  
  alias old2 []=
  def []=(id,val)
    if LIST.keys.include?(id)
      a = $game_map.map_id
      b = $game_system.map_interpreter.instance_variable_get(:@event_id)
      $game_self_switches[[a,b,LIST[id]]] = val
    else
      old(id,val)
    end
  end
  
  def event_page_swi(event_id,id)
    return false if !LIST.keys.include?(id)
    return $game_self_switches[[$game_map.map_id,event_id,LIST[id]]]
  end
end                   (大概是这里的样子,开始游戏老是说这里语法错误)

class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    # 初始化本地变量 new_page
    new_page = nil
    # 无法暂时消失的情况下
    unless @erased
      # 从编号大的事件页按顺序调查
      for page in @event.pages.reverse
        # 可以参考事件条件 c
        c = page.condition
        # 确认开关条件 1
        if c.switch1_valid
          next if !$game_switches.event_page_swi(@id,c.switch1_id)
        end
        # 确认开关条件 2
        if c.switch2_valid
          next if !$game_switches.event_page_swi(@id,c.switch2_id)
        end
        # 确认变量条件
        if c.variable_valid
          if $game_variables[c.variable_id] < c.variable_value
            next
          end
        end
        # 确认独立开关条件
        if c.self_switch_valid
          key = [@map_id, @event.id, c.self_switch_ch]
          if $game_self_switches[key] != true
            next
          end
        end
        # 设置本地变量 new_page
        new_page = page
        # 跳出循环
        break
      end
    end
    # 与上次同一事件页的情况下
    if new_page == @page
      # 过程结束
      return
    end
    # @page 设置为现在的事件页
    @page = new_page
    # 清除启动中标志
    clear_starting
    # 没有满足条件的页面的时候
    if @page == nil
      # 设置各实例变量
      @tile_id = 0
      @character_name = ""
      @character_hue = 0
      @move_type = 0
      @through = true
      @trigger = nil
      @list = nil
      @interpreter = nil
      # 过程结束
      return
    end
    # 设置各实例变量
    @tile_id = @page.graphic.tile_id
    @character_name = @page.graphic.character_name
    @character_hue = @page.graphic.character_hue
    if @original_direction != @page.graphic.direction
      @direction = @page.graphic.direction
      @original_direction = @direction
      @prelock_direction = 0
    end
    if @original_pattern != @page.graphic.pattern
      @pattern = @page.graphic.pattern
      @original_pattern = @pattern
    end
    @opacity = @page.graphic.opacity
    @blend_type = @page.graphic.blend_type
    @move_type = @page.move_type
    @move_speed = @page.move_speed
    @move_frequency = @page.move_frequency
    @move_route = @page.move_route
    @move_route_index = 0
    @move_route_forcing = false
    @walk_anime = @page.walk_anime
    @step_anime = @page.step_anime
    @direction_fix = @page.direction_fix
    @through = @page.through
    @always_on_top = @page.always_on_top
    @trigger = @page.trigger
    @list = @page.list
    @interpreter = nil
    # 目标是 [并行处理] 的情况下
    if @trigger == 4
      # 生成并行处理用解释器
      @interpreter = Interpreter.new
    end
    # 自动事件启动判定
    check_event_trigger_auto
  end
end

点评

在Main上面新建一个空白脚本, 然后把我的脚本复制进去就好, 不要粘贴到其他脚本里  发表于 2022-11-23 11:54
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
114
在线时间
9 小时
注册时间
2022-11-21
帖子
15
8
 楼主| 发表于 2022-11-23 12:01:59 | 显示全部楼层
情歌诀 发表于 2022-11-23 11:51
#下面不要动--------------------------------
  alias old []
  def [](id)

不行,另外搞了,还是原地方出现语法错误
  #下面不要动--------------------------------
  alias old []
  def [](id)
    a = $game_map.map_id
    b = $game_system.map_interpreter.instance_variable_get(:@event_id)
    return $game_self_switches[[a,b,LIST[id]]] if LIST.keys.include?(id)
    old(id)
  end
  
  alias old2 []=
  def []=(id,val)
    if LIST.keys.include?(id)
      a = $game_map.map_id
      b = $game_system.map_interpreter.instance_variable_get(:@event_id)
      $game_self_switches[[a,b,LIST[id]]] = val
    else
      old(id,val)
    end
  end
  
  def event_page_swi(event_id,id)
    return false if !LIST.keys.include?(id)
    return $game_self_switches[[$game_map.map_id,event_id,LIST[id]]]
  end
end             ---------(还是提示语法错误,无法进行游戏)           

class Game_Event < Game_Character

点评

请完整复制,不要掐头去尾  发表于 2022-11-23 12:03
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
114
在线时间
9 小时
注册时间
2022-11-21
帖子
15
9
 楼主| 发表于 2022-11-23 12:10:11 | 显示全部楼层
情歌诀 发表于 2022-11-23 12:01
不行,另外搞了,还是原地方出现语法错误
  #下面不要动--------------------------------
  alias old [ ...

是完成复制的,没有少一个字,这里只是告诉你出现问题,才搞这么短,方便浏览
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
114
在线时间
9 小时
注册时间
2022-11-21
帖子
15
10
 楼主| 发表于 2022-11-23 12:12:44 | 显示全部楼层
情歌诀 发表于 2022-11-23 12:01
不行,另外搞了,还是原地方出现语法错误
  #下面不要动--------------------------------
  alias old [ ...

可以运行游戏,刚才少输了一小段,真是抱歉
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-6 16:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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