Прежде чем задавать вопрос - посмотрите в >> КАРТОТЕКЕ << Возможно, там уже есть готовый ответ.
Тема предназначена для общих вопросов. Прежде, чем тут что-то написать, посмотрите другие темы этого раздела. Вполне возможно, что они больше соответствуют тематике вашего вопроса.
Graf, Траектория меняется в свойствах эффекта выстрела (Special Effects - Projectiles): Missile - Используется для пуль или снарядов... для всего, что двигается по прямой траектории. Lobber - Используется для гранат, мин, зажигательных смесей... для всего, что имеет вес и может подскакивать от соударения с поверхностью. Beam - Используется для энергетического/лучевого оружия, и отображается мгновенно, независимо от установленной скорости (speed) "снаряда". Flame - Используется для оружия, основанного на уроне огнем, например, для огнеметов. Пламя не останавливается при попадании в персонажа, но в остальном ведет себя как пули или снаряды.
Этот флаг отвечает за присутствие данного экземпляра в мире постоянно. При снятом флаге через время респауна после момента посещения игроком ячейки, в котором данный экземпляр объекта находится, экземпляр будет удалён из мира.
Непоняла Ведь бОльшая часть объектов не имеет этого флага. Они что - исчезают через некоторое время?
Galko, как я понял, флаг отвечает за способность взаимодействовать с другими объектами, т.к. если он не отмечен, его нельзя выбрать в linked ref и т.п.
Straight, Galko, Ё, возможно я чего то перепутал, сорри.
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Straight, Galko, Artem13, Если отметить, то это будит постоянная Ref ссылка которая будит ссылатся на объект. В осномном делается для квестов и аи пакетов.
...-Вот такой вот парадокс. Мы делаем моды для игр, в которые уже давно не играем...
Float YAchsePosition Float YAchse Short State Short DoOnce
Begin GameMode
if ( State == 0 ) Set YAchsePosition to GetPos Y Set YAchse to YachsePosition -10 SetPos Y Yachse endif endif
End
Можешь попробывать.
Добавлено (18.10.2011, 10:45) --------------------------------------------- Ipatow, Если тяжело попробывать можешь почитать:
про движение проще, двигаем объект с референсид myObject сначала надо понять куда и насколько надо двигать. Ты хочешь двигать в верх, значит по оси Z. Теперь определим на какое расстояние: а) открываем параметры объекта и смотрим в 3д дата начальное положение (для упрощения возьмем за начало 100) б) Зажав кнопку z двигаем объект к нужной точке, куда он уедит и смотрим новый 3д дата (для упрощения 150) в)от конечной точки отнимаем начальную - получаем нужное расстояние (в данном примере 50) если знак расстояния отрицательный - движение будет в низ.
(напоминает школьную задачку, из пункта а в пункт б выехал поезд, определите кого он разрежет на рельсах )
г)создаем скрипт: ;сначала как всегда имя скрипта scn TESTMOVESCRID ;теперь переменные ;точка начала движения и определитель ;текущей позиции float zApos ;точка конца движения float zBpos ;Скорость движения float zVspeed
;теперь условие выполнения: begin OnActivate ;чтобы движение небыло вечным создаем ;ограничивающие условия set zApos to myObject.getPos z Set zVspeed to 2 if ( zApos < zBpos) set zApos to (zApos + zVspeed) myObject.setPos z zApos endif end
Этот скрипт при каждом нажатии на активатор поднимает предмет на zVspeed до тех пор пока не достигнет позиции zBpos. если надо чтоб оюъект сам поднимался, то делаем чуть по другому:
;сначала как всегда имя скрипта scn TESTMOVESCRID ;теперь переменные ;точка начала движения и определитель ;текущей позиции float zApos ;точка конца движения float zBpos ;Скорость движения float zVspeed ;маркер старта float MoveStartmark ;условие запуска begin onactivate set MoveStartmark to 5 end ;теперь условие выполнения: begin GameMode ;чтобы движение небыло вечным создаем ;ограничивающие условия if ( zApos < zBpos) && (MoveStartmark == 5) set zApos to myObject.getPos z Set zVspeed to 2 set zApos to (zApos + zVspeed) myObject.setPos z zApos else set MoveStartmark to 15 endif end
Объект движения должен быть отмечен галочкой референс, Сам я именно этот скрипт не проверял, по этому в скрипте возможны орфографические ошибки (в командах), у меня в струнных баянах по подобному принципу освещение вращается. Set zVspeed to 2 меняет скорость перемещения, она не обязательно целочисленная. Скорость лучше подбирай методом процентов (расстояние между точкой а и точкой б дели на 100 - это один процент) или методом тыка, попробовал и смотри как красивее.
Инфа от MogIlA, и ещё скажи что через GetPos нельзя двигать объект.
...-Вот такой вот парадокс. Мы делаем моды для игр, в которые уже давно не играем...
Ох... В обоих примерах местоположение объекта меняется при помощи функции SetPos. То, что параметром ей передаётся значение, в получении которого когда-то до перемещения принимала участие функция GetPos... С таким же успехом можно сказать, что объект двигается с помощью "BEGIN GameMode" - оно ведь тоже есть в скрипте...
Как правило, если аппроксимировать объект цилиндром, этот узел расположен в центре основания, то есть для табуретки или гуля координата по Z будет полом.
а Х и Y тогда чем будут???? Я так понимаю в 3D пространстве X,Y,Z - это одна точка. Так где центр основания? ))) Как я понимаю любой объект в игре - это параллелепипед (только все разного размера). Если центр основания, то точка X,Y,Z должна лежать на нижней его стороне, в центре. Но в игре видимо все по-другому, хотя может я что-то не правильно делаю, в связи с этим вопрос:
Как поставить объект на пол в нескольких шагах от ГГ, строго впереди, если объект меньше размером персонажа и данного объекта нет в мире вообще?
Как поставить объект на пол в нескольких шагах от ГГ, строго впереди, если объект меньше размером персонажа и данного объекта нет в мире вообще?
Сначала определим, что такое "строго впереди". Мы будем считать, что это значит "на той же плоскости Z, что и ГГ" - то есть если ГГ идёт вверх по лестнице, то поставленный "прямо впереди в двух шагах" человек оказется по пояс в ступеньках. Обойти эту проблему нельзя, поскольку мы не имеем возможности узнать, что именно расположено в нужной нам точке, нет ли там уже предметов, каков рельеф местности... Мы поступаем так, будто ГГ стоит на идеально ровной горизонтальной полоскости, и на эту же плоскость будет помещён наш предмет.
Code
SCRIPTNAME SampleFossyScript REF tmpRef FLOAT tmpVar FLOAT tmpAngle BEGIN GameMode IF {не-надо-помещать-объект} RETURN ENDIF SET tmpRef TO Player.PlaceAtMe {объект-BaseID} 1 tmpRef.Disable SET tmpVar TO Player.GetPos Z tmpRef.SetPos Z tmpVar SET tmpAngle TO Player.GetAngle Z SET tmpVar TO Sin tmpAngle SET tmpVar TO tmpVar * {несколько-шагов} SET tmpVar TO tmpVar + Player.GetPos X tmpRef.SetPos X tmpVar SET tmpVar TO Cos tmpAngle SET tmpVar TO tmpVar * {несколько-шагов} SET tmpVar TO tmpVar + Player.GetPos Y tmpRef.SetPos Y tmpVar IF tmpAngle > 180 SET tmpAngle TO tmpAngle - 180 ELSE SET tmpAngle TO tmpAngle + 180 ENDIF tmpRef.SetAngle Z tmpAngle tmpRef.Enable END
Я так понимаю в 3D пространстве X,Y,Z - это одна точка. Так где центр основания?
Я уже не помню. Тут два варианта - либо Z в координатах объекта указывает именно основание, либо середину высоты объекта. Поэкспериментируй. Насчёт строго перед - например в функции PlaceAtMe за направление отвечает четвёртый параметр.
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
в функции PlaceAtMe за направление отвечает четвёртый параметр
Гмм... Разве это починили? Прямо по этой ссылке в примечаниях написано "The Distance and Direction parameters do not work. No matter what is specified for them, the created reference will be placed in safe location nearby the calling reference." Говоря по-русски, "хотя компилятор и не выдаёт ошибку при указании третьего и четвёртого параметра функции, эти параметры игнорируются системой, и помещается объект в какое-нибудь безопасное место возле вызывающего, что бы в третьем-четвёртом параметрах ни указывалось."
Ipatow, да вроде боле-менее работают. Я, правда, давненько и не очень подробно проверял. Однако, емнип, спереди/сзади работает корректно при наличии этого самого безопасного пространства, т.е. не занятого коллизиями.
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Ipatow, да вроде боле-менее работают. Я, правда, давненько и не очень подробно проверял. Однако, емнип, спереди/сзади работает корректно при наличии этого самого безопасного пространства, т.е. не занятого коллизиями.
Хорошо бы если так - ты видел, как пришлось извратиться в скрипте вместо одного вызова функции с параметрами дистанция/направление... Но всё-таки прежде чем применять на практике (когда/если придётся), нужно будет перепроверить. В обсуждении той же самой страницы GECK-вики видно, что довольно много людей тестировали эту функцию, пару раз меняли формулировку примечания про неработающие параметры, убирали примеры использования функции с этими параметрами и всерьёз обсуждали, а не вычеркнуть ли вообще упоминание этих параметров из синтаксиса... Без перепроверки я не доверяю этим параметрам.
У меня тут проблемка) Я вот поставил терминал, сделал там функцию активации двери, но он активируется не в ту сторону которую мне надо) Т.е. я поставил активацию двери салуна старателя в ГС, а вместо того что бы меня в салун завести, она меня в гудспрингс кидает. как сделать что бы она в салун заводила?
Asavil, Ты бы подробно рассказал, что именно хочешь ты сделать в своем моде Что должно происходить при активации терминала. А то мы тут спорили-спорили, думали-думали... и не пришли к общему мнению. Если просто - при активации терминала игрок переносился в нужное место - то это одно решение. Если ты задумал что-то иное - то и решение будет другим.
Короче, мне надо, что бы игрок при нажатии кнопки на терминале(ну там типа открыть замок или отчет о производительности), перемещался в нужную мне локу, в данном случае в салун Cтаратель. Со скриптом, который мне подкинул Ивпатоу, у меня игрок перемещается не в салун, а как бы выходит из него.
А для Asavil, добавлю в окне Object Window в Фильтре нужно написать Marker и в левой части окна отсортировав содержимое по типу (Form Type) прокрутить до конца списка - там будут два маркера XMarker и XMarkerHeading можешь выбрать любой, второй в отличие от первого задаёт направление взгляда (он такой с указателем). Вытащи маркер в Рабочее окно и установи в нужном месте. Затем двойной клик и в окне Reference в поле Reference Editor ID впиши название Ref этого маркера например AAAStartAttackRef здесь AAA - для быстрого поиска (в GECK при сортировке по ID сначала идут объекты начинающиеся на цифру, а затем на букву по алфавиту) StartAttack - имя может быть любым, но лучше информационное имя ( маркер старта атак) Ref - по этому окончанию мы знаем, что это Ref ссылка на уникальный объект. Флаг Persistent Reference - (разрешить связи) у этих маркеров всегда включён. Место высадки готово. Ну а дальше по советам выше В терминале ввести запись для новой кнопки, а в поле ResultScript вписать что советовал самый первый в начале этого обсуждения Straight, player.moveto AAAStartAttackRef здесь player объект, moveto функция (команда) AAAStartAttackRef маркер (место) Asavil Вот теперь у тебя точно получится! Ты теперь знаешь всё про маркеры - очень тебе повезло, люди годами собирают такой объём информации! Шутка. Пока.
Мы вышли из дома, когда во всех... Поздно вышли!
Изменение репутации для пользователя Galko
GalkoOffline
Сообщение №600
написано: 18 октября 2011, 15:16
| Отредактировано: Galko - 18 октября 2011, 15:19
только не при активации, а при активации определенной кнопки в терминале)
Это один хрен. Тогда как тебе в саааамый первый раз советовали - в поле ResultScript вписать команду - Player.moveto XXX (ХХХ - это маркер, размещенный в нужной тебе локации) Например: тебе нужно чтоб ГГ перелетел в салун Старатель. Открываешь в ГЕКК ячейку интерьера салуна и перетягиваешь в неё -XMarkerHeading из окна объектов (такой красный прямоугольник с уголком на одной стороне. Уголок показывает направление взгляда ГГ, когда он появится на месте маркера) Перетянув маркер в локацию, размещаешь в нужном месте салуна и кликаешь на маркере два раза. В открывшемся окне ставишь галочку Persistent Reference и прописываешь в поле Reference Editor ID референсное имя маркера ну скажем - GSPlayermarkerRef Тогда в результскрипт терминала пишешь команду Player.moveto GSPlayermarkerRef
Добавлено (18.10.2011, 19:16) --------------------------------------------- KAIN48, Печатаешь быстрее чем я... (грустно) теряю навык Хотя нет (радуеццо) Ты ж цитировал... От оно чо