Как сделать?
…
Aleks Versus:
Я писал модуль для работы с вещественными числами.
Добавил упоминание в справку. Почитал описание пары функций - у тебя обычное сложение и вычитание названо логическим.
newsash:
у тебя обычное сложение и вычитание названо логическим.
Не совсем так. Я не знал, как его обозвать. Побайтовое сложение что ли? Помню давали нам на вычислительной технике определение, но я забыл. Регистры, сдвиги, переполнение… Уже совсем не помню. Эти функции помогли мне избавиться от знака при счёте в других функциях. Так что они скорее вспомогательные.
Aleks Versus:
Не совсем так. Я не знал, как его обозвать. Побайтовое сложение что ли? Помню давали нам на вычислительной технике определение, но я забыл. Регистры, сдвиги, переполнение… Уже совсем не помню. Эти функции помогли мне избавиться от знака при счёте в других функциях. Так что они скорее вспомогательные.
По описанию функционала там самое обычное сложение и вычитание. :)
А хотя нет, не самое обычное - при переполнении единичка в первый разряд переходит.
подскажите почему не работает код <a href=“exec:GOTO ‘‘верстак’’”>версак</a>
локация верстак есть
USEHTML = 1 в стартовой локации есть
верстак и exec написаны серым
надо еще чтото гдето прописать?
все разобрался, текст был выделен такими кавычками ” а не такими ’, буду знать что между ними есть разница =)
saks,
можно такими же, но внутри атрибута HTML-тега их нужно экранировать - помечать специальным знаком, чтобы было понятно, что это не конец значения атрибута, а кавычка внутри значения.
<a href="exec:GOTO \"верстак\"">версак</a>
Особо отмечу, что в настоящем HTML, то есть везде кроме QSP-плеера, кавычка внутри атрибута экранируется по-другому:
<a href="exec:GOTO "верстак"">версак</a>
Nex:
экранировать - помечать специальным знаком
Хм, всё время думал, что в QSP кавычки экранируются дублированием. Возьму на заметку ещё пару способов. =)
P.S.
'<a href="exec:GOTO ''верстак''">версак</a>'
"<a href=""exec:GOTO 'верстак'"">версак</a>"
{<a href="exec:GOTO 'верстак'">версак</a>}
'<a href="exec:GOTO \"верстак\"">версак</a>'
'<a href="exec:GOTO "верстак"">версак</a>'
Первые 4 способа работают везде, 5й работает в Навигаторе и не работает в классическом плеере (вроде как и ожидалось).
спасибо.
еще пару вопросиков от новичка
как задать переменной рандомное числовое значение? допустим герой ложиться спать и чтобы при нажатии “спать” переменной присваивалось рандомное значение (от 1 до 100 предположим), и в зависимости от этого значения каждый раз начинались разные эвенты из списка (сон).
как привязать локацию к обьекту? чтобы при нажатии на рюкзак открывалась локация рюкзак с содержимым
во многих играх видел дополнительное окно снизу справа, как его добавить и что надо прописать в коде чтобы информация выводилась туда, а не в основное окно.
saks,
1)
son=rand(1,100):
if son=1: ‘Сон 1’
if son=2: ‘Сон 2’
if son=3: ‘Сон 3’
…
2) В стартовой локации прописываем $ONOBJSEL=“ONOBJSEL” (название локации (справа) можно менять)
Далее, как создадим эту локацию, прописываем в ней что-то вроде if $objsel=‘Рюкзак’:gt’Рюкзак’ (т.е. при нажатии на предмет отправляемся на локацию с его содержимым)
Ну, и собственно не забываем в нужном месте игры добавить сам предмет через addobj’Рюкзак’
3) Окно дополнительных описаний вроде имеется по умолчанию. Если вдруг почему-то не работает, то попробуй на стартовой локации прописать SHOWSTAT 1 . Должно помочь. А писать в нем можно как и в основном окне, но перед строчкой нужно поставить PL (Например: PL’Описание’).
newsash,
в коде QSP - да, кавычки экранируются дублированием. Но помимо экранирования для QSP, в приведённом примере их требуется экранировать для HTML-рендера, так как они находятся внутри атрибута HTML-тега.
В описании локации, экранируется для HTML:
<a href="exec:GOTO \"верстак\"">версак</a>
То же самое в коде локации, экранируется для HTML, затем для QSP - каждая кавычка дублируется:
*PL "<a href=""exec:GOTO \""верстак\"""">версак</a>"
Практически всегда с таким экранированием трудности возникают именно в <a href=“EXEC:…”>…</a>.
5й работает в Навигаторе и не работает в классическом плеере (вроде как и ожидалось).
Верно, в Навигаторе поддерживается экранирование от классического плеера, а также работает экранирование по стандарту HTML.
EL_RIO:
В стартовой локации прописываем $ONOBJSEL=“ONOBJSEL” (название локации (справа) можно менять)
Далее, как создадим эту локацию, прописываем в ней что-то вроде if $objsel=‘Рюкзак’:gt’Рюкзак’ (т.е. при нажатии на предмет отправляемся на локацию с его содержимым)
Ну, и собственно не забываем в нужном месте игры добавить сам предмет через addobj’Рюкзак’
чтото не получается, тоесть по факту переход(обращение) в локацию рюкзак происходит, если в ней прописать текст то при нажатии на “рюкзак” он выводиться в той локации в которой я сейчас нахожусь, и на экране 2 локации сливаются. а хотелось бы чтобы перед игроком открывалась “чистая” локация в которой будут только предметы рюкзака.
saks, Странно… вроде gt должно затирать основной экран. Вот от gs да, можно было бы подобного ожидать. Но не беда, просто в локации обработчике чуть правим код на if $objsel=‘Рюкзак’:*clr>’Рюкзак’
Обнаружил одну очень неприятную особенность: при обнулении числовой переменной через =0, эта переменная не “убивается”. Т.е. чтобы окончательно от нее избавится, нужно использовать killvar, что не очень удобно. Неясно почему =0 не воспринимается как некое подобие краткой записи киллвар (тем более что все числовые переменные и так по умолчанию равны нулю). Если конкретно, то у меня возникла следующая проблема: было условие, которое должно выполняться при условии if arrsize(’a’)>0 Так вот, я никак не могу понять почему оно выполнялось хотя массив a был вроде как пуст (я даже выводил все возможные “занятые” индексы - все равны нулю). Как выяснилось, один из элементов был равен нулю, но при этом *существовал* (из-за пройденного на одном из этапов условия-обнуления через =0. Т.е. если написать a[1]=0, то arrsize[’a’] станет равен 1. Это бессмысленно и дико неудобно. А мне теперь придется чисто ради профилактики заменить кучу =0 на killvar : Хотя в большинстве случаев это не вызывает проблем, раз на раз не приходится, таки.
update: Поэкспериментировал немного. Большая часть вопросов, отпала, но зато появилась новая большая непонятка: как правильно использовать killvar для удаления элемента массива? Индекс строкового значения можно найти через arrcomp (и dynamic видимо придется использовать - но это уже крайности - практической необходимости у меня в этом нет), с числовыми ничего и не надо искать, но у меня почему то сама команда не работает. Т.е. ввожу killvar ‘a’,3 (к примеру) точно как в справке и удаляется ВЕСЬ массив, как будто “,3” после а вообще нет. А свою проблему я решил заменой условия if arrsize(’a’)>0 на if arrcomp(0,’$a’,’[^0]’)!-1 (массив ‘а’ сделав строковым, хотя в нем по-прежнему только числовые данные).
Stag_Beetle, по поводу убийства переменной при обнулении - это тебе к Байту.
a[0] = 0
a[1] = 0
a[2] = 0
a[3] = 0
arrsize('a')
killvar 'a',2
arrsize('a')
killvar 'a',2
arrsize('a')
killvar 'a',2
arrsize('a')
У меня вывелось 4,3,2,2, как и должно быть. Ты каким плеером пользуешься?
UPD:
a['aaaa'] = 0
a['bbbb'] = 0
a['cccc'] = 0
a['dddd'] = 0
arrsize('a')
$a['bbbb'] = 'delete'
killvar 'a', arrcomp('$a','delete')
arrsize('a')
Вывелось 4,3. Тоже работает нормально.
Stag_Beetle:
ввожу killvar ‘a’,3 (к примеру) точно как в справке и удаляется ВЕСЬ массив, как будто “,3” после а вообще нет.
Stag_Beetle,
приведи пример кода, который это иллюстрирует.
Stag_Beetle, как вариант решения проблемы можно между изменением значений и проверкой поместить этот код:
:loop
i = arrpos('a',0)
if i < arrsize('a'):
killvar 'a', i
jump 'loop'
else
killvar 'i'
end
Для этого кода неважно, строковые у тебя индексы или нет. Можно легко переделать в процедуру заменив ‘a’ на $args[1].