Код:
#===============================================================================
# +++ SIMPLE RANDOM SHOP +++
#===============================================================================
# + Оригинальный скрипт от Fhizban (Так же известен как Malagar).
# + Перевод Riko(Lostmaker).
# + Версия 1.0.
# + Обновлено Август 2015.
# + Для RPG Maker VX Ace.
# + Свободен для коммерческого и некоммерческого использования.
# + Не требует наличия других скриптов
#===============================================================================
# Информация
#===============================================================================
# Данный скрипт позволяет создать магазин рандомных вещей,оружия и экипировки.
#===============================================================================
# Установка
#===============================================================================
# + Вставте скрипт в раздел "Пользовательские".
# + Заполните некоторые поля в заметках(описание ниже)вещей в базе данных.
# + Поместите новое событие на карту.
# + Настройте вызов рандомного магазина при помощи функции "Скрипт" (описание ниже).
#===============================================================================
# Документация
#===============================================================================
# Настройка работы скрипта состоит из трёх частей:
# 1) Добавить запись в заметках вещей в базе данных проекта.
# 2) Добавить команду вызова магазина в новое событие.
# 3) Настроить нужное во время тестов проекта.
#
# 1) Редактирование заметок:
# Заметки редактируются для всех ВЕЩЕЙ, ОРУЖИЯ и БРОНИ,которые вы хотите внести в рандомный магазин.
# Вещь,не имеющая записи в заметках,не будет появляться в магазине.
#
# <family: x> # Группа/категория вещей.(Настройка лично для Вас,не влияет на работу скрипта)
# <rarity: x> # Коеффициент редкости (1+ выше - реже)
# <level-min: x> # Минимальный уровень персонажа,при котором данная вещь будет появляться в магазине (1-99)
# <level-max: x> # Максимальный уровень персонажа,при котором данная вещь будет появляться в магазине (1-99)
#
# Опциональные заметки только для ОРУЖИЯ и БРОНИ:
#
# <lucky: x> # Коеффициент поймать редкую вещь в магазине.Все одетые вещи с данной заметкой суммируют шанс.
#
#
# Новые опциональные заметки для всех вещей в базе:
#
# <noshop> # Вещь никогда не появляется в рандомном магазине (Требуется Simple Random Shop 1.0+)
# <noloot> # Вещь никогда не выпадает при рандом луте (Требуется Simple Random Loot 1.4+)
# <nodrop> # Вещь никогда не падает с врага при рандом дропе (Требуется Simple Random Drop 1.0+)
#
# 2) Использование вызова скрипта:
#
# ПРИМЕР:
#
# random_shop(0, 1, 10, 50, 1, 1)
#
# РАСШИФРОВКА:
#
# random_shop(тип, мин.редкость, макс.редкость, цена=0, количество=0, субтип=0, группа=0)
#
# тип # Тип вещей в магазине:
# # 0 = Все
# # 1 = Вещи
# # 2 = Броня
# # 3 = Оружие
# # 4 = Один рандомный тип вещей
#
# мин.редкость # Минимальная и максимальная редкость вещей,генерирующихся в магазине.
# макс.редкость # Например минимальная редкость = 1 а максимальная = 50.
# # Скрипт генерирует случайным образом число от 1 до 50.
# # В магазине появятся вещи только в пределах данного числа(50 включительно).
#
# цена # ОПЦИОНАЛЬНО. Настройка цены предмета в процентах(Для более реальных торгашей).
# # Кроме того можно установить отрицательное число.(Например для скидок в магазине).
#
# количество # ОПЦИОНАЛЬНО. Устанавливает лимит вещей,продаваемых в магазине.
# # Если не установлено,то вещи в магазине продаются неограниченным количеством.
#
# субтип # ОПЦИОНАЛЬНО. Применимо только для ОРУЖИЯ или БРОНИ.
# # Иные будут игнорироваться. Filters the random loot
# # to drop only items of the stated type.
# # (e.g. 1 = General Armour)
#
# группа # ОПЦИОНАЛЬНО. Группа может быть любое число или 0.
# # 0 = Показывает все вещи,не зависимо от группы.
# # x = Показывает только те,которым была присвоена группа в заметках.
#
#===============================================================================
# Совместимость
#===============================================================================
# + Совместим с большинством других скриптов (Например YANFLY engine).
# + Может комбинироваться с другими моими скриптами:
# + Simple Random Loot
# + Simple Random Shop
# + Simple Random Drop
# + Simple Random Rarities
#===============================================================================
$imported = {} if $imported.nil?
$imported["Random_Shop"] = true
module Random_Shop
#===============================================================================
# CONFIGURATION
#===============================================================================
DEFAULT_AMOUNT = 5 # Maximum number of different, available
# Items if nothing was stated.
SHOP_REFRESH_SWITCH = 1 # Each time this switch is toggled, the
# shops inventory is refreshed. Set to 0
# to disable (this will refresh the shops
# each time the players access them).
SHOP_INVENTORY_VAR = 1
#===============================================================================
# END CONFIGURATION
#===============================================================================
end
#===============================================================================
module Random_Shop_Notetags
def loot_rarity
if @loot_rarity.nil?
if @note =~ /<rarity: (.*)>/i
@loot_rarity = $1.to_i
else
@loot_rarity = 0
end
end
@loot_rarity
end
def loot_level_min
if @loot_level_min.nil?
if @note =~ /<level-min: (.*)>/i
@loot_level_min = $1.to_i
else
@loot_level_min = 0
end
end
@loot_level_min
end
def loot_level_max
if @loot_level_max.nil?
if @note =~ /<level-max: (.*)>/i
@loot_level_max = $1.to_i
else
@loot_level_max = 0
end
end
@loot_level_max
end
def loot_lucky
if @loot_lucky.nil?
if @note =~ /<lucky: (.*)>/i
@loot_lucky = $1.to_i
else
@loot_lucky = 0
end
end
@loot_lucky
end
def loot_family
if @loot_family.nil?
if @note =~ /<family: (.*)>/i
@loot_family = $1.to_i
else
@loot_family = 0
end
end
@loot_family
end
def loot_noshop
if @loot_noshop.nil?
if @note =~ /<noshop>/i
@loot_noshop = true
else
@loot_noshop = false
end
end
@loot_noshop
end
def loot_noloot
if @loot_noloot.nil?
if @note =~ /<noloot>/i
@loot_noloot = true
else
@loot_noloot = false
end
end
@loot_noloot
end
def loot_nodrop
if @loot_nodrop.nil?
if @note =~ /<nodrop>/i
@loot_nodrop = true
else
@loot_nodrop = false
end
end
@loot_nodrop
end
end # Random_Shop_Notetags
#===============================================================================
class RPG::Item
include Random_Shop_Notetags
end
class RPG::Armor
include Random_Shop_Notetags
end
class RPG::Weapon
include Random_Shop_Notetags
end
#===============================================================================
class Game_Interpreter
def populate_shop(id)
end
def random_shop(type, rarity_min, rarity_max, price=0, amount=0, subtype=0, family=0)
@goods = []
@loot = []
#--- Determine Type
if type == 0
@loot = $data_items + $data_armors + $data_weapons
subtype = 0
elsif type == 1
@loot = $data_items
@itemtype = 0
subtype = 0
elsif type == 2
@loot = $data_armors
@itemtype = 2
elsif type == 3
@loot = $data_weapons
@itemtype = 1
else
@loot = $data_items | $data_armors | $data_weapons
subtype = 0
end
#--- Preperations
@loot.shuffle
rarity_max = rarity_min if rarity_max < rarity_min
amount = Random_Shop::DEFAULT_AMOUNT if amount < 1
subtype = 0 if subtype < 0 || subtype > 99
subtype = 0 if family < 0 || family > 99
#--- Determine Party Luck Bonus
mem = 0
eqs = 0
luck_bonus = 0
i = 0
no_equips = $game_party.members.count * $game_party.members[0].equips.count
$game_party.members.each do |mem|
mem.equips.each do |eq|
next if eq.nil?
luck_bonus += eq.loot_lucky
end
end
#--- Determine Rarity Chance
checked = 0
inventory = 0
itemprice = 0
duplicates = []
restart = false
continue = true
no_items = @loot.count - 1
rare_chance = rand(rarity_max - rarity_min) + rarity_min + luck_bonus + 1
random_item = rand(no_items) + 1
begin_count = rand(no_items) + 1
#--- Determine Random Item
no_items.times do |i|
i = i + random_item
begin_count += 1 if restart
if i > no_items
i = i - i + rand(no_items) + 1
restart = true
end
#--- Get Random Item
if family != 0 && @loot[i].loot_family != family
continue = false
end
if subtype != 0 && type == 2
if @loot[i].atype_id == subtype
continue = false
end
end
if subtype != 0 && type == 3
if @loot[i].wtype_id == subtype
continue = false
end
end
#--- Setup Shop Inventory
if continue
next if @loot[i].nil?
next if @loot[i].loot_noshop
if @loot[i].loot_level_max >= $game_party.leader.level && @loot[i].loot_level_min <= $game_party.leader.level
if @loot[i].loot_rarity <= rare_chance
if checked < no_items && inventory < amount
if !duplicates.include?(@loot[i].id)
#--- Recheck Item Type
if @loot[i].is_a?(RPG::Item)
@itemtype = 0
elsif @loot[i].is_a?(RPG::Weapon)
@itemtype = 1
elsif @loot[i].is_a?(RPG::Armor)
@itemtype = 2
end
#--- Check Item Price
if price != 0
itemprice = @loot[i].price + (@loot[i].price * (price/100))
end
if price <= 0
@goods.push([@itemtype, @loot[i].id, 0])
else
@goods.push([@itemtype, @loot[i].id, 1, itemprice])
end
duplicates.push(@loot[i].id)
inventory += 1
end
else
break
end
end
end
end
checked += 1
end
if @goods.size > 0
@goods.shuffle
SceneManager.call(Scene_Shop)
SceneManager.scene.prepare(@goods, true)
end
end
end # Game_Interpreter
#===============================================================================
# END OF SCRIPT
#===============================================================================
Социальные закладки