Пропуск хода из-за статуса - редактировать условия

Больше
8 года 8 мес. назад #99474 от xawoca
И снова здравствуйте ))

В ходе моих попыток несколько выделить управление протагонистом, мне понадобилось, чтобы статусы типа "паралич" или "сон" всех персонажей исправно парализовывали/усыпляли/нужное_вставить и те пропускали ход - но конкретный персонаж (повторюсь, с тем же статусом) должен оставаться активным и окно выбора команд для него должно открываться как обычно.
Прежде чем создавать статус-дублер и писать охапку КоммонЕвентов, которые в нужный момент меняли бы их с оригиналом местами, рещил поинтересоваться, нельзя ли решить проблему парой строчек в Scene_Battle?

Еще раз: можно ли и если да, то как сделать, чтобы с одним и тем же статусом одни акторы пропускали ход, а другие - нет?
Спасибо сказали: Dmy

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 2 место Ветеран Оратор
Больше
8 года 8 мес. назад - 8 года 8 мес. назад #99475 от Green-Leo
Мб в класс этого персонажа добавить неуязвимость к этим статусам и всё?

Ну и со статусом-дублёром хорошая идея тоже, можно сделать так что-бы команда была неуязвима к "дублёру", а протагонист к "оригиналу" и всё.


А судя по тому, что ты писал в чате, то тебе нужно сделать следующее:

Отредактировать навыки типо "оглушение", убрать в "ограничение действия" пункт "не может двигаться" и вместо этого сделать следующее: запретить в "особенностях" атаку, защиту и типы навыков которыми пользуются персонажи, но вместе с этим добавить им дополнительный тип навыков, где будут навыки типо "попытаться подняться" и так далее, как ты хочешь.

Так бы я сделал на Эйсе, но раз ты говоришь что у тебя ХР, не уверен есть ли там такие возможности.
Последнее редактирование: 8 года 8 мес. назад пользователем Green-Leo.
Спасибо сказали: Dmy, xawoca

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
8 года 8 мес. назад #99476 от xawoca

Green-Leo пишет: Мб в класс этого персонажа добавить неуязвимость к этим статусам и всё?

Ну и со статусом-дублёром хорошая идея тоже, можно сделать так что-бы команда была неуязвима к "дублёру", а протагонист к "оригиналу" и всё.

Если мне тут решение на тарелочке не поднесут - так и пере-сделаю.
Но вот кажется на грани уверенности, что где-то есть тупо строчка про "если на акторе такой-то статус - перейти к следующему актору" и прибавить к ней лишнее IF - дело пары минут. Проблема найти эту строчку.

Green-Leo пишет: А судя по тому, что ты писал в чате, то тебе нужно сделать следующее:
...
Так бы я сделал на Эйсе, но раз ты говоришь что у тебя ХР, не уверен есть ли там такие возможности.

Увы, нету.
Спасибо сказали: Dmy

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Ветеран Поддержка Фонда Разработчик Проект месяца 3 место Учитель Оратор Даритель Стимкея 2 место За 2 место на конкурсе маппинга Программист Ruby Паладин
Больше
8 года 8 мес. назад - 8 года 8 мес. назад #99478 от Dmy
Я (как всегда) ничего не проверял, но попробуй добавить вот такой код (либо в конец Game_Actor, либо вообще в отдельный скрипт внизу после остальных скриптов):
Code:
class Game_Actor < Game_Battler alias original_restriction_before_skip_check restriction def restriction if [1,2].include?(@actor_id) then return 0 else return original_restriction_before_skip_check end end end

В строчке if [1,2].include?(@actor_id) замени 1,2 на список номеров героев в базе данных через запятую, для которых не должны ограничиваться ходы (список может быть из одного номера, [1]).

Если будет выводить ошибку, покажи, пожалуйста, текст этой ошибки — я исправлю.
Последнее редактирование: 8 года 8 мес. назад пользователем Dmy.
Спасибо сказали: AnnTenna, xawoca

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
8 года 8 мес. назад - 8 года 8 мес. назад #99481 от xawoca

Dmy пишет: Если будет выводить ошибку, покажи, пожалуйста, текст этой ошибки — я исправлю.

С одной стороны, всё хорошо - работает без ошибок (единственный скользкий момент - просто добавление скрипта в низ спеиска не сработало, пришлось совать непосредственно под Game_Actor).
С другой стороны, праздновать победу рано - таким образом персонаж не блокируется вообще ничем.
Попытка сделать делать "лесенку" вроде
Code:
if [1].include?(@actor_id) then if $game_actors[1].state?(22) return 0
выдает ошибку

Script 'Game_Battler' line 296: NoMethodError occured.
undefined method '<' for nil:NilClass

понятную даже мне, но правильного написания я таки не знаю.
Последнее редактирование: 8 года 8 мес. назад пользователем xawoca.
Спасибо сказали: Dmy

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Ветеран Поддержка Фонда Разработчик Проект месяца 3 место Учитель Оратор Даритель Стимкея 2 место За 2 место на конкурсе маппинга Программист Ruby Паладин
Больше
8 года 8 мес. назад - 8 года 8 мес. назад #99482 от Dmy

xawoca пишет:

Dmy пишет: Если будет выводить ошибку, покажи, пожалуйста, текст этой ошибки — я исправлю.

С одной стороны, всё хорошо - работает без ошибок (единственный скользкий момент - просто добавление скрипта в низ спеиска не сработало, пришлось совать непосредственно под Game_Actor).
С другой стороны, праздновать победу рано - таким образом персонаж не блокируется вообще ничем.
Попытка сделать делать "лесенку" вроде
Code:
if [1].include?(@actor_id) then if $game_actors[1].state?(22) return 0
выдает ошибку

Script 'Game_Battler' line 296: NoMethodError occured.
undefined method '<' for nil:NilClass

понятную даже мне, но правильного написания я таки не знаю.


Можно сделать так:
Code:
class Game_Actor < Game_Battler # переименовываем оригинальную функцию restriction, чтобы # мы могли к ней обратиться в будущем alias original_restriction_before_skip_check restriction # определяем новую restriction, которая заменит оригинальную def restriction #проверяем, что герой из списка (сейчас список включает только героя №1) if [1].include?(@actor_id) then #если из списка, то используем изменённый код из оригинальной проверки #в начале у героя никакого ограничения по статусу restriction_max = 0 #проходимся по статусам и определяем, какой из #них сильнее всего ограничивает героя, и выбираем самый сильный for i in @states #но проверяем, чтобы статус был из тех, которые учитываются (сейчас это 22) #остальные статусы (не 22) игнорируем if [22].include?(i) && $data_states[i].restriction >= restriction_max restriction_max = $data_states[i].restriction end end # возвращаем рассчитанное значение restriction_max return restriction_max else # для остальных героев используем оригинальный алгоритм return original_restriction_before_skip_check end end end

Как всегда, ничего не проверялось :)
Последнее редактирование: 8 года 8 мес. назад пользователем Dmy.
Спасибо сказали: xawoca

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
8 года 8 мес. назад - 8 года 8 мес. назад #99483 от xawoca

Dmy пишет: Как всегда, ничего не проверялось :)

...Что б ты без меня делал ))
Всё заработало, очередное спасибо, от души.
Последнее редактирование: 8 года 8 мес. назад пользователем xawoca.
Спасибо сказали: Dmy

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.101 секунд
Работает на Kunena форум