Project1

标题: 请问如何永久删除事件 [打印本页]

作者: 风晴生    时间: 2015-2-13 21:52
标题: 请问如何永久删除事件
我想永久的删除一个事件 , 停止其一切刷新  ,  我看了一些其他的人的回答  不要暂时消除的 要永久删除的  

同时 我看了那个 $scene.delete(i) 的类型 ,发现这个不是永久删除事件而是暂时删除事件 过了一个地图又重新出现了 希望大神们能够帮忙解决
作者: 芯☆淡茹水    时间: 2015-2-13 22:39
下面这个估摸着写的,没测试。
要永久删除就在 事件 — 脚本 里写:remove_event(地图ID, 事件ID)
运行后,指定的事件永久消失。关掉工程后再打开,事件也从编辑器上消失。
  1. def remove_event(map_id, event_id)
  2.   return unless FileTest.exist?(sprintf("Data/Map%03d.rxdata", map_id))
  3.   map = load_data(sprintf("Data/Map%03d.rxdata", map_id))
  4.   return unless map.events.keys.include?(event_id)
  5.   map.events.delete(event_id)
  6.   save_data(map, sprintf("Data/Map%03d.rxdata", map_id))
  7.   $game_map.remove_event(event_id) if $game_map.map_id == map_id  
  8. end
  9. class Game_Map
  10.   def remove_event(event_id)
  11.     @events.delete(event_id)
  12.     refresh
  13.   end
  14. end
  15. class Spriteset_Map
  16.   alias add_update_xdrs update
  17.   def update
  18.     if @character_data != $game_map.events
  19.       @character_data = $game_map.events.clone
  20.       @character_sprites.each{|s| s.dispose}
  21.       @character_sprites.clear
  22.       for i in $game_map.events.keys.sort
  23.         sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
  24.         @character_sprites.push(sprite)
  25.       end
  26.       @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  27.     end
  28.     add_update_xdrs
  29.   end
  30. end
复制代码

作者: 恐惧剑刃    时间: 2015-2-14 00:39
本帖最后由 恐惧剑刃 于 2015-7-9 21:02 编辑

噢 或许你需要的是这个??
$game_temp.delete_events(事件ID)   删除事件
$game_temp.make_events(地图ID, 事件ID) 复制事件
  1. =begin
  2. 需要手动修改 Spriteset_Map  ,  改动如下:

  3. 找到 “生成角色活动块” 替换代码:
  4. @character_sprites = {}
  5. for i in $game_map.events.keys.sort
  6.   sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
  7.   @character_sprites[i] = sprite
  8. end
  9. @character_sprites[-1] = Sprite_Character.new(@viewport1, $game_player)
  10. @character_sprites_keys = @character_sprites.keys.sort

  11. 找到 “释放角色活动块” 替换代码:
  12. for sprite in @character_sprites_keys
  13.   @character_sprites[sprite].dispose
  14. end

  15. 找到 “刷新角色活动块” 替换代码:
  16. for sprite in @character_sprites_keys
  17.   @character_sprites[sprite].update
  18. end

  19. =end
  20. class Scene_Map
  21.   attr_reader :spriteset
  22. end
  23. class Game_Map
  24.   attr_reader :map
  25. end
  26. class Spriteset_Map
  27.   def delete_events(event_id)
  28.     $game_map.events.delete(event_id)
  29.     @character_sprites[event_id].dispose
  30.     @character_sprites[event_id] = nil
  31.     @character_sprites.delete(event_id)
  32.     @character_sprites_keys.delete(event_id)
  33.     @character_sprites_keys.compact!
  34.   end
  35.   def make_events(map_id, event_id)
  36.     #======================读取地图文件
  37.     if map_id != $game_map.map_id
  38.       data_map = load_data(sprintf("Data/Map%03d.rxdata", map_id))
  39.     else
  40.       data_map = $game_map.map
  41.     end
  42.     event = data_map.events[event_id]
  43.     return if event.nil?
  44.     #======================循环检索ID
  45.     id = 2000
  46.     cheak = false
  47.     begin
  48.       if $game_map.events[id]
  49.         id += 1
  50.       else
  51.         cheak = true
  52.       end
  53.     end until cheak
  54.     #======================生成数据
  55.     $game_map.events[id] = Game_Event.new(map_id, event)
  56.     @character_sprites[id] = Sprite_Character.new(@viewport1, $game_map.events[id])
  57.     @character_sprites_keys << id
  58.   end
  59. end
  60. class Game_Temp
  61.   def delete_events(event_id)
  62.     return if !$game_map.events[event_id]
  63.     $scene.spriteset.delete_events(event_id)
  64.   end
  65.   def make_events(map_id, event_id)
  66.     $scene.spriteset.make_events(map_id, event_id)
  67.   end
  68. end
复制代码

作者: 风晴生    时间: 2015-2-14 00:58
第72行出了问题  未定义方法 dispose
作者: 风晴生    时间: 2015-2-14 01:11
恐惧剑刃 发表于 2015-2-14 00:39
$game_temp.remove_event(事件ID, true) 即可
工程,报错的话,偶就不太清楚喽~

大神 帮忙看下我最新的帖子 这个问题我解决不了
作者: taeckle    时间: 2021-10-19 01:32
芯☆淡茹水 发表于 2015-2-13 22:39
下面这个估摸着写的,没测试。
要永久删除就在 事件 — 脚本 里写:remove_event(地图ID, 事件ID)
运行后, ...

大神请问下用您的这种方法删除地图上的一个事件对工程数据库有没有影响呢?游戏新开一档后这个事件还会出现吗?




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