Форум » » Как это сделать? » Ответить

Как это сделать?

denis: Только начал программить на QSP. Вопрос: как сделать так, чтобы после выполнения одного действия, в этой же локации становились видны другие, до этого не видимые? Хелп читал - не нашёл ответа. И ещё - можно ли с помощью оператора DYNAMIC создавать новые действия и предметы?

Ответов - 201, стр: 1 2 3 4 5 6 7 8 9 10 11 All

Ajenta: Подскажите плизз, как можно узнать название не текущей, а предыдущей локации. Можно как-то это сделать средствами языка, а не добавлением переменных?

HIman: ну так понадобится всего 1 переменная. На предыдущей локации пишешь $loc=$CURLOC А на текущей можешь проверить IF $loc <> 'подвал': и т.д.

Byte: Можно сделать такое для всей игры сразу, автоматически - на $ONNEWLOC добавляем код [pre2]$prevloc=$curloc[/pre2] Теперь при обработке кода новой локации (при переходах) в $prevloc будет имя предыдущей локации.


Ajenta: О, спасибо :)

Ajenta: Byte пишет: Можно сделать такое для всей игры сразу, автоматически - на $ONNEWLOC добавляем код $prevloc=$curloc Теперь при обработке кода новой локации (при переходах) в $prevloc будет имя предыдущей локации. А можно пожалуйста пример, а то я видимо что-то делаю неправильно, потому что у меня это всё не работает.

Byte: [pre2] #2 $onnewloc='new' act 'next':gt '3' - #3 'Вы перешли с локации <<$prevloc>>' - #new $prevloc=$curloc -[/pre2] Если переменную $prevloc нужно использовать в коде действий, то нужно во временной переменной в коде локации сохранить имя предыдущей: [pre2] #2 $onnewloc='new' act 'next':gt '3' - #3 $ploc=$prevloc 'Вы перешли с локации <<$prevloc>>' act 'show':'Вы перешли с локации <<$ploc>>' - #new $prevloc=$curloc -[/pre2] UPD: Есть ещё такой вариант: [pre2] #2 $onnewloc='new' act 'next':gt '3' - #3 'Вы перешли с локации <<$prevloc>>' act 'show':'Вы перешли с локации <<$aprevloc>>' - #new $aprevloc=$prevloc $prevloc=$curloc -[/pre2] То есть, для кода локации используется $prevloc, а для кода действий $aprevloc.

Ajenta: ммммм... Я запуталась. Давайте так. Я создаю локацию с именем "onnewloc" пишу на ней $prevloc=$curloc насколько я поняла - это должнло выполняться всегда, когда я перехожу на новую локацию? но если я на локации с названием "Карта" делаю act 'next': gt $prevloc он говорит, что такой локации не существует, при условии, что в локацию Карта - я захожу с какой-то локации. Что здесь не так? Где ошибка?

Nex: Ajenta в самой первой локации напиши [pre2]$ONNEWLOC = 'onnewloc'[/pre2] Байт, будь лаконичнее. К тому же девушка наверняка пользуется QGen4, а не TXT2GAM.

Ajenta: Угу, пасиб, попробую.

Ajenta: Тааак. Сделала как сказали. Я сделала вывод переменной $prevloc на экран Происходит следующее Перехожу я на карту - $prevloc пишет название предыдущей локации. Делается act 'next': gt $prevloc после чего $prevloc - пишет Карта и никуда не переходит я что-то опять не так делаю. :( что ему ещё нехватает?

Ajenta: А пользуюсь действительно QGen'ном и именно четвёртым.

Nex: В локации "onnewloc" должно быть это: [pre2]$aprevloc=$prevloc $prevloc=$curloc[/pre2] Когда используешь "имя предыдущей локации", то для действий используй переменную $aprevloc, а для остального - $prevloc. т.е. действие должно быть таким: [pre2]act 'next': gt $aprevloc[/pre2] Извини, что сразу не разобрался.

Ajenta: Урра!!! Заработало! Чмок и большущее спасибо Сама бы фиг догадалась.

denis-1: Люди, я очень давно здесь не был - появился вопрос. Есть вот такой код $USERCOM=$CURLOC $USRTXT = '' if (первое_посещение=1): 'Встаю. В комнате полумрак - не понятно, ещё ночь или уже утро?' act 'посмотреть на будильник': !смотрит прямо end первое_посещение=0 end if ($USRTXT = '1'): ! посмотрел направо cla act 'посмотреть на будильник': end end if ($USRTXT = '2'): cla act 'включить свет': !посмотрел прямо 'включил свет' end end if ($USRTXT = '3'): act 'открыть шторы': !посмотрел назад end end При вводе в поле ввода числа 2 должно появляться действие 'включить свет'. На деле оно ещё и выполняется - почему? Кстати, denis - это я, админ, напомни мне мой пароль, пожалуйста. игру, которую я делал, я успешно по**рил во второй раз - теперь уже путем форматирования жёсткого.

denis-1: Всё, разобрался, это баг - Byte, поправь, сейчас если ставишь после act: комментарий, то действие сразу выполняется.

Nex: denis-1 это не баг. Это запланированные Байтом грабли. Восклицательный знак в языке QSP - не просто комментарий, а оператор комментария, который: нельзя использовать в конструкциях [pre2] IF a=b : !наше условие *PL 'a равно b' END [/pre2] , т.к. он посчитает комментарий за оператор, а раз после двоеточия стоит оператор, то IF будет считаться однострочным; то же касается и ACT; нельзя использовать так: [pre2] *PL 'строка1' ! Byte's soft *PL 'строка2' [/pre2] , т.к. кавычки и апострофы внутри комментария необходимо экранировать точно так же, как и в строковых константах - из-за апострофа движок посчитает, что комментарий продолжается на следующей строке.

denis-1: Ага, спасибо. Завтра выложу (тьфу-тьфу-тьфу!) завязку игры для тестирования. :)

denis-1: А можно в этой теме выкладывать поэпизодно игру, если она конкурсная? Т.е. выложу 2-3 эпизода, а в полной версии их 18-20? Просто мне для тестирования нужно.

Byte: Допускается только закрытое тестирование (можно высылать небольшому кругу лиц - с оговорками). Игра или её части не должны быть опубликованы ранее срока сдачи игр. denis, и ещё - если собираешься участвовать в конкурсе, нужно подать заявку (автор+предварительное название).

denis-1: Отлично! Завтра вышлю тебе и Nex-у! :)



полная версия страницы