Перейти к контенту

Рекомендуемые сообщения

in_rest, out_rest Установленные рестрикторы для персонажа на текущей работе. in - рестрикторы из которых запрещено выходить и out - рестрикторы в которые запрещено входить.

info_rest Устанавливаются рестрикторы, вне зоны которых, персонаж на текущей работе будет игнорировать раздражитель.

 

Применительно к скриптово-сгенерированным работам, я так понимаю я могу заспавнить просто объект space_restrictor, через нет-пакет указать ему шейп желаемых размеров, и его айди вписать сюда? к самому рестриктору каких либо требований не предъявляется?

(ТЧ)

Изменено пользователем 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.

Ссылка на комментарий

 

 

Советую почитать настройку логики вот здесь.

А где Вы, в указанных статьях, видели какие-то подробности про эти самые  team, squad и group ? А общие, вскольз упомянутые, определения не сильно то и помогают...

Ссылка на комментарий

ПЫСовское описание параметров teamsquad и group :

1. Команда (team).

Описывает принадлежность персонажа в определенному типу сталкеров. Таким образом все военные сталкеры имеют одинаковую команду, все сталкеры, находящиеся в одной группировке имеют одинаковую команду.
- 0: к этой команде принадлежат: Актер, Торговец, Бармен, Представитель ученных, другие сюжетные миролюбивые персонажи. К этой команде также относятся все сталкеры-одиночки, которые по умолчанию должны быть нейтральными к актеру.
- 1: к этой команде относятся все сталкеры-одиночки, которые по умолчанию должны быть врагами по отношению к актеру.
- 2: Военные сталкеры, армия.
- 3: Параноики, зомбированные и сумасшедшие сталкеры, которые уже с трудом могут принадлежать к какой то категории. Они сами по себе.
- 4: Reserved
- 5: Группировка «Долг»
- 6: Группировка «Грех»
- 7: Группировка «Монолит»
- 8: Сталкеры анархисты из группировки «Свобода»
- 9..31: Reserved

2. Отряд (squad)
Описывает принадлежность сталкеров из одной команды к разным группам внутри одного уровня. Это разделение существует внутри каждого уровня. Для каждой команды это разделение тоже особое. Значение отряда должно находится в пределах от 0 до 31.

3. Группа (group)
Описывает разбиение больших отрядов на более мелкие структурные единицы. Если такое разделение не нужно – дублирует отряд. Сталкерам одиночкам лучше давать уникальные группы. Значение группы должно находится в пределах от 0 до 31.


Распределение по сквадам и группам.
Сквад сталкера ставится в зависимости от уровня, на котором он спавнится.
Группа ставится каждому человеку своя отдельная. Получается что на одном уровне не может быть больше чем 32 сталкеров одиночек в каждой команде. Итого 32 нейтральных, 32 злых. Если, скажем, необходимо поставить группу из трех бандитов – то всем им нужно ставить одинаковую группу. Тогда общее число сталкеров увеличится. Вообщем думаю что хватит с головой 
0: Escape
1: Garbage
2: Agroprom
3: DarkDolina
4: RostokBar
5:
6:
7:
8:
9:
10:

11-31: Reserved

изначально group использовалась для синхронизации передвижения НПС по путям, синхронизация производилась при помощи флага n в точках движения walk, а так же при условии нахождения НПС в одной группе.

 

Ещё описание :

squad. Что именно определяет этот параметр. Понятно, что если не задан, то будет значение из профиля НПС, но в целом, для чего нужен squad?Для ТЧ это скорее рудимент, оставшийся от попыток организовать отряды/группы из НПС, но так и не реализованные в игре.

 

group. Также не ясно. Каким образом данный параметр влияет на поведение НПС?Аналогично squad - рудимент. В гулагах эти параметры практически не задействованы.

Так что делай выводы.

Изменено пользователем Nazgool
Добавлено Dennis_Chikin,

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

  • Полезно 2
Ссылка на комментарий
ПЫСовское описание параметров 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]

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

Остаётся только найти применение этому в игре.

Изменено пользователем lsclon
  • Полезно 1

Вообще-то я белая и пушистая...

Ссылка на комментарий

Всем привет, я в скриптах не особо разбираюсь(только гулаги научился "штамповать"),вопрос такой: я скачал ,на просторах инета,нано броник , с элементами для пистолетного слота, сейчас пытаюсь сделать, новый элемент невидимости(маскировка), использовал скрипт, из соли , маск_халата, работает, но не так как нужно, если элемент поместить в слот, невидимость активируется,а если убрать, то не дезактивируется, с помощью какой функции его заставить дезактивироваться?В скрипте маск_халата использован таймер,как можно сделать без него? А так же с помощью какой функции сделать так чтоб этот элемент можно было использовать только с этим броником?А то его можно использовать с любым..

 

Скрипты - 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.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

Ссылка на комментарий

Пытаюсь заспавненому скриптом НПСу установить 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

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

Не так прежде всего с самой идеей прописывать sid после перехода в онлайн. Для нафига, собственно ? Во-вторых, 4 страницы назад пост был - чем не нравится ? dc

Опять повторю - способ с он-лайном, третий из проверенных и перечисленных мной.

Не нахожу, блин 4 страницы назад то что я спросил - ткните носом....

 

http://www.amk-team.ru/forum/index.php?showtopic=6185&p=867602

Берем функции чтения/записи непися, читаем, изменяем нужное поле, записываем все обратно. dc

Изменено пользователем Dennis_Chikin
Ссылка на комментарий
Берем функции чтения/записи непися, читаем, изменяем нужное поле, записываем все обратно. dc

А что не так в m_netpk.script ? Он что, не так как амк'шный данные нет-пакетов читает\пишет ?

Изменено пользователем AndreySol
  • Не нравится 1
Ссылка на комментарий

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

Ссылка на комментарий

Если ли методы для ТЧ, что бы НПС или ГГ мог видеть например гранату или другой предмет.

Метод 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

Изменено пользователем Dennis_Chikin

...в конце концов, важен лишь, машинный код.

СТАЛКЕР только для ПК!

Ссылка на комментарий

Всем здравствуйте! Ребят подскажите, как можно сделать, чтоб у Гг при закрытии окна торговли удалялись все деньги.   

Ссылка на комментарий

@Сашка_из_Шебекино, в инфо коллбек на мой взгляд будет оптимальным вариантом, проверяй наличие ui_trade_hide, и далее отбирай деньги. Только этот инфопоршень немного хитро выдается, при начале диалога в том числе, так что подумай логически как написать функцию, которая будет оповещать о наличии ui_trade_hide в нужный тебе момент и получишь, что нужно.

Ссылка на комментарий

Доброго времени суток.

 

 

--------------------------------------------------------------------
------------Функции изменения глосс фактора.-----------------------
--------------------------------------------------------------------


function dump_world_rain()

if level.get_weather() == "sect_default_weather_rain" then

get_console():execute("r2_gloss_factor 6")

end


function dump_world_groza()

if level.get_weather() == "sect_default_weather_groza" then

get_console():execute("r2_gloss_factor 8")

end



function dump_world_pasmurno()

if level.get_weather() == "sect_default_weather_pasmurno" then

get_console():execute("r2_gloss_factor 2")

end

function dump_world_clear()

if level.get_weather() == "sect_default_weather_clear" then

get_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()
end



function 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. Переписать скрипт, добавить что то по аналогии я могу, подключить тоже, выдрать скрипт тоже, но вот с написанием с нуля возникают проблемы.

 

Изменено пользователем kalmah(13)
Ссылка на комментарий

@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
Ссылка на комментарий

Просто оставлю это здесь:

 

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. Я всё же считаю, что лучше привязать значение глос фактора к интенсивности дождя, тогда не нужно будет зависеть от имён погодных секций.

Изменено пользователем Barmolini
  • Спасибо 1
Ссылка на комментарий

 

 

в этом есть какая-то великая сермяжная правда?
Если в таблице не будет ключа которое вернёт get_weather, то табличка вернёт nil, как следствие конкатенация выдаст ошибку, поэтому здесь в случае когда ключа как раз нет (nil == false) отработает оператор or вернёт второй свой операнд, а это то, что вернёт get_float("r2_gloss_factor") и поэтому конкатенация пройдёт успешно.
Ссылка на комментарий

@Barmolini

weathers[level.get_weather()], судя по твоей таблице, может возвратить только два типа значения. Либо 'nil', либо 'number'

Возвратит 'number' - замечательно. Возвратит 'nil' - не беда. На этот случай и сработает or и get_float.

...and weathers[level.get_weather()... совсем лишнее.

  • Спасибо 1
  • Согласен 1
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   1 пользователь

×
×
  • Создать...