Mafia-Game Forum

Mafia-Game Forum (https://mafia-game.ru/forum/index.php)
-   Скриптинг (https://mafia-game.ru/forum/forumdisplay.php?f=10)
-   -   Вопросы по скриптингу (https://mafia-game.ru/forum/showthread.php?t=23)

Melhior 10.02.2021 14:10

Модель фонаря как вставлена? Как Things? Почему второй параметр у human_linktohand 18? Ведь берется номер фрейма, а не номер оружия.

Если брать этот кусок,

Развернуть для просмотра

Код:

dim_act 5
dim_frm 1
dim_flt 1

findactor 0,"Tommy"
findactor 1,"f_light2"
findactor 2,"2baterkaon"
findactor 3, "2baterka"
findactor 4, "f_light_overview"
findframe 0,"f_light"

label 1
detector_waitforuse
frm_seton 0, 0
playsound "skog1.wav", 1, 50, 1, 2
wait 200
human_addweapon 0, 18, 0, 0
wait 500
///human_linktohand 0, 18, LEFT
console_addtext 3418
act_setstate 2, active
act_setstate 3, active
act_setstate 4, active
end

[свернуть]

а findframe 0,"f_light" это модель фонаря, то должно быть human_linktohand 0, 0, LEFT

alex5995 10.02.2021 15:09

Модель фонаря как вставлена как Things в BSV6.
Цитата:

Сообщение от Melhior (Сообщение 13909)
Ведь берется номер фрейма, а не номер оружия.

Я пробовал и так и эдак в разных вариантах.
Цитата:

Сообщение от Melhior (Сообщение 13909)
а findframe 0,"f_light" это модель фонаря, то должно быть human_linktohand 0, 0, LEF

Да я и так вроде тоже делал. Ты сам пробовал на практике, у тебя работает?

Melhior 10.02.2021 15:38

Цитата:

Сообщение от alex5995 (Сообщение 13910)
Да я и так вроде тоже делал. Ты сам пробовал на практике, у тебя работает?

Я сигарету давал. Всё работало. Могу предложить такой костыль: В MWE привязываешь модель фонаря к руке. Для этого фонарь размещаешь в руке и в Parent фонаря вместо Primary sector прописываешь Tommy.l_hand. Сохраняешь. А потом в скриптах через frm_seton спрятать.

Правда не уверен будет ли фонарь перемещаться вместе с игроком. Но попробуй. Лично я так привязываю фрейм камеры, а потом скриптом делаю камера лок и фиксирую командблоками и бесконечным циклом.
И получается вот так (первые 16 секунд)

Развернуть для просмотра

[свернуть]

alex5995 10.02.2021 17:01

Ладно, спасибо, поковыряюсь ещё на досуге. Уж больно нелепо смотрится поднятая рука с лайтом без модельки фонаря. Не понятно только, если возможно прикрепить лайт к руке, то почему нельзя сделать это с предметом.
В принципе идея изначально вставить модель в руку Томми и засетонить фрейм модели на нуль не плоха, но есть маленький нюанс - после загрузки сохранения 0 меняется на 1. И если Томми не будет поднимать руку, то вполне приемлем такой вариант. Но если он будет использовать двуручное оружие, биту, к примеру. Какую картину игрок будет лицезреть? Ладно если фонарь(лайт) включен, полбеды, можно с этим как-то смириться, да и в любом случае видимо придётся. Вот не плохо было бы сделать: если левая рука занята то фонарь(модель) падал бы на пол.

Добавлено через 55 минут
А лучший вариант реализации фонаря - прикрепить лайт на лоб Томми и обойтись без всех этих заморочек.

GOLOD55 19.02.2021 10:56

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

alex5995 19.02.2021 14:42

Для меня это всё сложно: "хайполимодель", "системные допдумми в кистях" - тёмный лес для меня. И в Занозе я к сожалению не шарю.
Лайт привязан к левой руке Томми и когда он поднимает руку вместе с рукой позиционируется выше и лайт. Нельзя ли изначально как-то сместить лайт позиционно относительно левой руки повыше на метр-полтора? Проще говоря "убедить лайт" в том, что рука находится выше. Ну как-то так.
Идею реализации фонаря взял из Boz мода.

Abradox 19.02.2021 16:10

хайполимодель Тома - эта модель, которая используется в катсценах (заставках на игровом движке). Она более детализирована, в ней отдельные глазные яблоки (у обычной модели глаза нарисованы на текстуре головы), кисти рук, на которых раздельные пальцы.

Firefox3860 19.02.2021 16:39

alex5995, фонарь нужен в руке в определённый момент или на протяжении всей миссии?

upd: понял, в моменте.

Могу предложить такой вариант. Сначала создать дополнительный фрейм для фонаря. В BSV - тип other без скрипта. Эти детекторы в игре невидимы. Надо привязать его жёстко к руке Тома на всё время, прописав ему в Parent строку "Tommy.l_hand" и настроив положение в MWE. Этот объект будет играть роль якоря для модели фонаря, которую в нужный момент надо расположить в его месте. Чтобы расположить один фрейм на месте другого, придётся использовать команды считывания и назначения координат и ротаций. То есть сначала считать место якоря - frm_getworldpos и frm_getworldrot, потом назначить его фонарю - frm_setpos и frm_setrot. Команды со словом "world" нужны, потому что якорь привязан к руке, а место для фонаря надо получить относительно Prim-сектора. после перемещения фонарь надо привязать к якорю командой frm_linkto.

Должно получиться, что фрейм будет двигаться вместе с рукой, таская за собой постоянно фонарь. При этом положение фонаря можно регулировать настройкой координат и ротаций фрейма в MWE. Идея такая, насчёт реализации надо проверять, вылезут ли какие-то подводные камни.

Фонарь должен быть именно простой моделью (Building), а не физ. объектом (Things), потому что актор физ. объекта не позволит ему перемещаться в пространстве вместе с фреймом.

alex5995 19.02.2021 17:27

Цитата:

Сообщение от Firefox3860 (Сообщение 13989)
фонарь нужен в руке в определённый момент или на протяжении всей миссии?

В моменте, когда Том поднимает руку. Естественно, если выбран в инвентаре. Неплохо было-бы если он исчезал(модель, не лайт) при использовании биты, автомата, кулаков тоже.
Цитата:

Сообщение от alex5995 (Сообщение 13912)
А лучший вариант реализации фонаря - прикрепить лайт на лоб Томми и обойтись без всех этих заморочек

Или просто повыше на метр, что-бы не использовать скрипт анимации для подсветки поверхностей столов, полок, стеллажей.

Firefox3860 19.02.2021 17:34

alex5995, а я так и не понял, чем варианты с human_linktohand и тем, чтобы сделать фонарь оружием, не подходят?

Цитата:

Сообщение от alex5995 (Сообщение 13912)
А лучший вариант реализации фонаря - прикрепить лайт на лоб Томми и обойтись без всех этих заморочек.

Тогда можно просто привязать модель фонаря к тому с заданными координатами и только скрывать и показывать лайт когда надо.

alex5995 19.02.2021 18:28

Изначально я планировал сделать модель фонаря в виде масляной лампы как в пенумбре или амнезии, так как лайт освещает всё пространство вокруг Г.Г. , т.е. не направленно. Направленный поток света, как это реализовано в Boz моде не освещает стены впереди из-за их больших полигонов(экономия ресурсов?).
Цитата:

Сообщение от Firefox3860 (Сообщение 13991)
чем варианты с human_linktohand и тем, чтобы сделать фонарь оружием, не подходят?

Я не знаю как это сделать на практике ориентируясь по советам твоим, GOLOD55'а и Melhior'а. Надо конечно со всем этим повозиться, но как убирать(визуально) модель из рук при применении двуручного оружия? Скриптом? А если без оружия, на кулачках мочить врагов, с фонарём в руке? Не серьёзно, так можно лампу разбить и врага маслом облить:D:angry:
Цитата:

Сообщение от Firefox3860 (Сообщение 13991)
Тогда можно просто привязать модель фонаря к тому с заданными координатами и только скрывать и показывать лайт когда надо

Так ведь лайт жёстко привязан к руке и в первую очередь важен именно он, а не модель, которая чисто для эстетики и реализма. Координаты неиспользуемого лайта вообще левые и как я понимаю при включении фонаря он перемещается во фрейм руки.
https://mafia-game.ru/forum/imgcache...uegjjegxmb.jpg
Нельзя ли сделать, что бы лайт перемещался во фрейм повыше этой самой руки?

Firefox3860 20.02.2021 16:44

Цитата:

Сообщение от alex5995 (Сообщение 13992)
Нельзя ли сделать, что бы лайт перемещался во фрейм повыше этой самой руки?

Не понимаю, повыше - это куда? и зачем, если он уже к руке привязан?

alex5995 20.02.2021 19:17

Я изложу свои суждения по дилетански, не силён я в механике движка игры, уж не обессудь.
Изначально лайт расположен в координатах где-то там... Если мы подобрали фонарь и включили его лайт по скриптовой команде перемещается в руку. Как я понимаю, к кисти руки прикреплён фрейм, который перемещается с этой кистью и моделью в целом в пространстве карты и "тащит" за собой лайт. У фрейма(руки) меняющиеся координаты, программа считывает местоположение руки и задаёт каждые новые координаты лайту. Я это к тому что: обязательно ли фрейм должен быть в кисти руки, почему бы не сместить его по оси "y" (или "z"?) относительно руки на определённую высоту. Ну как бы обхитрить программу. Какая ей разница где находится рука модели.
Цитата:

Сообщение от Firefox3860 (Сообщение 13998)
зачем, если он уже к руке привязан?

Затем что кисть опущенной руки с лайтом находится слишком низко и не освещает поверхности выше метра. Приходится использовать скрипт анимации поднятия руки, что не удобно - персонаж во время проигрывании анимки не управляем.
Firefox3860, что-бы точно понимать суть моих вопросов глянь прохождение Парадонца на ю-тубе, где используется фонарь. Mafia Undertown - Darkness.

Firefox3860 22.02.2021 01:37

Цитата:

Сообщение от alex5995 (Сообщение 14001)
Я это к тому что: обязательно ли фрейм должен быть в кисти руки, почему бы не сместить его по оси "y" (или "z"?) относительно руки на определённую высоту. Ну как бы обхитрить программу. Какая ей разница где находится рука модели.

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

alex5995 22.02.2021 12:29

Цитата:

Сообщение от Firefox3860 (Сообщение 14014)
Можно задать фрейму-якорю любое местоположение относительно руки, и к нему будет привязываться лайт

Цитата:

Сообщение от Firefox3860 (Сообщение 14014)
лучше тогда просто к самому тому привязать

Вот об этом я и талдычу уже который пост. Не подскажешь, как это сделать практически?

KlassenAS 22.02.2021 18:20

Цитата:

Сообщение от alex5995 (Сообщение 14018)
Вот об этом я и талдычу уже который пост. Не подскажешь, как это сделать практически?

Когда привязываешь фрейм А к фрейму В , то местоположение фрейма В становится нулевыми координатами для фрейма А.
Поэтому просто задаёшь фрейму А координаты командой frm_setpos (или как её там) и это будут координаты фрейма А относительно фрейма В.
После привязывания фрейма, естественно.

Firefox3860 23.02.2021 20:03

Цитата:

Сообщение от alex5995 (Сообщение 14018)
Вот об этом я и талдычу уже который пост. Не подскажешь, как это сделать практически?

А у тебя в миссии есть актор Тома в явном виде? Во фрирайде, например, его нет (игра автоматически вставляет). Если есть, то надо сделать так. Сначала загружаешь файл миссии в BSV. Создаёшь объект other без скрипта. Потом открываешь миссию в MWE любой версии, находишь этот фрейм. В окне свойств в строке Parent пишешь ему имя актора Тома. Теперь фрейм привязан к нему, и его координаты отсчитываются от него. Теперь можно задать эти координаты уже как тебе надо, хоть повыше, хоть пониже. По идее, таким образом фрейм должен везде следовать за Томом, сохраняя заданное смещение.

alex5995 23.02.2021 20:37

Цитата:

Сообщение от Firefox3860 (Сообщение 14030)
у тебя в миссии есть актор Тома в явном виде

Для своих модов я беру чистую сцену их папки "Modding", скачанную из интернета. Уж не знаю, актор Тома здесь в явном виде или игра его автоматически вставляет.
Цитата:

Сообщение от Firefox3860 (Сообщение 14030)
Если есть, то надо сделать так

А если нет, что надо сделать?
Цитата:

Сообщение от Firefox3860 (Сообщение 14030)
таким образом фрейм должен везде следовать за Томом

А как привязать лайт к фрейму, что писать в скрипте вместо "Tommy.l_hand"?

Firefox3860 23.02.2021 22:02

Цитата:

Сообщение от alex5995 (Сообщение 14031)
Для своих модов я беру чистую сцену их папки "Modding", скачанную из интернета.

Значит, есть. Там он Tommy называется, стандартно.
Цитата:

Сообщение от alex5995 (Сообщение 14031)
А как привязать лайт к фрейму, что писать в скрипте вместо "Tommy.l_hand"?

Название того объекта, к которому надо привязать, то есть этого фрейма. Только это не вместо "Tommy.l_hand", а в команде findframe для последующей привязки командой frm_linkto.

правда, я не уверен, сработает ли такая привязка с лайтом. изначально я предполагал, что это будет модель фонаря.

alex5995 23.02.2021 23:06

Ладненько, с фонарём надеюсь как нибудь разберусь, когда вернусь к этому предмету. В последнее время делаю в максе городские локации - входябельные здания, улицы, заборы и т.п. Когда есть возможность(и желание) всем этим заниматься всё свободное время на это уходит, как-то пока не до фонаря. Или может фонарь стал мне как-бы до фонаря:).
Есть ещё одна проблема, буквально на ровном месте, а именно: не деактивируются скрипты "poster1_2"..."poster1_6" кликая на "poster1_1" в контекстном меню.
Имеется шесть скриптов с одинаковыми координатами. При нажатии кнопки действия(Е) вызываю контекстное меню выбора, где выбираю один из постеров(в данном случае "poster1_1"). После чего остальные скрипты должны деактивироваться, а меню убраться из экрана и стать недоступным. Этого почему-то не происходит. Пробовал всяко, и через эвенты тоже - результат нулевой. Что я делаю не так?

Развернуть для просмотра


dim_act 8
dim_flt 1

findactor 0,"poster1_1"
findactor 1,"Tommy"
findactor 2, "poster1end"
findactor 3,"poster1_2"
findactor 4,"poster1_3"
findactor 5,"poster1_4"
findactor 6,"poster1_5"
findactor 7,"poster1_6"

label 1
detector_waitforuse 99970004
///detector_setsignal 0, 1
mission_objectivesclear
mission_objectives 99970000
wait 200
setevent 2, 1, 2 /с эвентами тоже не работает/
wait 300
act_setstate 3, inactive
act_setstate 4, inactive
act_setstate 5, inactive
act_setstate 6, inactive
act_setstate 7, inactive

--или скриптом /poster1end/--

dim_act 6
dim_flt 1

findactor 0, "poster1_1"
findactor 1, "poster1_2"
findactor 2, "poster1_3"
findactor 3, "poster1_4"
findactor 4, "poster1_5"
findactor 5, "poster1_6"

label 101
goto 101

event 1
wait 300
///act_setstate 0, inactive
act_setstate 1, inactive
act_setstate 2, inactive
act_setstate 3, inactive
act_setstate 4, inactive
act_setstate 5, inactive

[свернуть]

GOLOD55 28.02.2021 23:23

а может у фонаря не настроен тип_удерживания в предметах.деф.
-
уж не помню подробности с убиранием юзалок..но на крайняк чтоб убрать юзалку можно переместить(напр на -10м по вертикали), и чтоб обновить ее положение нужно делать act_setstate хх, active. тогда юзалка сместится на 10м вниз и станет недоступной(ибо у нее радиус порядка метра).

alex5995 01.03.2021 11:43

Цитата:

Сообщение от GOLOD55 (Сообщение 14069)
может у фонаря не настроен тип_удерживания в предметах.деф.

В predmety.def много неизвестных параметров, может там нужно как-то настроить тип удержания предмета. Все мои добавленные предметы(ключи, девайсы и т.д. ) берутся либо в правую руку, либо в обе руки, либо сразу в инвентарь - здесь всё понятно.
Цитата:

Сообщение от GOLOD55 (Сообщение 14069)
юзалка сместится на 10м вниз и станет недоступной

Вроде скрипты в отличие от физ. объектов не смещаюся по команде др. скрипта. Да и зачем такие сложности. Что странно и не понятно , почему не работает act_setstate хх, inactive. Никогда такой проблемы не было, вроде всё элементарно. Деактивировать пробовал всяко: нажатием клавиши, изменением хп нпс, с эвентами и без. Может проблема в том, что эти скрипты находятся примерно в одних координатах. Но, если ты видел скрипты кодового замка в моём моде, там всё работало как надо.

alex5995 03.03.2021 19:53

GOLOD55, я и не знал, что неактивный скрипт тоже юзается. Спасибо за инфу.
Цитата:

Сообщение от alex5995 (Сообщение 14077)
Деактивировать пробовал всяко

Может я где-то до этого напартачил и ошибка моя в чём-то другом, но поменяв act_setstate хх, OFF на act_setstate хх, off деактивация скриптов заработала, только по прежнему юзаются.
Цитата:

Сообщение от GOLOD55 (Сообщение 14069)
уж не помню подробности с убиранием юзалок

Может вспомнишь как убрать эти юзалки?

GOLOD55 05.03.2021 00:22

а если после off-ов сесть в тачку и выйти, то юзалки по-прежнему активны?
А то по идее статусы юзалок обновляются при ентом.

Как убить юзалку я не помню(и хз можно ли; надо либо плеером ее юзать, либо ..енеми натравить попробовать лол(через enemy_use_detector)), но переместить в недоступное место и обновить - вполне надежно.

alex5995 05.03.2021 12:12

Цитата:

Сообщение от GOLOD55 (Сообщение 14100)
а если после off-ов сесть в тачку и выйти

В моде, над которым щас работаю тачек нет, да и юзалки находятся в комнатах. Это не в фрирайде, карту локации леплю в максе и ставлю на чистую сцену. Енеми натравить попробовать тоже не вариант. Видимо придётся отказаться от этой фишки вообще, либо пользовать как есть, что не совсем комильфо. И что не понятно: в моём кодовом замке ненужные юзалки убирались после правильного подбора кода(andertown mod, dungeon). Надо будет покопаться в этих скриптах, давно их написал, не помню что да как. Ладно, спасибо за содействие.

GOLOD55 14.03.2021 23:39

а шо если actor_delete? оно суровее.

alex5995 15.03.2021 14:20

пробовал, тоже бестолку

CurtisTea 04.05.2021 19:24

На моей памяти даже при off'е скрипта юзалка все равно оставалась и исчезала только когда её заюзаешь. И когда я такие механики писал то делал именно как Голод описал выше: прячешь куда-то ненужную юзалку (её актор) и активишь ещё раз чтоб обновить её (юзалки) местоположение. Я кажется перед этим ещё и инактивил её чтоб сработало... не помню точно

alex5995 07.05.2021 10:06

CurtisTea, Идея в целом такова. На стене постер с отсылкой на известную игру. Нужно с одной попытки угадать к какой именно игре относится данная отсылка. При нажатии кнопки действия на постер появляется меню выбора из 10 названий разных игр. Вторым кликом выбираем строку в меню. Далее, независимо от результата постер не должен юзаться. Т.е. не должно быть второй попытки, иначе какой смысл во всём этом.
https://disk.yandex.ru/i/ye3262aLExOkiw

CurtisTea 07.05.2021 18:49

Отлично, значит каждый детектор при его юзании должен делает что ты там задумал, а потом ныкать все детекторы (в том числе и себя) куда-то в недоступное место и активить их заново.

alex5995 08.05.2021 14:54

Цитата:

Сообщение от CurtisTea (Сообщение 14482)
потом ныкать все детекторы (в том числе и себя) куда-то в недоступное место

Да я и это пробовал, не ныкаются, на месте остаются. И я не понял, зачем их активировать, они же и так активны?

CurtisTea 09.05.2021 05:54

Цитата:

Сообщение от alex5995 (Сообщение 14487)
зачем их активировать, они же и так активны

Ты их заново активишь на новом месте. Если не работает попробуй сперва инактивить, можешь ещё обновить местоположение через actorupdateplacement. Короче дай игре понять что ты сдвинул эти детекторы и что их надо заактивить уже в другом месте.

alex5995 09.05.2021 07:21

А вот команду actorupdateplacement я не применял, насколько помнится. Ладно, спасибо, займусь этим позже. Сейчас не до скриптов, с картой города вожусь в Максе, столько комнат и каждую надо как-то обставить. Гемор ещё тот.
И всё же не понимаю зачем заново активить детекторы, они же больше не нужны. Да и движок не помешало бы разгрузить от лишних скриптов.

CurtisTea 10.05.2021 12:16

Если ты их заново не заактивишь они останутся на том месте где были. Ну и ничего тебе не мешает выключить их после успешного перемещения)

GOLOD55 18.05.2021 01:31

активирование обновляет местоположение юзалки сдвинутого детектора, ога, шо ж непонятного.

alex5995 31.05.2021 19:13

Привет всем. Может кто-нибудь помочь мне разрешить один вопрос?
Нужно придать модели человека позу спящего за столом. В энциклопедии анимаций ничего подходящего не нашёл.

Abradox 31.05.2021 19:22

Цитата:

Сообщение от alex5995 (Сообщение 14685)
В энциклопедии анимаций ничего подходящего не нашёл.

А как же поза водителя убитого за рулем или пассажира?

alex5995 31.05.2021 19:39

А вот там я и не смотрел. Короче, идея такова. Заходим в комнату - за столом застрелившийся полицейский, лужа крови, предсмертная записка.
Убитый за рулём или пассажир в этой ситуации будут выглядеть более-менее естественно?

Firefox3860 31.05.2021 19:49

Вспомнилась подходящая анимация. В баре сальери когда сидят люди за стойкой (например, 16 миссия), если их побить, то упадут на стойку руками и лицом. Надо только как-то определить имя анимации.

alex5995 31.05.2021 21:04

Цитата:

Сообщение от Firefox3860 (Сообщение 14689)
Надо только как-то определить имя анимации

В банке 19 миссии, если мы убиваем сидящих клерков, они тоже принимают подходящую позу. Знать бы, что это за анимация. В каком-то моде в баре морелло тоже что-то подобное видел.

Добавлено через 45 минут
Статическая анимация убитых нпс за столом наверняка дефолтная и заложена в движок, вряд ли она нам доступна.
Есть мысль дать персу обычную сидячую анимацию, а при входе в комнату поставить скрипт его умерщвления. Но не факт что модель примет правильную позицию по координате высоты, т.е. не провалится под столешницу и не воспарит над столом. При трагизме данного игрового момента это будет выглядеть нелепо.


Текущее время: 03:30. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.11 Release Candidate 2
Copyright ©2000 - 2025, vBulletin Solutions Inc. Перевод: zCarot