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

Project1

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

[已经过期] 求复制事件的脚本,从一个地图复制到另一个地图

[复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
461 小时
注册时间
2014-7-23
帖子
232
跳转到指定楼层
1
发表于 2014-10-4 13:36:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 qq546431664 于 2014-10-4 13:37 编辑

用过Sion写的复制脚本但是发现他的脚本让独立开关不能用了(即使是没有复制的事件,估计跟某个脚本冲突了),虽然里面有写了如何让复制的事件开启独立开关,但是那也太麻烦了
我就想要个能完完全全从某张地图复制到当前地图的脚本,或者谁能修改一下Sion的这个脚本,让他把复制事件拥有独立开关这功能去掉
下面这个是带事件防卡的整合了

RUBY 代码复制
  1. =begin
  2.  
  3.   使用说明
  4.  
  5.   copy_map_event(map_id, event_id, x, y)
  6.  
  7.     复制特定地图的特定事件 到坐标 x y
  8.     如果 x y 坐标不填,事件就复制到原本的坐标
  9.     
  10.     示例 copy_map_event(2, 1) # 复制地图2的事件1
  11.          copy_map_event(3, 2, 0, 0) # 复制地图3的事件2到坐标(0,0)
  12.  
  13.  
  14.   关于独立开关
  15.  
  16.     现在每个“复制事件”有各自的独立开关,利用“复制事件”里的独立开关操作来开启。
  17.     “复制事件”的独立开关优先级高于原本“被复制事件”的独立开关。
  18.     
  19.     要开/关“被复制事件”的某个独立开关可以用脚本
  20.       $game_self_switch[[map_id, event_id, "A"]] = true / false
  21.  
  22.  
  23.       
  24.       
  25.   remove_copy_event(map_id, event_id)
  26.  
  27.     移除从特定地图复制过来的事件,如果复制了多个则全部移除
  28.     需要一个一个移除使用下面的方法
  29.     
  30.     
  31.   remove_map_event(事件id)
  32.  
  33.     移除指定id的事件
  34.     复制过来的事件id为 当前地图事件id最大值 + 1
  35.  
  36. =end
  37.  
  38.  
  39. class Game_Interpreter
  40.   def copy_map_event(map_id, event_id, x = nil, y = nil)
  41.     map_filename = sprintf("Data/Map%03d.rvdata2", map_id)
  42.     if File.exist?(map_filename)
  43.       event = load_data(map_filename).events[event_id]
  44.       if event
  45.         event = Game_Event.new(map_id, event)
  46.         event_id = $game_map.events.keys.max + 1
  47.         event_id += $game_map.copy_map_events.size if $game_map.copy_map_events
  48.         event.event_copy_setup(event_id, x, y)
  49.         $game_map.prepare_copy_event(event)
  50.       elsif $TEST
  51.         msgbox("复制<地图#{map_id}>的<事件#{event_id}>失败,该事件不存在。")
  52.         exit
  53.       end
  54.     elsif $TEST
  55.       msgbox("从<地图#{map_id}>复制事件失败,该地图不存在。")
  56.       exit
  57.     end
  58.   end
  59.   def remove_copy_event(map_id, event_id)
  60.     $game_map.events.each_value {|event|
  61.       if event.copy_id == event_id && event.map_id == map_id
  62.         $game_map.prepare_remove_event(event)
  63.       end
  64.     }
  65.   end
  66.   def remove_map_event(event_id)
  67.     event = $game_map.events[event_id]
  68.     $game_map.prepare_remove_event(event) if event
  69.   end
  70.   #
  71.   alias_method :copy_map_event_command_123, :command_123
  72.   def command_123
  73.     if @event_id > 0
  74.       event = get_character(@event_id)
  75.       event.copy_id ?
  76.         process_copy_self_switch(event) :
  77.         copy_map_event_command_123
  78.     end
  79.   end
  80.   def process_copy_self_switch(event)
  81.     event.copy_self_switch ||= {}
  82.     event.copy_self_switch[@params[0]] = (@params[1] == 0)
  83.     all_off = true
  84.     event.copy_self_switch.each_value {|key| break all_off = false if key}
  85.     event.copy_self_switch = nil if all_off
  86.     $game_map.need_refresh = true
  87.   end
  88. end
  89. #
  90. class Spriteset_Map
  91.   def add_copy_event(event)
  92.     @character_sprites.push(Sprite_Character.new(@viewport1, event))
  93.   end
  94.   def remove_copy_event(event)
  95.     @character_sprites.each {|sprite|
  96.       if sprite.character == event
  97.         @character_sprites.delete(sprite)
  98.         sprite.dispose
  99.         return
  100.       end
  101.     }
  102.   end
  103. end
  104. #
  105. class Scene_Map
  106.   attr(:spriteset)
  107. end
  108. class Game_Map
  109.   attr(:copy_map_events)
  110.   def prepare_copy_event(event)
  111.     @copy_map_events ||= {}
  112.     @tile_events.push(event) if event.tile?
  113.     @copy_map_events[event] = true
  114.   end
  115.   def prepare_remove_event(event)
  116.     @copy_map_events ||= {}
  117.     @tile_events.delete(event) if event.tile?
  118.     @copy_map_events[event] = false
  119.   end
  120.   alias_method :copy_map_events_update_events, :update_events
  121.   def update_events
  122.     copy_map_events_update_events
  123.     if @copy_map_events
  124.       delete_ids = []
  125.       in_map = SceneManager.scene_is?(Scene_Map)
  126.       @copy_map_events.each {|event, copy|
  127.         if copy
  128.           @events[event.id] = event
  129.           SceneManager.scene.spriteset.add_copy_event(event) if in_map
  130.         else
  131.           delete_ids.push(event.id)
  132.           SceneManager.scene.spriteset.remove_copy_event(event) if in_map
  133.         end
  134.       }
  135.       delete_ids.each {|id| @events.delete(id)}
  136.       @copy_map_events = nil
  137.     end
  138.   end
  139. end
  140. class Game_Event
  141.   attr(:copy_id, :map_id)
  142.   attr_accessor :copy_self_switch
  143.   def event_copy_setup(id, x, y)
  144.     @copy_id = @id
  145.     @id = id
  146.     moveto(x, y) if x && y
  147.   end
  148.   def update #注意:方法覆盖
  149.     super
  150.     check_event_trigger_auto
  151.     return unless @interpreter
  152.     @interpreter.setup(@list, @id) unless @interpreter.running?
  153.     @interpreter.update
  154.   end
  155.   def conditions_met?(page) #注意:方法覆盖
  156.     c = page.condition
  157.     if c.switch1_valid
  158.       return false unless $game_switches[c.switch1_id]
  159.     end
  160.     if c.switch2_valid
  161.       return false unless $game_switches[c.switch2_id]
  162.     end
  163.     if c.variable_valid
  164.       return false if $game_variables[c.variable_id] < c.variable_value
  165.     end
  166.     if c.self_switch_valid
  167.       return false unless @copy_self_switch ?
  168.         @copy_self_switch[c.self_switch_ch] :
  169.         $game_self_switches[[@map_id, @event.id, c.self_switch_ch]]
  170.     end
  171.     if c.item_valid
  172.       item = $data_items[c.item_id]
  173.       return false unless $game_party.has_item?(item)
  174.     end
  175.     if c.actor_valid
  176.       actor = $game_actors[c.actor_id]
  177.       return false unless $game_party.members.include?(actor)
  178.     end
  179.     return true
  180.   end
  181. end

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

2
发表于 2014-10-4 13:43:22 | 只看该作者
本帖最后由 taroxd 于 2014-10-4 13:44 编辑

劝你放弃这个念头。用开关来代替独立开关就可以了。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3841
在线时间
723 小时
注册时间
2014-3-29
帖子
509
3
发表于 2014-10-5 11:11:57 | 只看该作者
诶吗。我昨天也被这个弄得头晕了。  在开启独立开关之前设置等待几帧试试(我是这么解决的,不知你的可不可以)
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-18 18:35

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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