Войти на сайт

Авторизация, ждите ...
×

ТЕМА: [ACE] Проблема со скриптом SheolShade Minimap

[ACE] Проблема со скриптом SheolShade Minimap 9 года 2 нед. назад #80106

  • MrWindson
  • MrWindson аватар
  • Вне сайта
  • Путник
  • Сообщений: 1
Здравствуйте! Нужна помощь, возникла проблема с этим скриптом. После активирования миникарты через переключатель, привязанный к ключевому предмету в инвентаре, миникарта работает нормально, но не показывает непроходимые тайлы типа стен и деревьев. Может кто-нибудь объяснить, в чём косяк?

Запуск скрипта через переключатель, активирующийся параллельно, не решил проблему.

Скрипт:
#==============================================================================#
#                          **SheolShade Minimap**                              #
#------------------------------------------------------------------------------#
#  ** Автор: SheolShade (Перевёл MrWindson)                                    #
#  ** Версия: 1.5b                                                             #
#  ** Дата: 24/12/2012                                                         #
#------------------------------------------------------------------------------#   
#  - Описание:                                                                 #
#     Этот скрипт добавляет в игру круглую миникарту.                          #
#  - Использование:                                                            #
#     Вставьте этот скрипт в секцию "Пользовательские".                        #
#==============================================================================#
#  - История                                                                   #
#    24/12/2012 - Начало и завершение версии 1.0b                              #
#    04/03/2013 - Версия 1.5b Исправление багов, добавление новых функций.     #
#               * Исправлена ошибка, по которой неправильно отображались       #
#                 некоторые тайлы.                                             #
#               * Исправлена ошибка, по которой некоторые типы травы           #
#                 отображались как блок.                                       #
#               * Исправлена ошибка, по которой непроходимые блоки,            #
#                 помещёные на траву, отображались как проходимые.             #
#               * Улучшен код.                                                 #
#               + Добавлена функция отображения транспорта.                    #
#               + Добавлена функция отображения товарищей по отряду.           #
#               + Добавлена функция использования ID регионов для скрытия      #
#                 проходимых областей.                                         #
#------------------------------------------------------------------------------#
module SheolShade
  module MiniMap
    #--------------------------------------------------------------------------#
    # НАСТРОЙКИ                                                                #
    #--------------------------------------------------------------------------#
    #Размер тайлов на миникарте; рекомендовано не использовать меньше 3. 
    TileSize = 8
    #--------------------------------------------------------------------------#
    #Настройка централизации миникарты, зависит от размера тайла.
    MapOffset = -4
    #--------------------------------------------------------------------------#
    #Цвет игрока на миникарте.
    PlayerColor = Color.new(255,0,0)
    #--------------------------------------------------------------------------#
    #Отображение напарников.
    ShowFollowers = true
    #--------------------------------------------------------------------------#
    #Цвет напарников на миникарте.
    FollowerColor = Color.new(0,128,255)
    #--------------------------------------------------------------------------#
    #Отображение средств передвижения.
    ShowVehicles = true
    #--------------------------------------------------------------------------#
    #Цвет лодки.
    BoatColor = Color.new(255,0,255)
    #--------------------------------------------------------------------------#
    #Цвет корабля.
    ShipColor = Color.new(255,0,255)
    #--------------------------------------------------------------------------#
    #Цвет воздушного шара.
    AirshipColor = Color.new(255,0,255)
    #--------------------------------------------------------------------------#
    #Настройка цвета объектов на миникарте.
    #Объекты - это NPC, двери, телепорты, сундуки или что угодно, что придёт
    #Вам на ум.
    #Чтобы добавить объект, используйте следующий текст, заключённый в {}:
    #     "tag" => Color.new(R,G,B,A)
    #где "tag" - это комментарий, который будет добавлен к событию,          
    #отображаемому на карте. Разделяйте объекты запятыми.
    ObjectColor = {"npc" => Color.new(0,255,0),       # NPC
                  "teleport" => Color.new(150,50,50), # телепорт
                  "chest" => Color.new(100,100,100),  # сундук
                  "switch" => Color.new(100,149,237)} # переключатель
    #--------------------------------------------------------------------------#
    #Цвет границы значков объектов и игрока на миникарте.
    BorderColor = Color.new(0,0,0) 
    #--------------------------------------------------------------------------#
    #Прозрачность отображаемых на карте объектов.
    ObjectLayerOpacity = 200 #стандартное значение = 255
    #--------------------------------------------------------------------------#
    #Расположение карты на экране.
    #1 = левый верхний угол
    #2 = правый верхний угол
    #3 = левый нижний угол
    #4 = правый нижний угол
    MiniMapCorner = 2
    #--------------------------------------------------------------------------#
    #Параметр определяет, будет ли указанный регион "заблокированным" на карте.
    #Полезно для скрытия "секретных комнат".
    UseHideRegion = true 
    #--------------------------------------------------------------------------#
    #ID скрываемого региона (если выше указано true).
    HideRegionId = 1
    #--------------------------------------------------------------------------#
    #Цвет непроходимых областей на миникарте.
    MapColor = Color.new(200,150,150)
    #--------------------------------------------------------------------------#
    #Цвет границы непроходимой области на карте.
    MapBorderColor = Color.new(50,50,50)
    #--------------------------------------------------------------------------#
    #Имя файла с изобр. границы миникарты, лежащего в папке Graphics/System.
    BorderName = "Border" 
    #--------------------------------------------------------------------------#
    #Использование фоновой тектуры миникарты.
    UseBGTexture = true
    #--------------------------------------------------------------------------#
    #Имя файла с изображением фоновой текстуры миникарты, также лежащего
    #в папке Graphics/System.
    #Внимание: цвета изображения должны быть инвертированы.
    BackTextureName = "OldPaper"
    #--------------------------------------------------------------------------#
    #Фоновый цвет, если текстура не используется.
    BGColor = Color.new( 100, 100, 100)
    #--------------------------------------------------------------------------#
    #Заливка цветом наружной части карты.
    ClearOutsideArea = false
    #--------------------------------------------------------------------------#
    #Цвет, используемый для заливки внешней части карты. 
    ClearOutsideColor = Color.new(0,0,0)
    #--------------------------------------------------------------------------#
    #Функция отрисовки границы миникарты.
    OutlineMapArea = true
    #--------------------------------------------------------------------------#
    #Цвет отрисованной границы карты.
    OutlineMapColor = Color.new(0,0,0)
    #--------------------------------------------------------------------------#
    #ID переключателя, используемого для включения/отключения карты.
    EnableSwitchId = 7
    #--------------------------------------------------------------------------#
    # КОНЕЦ НАСТРОЕК.                                                     #
    #--------------------------------------------------------------------------#
    MiniMapCoords = {1 => [0,0,112,112],
                     2 => [Graphics.width - 112,0,112,112],
                     3 => [0,Graphics.height - 112,112,112],
                     4 => [Graphics.width - 112,Graphics.height - 112,112,112]}
    Switch = 2                 
    Show_Key = :Z  
 
  end
end
#==============================================================================#
# ** Класс цвета
#==============================================================================#
class Color
  #-----------------------------------------------------------------------------
  # * Инвертирует значения цветов
  #-----------------------------------------------------------------------------
  def invert
    r = 255 - self.red
    g = 255 - self.green
    b = 255 - self.blue
    a = self.alpha
    self.set(r, g, b, a)
  end
end
 
 
#==============================================================================#
# ** Класс миникарты
#==============================================================================#
class MiniMap
 
  include SheolShade::MiniMap
 
  def initialize(viewport)
    @viewport = viewport
    @playercolor = PlayerColor.dup.invert
    @followercolor = FollowerColor.dup.invert
    @boatcolor = BoatColor.dup.invert
    @shipcolor = ShipColor.dup.invert
    @airshipcolor = AirshipColor.dup.invert
    @objectcolor = ObjectColor.dup
    @objectcolor.each_pair do |key, value|
      @objectcolor[key] = value.dup.invert
    end
    @bordercolor = BorderColor.dup.invert
    @mapcolor = MapColor.dup.invert
    @mapbordercolor = MapBorderColor.dup.invert
    @clearoutsidecolor = ClearOutsideColor.dup.invert
    @outlinemapcolor = OutlineMapColor.dup.invert
    refresh
  end
 
  def refresh
    @map_id = $game_map.map_id
    @backmask = Sprite.new(@viewport)
    @backmask.bitmap = Cache::system("Back_96")
    @backmask.x = @backmask.y = 8 
    @backtile = Sprite.new(@viewport)
    @backtile.blend_type = 2
    @backtile.z = 1
    @backtile.x = @backtile.y = -100
    @map = Sprite.new(@viewport)
    @map.z = 2
    @map.blend_type = 2
    @object_layer = Sprite.new(@viewport)
    @object_layer.z = 3
    @object_layer.blend_type = 2
    @object_layer.bitmap = Bitmap.new($game_map.width*TileSize + 112, 
                                     $game_map.height*TileSize + 112)
    @object_layer.opacity = ObjectLayerOpacity
    @border = Sprite.new(@viewport)
    @border.bitmap = Cache::system(BorderName)
    @border.z = 4
    @border.opacity = 255
    @mask = Cache::system("Mask")
    draw_back
    draw_map
  end
 
  def visible?
    $game_switches[EnableSwitchId]
  end
 
  def draw_map
 
    front = make_map_bitmap(@mapcolor)
    border = make_map_bitmap(@mapbordercolor)
 
    result = Bitmap.new($game_map.width*TileSize + 112, 
                        $game_map.height*TileSize+ 112)
 
    result.blt(-1, 0, border, border.rect)
    result.blt(1, 0, border, border.rect)
    result.blt(0, -1, border, border.rect)
    result.blt(0, 1, border, border.rect)
    result.blt(0, 0, front, front.rect)
 
    @mapbitmap = result
  end
 
  def draw_back
    bitmap = Bitmap.new($game_map.width*TileSize+112, 
                       $game_map.height*TileSize+112)
    if UseBGTexture
      bit = Cache::system(BackTextureName)
      bitmap.stretch_blt(bitmap.rect, bit, bit.rect)
    else
      bitmap.fill_rect(bitmap.rect, BGColor)
    end
    if ClearOutsideArea
      bitmap.fill_rect(0,0,bitmap.width, 56, @clearoutsidecolor)
      bitmap.fill_rect(0,0,56, bitmap.height, @clearoutsidecolor)
      bitmap.fill_rect(0,bitmap.height-56,bitmap.width, 56, @clearoutsidecolor)
      bitmap.fill_rect(bitmap.width-56,0,56, bitmap.height, @clearoutsidecolor)
    elsif OutlineMapArea
      bitmap.fill_rect(56,55,bitmap.width-112,1,@outlinemapcolor)
      bitmap.fill_rect(55,56,1,bitmap.height-112,@outlinemapcolor)
      bitmap.fill_rect(bitmap.width-56,55,1,bitmap.height-112,@outlinemapcolor)
      bitmap.fill_rect(56,bitmap.height-56,bitmap.width-112,1,@outlinemapcolor)
    end
    @backtilebitmap = bitmap
  end
 
  def draw_object_layer
    for event in $game_map.events.keys
      if $game_map.events[event].list.size >= 0
        for item in $game_map.events[event].list
          if item.code == 108 or item.code == 408
            if @objectcolor.has_key?(item.parameters[0])
              draw_object($game_map.events[event].real_x*TileSize+56, 
              $game_map.events[event].real_y*TileSize+56, 
              @objectcolor[item.parameters[0]])
            end
          end
        end
      end
    end
    if ShowFollowers
      unless $game_player.vehicle
        $game_player.followers.each do |follower|
          draw_object(follower.real_x*TileSize+56, 
                      follower.real_y*TileSize+56, 
                      @followercolor) if follower.visible?
        end
      end
    end
    if ShowVehicles
      unless $game_map.airship.transparent
        draw_object($game_map.airship.real_x*TileSize+56,
                $game_map.airship.real_y*TileSize+56, 
                @airshipcolor)
      end
      unless $game_map.ship.transparent
        draw_object($game_map.ship.real_x*TileSize+56,
                $game_map.ship.real_y*TileSize+56, 
                @shipcolor)
      end
      unless $game_map.boat.transparent
        draw_object($game_map.boat.real_x*TileSize+56,
                $game_map.boat.real_y*TileSize+56, 
                @boatcolor)
      end        
    end
    draw_object($game_player.real_x*TileSize+56,
                $game_player.real_y*TileSize+56, 
                @playercolor)
  end
 
  def draw_object(x, y, color)
    @object_layer.bitmap.fill_rect(x, y, TileSize, TileSize, @bordercolor)
    @object_layer.bitmap.fill_rect(x+1, y+1, TileSize-2, TileSize-2, color)
    @object_layer.bitmap.clear_rect(x,y,1,1)
    @object_layer.bitmap.clear_rect(x,y+TileSize-1,1,1)
    @object_layer.bitmap.clear_rect(x+TileSize-1,y,1,1)
    @object_layer.bitmap.clear_rect(x+TileSize-1,y+TileSize-1,1,1)
  end
 
  def make_map_bitmap(color)
    bitmap = Bitmap.new($game_map.width*TileSize + 112, 
                       $game_map.height*TileSize + 112)
    for x in 0..$game_map.width - 1
      for y in 0..$game_map.height - 1
        if $game_map.airship_land_ok?(x, y) || $game_map.bush?(x, y)
          if UseHideRegion
            bitmap.fill_rect(x*TileSize+56, 
                             y*TileSize+56,
                             TileSize, TileSize, 
                             color) if $game_map.region_id(x, y) == HideRegionId
          else
             next                  
          end
          if $game_map.bush?(x, y) 
            unless $game_map.passable?(x, y, 4)
               bitmap.fill_rect(x*TileSize+56, y*TileSize+56, TileSize, TileSize, color)
            end
          end
          next
        end
        bitmap.fill_rect(x*TileSize+56, y*TileSize+56, TileSize, TileSize, color)
      end
    end
    bitmap
  end
 
  def update_object_layer
   @object_layer.bitmap.clear
   draw_object_layer
  end
 
  def dispose
    @backmask.dispose
    @backtile.dispose
    @map.dispose
    @object_layer.dispose
    @border.dispose
  end
 
  def update
    if @map_id != $game_map.map_id
      dispose
      @map_id = $game_map.map_id
      refresh
    end
    @backmask.visible = visible? 
    @backtile.visible = visible?
    @map.visible = visible?
    @object_layer.visible = visible?
    @border.visible = visible?
    if visible?
      @map.bitmap = @mapbitmap.dup
      @backtile.bitmap = @backtilebitmap.dup
      sx = $game_player.real_x * (TileSize * -1) + MapOffset
      sy = $game_player.real_y * (TileSize * -1) + MapOffset
      update_object_layer
      @map.x = @backtile.x = @object_layer.x = sx
      @map.y = @backtile.y = @object_layer.y = sy
      @backtile.bitmap.blt(sx*-1, sy*-1,@mask,@mask.rect) 
      @map.bitmap.blt(sx*-1, sy*-1,@mask,@mask.rect)
      @object_layer.bitmap.blt(sx*-1, sy*-1,@mask,@mask.rect)
    end
  end
end
#==============================================================================#
# ** Класс спрайтов карты
#==============================================================================#
class Spriteset_Map
 
  alias sheol_mini_map_init initialize
  alias sheol_mini_map_updt update
  alias sheol_mini_map_disp dispose
 
  include SheolShade::MiniMap
 
  def initialize
    create_minimap
    sheol_mini_map_init
  end
 
  def create_minimap
    viewport = Viewport.new(Graphics.width - 112,0,112,112)
    viewport.rect.set(MiniMapCoords[MiniMapCorner][0],
                      MiniMapCoords[MiniMapCorner][1],
                      MiniMapCoords[MiniMapCorner][2],
                      MiniMapCoords[MiniMapCorner][3])
    viewport.z = 500
    @minimapa = MiniMap.new(viewport)
  end
 
  def dispose
    sheol_mini_map_disp
    @minimapa.dispose
  end
 
  def update
    sheol_mini_map_updt
    @minimapa.update
  end
end
#==============================================================================#
# ** Конец скрипта
#==============================================================================#
Последнее редактирование: 9 года 2 нед. назад от DeadElf79.
Администратор запретил публиковать записи гостям.

[ACE] Проблема со скриптом SheolShade Minimap 9 года 2 нед. назад #80110

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • ВетеранПроект месяца 2 местоПрограммист RubyУчительПисатель 3 место3 место1 место в ГотвОрганизатор конкурсовПроект месяца 1 место
Лучше бы ты демку собрал с оригинальными ресурсами. В инструкции про их размеры ничего не сказано и я получил нечто странное:

И, судя по карте, он нормально показывает препятствия, затемняя нужные участки карты. Покажи пример, где у тебя вышла такая ошибка, что карта что-то не показала.
Последнее редактирование: 9 года 2 нед. назад от DeadElf79.
Администратор запретил публиковать записи гостям.
Модераторы: NeKotZima
Время создания страницы: 0.217 секунд