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

Курилка программистов


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

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

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

И не должно быть делегатов/сигналов скрывающих такие прямые вызовы.

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

 

Запросто в движке могут быть такие места, где вместо отправки нет-пакета можно вызвать функцию. А может нет-пакет там и не просто так.

 

У нет-пакетов простая абстракция: создаю сообщение, записываю все что надо, отсылаю. Ничего ужасного в ней нет.

Естественно для большого количества параметров нужны обертки, чтобы с порядком паковки/запаковки не путаться. Для малого можно и так отправить.

Поделиться этим сообщением


Ссылка на сообщение

@abramcumner, ну на данный момент аи-сетка ограничена сама по себе - большие уровни не сделать.

Это правится. Хотя особого смысла нет.

 

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

Логично. Вся аи-навигация такая.

 

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

Ну это не недостаток аи-сетки, а недочеты алгоритма генерации или редактирования.

 

Ну и наконец компиляция аи-сеток, приличная сетка может компилироваться часов по 5 на мощном ПК.

Долго просчитываются укрытия. На драфте сетка мгновенно же считается. А просчет укрытия наверное можно и пооптмизировать.

@abramcumner, да просто, не везде можно аи сетку воткнуть, там где ГГ лазит.

А там и альтернативы не пролезут.

 

Про укрытия, это костылями можно делать, как в Фаркрае, применив точки для укрытий, можно даже вейпоинтами, а к динамике, то костями специальными. Нужно только знать, чего я как раз и не знаю.

То есть руками расставлять? Ручное редактирование же и не нравится в аи-сетке
  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение

В плане? Не будут использовать это по назначению? Или это приведет к поломке иных аспектов игры?

Что лучше бесшовность сделать, а сетку оставить как сейчас к примеру :)

 

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

Это же не аи-секта уже. Аи-сетка только для прокладки пути нужна. Ну в сталкере ее еще для укрытий используют.

Кстати в сталкере настраивается же разница высот между нодами. Перепрыгивать не будет конечно, но может ИК отработает :)

А так это уже анимации и смарткаверы.

 

Не спорю. Но неплохо бы в идеале (Мечты-мечты) этот алгоритм пофиксить. Слишком уж криво создается карта.

Лично мне мешает то, что сдк в билдере собирается :) Вот пытаюсь в студию перетащить.

 

Вот это было бы не плохо.

Сейчас алгоритм такой: для каждой ноды берутся все ноды в радиусе 30 метров и для каждой делается выстрел. Если не долетает, значит укрытие есть. Все это потом складывается, усредняется. В ЗП делается два выстрела: в сидячего и в стоячего. Можно тупо взять ограничить радиус. Будут по идее проблемы с укрытиями в ямах, типа сразу за ящиком не попадешь, а сверху ямы все простреливается.

Но время уменьшится квадратично: уменьшим радиус в 2 раза(до 15м), время сократится в 4 раза. В идеале конечно надо на ГПУ выносить - самое место такому там.

? Я про то что генерация нодов аи сетки не происходит на подъёмах, в узких местах. Даже в помещении бывают у стен пустые места, где боты стоя в полметре не видят у стены ГГ.

Подъемы настраиваются в ЛЕ. Узкие места да - проблема: размер ноды фиксированный и достаточно большой. Просто совсем в узких местах и другие системы навигации не должны проводить НПЦ.

 

Я разбирал Фаркрай и точно скажу, что к динамическим объектам боты атачатся в боевой схеме. А вот для статики я не в курсе, возможно там есть просчёт укрытий, но там нет аи-сетки точно.

Аттач к динамически объектам точно не аи-сетка. Это уже логика. Для статики там что-то вроде смарткаверов можно ставить.
  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение

Спасибо за инфу, как раз не знал как это производится конкретно. Раз такое дело, то лучше оставить, а то будут возникать глюки при бое, наверняка. Хотя надо тестить..

Совсем не факт. там все это усредняется, хранится по секторам(север, юг, запад восток).

Или даже лучше так. Сейчас обрабатывается где-то около 3.14 * 30 *30 / (0.7 * 0.7) = 5767 нод. Можно случайным образом выбирать 500 нод и по ним считать. Мне кажется точность будет получаться не сильно хуже.

Поделиться этим сообщением


Ссылка на сообщение

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

Это обычные ХОМы. Для движка это просто не один объект, а много мелких. Разбери локацию с опцией le2(так геометрию видит движок) и проверь.

Дык.. Уже сшивали 6 (?) локаций полноценно (Макс+СДК) и все локации через утилиту (Не помню как она называлась, и сшитие было бутафорским, все локации просто в пространстве болтались, но однако ж). Можно, наверно, и остальное сшить, но нужен х64 движок уже, чтобы все это дело потянуть.

Бесшовность не в смысле одна большая локация, а в смысле много маленьких, подгружающихся по мере необходимости. Тут и большая аи-сетка будет не нужна.
  • Полезно 2

Поделиться этим сообщением


Ссылка на сообщение

Весь движок в одном экзешнике и даже работает: https://yadi.sk/d/jRoSLVs8uUqY9

Распаковать в папку с ЗП, запускать start_monolith.bat.

Для запуска требуются библиотеки c++ 2015.

  • Спасибо 1
  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

Подтверждаю, работает, пусть и р1 онли :) Тоже когда-то хотел двиг в один экзешник засунуть, но как-то подзабил.

Должен р4 :D

Поделиться этим сообщением


Ссылка на сообщение

И насчёт того, что "делать с нуля". Это серьёзно?! Это же разрабы сталкира почти в полном составе, включая Ясенева, который как раз и отвечал за весь AI (т.е. по сути почти весь xrGame). О работе с нуля здесь даже речи идти не может, всё уже есть. Если до сих пор не сделали, значит на то есть какие-то иные причины.

Сурвариум именно что "делают с нуля". Посмотри исходники xray 2.0. По слухам сурвариум построен на них.

Поделиться этим сообщением


Ссылка на сообщение

Вообще отладчик луа есть, идет в комплекте с СДК ЗП, подключается к дебажной версии движка. Проход по шагам, просмотр переменных, вот это все.

  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

а во-вторых, даже и не скажет.

Ну вот ты сказал :) Прошло всего 9 лет.

 

Вот так и живем... Хочешь что-то сделать - разгребай и делай сам. Руки не доходят - ну, значит, не сильно и хотелось.

Ну так и есть. Кому-то что-то не нравится - тот этим и занимается. Изменено пользователем abramcumner
  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

@Дизель,

:)

Нет никакой лицензии на хрей. Его никто официально не отдавал.

И уж тем более на коммерческое использование.

Поделиться этим сообщением


Ссылка на сообщение

@Дизель, смысл остался ровно таким же, какой и был - интересно модить. Лицензия тут вообще не причем.

 

Твои наработки - так и останутся твоими наработками. Ты ими можешь распоряжаться на свое усмотрение.

 

 

@TIGER_VLAD, да я уже понял - почитал комментарии, что это развод. Но всё равно - это может оказаться в будущем правдой.

Уже начало у ролика не очень правдивое:

1. В 2013 году Яворский давно уже не имел никакого отношения к сталкеру. Он же сурвариум пиарил.

2. Права у Стругацких компания-разработчик (признана нежелательной)* не приобретал. Сталкер и Пикник - совершенно разные вселенные. По слухам именно поэтому пришлось поставить точки в S.T.A.L.K.E.R.

 

@Дизель, а что тебя так заинтересовал вопрос лицензии?

Ну и если вдруг решил коммерцию какую наладить, то лучше не на форуме спрашивать, а проконсультироваться у юриста.

Изменено пользователем abramcumner
  • Согласен 1
  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение

Так всего 3 темы: "редактирование движка", "xray-extensions" и "мелкие правки" из которых одна активная. "xray-extensions" строго по одному проекту, А мелкие правки ты сам сегодня поднял вопросом, место которому в курилке :)

Остается одна тема "редактирование движка", которая не больно-то и активная. Смысл что-то менять.

Поделиться этим сообщением


Ссылка на сообщение

НаноБот выкладывал свои правки под практически такими же номерами ревизий

Так делать не надо. Отдельными темами это не решишь. Он основывается еще и не на последней ревизии вроде.

По-хорошему надо влить свои правки в общий котел к xray-extensions и тогда никакой путаницы не будет.

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

  • Согласен 2

Поделиться этим сообщением


Ссылка на сообщение

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

А в чем проблема?

class "Cloud"
function Cloud:__init()
end

function Cloud:FlyOnTheSky()
end

local cloud = Cloud()
cloud:FlyOnTheSky()
Изменено пользователем abramcumner

Поделиться этим сообщением


Ссылка на сообщение

Ну вот не декларация, вот ветер гоняет облака по небу

class "Cloud"
function Cloud:__init()
  self.x = 0;
  self.y = 0;
end

function Cloud:FlyOnTheSky(dt)
  local wind = GetCurrentWind()
  self.x = self.x + wind.X * dt
  self.y = self.y + wind.Y * dt
end

local cloud = Cloud()
cloud:FlyOnTheSky(0.1)

Поделиться этим сообщением


Ссылка на сообщение

Нет комментариев, т.к. это уже пустой трёп начинается.

То есть по-твоему класс это нечто, умеющее выводить текстуры в рендере сталкера? :) Ну тоже ничего определение.

Поделиться этим сообщением


Ссылка на сообщение

А может лучше вырезать всю сетевую часть и оставить только сингл?) Я думаю это реально, но не тривиально. Насколько игра станет меньше жрать ресурсов если будет только один клиентский объект? Не похерит ли это алайф?

Пообщайся с Malandinus`ом. Oн занимался "отрезкой" сетевой части: заменил вызовы с нет-пакетами на прямые вызовы. Вместо серверного/клиентского собирался делать один объект с несколькими состояниями.

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...