查看: 2467|回复: 3

[已经解决] 腳本BUG ,跟上次喵大腳本的那個狀況很像

[复制链接]
梦石
0
星屑
2116
在线时间
950 小时
注册时间
2015-7-16
回帖
692

开拓者

发表于 2016-3-11 13:10:04 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 duzine 于 2016-3-11 13:13 编辑

如題
未命名.png

一樣也是找不到觸發原因,今天才發現的
上次的文 https://rpg.blue/thread-390043-1-1.html
附上腳本

[pre lang="ruby"]#------------------------------------------------------------------------------#
#  Galv's Region Effects
#------------------------------------------------------------------------------#
#  For: RPGMAKER VX ACE
#  Version 1.9
#  Credit to Yanfly and Quack for event spawning method
#------------------------------------------------------------------------------#
#  2014-01-07 - Version 1.9 - upgrade to not stop animations playing when a
#                             region effect is drawn.
#  2013-01-24 - Version 1.8 - minor tweaks
#  2013-01-22 - Version 1.7 - Made effects work during forced move routes
#  2012-11-15 - Version 1.6 - Fixed a major bug caused with last update.
#  2012-11-04 - Version 1.5 - streamline updates and bug fix suggested by Quack
#  2012-10-23 - Version 1.4 - updated alias naming convention for compatability
#  2012-10-09 - Version 1.3 - re-wrote the code to be more efficient when
#                           - using many different region effects.
#  2012-10-09 - Version 1.2 - code tweak that may reduce lag on low-end pc's
#  2012-09-16 - Version 1.1 - now compatible with Yanfly's spawn events
#  2012-09-15 - Version 1.0 - release
#------------------------------------------------------------------------------#
#  Designed to activate effects when regions are stood on.
#  An effect can include:
#     - Sound Effect
#     - An event that appears at the player's location
#     - Activating a common event
#
#
#  INSTRUCTIONS:
#  1. Copy image from /Graphics/Characters/!Other-specials.png to your project
#  2. Copy the map from this demo into your game.
#        - this map has events set up for the pre-made effects
#  3. Check the map ID of the map you copied in your game
#  4. Change the SPAWN_MAP_ID number to this map ID
#  5. Change REGION_EFFECT_SWITCH to a switch you are not using in your game.
#  6. Add some regions to your map to test.
#
#
#
#  To disable region effects use
#  $game_player.region_effects = false
#
#------------------------------------------------------------------------------#

$imported = {} if $imported.nil?
$imported["Region_Effects"] = true

module Region_Effects
#------------------------------------------------------------------------------#
#  SCRIPT SETUP OPTIONS
#------------------------------------------------------------------------------#
   #因為與loading腳本衝突,移至上方觀察
   REGION_EFFECT_SWITCH = 0   # Turn this switch ON to disable the effects.

   MAX_EFFECTS = 20           # Number of effects that can be on screen
                              # before being removed. (To prevent lag)
                              
   SPAWN_MAP_ID = 10           # Map ID of the map you store event effects in.
   #儲存效果的地圖
   

#------------------------------------------------------------------------------#
#  ENVIRONMENT REGIONS SETUP
#------------------------------------------------------------------------------#
#------------------------------------------------------------------------------#
#
#  region => ["sound", vol, pitch, event_id, common_event_id]
#
#  region          -  the region ID the effect will activate on
#  sound           -  the name of the SE file. "" for no sound
#  vol             -  the volume of the SE (0 - 100)
#  pitch           -  the pitch of the SE (50 - 150)
#  event_id        -  event ID called from the spawn map. 0 for none.
#  common_event_id -  common event ID to call. 0 for no common event.
#
#------------------------------------------------------------------------------#
    EFFECT = { # ! don't touch this
#------------------------------------------------------------------------------#

    0 => ["", 0, 0, 0, 0],              # No Effect (no region)
   
    # Pre-made effects (requires demo events)
    #1 => ["", 0, 0, 5, 0],              # Dirt dust
    #2 => ["Blow7", 60, 150, 0, 0],      # Wood surface noise only
    5 => ["Water1", 60, 110, 1, 0],     # Shallow Water 水灘
   
    #18 => ["Earth2", 40, 130, 0, 0],     # Hard surface noise only
    6 => ["Damage3", 40, 150, 2, 0],    # Footprints 雪地
    12 => ["", 50, 130, 3, 0],       # Walking over thick grass 草叢
    7 => ["", 0, 0, 0, 1],              # Calls common event 1 only 坑洞
    8 => ["Fire3", 80, 120, 4, 2],      # Calls fire trap 火爐
    37 => ["", 80, 120, 6, 0],          # Dust cloud 沙地
   
    # You can add more as required. eg:
    # 42 => ["", 0, 0, 0, 0],
    # 18 => ["", 0, 0, 0, 0],
    # etc. etc.
   
    # Only one effect per region number will work
   
#------------------------------------------------------------------------------#
    } # ! don't touch this
#------------------------------------------------------------------------------#
#  END SCRIPT SETUP
#------------------------------------------------------------------------------#
   
end # Region_Effects

module DataManager

#--------------------------------------------------------------------------
# alias method: load_normal_database
#--------------------------------------------------------------------------
class <<self; alias load_normal_database_spawn_alias load_normal_database; end
  def self.load_normal_database
    load_normal_database_spawn_alias
    $data_spawn_map = load_data(sprintf("Data/Map%03d.rvdata2", Region_Effects::SPAWN_MAP_ID))
  end
end

class Game_Player < Game_Character
  attr_accessor :region_effects
  
  alias galv_region_effects_update_update_nonmoving update_nonmoving
  def update_nonmoving(last_moving)
    if last_moving
      galv_region_check unless $game_switches[Region_Effects::REGION_EFFECT_SWITCH] == true
    end
    galv_region_effects_update_update_nonmoving(last_moving)
  end
  
  def galv_region_check
    return if Input.trigger?(:C)
    v = rand(10) - rand(10)
    p = rand(40) - rand(40)
   
    r_id = $game_map.region_id($game_player.x, $game_player.y)
    return if Region_Effects::EFFECT[r_id] == nil
   
    sound = Region_Effects::EFFECT[r_id][0]
    vol = Region_Effects::EFFECT[r_id][1]
      pit = Region_Effects::EFFECT[r_id][2]
      eve = Region_Effects::EFFECT[r_id][3]
      com_eve = Region_Effects::EFFECT[r_id][4]

      RPG::SE.new(sound, vol + v, pit + p).play
      if eve > 0
        $game_map.region_event($game_player.x, $game_player.y, eve, Region_Effects::SPAWN_MAP_ID)
      end
      $game_temp.reserve_common_event(com_eve) unless com_eve == nil
  end
  

end # Game_Player



class Game_Map
  attr_accessor :effectlist
  attr_accessor :r_events

  alias galv_region_effects_setup setup
  def setup(map_id)
    @effectlist = []
    @r_events = {}
    galv_region_effects_setup(map_id)
   
    @eid = 0
  end
  
  def region_event(dx, dy, event_id, map_id)
    map_id = @map_id if map_id == 0
    map = $data_spawn_map
    event = generated_region_event(map, event_id)

    @eid += 1
    @effectlist.push(@eid)
    @effectlist.shift if @effectlist.count > Region_Effects::MAX_EFFECTS

    @r_events[@eid] = Game_Event.new(@map_id, event)
    @r_events[@eid].moveto(dx, dy)
    SceneManager.scene.spriteset.refresh_region_effects

    @eid = 0 if @eid >= Region_Effects::MAX_EFFECTS
  end

  
  def generated_region_event(map, event_id)
    for key in map.events
      event = key[1]
      next if event.nil?
      return event if event.id == event_id
    end
    return nil
  end

  alias galv_region_effects_gm_refresh refresh
  def refresh
    @r_events.each_value {|event| event.refresh }
    galv_region_effects_gm_refresh
  end
  
  alias galv_region_effects_gm_update_events update_events
  def update_events
    @r_events.each_value {|event| event.update }
    galv_region_effects_gm_update_events
  end
  
end # Game_Map



class Spriteset_Map
  def refresh_region_effects
    dispose_region_sprites
    create_region_sprites
  end
  
  alias galv_region_effect_sm_sb_create_characters create_characters
  def create_characters
    create_region_sprites
    galv_region_effect_sm_sb_create_characters
  end
  
  alias galv_region_effect_sm_sb_update_characters update_characters
  def update_characters
    galv_region_effect_sm_sb_update_characters
    @region_sprites.each { |sprite| sprite.update }
  end
  
  alias galv_region_effect_sm_sb_dispose_characters dispose_characters
  def dispose_characters
    dispose_region_sprites
    galv_region_effect_sm_sb_dispose_characters
  end
  
  def create_region_sprites
    @region_sprites = []
    $game_map.effectlist.each_with_index { |id,i|
      @region_sprites = Sprite_Character.new(@viewport1,$game_map.r_events[id])
    }
  end
  
  def dispose_region_sprites
    @region_sprites.each { |sprite| sprite.dispose }
  end
end



class Scene_Map < Scene_Base
  attr_accessor :spriteset
  
  alias galv_region_effects_start start
  def start
    galv_region_effects_start
    SceneManager.scene.spriteset.refresh_region_effects
  end
end # Scene_Map[/pre]
[神性领域扩张:扩张神性领域]
说了等于没说.

梦石
0
星屑
9716
在线时间
2775 小时
注册时间
2008-9-5
回帖
3458

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

发表于 2016-3-11 13:53:02 | 显示全部楼层
这是加了新脚本后读旧档造成的吧………………
试试看在出错的那行后面加上
  1. if @r_events.is_a?(Hash)
复制代码
(虽然不读旧档就没必要这样……

评分

参与人数 2星屑 +10 梦石 +1 收起 理由
丿梁丶小柒 + 1 认可答案
duzine + 10 希望不會再報錯OWQ

查看全部评分

回复

使用道具 举报

梦石
0
星屑
2116
在线时间
950 小时
注册时间
2015-7-16
回帖
692

开拓者

 楼主| 发表于 2016-3-11 14:22:27 | 显示全部楼层
真的沒有讀取舊檔
這是測試遊戲鍵一按下去就會跳出,然後再按一次就能成功進入遊戲

讀取舊檔之類的蠢事早在很久以前就被改正了,根本不會做啊
[神性领域扩张:扩张神性领域]
说了等于没说.
回复

使用道具 举报

梦石
0
星屑
2116
在线时间
950 小时
注册时间
2015-7-16
回帖
692

开拓者

 楼主| 发表于 2016-3-11 14:24:29 | 显示全部楼层
未命名.png

還是不行,反而直接報錯了

点评

就是试试看全局搜索一下【class Game_Map】看看,在主楼这个脚本下面知不是还有别的脚本  发表于 2016-3-11 23:14
我試試看,不過覆蓋掉setup方法的部分我不是很懂  发表于 2016-3-11 23:03
或者在什么地方使用了$game_map.refresh  发表于 2016-3-11 15:38
不过问题不在这,应该是之后有Game_Map类的脚本覆盖掉了setup方法,不然单独这个脚本的话无论如何,进入新地图setup之后都不会弹主楼那个窗……  发表于 2016-3-11 15:36
是加在句子后面……不是换行啦……  发表于 2016-3-11 15:31
[神性领域扩张:扩张神性领域]
说了等于没说.
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部