Sideview , а может и XAS
Sideview , а может и XAS
Жаль( А может насчет меню в виде дневника что-нить еть?
есть, только там статус-меню
Ммм... Немного оффтопик, и это мое лично мнение, но... Скрипты для скриптеров или для желающих ими стать. Если тебя интересует готовое решение, то это НЕ твоя проблема. Делай себе игру, вылизывай сюжет, собирай графику. А когда закончишь бессмертный шедевр - найти желающих ее обернуть в красивый фантик будет не сложно. И это уже будет их забота - где эти скрипты искать, и как их выправлять.
Тебя должны интересовать исключительно те скрипты, без которых невозможно творить. К примеру, если у тебя многое завязано на время суток, и нужна смена дня\ночи. Или, тебе нужны сундуки, которые ты будешь рассовывать по локациям и стандартные не годятся категорически. А визуальное оформление, всякие мордочки, квестики, полосочки... До завершения основного этапа работ - они бессмысленны.
Допустим, не имея боевки нельзя балансировать игру. С нестандартной боевкой может быть завязано производство ресурсов, а с ней - юнитов, их сила, бонусы и пр. С возможностью использовать или не использовать некоторые эффекты, скилы завязан уже сюжет, характеристики боссов - суть боссов - суть игры.
![]()
![]()
Спойлер И как тебе не стыдно-то, а, Валера?:
Оборона форта: http://rghost.ru/8kLGxFtD2
Сделать, чтоб все происходило, как я хочу, - вот, собственно, и весь мейкер!
Адский Рейд: http://rpgmaker.su/vbdownloads.php?d...downloadid=106
Перебью вас господа.
По стандарту у 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) по первой буквы. И числовой номер - остаток подстроки.
В итоге, в массив запихиваешь список всех перечисленных предметов и возвращаешь. Вуаля.
Когда реализуешь, можешь расширить функционал, например, указывать в скобках количество в интервалах и процент выпадания для каждого предмета.![]()
Последний раз редактировалось Equilibrium Keeper; 21.06.2011 в 19:58.
регулярка не правильная, группа формируется не та. Тут нужно как миниум две группы - вид и ид.
Н-р. w22 после обработки твоей регуляркой выдаст - $1=w22, а надо $1=w $2=22
правильний так
ну да, ещё эти чёртовы слеши нужно проверить, те или не те.Код:([aiw]{1})(\d+)\,?
Но я бы организовал таг вот так
и регуляркаКод:<w=1,1,50><i=1,2,45> #- <тип=Ид,кол-во,шанс> - тег
Даже если нам в начале нужно только тип и ид дропа.Код:/<([aiw]{1})=(\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] - читается значительно легче и не создает лишнего визуального мусора, который, в больших объемах, негативно сказывается на читабельности.
Последний раз редактировалось Equilibrium Keeper; 21.06.2011 в 20:39.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)
Социальные закладки