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

Project1

 找回密码
 注册会员
搜索

让RGSS3记住事件移动后的位置

查看数: 4493 | 评论数: 6 | 收藏 4
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2014-7-26 18:53

正文摘要:

本帖最后由 DeathKing 于 2014-7-26 18:54 编辑 TL;DR 使用此脚本前,您应该阅读:自由脚本协议(Free Script License) 您也可以在GitHub上查看此脚本的最新版:1.1.0726版本 这里是参考范例工程: 脚本 RUBY ...

回复

taroxd 发表于 2014-7-28 07:40:13
本帖最后由 taroxd 于 2014-7-28 07:44 编辑
DeathKing 发表于 2014-7-26 22:02
看了一下脚本 @feizhaodan 的是直接HOOK Game_Map#setup,在实际执行地图切换前记录事件位置,并直接让Ga ...


RUBY 代码复制
  1. class Game_Map
  2.  
  3.   alias init_20140728 initialize
  4.   def initialize
  5.     init_20140728
  6.     @moved_events   = {}
  7.     @removed_events = {}
  8.   end
  9.  
  10.   # default_proc 不能存档简直忧伤……
  11.   def get_moved_events(map_id)
  12.     @moved_events[map_id] ||= {}
  13.   end
  14.  
  15.   def get_removed_events(map_id)
  16.     @removed_events[map_id] ||= {}
  17.   end
  18.  
  19.   def setup_events
  20.     @events = {}
  21.     @map.events.each do |i, event|
  22.       unless get_removed_events(@map_id)[i]
  23.         @events[i] = Game_Event.new(@map_id, event)
  24.       end
  25.     end
  26.     get_moved_events(@map_id).each do |i, (x, y, direction, event)|
  27.       @events[i] = event = Game_Event.new(@map_id, event)
  28.       event.moveto(x, y)
  29.       event.set_direction(direction)
  30.     end
  31.     @common_events = parallel_common_events.collect do |common_event|
  32.       Game_CommonEvent.new(common_event.id)
  33.     end
  34.     refresh_tile_events
  35.   end
  36. end
  37.  
  38. class Game_Event
  39.   def moveto_new_map(map_id, x, y, direction = nil)
  40.     if map_id == @map_id
  41.       moveto(x, y)
  42.       set_direction(direction) if direction
  43.       return
  44.     end
  45.     $game_map.get_moved_events(@map_id).delete(@id)
  46.     $game_map.get_removed_events(@map_id)[@id] = true
  47.     new_map = load_data(sprintf("Data/Map%03d.rvdata2", map_id))
  48.     size = new_map.width * new_map.height
  49.     begin
  50.       @event.id = @id = size + rand(0xffff) + @id # just a random number big enough
  51.     end while $game_map.get_moved_events(map_id).key?(@id)
  52.     $game_map.get_moved_events(map_id)[@id] =
  53.       [x, y, (direction || @direction), @event]
  54.     $game_map.get_removed_events(map_id).delete(@id)
  55.   end
  56. end


一个不太完善的版本,仅仅提供一个思路。
有很多问题没有考虑到,比如从当前地图移动走的时候,事件仍然会停留在地图上。
比如独立开关的问题没有处理。

反正我也不需要这个功能,所以也没有太在意美观和可读性什么的。总之就是提供一个思路吧。这些小问题应该都不难解决的。

lanyaolove 发表于 2014-7-28 02:11:14
希望能有xp版本
菜鸟飞呀飞 发表于 2014-7-26 22:38:21
提示: 作者被禁止或删除 内容自动屏蔽
DeathKing 发表于 2014-7-26 22:02:22
喵kano 发表于 2014-7-26 20:24
之前看过一个保存事件位置的脚本,内部切换黑/白名单
https://rpg.blue/thread-230430-1-1.html ...

看了一下脚本 @feizhaodan 的是直接HOOK Game_Map#setup,在实际执行地图切换前记录事件位置,并直接让Game_Map来记录这些内容,某种程度上来说比我的脚本来得巧妙。

美中不足的是,需要将68行处,由:

RUBY 代码复制
  1. e.direction( @event_pos[@map_id][i][2])


修改为:

RUBY 代码复制
  1. e.set_direction( @event_pos[@map_id][i][2])


这样就能正确处理事件朝向的问题了。

其实我还要实现一个核功能,就是让这个地图的事件移动到另一个地图,并保持有效,这个比较棘手,也是我最想解决的。

点评

哇没发现囧 去修改  发表于 2014-7-27 23:21
保护环境的那个?  发表于 2014-7-26 23:33
事件挂在一个临时的列表上,当做移动语义移过去(好像是什么奇怪的东西)  发表于 2014-7-26 22:43
喵kano 发表于 2014-7-26 20:24:04
之前看过一个保存事件位置的脚本,内部切换黑/白名单
https://rpg.blue/thread-230430-1-1.html

点评

其实我也写过……在我那个经常和别人撞车的插件脚本合集里……  发表于 2014-7-26 21:26
不太知道……不过确实是撞了。  发表于 2014-7-26 21:17
冰之滄月 发表于 2014-7-26 19:17:58
LZ做的很棒!就是Bgm有点问题哈
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-12 04:24

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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