查看: 2756|回复: 6

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

[复制链接]
梦石
0
星屑
7650
在线时间
1162 小时
注册时间
2016-9-10
回帖
145

开拓者

发表于 2019-5-23 10:13:05 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 devil033 于 2019-5-23 19:05 编辑

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

[pre lang="ruby"]
# =============================================================================
# TheoAllen - 记忆事件位置
# Version : 1.0
# Contact : www.rpgmakerid.com (or) http://theolized.blogspot.com
# (This script documentation is written in informal indonesian language)
# =============================================================================
($imported ||= {})[:Theo_MemorizeEvent] = true
# =============================================================================
# CHANGE LOGS:
# -----------------------------------------------------------------------------
# 2013.06.18 - Finished script
# =============================================================================
=begin

  介绍 :
  本脚本可以在玩家进入下一张地图时,记忆事件的位置。玩家从其他地图回到该地图时
  事件会出现在之前的相同位置上。
  
  使用方法 :
  将本脚本放在插件脚本和基础模块之下,Main之上
  事件名以此标志作为开头: <memorize>
  则该事件的位置可以被记忆。
  
  使用条款 :
  署名脚本作者, TheoAllen. 你可以自由编辑此脚本,只要你不声明你是脚本的原作者
  如果你想用此脚本于商业游戏,请和我共享收益.别忘了给我一份免费的游戏拷贝.  

=end
# =============================================================================
# 无设定
# =============================================================================
module THEO
  module MAP
  module REGEXP
    MEMORIZE = /<(?:MEMORIZE|memorize)>(.*)/
  end
  end
end

Point = Struct.new(:x,:y)

class Event_Memorizer
  
  def initialize
    @data = {}
  end
  
  def [](key)
    if @data[key].nil?
      event = $game_map.events[key[1]]
      @data[key] = Point.new(event.x,event.y)
    end
    return @data[key]
  end
  
  def []=(key,value)
    @data[key] = value
  end
  
end

class Game_System
  attr_accessor :event_pos
  
  alias pre_evmemorize_init initialize
  def initialize
    pre_evmemorize_init
    init_event_memorizer
  end
  
  def init_event_memorizer
    @event_pos = Event_Memorizer.new
  end
end

class Game_Event < Game_Character
  
  def name
    @event.name
  end
  
end

class Scene_Map < Scene_Base
  
  include THEO::MAP
  
  alias pre_evmemorize_transfer pre_transfer
  def pre_transfer
    pre_evmemorize_transfer
    save_events_location
  end
  
  def save_events_location
    $game_map.events.each do |id,event|
      case event.name
      when REGEXP::MEMORIZE
        $game_system.event_pos[[$game_map.map_id,id]]=Point.new(event.x,event.y)
      end
    end
  end
  
end

class Game_Map
  
  include THEO::MAP
  
  alias pre_setup_evmemorize setup
  def setup(map_id)
    pre_setup_evmemorize(map_id)
    load_events_location
  end
  
  def load_events_location
    events.each do |id,event|
      case event.name
      when REGEXP::MEMORIZE
        point = $game_system.event_pos[[map_id,id]]
        event.moveto(point.x,point.y)
      end
    end
  end
  
end

[/pre]
梦石
10
星屑
39550
在线时间
1919 小时
注册时间
2010-11-14
回帖
3214

R考场第七期纪念奖

发表于 2019-5-23 12:45:26 | 显示全部楼层
[pre lang="ruby"]
module THEO::MAP
  DISABLE_SW_ID = 1 # 禁用事件记忆的开关编号
end

class Game_Map
  alias load_events_location_20190523 load_events_location
  def load_events_location
    load_events_location_20190523 if !$game_switches[DISABLE_SW_ID]
  end
end
[/pre]

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

评分

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

查看全部评分

用头画头像,用脚写脚本
回复

使用道具 举报

梦石
0
星屑
7650
在线时间
1162 小时
注册时间
2016-9-10
回帖
145

开拓者

 楼主| 发表于 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
回复

使用道具 举报

梦石
0
星屑
7650
在线时间
1162 小时
注册时间
2016-9-10
回帖
145

开拓者

 楼主| 发表于 2019-5-23 17:31:26 | 显示全部楼层
KB.Driver 发表于 2019-5-23 12:45
module THEO::MAP
  DISABLE_SW_ID = 1 # 禁用事件记忆的开关编号
end

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

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部