RU 📌 Pinned

Как сделать?

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

RomaDova,
что значит “картинка поставлена на предмет”? В инвентарь добавляется предмет с иконкой? Или ты другое имел в виду?

Aleks Versus Moderator 17.12.2014 21:19 (11 years ago)

RomaDova,
если ты вставляешь картинку в имя предмета типа:

addobj '<img src="1.gif">Отвёртка'

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

! #onObjSel
if instr($selobj,'Отвёртка')<>0:
! код взаимодействия с предметом
end
end

Aleks Versus,
лишний “end”.

Я добавляю предметы с картинками оператором

addobj "Имя предмета/путь к картинке/картинка.png"

и если картинка анимирована, то есть находится в формате gif, то все добавляется нормально, но исчезает возможность взаимодействия с картинкой - она не реагирует на selobj и “не выполняет” свою команду

RomaDova,
реальный пример кода можешь привести?

Хитрый Пряник #1300 18.12.2014 17:11 (11 years ago)

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

$акт_шкаф=func('mklink','exec:goto ''Шкаф''','шкаф')

А в локации mklink это:

$result='<a href="'+$args[0]+'">'+$args[1]+'</a>'

или возможность завернуть в ссылку многострочный код с рекурсией:

if ОсмотрЛ=0:

 $акт_лампа="exec:
 ОсмотрЛ=1
 goto $curloc
 end"

$акт_лампа=func('mklink',$акт_лампа,'не горит лампа')
end

В случае, если лампа осмотрена, $aкт_лампа меняется на простой текст в выдаче локации. Вот так реализовал дезактивацию ссылок.

Хитрый Пряник,
END лишний в EXEC. Он там не нужен.

Многострочный код в ссылке - противопоказано. Это плохая практика в принципе. И ещё в Навигаторе не работает.

По поводу удобного форматирования ссылок. Для этих целей сделан модуль “вики-разметка”.

Проиллюстрирую слова Некса:
вместо

$акт_лампа="exec: 
ОсмотрЛ=1 
goto $curloc 
end"

лучше

$акт_лампа="exec: ОсмотрЛ=1 & goto $curloc"
Хитрый Пряник #1300 18.12.2014 20:24 (11 years ago)

Спасибо, не знал, что можно использовать & для вытягивания в строку.
Для многокода буду делать gs конечно, потому что куча всего в одну строку неудобочитаемо.

Хитрый Пряник #1300 19.12.2014 07:01 (11 years ago)

Ещё вопрос: возможно ли получить имя переменной как строку и наоборот создать новую переменную с именем равным сгенерированной строке? Или пользоваться массивами, где одна из ячеек — имя?
Конструкции для инкремента/декремента вида i++, i–, i++5 отсутствуют по идеологическим причинам?

Хитрый Пряник:

Ещё вопрос: возможно ли получить имя переменной как строку и наоборот создать новую переменную с именем равным сгенерированной строке? Или пользоваться массивами, где одна из ячеек — имя?

Думаю тут поможет Динамический код.

UPD: Имя переменной как строку получить нельзя, даже не могу представить такой сценарий вне ООП. Тут скорее всего поможет массив имен переменных. Подробнее смогу ответить только если конкретную задачу узнаю.

Хитрый Пряник #1300 19.12.2014 09:40 (11 years ago)

Про динамический уже вспомнил, однако соль не в этом а в превращениях в текст и обратно.

Уже накурил по поиску как правильно передать массив функции (его имя), чтобы к нему обратиться:

!Предложенный способ с вызовом типа:
func('chisskl','патронов')
!а внутри съём копии и работа с ней:
copyarr 'TempArray',"<<$args[0]>>".

Однако, когда объёмы массива большие, то есть смысл делать более громоздкий код, который не удваивает занимаемую память:

*nl dyneval "$<<$args[0]>>[<<i>>][<<j>>]" 
!вернёт значение из массива

Так же можно вписать значение в изначальный массив вот так:

dynamic $dyneval "<<$args[0]>>[0]=6"

Как вариант — снимать копию только с нужной области массива. Понимаю, что это слишком сильный загон в масштабах QSP, но говнокод не люблю

Конструкции для инкремента/декремента вида i++, i–, i++5 отсутствуют по идеологическим причинам?

Учитывая, что простота языка является одной из основных фишек QSP, можно и так сказать. Отсутствует это и многое другое, циклы и объекты например. Фанаты программирования, которые не могут обойтись без продвинутого синтаксиса, могут выбрать более сложные платформы, например INSTEAD.

Хитрый Пряник #1300 20.12.2014 10:14 (11 years ago)

Да не, мне в целом не важно какой синтаксис, лишь бы он был ясным и всё работало.
Если процедура сложная и выполняется хотя бы дважды — я сразу пишу функцию, чтобы больше с этим моментом не париться :)

Nex:

Конструкции для инкремента/декремента вида i++, i–, i++5 отсутствуют по идеологическим причинам?

Учитывая, что простота языка является одной из основных фишек QSP, можно и так сказать.

Сокращенные операции с присвоением

Хитрый Пряник,
ты это имел в виду?

Log in or Register to post comments.