Помогите пожалуйста разобраться со скриптом
Instance Items версия мукера VX ace.
Исходник:
Здесь
Скрипт для работы требует этого
Core Equip Slots или этого
Yanfly’s Ace Equip Engine.
Поставил это Yanfly’s
Ace Equip Engine а вместе сним и
Ace Core Engine v1.09 и даже заплатку
Ace Equip Engine v1.06 на всякий случай, хотя она вроде убирает конфликт с другим скриптом.
Но ума разобраться в скрипте не хватило.
Пытался оперировать тем, что приводиться в примерах,что бы понять принцип действия,но скрипт выдает ошибку "неизвестный метод для класса модуль" вероятно я осуществляю ввод не в тех местах где положено...
C базовой штукой
вроде как разобрался тег параметра из примера задается в коде после
###
module RPG
class BaseItem
# List of all attributes that are shared instance variable
_instance_attr = [:name, :params, :price, :features, :note, :icon_index,
:description]
#---------------------------------------------------------------------------
# Define methods for all shared variables
#---------------------------------------------------------------------------
_instance_refresh = "def refresh"
_instance_attr.each do |ivar|
_instance_refresh << ";refresh_#{ivar}"
eval(
"def refresh_#{ivar}
var = InstanceManager.get_template(self).#{ivar}
@#{ivar} = make_#{ivar}(InstanceManager.make_full_copy(var))
end
def make_#{ivar}(#{ivar})
#{ivar}
end
"
)
end
_instance_refresh << ";end"
eval(_instance_refresh)
end
class Item < UsableItem
attr_accessor :template_id
def is_template?
return self.template_id == self.id
end
def template_id
@template_id = @id unless @template_id
return @template_id
end
end
class EquipItem < BaseItem
attr_accessor :template_id
def is_template?
self.template_id == self.id
end
def template_id
@template_id = @id unless @template_id
return @template_id
end
end
end
#
# здесь добавляем свои варианты
#
class RPG::Weapon < RPG::EquipItem
def attack_bonus
50
end
end
#
# Продолжение скрипта...
#
module DataManager
Модуль управления шаблоном:
module InstanceManager
class << self
attr_accessor :weapons
attr_accessor :armors
attr_accessor :items
attr_reader :template_counts
end
def self.setup
@template_counts = {}
@template_counts[:weapon] = $data_weapons.size
@template_counts[:armor] = $data_armors.size
@template_counts[:item] = $data_items.size
end
#-----------------------------------------------------------------------------
# Stores the instance objects for game saving purpose
# Хранит объекты экземпляров для сохренений игры
#-----------------------------------------------------------------------------
def self.create_game_objects
@weapons = {}
@armors = {}
@items = {}
end
#-----------------------------------------------------------------------------
# Full copy of the template object so we don't have any reference issues
#-----------------------------------------------------------------------------
def self.make_full_copy(obj)
return Marshal.load(Marshal.dump(obj))
end
def self.instance_enabled?(obj)
return TH::Instance_Items::Enable_Items if obj.is_a?(RPG::Item)
return TH::Instance_Items::Enable_Weapons if obj.is_a?(RPG::Weapon)
return TH::Instance_Items::Enable_Armors if obj.is_a?(RPG::Armor)
return false
end
def self.is_template?(obj)
return obj.id >= @template_counts[:item] if obj.is_a?(RPG::Item)
return obj.id >= @template_counts[:weapon] if obj.is_a?(RPG::Weapon)
return obj.id >= @template_counts[:armor] if obj.is_a?(RPG::Armor)
end
#-----------------------------------------------------------------------------
# create an instance from the template. Basically just a full copy.
#-----------------------------------------------------------------------------
def self.make_instance(obj)
new_obj = make_full_copy(obj)
new_obj.template_id = new_obj.id
return new_obj
end
#-----------------------------------------------------------------------------
# Return the database table that the obj belongs in
#-----------------------------------------------------------------------------
def self.get_tables(obj)
return @items, $data_items if obj.is_a?(RPG::Item)
return @weapons, $data_weapons if obj.is_a?(RPG::Weapon)
return @armors, $data_armors if obj.is_a?(RPG::Armor)
end
def self.get_template(obj)
return $data_items[obj.template_id] if obj.is_a?(RPG::Item)
return $data_weapons[obj.template_id] if obj.is_a?(RPG::Weapon)
return $data_armors[obj.template_id] if obj.is_a?(RPG::Armor)
end
#-----------------------------------------------------------------------------
# Returns an instance of the object, assuming it is a valid object, it
# supports instances, and it's not a template
#-----------------------------------------------------------------------------
def self.get_instance(obj)
return obj if obj.nil? || !instance_enabled?(obj) || !obj.is_template?
new_obj = make_instance(obj)
container, table = get_tables(obj)
id = table.size
new_obj.id = id
# Setup the instance object as required
setup_instance(new_obj)
# Add to database and container
container[id] = new_obj
table[id] = new_obj
return new_obj
end
#-----------------------------------------------------------------------------
# Set up our new instance object. This is meant to be aliased
#-----------------------------------------------------------------------------
def self.setup_instance(obj)
setup_equip_instance(obj) if obj.is_a?(RPG::EquipItem)
setup_item_instance(obj) if obj.is_a?(RPG::Item)
end
#-----------------------------------------------------------------------------
# Apply any equip-specific logic. This is meant to be aliased.
# Note the same object is passed to the appropriate setup method depending
# on whether it's a weapon or armor, so be careful not to apply the same
# changes multiple times.
#-----------------------------------------------------------------------------
def self.setup_equip_instance(obj)
setup_weapon_instance(obj) if obj.is_a?(RPG::Weapon)
setup_armor_instance(obj) if obj.is_a?(RPG::Armor)
end
#-----------------------------------------------------------------------------
# Apply any weapon-specific logic. This is meant to be aliased.
#-----------------------------------------------------------------------------
def self.setup_weapon_instance(obj)
end
#-----------------------------------------------------------------------------
# Apply any armor-specific logic. This is meant to be aliased.
#-----------------------------------------------------------------------------
def self.setup_armor_instance(obj)
end
#-----------------------------------------------------------------------------
# Apply any item-specific logic. This is meant to be aliased.
#-----------------------------------------------------------------------------
def self.setup_item_instance(obj)
end
#
# Здесь вводим свои значения
#
class << self
alias :th_random_weapon_bonus_setup_weapon_instance :setup_weapon_instance
end
def self.setup_weapon_instance(obj)
template_obj = get_template(obj)
th_random_weapon_bonus_setup_weapon_instance(obj)
obj.params[2] += rand(template_obj.attack_bonus)
end
#
# Здесь вводим свои значения
#
end
#
# Продолжение скрипта...
#
module RPG
Поправьте,если утверждения выше не верны.
После этих махинаций скрипт работает и на всем оружии урон скачет на +1 - +50, но как сделать так, что бы на каждый шаблон(оружие,броню) указанный в базе данных был определенный разброс урона, что бы можно было таки достигнуть конечной цели при которой условный бронзовый клинок будет иметь урон от 50-75, а у мифрилового разброс будет
от 100-120 ?
P.S. Помогите оби ван киноби на вас вся надежда :Д