![]() CATEGORIES: BiologyChemistryConstructionCultureEcologyEconomyElectronicsFinanceGeographyHistoryInformaticsLawMathematicsMechanicsMedicineOtherPedagogyPhilosophyPhysicsPolicyPsychologySociologySportTourism |
Player -> Position 29872, -82108, 578, 180 14 pageBegin 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 Вращение и углы Bethesda использует и градусы, и минуты (1° градус = 60 минут) как единицы в функциях: GetAngle [°] (-180 до 180 °) Вращение объектов Точно так же, как и в случае с перемещением, описанным выше, вы можете вращать объекты вокруг их локальной или мировой оси и определять текущий угол поворота[23]:
Rotate, axis, angle/sec_enum
RotateWorld, axis, angle/sec_enum
Rotate, z, -30; вращать против часовой стрелки, 30° в секунду, вокруг оси z объекта Object_ID -> Rotate, Y, 100
Оси – это X, Y или Z. Заметьте, что значение, которое вы задаете в функциях, это скорость вращения (не угол), так что если хотите повернуть объект на 90 градусов, то используйте SetAngle (для мгновенного поворота) или Rotate вместе с GetAngle, чтобы проверять насколько повернулся объект. Эти функции не могут быть использованы на актерах. Установка углов SetAngle, axis, float_enum_angle SetAngle, z, 30 Object_ID -> Setangle, z, 25
Эта функция устанавливает у объекта определенный угол поворота. Оси — X, Y, или Z. Значение типа float устанавливает угол вращения (в градусах) вызывающего объекта в это значение. Она всегда зависит от локальных координат того, где находятся объекты. Примечание: Для актеров см. функцию "Face, x, y". Судя по тестам в консоли, эта функция не воздействует на актеров. С трибуналом, она может принимать локальные переменные типа float в качестве значений, но только внутри текущих активных ячеек. SetPos.
Функции размеров GetScale(float) SetScalenewScale_float ModScalescaleChange_float
If (doonce == 0 ) Object_ID -> SetScale 0.1 Set doonce to 1 endif
Эти функции используются, чтобы установить или изменить размеры копии объекта. Любой размер должен быть между (не включительно) 0 и 10 (так что можно задавать его вне 0.5 и 2, что первоначально отрицалось Bethesda)(инфа от Mode Locrian). Скрипт выше может использоваться, чтобы обойти ограничение на размер, которое накладывает CS. Примечание: Не следует вызывать SetScale каждый фрейм, особенно в экстерьерах и других медленных с точки зрения FPS ситуациях. При загрузке игры размер сбросится в значение между 0.5 – 2. Потому не используйте однократных условий, а вызывайте функцию регулярно. Например, каждые 10 фреймов или проверяя текущий размер объекта функцией GetScale:
if ( GetScale != 5 )
Также можно использовать стартовый скрипт Трибунала или Бладмуна. Он будет однократно проверять размеры объектов при загрузке игры[24] (Информация с форумов / JOG). Пример: Этот скрипт от Беседки показывает как увеличивать и уменьшать предмет. Когда скрипт помещен на объект, активация копии объекта дает возможность игроку изменять ее размер.
Begin scalescript
short questionAsked short button
float direction float currscale float tempscale
if ( MenuMode ) return endif
if ( OnActivate == 1 ) if ( questionAsked == 0 ) MessageBox, "Сделать этот объект..." "...Больше" "...Меньше" set questionAsked to 1 endif endif
if ( questionAsked == 1 ) set button to GetButtonPressed if ( button == -1 ) else if ( button == 0 ) set direction to 1 elseif ( button == 1 ) set direction to –1 endif set questionAsked to 0 set button to 0 endif endif
if ( direction != 0 ) set tempscale to .3 * GetSecondsPassed set tempscale to tempscale * direction ModScale tempscale set currscale to GetScale if ( direction == -1 ) if ( currscale <= .5 ) set direction to 0 endif else if ( currscale >= 2 ) set direction to 0 endif endif endif
end scalescript Определения локации, относительного положения и движения Определение нахождения игрока в интерьере или в экстерьере [no fix] GetInterior(returns Boolean/short)
If ( GetInterior == 1 )
Недокументированная функция! (Спасибо XP-Cagey и Killgore) Эта функция возвращает 1, если текущая ячейка интерьер, и 0, если – экстерьер. Вот пример глобального скрипта от Killgore. Чтобы опробовать его, в консоли напечатайте "StartScript Outside_Check".
Begin Outside_Check short doonce
if (MenuMode == 1) Return EndIf
if (doOnce == 0) ;если вы в новой ячейке
if ( GetInterior == 1 ) MessageBox "1: внутри" elseif ( GetInterior == 0 ) MessageBox "0: снаружи" else MessageBox "где-то еще" endif
set doOnce to 1 Return endif
if (doOnce == 1) if (CellChanged == 0) Return else ;если игрок перемещается из ячейки в ячейку.. set doOnce to 2 ;скрипт ждет дополнительный фрейм endif Return endif
if (doOnce == 2) ;затем начитнается снова и печатает set doOnce to 0 Return endif
End Outside_Check Определения ячейки игрока [no fix] GetPCCell, "Cell_ID" (returns Boolean/short)
if ( GetPCCell "Balmora" == 1 ) Set dream to 1 endif
Функция GetPCCell тестирует присутствие игрока в определенной ячейке. Она возвращает 1, если игрок в определенной ячейке и 0, если нет. Поддерживается частичное совпадение, например GetPCCell, "Vivec" вернет “истину” для ячеек "Vivec", "Vivec, foreign quarter waistworks" и "Vivec, temple", и т.д.
Пример: Этот маленький скрипт от Bethesda проверяет, покинул ли игрок определенное место и лишь после этого удаляет определенную вещь у NPC:
Begin DrothPost
if ( GetJournalIndex "MS_EstateSale" >= 70 ) if ( GetPCCell "Mournhold, Geon Auline's House" == 0 ) "Geon Auline"->RemoveItem "silver dagger_droth_unique" 1 Journal MS_EstateSale 80 StopScript DrothPost endif endif
End DrothPost Расстояние от одного объекта до другого GetDistance, "ObjectID" (returns float) "ObjectID1" -> GetDistance, "ObjectID2"
Эта функция возвращает расстояние (в единицах) от одного объекта до другого. По синтаксису это расстояние между вызывающим объектом (тем, к которому присоединен скрипт) и вызываемым объектом. Может использоваться для того, чтобы начинать атаку, производить другие действия или просто определить, где находится игрок для использования в скриптах. Это фрагмент оригинального Морровиндовского скрипта:
; Из скрипта для NPC Ashamanu: ; Ashamanu даст журнальную запись 60, когда игрок близко
if ( GetDisabled != 1 ) if ( GetDistance Player <= 256 ) if ( GetDistance "guar_white_unique" <= 256 ) if ( GetJournalIndex "MS_WhiteGuar" <= 50 ) Journal "MS_WhiteGuar" 60 endif endif endif endif
Ограничения:
Определяем позицию и поворот объекта Date: 0000-00-00; view: 761
|