[VX Ace] Случайное перемещение эвентов

Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место 3 место Готв Победитель Сбитой кодировки Программист JavaScript 2 место Сбитая кодировка Писатель 3 место 2 место 3 место Организатор конкурсов
Больше
12 года 9 мес. назад - 12 года 9 мес. назад #62874 от Cerberus
Потребовалось мне на одном из этапов игры перемещать эвенты случайным образом. Да не просто перемещать захотелось, а прыжками, для пущей эффектности.
Сделать это эвентами, как я подозреваю, невозможно в принципе - нельзя прыгнуть в случайную точку. Посему - прошу любить и жаловаться :)
Что умеет скрипт:
  • Как уже было сказано - заставлять эвенты на карте с определённой периодичностью прыгать с клетки на клетку. При этом не попадать ни друг на друга, ни на героя.
  • При этом не все сразу, а только эвенты из произвольно заданного списка.
  • И более того - с периодичностью в N кадров, где N также произвольно.
Запуск скрипта:
Code:
Event_Shuffle.start([список-эвентов],период,[список-тэгов])
Где:
  • список-эвентов - перечень номеров эвентов, которые должны прыгать
  • период - интервал между прыжками в кадрах (60 кадров = 1 секунда)
  • список-тэгов - необязательный параметр, задаёт список тэгов, на которых может "приземлиться" эвент. Внимание! Если места с такими тэгами мало или передан пустой список (короче, если для очередного эвента не хватит места) - скрипт зависнет!
Остановка, соответственно:
Code:
Event_Shuffle.stop

На нециклической карте эвенты начинают жаться к стенкам и по углам (в ходе теста в один угол забились аж четыре призрака - поручик, молчать! :D) - чуть позже это исправлю (уже знаю, как). На циклической всё работает как положено.
Собственно скрипт:
Code:
=begin Скрипт, который случайным образом перебрасывает эвенты по карте Автор: Cerberus =end module Event_Shuffle @events = nil @shuffling = false @x = @y = nil @x_to = @y_to = nil @freq = nil @turns = nil @tags = [] def self.start(events, frequency, tags=nil) stop if @shuffling @shuffling = true @freq = frequency @turns = 1 @events = events @tags = Array.new(64) {|i| i } @tags = tags unless tags==nil end def self.turn return unless @shuffling @turns -= 1 return unless @turns==0 @turns = @freq @events.each do |i| next if $game_map.events[i].nil? @correct = false until @correct do @correct = true if $game_map.loop_horizontal? @x = rand($game_map.width) - $game_map.width / 2 else @x = rand(2 * [$game_map.events[i].x, $game_map.width - $game_map.events[i].x].min) - [$game_map.events[i].x, $game_map.width - $game_map.events[i].x].min end if $game_map.loop_vertical? @y = rand($game_map.height) - $game_map.height / 2 else @y = rand(2 * [$game_map.events[i].y, $game_map.height - $game_map.events[i].y].min) - [$game_map.events[i].y, $game_map.height - $game_map.events[i].y].min end @x_to = $game_map.events[i].x + @x @y_to = $game_map.events[i].y + @y @correct = false unless @tags.include?($game_map.terrain_tag(@x_to, @y_to)) for j in (1..$game_map.events.size) do next if $game_map.events[j].nil? correct = false if ($game_map.events[j].x == @x_to && $game_map.events[j].y == @y_to) end correct = false if ($game_player.x == @x_to && $game_player.y == @y_to) end $game_map.events[i].jump(@x, @y) end end def self.stop @events = nil @shuffling = false @x = @y = nil @x_to = @y_to = nil @freq = nil @turns = nil @tags = [] end end class Scene_Base alias event_shuffle_update update def update Event_Shuffle.turn event_shuffle_update end end class Scene_Map < Scene_Base alias event_shuffle_pre_transfer pre_transfer def pre_transfer Event_Shuffle.stop event_shuffle_pre_transfer end end

Жуть болотная, на лапках, в тапках и с пулемётом...
Последнее редактирование: 12 года 9 мес. назад пользователем Cerberus.
Спасибо сказали: Lekste, DeadElf79, CreepyPasta

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

Больше
12 года 9 мес. назад #62875 от Kian Ni
Модератор модератором, а правило оформления нарушил:D

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

Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место 3 место Готв Победитель Сбитой кодировки Программист JavaScript 2 место Сбитая кодировка Писатель 3 место 2 место 3 место Организатор конкурсов
Больше
12 года 9 мес. назад #62877 от Cerberus
Олик, теперь доволен? ;)

Жуть болотная, на лапках, в тапках и с пулемётом...

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

Больше
12 года 9 мес. назад #62879 от Kian Ni
Нет. Не указана версия мейкера:D

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

Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место 3 место Готв Победитель Сбитой кодировки Программист JavaScript 2 место Сбитая кодировка Писатель 3 место 2 место 3 место Организатор конкурсов
Больше
12 года 9 мес. назад #62880 от Cerberus
Раздела, в котором скрипт выложен (а именно RGSS3) мало? ;) Впрочем, действительно есть резон.

Жуть болотная, на лапках, в тапках и с пулемётом...

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

Больше
12 года 9 мес. назад #62881 от Kian Ni
Эм, я вообще никогда не обращая внимание на разделы, привычка флудера как бы:D

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

1 место в Готв 3 место Учитель Разработчик 3 место Готв Ветеран Писатель 2 место Тестер
Больше
12 года 9 мес. назад #62890 от Демий
Эх... А я помнится делал это всё с помощью ивентов... ХД

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

Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место 3 место Готв Победитель Сбитой кодировки Программист JavaScript 2 место Сбитая кодировка Писатель 3 место 2 место 3 место Организатор конкурсов
Больше
12 года 9 мес. назад #62898 от Cerberus
Демий, да неужто? Не затруднит показать наработки? Самому прямо интересно, как это возможно!

Жуть болотная, на лапках, в тапках и с пулемётом...

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

1 место в Готв 3 место Учитель Разработчик 3 место Готв Ветеран Писатель 2 место Тестер
Больше
12 года 9 мес. назад #62924 от Демий
Покажу потом наработки, если найду... Ну конечно, всё было не так идеально как у тебя в скрипте, но в принципе примерно так.

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

Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место 3 место Готв Победитель Сбитой кодировки Программист JavaScript 2 место Сбитая кодировка Писатель 3 место 2 место 3 место Организатор конкурсов
Больше
12 года 9 мес. назад #62928 от Cerberus
Буду ждать :)

Жуть болотная, на лапках, в тапках и с пулемётом...

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

1 место в Готв 3 место Учитель Разработчик 3 место Готв Ветеран Писатель 2 место Тестер
Больше
12 года 9 мес. назад - 12 года 9 мес. назад #62941 от Демий
Блин... Удалил я наработки те... Ну ни чего, если есть терпение, то когда закончу с текущим проектом, сделаю снова всё... Но понадобится время(хотя бы до момента релиза демки моей игры...ХД)
Последнее редактирование: 12 года 9 мес. назад пользователем Демий.

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

1 место в Готв 3 место Учитель Разработчик 3 место Готв Ветеран Писатель 2 место Тестер
Больше
12 года 9 мес. назад - 12 года 9 мес. назад #63123 от Демий
Вот я дурак не внимательный! Только сейчас углядел, что речь идет именно о прыжках... А тут наверно да, без скриптов ни как, разве что сделать имитацию прыжков...
Последнее редактирование: 12 года 9 мес. назад пользователем Демий.

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

Больше
12 года 1 мес. назад #68114 от Sleeping Visitor

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

Больше
11 года 1 мес. назад #79735 от CreepyPasta

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

Больше
11 года 1 мес. назад #79736 от soulshard
По идее все всегда можно сделать 2 способам - долгим,но легким или трудным, но быстрым.
Также и тут со скриптами или же на ивентах. Долгое время работы с инветами, я понял, что с ними возможно все, было бы желание и правильный ход мыслей..

Вот примерная демка тык-тык

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

Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место 3 место Готв Победитель Сбитой кодировки Программист JavaScript 2 место Сбитая кодировка Писатель 3 место 2 место 3 место Организатор конкурсов
Больше
11 года 1 мес. назад - 11 года 1 мес. назад #79766 от Cerberus
Крипи, номер - не 040 и 008, а 40 и 8.
Соул, сейчас гляну демку, мне уже интересно, как ты это провернул...
upd: посмотрел. Да, я не спорю, так тоже сделать вполне реально. Правда, мало кто захочет писать по двадцать условий на каждую координату.

Жуть болотная, на лапках, в тапках и с пулемётом...
Последнее редактирование: 11 года 1 мес. назад пользователем Cerberus.

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

Проект месяца 3 место 2 место Готв
Больше
11 года 1 мес. назад - 11 года 1 мес. назад #79773 от zmeelov66
Церб, а отметить регионами все места куда нам нельзя тепатся, а потом забить рандомные координаты, проверить их регион и значение ивента на них, и потом, если и то, и другое 0 - тепнуть, не?
З.Ы:Извини, если я неправильно уловил суть задачи))
Последнее редактирование: 11 года 1 мес. назад пользователем zmeelov66.
Спасибо сказали: strelokhalfer

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

Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место 3 место Готв Победитель Сбитой кодировки Программист JavaScript 2 место Сбитая кодировка Писатель 3 место 2 место 3 место Организатор конкурсов
Больше
11 года 1 мес. назад #79774 от Cerberus
Змеелов, проблема в том, что телепорт по переменным сделать можно, а вот прыжок - нельзя. Так-то всё правильно :)

Жуть болотная, на лапках, в тапках и с пулемётом...

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

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