[ACE] Проблема со скриптом SheolShade Minimap

Больше
11 года 2 нед. назад - 11 года 2 нед. назад #80106 от MrWindson
Здравствуйте! Нужна помощь, возникла проблема с этим скриптом. После активирования миникарты через переключатель, привязанный к ключевому предмету в инвентаре, миникарта работает нормально, но не показывает непроходимые тайлы типа стен и деревьев. Может кто-нибудь объяснить, в чём косяк?

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

Скрипт:
Code:
#==============================================================================# # **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 #==============================================================================# # ** Конец скрипта #==============================================================================#
Последнее редактирование: 11 года 2 нед. назад пользователем DeadElf79.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
Больше
11 года 2 нед. назад - 11 года 2 нед. назад #80110 от DeadElf79
Лучше бы ты демку собрал с оригинальными ресурсами. В инструкции про их размеры ничего не сказано и я получил нечто странное:
[IMG

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.084 секунд
Работает на Kunena форум