Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su

14.5. Как заменить один предмет на другой?

В: Как заменить один предмет на другой?

О:

Чтобы заменить один предмет на другой, нужно удалить старый предмет, а в позицию, которую он занимал, вписать новый предмет.

Если вы знаете позицию предмета, который собираетесь удалить, то код довольно простой:

! светящийся шар был помещён в третью позицию

! удаляем светящийся шар
delobj "Светящийся шар"
! добавляем "Тёмный шар" в третью позицию
addobj "Тёмный шар","",3

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

!ищем позицию предмета по имени 
loop local i=1 while no i > countobj step i+=1 :
    if $getobj(i)="Светящийся шар": 
        objnumber = i 
        jump 'end_cycle'
    end 
end
:end_cycle

! удаляем предмет по индексу 
killobj objnumber
! вставляем на его место новый предмет 
addobj "Тёмный шар","",objnumber

Функция `countobj` возвращает число предметов в инвентаре. Функция `$getobj` возвращает название предмета по его номеру.

То есть, данный алгоритм сравнивает названия всех предметов в инвентаре по очереди, и если встречает такое же название, как мы указали, записывает номер в переменную `objnumber`.