Sideview , а может и XAS
Вид для печати
Sideview , а может и XAS
Lokalizator, начинайте с примитивов молодой человек..)
Жаль( А может насчет меню в виде дневника что-нить еть?
есть, только там статус-меню
Ммм... Немного оффтопик, и это мое лично мнение, но... Скрипты для скриптеров или для желающих ими стать. Если тебя интересует готовое решение, то это НЕ твоя проблема. Делай себе игру, вылизывай сюжет, собирай графику. А когда закончишь бессмертный шедевр - найти желающих ее обернуть в красивый фантик будет не сложно. И это уже будет их забота - где эти скрипты искать, и как их выправлять.
Тебя должны интересовать исключительно те скрипты, без которых невозможно творить. К примеру, если у тебя многое завязано на время суток, и нужна смена дня\ночи. Или, тебе нужны сундуки, которые ты будешь рассовывать по локациям и стандартные не годятся категорически. А визуальное оформление, всякие мордочки, квестики, полосочки... До завершения основного этапа работ - они бессмысленны.
Допустим, не имея боевки нельзя балансировать игру. С нестандартной боевкой может быть завязано производство ресурсов, а с ней - юнитов, их сила, бонусы и пр. С возможностью использовать или не использовать некоторые эффекты, скилы завязан уже сюжет, характеристики боссов - суть боссов - суть игры.
Перебью вас господа.
По стандарту у VX'овских батлеров имеется по два призовых предмета,ну то есть те которые они раняют после боя.Можно ли сделать скрипт,что бы предметов было три?
Разумеется. Использовать для задания списков предметов, наверное, оптимальнее всего будет свойство Tag. Кажется, оно есть, в VX, у каждого объекта - в том числе и у существ.
Тебя интересует скрипт Scene_Battle. Ищешь в нем что-то вроде (VX под рукой нет, но XP я переписал под него на 90%):
Видишь веселый зеленый комментарий Item? А сразу за ним - создается список предметов:Код:#--------------------------------------------------------------------------
# * Victory Processing
#--------------------------------------------------------------------------
def process_victory
@phase = 5
$game_system.me_play($game_system.battle_end_me)
$game_system.bgm_play($game_temp.map_bgm)
# Exp
exp = $game_troop.exp_total
level_up = []
for actor in $game_party.members
if actor.cant_get_exp? == false
last_level = actor.level
actor.change_exp(actor.exp + exp, true)
if actor.level > last_level
level_up.push(actor.text_level_up)
end
end
end
# Gold
gold = $game_troop.gold_total
$game_party.gain_gold(gold)
# Items
drop_items = $game_troop.make_drop_items
for item in drop_items
$game_party.gain_item(item, 1)
end
@result_window = Window_BattleResult.new(exp, gold, drop_items, level_up)
@phase5_wait_count = 100
end
drop_items = $game_troop.make_drop_items
Смотришь - кто такое $game_troop
В Scene_Title можешь найти ответ:
$game_troop = Game_Troop.new
Лезешь в Game_Troop
Ищешь тот самый метод, находишь?
Видишь формулу примитвного рандома а выше - массив предметов, привязанных к врагу:Код:#--------------------------------------------------------------------------
# * Create Array of Dropped Items
#--------------------------------------------------------------------------
def make_drop_items
drop_items = []
for enemy in dead_members
for di in [enemy.drop_item, enemy.drop_weapon, enemy.drop_armor]
next if di == nil
next if rand(99) + 1 > enemy.drop_prob
drop_items.push(di)
end
end
return drop_items
end
for di in [enemy.drop_item, enemy.drop_weapon, enemy.drop_armor]
Соответственно, тебе нужно переопределить этот массив. Поскольку тут используется объект enemy, не будем изобретать велосипед и реализуем у него новый метод для генерации предметов по тэгу. Можно снова попытаться проследить цепочку вызовов, но рядом есть более чем вероятный претендент:
Game_Enemy, лезем туда.
Ага! Вот они, злодеи!
Вот здесь мы и реализуем новый метод: def getDropItemsКод:#--------------------------------------------------------------------------
# * Возвращает ID предмета, получаемого после победы над врагом
#--------------------------------------------------------------------------
def drop_item
return $data_items[enemy.item_id]
end
#--------------------------------------------------------------------------
# * Возвращает ID оружия, получаемого после победы над врагом
#--------------------------------------------------------------------------
def drop_weapon
return $data_weapons[enemy.weapon_id]
end
#--------------------------------------------------------------------------
# * Возвращает ID доспеха, получаемого после победы над врагом
#--------------------------------------------------------------------------
def drop_armor
return $data_armors[enemy.armor_id]
end
Как уже говорил, VX под рукой нет и как там добираться до тэгов не помню, поэтому расскажу словами:
В тэг юнита записываешь связки ключ-id. Ключ отвечает за тип предмета - предмет, оружие или броня. id - число, номер предмета соответствующего типа. И разделяешь их запятыми. Например:
a1,i2,i3,w22
Внутри этого метода парсишь строку тэга регулярным выражением, например: \([aiw]{1}\d+)\
Полученные группы превращаешь в соответствующие массивы ($data_weapons, $data_armors, $data_items) по первой буквы. И числовой номер - остаток подстроки.
В итоге, в массив запихиваешь список всех перечисленных предметов и возвращаешь. Вуаля.
Когда реализуешь, можешь расширить функционал, например, указывать в скобках количество в интервалах и процент выпадания для каждого предмета. :)
регулярка не правильная, группа формируется не та. Тут нужно как миниум две группы - вид и ид.
Н-р. w22 после обработки твоей регуляркой выдаст - $1=w22, а надо $1=w $2=22
правильний так
ну да, ещё эти чёртовы слеши нужно проверить, те или не те.Код:([aiw]{1})(\d+)\,?
Но я бы организовал таг вот так
и регуляркаКод:<w=1,1,50><i=1,2,45> #- <тип=Ид,кол-во,шанс> - тег
Даже если нам в начале нужно только тип и ид дропа.Код:/<([aiw]{1})=(\d+)\,(\d+)\,(\d+)>/
Кстати, на ХР где-то был подобный скрипт, там врезались в место вывода результатов биты
проверить слеши...
Регулярка как раз правильная. :D Писалась исключительно для получения групп. :) А уж как там дальше делать - дело автора. Я бы взял первый символ строки - $1 и все оставшиеся - $2. Не спорю, твой вариант хорош и сразу приходит на ум. Только тогда понадобится использовать две регулярки ;) Первая вычленит группы <>, вторая - разобьет их по твоему выражению.
P.S. Это если я не ошибаюсь, и RGSS не может выдать набор совпадений. :) C# вот. наприер, может... а RGSS не помню. Кажется, нет... Или там есть что-то из разряда .each{} для этой цели? :)
P.P.S. Хм... а зачем ты экранируешь запятые? о.О Они используются только внутри {} и не требует экранирования, в отличии от точек. (Или очередная придурь RGSS?). А краевые слеши, скорее всего, правильные у тебя. :)
P.P.P.S. Да, на будущее, в тэгах лучше, по возможности, избегать лишних символов: <w=1,1,50><i=1,2,45> В данном случае это знак равно - совершенно лишний и, вероятнее всего <>. Говорю исходя из своего горького опыта - сам так в свое время делал. Когда тэгов таких 1-2 - все ок. Когда их с десяток... Это все равно что смотреть html без переносов. w1,1,50 i1,2,45 легче и писать и читать. Если хочется разделитель отличный от пробела, например так: w1,1,50 \ i1,2,45. Я бы даже заменил запятые на точки. А если уж делать скобки, то, например, квадратные. [w1.1.50] [i1.2.45] - читается значительно легче и не создает лишнего визуального мусора, который, в больших объемах, негативно сказывается на читабельности.