- Сообщений: 547
- Спасибо получено: 666
Взгляд скриптера: CSCA Crafting
12 года 3 мес. назад - 12 года 3 мес. назад #67768
от Amphilohiy
Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.
Amphilohiy создал тему: Взгляд скриптера: CSCA Crafting
Начну с небольшого лирического отступления. У меня нет страстного желания полностью переделывать скрипты под себя, да, могу слегка подредактировать, но в пределах необходимости. Но есть другой "бзык", если скрипт требует заполнения в самом пространстве скриптов, то очень уж хочется все это вынести отдельно. И вот я наткнулся на CSCA Crafting, где создание десятка рецептов вытекает в большие горы текста, в которых не очень то и просто ориентироваться. Но время идет, количество рецептов растет, и ориентироватся в этой горе текста становится все сложнее. Ну, я и решил настроить эту систему под себя.
Вот стандартный пример 2х рецептов, которые идут в комплекте.
Опять же, всего 2 рецепта... Вот как примерно сделал я.
Тут всего 2 ньюанса: 1е это я показал шаблон, который понадобится дальше. 2е - обратите внимание на заголовок. СSCA::CRAFT::RECIPE - берем список рецептов из модуля крафта, который в свою очередь прохлаждается в модуле цска. Да, мы полностью избавились от цифры номера в массиве, благодоря этим двум стрелочкам, которые добовляют элемент в конец массива. Затем копируем рецепт, и меняем его на другой.
Естественно, у меня есть отдельный скрипт и для повара, и для шахтера. Как минимум, неразберихи стало чуть меньше.
Чтож, вот этот момент. Мы призываем темных богов, для написания огромнейшего скрипта, понять который способны лишь немногие! Узрите!
Эта функция слишком сложна, для понимания смертных, и лишь те немногие... В общем я надеюсь что дополнительных разьяснений как это работает не нужно, главное понять, что это расписывается всего один раз. Для этого я опять же завел отдельный скрипт. У нас есть глобальная переменная с нашим рецептом "по умолчанию" и функция, которая добавляет рецепт, предварительно сверившись с каноном. Заметьте, если такие значения, как :name дублируются в обоих рецептах, то в новом он заменятся каноном не будет.
А теперь я покажу как выглядят парочка моих рецептов:
что значит, что последующие рецепты будут относится "по умолчанию" к плотнику, при этом профессию в новых рецептах я не указываю. Поэтому в скрипте кулинара я так же поставил строчку
и так же не указываю профессию. Вы в любой момент можете изменить значения успеха, времени производства и т.п. для канона, и все последующие рецепты будут повиноватся новому канону, но не забывайте все вовремя вернуть.
Надеюсь вам понравился мой взгляд на ведение рецептовой книжки, и это вам поможет! А так же я надеюсь что вы поймете о чем я тут написал. Удачи в ваших проектах!
Вот стандартный пример 2х рецептов, которые идут в комплекте.
ВНИМАНИЕ: Спойлер!
Code:
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", и в него соответственно добавил свои рецепты.
ВНИМАНИЕ: Спойлер!
Code:
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% успех крафта, одни и те же звуки, рецепты открыты и т.п.. Идея в том, чтобы создать канон, и в случае, если у нашего рецепта нету какого-нибудь значения, то это значение берется из канона.Чтож, вот этот момент. Мы призываем темных богов, для написания огромнейшего скрипта, понять который способны лишь немногие! Узрите!
ВНИМАНИЕ: Спойлер!
Code:
#Рецепт по умолчанию
$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 дублируются в обоих рецептах, то в новом он заменятся каноном не будет.
А теперь я покажу как выглядят парочка моих рецептов:
ВНИМАНИЕ: Спойлер!
Code:
$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 - динамичный канон
Стоит отметить важную деталь - канон можно быстренько поменять перед добавлением очередного рецепта. Например в примере выше есть строчка
Code:
$default_recepie[:type] = :carpenter
Code:
$default_recepie[:type] = :cooking
Надеюсь вам понравился мой взгляд на ведение рецептовой книжки, и это вам поможет! А так же я надеюсь что вы поймете о чем я тут написал. Удачи в ваших проектах!
Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.
Последнее редактирование: 12 года 3 мес. назад пользователем Amphilohiy.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
12 года 3 мес. назад #67771
от JackCL
JackCL ответил в теме Взгляд скриптера: CSCA Crafting
Спасибо, все это очень хорошо, буду использовать.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
12 года 3 мес. назад #67780
от Lekste
Lekste ответил в теме Взгляд скриптера: CSCA Crafting
Спасибо. Отлично придумал.
Главное случайно не пропустить один из параметров, чтоб потом не думать, почему рецепт работает не как ожидалось.
Главное случайно не пропустить один из параметров, чтоб потом не думать, почему рецепт работает не как ожидалось.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Время создания страницы: 0.101 секунд
