RU 📌 Pinned

Как сделать?

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

Начал тут потихоньку тренироваться в юзе массивов. Гуру, подскажите. какого не работает условие
if $Девушка=10 and $Фамилия=10: из примера.
Я пока не совсем врубился в язык массива, догадываюсь что тупо неверно задаю условие.
Суть понятна - хочу чтобы оно срабатывало при сочетании элементов 10,10. В переменную “а” какахами не кидать - повторюсь - экспериментирую и исследую способности массива по воплощению моих игровых фантазий))

mikromassiv.qsp

Aleks Versus Moderator 07.04.2016 18:30 (9 years ago)

Aaaspavel:

msg оборвёт действия и выставит нас за дверь.

Aaaspavel:

msg’магазин закрывается, продавец уходит’ & gt’place’

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

Aaaspavel:

сама по себе каждая локация это $BACKIMAGE = ‘content/back.png’, а нпс на ней не постоянно присутствуют, а появляются по игровому времени либо в зависимости от квеста, соответственно для каждой игровой ситуации в зависимости от игрового времени и квестов отрисовывать ещё и новую таблицу для каждой локации?

ну извини, ты не говорил, что у тебя должны рисоваться неписи поверх карты, ты сказал цитирую “как этот текст заменить картинкой, которую нужно ещё и расположить на экране в нужном месте, что-то типа интерактивной карты”. Интерактивную карту можно сделать через MAP/AREA или в виде таблицы. Если тебе нужно картинки одну поверх другой ставить - безусловно удобно дивами. Но навигатор позволяет сделать так: разрезать карту на кусочки (тайлы) и выводить тайлы как бэкграунд ячеек таблицы (150 кусков?). И уже простым <img> размещать иконку неписи в нужной ячейке таблицы. Плюсы таблицы - не требуется позиционирование, можно заставить таблицу растягиваться и сжиматься в ширину экрана, что избавляет нас от багов с разным разрешением экрана. Например, в твоём случае неписи могут оказаться за пределами страницы. С таблицей такого не будет, если она вписана в ширину.

lamerUA:

if $Девушка=10 and $Фамилия=10

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

Помещай код вот в такой блок

!код

. Кнопка , если не трудно.
P.S.: Код в приложенном файле исправь так:

Spoiler
'Навстречу идет девушка'
! получаем имя девушки - случайный элемент из массива $Девушка
$Имя_Девушки = $Девушка[rand(0,10)]
! получаем фамилию девушки - случайный элемент из массива $Фамилия
$Фамилия_Девушки = $Фамилия[rand(0,10)]
! выводим имя и фамилию девушки
$Имя_Девушки+" "+$Фамилия_Девушки
if а=0:
act 'Идти дальше':
*clr
gs '2'
end
end
if $Имя_Девушки='Сара' and $Фамилия_Девушки='Роджерс':
	! and $Фамилия[10]='Роджерс':
	а=1
end
if а=1:
msg 'ВАУ! Сара? Роджерс? Мы же с тобой с 8 класса не виделись!'
gt 'паб'
end
end

Разница видна, надеюсь?

Спасибо с условием разобрался.
а вот еще вопрос, в описании я хочу сделать ссылку, так чтоб при нажатии на слово открывалась картинка.
Вот так не работает, видимо из за того что скобки ” не правильно просчитываются. Как исправить?
‘<a href=“exec:msg ‘‘<center><img src=“pic…”></center>’’”>Дом</a>’

Aleks Versus:

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

вероятно автор, на основе работ которого я учусь, сумел обойти эти баги, в случае изменения разрешения экрана в минимум игра всё равно раскрывается в пропорциях и так же в пропорциях раскрывается позиционирование для

/*Global ============================================*/
html, body {
	font-family:lazurskiexpodc-bolditalic;
	/*font-family:jakobExtraCTT_Regular;*/
	color: #000;
}
html {
	height: 100%;
	overflow-y: auto;
	overflow-x: auto;
	background: url('../../../pic/interface/bg.jpg');
	background-size:cover;
}
body {
	position:relative;
	min-width: 1280px;
	max-width: 1280px;
	min-height: 720px;
	max-height: 720px;
	margin: 0px auto;
	background-color: transparent;	
	/* background-color: rgba(199, 23, 23, 0.82); */
	overflow: hidden;
}
.pass-line{margin-bottom:1em;}

/* grid system */
#qsp-main > div, #right-column > div{
	float: left;
}
#qsp-main::after, #right-column::after{
	content: ' ';
	clear: both;
}
#left-column{
	position: relative;
    left: 0px;
    top: 0px;
    z-index: 2; 
    width: 186px;
    height: 720px;
}
#right-column{
	position: relative;
    left: 5px;
    top: 0px;
    z-index: 2;
    width: 1094px;
    height: 720px;
}
/* bac images */
#qsp-back-image{
	position: absolute;
	top:0;
	left:0;
	min-width: 1280px;
	max-width: 1280px;
	min-height: 720px;
	max-height: 720px;
	z-index: 0;
}

/* controls link*/
.control{
	overflow: hidden;
}
.control > a{
	display: block;
	width: 100%;
	height: 100%;
}

/* main content blur */
#dialog-overlay.blur{
  -webkit-filter: blur(5px);
}
.red{
color:red;
}
.green{
color:green;
}
.bold{
	font-weight: 600;
}

/* End Global =======================================*/

определенных в px картинок, никакие из них не меняют расположения

Aleks Versus Moderator 08.04.2016 05:49 (9 years ago)

Bup0H,
помещай код в блоки

!код

кнопка
Очень неудобно воспринимать из текста. Особенно кавычки.
Сделай так. Помести изображение с центровкой в текстовую переменную:

$picture = "<center><img src='pic...'></center>"

Потом выводи ссылку с msg:

'<a href="exec:msg $picture">Дом</a>'

Так же можно выводить изображение оператором view:

'<a href="exec:view ''pic...'' ">Дом</a>'

Aaaspavel:

вероятно автор, на основе работ которого я учусь, сумел обойти эти баги

замечательно.

Aleks Versus:

а ты проверяешь, присутствует ли в ней числовое значение

это уже итог мучений) я понимаю что текстовые переменные маст би.
Вопрос наверно не совсем свой корректно сформулировал - ты указал условие через промежуточную текстовую переменную.
а нельзя сделать непосредственно условие с переменными массива?

Spoiler

if а=0:
act ‘Идти дальше’:
*clr
gs ’2’
end
end
!if $имя_д=‘Сара’ and $Фамилия_д=‘Роджерс’: твое работающее условие
if $девушка=‘Сара’ and $Фамилия=‘Роджерс’: мое изначальное неработающее
а=1
end
if а=1:
msg ‘ВАУ! Сара? Роджерс? Мы же с тобой с 8 класса не виделись!’
gt ‘паб’
end
end

Вроде бы в примерах где-то видел что можно и так - чтобы не плодить тонны данных (массивы же для того и нужны в конце концов))
Я думал что при совпадении с переменными массива условие будет верным без посредников. Тут и переменная “а” числовая по сути не нужна для работы условия наверно - оно итак должно сработать.

UPD:
Кстати работает:

Spoiler

if $имя_д=‘Сара’ and $Фамилия_д=‘Роджерс’:
msg ‘ВАУ! Сара? Роджерс? Мы же с тобой с 8 класса не виделись!’
gt ‘паб’
else
act ‘Идти дальше’:
*clr
gs ’2’
end
end

Теперь бы избавиться от лишних текстовых) и красиво/компактно.

Aleks Versus Moderator 08.04.2016 10:30 (9 years ago)

lamerUA,
у меня есть статейка о переменных и массивах на QSP. Может быть она что разъяснит.

В двух словах:
Когда ты пишешь:

$девушка='Сара'

это аналогично проверке нулевого элемента массива:

$девушка[0]='Сара'

Если ты хочешь проверить, совпадает ли выбранное значение со значением в определённой ячейке, тогда так:

! сравниваем совпадает ли выбранное значение со значением в десятой ячейке
if $имя_д=$девушка[10]:

Если ты хочешь проверить присутствие значения в массиве, есть команда arrpos.

Aleks Versus, вопрос такой, слу, а вот смотри, курсор при наведении на действие меняется с стрелки на действие в qsp, а где и что нужно прописать, что при выполнении наведении курсора на определённые области курсор менялся на другие значки, к примеру с с разрешением (.ani)?

Aleks Versus Moderator 08.04.2016 19:16 (9 years ago)

Aaaspavel,
Это через css делается. Вот тут очень подробно и понятно написано с примерами:
http://htmlbook.ru/css/cursor

Aleks Versus:

Re: Как сделать?

Aaaspavel,
Это через css делается. Вот тут очень подробно и понятно написано с примерами:
http://htmlbook.ru/css/cursor

большое спасибо, с удовольствием прочитал статью, но мне интересно не как это делается вообще - а как это сделать в qsp при наведении курсора в нужном месте

Aleks Versus Moderator 09.04.2016 08:25 (9 years ago)

Aaaspavel,
ты ведь делаешь в Навигаторе? Работаешь с css, значит. Значит есть два варианта.
1. Прописать класс в CSS:

.intCur {cursor: url(путь к файлу курсора/cursor.ani);}
/*это для примера. Не могу сказать, будет ли работать. Надо экспериментировать.*/

Потом этот класс использовать в нужном месте в игре:

"<p class='intCur'>Текст, при наведении на который курсор будет меняться на твой</p>"

Файл курсора должен лежать на одном уровне или ниже файла с css!!! Соответственно указывается путь.
2. Прописать в style. Это позволит поэкспериментировать прежде, чем создавать класс в css:

"<p style='cursor:url(путь к файлу курсора/cursor.ani);'>Текст, при наведении на который курсор будет меняться на твой</p>"

Файл курсора должен лежать на одном уровне или ниже файла с игрой!!! соответственно указывается путь.

Ребят вот вопрос. В мануале написано маловато. А я полный профан пока в этом. Цель такая. Скажем есть стандартный диалог, как привязать его к персонажам, через arg.
К примеру вот код одной игры:

Spoiler

if $args[0] = $Заяц:
if $args[1] = ’Лес:
‘<center><img src=“pic…Заяц в лесу” ></center>’

Выводится картинка зайца в лесу, и варианты. Где задаются эти аргументы и нумерации локации не совсем понимаю? Надеюсь меня поняли. К примеру переходя к тому же диалогу, но уже с медведем на поле он соответсвенно выводил нужную картинку.

Aleks Versus Moderator 10.04.2016 17:57 (9 years ago)

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

goto 'Лес','Заяц',23

, при выполнении этой команды будет осуществлён переход на локацию “Лес”, при этом переменной $args[0] на локации “Лес” присвоится значение Заяц, а переменной args[1] - значение 23.

Если ты делаешь по этому примеру, можешь видеть, что переключение между ветками там задаётся как раз таки значением, которое получает args[0] при обращении к локации:

gs 'Диалог_А',1
....
if args[0]=1:
	act 'Как реализован твой диалог?':
		'<font color=blue>(Вы) — <<$selact>></font>'
		cla
		wait 500
		........

Спасибо за подсказки становится интересно, правда времени много не могу потратить на эксперименты.

Spoiler

gs ‘stat’
if $args[0] = ‘Медведь’:
if $args[1] = ‘Лес’:
if ‘переменная’ => 0 and ‘переменная’ <100:
‘<center><img src=“pic1.jpg” ></center>’
end
if ‘переменная’ => 100 and ‘переменная’ <200:
‘<center><img src=“pic2.jpg” ></center>’
end
end
end

Почему то если после 3 строки вставляю условие картинка не выводится. Что не так я делаю?

Bup0H:

Почему то если после 3 строки вставляю условие картинка не выводится. Что не так я делаю?

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

gs 'stat' 
if $args[0] = 'Медведь': 
    if $args[1] = 'Лес': 
        'переменная'=rand(1,200)
        if 'переменная' => 0 and 'переменная' <100: 
        '<center><img src="pic1.jpg" ></center>' 
        end 
        if 'переменная' => 100 and 'переменная' <200: 
        '<center><img src="pic2.jpg" ></center>' 
        end 
    end 
end

Log in or Register to post comments.