Zander_driver 10 334 Опубликовано 16 Сентября 2014 Поделиться Опубликовано 16 Сентября 2014 (изменено) in_rest, out_rest Установленные рестрикторы для персонажа на текущей работе. in - рестрикторы из которых запрещено выходить и out - рестрикторы в которые запрещено входить. info_rest Устанавливаются рестрикторы, вне зоны которых, персонаж на текущей работе будет игнорировать раздражитель. Применительно к скриптово-сгенерированным работам, я так понимаю я могу заспавнить просто объект space_restrictor, через нет-пакет указать ему шейп желаемых размеров, и его айди вписать сюда? к самому рестриктору каких либо требований не предъявляется? (ТЧ) Изменено 16 Сентября 2014 пользователем Zander_driver Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
AndreySol 215 Опубликовано 17 Сентября 2014 Поделиться Опубликовано 17 Сентября 2014 Советую почитать настройку логики вот здесь. А где Вы, в указанных статьях, видели какие-то подробности про эти самые team, squad и group ? А общие, вскольз упомянутые, определения не сильно то и помогают... Ссылка на комментарий
Nazgool 250 Опубликовано 18 Сентября 2014 Поделиться Опубликовано 18 Сентября 2014 (изменено) ПЫСовское описание параметров team, squad и group : 1. Команда (team). Описывает принадлежность персонажа в определенному типу сталкеров. Таким образом все военные сталкеры имеют одинаковую команду, все сталкеры, находящиеся в одной группировке имеют одинаковую команду.- 0: к этой команде принадлежат: Актер, Торговец, Бармен, Представитель ученных, другие сюжетные миролюбивые персонажи. К этой команде также относятся все сталкеры-одиночки, которые по умолчанию должны быть нейтральными к актеру.- 1: к этой команде относятся все сталкеры-одиночки, которые по умолчанию должны быть врагами по отношению к актеру.- 2: Военные сталкеры, армия.- 3: Параноики, зомбированные и сумасшедшие сталкеры, которые уже с трудом могут принадлежать к какой то категории. Они сами по себе.- 4: Reserved- 5: Группировка «Долг»- 6: Группировка «Грех»- 7: Группировка «Монолит»- 8: Сталкеры анархисты из группировки «Свобода»- 9..31: Reserved2. Отряд (squad)Описывает принадлежность сталкеров из одной команды к разным группам внутри одного уровня. Это разделение существует внутри каждого уровня. Для каждой команды это разделение тоже особое. Значение отряда должно находится в пределах от 0 до 31.3. Группа (group)Описывает разбиение больших отрядов на более мелкие структурные единицы. Если такое разделение не нужно – дублирует отряд. Сталкерам одиночкам лучше давать уникальные группы. Значение группы должно находится в пределах от 0 до 31.Распределение по сквадам и группам.Сквад сталкера ставится в зависимости от уровня, на котором он спавнится.Группа ставится каждому человеку своя отдельная. Получается что на одном уровне не может быть больше чем 32 сталкеров одиночек в каждой команде. Итого 32 нейтральных, 32 злых. Если, скажем, необходимо поставить группу из трех бандитов – то всем им нужно ставить одинаковую группу. Тогда общее число сталкеров увеличится. Вообщем думаю что хватит с головой 0: Escape1: Garbage2: Agroprom3: DarkDolina4: RostokBar5:6:7:8:9:10: 11-31: Reserved изначально group использовалась для синхронизации передвижения НПС по путям, синхронизация производилась при помощи флага n в точках движения walk, а так же при условии нахождения НПС в одной группе. Ещё описание : squad. Что именно определяет этот параметр. Понятно, что если не задан, то будет значение из профиля НПС, но в целом, для чего нужен squad?Для ТЧ это скорее рудимент, оставшийся от попыток организовать отряды/группы из НПС, но так и не реализованные в игре. group. Также не ясно. Каким образом данный параметр влияет на поведение НПС?Аналогично squad - рудимент. В гулагах эти параметры практически не задействованы. Так что делай выводы. Изменено 18 Сентября 2014 пользователем Nazgool Добавлено Dennis_Chikin, 10 Ноября 2015 Таки, как высняется, не рудимент, а активно используется движком в memory_manager. 2 Ссылка на комментарий
lsclon 527 Опубликовано 19 Сентября 2014 Поделиться Опубликовано 19 Сентября 2014 (изменено) ПЫСовское описание параметров team, squad и group Описание для устаревшего билда, не совсем соответствует действительности. На самом деле параметр team, задаётся автоматически согласно комьюнити, прописанном в specific_character id и отвечает за это параметр team_default = "1". Номер team берётся из game_relations. Squad и group задаются либо в аллспавне, либо определяется\переопределяется параметрами, заданными в smart_terrain. В совокупности, эти параметры определяют отношения между нпс и синхронизируют реакцию, при воздействии на одного из нпс, принадлежащего к определённому team, squad и group. group. Также не ясно. Каким образом данный параметр влияет на поведение НПС?Аналогично squad - рудимент Как правильно задать группы внутри одного смарта - в аллспавне, в секции смарта в custom_data перечисляем группы через запятую. Например: groups = 0,1,2,3,4 Далее в скрипте гулага, где раздаются работы в function load_job, среди прочих параметров (приоритет, состояние и т.д.), можно задать для определённых работ, определённую группу из числа перечисленных в custom_data смарта. Например: prior = 7, state = {0}, group = groups[1] На что это повлияет - если для каждой работы задать свою группу, то при убийстве одного из членов гулага, у остальных нпс отношение к ГГ не поменяется. Если разделить лагерь на две группы, то при убийстве нпс, обидится только та группа, к которой он принадлежал. Остаётся только найти применение этому в игре. Изменено 19 Сентября 2014 пользователем lsclon 1 Вообще-то я белая и пушистая... Ссылка на комментарий
Romann 623 Опубликовано 22 Сентября 2014 Поделиться Опубликовано 22 Сентября 2014 Всем привет, я в скриптах не особо разбираюсь(только гулаги научился "штамповать"),вопрос такой: я скачал ,на просторах инета,нано броник , с элементами для пистолетного слота, сейчас пытаюсь сделать, новый элемент невидимости(маскировка), использовал скрипт, из соли , маск_халата, работает, но не так как нужно, если элемент поместить в слот, невидимость активируется,а если убрать, то не дезактивируется, с помощью какой функции его заставить дезактивироваться?В скрипте маск_халата использован таймер,как можно сделать без него? А так же с помощью какой функции сделать так чтоб этот элемент можно было использовать только с этим броником?А то его можно использовать с любым.. Скрипты - https://yadi.sk/d/_QXCnw6ObbASG xr_speed.script и xr_shit.script это имеющиеся элементы.. Заранее огромное спасибо всем .. Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz). Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб). Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge. Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор Ссылка на комментарий
AndreySol 215 Опубликовано 28 Сентября 2014 Поделиться Опубликовано 28 Сентября 2014 (изменено) Пытаюсь заспавненому скриптом НПСу установить story_id. Перепробовал несколько способов - безрезультатно.Пробовал так: local ser_obj = alife():create(.....) if ser_obj then local pk = m_netpk.get(ser_obj) if pk and pk:isOk() then local data = pk:get() if data then data.story_id = 125 pk:set(data) end end end и так:в se_stalker.script в STATE_Write(packet) добавилif self.cb_netpk then self.cb_netpk(self, packet) endзатем local ser_obj = alife():create(.....) if ser_obj then local pk = m_netpk.get(ser_obj, 0) if pk and pk:isOk() then pk:setCallback( function(data) data.story_id = 125 end ) end end и вот так obj_spawn = level.client_spawn_manager() function obj_spawn_callback(first, id, obj) ----- присваиваем SID объекту после выхода в он-лайн ----- local pk = m_netpk.get(obj, 0) if pk and pk:isOk() then pk:setCallback( function(data) data.story_id = 125 end ) end end local ser_obj = alife():create(.....) if ser_obj then obj_spawn:add(ser_obj.id, -1, obj_spawn_callback, 0) end Ничего не получается, НПС спавнится, берется на свободную работу в гулаг, а стори_ид ему не прописывается.Подскажите, что не так ? Не так прежде всего с самой идеей прописывать sid после перехода в онлайн. Для нафига, собственно ? Во-вторых, 4 страницы назад пост был - чем не нравится ? dc Изменено 29 Сентября 2014 пользователем Dennis_Chikin Ссылка на комментарий
AndreySol 215 Опубликовано 29 Сентября 2014 Поделиться Опубликовано 29 Сентября 2014 (изменено) Не так прежде всего с самой идеей прописывать sid после перехода в онлайн. Для нафига, собственно ? Во-вторых, 4 страницы назад пост был - чем не нравится ? dc Опять повторю - способ с он-лайном, третий из проверенных и перечисленных мной. Не нахожу, блин 4 страницы назад то что я спросил - ткните носом.... http://www.amk-team.ru/forum/index.php?showtopic=6185&p=867602 Берем функции чтения/записи непися, читаем, изменяем нужное поле, записываем все обратно. dc Изменено 29 Сентября 2014 пользователем Dennis_Chikin Ссылка на комментарий
AndreySol 215 Опубликовано 30 Сентября 2014 Поделиться Опубликовано 30 Сентября 2014 (изменено) Берем функции чтения/записи непися, читаем, изменяем нужное поле, записываем все обратно. dc А что не так в m_netpk.script ? Он что, не так как амк'шный данные нет-пакетов читает\пишет ? Изменено 30 Сентября 2014 пользователем AndreySol 1 Ссылка на комментарий
Zander_driver 10 334 Опубликовано 1 Октября 2014 Поделиться Опубликовано 1 Октября 2014 Подскажите алгоритм получения объекта, на который смотрит ГГ, при условии что мы знаем что этот объект может находиться не далее чем в трех метрах. Меня собственно больше всего интересует вопрос, как получить этот объект в ситуации, когда вповалку друг на друге лежат несколько трупов неписей, а актор смотрит на чью-то там руку или ногу торчащую из этой кучи. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Nazgool 250 Опубликовано 1 Октября 2014 Поделиться Опубликовано 1 Октября 2014 Если стоит x-ray extensions, то есть метод level.get_target_obj(). Ссылка на комментарий
НаноБот 742 Опубликовано 2 Октября 2014 Поделиться Опубликовано 2 Октября 2014 (изменено) Если ли методы для ТЧ, что бы НПС или ГГ мог видеть например гранату или другой предмет. Метод npc:see(obj), работает только для живых существ, для любого не живого объекта возвращает nil. Мне это нужно для ослепляющих гранат, т.е. видит ГГ или НПС гранату в момент взрыва или нет. В общем 4 метода. 1-й: Заспавнить взрывной предмет над реальной гранатой и тут же взорвать, по хит_колбеку понять что НПС в прямой видимости, по углу от вектора направления головы (npc:head_orientation()) и вектора хита(local_direction) определить, видит ли НПС на гранату. В общем метод работает как то не очень, и не работает для ГГ. 2-й: В момент взрыва заспавнить бота(невидимку) в точку взрыва гранаты и после определения функцией see, тут же удалить. Функция see отработает как надо, и для ГГ, и для НПС, работает только на открытом пространстве, не отработает правильно, если взорвётся высоко над землёй, и в стеснёном пространстве, возможны лаги при спауне бота. 2-й: Установить всех НПСов в радиусе поражения, создать спец пули(не видимые не большие предметы) и направить им в голову, при столкновении с геометрией спецпули отклонятся от прямой траектории. В общем через кусты не работает как надо, и ресурсоёмко, особено если много НПСов. 4-й: Трассировка. Тут всё просто, скриптовая замена той же функции see, но это только для модифицированной X - ray game.dll В общем, вопрос, если ещё какие небуть методы для это шняги. for o in npc:memory_visible_objects() do не спасет отца русской демократии ? dc Изменено 16 Октября 2014 пользователем Dennis_Chikin ...в конце концов, важен лишь, машинный код. СТАЛКЕР только для ПК! Ссылка на комментарий
Сашка_из_Шебекино 15 Опубликовано 15 Октября 2014 Поделиться Опубликовано 15 Октября 2014 Всем здравствуйте! Ребят подскажите, как можно сделать, чтоб у Гг при закрытии окна торговли удалялись все деньги. Ссылка на комментарий
Struck 61 Опубликовано 15 Октября 2014 Поделиться Опубликовано 15 Октября 2014 @Сашка_из_Шебекино, db.actor:give_money(-db.actor:money()) 1 Ссылка на комментарий
Struck 61 Опубликовано 15 Октября 2014 Поделиться Опубликовано 15 Октября 2014 @Сашка_из_Шебекино, в инфо коллбек на мой взгляд будет оптимальным вариантом, проверяй наличие ui_trade_hide, и далее отбирай деньги. Только этот инфопоршень немного хитро выдается, при начале диалога в том числе, так что подумай логически как написать функцию, которая будет оповещать о наличии ui_trade_hide в нужный тебе момент и получишь, что нужно. Ссылка на комментарий
kalmah(13) 2 Опубликовано 16 Октября 2014 Поделиться Опубликовано 16 Октября 2014 (изменено) Доброго времени суток. --------------------------------------------------------------------------------Функции изменения глосс фактора.-------------------------------------------------------------------------------------------function dump_world_rain()if level.get_weather() == "sect_default_weather_rain" thenget_console():execute("r2_gloss_factor 6")endfunction dump_world_groza()if level.get_weather() == "sect_default_weather_groza" thenget_console():execute("r2_gloss_factor 8")endfunction dump_world_pasmurno()if level.get_weather() == "sect_default_weather_pasmurno" thenget_console():execute("r2_gloss_factor 2")endfunction dump_world_clear()if level.get_weather() == "sect_default_weather_clear" thenget_console():execute("r2_gloss_factor 0.5")end---------------------------------------------Функция апдейта-----------------------------------------------------function update_gloss()kalmah_dump.dump_world_rain()kalmah_dump.dump_world_groza()kalmah_dump.dump_world_pasmurno()kalmah_dump.dump_world_clear()endfunction dump_start()kalmah_dump.dump_world_rain()kalmah_dump.dump_world_groza()kalmah_dump.dump_world_pasmurno()kalmah_dump.dump_world_clear()end Написал такой скрипт, правильно ли все написано? И как писать апдейт? Ищу человека, который поможет со скриптами, а так же научит чему нибудь, например писать апдейт, и т.дМой личный опыт работы со скриптами составляет 2.5 балла из 5. Переписать скрипт, добавить что то по аналогии я могу, подключить тоже, выдрать скрипт тоже, но вот с написанием с нуля возникают проблемы. Изменено 16 Октября 2014 пользователем kalmah(13) Ссылка на комментарий
Kirgudu 1 217 Опубликовано 16 Октября 2014 Поделиться Опубликовано 16 Октября 2014 @kalmah(13), судя по тому коду, который ты привёл, познания в языках программирования вообще и Lua в частности у тебя минимальные. В этих условиях обучение написанию скриптов с нуля становится слишком обширной задачей, на что тут вряд ли кто-то способен просто из-за недостатка свободного времени. Так что, имхо, пока надо самостоятельно разбирать примеры, запоминать, пробовать применить и т. д.Впрочем, если найдётся кто-то, кто сможет предложить тебе помощь в обучении - буду только рад. Если же говорить конкретно, тебе для начала следует запомнить базовые конструкции языка, такие как function ... end, if ... then ... end, if ... then ... else ... end, for ... do ... end и другие. В частности, в твоих функциях вида function dump_world_rain() if level.get_weather() == "sect_default_weather_rain" then get_console():execute("r2_gloss_factor 6") end ты функцию объявляешь, открываешь условие, что-то делаешь, затем закрываешь только условие - а функция остаётся открытой. В то время как в конце обязательно должен стоять ещё один end: function dump_world_rain() if level.get_weather() == "sect_default_weather_rain" then get_console():execute("r2_gloss_factor 6") end end иначе весь модуль будет невалидным. 1 Инструмент Ссылка на комментарий
Barmolini 1 Опубликовано 16 Октября 2014 Поделиться Опубликовано 16 Октября 2014 (изменено) Просто оставлю это здесь: weathers = { sect_default_weather_rain = 6, sect_default_weather_groza = 8, sect_default_weather_pasmurno = 2, sect_default_weather_clear = 0.5, } function UpdateGlosFactor() get_console():execute("r2_gloss_factor "..(weathers[level.get_weather()] and weathers[level.get_weather()] or get_console():get_float("r2_gloss_factor"))) end P.S. Я всё же считаю, что лучше привязать значение глос фактора к интенсивности дождя, тогда не нужно будет зависеть от имён погодных секций. Изменено 16 Октября 2014 пользователем Barmolini 1 Ссылка на комментарий
Kirgudu 1 217 Опубликовано 16 Октября 2014 Поделиться Опубликовано 16 Октября 2014 @Barmolini, ... weathers[level.get_weather()] and weathers[level.get_weather()] or ... в этом есть какая-то великая сермяжная правда? 1 1 Инструмент Ссылка на комментарий
Barmolini 1 Опубликовано 16 Октября 2014 Поделиться Опубликовано 16 Октября 2014 в этом есть какая-то великая сермяжная правда?Если в таблице не будет ключа которое вернёт get_weather, то табличка вернёт nil, как следствие конкатенация выдаст ошибку, поэтому здесь в случае когда ключа как раз нет (nil == false) отработает оператор or вернёт второй свой операнд, а это то, что вернёт get_float("r2_gloss_factor") и поэтому конкатенация пройдёт успешно. Ссылка на комментарий
Nazgool 250 Опубликовано 16 Октября 2014 Поделиться Опубликовано 16 Октября 2014 @Barmolini, weathers[level.get_weather()], судя по твоей таблице, может возвратить только два типа значения. Либо 'nil', либо 'number' Возвратит 'number' - замечательно. Возвратит 'nil' - не беда. На этот случай и сработает or и get_float. ...and weathers[level.get_weather()... совсем лишнее. 1 1 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти