Суббота, 05.10.2024, 13:32

Приветствую Вас Странник | RSS
The Elder Scrolls:Morrowind
ГлавнаяРегистрацияВход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Добавление и удаление объектов из инвентаря
Sm1LeRДата: Суббота, 10.11.2007, 20:59 | Сообщение # 1
Болтун
Группа: Администраторы
Сообщений: 41
Репутация: 2
Статус: Offline
Добавление и удаление объектов из инвентаря
AddItem, "ObjectID", count_enum
RemoveItem, "ObjectID", count_enum

Actor -> AddItem, "item_ID", 1

Эти функции достаточно просты, они добавляют и удаляют предметы из инвентаря игрока. Функция RemoveItem заставляет объект “исчезнуть”.
Примечания: Удаление предметов, которых нет в инвентаре, не обрушивает игру, но функция 'RemoveItem' вычтет вес удаленного предмета из общей загруженности игрока, ДАЖЕ ЕСЛИ предмета НЕТ в инвентаре игрока. Так что, если скрипт использует функцию 'RemoveItem', чтобы убрать 4-фунтовый предмет, которого нет у персонажа, то загруженность персонажа уменьшится на 4 фунта и будет ниже, чем должно. Обходной путь — всегда проверять присутствие предмета в инвентаре перед применением 'RemoveItem', чтобы удалить его (Спасибо DinkumThinkum за информацию). Также остерегайтесь удалять предмет, который содержит работающий скрипт (имеется в виду удаление предмета, который содержит скрипт, удаляющий этот предмет /прим. переводчика/), так как это приведет к краху игры.
Эnb функции могут принимать глобальные переменные в качестве аргументов, но только в поле result диалога, и только в том случае, если вы не устанавливаете значение этой переменной в той же строке диалога (Форумная инф. / Argent; По словам Argent, максимальное число, которое он смог добавить при помощи AddItem с помощью переменной 65534 (а используя переменную, типа long = 2147483520)). В дополнение к информации от Argent о функциях AddItem/RemoveItem, принимающих переменные в окне диалога: убедитесь, что переменная в вопосе не изменяется в том же окне. Например, var_a равная 3 в тот момент, когда выбрана эта линия в диалоге. Если поле result выглядит так:

set var_a to var_a + 10 ;
AddItem gold_001, var_a

То в инвентарь NPC будет добавлено три Дрейка, а не тринадцать. Если требуется такое действие, поместите все расчеты в один отклик диалога, добавьте оператор "choice", и обработайте функцию AddItem в следующем отклике. А также, даже с переменными типа long, я не мог корректно добавить значения свыше 32767 (2^15). (протестировано на чистом Морроувинде, без дополнений) (Форум.инф. / Kir).

Есть сообщения, что только первый вызов AddItem всегда работает с контейнером, а поле этого игрок должен самостоятельно воздействовать на контейнер в игре (например положить туда предмет) прежде чем другая функция AddItem даст видимый результат (непроверенная форум. инф.).

Пример:
Следующий скрипт обсуждался на форумах (извините, не помню, кто сделал его первым). Он должен спрашивать игрока, не желает ли он «переработать» предмет, который надет на нем, а затем заменить этот предмет «переработанным».

Begin scr_thing

short button
short OnPcEquip
short state

if ( MenuMode == 1 )
return
endif

if ( OnPCEquip == 1 ) ; когда предмет надет
set state to 1
set OnPCEquip to 0 ; делается каждый раз после надевания.
endif
if ( state ==1 )
MessageBox "переработать?" , "да", "нет"
set state to 2
elseif ( state == 2 )
set button to GetButtonPressed
if ( button == 0 )
PlaySound "mysticism cast"
player->RemoveItem "item_a", 1 ;это строка рушит игру!!!
player->AddItem "item_b", 1
set state to 0
elseif ( button == 1 )
set state to 0 ; сделав, сбросить все
endif
endif

end

Он отлично работает без функции RemoveItem в нем, но с этой строкой игра рушится. Причина в том, что скрипт присоединен к item_a, а так как данный скрипт удалит этот предмет, то это обрушит игру. Так что эта идея должна реализовываться посредством глобального скрипта.


....будь умнЕЕ!!...
 
  • Страница 1 из 1
  • 1
Поиск:


Copyright MyCorp © 2024Конструктор сайтов - uCoz