Home Random Page


CATEGORIES:

BiologyChemistryConstructionCultureEcologyEconomyElectronicsFinanceGeographyHistoryInformaticsLawMathematicsMechanicsMedicineOtherPedagogyPhilosophyPhysicsPolicyPsychologySociologySportTourism






Player -> Position 29872, -82108, 578, 180 13 page

if ( 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
(для внешних)(float принимаютсяс дополнениями)

 

PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “cellID”
(для внутренних / внешних ячеек) (float принимаются с дополнениями)

 

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: это можно обойти, используя скрипт на самом объекте, тогда можно опустить стрелку в функции.)


DinkumThinkum добавил:

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

 

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

Пример:

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


Date: 0000-00-00; view: 769


<== previous page | next page ==>
Player -> Position 29872, -82108, 578, 180 11 page | Player -> Position 29872, -82108, 578, 180 14 page
doclecture.net - lectures - 2014-2024 year. Copyright infringement or personal data (0.01 sec.)