RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2426529 views

waganwils,
Есть возможности MAP/AREA.
Есть возможность порезать карту на прямоугольники и вывести через таблицу, а уже в таблице делать кликабельным что хочешь.
Код сейчас не дам, может сам быстрее сообразишь, пока дождешься примера.

Aleks Versus Moderator 30.11.2020 16:30 (5 years ago)

waganwils,
обрати внимание на эту тему: https://qsp.org/forum/651-html-tegi-map-i-area

Ребят подскажите по календарю пожалуйста. Я сам не понимаю как его делать. Выбрал тему про Юлианский календарь, высчитал нужную мне дату, проблема только в том, что он часы и минуты по 0 показывает, как сделать нужное мне время. Второй вариант выбрал из этой темы https://qsp.org/forum/23-kak-sdelat пост от cleep, дату стартовая нормально делается, и даже на первой локации время нормально считает, но потом начинаются ошибки, то время не считает, то говорит, что такой локации нет, что-то не так делаю. Объяснить более точно затрудняюсь, так как не понимаю алгоритма календаря. Более подробно разъяснено в теме про Юлианский календарь, только бы еще знать как часы и минуты установить.

Да, с этой темы пробовал, все как по шагам описано, но часы почему-то 0 часов, 0 минут ставит, хотя дату верно, какую мне надо. Может просто часы в стартовой локации прописать, или так не корректно?

Нубай,
Значит что-то упустил, проверяй внимательнее.
На стартовой локации инициализируешь названия дней и месяцев, JDNstart.
Чтоб календарь присвоил значения переменным (посчитал время) нужно в него сходить через

gs 'calendar'

А чтоб часы отобразились нужно еще

*nl $weekday[weekday] + ',' + day + $month[month] + ' ' + year + 'года' + '. ' + $hour + ':' + $minut

Последнюю строчку можно в $ONNEWLOC добавить.

Разобрался наконец с Юлианским календарем, самое то важное в закрепленной теме и не было сказано. У меня вопрос и просьба одновременно. Где можно посмотреть простенький пример кода. Хочу сделать так, чтобы от времени суток и дня недели, зависело присутствие определенных NPC на локации, но не представляю как это сделать, есть мысль через IF но не понимаю как время указывать. И еще, где можно про RAND подробно прочитать? Так как хочется еще добавить случайных событий.

Aleks Versus Moderator 07.01.2021 16:45 (5 years ago)

Нубай,
ну предположим текущее время у тебя прописано в переменных hour и minute. Тогда, если персонаж на локации с 8:00 до 15:30, указываем промежутки:

if (hour>=8 and hour<15) or (hour=15 and minute<=30):
   *pl "Дядя Валинор восседает на троне."
else
   *pl "Трон пустует"
end

Особо про RAND читать нечего. Это просто функция, возвращающая случайное число в указанном промежутке:

rand(0,1) & ! вернёт либо ноль, либо единицу
rand(0,9) & ! вернёт случайным образом цифру
rand(100,200) & ! вернёт число в промежутке между 100 и 200, включительно.

Здравствуйте. Подскажите, что я делаю не так?

Spoiler

*nl
! ГГ заходит в транспорт
*nl “Ты зашел в автобус.”
! Задаю переменные, что пока нет оплаты за проезд и ГГ не выбрал в какой части транспорта ему ехать
проезд_оплачен=0
место_занято=0

! Предоставляется выбор действий ГГ

act “Подойти к кондуктору”:
*nl
*nl “Ты подошел к кондуктору и оплатил проезд.”
проезд_оплачен=1
место_занято=0
delact “Подойти к кондуктору”
end

! После оплаты ГГ выбирает место в какой части транспорта он поедет, при выборе одного действия, остальные должны быть убраны.

! Тестирование правильности кода происходит пока только на этом действии
act “Встать в середине автобуса”:
! Здесь дается псевдовыбор ГГ не платить за проезд, отсюда задается такая переменная, то есть ГГ может проигнорировать действие подойди к кондуктору и попробовать проехать зайцем.
место_занято=1
*clr
*nl
*nl “Ты занял место стоя у окна в середине салона автобуса, облокотившись на поручень.”
! Тут указываю, что остальные действия убираются и становятся недоступные
delact “Встать в середине автобуса”
delact “Подойти к кондуктору”
delact “Занять место в конце автобуса”
delact “Занять место в начале автобуса”
delact “Занять любое сидячее место”
delact “Занять любое стоячее место”
! Но кондуктор сам стремится хорошо выполнить свою работу и идет “обилечивать” ГГ
if место_занято=1:
if проезд_оплачен=0:
*nl
*nl “К тебе подошла кондуктор.”
*nl
*nl “-Здесь что за проезд?!”
act “Оплатить проезд”:
*nl
*nl “Ты оплачиваешь проезд.”
delact “Оплатить проезд”
проезд_оплачен=1
! Здесь задаю другие переменные, так как хочу, чтобы до поры действие было скрыто и не хочу, чтобы игрок мог воспользоваться отсутствие логики и выйти на остановке игнорируя оплату, а только после выполнения этих условий…
if место_занято=1:
if проезд_оплачен=1:
! становится доступно это действие. Проблема возникает в том, что в одном случае действие выхода на остановке доступно, когда кондуктор сама подходит, все появляется так как и задумано, а в случае самостоятельной оплаты проезда, этого действия нет вообще. Что я делаю не так?
act ‘Выйти на остановке “Коммунистическая площадь”’:
time+=20
gs “Календарь”
*nl
*nl “Ты выходишь на остановку”
goto “Площадь”
end
end
end
end
end
end
end

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

Нубай,
Просто играй с условиями

Spoiler
if проезд_оплачен=0 and место_занято=0:
*nl
*nl "Ты зашел в автобус."
	act "Подойти к кондуктору":
	*nl
	*nl "Ты подошел к кондуктору и оплатил проезд."
	проезд_оплачен=1
	место_занято=0
	gt curloc
	end
end

if место_занято=0:
	act "Встать в середине автобуса":
	место_занято=1
	*clr
	*nl
	*nl "Ты занял место стоя у окна в середине салона автобуса, облокотившись на поручень."
	gt curloc
	end
end

if проезд_оплачен=0 and место_занято=1:
*nl
*nl "К тебе подошла кондуктор."
*nl
*nl "-Здесь что за проезд?!"
	act "Оплатить проезд":
	проезд_оплачен=1
	*nl
	*nl "Ты оплачиваешь проезд."
	gt curloc
	end
end

if проезд_оплачен=1 and место_занято=1:
	act 'Выйти на остановке "Коммунистическая площадь"':
	time+=20
	проезд_оплачен=0
	место_занято=0
	gs "Календарь"
	*nl
	*nl "Ты выходишь на остановку"
	goto "Площадь"
	end
end

Наверняка, это можно еще оптимизировать через else.

Я для переменных маркеров использую одно наименование и разные индексы, например: проверка[место_занято], проверка[проез_оплачен].

PS Акты я сделал, а тексты нет, т.е. они не все будут выводиться, сорян, нет времени. Их тоже нужно расставить по условиям.

Спасибо, я попробую, просто по видеоурокам Алекса продвигаюсь медленно, тоже времени не особо, пробую в свободное время, радует, что хоть что-то получается у меня, хотя в программировании вообще никакой я. Через else пробовал, Qgen ругается, что не хватает где-то end, пока понять не могу, где именно. Буду пробовать.

Aleks Versus Moderator 20.01.2021 08:22 (5 years ago)

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

Практика-практика-практика.
Учиться-учиться-учиться.
Исправлять-улучшать-совершенствовать.

Записал короткое видео. Надеюсь будет понятно.

Spoiler

YouTube: KL-1u2nQkCA

Просто огромнейшее спасибо. Так все подробно, спасибо. Надо форсировать просмотр ваших видеоуроков, там смотрю много нового появилось. Еще раз, спасибо.

Aleks Versus все работает. Насколько я понял из записанного примера, лучше так раскладывать код (не знаю как точно более выразиться) , как-бы на составляющие? У меня вопрос возник. Я тестирую локации, самым простым способом через gt “имя локации”. Когда первый раз проверяю код, все нормально, как и должно быть, когда во второй раз, то все действия исчезают, остается только действие выйти на остановке. Помогает только при повторном запуске плеера. Так и должно быть, или где-то есть ошибка, не заглючит потом в игре в будущем. Еще вопрос, как можно проверить ход времени суток на одной локации? Вручную через переменную time задавать время или есть способ попроще?

Aleks Versus Moderator 30.01.2021 08:49 (5 years ago)

Нубай,
да, проще всего “раскладывать” код на составляющие, на блоки. Собственно, ты уже это делаешь. Локации — это просто большие блоки кода, и в них ты “раскладываешь” весь код своей игры. А уже чтобы организовать на локации какое-то поведение, используешь блоки поменьше. И т.д.

Второй вопрос. Если ты перешёл на локацию, провёл персонажа по сценарию, то всем переменным выставились значения. Поэтому при повторном входе на локацию, код выполняется уже с учётом значений, которые выставились этим переменным. Собственно благодаря этому принципу и работает схема “действие по условию”, когда при нажатии действия мы заставляем плеер повторно зайти на локацию и выполнить весь код (команда goto $curloc).
Если тебе нужно зайти потестить локацию, потом выйти из неё, но ты хочешь, чтобы дальше она работала, как будто ты на неё впервые зашёл, нужно переменным проезд_оплачен,место_занято и другим присвоить первоначальные значения либо в самом начале игры, если ты возвращаешься туда, либо в действии, которое тебя с локации выводит.

В третьем вопросе не совсем понял. Ты хочешь потестировать, как будет выглядеть локация в разное время суток? Можно написать действие, которое будет менять время суток и возвращать тебя на текущую локацию. Тогда, если вывод описания у тебя уже прописан через условия, типа:

if hour=0 or (hour>0 and hour<6):
   *pl "Ночь"
   ! и т.д.

то ты и увидишь изменение описания при изменении времени суток:

act "Прибавить час":
   time+=60
   gosub 'calendar'
   goto $curloc
end

Log in or Register to post comments.