Войти на сайт

Авторизация, ждите ...
×

ТЕМА: Пропуск хода из-за статуса - редактировать условия

Пропуск хода из-за статуса - редактировать условия 6 года 7 мес. назад #99474

  • xawoca
  • xawoca аватар
  • Вне сайта
  • Познающий
  • Сообщений: 14
  • Спасибо получено: 7
И снова здравствуйте ))

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

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

Пропуск хода из-за статуса - редактировать условия 6 года 7 мес. назад #99475

  • Green-Leo
  • Green-Leo аватар
  • Вне сайта
  • Архитектор Миров
  • Зелёный
  • Сообщений: 1178
  • Спасибо получено: 1161
  • ВетеранПроект месяца 2 местоОратор
Мб в класс этого персонажа добавить неуязвимость к этим статусам и всё?

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


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

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

Так бы я сделал на Эйсе, но раз ты говоришь что у тебя ХР, не уверен есть ли там такие возможности.


Последнее редактирование: 6 года 7 мес. назад от Green-Leo.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy, xawoca

Пропуск хода из-за статуса - редактировать условия 6 года 7 мес. назад #99476

  • xawoca
  • xawoca аватар
  • Вне сайта
  • Познающий
  • Сообщений: 14
  • Спасибо получено: 7
Green-Leo пишет:
Мб в класс этого персонажа добавить неуязвимость к этим статусам и всё?

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

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

Пропуск хода из-за статуса - редактировать условия 6 года 7 мес. назад #99478

  • Dmy
  • Dmy аватар
  • Вне сайта
  • Заблокирован
  • Сообщений: 1142
  • Спасибо получено: 2477
  • УчительПоддержка ФондаПроект месяца 3 местоЗа 2 место на конкурсе маппинга2 место ВетеранРазработчикДаритель СтимкеяПаладинОратор
Я (как всегда) ничего не проверял, но попробуй добавить вот такой код (либо в конец Game_Actor, либо вообще в отдельный скрипт внизу после остальных скриптов):
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]).

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

Пропуск хода из-за статуса - редактировать условия 6 года 7 мес. назад #99481

  • xawoca
  • xawoca аватар
  • Вне сайта
  • Познающий
  • Сообщений: 14
  • Спасибо получено: 7
Dmy пишет:
Если будет выводить ошибку, покажи, пожалуйста, текст этой ошибки — я исправлю.
С одной стороны, всё хорошо - работает без ошибок (единственный скользкий момент - просто добавление скрипта в низ спеиска не сработало, пришлось совать непосредственно под Game_Actor).
С другой стороны, праздновать победу рано - таким образом персонаж не блокируется вообще ничем.
Попытка сделать делать "лесенку" вроде
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
понятную даже мне, но правильного написания я таки не знаю.
Последнее редактирование: 6 года 7 мес. назад от xawoca.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy

Пропуск хода из-за статуса - редактировать условия 6 года 7 мес. назад #99482

  • Dmy
  • Dmy аватар
  • Вне сайта
  • Заблокирован
  • Сообщений: 1142
  • Спасибо получено: 2477
  • УчительПоддержка ФондаПроект месяца 3 местоЗа 2 место на конкурсе маппинга2 место ВетеранРазработчикДаритель СтимкеяПаладинОратор
xawoca пишет:
Dmy пишет:
Если будет выводить ошибку, покажи, пожалуйста, текст этой ошибки — я исправлю.
С одной стороны, всё хорошо - работает без ошибок (единственный скользкий момент - просто добавление скрипта в низ спеиска не сработало, пришлось совать непосредственно под Game_Actor).
С другой стороны, праздновать победу рано - таким образом персонаж не блокируется вообще ничем.
Попытка сделать делать "лесенку" вроде
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
понятную даже мне, но правильного написания я таки не знаю.

Можно сделать так:
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

Как всегда, ничего не проверялось :)
Последнее редактирование: 6 года 7 мес. назад от Dmy.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: xawoca

Пропуск хода из-за статуса - редактировать условия 6 года 7 мес. назад #99483

  • xawoca
  • xawoca аватар
  • Вне сайта
  • Познающий
  • Сообщений: 14
  • Спасибо получено: 7
Dmy пишет:
Как всегда, ничего не проверялось :)
...Что б ты без меня делал ))
Всё заработало, очередное спасибо, от души.
Последнее редактирование: 6 года 7 мес. назад от xawoca.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy
Модераторы: NeKotZima
Время создания страницы: 0.337 секунд