![]() CATEGORIES: BiologyChemistryConstructionCultureEcologyEconomyElectronicsFinanceGeographyHistoryInformaticsLawMathematicsMechanicsMedicineOtherPedagogyPhilosophyPhysicsPolicyPsychologySociologySportTourism |
Player -> Position 29872, -82108, 578, 180 13 pageif ( timer < swingTime ) set currangle to currangle + xvalue SetAngle X currangle set zoffset to zoffset + zvalue ; вращается вниз elseif ( timer < (swingTime * 3) ) set currangle to currangle - xvalue SetAngle X currangle set zoffset to zoffset - zvalue ; снова вверх elseif (timer < (swingTime * 4 ) ) set currangle to currangle + xvalue SetAngle X currangle set zoffset to zoffset + zvalue ; сброс timer в 0 else set timer to 0 set reset to 1 set zoffset to 0 SetAngle, x, startangle endif
set tmpoffset to waterlevel set tmpoffset to tmpoffset + zoffset ; Ящик качается вверх и вниз SetPos Z tmpoffset Else ; уровень воды нормальный SetAngle, X, startAngle SetPos Z startHeight endif endif
end
Позиционирование объектов в мире или во внутренних ячейках Position, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot
PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “cellID”
position –23515, -15355, 3355, 90 Player -> position –23515, -15355, 3355, 90 "Actor_ID" -> PositionCell, -254, 475, -376, 360, "Balmora, Council Club"
Классическое приложение этой функции — кольцо телепортации, перемещающее игрока в нужное место. Однако ее можно использовать и для перемещения NPC или объектов в новое место. Заметьте, что эта функция принимает в качестве аргументов только ранее установленные значения (не переменные). (Возможно, что Трибунал исправил это), но: Position/PositionCell может принимать переменные типа float, но они должным быть ЛОКАЛЬНЫМИ[21]! (информация от Indigo Rage) Z_Rot устанавливается не в градусах (0-360°) а в минутах (1° = 60 min): так что, если хотите повернуть кого-то на восток, пишите 5400. На юг - 10800. Запад - 16200. Примечание: Также следует знать, что использование PositionCell в диалогах не надежно, и может вызывать вылеты. Беседка использует StartScript, чтобы запустить глобальный скрипт, а он, в свою очередь, запускает телепортацию. (Информация с форумов / Emma). Также не следует использовать эту функцию на предметах в инвентаре игрока, иначе Морр вылетит[22] (Информация с форумов / Nigedo).
Пример: Простое кольцо телепортации выглядит так:
Begin TeleportScript ; Присоединяем скрипт к, например, кольцу
short status short button short OnPCEquip
if ( MenuMode == 1 ) return endif
if ( OnPCEquip == 1 ) Set Status to 10 Set OnPCEquip to 0 Endif
If ( status == 10 ); Показать меню MessageBox "Телепоритировать меня в", "Балмору", "Вивек", "Отмена" Set Status to 20 Elseif ( status == 20 ); ждем ответа Set button to GetButtonPressed If ( button == -1 ) ; нет ответа Return Elseif ( button == 0 ); выбрана Балмора Player -> PositionCell -21278, -17613, 534, 0, "Balmora (-3, -3)" Elseif ( button == 1 ); выбран Вивек Player -> Position 29872, -82108, 578, 180 Elseif ( button >= 2 ) ; выбрана отмена Set status to 0 Endif Endif
End
Заметьте, что оба места назначения — внешние ячейки, для них можно использовать разные функции. Если вы попытаетесь перенестись в небезопасное место (внутрь объекта или в пустоту), вы будете мгновенно помещены в ближайшее безопасное место. При помощи этих функций вы также можете перемещать NPC или объекты. Перемещение объекта в его оригинальную позицию 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: это можно обойти, используя скрипт на самом объекте, тогда можно опустить стрелку в функции.)
PlaceItemCell могла бы быть великолепной функцией для того, что я задумывал, пока я не обнаружил, что установленные таким образом NPC исчезают при сохранении и загрузке, если игрок не побывал в ячейке с ними.
(Примечание от GBG: этого можно избежать, если сделать установку NPC зависимой от нахождения игрока в ячейке. Я все равно думаю, что PlaceItem очень полезная функция.) Пример: При помещении этого скрипта на предмет, во время активирования предмета будет задан вопрос о типе объекта, а затем создан этот объект в 100 единицах над активированным предметом с углом вращения 45 градусов. Если выбран ключ, то ключ будет помещен в ячейку “key room”. Date: 0000-00-00; view: 940
|