Project1

标题: 设置事件位置后再回到这个地图,事件有回原位置了 [打印本页]

作者: 电车之熊    时间: 2018-2-9 15:20
标题: 设置事件位置后再回到这个地图,事件有回原位置了
我 与一个NPC对话 然后 “设置事件位置"将这个NPC移到其他的位置了
是当我离开这个地图后,有回到这个地图时,这个NPC又回原位置了?
请大大帮助
作者: xiaohuangdi    时间: 2018-2-9 16:02
参考 入门教学篇    如何使用变量与独立开关
作者: Nil2018    时间: 2018-2-9 16:14
不懂帮不帮得上

  1. # =============================================================================
  2. # TheoAllen - 记忆事件位置
  3. # Version : 1.0
  4. # Contact : www.rpgmakerid.com (or) http://theolized.blogspot.com
  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.   将本脚本放在插件脚本和基础模块之下,Main之上
  20.   事件名以此标志作为开头: <memorize>
  21.   则该事件的位置可以被记忆。
  22.   
  23.   使用条款 :
  24.   署名脚本作者, TheoAllen. 你可以自由编辑此脚本,只要你不声明你是脚本的原作者
  25.   如果你想用此脚本于商业游戏,请和我共享收益.别忘了给我一份免费的游戏拷贝.  

  26. =end
  27. # =============================================================================
  28. # 无设定
  29. # =============================================================================
  30. module THEO
  31.   module MAP
  32.   module REGEXP
  33.     MEMORIZE = /<(?:MEMORIZE|memorize)>(.*)/
  34.   end
  35.   end
  36. end

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

  38. class Event_Memorizer
  39.   
  40.   def initialize
  41.     @data = {}
  42.   end
  43.   
  44.   def [](key)
  45.     if @data[key].nil?
  46.       event = $game_map.events[key[1]]
  47.       @data[key] = Point.new(event.x,event.y)
  48.     end
  49.     return @data[key]
  50.   end
  51.   
  52.   def []=(key,value)
  53.     @data[key] = value
  54.   end
  55.   
  56. end

  57. class Game_System
  58.   attr_accessor :event_pos
  59.   
  60.   alias pre_evmemorize_init initialize
  61.   def initialize
  62.     pre_evmemorize_init
  63.     init_event_memorizer
  64.   end
  65.   
  66.   def init_event_memorizer
  67.     @event_pos = Event_Memorizer.new
  68.   end
  69. end

  70. class Game_Event < Game_Character
  71.   
  72.   def name
  73.     @event.name
  74.   end
  75.   
  76. end

  77. class Scene_Map < Scene_Base
  78.   
  79.   include THEO::MAP
  80.   
  81.   alias pre_evmemorize_transfer pre_transfer
  82.   def pre_transfer
  83.     pre_evmemorize_transfer
  84.     save_events_location
  85.   end
  86.   
  87.   def save_events_location
  88.     $game_map.events.each do |id,event|
  89.       case event.name
  90.       when REGEXP::MEMORIZE
  91.         $game_system.event_pos[[$game_map.map_id,id]]=Point.new(event.x,event.y)
  92.       end
  93.     end
  94.   end
  95.   
  96. end

  97. class Game_Map
  98.   
  99.   include THEO::MAP
  100.   
  101.   alias pre_setup_evmemorize setup
  102.   def setup(map_id)
  103.     pre_setup_evmemorize(map_id)
  104.     load_events_location
  105.   end
  106.   
  107.   def load_events_location
  108.     events.each do |id,event|
  109.       case event.name
  110.       when REGEXP::MEMORIZE
  111.         point = $game_system.event_pos[[map_id,id]]
  112.         event.moveto(point.x,point.y)
  113.       end
  114.     end
  115.   end
  116.   
  117. end
复制代码





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