Код:
#----------------------------------------------------------------------------
# * [ACE] Caveman Item Sets
#----------------------------------------------------------------------------
# * Автор - caveman
# * Версия: 1.0 RU
# * Релиз: 31/07/2015
#
# * Описание:
# * Добавляет в игру комплекты предметов, с достаточно простой настройкой
# * полностью надетый комплект добавляет что-то еще, от себя и отмечается
# * в окне экипировки.
# *
# * Можно использовать и модифицировать как угодно с упоминанием или без.
#----------------------------------------------------------------------------
#----------------------------------------------------------------------------
# Класс комплекта
#----------------------------------------------------------------------------
class ItemSet
attr_accessor :id # уникальный код
attr_accessor :name # наименование
attr_accessor :part_count # число частей
attr_accessor :fake_id_1 # фейковое оружие для параметров
attr_accessor :fake_id_2 # фейковая броня для параметров
def initialize (id, name, part_count, fake_id_1, fake_id_2)
self.id = id
self.name = name
self.part_count = part_count
self.fake_id_1 = fake_id_1
self.fake_id_2 = fake_id_2
end
def text
# описание комплекта, лучше всего завести в обоих заметках
return $data_weapons[fake_id_1].note if fake_id_1 != nil
return $data_armors[fake_id_2].note if fake_id_2 != nil
return ""
end
end
#----------------------------------------------------------------------------
# Справочник всех доступных комплектов
#----------------------------------------------------------------------------
class Item_Sets
attr_accessor :sets
def initialize
load_all_sets
end
##############################################################
# !!! Загрузка справочника, все комплекты заводятся тут !!! #
##############################################################
def load_all_sets
self.sets = []
# код, название, количество частей, номер оружия в БД, номер брони в БД
# последние 2 параметра содержат ссылки на итемы в БД, в
# которые прописываем плюсы и минусы комплекта
# разные, так как в оружии есть то, чего нет в броне и наоборот
self.sets.push(ItemSet.new(1, "Костюм Мастера Огня", 3, 4, 8))
self.sets.push(ItemSet.new(2, "Броня Рыцаря", 2, nil, 9))
self.sets.push(ItemSet.new(3, "Детали Аагарота", 4, 5, 10))
end
def get_set(id)
for i in 0..self.sets.length-1
next if self.sets[i].id != id
return self.sets[i]
end
return nil
end
end
#----------------------------------------------------------------------------
# Для инициализации в БД
# (для мержа с другими скриптами просто допишите (1) в нужное место)
#----------------------------------------------------------------------------
module DataManager
class << self
alias css10_load_normal_database load_normal_database
def load_normal_database
css10_load_normal_database
$data_sets = Item_Sets.new # 1
end
alias css10_load_battle_test_database load_battle_test_database
def load_battle_test_database
css10_load_battle_test_database
$data_sets = Item_Sets.new # 1
end
end
end
#----------------------------------------------------------------------------
# Дополнения для актора
#----------------------------------------------------------------------------
class Game_Actor
# здесь в список оружия/доспехов героя добавляем фейковые оружие/броню от сета
def weapons
@equips.select {|item| item.is_weapon? }.collect {|item| item.object } +
sets(1).collect {|item| item.object }
end
def armors
@equips.select {|item| item.is_armor? }.collect {|item| item.object } +
sets(2).collect {|item| item.object }
end
def equips
@equips.collect {|item| item.object } +
sets(1).collect {|item| item.object } +
sets(2).collect {|item| item.object }
end
def g_equips
@equips
end
def sets(type)
res = Array.new(0)
for i in 0..$data_sets.sets.length-1
set = $data_sets.sets[i]
i = 0
@equips.each do |item|
if !item.is_nil? && item.object != nil
if item.is_weapon? || item.is_armor?
results = item.object.note.scan(/<iset>(.*?)<\/iset>/im)
results.each do |res|
i+=1 if res[0].to_i == set.id
end
end
end
end
if i == set.part_count
if type == 1 && set.fake_id_1 != nil
item = Game_BaseItem.new
item.set_equip(true, set.fake_id_1)
item.object = $data_weapons[set.fake_id_1]
res.push(item)
end
if type == 2 && set.fake_id_2 != nil
item = Game_BaseItem.new
item.set_equip(false, set.fake_id_2)
item.object = $data_armors[set.fake_id_2]
res.push(item)
end
end
end
return res
end
end
#----------------------------------------------------------------------------
# Дополнительно: вариант GUI
#----------------------------------------------------------------------------
class Window_Set < Window_Base
def initialize(x, y, height)
super(x, y, Graphics.width, height)
end
def set_text(text)
if text != @text
@text = text
refresh
end
end
def clear
set_text("")
end
def refresh
contents.clear
draw_objective(0, 0)
end
def draw_objective(x, y)
nnote = sets_text
return if nnote == ""
change_color(text_color(14))
contents.font.size = 20
draw_text(x+4, y, contents.width, 22, "Экипированные комплекты:")
contents.font.size = 18
change_color(text_color(2))
name = nnote.scan(/<set_name>(.*?)<\/set_name>/im)
draw_text(x+200, y+2, contents.width, 20, name[0][0])
change_color(text_color(11))
desc = nnote.scan(/<set_desc>(.*?)<\/set_desc>/im)
draw_text_desc(x+8, y+18, desc[0][0])
end
def draw_text_desc(x, y, text)
text = convert_escape_characters(text)
pos = {:x => x, :y => y, :new_x => x, :height => 16}
process_character(text.slice!(0, 1), text, pos) until text.empty?
end
def sets_text
res = ""
for i in 0..$data_sets.sets.length-1
set = $data_sets.sets[i]
i = 0
$game_actors[1].g_equips.each do |item|
if !item.is_nil? && item.object != nil
if item.is_weapon? || item.is_armor?
results = item.object.note.scan(/<iset>(.*?)<\/iset>/im)
results.each do |res|
i+=1 if res[0].to_i == set.id
end
end
end
end
if i == set.part_count
res += set.text
res += "\n"
end
end
return res
end
end
class Scene_Equip
alias cs10_start start
def start
cs10_start
@item_window.height /= 2
create_sets_window
end
def create_sets_window
@sets_window = Window_Set.new(0, Graphics.height-@item_window.height,
@item_window.height)
@sets_window.viewport = @viewport
end
def on_item_ok
Sound.play_equip
@actor.change_equip(@slot_window.index, @item_window.item)
@slot_window.activate
@slot_window.refresh
@item_window.unselect
@item_window.refresh
@sets_window.refresh if @sets_window
end
end
Социальные закладки