Skip to content

blog: write "Идентификаторы в объектах функций инвентаря" #32

@gretmn102

Description

@gretmn102

По поводу управления инвентарем хочу сказать вот что: лично мне не хватает идентификаторов объектов. Попробую объяснить.

Сейчас AddObj принимает название объекта, DelObj удаляет объект по названию, а obj проверяет, есть ли такой объект у игрока по названию предмета. Всё это, конечно, хорошо, пока не возникает следующая задача.

Нужно создать предмет "Лейка", которую можно наполнять и опустошать. Эти два состояния хочется отображать пользователю в инвентаре следующим образом: "Полная лейка" и "Пустая лейка". Если бы функции инвентаря работали по идентификаторам, то достаточно было бы написать что-то такое:

# begin
  @лейка_создать()
  AddObj $лейка['id'], @лейка_название()

  GT 'сад'
-

# лейка_создать
  $лейка['id'] = 'watering-can'
  лейка['полная'] = 0
-

# лейка_название
  if лейка['полная']:
    $result[0] = 'Полная лейка'
    exit
  end
  $result[0] = 'Пустая лейка'
-

# сад
  'Вокруг раскинулись цветы.'
  if no (obj $лейка['id']):
    act 'Взять лейку':
      Msg 'Лейка — у тебя.'
      AddObj $лейка['id'], @лейка_название()
      GT $curLoc
    end
  else
    if no (лейка['полная']):
      act 'Набрать воду':
        Msg 'Лейка заполнена до краев.'
        SetObj $лейка['id'], @лейка_название()
        GT $curLoc
      end
    else
      act 'Полить цветы':
        Msg 'Цветы благополучно политы.'
        SetObj $лейка['id'], @лейка_название() &! такого оператора нет, а мог бы быть!
        GT $curLoc
      end
    end

    act 'Выбросить лейку':
      Msg 'Лейка улетает в кусты.'
      DelObj $лейка['id']
      GT $curLoc
    end
  end
-

Текущие инструменты по работе с инвентарем

Процедуры:

  • AddObj — добавляет предмет по названию
  • DelObj — удаляет предмет по названию
  • KillObj — удаляет предмет по индексу

Функции:

  • GetObj — возвращает название предмета по индексу
  • $selObj — возвращает название выделенного предмета

Операторы:

  • obj — проверяет по названию, существует ли предмет в инвентаре

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions