Как сделать?
…
waganwils,
Есть возможности MAP/AREA.
Есть возможность порезать карту на прямоугольники и вывести через таблицу, а уже в таблице делать кликабельным что хочешь.
Код сейчас не дам, может сам быстрее сообразишь, пока дождешься примера.
waganwils,
обрати внимание на эту тему: https://qsp.org/forum/651-html-tegi-map-i-area
Ребят подскажите по календарю пожалуйста. Я сам не понимаю как его делать. Выбрал тему про Юлианский календарь, высчитал нужную мне дату, проблема только в том, что он часы и минуты по 0 показывает, как сделать нужное мне время. Второй вариант выбрал из этой темы https://qsp.org/forum/23-kak-sdelat пост от cleep, дату стартовая нормально делается, и даже на первой локации время нормально считает, но потом начинаются ошибки, то время не считает, то говорит, что такой локации нет, что-то не так делаю. Объяснить более точно затрудняюсь, так как не понимаю алгоритма календаря. Более подробно разъяснено в теме про Юлианский календарь, только бы еще знать как часы и минуты установить.
Нубай,
Тут https://qsp.org/forum/790-kalendar-po-metodu-sceta-ulianskih-dnej читал?
Да, с этой темы пробовал, все как по шагам описано, но часы почему-то 0 часов, 0 минут ставит, хотя дату верно, какую мне надо. Может просто часы в стартовой локации прописать, или так не корректно?
Нубай,
Значит что-то упустил, проверяй внимательнее.
На стартовой локации инициализируешь названия дней и месяцев, JDNstart.
Чтоб календарь присвоил значения переменным (посчитал время) нужно в него сходить через
gs 'calendar'
А чтоб часы отобразились нужно еще
*nl $weekday[weekday] + ',' + day + $month[month] + ' ' + year + 'года' + '. ' + $hour + ':' + $minut
Последнюю строчку можно в $ONNEWLOC добавить.
Разобрался наконец с Юлианским календарем, самое то важное в закрепленной теме и не было сказано. У меня вопрос и просьба одновременно. Где можно посмотреть простенький пример кода. Хочу сделать так, чтобы от времени суток и дня недели, зависело присутствие определенных NPC на локации, но не представляю как это сделать, есть мысль через IF но не понимаю как время указывать. И еще, где можно про RAND подробно прочитать? Так как хочется еще добавить случайных событий.
Нубай,
ну предположим текущее время у тебя прописано в переменных 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, пока понять не могу, где именно. Буду пробовать.
Нубай,
нет такого знания доступного одному человеку, которое другой, при должном упорстве, не смог бы усвоить.
Практика-практика-практика.
Учиться-учиться-учиться.
Исправлять-улучшать-совершенствовать.
Записал короткое видео. Надеюсь будет понятно.
Spoiler
Просто огромнейшее спасибо. Так все подробно, спасибо. Надо форсировать просмотр ваших видеоуроков, там смотрю много нового появилось. Еще раз, спасибо.
Aleks Versus все работает. Насколько я понял из записанного примера, лучше так раскладывать код (не знаю как точно более выразиться) , как-бы на составляющие? У меня вопрос возник. Я тестирую локации, самым простым способом через gt “имя локации”. Когда первый раз проверяю код, все нормально, как и должно быть, когда во второй раз, то все действия исчезают, остается только действие выйти на остановке. Помогает только при повторном запуске плеера. Так и должно быть, или где-то есть ошибка, не заглючит потом в игре в будущем. Еще вопрос, как можно проверить ход времени суток на одной локации? Вручную через переменную time задавать время или есть способ попроще?
Нубай,
да, проще всего “раскладывать” код на составляющие, на блоки. Собственно, ты уже это делаешь. Локации — это просто большие блоки кода, и в них ты “раскладываешь” весь код своей игры. А уже чтобы организовать на локации какое-то поведение, используешь блоки поменьше. И т.д.
Второй вопрос. Если ты перешёл на локацию, провёл персонажа по сценарию, то всем переменным выставились значения. Поэтому при повторном входе на локацию, код выполняется уже с учётом значений, которые выставились этим переменным. Собственно благодаря этому принципу и работает схема “действие по условию”, когда при нажатии действия мы заставляем плеер повторно зайти на локацию и выполнить весь код (команда goto $curloc).
Если тебе нужно зайти потестить локацию, потом выйти из неё, но ты хочешь, чтобы дальше она работала, как будто ты на неё впервые зашёл, нужно переменным проезд_оплачен,место_занято и другим присвоить первоначальные значения либо в самом начале игры, если ты возвращаешься туда, либо в действии, которое тебя с локации выводит.
В третьем вопросе не совсем понял. Ты хочешь потестировать, как будет выглядеть локация в разное время суток? Можно написать действие, которое будет менять время суток и возвращать тебя на текущую локацию. Тогда, если вывод описания у тебя уже прописан через условия, типа:
if hour=0 or (hour>0 and hour<6):
*pl "Ночь"
! и т.д.
то ты и увидишь изменение описания при изменении времени суток:
act "Прибавить час":
time+=60
gosub 'calendar'
goto $curloc
end