RU 📌 Pinned

Как сделать?

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

Dirit,
код простой:

DELOBJ 'пластина'
DELOBJ 'пластина'
DELOBJ 'пластина'
ADDOBJ 'Стальной нагрудник'

А вот в какой момент его вызвать, это уже интереснее. Есть три основных варианта:
1. Самое простое - действие по условию. При входе на определенную локацию(или ветку диалога) проверяем наличие нужных предметов, добавляем действие. Пример(код при посещении локации):

! Считаем количество пластин
i = 1
plast = 0
:loop
IF i <= COUNTOBJ:
  IF $GETOBJ(i) = 'пластина':
    plast = plast + 1
  END
  i = i + 1
  JUMP 'loop'
END

! Проверяем условие
IF OBJ 'Молот' AND plast > 2:
  ! Добавляем действие
  ACT 'Сделать нагрудник':
    DELOBJ 'пластина'
    DELOBJ 'пластина'
    DELOBJ 'пластина'
    ADDOBJ 'Стальной нагрудник'
    GOTO $CURLOC
  END
END

2. Можно показывать всплывающее меню при нажатии на предмет, в котором например будет, при выполнении условия, для молота появляться действие “Сделать нагрудник”.

3. Можно сделать добавление дополнительных действий при нажатии на предмет.

Также есть еще вопрос. Как добавить фоновое изображение в окно действий и инвентаря, а также в окно доп. описания

Dirit,
в классическом плеере нельзя, только в Aero.

Aleks Versus Moderator 13.08.2011 12:26 (14 years ago)

Вопрос по регулярным выражениям. Есть такой код:

$t = "меню_бомбы[0]='состояние:бомбы_состояние' меню_бомбы[1]='использовать:бомбы_использовать' меню_бомбы[2]='выбросить:бомбы_выбросить' "
u=0
$e[u]=strfind($t,"(\S+)\[<<u>>\]='[\s,\w]+:(\S+)'")

Регэксп видоизменялся уже раз сто, но нужного результата я добиться не могу. Нужно, чтобы результаты для разных u были разными. Т.е. результат мне нужен такой.

$e[0]="меню_бомбы[0]='состояние:бомбы_состояние'"
$e[1]="меню_бомбы[1]='использовать:бомбы_использовать'"
$e[2]="меню_бомбы[2]='выбросить:бомбы_выбросить'"

Вроде бы должно быть так: несколько непробельных символов, символ [, значение u, символы]=‘, потом любые символы, включая пробелы, потом :, снова непробельные символы и апостроф ’
Однако при выполнении в $e[u] записывается всё $t. Что я делаю не так, и как сделать правильно?

Вопрос снимаю. В пятьдесят первый раз, как обычно, добился нужного:
$e[u]=strfind($t,”(\S+)[<<u>>]=‘[\s,\w]+:[\w]+’”) - это работает.

хм, у меня твой код работает так как тебе нужно

Aleks Versus Moderator 15.08.2011 05:13 (14 years ago)

Как ни странно у меня тоже. Теперь я вообще не понимаю, в чём было дело.

Подскажите код чтобы перейти на локацию нажав на ссылку, например: бла бла “ссылка” …???

Он самый, все просто :)

бла-бла <a href="EXEC:gs''локация_ссылки''">ссылка</a> бла-бла

AleKon,
спасибо:) сам не смог разобраться.

Вот возник вопрос, над реализацией которого сейчас думаю. Придуманное мной решение работает, но слишком большой объем кода выходит. Нутром чувствую, что можно упростить, а вот как - не пойму. Суть вопроса в чем:
Есть поле 10х10 символов. По сути - как в любом рогалике. Нужно, собственно, реализовать перемещение “@” персонажа по этой зоне. На данный момент я присвоил каждой точке численное значение от 1 до 100, решение, как видите, не самое удобное. Хочется сделать опознавание по осям x и y, но как правильнее реализовать пока не очень понимаю.
Массивы от x[0] до x[9] и от y[0] до y[9], положение персонажа и объектов через систему координат делать явно удобнее, но вот как его реализовать? Хотя-бы просто сделать отображение поля x на y символов “.”

UPD: Да, HTML кодами не очень хотелось бы пользоваться.

Aleks Versus Moderator 09.09.2011 11:37 (14 years ago)

Ryo,
Удобнее для тебя реализовать это поле как $ячейка[x+y*10], где x - горизонталь y - вертикаль 10 - ширина по горизонтали. Насколько я помню, в справке это подробнее расписано.

Nex,
Спасибо, но я эту статью уже читал. Я не пойму как работу с координатами организовать. Как сделать чтобы в сетке 10х10, по координатам, скажем x[2] и y[3] отображался символ. То есть как создать эту самую координатную сетку.
Aleks Versus,
Спасибо за совет. Поищу в справке, пока не натыкался еще, но штудирую.

Aleks Versus,
это один из способов организации двумерного массива. Неудобен он тем, что каждый раз при обращении придется указывать размерность. Впрочем, другие записи тоже не особо удобны.

Ryo,
видимо читали невнимательно. Приведу цитату(упрощу немножко):

x = 2
y = 3
$карта[x+","+y] = "@"

Это - запись символа по координатам 2, 3 в двумерный массив. Для вывода на экран нужно использовать вложенный цикл.

В той же теме по массивам, есть ссылка на архив с примерами кода, вот она. В архиве много полезного, конкретно по двумерному массиву пример находится в файле matrix.qsp.

Вывод массива на экран для приведенного мной способа адресации:

i = 0
:loop_i
    j = 0
    :loop_j
        IF $карта[j+","+i] = "":
           *P " "
        ELSE
           *P $карта[j+","+i]
        END
        j = j + 1
    IF j<10:
      JUMP 'loop_j'
    END
    *NL
    i= i + 1
IF i < 10:
  JUMP 'loop_i'
END

Матрица будет лучше выглядеть, если использовать моноширинный шрифт(см. справку - $FNAME).

Nex,
Сердечно благодарю. Действительно читал не достаточно внимательно, приношу свои извинения.

Log in or Register to post comments.