-
strelokhalfer
-
-
Вне сайта
-
Архитектор Миров
-
-
Знатный грамотей
- Сообщений: 1640
- Спасибо получено: 1078
-
-
|
Не каждый хочет, что бы NPC могли уйти туда, куда им вздумается. С этим
скриптом это сделать очень просто, посредством Регионов!
Просто нарисуйте периметр для NPC и они не смогут его покинуть.
Аналогично можно сделать и для игрока!
Скрипт прост, как им пользоваться написано в самом скрипте.
#==============================================================================
#
# ▼ Yanfly Engine Ace - Move Restrict Region v1.03
# -- Последнее обновление: 2012.01.03
# -- Сложность: Просто
# -- Требует: ничего
# -- Перевод: strelokhalfer для http://rpg-maker.info
#
#==============================================================================
$imported = {} if $imported.nil?
$imported["YEA-MoveRestrictRegion"] = true
#==============================================================================
# ▼ Обновления
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2012.23.08 - Добавлено: <all restrict: x>
# 2012.01.03 - Добавлено: <all restrict: x>
# 2011.12.26 - Багфиксы: Проходимость игрока.
# 2011.12.15 - Законченая версия.
#
#==============================================================================
# ▼ Введение
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Не каждый хочет, что бы NPC могли уйти туда, куда им вздумается. С этим
# скриптом это сделать очень просто, посредством Регионов!
# Просто нарисуйте периметр для NPC и они не смогут его покинуть.
# Аналогично можно сделать и для игрока!
#
#==============================================================================
# ▼ Инструкции
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Для установки откройте редактор скриптов и вставте его ниже
# ▼ Materials/素材/Пользовательские, но выше ▼ Main. Сохраните изменения.
#
# -----------------------------------------------------------------------------
# Все эти инструкции пишутся в Заметках в свойствах карты.
# -----------------------------------------------------------------------------
# <all restrict: x>
# <all restrict: x, x>
# Игроки и NPC не смогут пройти сковзь Регион "x", даже если тайл с событием
# имеет флаг "Проходимое". Единственый способ пройти для игрока -
# использовать дебаг-режим. Просто замените "x" цифрой нужного вам региона
# и нарисуйте периметр. Если вам нужно больше регионов, допишите через ","
# Пример: <all restrict: 1> - нельзя пройти через регион 1
# <all restrict: 2, 3, 4> - нельзя пройти через регионы 2, 3 и 4
#
# <npc restrict: x>
# <npc restrict: x, x>
# NPC не смогут пройти сковзь Регион "x", даже если тайл с событием
# имеет флаг "Проходимое". Просто замените "x" цифрой нужного вам региона
# и нарисуйте периметр. Если вам нужно больше регионов, допишите через ","
# Пример: <npc restrict: 1> - нельзя пройти через регион 1
# <npc restrict: 2, 3, 4> - нельзя пройти через регионы 2, 3 и 4
#
# <player restrict: x>
# <player restrict: x, x>
# Игрок не сможет пройти сковзь Регион "x", даже если тайл с событием
# имеет флаг "Проходимое". Единственый способ пройти для игрока -
# использовать дебаг-режим. Просто замените "x" цифрой нужного вам региона
# и нарисуйте периметр. Если вам нужно больше регионов, допишите через ","
# Пример: <player restrict: 1> - нельзя пройти через регион 1
# <player restrict: 2, 3, 4> - нельзя пройти через регионы 2, 3 и 4
#
#==============================================================================
# ▼ Совместимость
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Данный скрипт написан для RPG Maker VX Ace. Советуем не пытаться
# использовать его на Vx, так как возможно нужно будет его подстроить.
#
#==============================================================================
module YEA
module MOVE_RESTRICT
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# - Стандартный ограничительный регион для всех -
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# Здесь указан регион, через который нельзя пройти и его не
# нужно каждый раз объявлять в свойствах карты.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
DEFAULT_ALL = [61]
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# - Стандартный ограничительный регион для игрока -
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# Здесь указан регион, через который нельзя пройти игроку и его не
# нужно каждый раз объявлять в свойствах карты.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
DEFAULT_PLAYER = [62]
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# - Стандартный ограничительный регион для NPC -
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# Здесь указан регион, через который нельзя пройти NPC и его не
# нужно каждый раз объявлять в свойствах карты.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
DEFAULT_NPC = [63]
end # MOVE_RESTRICT
end # YEA
#==============================================================================
# ▼ Советую тут ничего трогать
#==============================================================================
module YEA
module REGEXP
module MAP
ALL_RESTRICT =
/<(?:ALL_RESTRICT|all restrict):[ ]*(\d+(?:\s*,\s*\d+)*)>/i
NPC_RESTRICT =
/<(?:NPC_RESTRICT|npc restrict):[ ]*(\d+(?:\s*,\s*\d+)*)>/i
PLAYER_RESTRICT =
/<(?:PLAYER_RESTRICT|player restrict):[ ]*(\d+(?:\s*,\s*\d+)*)>/i
end # MAP
end # REGEXP
end # YEA
#==============================================================================
# ■ RPG::Map
#==============================================================================
class RPG::Map
#--------------------------------------------------------------------------
# public instance variables
#--------------------------------------------------------------------------
attr_accessor :all_restrict_regions
attr_accessor :npc_restrict_regions
attr_accessor :player_restrict_regions
#--------------------------------------------------------------------------
# common cache: load_notetags_mrr
#--------------------------------------------------------------------------
def load_notetags_mrr
@all_restrict_regions = YEA::MOVE_RESTRICT::DEFAULT_ALL.clone
@npc_restrict_regions = YEA::MOVE_RESTRICT::DEFAULT_NPC.clone
@player_restrict_regions = YEA::MOVE_RESTRICT::DEFAULT_PLAYER.clone
#---
self.note.split(/[\r\n]+/).each { |line|
case line
#---
when YEA::REGEXP::MAP::ALL_RESTRICT
$1.scan(/\d+/).each { |num|
@all_restrict_regions.push(num.to_i) if num.to_i > 0 }
when YEA::REGEXP::MAP::NPC_RESTRICT
$1.scan(/\d+/).each { |num|
@npc_restrict_regions.push(num.to_i) if num.to_i > 0 }
when YEA::REGEXP::MAP::PLAYER_RESTRICT
$1.scan(/\d+/).each { |num|
@player_restrict_regions.push(num.to_i) if num.to_i > 0 }
#---
end
} # self.note.split
#---
end
end # RPG::Map
#==============================================================================
# ■ Game_Map
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# alias method: setup
#--------------------------------------------------------------------------
alias game_map_setup_mrr setup
def setup(map_id)
game_map_setup_mrr(map_id)
@map.load_notetags_mrr
end
#--------------------------------------------------------------------------
# new method: all_restrict_regions
#--------------------------------------------------------------------------
def all_restrict_regions
return @map.all_restrict_regions
end
#--------------------------------------------------------------------------
# new method: npc_restrict_regions
#--------------------------------------------------------------------------
def npc_restrict_regions
return @map.npc_restrict_regions
end
#--------------------------------------------------------------------------
# new method: player_restrict_regions
#--------------------------------------------------------------------------
def player_restrict_regions
return @map.player_restrict_regions
end
end # Game_Map
#==============================================================================
# ■ Game_CharacterBase
#==============================================================================
class Game_CharacterBase
#--------------------------------------------------------------------------
# alias method: passable?
#--------------------------------------------------------------------------
alias game_characterbase_passable_mrr passable?
def passable?(x, y, d)
return false if npc_region_forbid?(x, y, d)
return false if player_region_forbid?(x, y, d)
return game_characterbase_passable_mrr(x, y, d)
end
#--------------------------------------------------------------------------
# new method: npc_forbid?
#--------------------------------------------------------------------------
def npc_region_forbid?(x, y, d)
return false unless self.is_a?(Game_Event)
region = 0
case d
when 1; region = $game_map.region_id(x-1, y+1)
when 2; region = $game_map.region_id(x+0, y+1)
when 3; region = $game_map.region_id(x+1, y+1)
when 4; region = $game_map.region_id(x-1, y+0)
when 5; region = $game_map.region_id(x+0, y+0)
when 6; region = $game_map.region_id(x+1, y+0)
when 7; region = $game_map.region_id(x-1, y-1)
when 8; region = $game_map.region_id(x+0, y-1)
when 9; region = $game_map.region_id(x+1, y-1)
end
return true if $game_map.all_restrict_regions.include?(region)
return false if @through
return $game_map.npc_restrict_regions.include?(region)
end
#--------------------------------------------------------------------------
# new method: player_region_forbid?
#--------------------------------------------------------------------------
def player_region_forbid?(x, y, d)
return false unless self.is_a?(Game_Player)
return false if debug_through?
region = 0
case d
when 1; region = $game_map.region_id(x-1, y+1)
when 2; region = $game_map.region_id(x+0, y+1)
when 3; region = $game_map.region_id(x+1, y+1)
when 4; region = $game_map.region_id(x-1, y+0)
when 5; region = $game_map.region_id(x+0, y+0)
when 6; region = $game_map.region_id(x+1, y+0)
when 7; region = $game_map.region_id(x-1, y-1)
when 8; region = $game_map.region_id(x+0, y-1)
when 9; region = $game_map.region_id(x+1, y-1)
end
return true if $game_map.all_restrict_regions.include?(region)
return false if @through
return $game_map.player_restrict_regions.include?(region)
end
end # Game_CharacterBase
#==============================================================================
#
# ▼ Конец файла
#
#==============================================================================
|