Как сделать?
…
Вопрос новичка: Можно ли в обычном QSPплеере (не Аеро) зафиксировать расположение окон предпросмотра, действий и доп.описаний. Т.е чтобы допустим окно доп.описаний имело 400 пикселей ширины и 300 высоты. И еще: сделал вывод картинки через VIEW, сработало, вывелось окно предпросмотра - вроде все хорошо, но тут я дернул мышкой и теперь окно предпросмотра развернулось в целую полосу вверху (над окнами основного описания и объектов), имеет высоту 100 пикселей примерно, и все картинки теперь кажет в сильно уменьшеном виде, причем его можно только закрыть. Но при следующем выводе изображения через VIEW это окошко опять вверху, и опять узкое. Есть ли какие либо системные настройки у плеера (не Аеро)?
TimA,
можно. Открой свою игру в плеере, расположи окошки как тебе удобно, закрой плеер. Теперь открой папку плеера (где находится “qspgui.exe”). Скопируй файл “qspgui.cfg” из папки плеера в папку игры. Поставь этому файлу атрибут “только чтение”. Всё. Единственный минус - будут создаваться лишние временные файлы, но т.к. они маленькие то это можно просто игнорировать.
Настройки просмотра классический плеер хранит в файле “qspgui.cfg”. Если такой файл найден в папке игры - используется он, иначе используется файл из папки плеера. Соответственно чтобы сбросить настройки, нужно просто удалить этот файл.
Спасибо, попробую. Если приоритетный файл который у меня в папке игры, то это здорово. Я фактически свой юзер-интерфейс могу сваять таким образом.
TimA,
да. При определённом усердии можно поменять расположение окошек в этом файле так, как не поменяешь мышкой. Если редактировать его вручную.
Столкнулся со странной заморочкой: писал функцию обыска локации
Код локации
Spoiler
*clr
if vizited[$curloc]=0:
set vizited[$curloc]=1 & ! устанавливаем признак посещенности локации
!===========Установка имеющегося в локации лута ========================
i=arrsize('lootname')& ! определяем размер массива уже имеющегося лута
set $lootname[i]='Планшет' &! название лута
set $lootloc[$lootname[i]]=$curloc &! в какой локации находится
set taken[$lootname[i]]=0 &! взят/не взят
set lootseen[$lootname[i]]=0 &! обнаружен/не обнаружен
set wght[$lootname[i]]=150 &! вес лута в граммах
set lootsence[$lootname[i]]=50 &! сенс. необходимый для обнаружения
set $lootexe[$lootname[i]]='addobj $tmp' &! добавляет в инвентарь
!==================== то же самое в сокращенном виде=================================
$lootname[i+1]='Шокер'& $lootloc[$lootname[i+1]]=$curloc& taken[$lootname[i+1]]=0& _
lootseen[$lootname[i+1]]=0& wght[$lootname[i+1]]=400& lootsence[$lootname[i+1]]=450 _
& $lootexe[$lootname[i+1]]='$purse[j]=$tmp'&! добавляет в сумку
$lootname[i+2]='500cr'& $lootloc[$lootname[i+2]]=$curloc& taken[$lootname[i+2]]=0& _
lootseen[$lootname[i+2]]=0& wght[$lootname[i+2]]=0& lootsence[$lootname[i+2]]=250 _
& $lootexe[$lootname[i+2]]='money=money+500' &! добавляет счетные предметы(деньги,патроны)
set lootnum[$curloc]=3 &! ОБЯЗАТЕЛЬНО!! это число объектов лута в локации
*pl 'Lootinit end'
! ===================================================================================
end
'<center>Кладовка</center>'
*pl '<table width=100%><tr><td><img align=left src="pic\клад.jpg"></td>
<td>В кладовке стоит шкаф со всяким барахлом</td>'
p '</tr></table>'
time=420
*pl 'Money =<<money>> кред.; sense=<<sence>>; weight=<<weight>>; viz=<<vizited[$curloc]>>'
i=0
:c1
if i<3:
*pl '<<$lootname[i]>>, seen=<<lootseen[$lootname[i]]>>, taken=<<taken[$lootname[i]]>>'
i+=1
jump 'c1'
end
if time < 1380:
cla
if sence>50 and seen[$curloc]<lootnum[$curloc]:
act 'Осмотреть': gs 'explore',$curloc
end
act 'налево': gt 'налево'
act 'направо': gt 'направо'
act 'Выйти из дома': gt 'двор'
else
act 'Разбить лагерь': gt 'camp'
end
код функции
Spoiler
cla
if $args[0] ! '':
$return=$args[0]
$string = 'Найдено: '
$stract='Подобрать найденное'
set i=0
set k=0
:cycle1
if i<arrsize('lootname'):
if $lootloc[$lootname[i]]=$args[0]:
if sence>=lootsence[$lootname[i]] and lootseen[$lootname[i]]=0:
$string = $string+$lootname[i]+' вес(<<wght[$lootname[i]]>>), '
lootseen[$lootname[i]]=1
sence+=5
seen[$args[0]]+=1
k+=1
$tmploot=$lootname[i]
pl'Seen <<$lootname[i]>> seenset=<<lootseen[$lootname[i]]>>'
end
end
i+=1
jump 'cycle1'
end
if k=0: $string = 'Ничего нового не найдено,'
if seen[$args[0]]<lootnum[$args[0]]:
$string=$string+' для обнаружения еще чего-либо нового наблюдательности не хватает. <<$return>>'
else
$string=$string+' вы нашли все, что можно'
end
*pl $string
!===========подбор==================
set i=0
:cycle2
if i<arrsize('lootname'):
if $lootloc[$lootname[i]]=$args[0]:
if sence>=lootsence[$lootname[i]] and taken[$lootname[i]]=0:
act 'Подобрать_'+$lootname[i]:
$tmp=replace($selact,'Подобрать_')
taken[$tmp]=1
weight=weight+wght[$tmp]
j=arrsize('purse')
pl 'Taken = <<$tmp>>; takenset=<<taken[$tmp]>>; вес=<<weight>>'
dynamic $lootexe[$tmp]
delact $selact
end
end
end
i+=1
jump 'cycle2'
end
act 'Выйти из режима осмотра':
delact $selact
gt $args[0]
end
end
и происходит что-то непонятное. Когда в функции в действии “Выйти из режима осмотра” ставлю gt $args[0] плеер выдает сообщение: ошибка. локация explore; место:при посещении; строка 108; код ошибки 111; Локации с таким именем не существует. Если ставлю gt $return - все работет штатно. В связи с этим вопрос: когда успел скурвится ARGS[0]?
TimA,
весь код, который пишется внутри “ACT”, выполняется отдельно от локации. По сути, написав ACT, ты создаёшь отдельный независимый участок кода. Вследствие этого, например, нельзя использовать JUMP чтобы напрямую перейти из действия на метку локации, в которой создавался ACT.
Также, исполняется код не в момент создания действия, а в момент выбора этого действия игроком. К тому времени, как игрок выберет действие, уже давно будет завершено выполнение функции и соответственно восстановлено значение массива $ARGS.
Сохранить переданную в функцию информацию в отдельной переменной, чтобы потом воспользоваться ей в момент выбора действия - правильный подход.
Спасибо, я уже так и сделал. Мне просто интересно было механику явления понять. Та же беда происходит и с $curloc, и видимо с другими системными переменными; но если ACT, по сути, независимые куски кода тогда все ясно.
Возник вопрос, а можно ли посчитать кол-во переводов строки в текстовой переменной, например в $stattxt?
Bumbr,
можно. Тебе понадобится цикл и функция INSTR.
Перевод строки задаётся так:
$перевод_строки = '
'
Здравствуйте, еще вопрос по HTML в AeroQSP.
Никак не могу заставить работать атрибут стиля background-image.
Spoiler
'
<table>
<tr>
<td style="background-color: #00ff00; background-image: url(''img/loc/wood.jpg'')">Некоторый текст</td>
</tr>
</table>
'
Выводится только текст, background-color работает нормально, но нужна именно картинка.
Bumbr,
в AeroQSP, путь к background-image записывается без “url()”.
Здравствуйте, возможно ли сделать так чтоб картинка в главном окне менялась в соответствии дня и ночи, (реального времени). И как можно сделать так, чтобы переход на другую локацию был за какой то промежуток времени (например, из локации дом в локацию лес, переход за 10 сек).
За 10 реальных секунд? Если да, то просто перед переходом напишите wait 10000. Это поставит игру на паузу на 10 реальных секунд.
Если речь идёт о внутриигровом времени, то просто создайте переменную время, которая будет менятся или в реальном времени (в локации-счётчике пропишите увеличение), либо при совершении игроком действий, таких как переход с локации на локацию (просто в коде действия добавите время += время_действия, где время_действия затрачиваемое время).
Смену фоновой картинки можно реализовать через локацию счётчик. Сделать там проверку по времени.
Spoiler
if часы > 0 and часы <= 6: $backimage 'ночь.jpg' & refint
if часы > 6 and часы <= 12: $backimage 'утро.jpg' & refint
if часы > 12 and часы <= 18: $backimage 'день.jpg' & refint
if часы > 18: $backimage 'ночь.jpg' & refint
Как сделать привязку к реальному времени - не знаю. В голову приходить только попросить игрока ввести его при старте, а дальше уже через локацию счётчик менять. Поставить SETTIMER 1000 и в локации-счётчике прописать секунды += 1.
Про игровое время в справке хорошо написано.
http://qsp.su/index.php?option=com_content&view=article&id=111:-10&catid=36:2009-02-19-06-11-21&Itemid=76
Я правильно понимаю, что в AeroQSP нельзя разбить игру на отдельные модули? ADDQST он вообще не распознает как действие.
Можно ли как-то обойти это или только копировать вручную всё в основной qsp-файл?