Project1

标题: [已经解决]怎么清除事件位置记忆 [打印本页]

作者: devil033    时间: 2019-5-23 10:13
标题: [已经解决]怎么清除事件位置记忆
本帖最后由 devil033 于 2019-5-23 19:05 编辑

使用了记忆事件位置的脚本
但游戏到一定程度后,我需要把所有事件位置都还原,即需要把所有记忆都清除
请问下这个要怎么弄?
谢谢!

RUBY 代码复制
  1. # =============================================================================
  2. # TheoAllen - 记忆事件位置
  3. # Version : 1.0
  4. # Contact : [url]www.rpgmakerid.com[/url] (or) [url]http://theolized.blogspot.com[/url]
  5. # (This script documentation is written in informal indonesian language)
  6. # =============================================================================
  7. ($imported ||= {})[:Theo_MemorizeEvent] = true
  8. # =============================================================================
  9. # CHANGE LOGS:
  10. # -----------------------------------------------------------------------------
  11. # 2013.06.18 - Finished script
  12. # =============================================================================
  13. =begin
  14.  
  15.   介绍 :
  16.   本脚本可以在玩家进入下一张地图时,记忆事件的位置。玩家从其他地图回到该地图时
  17.   事件会出现在之前的相同位置上。
  18.  
  19.   使用方法 :
  20.   将本脚本放在插件脚本和基础模块之下,Main之上
  21.   事件名以此标志作为开头: <memorize>
  22.   则该事件的位置可以被记忆。
  23.  
  24.   使用条款 :
  25.   署名脚本作者, TheoAllen. 你可以自由编辑此脚本,只要你不声明你是脚本的原作者
  26.   如果你想用此脚本于商业游戏,请和我共享收益.别忘了给我一份免费的游戏拷贝.  
  27.  
  28. =end
  29. # =============================================================================
  30. # 无设定
  31. # =============================================================================
  32. module THEO
  33.   module MAP
  34.   module REGEXP
  35.     MEMORIZE = /<(?:MEMORIZE|memorize)>(.*)/
  36.   end
  37.   end
  38. end
  39.  
  40. Point = Struct.new(:x,:y)
  41.  
  42. class Event_Memorizer
  43.  
  44.   def initialize
  45.     @data = {}
  46.   end
  47.  
  48.   def [](key)
  49.     if @data[key].nil?
  50.       event = $game_map.events[key[1]]
  51.       @data[key] = Point.new(event.x,event.y)
  52.     end
  53.     return @data[key]
  54.   end
  55.  
  56.   def []=(key,value)
  57.     @data[key] = value
  58.   end
  59.  
  60. end
  61.  
  62. class Game_System
  63.   attr_accessor :event_pos
  64.  
  65.   alias pre_evmemorize_init initialize
  66.   def initialize
  67.     pre_evmemorize_init
  68.     init_event_memorizer
  69.   end
  70.  
  71.   def init_event_memorizer
  72.     @event_pos = Event_Memorizer.new
  73.   end
  74. end
  75.  
  76. class Game_Event < Game_Character
  77.  
  78.   def name
  79.     @event.name
  80.   end
  81.  
  82. end
  83.  
  84. class Scene_Map < Scene_Base
  85.  
  86.   include THEO::MAP
  87.  
  88.   alias pre_evmemorize_transfer pre_transfer
  89.   def pre_transfer
  90.     pre_evmemorize_transfer
  91.     save_events_location
  92.   end
  93.  
  94.   def save_events_location
  95.     $game_map.events.each do |id,event|
  96.       case event.name
  97.       when REGEXP::MEMORIZE
  98.         $game_system.event_pos[[$game_map.map_id,id]]=Point.new(event.x,event.y)
  99.       end
  100.     end
  101.   end
  102.  
  103. end
  104.  
  105. class Game_Map
  106.  
  107.   include THEO::MAP
  108.  
  109.   alias pre_setup_evmemorize setup
  110.   def setup(map_id)
  111.     pre_setup_evmemorize(map_id)
  112.     load_events_location
  113.   end
  114.  
  115.   def load_events_location
  116.     events.each do |id,event|
  117.       case event.name
  118.       when REGEXP::MEMORIZE
  119.         point = $game_system.event_pos[[map_id,id]]
  120.         event.moveto(point.x,point.y)
  121.       end
  122.     end
  123.   end
  124.  
  125. end

作者: KB.Driver    时间: 2019-5-23 12:45
RUBY 代码复制
  1. module THEO::MAP
  2.   DISABLE_SW_ID = 1 # 禁用事件记忆的开关编号
  3. end
  4.  
  5. class Game_Map
  6.   alias load_events_location_20190523 load_events_location
  7.   def load_events_location
  8.     load_events_location_20190523 if !$game_switches[DISABLE_SW_ID]
  9.   end
  10. end


在原脚本下方新建一栏插入试试

作者: devil033    时间: 2019-5-23 12:58
KB.Driver 发表于 2019-5-23 12:45
module THEO::MAP
  DISABLE_SW_ID = 1 # 禁用事件记忆的开关编号
end

这个功能还是需要保留的
其实我是做了新周目,需要把上一周目的记忆清除
但新周目还是需要用到这个功能的
作者: devil033    时间: 2019-5-23 17:31
KB.Driver 发表于 2019-5-23 12:45
module THEO::MAP
  DISABLE_SW_ID = 1 # 禁用事件记忆的开关编号
end

比如我有10张地图有事件记忆的,一周目结束时,10张地图的事件都位移并且记忆了
新周目的时候,我打开开关,进入某张有事件记忆的地图,该地图事件确实是重置,但却也因为开关打开了,导致该地图的事件发生新位移时无法记忆了吖!
然而我需要的时,新周目事件位置重置,当事件重新触发位移后记忆新的位移。





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