Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Редактирование движка
GAMEINATOR forums > S.T.A.L.K.E.R. > Мастерская: создание модов для S.T.A.L.K.E.R.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97
Молния в вакууме
RayTwitty, сделай через lua_register, без луабинда. Правда придётся вручную данные из луа доставать.
ForserX
Обновил ссылки на репозитории.
Zagolski
В luabind 0.9 частично изменился экспорт и вызовы в скриптах. Вот к примеру:

Код
void dynamic_engine_object(lua_State *L)
{    
    using namespace luabind::detail;

    CGameObject *obj = lua_togameobject(L, 1);

    if (obj)    
        lua_pushgameobject(L, obj);            
    else
        lua_pushnil (L);
}

def("engine_object",            &dynamic_engine_object),

При вызове в скриптах как
Код
local obj = engine_object(id)
стала падать:

Код
FATAL ERROR

[error]Expression    : !m_error_code
[error]Function      : raii_guard::~raii_guard
[error]File          : script_storage.cpp
[error]Line          : 681

No matching overload found, candidates:
void engine_object(lua_State*)


Там нужно правила при экспорте изменить или вызов в скриптах? В чем загвоздка в новой версии луабинда?
ForserX
Zagolski, по-моему ещё в OpenXRay говорили, что новый байнд более требователен к типизации. Я использую Дексовский и вам советую.
Zagolski
Цитата(ForserX @ 26.04.2018, 15:11) *
что новый байнд более требователен к типизации.

Да, пришлось повозиться в скриптах, да и вообще. Очень все строго стало, а где-то и кардинально вызовы изменены. Но хотелось бы разобраться с проблемой, с той, что выше я описал.

Цитата(ForserX @ 26.04.2018, 15:11) *
Я использую Дексовский и вам советую.

Там у него вроде старый 0.7.
abramcumner
Цитата(Zagolski @ 26.04.2018, 15:02) *
void dynamic_engine_object(lua_State *L)

А что делает эта функция? По id возвращает гейм-обжект?
Почему тогда не:
CSriptGameObject* dynamic_engine_object(u16 id);
Можно сделать:
void dynamic_engine_object(const luabind::object& o);
ForserX
Цитата(Zagolski @ 26.04.2018, 15:21) *
Там у него вроде старый 0.7.

Да. Его вполне за глаза. Хорошо вычищен и реструктурирован.

https://github.com/xrOxygen/xray-oxygen/tre...include/luabind
Zagolski
Цитата(abramcumner @ 26.04.2018, 15:37) *
А что делает эта функция? По id возвращает гейм-обжект?

// alpet: получение произвольного объекта движка по ID или game_object

Цитата(abramcumner @ 26.04.2018, 15:37) *
Можно сделать:
void dynamic_engine_object(const luabind::object& o);

Спасибо большое, помогло!
Карлан
Недавно закончил с клиент-сервером, эгейн. Со всеми своими предыдущими вопросами разобрался. В итоге вырезал целиком весь код из xrNetServer, вырезал как класс xrServer со всеми вытекающими, существенно упростил клиент-серверную систему выбросив оттуда всё не требующее синхронизации, перефигачил ивенты (как движковые (это отдельная история), так и серверные (тут частично)) требующие синхронизации. Также выхолостил IGame_Level оставив только один указатель (его требует один объект в CLevel). Полностью снес все, что относилось к типам игры, в том числе из серверных объектов (поставил заглушки, чтобы не нарушать архитектуру спавна). Отсюда очевидно, что повысилось быстродействие. Протестировал все на ТЧ и на ЗП, привел код к идентичному виду, о чем я и говорил здесь ранее неоднократно.

Так что если кто-то интересуется этим делом, и если нужна будет помощь, думаю, я смогу в чем-то помочь, или просто обменяемся опытом. В открытом доступе гуляет много всяких дурацких микрофиксов клиент-серверной системы по отношению к синглу, имейте это в виду smile.gif .
SkyLoader
Цитата(Карлан @ 09.05.2018, 14:16) *
Отсюда очевидно, что повысилось быстродействие.

Насколько?
ForserX
Карлан, поделись немного опытом, а ьо я устал понемногу его вычищать.
Zagolski
Лучше там ничего не трогать в сервер-клиенте, если не спец. Я у себя "вычистил", на первый взгляд вроде все хорошо, но теперь спонтанные ошибки время от времени выскакивают, которые никак отловить не могу. Что примечательно, субъективно скорости совсем не прибавилось. И даже время компиляции всего на 5% снизилось, несмотря на удаление всего мультиплеерного кода.
ForserX
Zagolski, у меня тоже нет мультиплеера, работать вполне стабильно.
Карлан
SkyLoader, не настолько, чтобы заниматься этим ради быстродействия smile.gif . Цифры не помню, ивенты смотрел стандартным профилированием, если хочешь скажи сколько сервер жрет у тебя, у меня он уже ничего не жрет, так как его нету, и это не самая большая часть всей эпопеи.
ForserX, конкретнее спрашивай, у меня информации очень много по всем трем (я так выделил по своей версии) направлениям, хоть цикл статей пиши, но этим я точно заниматься никогда не буду.
Zagolski, что ты вычищал и какого плана ошибки?
ForserX
Карлан, самая медленная часть и её альтернатива. Если можно, с примером на xray.
Карлан
ForserX, я довольно мало занимался замерами, мерил сервер (ну потому-что там тупо дефолтный таймер), и выборочно некоторые ивенты, поэтому не могу в полной мере ответить на вопрос. У меня цель была разобраться поглубже в одной из фундаментальных систем движка, а не повысить быстродействие. О нем я упомянул просто потому-что видно общую картину оздоровления, я принял кучу всяких мер, даже все не вспомню, это и рефакторинг менеджмента пакетов, и вырезание ивентов (=> увеличение стабильности), и вырезание кучи ненужных крутящихся событий, уменьшение порций передаваемой информации, больше чем на 50% вычистил загрузку, просто писал различный оптимизирующий код. Что из этого в большей мере помогло, что в меньшей сказать не могу, не замерял, просто не интересно, извини. Сейчас у меня в голове более менее все структурировано выстроено именно на основе опыта, если бы была х64 платформа можно было бы задействовать ресурсы, кардинально переделать пару моментов и просто оторваться от земли по некоторым вопросам давно набившим оскомину (например там всякая муть с памятью за которой я пристально слежу на х32 движке чтобы не было переполнений через каждые два часа игры). Есть еще много идей по реформированию серверной части объектов, там тоже чудовищное количество всякой ерунды (в идеале вообще довести это все до состояния полной замены этой системы, тут тоже у меня есть концепция). По симулятору тоже есть мысли. По скриптам тоже в чем проблемы я писал выше. В сетевухе нашел тоже косяки, но ей вроде никто не занимается, я думаю всем пофиг на это. В конце концов все равно я уже упираюсь в форматы (подпираю всякими заглушками), и нужны люди, которые будут писать сдк и компиляторы подо все, что я делаю, иначе от этого всего толку мало в итоге выйдет. Поэтому я и написал, мало-ли кто копается также как я, можно было бы обменяться опытом, может есть более крутые решения/идеи, чем я там напридумывал. Без этого всего эти взоры на горизонты так ими и останутся. Слов можно много понаписать, была-бы от них польза smile.gif .
ForserX
Цитата(Карлан @ 10.05.2018, 23:45) *
если бы была х64 платформа

Возьми порт от окси. У нас х64. Всё рабочее.
Zagolski
Цитата(Карлан @ 10.05.2018, 17:35) *
что ты вычищал и какого плана ошибки?

С объектами в ClientSend. Бьются пакеты судя по всему, обычно при сейве/загрузке, хотя может и само по себе упасть на "холостом ходу". Как уже говорил, ошибки редкие и спонтанные, непонятно из-за чего. Но стабильность явно пострадала. Вычищено много чего, xrServer, скажем так, "похудел" на 75%.
Карлан
ForserX, зачем?
Zagolski, можешь свой xrMessages показать, мне было бы интересно посмотреть что ты там убрал, я где-то в районе 5 событий так и не доковырял окончательно нужны они там или нет (и в каком виде нужны). По твоей проблеме, как ты догадываешься, не смогу подсказать, но я переделывал сохранения и у меня все без проблем работает, в остальном это использует только апдейтер который выбирает экшн на серверной части, скажи хотя-бы ивент на котором у тебя игра сыпется, возможно ты где-то вычистил часть инфы из пакета на клиенте и не вычистил на сервере, или наоборот (не всегда явно), или не соблюдаешь очереди обработки (это весьма важно!), перепроверь. Специально у себя посмотрел в этих местах, стоят какие-то выводы в лог, но вообще уже не помню что там и зачем, давно очень делал видимо. Я когда загрузку переделывал там довольно много всего неявного было, но было довольно интересно установить все взаимосвязи smile.gif .
ForserX
Цитата(Карлан @ 10.05.2018, 23:45) *
всякая муть с памятью за которой я пристально слежу на х32 движке чтобы не было переполнений через каждые два часа игры

Цитата(Карлан @ 10.05.2018, 23:45) *
если бы была х64 платформа можно было бы задействовать ресурсы, кардинально переделать пару моментов и просто оторваться от земли по некоторым вопросам давно набившим оскомину

Карлан
ForserX, хорошо, а с ТЧ мне как быть? К тому же х64 это не вещь первой необходимости для меня на данном этапе, меня гораздо больше интересует поддержка сдк и компиляторов, чтобы вплотную заняться серверной частью объектов, прям руки чешутся smile.gif . В итоге конечно все упрется в память (при моей концепции частичного изменения системы), и вот тут уже будет очень желательна х64.
ForserX
Карлан, тебе портировать?
Карлан
ForserX, спасибо, но зачем мне х64, когда, при текущем раскладе, я не буду переделывать серверную часть объектов? smile.gif Мне х64 нужен вынужденно, а не чтобы было, и нужен он только после определенного этапа работы, который я без подгонки сдк и компиляторов делать точно не буду (или буду, но это будет мерзотненько на заглушках и прочих костылях rolleyes.gif ). У меня и так уже все по швам трещит от вынужденной надобности сохранения совместимости, с сдк и компиляторами я бы уже давно встряхнул этот гадюшник (и не только в объектах), а не сидел бы тут разглагольствовал.
ForserX
Карлан, если захочешь мои руки для порта в х64 - пиши. Помогу.
Карлан
ForserX, я не против, если есть желание, бери и вперед. Отдельной веткой.
Карлан
Цитата(Zagolski @ 10.05.2018, 01:43) *
И даже время компиляции всего на 5% снизилось, несмотря на удаление всего мультиплеерного кода.

Дошли руки проверить, у меня прирост в районе 40%, стандартный движок компилиться не менее 25 минут, мой не более 15 (я понимаю, что дело еще в конфигах проектов и еще много в чем, но все же).

И сейчас кстати еще сохранения немного свел, и увидел вариант при сведении всего в единую последовательность убрать оттуда много лишней работы с нет-пакетами (часть уже убрал), также процесс сохранения получается очень обособленным, и если есть какая-то альтернатива нет-пакетам, то нет никакого труда заменить одно на другое. Вопросы в принципе еще есть для обсуждения, и их немало, ну да ладно, я понял, что это кроме меня тут никому не интересно sad.gif , монологи вести не буду.
Xottab_DUTY
Карлан, на самом деле, это достаточно интересно. Больше всего мне интересен пункт производительности. Расстраивает то, что она достигнута вырезанием сетевой части игры sad.gif
Карлан
Xottab_DUTY, сетевая часть на сингл в плане производительности вообще не влияет. Практически никак. Вырезать мультиплеер для повышения производительности это пустая трата времени. Влияет другое, если заботит только производительность, то можно смело оставлять сетевую игру и работать только над тем, о чем я выше говорил. Рецепт тот же, только сетевуху загнать в отдельное место, а сингл переделать, и все.
ForserX
Карлан, хочешь обсуждений, демонстрируй примеры и аналоги, а не из серии тут ускорилось тут переделал. А так, максимум Скай и Абрам подхватят из монолитного монолога.
abramcumner
Цитата(ForserX @ 13.05.2018, 21:46) *
Абрам

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

Маландринус когда-то хотел менять систему серверный-клиентский объект. Перевести это в состояния объектов и расширить их. Например сделать 3 состояния:
- оффлайн(не грузится модель и тд и тп),
- онлайн(модель, физика, все такое),
- инвентарь(снова нет модели, физики, может даже ид отнимать).
Делали что-нибудь в этом плане?

Идею с инвентарным состоянием часто проворачивают в скриптах, например удаляют из ящиков предметы при выходе в оффлайн и хранят просто строчку вида kolbasa:2;vodka:1;
Zagolski
Тут смысла нет с этим связываться. ЗП и так летает, сейвы грузятся мгновенно, стабильность очень хорошая. Как по мне, то не нужно там ничего мудрить, только баги из-за этого полезут. Копать нужно в направлении создания бесшовного мира и подобного.

Проблему с ClientSend у себя решил повесив его обратно на M_CL_UPDATE.

Цитата(Карлан @ 13.05.2018, 14:46) *
стандартный движок компилиться не менее 25 минут, мой не более 15
Не знаю, у меня весь двиг 10 минут компилится на i7-2600K.
ForserX
Цитата(Zagolski @ 14.05.2018, 10:19) *
сейвы грузятся мгновенно

У меня 5 минут. Минимум. Что ваниль, что окси.
Zagolski
Цитата(ForserX @ 14.05.2018, 12:16) *
У меня 5 минут. Минимум. Что ваниль, что окси.

Кошмар. Как же можно так жить? smile.gif
У меня ваниль с холодного старта секунд 10, при быстрой загрузке секунды три. Смею предположить, что у тебя совсем древнее железо...
А вот по поводу накопителей, то с ССД грузится заметно быстрее, чем с харда. Раза в два точно. Просто у меня они оба стоят, и копии сталка там и там, поэтому разницу вижу.

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

Код
stack trace:

0023:5C7002AF xrGame.dll, CIKLimb::get_start(), x:\trunk\xray\xr_3da\xrgame\ik\iklimb.cpp, 1253
0023:5C6FE1AE xrGame.dll, CIKLimb::BonesCallback0(), x:\trunk\xray\xr_3da\xrgame\ik\iklimb.cpp, 1266
0023:5CBE17A3 xrRender_R4.dll, CKinematics::CLBone(), x:\trunk\xray\xr_3da\xrrender\skeletonrigid.cpp, 133
0023:5CBE16DE xrRender_R4.dll, CKinematics::BoneChain_Calculate(), x:\trunk\xray\xr_3da\xrrender\skeletonrigid.cpp, 201
0023:5CBE1EC3 xrRender_R4.dll, CKinematics::Bone_GetAnimPos(), x:\trunk\xray\xr_3da\xrrender\skeletonrigid.cpp, 157
0023:5C4FE146 xrGame.dll, CEntityAlive::get_last_local_point_on_mesh(), x:\trunk\xray\xr_3da\xrgame\entity_alive.cpp, 969
0023:00C6327C XR_3DA.exe, Feel::Vision::o_trace(), x:\trunk\xray\xr_3da\feel_vision.cpp, 166
0023:00C63A8A XR_3DA.exe, Feel::Vision::feel_vision_update(), x:\trunk\xray\xr_3da\feel_vision.cpp, 152
0023:5C2C111B xrGame.dll, CCustomMonster::eye_pp_s2(), x:\trunk\xray\xr_3da\xrgame\custommonster.cpp, 588
0023:5C2C0819 xrGame.dll, CCustomMonster::Exec_Visibility(), x:\trunk\xray\xr_3da\xrgame\custommonster.cpp, 602
0023:00C6B819 XR_3DA.exe, mt_Thread(), x:\trunk\xray\xr_3da\device.cpp, 190
0023:5CD28B6C xrCore.dll, thread_entry(), x:\trunk\xray\xrcore\_math.cpp, 349
0023:766FAB35 ucrtbase.dll, crt_at_quick_exit()
0023:757962C4 KERNEL32.DLL, BaseThreadInitThunk()
0023:77090FA9 ntdll.dll, RtlSubscribeWnfStateChangeNotification()
0023:77090F74 ntdll.dll, RtlSubscribeWnfStateChangeNotification()
Xottab_DUTY
Отлаживал процесс загрузки уровня, обнаружил стопор на стадии "Загрузка формы объектов". Начал копать и увидел, что всё это уходит в OPCODE. Мы передаём ему данные уровня, а они довольно большие, поэтому эта стадия проходит долго. Надо ускорить. Кто-нибудь пробовал колдовать с OPCODE? Или вообще на другую библиотеку уйти?
abramcumner
Цитата(Xottab_DUTY @ 15.05.2018, 18:10) *
Надо ускорить. Кто-нибудь пробовал колдовать с OPCODE? Или вообще на другую библиотеку уйти?

У формы объектов есть же другопоточная загрузка из коробки. if(!strstr(Core.Params, "-mt_cdb"))
Только надо чуток переписать, чтобы не ждать другой поток, а делать что-нибдуь полезное smile.gif
Zagolski
Никакой прибавки скорости от -mt_cdb не увидел. Может там что-то и есть, но на глаз не заметно.
abramcumner
Цитата(Zagolski @ 15.05.2018, 18:34) *
Никакой прибавки скорости от -mt_cdb не увидел. Может там что-то и есть, но на глаз не заметно.

Сейчас основной поток ждет, пока цформ загрузится. Я ж написал, надо чуток переделать smile.gif
ForserX
abramcumner, кстати да, рассинхронизирую их на днях.
Xottab_DUTY
Цитата(abramcumner @ 15.05.2018, 21:31) *
Сейчас основной поток ждет, пока цформ загрузится.

Видел, видел. Поэтому и спросил про сам OPCODE. Почему-то не подумал спросить про то, как сделать так, чтобы основной поток занимался чем-то полезным)
abramcumner
Цитата(Xottab_DUTY @ 15.05.2018, 23:17) *
Видел, видел. Поэтому и спросил про сам OPCODE. Почему-то не подумал спросить про то, как сделать так, чтобы основной поток занимался чем-то полезным)

while sleep(5); убрать smile.gif Только надо убедиться, что цформ никто не будет в это время использовать.
-StalkMen-
Цитата(Xottab_DUTY @ 15.05.2018, 18:10) *
Отлаживал процесс загрузки уровня, обнаружил стопор на стадии "Загрузка формы объектов". Начал копать и увидел, что всё это уходит в OPCODE. Мы передаём ему данные уровня, а они довольно большие, поэтому эта стадия проходит долго. Надо ускорить. Кто-нибудь пробовал колдовать с OPCODE? Или вообще на другую библиотеку уйти?

Opcode варит AABB дерево %facepalm%
Можно это исправить, но за счёт увеличения размера коллизии левела.
Xottab_DUTY
Цитата(-StalkMen- @ 16.05.2018, 02:08) *
Opcode варит AABB дерево %facepalm%

Понятное дело, что варит.
Цитата(-StalkMen- @ 16.05.2018, 02:08) *
Можно это исправить, но за счёт увеличения размера коллизии левела.

А можно поподробнее?
-StalkMen-
Xottab_DUTY,
Сварить заранее, в компиляторе.
Xottab_DUTY
-StalkMen-, а... Интересный вариант)
Neo][
Цитата(-StalkMen- @ 16.05.2018, 02:18) *
Сварить заранее, в компиляторе.

Тем более, на сколько я помню, при просчёте лайтмапов он там варится
ForserX
Итак, нужна ваша помощь. При порте в последнюю 2017 студию, xrsound стал требовать _CrtDbgReport символы. Временно цепанул либы от 2015 студии, из-за чего у большей части юзеров перестанет всё работать. Нигде привязки к этим символам в проекте не нашёл. Может есть у кого идеи, как от этого избавиться?
-StalkMen-
Neo][,
Там для видимой геометрии, цэ не то wink_old.gif
Neo][
Цитата(ForserX @ 16.05.2018, 11:03) *
При порте в последнюю 2017 студию, xrsound стал требовать _CrtDbgReport символы. Временно цепанул либы от 2015 студии, из-за чего у большей части юзеров перестанет всё работать. Нигде привязки к этим символам в проекте не нашёл.

ForserX, функция юзается внутри crt(в xutility, random, etc). А что значит временно цепанул либы от 2015? И покажи оригинальное сообщение об ошибке.

Цитата(-StalkMen- @ 16.05.2018, 12:55) *
Neo][,
Там для видимой геометрии, цэ не то

-StalkMen-, не ковырял загрузку уровня в исходниках, но, на сколько я помню по реверсу, именно сгенеренный в компиляторе level.cform и грузится на этом этапе.
abramcumner
Цитата(Neo][ @ 16.05.2018, 12:22) *

именно сгенеренный в компиляторе level.cform и грузится на этом этапе.

В этом и проблема smile.gif Сгенеренный level.cform просто набор треугольников, из него OPCODE строит свое дерево. Xottab_DUTY хочет ускорить построение этого дерева, -StalkMen- предлагает в level.cform хранить сразу сериализованное дерево OPCODE.

Цитата(ForserX @ 16.05.2018, 09:03) *
При порте в последнюю 2017 студию, xrsound стал требовать _CrtDbgReport символы. Может есть у кого идеи, как от этого избавиться?

Откатиться с последней версии на 15.6.7. 15.7.1 - еще косячная.
Я бы сказал, что не пересобрали новой студией какую-то lib. OpenAlSoft?
Можно попробовать включить в настройках линкера вывод информации о ходе линковки типа "Link/General/Show Progress"(вроде еще что-то было). Можно будет увидеть, чем занят линкер во время ошибки.
Neo][
Цитата(abramcumner @ 16.05.2018, 16:20) *
-StalkMen- предлагает в level.cform хранить сразу сериализованное дерево OPCODE.

abramcumner, так и я о том же... пытаюсь выяснить почему
Цитата(-StalkMen- @ 16.05.2018, 12:55) *
цэ не то


Added:
Скорее путанница возникла из-за того, что я в исходном сообщении упомянул просчёт освещения. Имел ввиду именно процесс построения cdb для уровня. Забыл, что там дважды строится cdb.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.