Как сделать?
…
Нубай,
Доброго времени вам. Позвольте узнать - это весь код на локации?
Так же смущают данные строки кода:
if место_занято=1 and проезд_оплачен=0:
*nl
*nl “К тебе подошел кондуктор.”
*nl
*nl “-Здесь что за проезд?!”
act “Оплатить проезд”:
проезд_оплачен=1
оплачен_на_месте=1
goto $curloc
end
endif место_занято=1 and проезд_оплачен=0:
Весь код, не скрытый в блоки (Act) выполняется сразу один за другим.
При одном условии - будут исполнятся оба. А условие одно. Непорядок.
Я бы посоветовал (хоть другие осудят) использовать перенос строки вместо *nl’’ (пустого, прошу заметить).
Облегчит работу с текстом при том же результате. А для удобства можете выставить “Перенос строки по словам” в QGen (вкладка “Редактор кода”).
Вообще, на мое личное мнение, у вас главная проблема - с условиями.
Нубай,
Нубай:
*nl “Тебе не очень хочется оплачивать проезд, поэтому ты делаешь вид, что не замечаешь кондуктора.” (!!! Проблема в том, что вылезает эта строка, сразу после фразы -Здесь что за проезд?!”. Задумывалось, что она будет появляться только после действия “Не оплачивать проезд”!!!)
Сам же и отвечаешь себе. Если после действия - то и запихивай в акт. Учти однако, что если в акте стоит gt curloc, текст ты не увидишь, т.к. он обновит локацию.
Ты вводишь очень много лишних переменных, повторю еще раз - напиши алгоритм на листочке (если, то, все со стрелочками и т.д.) и тебе не нужно будет городить огороды и путаться с актами и курлоками.
Если не осилишь, сбрасывай полный код локации, распишу с комментариями.
Вот полный код локации, с ошибками конечно же. Я вроде стараюсь минимум переменных вводить. Опять же заметил, что у всех свой стиль, если так можно сказать программирования. Мне просто так, как я делаю сейчас понятно, для меня по крайней мере. Если будет слишком мастерский пример кода от вас, то скорее его, я его просто не пойму, в виду малого объема знаний, пытаюсь, но…Извиняюсь за задержкой, реал неожиданно накрыл рутиной.
Spoiler
if сел_в_автобус=1:
проезд_оплачен=0
место_занято=0
end
*nl
*nl “Ты зашел в автобус.”
if hour>=6 and hour<7:
*nl “Сейчас раннее утро, и в автобусе почти нет пассажиров.”
end
if hour>=7 and hour<8:
час_пик=1
*nl
*nl ‘Сейчас “час пик”, и в автобусе очень много пассажиров.’
end
if hour>=8 and hour<10:
*nl
*nl “Сейчас утро, и в автобусе немного пассажиров.”
end
if hour>=10 and hour<13:
*nl
*nl “Сейчас первая половина дня, и в автобусе среднее количество пассажиров.”
end
if hour>=13 and hour<14:
*nl
*nl “Сейчас обеденное время, и в автобусе довольно много пассажиров.”
обед=1
end
if hour>=14 and hour<17:
*nl
*nl “Сейчас вторая половина дня, и в автобусе среднее количество пассажиров.”
end
if hour>=17 and hour<19:
час_пик=1
*nl
*nl ‘Сейчас “час пик”, и в автобусе очень много пассажиров.’
end
if hour>=19 and hour<21:
*nl
*nl “Сейчас вечер, и в автобусе немного пассажиров.”
end
if hour>=21 and hour<23:
*nl
*nl “Сейчас поздний вечер, и в автобусе почти нет пассажиров.”
end
if проезд_оплачен=0 and место_занято=0:
act “Подойти к кондуктору”:
проезд_оплачен=1
оплачен_на_входе=1
место_занято=0
goto $curloc
end
end
if час_пик=1:
delact “Подойти к кондуктору”
end
if проезд_оплачен=1 and оплачен_на_входе=1:
*clr
*nl
*nl “Ты подошел к кондуктору и оплатил проезд.”
end
if место_занято=0:
act “Занять место в начале автобуса”:
место_занято=1
занял_в_начале=1
goto $curloc
end
if обед=1 or час_пик=1:
delact “Занять место в начале автобуса”
end
act “Встать в середине автобуса”:
место_занято=1
занял_в_центре=1
goto $curloc
end
if час_пик=1:
delact “Встать в середине автобуса”
end
act “Занять место в конце автобуса”:
место_занято=1
занял_в_конце=1
goto $curloc
end
if обед=1 or час_пик=1:
delact “Занять место в конце автобуса”
end
act “Занять любое сидячее место”:
место_занято=1
занял_сидячее=1
goto $curloc
end
if обед=1 or час_пик=1:
delact “Занять любое сидячее место”
end
act “Занять любое стоячее место”:
место_занято=1
занял_стоячее=1
goto $curloc
end
end
if место_занято=1:
if занял_в_начале=1:
*clr
*nl
*nl “Ты прошел в начало салона автобуса и сел в свободное кресло.”
end
if занял_в_центре=1:
*clr
*nl
*nl “Ты занял место стоя у окна в середине салона автобуса, облокотившись на поручень.”
end
if занял_в_конце=1:
*clr
*nl
*nl “Ты прошел в самый конец салона автобуса и занял свободное кресло у окна.”
end
if занял_сидячее=1:
*clr
*nl
*nl “Оглядев салон автобуса, ты увидел свободное кресло и поспешил его занять.”
end
if занял_стоячее=1:
*clr
*nl
*nl “Ты оглядел салон автобуса, но все сидячие места были заняты пассажирами. Ты выбрал более-менее свободное место, и встал держась рукой за поручень.”
end
end
if место_занято=1 and проезд_оплачен=0:
*nl
*nl “К тебе подошел кондуктор.”
*nl
*nl “-Здесь что за проезд?!”
act “Оплатить проезд”:
проезд_оплачен=1
оплачен_на_месте=1
goto $curloc
end
end
!!! Эту часть я наконец смог сделать, так, как мне надо в плане диалога
if место_занято=1 and проезд_оплачен=0:
act “Не оплачивать проезд”:
отказ_платить=1
*nl
*nl “Тебе не очень хочется оплачивать проезд, поэтому ты делаешь вид, что не замечаешь кондуктора.”
delact “Оплатить проезд”
if отказ_платить=1:
*nl
*nl “Немного подождав, и поняв, что ты оплачивать проезд не собираешься…”
*nl
*nl “-За проезд будем оплачивать!!!? - снова спросил кондуктор, повышая голос.”
delact “Не оплачивать проезд”
конфликт=rand (1)
end
end
end
!!! Эту часть временно исключил из обработки, так как не работает, так, как надо. Подозреваю, что из-за curloc’а, хотя с этим кодом плеер видит и переходит на конфликт, но не совсем корректно текст отображается.
!if место_занято=1 and проезд_оплачен=0 and отказ_платить=1:
!!*nl
!*nl “Немного подождав, и поняв, что ты оплачивать проезд не собираешься…”
!*nl
!*nl “-За проезд будем оплачивать!!!? - снова спросил кондуктор, повышая голос.”
!конфликт=rand (1)
!goto $curloc
!end
!!! А вот эта часть не хочет работать, задумывается, что будет несколько вариантов, после отказа ГГ платить, но плеер не хочет ее видеть. А как заставить видеть пока не понятно.
if конфликт=1:
*nl
*nl “Ты пробуешь схитрить, и просящим тоном говоришь.”
*nl
*nl “-Я деньги потерял, можно я так проеду, тут недалеко?”
ответ_кондуктора=rand (1,2)
end
if ответ_кондуктора=1:
*nl
*nl “-Что, на проезд заработать не можешь? Потерял он, ага! Ладно, езжай уж. Работать надо, а не побираться!”
место_занято=1
проезд_оплачен=1
delact “Не оплачивать проезд”
delact “Оплатить проезд”
end
if ответ_кондуктора=2:
*nl
*nl “-Я тут не собираюсь штрафы за каждого безбилетника платить! Меня тоже проверяют! Нет денег, пешком тогда ходи! Давай, на выход.”
*nl
*nl “-Останови автобус! - потребовал кондуктор у водителя.”
*nl
*nl “Водитель остановился и открыл двери.”
*nl
*nl “-Выходим! - потребовал кондуктор.”
delact “Не оплачивать проезд”
delact “Оплатить проезд”
act “Выйти из автобуса”:
goto “Улица”
end
end
if проезд_оплачен=1 and оплачен_на_месте=1:
*clr
*nl
*nl “Ты оплачиваешь проезд. Кондуктор пересчитав твои деньги выдает тебе билет и сдачу, и отправляется дальше по салону.”
end
if место_занято=1 and проезд_оплачен=1:
act ‘Выйти на остановке “Коммунистическая площадь”’:
time+=20
gs “Календарь”
goto “Площадь”
сел_в_автобус=0
end
end
Нубай,
Хм, мне кажется, у тебя ошибка в архитектуре кода.
Ты проводишь постоянные обновления и проверки, вместо того, чтобы создавать под-действия в том же IF, продолжая код.
230+ строк кода на проезд - это слишком круто. В плохом смысле. Лишняя детализация в проезде не добавит шарма игре. Особенно, если игроку необходимо будет ездить на автобусе часто. Это ошибка дизайна игры.
И большое число !!!???!? - режет глаз. За $curloc смотри выше.
Spoiler
!!! А вот эта часть не хочет работать, задумывается, что будет несколько вариантов, после отказа ГГ платить, но плеер не хочет ее видеть. А как заставить видеть пока не понятно.
! -= HronoS.: если убрать лишние перепроверки - работает отлично. =- !
if конфликт=1:
*nl
*nl “Ты пробуешь схитрить, и просящим тоном говоришь.”
*nl
*nl “-Я деньги потерял, можно я так проеду, тут недалеко?”
ответ_кондуктора=rand (1,2)
if ответ_кондуктора=1:
*nl
*nl “-Что, на проезд заработать не можешь? Потерял он, ага! Ладно, езжай уж. Работать надо, а не побираться!”
место_занято=1
проезд_оплачен=1
delact “Не оплачивать проезд”
delact “Оплатить проезд”
end
if ответ_кондуктора=2:
*nl
*nl “-Я тут не собираюсь штрафы за каждого безбилетника платить! Меня тоже проверяют! Нет денег, пешком тогда ходи! Давай, на выход.”
*nl
*nl “-Останови автобус! - потребовал кондуктор у водителя.”
*nl
*nl “Водитель остановился и открыл двери.”
*nl
*nl “-Выходим! - потребовал кондуктор.”
delact “Не оплачивать проезд”
delact “Оплатить проезд”
act “Выйти из автобуса”:
goto “Улица”
end
end
end
Добавлено: У тебя немного не согласован конфликт. Я не могу найти (может, из-за размера кода) что будет делать игра, есликонфликта не будет.
Нубай,
Я заболел, т.ч. сорян, посмотрю позже.
HronoStranger:
Ты проводишь постоянные обновления и проверки, вместо того, чтобы создавать под-действия в том же IF, продолжая код.
Спасибо за помощь. Каждый ответ любого опытного пользователя, немного добавляет опыта. В под-действиях я не силен, но сейчас дали пример, должно лучше идти, да вообще в кодировании не силен, знаний мало, практики еще меньше. Возможно, я не понял вопроса, но, если конфликта не будет, то игрок просто проедет и все.
Доброго времени. У меня вот такой вопрос: сложно ли на qsp реализовать, хоть какой-то, рогалик и занимался ли кто таким?
n3m0, все зависит от твоих навыков. Есть вполне себе пример “Сирафим”. Его можно глянуть в сборнике.
Если есть желание и опыт, вполне реализуемо. Если будет нужна помощь, обращайся. Поможем, подскажем.
Svartberg, ну по счет опыта я не уверен, но думаю кусок кода сверстать сумею. Спасибо за предложенную руку помощи; для неё, наверное, пока рановато. А пока лучше пойду погляжу на “Сирафимa”
dmvikar:
Нубай,
Я заболел, т.ч. сорян, посмотрю позже.
Спасибо конечно. Но видимо это не мое, не надо уже. Сдаюсь и бросаю это дело. Как говорят, не жили богато, нечего и начинать.
Нубай:
видимо это не мое
Нет понятия “не моё”. Есть понятие “мало практики”. Сделай перерыв, отдохни, освободи мозг, а потом вернись с новыми силами. В крайнем случае можно начать всё заново.
Да я уже столько с этой локацией маюсь, практики мало, согласен. Но сдвига нет и по ходу не будет. Получается сейчас так, нос поднял, корма тонет, корму поднял, нос ушел. В трех соснах заблудился.
Нубай:
Но сдвига нет и по ходу не будет.
Дорогу осилит идущий. Нет результата? Снеси и пиши по новому.
Опять не получается? Снеси и вновь перепиши. С нуля, убрав лишнее.
Если просто сидеть и смотреть на нерабочий код - он от этого лучше не станет.
Ставь цель и добивайся.
С уважением,
HronoS.
Нубай,
У тебя дискорд есть?
Нубай,
avtobus.qsp