Sm1LeR | Дата: Суббота, 10.11.2007, 20:59 | Сообщение # 1 |
Болтун
Группа: Администраторы
Сообщений: 41
Статус: 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, а так как данный скрипт удалит этот предмет, то это обрушит игру. Так что эта идея должна реализовываться посредством глобального скрипта.
....будь умнЕЕ!!...
|
|
| |