RU 📌 Pinned

Как сделать?

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

Aleks Versus,
Спасибо, попробовал, действительно, так аккуратнее получается.
Вот в этом кусочке кода у вас операции присваивания - это же, в сущности, просто часть комментария, и не более того?

$args[0] = $args[0] & ! название массива первого порядка
args[1] = args[1] & ! номер элемента массива первого порядка
args[2] = args[2] & ! номер элемента массива второго порядка
Aleks Versus Moderator 29.03.2017 14:53 (8 years ago)

Hinkmar,
ну считай, что это инициализация.

Spoiler

Если глянешь на пример, который я писал для mkir там то же самое сделано для массива болезнь. Дело в том, что когда ты инициализируешь ячейку массива с текстовым индексом, на деле выделяется ячейка с числовым индексом, с которым соотносится текстовый индекс. К примеру, если напишешь вот такой код:

$array['text_index']='anyText'
$array[0]

на экране появится anyText. Т.е. $array[’text_index’] это то же самое, что и $array[0].
В get.Cell скорее всего это не будет иметь значения, но лучше всегда проводить инициализацию последнего аргумента перед непосредственно кодом:

args[8]=args[8]

вычеркнул

У меня есть 2 вопроса по звукам в QSP:
1) Например у меня есть локация Порог дома, с таким кодом:

act ‘Постучать в дверь’:
delact $selact
‘Тебе никто не открыл!’
end

Можно ли както вставить в код звук, чтобы в игре при выборе действия ‘Постучать в дверь’ воспроизводился звук?

2) Какой нужен код чтобы при переходе на локацию, звук в ней воспроизводился не сразу а например через 5 сек.?

Буду очень благодарен за помощь!

Aleks Versus Moderator 29.03.2017 15:53 (8 years ago)

Larson,
команды для работы со звуком — здесь.
В сам код звук не вставляется. Сохраняешь звук отдельным файлом, рядом с игрой или во вложенной папке, потом для действия:

act 'Постучать в дверь':
   'Тебе никто не открыл!' 
   play 'путь к файлу/knockknock.mp3'
   delact $selact
end

По второму вопросу:
На самой первой локации в игре пишешь:

$counter='counter'

создаёшь локацию с именем counter, на ней такой код:

! если текущая локация та, на которой нам надо воспроизвести звук
if $curloc='старое_кладбище':
	! фиксируем время в милисекундах
	if timer=0: timer=msecscount
	! сравниваем текущее время и зафиксированное
	if msecscount>timer+5000 and звук_проигран=0:
	! если текущее время больше чем фиксированное + 5 сек
	! и звук не воспроизводился 
		! воспроизводим звук
		play 'sound/deadwalkvoice.wav'
		звук_проигран=1
	end
end

Aleks Versus,
Ага, теперь понял. Просто в get.Cell порядок выражений таков, что это действительно не имеет принципиального значения, в отличие от примера для mkir. Но вообще, спасибо за объяснение, я раньше в этом вопросе специально не разбирался, и просто не использовал строковые и числовые индексы в одном массиве.

Вот только есть один нюанс. Если для обычных массивов всё работает именно так, как написано, то с $args точно есть какие-то подводные камни. В частности, lose.data у меня таки работает нормально и выводит first text даже без инициализации.

Aleks Versus Moderator 29.03.2017 18:08 (8 years ago)

Hinkmar,
Да, что-то я наврал… Удалю от греха подальше.
Но вот эту тему всё же прочти: интересное поведение RESULT

Подскажите пожалуйста, как сделать чтобы одна и та же локация по разному реагировала на присутствие определенного предмета в инвентаре. Например есть локация Комната “В комнате за столом сидит пьяный монах, он не хочет с тобой разговаривать”, затем я беру в какой-то локации предмет “Бутылка вина” и когда снова прихожу в Комнату то там уже такой текст “Увидев у тебя в руках бутылку, монах словно ожил” и ниже появляется действие которого до этого небыло “Поговорить с монахом”.

Приветствую всех и каждого,

Есть одна проблема с тегами HTML. Я хочу с помощью ссылки “<a href>” сделать переход на другую локацию. Я пытался переделывать куски кода из других игр, но у меня ничего не вышло.
Суть проблемы:
Когда я ввёл код “EXEC:gt level_select” выходит ошибка “Неверное число” чего-то там “аргументатора”. Когда я решил заключить слово level_select в апострофы, выскочила ошибка “Неизвестное действие”.

Что делать?

ДоБрЫй_МеДвЕдЬ,
приведи строку кода целиком. Скорее всего, ты ошибся в экранировании кавычек.

Aleks Versus Moderator 05.04.2017 13:00 (8 years ago)

Larson,
это действие по условию. Целая тема выделена: тыц.

Aleks Versus,
Спасибо, буду вникать.
Еще помогите с кодом, туго до меня доходит это дело:
Как сделать чтобы предмет который я беру на какой-то локации (например Пряник), отображался не в окне Предметы, а окне Дополнительного описания ???

Вот строка кода:

'<a href="exec:gt 'level_select'">Играть</a>'

И ещё… Прошу не посчитать настырным, но хочу узнать: можно ли выполнить по ссылке сразу два действия? К примеру:

'<a href="exec:play ''<<current_track>>.mp3'', volume"><a href="exec:set volume = volume - 10">Понизить громкость музыки</a></a>'

В программировании я, конечно, ни в зуб ногой.

Aleks Versus Moderator 07.04.2017 08:18 (8 years ago)

ДоБрЫй_МеДвЕдЬ,
необходимо экранировать апострофы, или кавычки, когда включаешь их в текст.
Если нужно например вывести надпись:
I don’t know!
Ты заключаешь надпись в кавычки:

*pl "I don't know!"

Если нужно вывести такую строку:
Кабачок “У Мо” стоит на пересечении улицы Вязов и Тисовой улицы.
ты заключаешь строфу в апострофы:

*pl 'Кабачок "У Мо" стоит на пересечении улицы Вязов и Тисовой улицы.'

Но можно сделать так:

*pl 'I don''t know!'
*pl "Кабачок ""У Мо"" стоит на пересечении улицы Вязов и Тисовой улицы."

Так экранируются символы в QSP.
Когда ты пишешь ссылку, получается следующее:
1. Ты используешь апострофы для того, чтобы вывести ссылку:

*pl '<a >Играть</a>'

2. Затем ты используешь кавычки, чтобы указать ссылке, на что ссылаться

*pl '<a href="exec: ">Играть</a>'

3. Затем ты вставляешь кусочек кода, на который “ссылается” ссылка. Но тут появляется загвоздка. Ты уже использовал апострофы, чтобы указать начало и конец текста. И ты уже использовал кавычки, чтобы указать ссылке “адрес”. Здесь-то и нужно экранировать. И есть два способа.
Экранируем апострофы кода от QSP

*pl '<a href="exec:gt ''level_select''">Играть</a>'

Экранируем кавычки кода от HTML

*pl '<a href="exec:gt /"level_select/" ">Играть</a>'

Чтобы сделать два действия в ссылке, используй амперсанд:

'<a href="exec:volume = volume - 10 & play ''<<$current_track>>.mp3'', volume">Понизить громкость музыки</a>'

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

Larson,
ну это же просто:

if пряник=0:
   act 'Поднять пряник':
      пряник=1
      pl 'Пряник'
      goto $curloc
   end
end

Если нужен кликабельный пряник, используй гиперссылки, как ДоБрЫй_МеДвЕдЬ.

Проблема вот в чём,

'<a href="exec:volume = volume - 10 & play ''<<$current_track>>.mp3'', volume">Понизить громкость музыки</a>'

У меня такой код просто не работал. Сначала при нажатии на ссылку программа просто никак не реагировала, после чего музыка просто прекращала звучать. Когда я скопировал код из вашего сообщения, всё заработало. Магия…

Благодарю Вас за помощь, Aleks. Большое спасибо.

З. Ы. Хотя, скорее всего, у меня не работало по причине того, что вместо

...href="exec:volume = volume - 10...

я использовал

..."exec:set volume = volume - 10...

Стоп. Ведь “set volume = volume - 10” обозначает то же, что и “volume = volume - 10”? Или я что-то путаю… Как всегда. Однако факт остаётся фактом.

Aleks Versus Moderator 07.04.2017 20:13 (8 years ago)

ДоБрЫй_МеДвЕдЬ,
это одно и то же. Возможно где-то была переменная неправильно написана, хотя я тоже копировал строки из твоего сообщения.

Log in or Register to post comments.