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

Project1

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

[已经解决] [已经解决]怎么清除事件位置记忆

[复制链接]

Lv4.逐梦者

梦石
0
星屑
7495
在线时间
1152 小时
注册时间
2016-9-10
帖子
165

开拓者

跳转到指定楼层
1
发表于 2019-5-23 10:13:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 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

Lv5.捕梦者

梦石
10
星屑
39440
在线时间
1914 小时
注册时间
2010-11-14
帖子
3315

R考场第七期纪念奖

2
发表于 2019-5-23 12:45:26 | 只看该作者
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


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

评分

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

查看全部评分

用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7495
在线时间
1152 小时
注册时间
2016-9-10
帖子
165

开拓者

3
 楼主| 发表于 2019-5-23 12:58:36 | 只看该作者
KB.Driver 发表于 2019-5-23 12:45
module THEO::MAP
  DISABLE_SW_ID = 1 # 禁用事件记忆的开关编号
end

这个功能还是需要保留的
其实我是做了新周目,需要把上一周目的记忆清除
但新周目还是需要用到这个功能的

点评

对啊,重置还不简单吗。  发表于 2019-5-23 18:29
喔,知道了,把Game_System中的init_event_memorizer重新执行下似乎是初始化了  发表于 2019-5-23 17:49
所以用了开关啊,你在游戏里操作开关就行了。  发表于 2019-5-23 14:59
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7495
在线时间
1152 小时
注册时间
2016-9-10
帖子
165

开拓者

4
 楼主| 发表于 2019-5-23 17:31:26 | 只看该作者
KB.Driver 发表于 2019-5-23 12:45
module THEO::MAP
  DISABLE_SW_ID = 1 # 禁用事件记忆的开关编号
end

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-25 14:50

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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