RU 📌 Pinned

Как сделать?

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

вот код который я написал для времени:
локация дом
gs ‘часы’
локация лес
tm = tm + 30
gs ‘часы’
и сами часы
локация часы
год = 1999
месяц = 06
число = 01
th = 08
tm = 00
if месяц = 01 or 03 or 05 or 07 or 08 or 10 or 12:
колво = 31
if месяц = 02:
колво = 28
else колво = 30
end
if tm >= 60:
:loop
th = th + 1
if tm > 60:
tm = 0
jump ‘loop’
end
end
if th >= 24:
:loopday
число = число + 1
if th > 24:
th = 0
jump ‘loopday’
end
end
if число > колво:
:loopm
месяц = месяц + 1
if число > колво:
число = 1
jump ‘loopm’
end
end
if месяц > 12:
год = год + 1
месяц = 1
end
if месяц < 10: $tcm = ’0’
else $tcm = ‘’
end
if число < 10: $tch = ’0’
else $tch = ‘’
end
if th < 10: $tc = ’0’
else $tc = ‘’
end
if tm < 10: $tv = ’0’
else tv = ‘’
end
pl ‘<<tch>><<число>>. <<tm>><<месяц>>. <<год>>г.’
pl ‘время: <<tc>><<th>>:<<tv>><<tm>>’
часы показывает, только при переходе на локацию лес она не прибавляет 30 к переменной tm и каждай переход добавляет новый вывод времени, то есть:
01.06.1999г
08:00
01.06.1999г
08:00
01.06.1999г
08:00
вот что получается, подскажите в чём ошибка?

vitorio555,
Loop - это цикл.
Есть ведь справочка - Циклы.
Проще говоря, этот код всегда будет обрабатываться, пока условие не будет выполнено.
В нашем случае, пока tm не станет равен нулю(tm -= 0). Потому что условие этого требует(if tm >= 60).

Насчёт рандома. Он меняется.
Чтобы исчезла кнопка, делаете флажок. Что-то накшталт такого:

шанс = rand(1,10)
if шанс > 0 and шанс <= 5:
  if strange_human_check = 0: act 'Странный человек': gt 'странный человек'
end

Следовательно, когда ГГ поговорил с этим, по истине странным человеком, мы ставим:

strange_human_check = 1

Пожалуйста, такой массивный код лучше вставлять в bb-код “code”.

Жоский у вас код, не могу я его толково воспринять, может такой способ попробуете?(Я в принципе его в Counter закинул, правда Некс за такое жестоко наказывает, но вы рискните, может что лучше придумаете).
Напишите в вашей первой локации:

counter = 'счётчик'

Создайте локацию счётчик и напишите в ней:

if minuts > 59: hour += 1 & minuts = 0
if hour > 24: day += 1 & hour = 0
if day > 31: weak += 1 & day = 1
if weak > 9: year += 1 & weak = 1
GS '#Weak'
$hour = iif (hour < 10, '0<<hour>>', '<<hour>>')
$minuts = iif (minuts < 10, '0<<minuts>>', '<<minuts>>')

Вот так делаете название месяцев:

$weak[1] = 'Январь'
$weak[2] = 'Февраль'
! И так дальше...

Вот так можно выводить это самое время:

*PL '<<day>> день <<weak>> месяца(<<$weak[weak]>>) <<year>> года <<$hour>>:<<$minuts>>'

А с помощью $OnNewLoc можно это самое время двигать.
В своей первой локации(обычно она называется Начало) напишите:

$OnNewLoc = 'обработка переходов'

Создайте локацию “обработка переходов” и в ней напишите:

minuts+=1

В итоге, при любом переходе время будет двигаться.

Надеюсь, английский Вас не огорчает?

спасибо, это гораздо проще, щас буду пробовать, а насчёт того что не во всех месяцах 31 день что делать?и по поводу времени, оно будет двигаться одинаково для всех переходов? то есть если мне в лес, то 30мин, а если в соседний город тоже 30 мин, а как сделать так чтоб по разному время прибавлять? и ещё, в том коде что вы написали, переменные minuts, hour,week,yer не нужно гдет прописать, чтоб время не с 00:00 и месяц с годом не с 0 пошли отсчёт?

vitorio555,
Делаешь проверку на то, какой сейчас месяц. Что-то вроде:

if week = 4:
  if day > 30: weak += 1 & day = 1
end

Смотри, если оставишь всё как есть - то любой переход будет обходиться в минуту времени. Если хочешь больше, то уже пиши в действии необходимое количество времени.

act 'Пройтись в лес(30 мин.)': minuts += 30 & gt 'лес'

спасибо огромное за разъяснение! я там ещё добавил один вопрос, уже тогда здесь напишу, пока ты здесь, вот те переменные что ты написал в коде:minuts,hour,day,weak,year, их надо где-то вписать, чтоб изначально время было не 0.0.0г. 00:00?

vitorio555,
Да.

day = 1
weak = 1
year = 1333

Можно хоть в локации “Начало”.

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

локация Трактир

if монеты = 0:
‘Трактирщик:
-Сначала деньги!’
end
end
if монеты = 1:
‘Трактирщик:
-Могу предложить бутылку вина!’
end
end
if вино = 1:
‘Трактирщик:
-Отличный выбор, это вино стоит таких денег!’
end
end
IF монеты=1 and вино=0:
ACT ‘Заплатить трактирщику за вино’:
DELOBJ ‘Монеты’
вино=1
ADDOBJ ‘Бутылка вина’
GT $CURLOC
END
END

Есть первоначальная локация с первоначальным описанием и несколько вариантов действия на ней. Каждое действие выводит в описание локации новый текст, а старый при этом должен быть удалён. Само действие при выборе тоже должно удаляться из списка доступных. После выбора всех доступных действий должен произойти переход на новую локацию. Как это сделать?
(Просьба объяснять на уровне банального программирования в Qgene и желательно - с объяснением используемых команд. Спасибо)

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

Larson,
потому что переменную-маркер для монет не обнуляешь. В действии должно быть

монеты=0

Или. если не нужен текст ни по монеты=0 ни по монеты=1, пиши

монеты=2

Совёнок v1.1,

Spoiler
! выводим текст в окно основного описания
'Этот пример должен продемонстрировать работу действий по условию. Этот текст всегда будет показываться на локации'
! создаём условие
if текст=0:
! если ппеременная текст=0 (0 -- значение по умолчанию для всех переменных)
	! выводим текст
	'Этот текст будет выведен при первом посещении локации. И больше никогда.'
! закрываем условие
end
! создаём условие, когда будет появляться первое действие
if громкость=0:
! если значение переменной громкость = 0
	! создаём первое действие
	act 'Подрегулировать громкость':
	! далее следует код, который сработает только при выборе действия
		! возвращаем переменной текст значение 1, чтобы выводилась соответствующая надпись
		текст=1
		! возвращаем переменной-флагу громкость значение 1, чтобы действие больше не появлялось
		громкость=1
		! возвращаемся на текущую локацию, чтобы условия вступили в силу
		! при переходе основное описание очистится и код всей локации будет выполнен вновь
		goto $curloc
	! закрываем действие
	end
! закрываем условие
end
! то же самое для других действий
! создаём условие, когда будет появляться второе действие
if цветность=0:
! если значение переменной цветность = 0
	! создаём второе действие
	act 'Подрегулировать цветность':
	! далее следует код, который сработает только при выборе действия
		! возвращаем переменной текст значение 2, чтобы выводилась соответствующая надпись
		текст=2
		! возвращаем переменной-флагу цветность значение 1, чтобы действие больше не появлялось
		цветность=1
		! возвращаемся на текущую локацию, чтобы условия вступили в силу
		goto $curloc
	! закрываем действие
	end
! закрываем условие
end
! создаём условие, когда будет появляться третье действие
if масштаб=0:
! если значение переменной масштаб = 0
	! создаём третье действие
	act 'Подрегулировать масштаб':
	! далее следует код, который сработает только при выборе действия
		! возвращаем переменной текст значение 3, чтобы выводилась соответствующая надпись
		текст=3
		! возвращаем переменной-флагу масштаб значение 1, чтобы действие больше не появлялось
		масштаб=1
		! возвращаемся на текущую локацию, чтобы условия вступили в силу
		goto $curloc
	! закрываем действие
	end
! закрываем условие
end
! теперь пишем текст для каждого случая
if текст=1:
! если текст = 1 значит выводим надпись по громкости
	'Вы сунули отвёртку в ухо — громкость окружающего мира снизилась наполовину.'
! закрываем условие
end
if текст=2:
! если текст = 2 значит выводим надпись по цветности
	'Вы съели красивый гриб, и цвета стали намного ярче.'
! закрываем условие
end
if текст=3:
! если текст = 3 значит выводим надпись по масштабу
	'Вы подбросили наковальню в воздух и поймали её на маковку — картинка значительно сузилась.'
! закрываем условие
end
! добавляем переход на новую локацию, который будет совершаться автоматически при щелчке по последнему действию
! при этом текст, соответствующий последнему действию, мы не увидим
if громкость=1 and цветность=1 and масштаб=1:
! если действия с громкостью, цветностью и масштабом были выбраны, все три переменные равны единице
	! переход на следующую локацию
	goto 'вторая_локация'
! конец условия
end

По хорошему переход в последнем случае нужно поместить в новое действие:

Spoiler
if громкость=1 and цветность=1 and масштаб=1:
! если действия с громкостью, цветностью и масштабом были выбраны, все три переменные равны единице
	! открываем действие
	act 'Перейти на следующую локацию':
		! переход на следующую локацию
		goto 'вторая_локация'
	!конец действия
	end
! конец условия
end

В крайнем случае можно сделать задержку:

Spoiler
if громкость=1 and цветность=1 and масштаб=1:
! если действия с громкостью, цветностью и масштабом были выбраны, все три переменные равны единице
	! делаем паузу на две с половиной секунды
	wait 2500
	! переход на следующую локацию
	goto 'вторая_локация'
! конец условия
end

или переход без очистки окна основного описания:

Spoiler
if громкость=1 and цветность=1 and масштаб=1:
! если действия с громкостью, цветностью и масштабом были выбраны, все три переменные равны единице
	! переход на следующую локацию без очистки окна основного описания
	xgoto 'вторая_локация'
! конец условия
end

Aleks Versus,
Пробовал-пробовал, не доходит и не выходит у меня ничего(( получаются проблемы со взятием предмета. Если не трудно, пожалуйста напиши весь код, буду очень признателен! Мне нужно чтобы трактирщик по разному реагировал на ГГ: 1) когда ГГ заходит в трактир без монет; 2) когда заходит с монетами; 3) когда покупает вино и в дальнейшем возвращается в трактир.

Лишние end’ы. Не надо эндами закрывать двоеточия внутри игрового текста.
Путаница - между просто переменными и obj-ами

Мой вариант того же кода:

if obj 'монеты':
'Трактирщик: 
-Могу предложить бутылку вина!'
	if obj 'Бутылка вина':
	else
		act 'Заплатить трактирщику за вино':
		delobj 'монеты'
		addobj 'Бутылка вина'
		gt $curloc
		end
	end
else
'Трактирщик: 
-Сначала деньги!' 
end

Доброго всем вечера.
Возник вопрос: можно ли проверить соответствие истине выражения, записанного в текстовую переменную? Вот, например, присвоили мы:

$A='B=10'

Можно ли теперь что-нибудь сделать с переменной $A, чтобы как-то узнать истинно это выражение или ложно? Подружить if с dynamic для решения этой задачи у меня не получилось. Вопреки моим надеждам, такая запись не работает:

if dynamic '$A': 'true'

Не совсем понятно… вот я добавлю в своей проект разные звуки, если мне нужно их проиграть, то в определенном месте пишу что-нибудь вроде:

play’m/удар.mp3’,80

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

Как справиться с этой проблемой?

Aleks Versus Moderator 21.04.2017 18:17 (8 years ago)

Hinkmar,
ты неправильно подходишь к dynamic. dynamic не даёт результата, он просто выполняет код. В твоём случае можно сыграть так:

$A='B=10'
dynamic "if <<$A>>: 'true'"
! фактически dynamic выполнит строку кода:
! if B=10: 'true'

mkir,
не думаю, что это глюк плеера. Никогда не слышал, чтобы он через раз воспроизводил звуки. Заявлено 32 одновременных потока. Я догонял до десяти, всегда прекрасно работало.
Попробуй отслеживать, выполняется ли вообще команда воспроизведения и что думает плеер по поводу проигрываемого звука.
Через counter и дополнительное описание можно контролировать, какие звуки воспроизводятся. Как-то так:

!#counter
settimer 20
clr
pl isplay "001.mp3"
pl isplay "01 - Shousou.mp3"
pl isplay "01 Requiem.mp3"
pl isplay "002.mp3"
pl isplay "2.15_ost_tension_-_eli's_blimp_alternative.flac"
pl isplay "2.20_ost_tension_-_Andriesh-GrainsOfmood.flac"
pl isplay "003.mp3"
pl isplay "03 - Eizashite.mp3"
pl isplay "004.mp3"
pl isplay "005.flac"

Ну а чтобы отслеживать запускается ли команда, придётся при команде ставить какую-нить переменную:

$play_track_001='локация:дом скрипнула дверь' & play '001.mp3'

Выводить через тоже доп описание и каунтер:

pl $play_track_001+' - '+str(isplay "001.mp3")

Aleks Versus,
Действительно. И как я сам не сообразил.
Спасибо за помощь.

Log in or Register to post comments.