Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su
14.5. Как заменить один предмет на другой?
В: Как заменить один предмет на другой?
О:
Чтобы заменить один предмет на другой, нужно удалить старый предмет, а в позицию, которую он занимал, вписать новый предмет.
Если вы знаете позицию предмета, который собираетесь удалить, то код довольно простой:
! светящийся шар был помещён в третью позицию
! удаляем светящийся шар
delobj "Светящийся шар"
! добавляем "Тёмный шар" в третью позицию
addobj "Тёмный шар","",3
! удаляем светящийся шар
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
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`.