-
Amphilohiy
-
-
Вне сайта
-
Светлый дракон
-
- Сообщений: 547
- Спасибо получено: 666
-
-
|
Начну с небольшого лирического отступления. У меня нет страстного желания полностью переделывать скрипты под себя, да, могу слегка подредактировать, но в пределах необходимости. Но есть другой "бзык", если скрипт требует заполнения в самом пространстве скриптов, то очень уж хочется все это вынести отдельно. И вот я наткнулся на CSCA Crafting, где создание десятка рецептов вытекает в большие горы текста, в которых не очень то и просто ориентироваться. Но время идет, количество рецептов растет, и ориентироватся в этой горе текста становится все сложнее. Ну, я и решил настроить эту систему под себя.
Вот стандартный пример 2х рецептов, которые идут в комплекте.
RECIPE[0] = {
:name => "Apple Pie",
:ingredients => [[:gold, :g, 5]],#, [:item, 2, 3]],
:required => [:gold, :g, 100],
:product => [:gold, :g, 10],
:scrap => [:item, 5, 1],
:type => :cooking,
:discovered => false,
:time => 120,
:success_rate => 100,
:symbol => :applepie,
:experience => 10,
:level_req => 1,
:icon => 559,
:image => nil,
:color => 2,
:start_sound => "Hammer",
:fail_sound => nil,
:complete_sound => nil,
:desc => ["Delicious Apple Pie.","HP Restoration item."]
}
RECIPE[1] = {
:name => "Cheese Mushroom",
:ingredients => [[:item, 21, 1], [:item, 20, 1]],
:required => nil,
:product => [:item, 22, 1],
:scrap => [:item, 4, 1],
:type => :cooking,
:discovered => false,
:time => 160,
:success_rate => 0,
:symbol => :cheesemush,
:experience => 5,
:level_req => 1,
:icon => 660,
:image => nil,
:color => 2,
:start_sound => "Hammer",
:fail_sound => nil,
:complete_sound => nil,
:desc => ["A cheese covered mushroom.","HP Restoration item."]
}
Опять же, всего 2 рецепта... Вот как примерно сделал я.
Шаг 1 - разделяй и властвуй
Во первых, я свои рецепты раскидал по своим скриптам. Т.е. для плотника отвел отдельный скрипт "Carpenter recepies", и в него соответственно добавил свои рецепты.
CSCA::CRAFT::RECIPE<<{
:name => "Без имени",
:ingredients => [[:gold, 1, 500]],#, [:item, 2, 3]],
:required => nil,
:product => [:gold, 1, 450],
:scrap => [:item, 2, 1],
:type => :carpenter,
:discovered => true,
:time => 20,
:success_rate => 100,
:symbol => :no_symb,
:experience => 1,
:level_req => 1,
:icon => 8074,
:image => nil,
:color => 2,
:start_sound => "Break",
:fail_sound => "Bell1",
:complete_sound => "Bell3",
:desc => ["", "Забыл описание"]
}
Тут всего 2 ньюанса: 1е это я показал шаблон, который понадобится дальше. 2е - обратите внимание на заголовок. СSCA::CRAFT::RECIPE - берем список рецептов из модуля крафта, который в свою очередь прохлаждается в модуле цска. Да, мы полностью избавились от цифры номера в массиве, благодоря этим двум стрелочкам, которые добовляют элемент в конец массива. Затем копируем рецепт, и меняем его на другой.
Естественно, у меня есть отдельный скрипт и для повара, и для шахтера. Как минимум, неразберихи стало чуть меньше.
Шаг 2 - сжимаем данные
Однако, этот шаг гораздо сложнее, в основном потому, что придется написать скриптик, и понять идею рецепта "по умолчанию". Для начала - я понял что половина всей информации дублируется. Например: у меня всегда 100% успех крафта, одни и те же звуки, рецепты открыты и т.п.. Идея в том, чтобы создать канон, и в случае, если у нашего рецепта нету какого-нибудь значения, то это значение берется из канона.
Чтож, вот этот момент. Мы призываем темных богов, для написания огромнейшего скрипта, понять который способны лишь немногие! Узрите!
#Рецепт по умолчанию
$default_recepie = {
:name => "Без имени",
:ingredients => [[:gold, 1, 500]],#, [:item, 2, 3]],
:required => nil,
:product => [:gold, 1, 450],
:scrap => [:item, 2, 1],
:type => :carpenter,
:discovered => true,
:time => 20,
:success_rate => 100,
:symbol => :no_symb,
:experience => 1,
:level_req => 1,
:icon => 8074,
:image => nil,
:color => 2,
:start_sound => "Break",
:fail_sound => "Bell1",
:complete_sound => "Bell3",
:desc => ["", "Забыл описание"]
}
def add_recepie(hash)
#Для каждого значения рецепта по умолчанию
$default_recepie.each{|key, value|
#добавить значение рецепта по умолчанию, только если этого значения нет в предлогаемом рецепте
hash[key] = value unless hash[key]
}
#Добавить рецепт в список
CSCA::CRAFT::RECIPE<<hash
end
Эта функция слишком сложна, для понимания смертных, и лишь те немногие... В общем я надеюсь что дополнительных разьяснений как это работает не нужно, главное понять, что это расписывается всего один раз. Для этого я опять же завел отдельный скрипт. У нас есть глобальная переменная с нашим рецептом "по умолчанию" и функция, которая добавляет рецепт, предварительно сверившись с каноном. Заметьте, если такие значения, как :name дублируются в обоих рецептах, то в новом он заменятся каноном не будет.
А теперь я покажу как выглядят парочка моих рецептов:
$default_recepie[:type] = :carpenter
add_recepie({
:name => "Распил",
:ingredients => [[:item, 1, 1]],#, [:item, 2, 3]],
:product => [:item, 2, 3],
:time => 20,
:experience => 1,
:level_req => 1,
:icon => 8074,
:color => 2,
:desc => ["", "Распил дерева. Ничего интересного."]
})
add_recepie({
:name => "Запил",
:ingredients => [[:item, 2, 6]],#, [:item, 2, 3]],
:product => [:item, 1, 1],
:time => 20,
:experience => 1,
:level_req => 1,
:icon => 8078,
:color => 2,
:desc => ["", "Я без понятия как это происходит..."]
})
add_recepie({
:name => "Рагрыз",
:ingredients => [[:item, 4, 1]],#, [:item, 2, 3]],
:product => [:item, 21, 3],
:time => 20,
:experience => 3,
:level_req => 1,
:icon => 8077,
:color => 2,
:desc => ["", "Грызите, Шура, они золотые!"]
})
Шаг 3 - динамичный канон
Стоит отметить важную деталь - канон можно быстренько поменять перед добавлением очередного рецепта. Например в примере выше есть строчка $default_recepie[:type] = :carpenter что значит, что последующие рецепты будут относится "по умолчанию" к плотнику, при этом профессию в новых рецептах я не указываю. Поэтому в скрипте кулинара я так же поставил строчку $default_recepie[:type] = :cooking и так же не указываю профессию. Вы в любой момент можете изменить значения успеха, времени производства и т.п. для канона, и все последующие рецепты будут повиноватся новому канону, но не забывайте все вовремя вернуть.
Надеюсь вам понравился мой взгляд на ведение рецептовой книжки, и это вам поможет! А так же я надеюсь что вы поймете о чем я тут написал. Удачи в ваших проектах!
|