RU 📌 Pinned

Как сделать?

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

А можно как-то ставить необходимость выбора какого-либо варианта в тело сообщения “msg”? я пробовал примерно так:

msg ‘-Кошелек или жизнь!’
menu ‘oioi’
$oioi[0] = ‘Кошелек!:yes’
$oioi[1] = ‘Жизнь!:no’

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

Вот такой вариант есть:

Spoiler
:loop
$answer = INPUT ('Хотите продолжить (д/н)?')
IF $answer = 'д': MSG 'OK'
IF $answer = 'н': MSG 'Oh, No!'
IF $answer = '': JUMP 'loop'

Но он вынуждает пользователя что-нибудь ввести…
Eсть ISNUM, который может проверить являются ли введённые символы цифрами. А как организовать проверку на то, что пользователь введёт, скажем, “абырвалг”? Или “г” - если проверять по количеству введённых символов?
UPD. Вроде нашёл способ:

Spoiler
:loop
$answer = INPUT ('Хотите продолжить (д/н)?')
IF $answer = 'д':pass = 1 & MSG 'OK'
IF $answer = 'н':pass = 1 & MSG 'Oh, No!'
IF pass!1: JUMP 'loop'

Спасибо, это похоже на то, что нужно. Однако пока еще есть проблема - сообщение хоть и нельзя “скипнуть” нажав ту же кнопку “отмена”, зато можно скипнуть набрав хоть что-нибудь вместо предложенных вариантов. так что третья строчка IF $answer = ‘’: почти лишняя, я вместо нее оставил один только jump и gt $curloc после каждого варианта и все заработало))
UPD. Ваш upd не сразу заметил! Но, как видно, способ работает и без введения лишних переменных типа pass

mkir,
в классике такое сделать, действительно, невозможно. Но в Навигаторе - запросто:

Код QSP:

USEHTML = 1
*nl'<a href="#openModal">Открыть диалог</a>'
$life = {
   код, выполняемый при выборе варианта "Жизнь"
}
$money = {
   код, выполняемый при выборе варианта "Кошелёк"
}
*p'<div class="modalDialog" id="openModal">'
	*p'<div>'
		*p'<p>Жизнь или кошелёк?</p>'
		*p'<button style="float: left;"><a href="EXEC: dynamic $life">Жизнь</a></button>'
        *p'<button style="float: right;"><a href="EXEC: dynamic $money">Кошелёк</a></button>'
	*p'</div>'
*p'</div>'

Код CSS:

Spoiler
.modalDialog {
	position: fixed;
	top: 0;	right: 0;	bottom: 0; left: 0;
	background: hsla(0,0%,0%,0.8);
	z-index: 50;
	opacity: 0;
	-webkit-transition: opacity 400ms ease-in;
	pointer-events: none;
}

.modalDialog:target {
	opacity: 1;
	pointer-events: auto;
}

.modalDialog > div {
	width: 400px;
	position: relative;
	margin: 10% auto;
	padding: 5px 20px 13px 20px;
	border-radius: 10px;
	background: #fff;
	background: -webkit-linear-gradient(#fff, #b8ecfb);
}

Всем доброго дня.
У меня вопрос. К примеру у меня есть 2 действия, с переходом на соответствующие локации,’Начать игру’ и ‘Помощь’. Сам вопрос. Как сделать так, чтобы эти действия были отдельно друг от друга, а не в одном подменю, а также, как корректировать их расположение на экране или к примеру, чтобы это самое действие игрока было изображением и при нажатии, происходил переход?

mkir, Переменная pass - это страховка от “абырвалгов”. Ни отменить, ни обмануть - только классика, только хардкор.
BraJelon,
Вместо текстовой кнопки можно сделать картинку:

act '','pic_1.jpg':gt 'start'

Или гиперссылку сделать картинкой:

'<a href = "exec: gt ''1_part''"><img src = "content/(24).jpg"></a>'

Или просто ссылку, но вывести в окно доп. описания:

PL '<a href ="exec: gt ''help''">HELP</a>'

UPD.
Ещё можно добавить объект “Опции” в инвентарь, тогда у него можно будет сделать своё собственное меню.
Или сделать таблицу, в ячейках которой поставить картинки-ссылки.

Решила перенести игру в Аэро, но, когда открываю в плеере, есть картинка и музыка, а текста - нет. Использую usehtml, не знаю, в чем дело. Вот кусок кода:

'<center><img src = content/lng.png>

<b><a href="EXEC:gt {вступление}">Вступление</a></b></center>

<a href="EXEC:gt {author}">Автор</a>

<a href="EXEC:gt {совет}">Справочник</a>

<a href="EXEC:gs {music}">Включить/Выключить музыку</a></center>'

может, Аэро что-то не так воспринимает?

UPD.: Вроде это исправила, переписала так:

'<div style="text-align:center;"><a href="exec:GT ''Вступление''">Вступление</a>

<a href="exec:GT ''author''">Автор</a>

<a href="exec:GT ''совет''">Справочник</a>

<a href="exec:GS ''music''">Включить/Выключить музыку</a></div>'

а картинку вставила чрез view. При этом на всех остальных локациях текст отображается абсолютно нормально, центрируется и прочее, как я делала до того, через <center></center>.
Проблема теперь в другом - я использовала гибкий плейлист для создания саундтрека, но, видимо, в Аэро что-то пошло не так. Музыку-то он воспроизводит, но воспроизводит только первую композицию из четырех, зациклив ее. Вот тут-то я и спеклась, помогите, пожалуйста!

Lisichka,
Какой страшный код O_O заходя частенько на форум, все больше осознаю, что никогда не познаю ни кусп, ни тем бол ее акусп… Это же слишком сложно:(

Вопрос из раздела не “Как сделать?”, а “Объясните пожалуйста” :) Как работает оператор REFINT?
У меня есть код

ACT "a+1": a=a+1
ACT "Обновление": REFINT
'<<a>>'

Получается так: первым действием мы увеличиваем число a на столько-то единиц. Естественно, у нас не будет изменятся вывод числа ‘<<a>>’. А действием “Обновление” обновляет интерфейс. По моим соображения если мы вызываем оператор REFINT в этом коде, то у нас должно отобразиться верное на данный момент число a. Но такого не происходит.

Storm,
Не происходит, потому что описание локации выводится (формируется) только при посещении локации. На момент вызова REFINT оно уже сформировано, и не поменялось. Изменится только тогда, когда будет выполнен код “при посещении”.

Вместо “REFINT”, тебе нужно сделать переход на текущую локацию:

GOTO $CURLOC

См. четвёртый урок в учебнике.

Как использовать js в QSP Navigator? Его нужно подключать какой-то командой? Расскажите по-возможности детальней нубу :)

Добрый вечер!

Не мог бы кто нибудь помочь в реализации нормального игрового времени?
Почасовое снижение бодрости, сытости и жажды.
Время постоянно идёт на увеличение. Можно сделать как то так, чтобы при достижении минуты, часа или дня время сбрасывалось?
Я в этом вообще не разбираюсь, выдрал из какой то игры, но даже не понимаю как работает. В итоге чтобы начало игры было 26 мая в 12:00 я прописал в стартовой локации:
время = 209520
Получается если я хочу, чтобы какое то действие в игре было доступно только в пятницу я прописываю:

if number = 5:
act ‘Убежать’:gt ‘локация’
end

number - это так в этом счётчике дни обзываются..
Но!
В игре это действие возможно только в первую пятницу, следующую она уже воспринимает как number = 12, получается что, на каждую пятницу надо прописать код, на несколько игровых лет вперёд :D
Итак если в игре прошло 5 дней и 12 часов например, то время = 216720…
Вот код счётчика:

Spoiler

!Время

день = время / (24*60)
hour = (время - день*24*60) / 60
minutes = время - hour*60 - день*24*60

years = день/360
year1 = years + 1
monthes = (день - yearS*360)/30
month = monthes + 1
numbers = день - years*360 - monthes*30
number = numbers + 1

weekday = день/7
неделя = день - weekday*7 + 1

year = year1 + 173
!конец

!конец

!Дни недели
if неделя = 1: $неделя = ‘Понедельник’
if неделя = 2: $неделя = ‘Вторник’
if неделя = 3: $неделя = ‘Среда’
if неделя = 4: $неделя = ‘Четверг’
if неделя = 5: $неделя = ‘Пятница’
if неделя = 6: $неделя = ‘Суббота’
if неделя = 7: $неделя = ‘Воскресенье’
!конец

!Месяца
If month = 1: $month = ‘Января’
If month = 2: $month = ‘Февраля’
If month = 3: $month = ‘Марта’
If month = 4: $month = ‘Апреля’
If month = 5: $month = ‘Мая’
If month = 6: $month = ‘Июня’
If month = 7: $month = ‘Июля’
If month = 8: $month = ‘Августа’
If month = 9: $month = ‘Сентября’
If month = 10: $month = ‘Октября’
If month = 11: $month = ‘Ноября’
If month = 12: $month = ‘Декабря’
!конец

Что с ним можно сделать и как реализовать почасовую усталость?
Заранее благодарен!

Поделюсь своим календарём, может кому и пригодится:

Spoiler

sec += 1
IF sec = 60:
sec = 0
minute += 1
END

IF minute = 60:
minute = 0
hour += 1
END

:loop
IF minute > 60:
minute -= 60
hour += 1
IF minute > 60: JUMP ‘loop’
END

!Правильное отображение минут
$minute = IIF (minute < 10 and minute!0, ’0<<minute>>’, ‘<<minute>>’)

IF hour = 24:
hour = 0
day += 1
END

:loop_1
IF hour > 24:
hour -= 24
day += 1
IF hour > 24: JUMP ‘loop_1’
END

IF day > 30:
day = 1
mounth += 1
END
IF mounth > 13:
mounth = 1
year += 1
END

$mounth[1] = ‘Месяц Луны’
$mounth[2] = ‘Месяц Мороза’
$mounth[3] = ‘Месяц Ветра’
$mounth[4] = ‘Месяц Воды’
$mounth[5] = ‘Месяц Земли’
$mounth[6] = ‘Месяц Огня’
$mounth[7] = ‘Месяц Цветов’
$mounth[8] = ‘Месяц Света’
$mounth[9] = ‘Месяц Урожая’
$mounth[10] = ‘Месяц Листопада’
$mounth[11] = ‘Месяц Дождей’
$mounth[12] = ‘Месяц Тишины’
$mounth[13] = ‘Месяц Снегопада’

clr
pl ‘<<hour>> : <<$minute>> : <<sec>>’
pl ‘<<day>> <<$mounth[mounth]>> <<year>> год 7 Эпохи’

В отличие от “учебного” способа, тут не надо умноЖать и делить, в чём я всегда путаюсь.. Косяков за методом не заметил.. Поскольку я сам придумал систему времявычисления, то в месяце у меня по 30 дней, но в вашей Солнечной системе любят всё усложнять, поэтому можно понатыкать условий, вроде:

IF mounth = 2 and day > 28:
mounth += 1
day = 1
END

С усталостью или придётся к каждому действию прописать сколько усталости отнимется:

act 'Arbeiten':
fatigue = fatigue - 100
end

Или привязать ко времени на той же локации, где измеряется время:

IF minute > 60:
minute = 0
hour = hour + 1
fatigue = fatigue - 50
END

P.S. Про пятницу.. В твоём случае:

IF неделя = 5:
 act 'Ура, пятница!!! Убежать праздновать!': gt 'Кабак'
END

P.P.S. Про усталость и голод - нужно знать как работает твой календарь - через счётчик (реал-тайм) или через GS, тогда и варианты можно будет предложить.

Я же показал нормальныйкалендарь несколькими страницами ранее.

flipslam, там пятница - это пятница :) weekday = 5.

Log in or Register to post comments.