Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скрипты Morrowind.doc
Скачиваний:
91
Добавлен:
29.10.2018
Размер:
2.81 Mб
Скачать

Перемещение объекта в его оригинальную позицию

SetAtStart

SetAtStart

Object_ID -> SetAtStart

Эта функция сбрасывает объект в его оригинальную позицию, до любого движения или вращения, в ту, которая задана в редакторе. Для примера смотри скрипт с двигающейся платформой в главе “движения вдоль координат мира”. Смотри функцию Move для примера скрипта.

Помещение предмета рядом с игроком

[no fix] PlaceAtPC, "Object_ID", count_enum, distance_enum, direction_enum

PlaceAtPC, "Secret Message", 0, 30, 1

PlaceAtPC, " ancestor_ghost", 1, 256, 1

Эта функция помещает новую копию объекта "Object_ID" рядом с игроком. Функция позволяет задать направление появления объекта по отношению к положению игрока и дистанцию (в пунктах). Если это место небезопасно (в воздухе, в стене и т.д.), то объект будет помещен с другой стороны или прямо у игрока под ногами. (Опечатка: Спасибо Isildur и Esteban. Они указали, number_enum и distance_enum должны были стоять наоборот).

направления:

0 = front впереди

1 = back сзади

2 = left слева

3 = right справа

Создание предметов рядом с объектом

PlaceAtMe "Item_ID" count_enum, distance_enum, direction_enum

Object->PlaceAtMe ‘Item_ID’ count_enum distance_enum direction_enum

Функция PlaceAtMe работает так же, как PlaceAtPC только без привязки к игроку. Bloodmoon использует ее для создания атакующих в разных местах в зависимости от расстояния до игрока. Это позволяет симулировать большое количество оппонентов, которые как будто постепенно подходят к месту схватки.

;ЭТО СОЗДАЕТ ОХОТНИКА В ПОДХОДЯЩЕМ МЕСТЕ, УВЕЛИЧИВАЕТ СЧЕТЧИК И СБРАСЫВАЕТ ТАЙМЕР

if ( popA == 1 )

"active_BM_hunter1"->PlaceAtMe skaal_hunter 1 1 1

set huntercount to ( huntercount + 1 )

set timer to 0

elseif ( popB == 1 )

"active_BM_hunter2"->PlaceAtMe skaal_hunter 1 1 1

set huntercount to ( huntercount + 1 )

set timer to 0

elseif ( popC == 1 )

"active_BM_hunter3"->PlaceAtMe skaal_hunter 1 1 1

set huntercount to ( huntercount + 1 )

set timer to 0

endif

Создание копий объектов с помощью PlaceItem

[no fix] PlaceItem "object ID", float_var_X, float_Y, float_Z, float_Zrot

[no fix] PlaceItemCell "object ID", "cellID", X, Y, Z, Zrot

Эти функции создают новые копии объектов. PlaceItem создаст объект "Object ID" в координатах (X, Y, Z) с вращением по оси Z равном Zrot в текущей локации. Z_Rot устанавливается не в градусах (0-360°) а в минутах (1° = 60 min): так что, если хотите повернуть кого-то на восток, пишите 5400. На юг - 10800. Запад - 16200.

Функция принимает локальные переменные типа float. PlaceItemCell делает тоже самое, но также позволяет указать ячейку, в которой будет создан предмет, включая внешние ячейки.

Это позволяет добавлять в мир предметы без предварительно расположения их в редакторе.

JOG прислал следующую инфу по PlaceItemCell:

Ну, когда я впервые попробовал PlaceitemCell, я подумал, что это очень хорошая функция, чтобы ставить предметы прямо в игре, без предварительной их установки в редакторе. Однако я скоро понял, что нельзя обращаться к таким объектам через скрипты (Например удалять их). Скрипт не будет компилироваться до тех пор, пока хотя бы одна копия объекта используется, и тогда удаление будет относиться к этому первому объекту, то есть все равно нужно использовать PositionCell.

(Примечание от GBG: это можно обойти, используя скрипт на самом объекте, тогда можно опустить стрелку в функции.)

DinkumThinkum добавил:

PlaceItemCell могла бы быть великолепной функцией для того, что я задумывал, пока я не обнаружил, что установленные таким образом NPC исчезают при сохранении и загрузке, если игрок не побывал в ячейке с ними.

(Примечание от GBG: этого можно избежать, если сделать установку NPC зависимой от нахождения игрока в ячейке. Я все равно думаю, что PlaceItem очень полезная функция.)

Пример:

При помещении этого скрипта на предмет, во время активирования предмета будет задан вопрос о типе объекта, а затем создан этот объект в 100 единицах над активированным предметом с углом вращения 45 градусов. Если выбран ключ, то ключ будет помещен в ячейку “key room”.

Begin makethingsimple

short questionAsked

short button

float myX

float myY

float myZ

if ( MenuMode )

return

endif

if ( OnActivate == 1 )

if ( questionAsked == 0 )

MessageBox, "Создать новый..." "...Горшок" "...Ключ"

set questionAsked to 1

set myX to GetPos X

set myY to GetPos Y

set myZ to GetPos Z + 100

endif

endif

if ( questionAsked != 0 )

if ( questionAsked == 1 )

set button to GetButtonPressed

if ( button == -1 )

else

if ( button == 0 )

PlaceItem "Misc_pot_redware_01" myX myY myZ 45

elseif ( button == 1 )

PlaceItemCell "misc key" "key room" myX myY myZ 45

endif

set questionAsked to 0

set button to –1

endif

endif

endif

end