Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Редактирование движка
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
Antnigm
Цитата(RayTwitty @ 12.01.2017, 03:44) *
Antnigm, r2_sun_near
Крутил, эффект нулевой. Собственно, потому и спросил. Даже диапазон до 150 увеличил (по аналогии с Extensions).
Press me

Antnigm
Тени делал согласно данной инструкции:
Press me
Так значит:
Тень травы в файле DetailManager_VS.cpp после
Код
RCache.stat.r.s_details.add (dwCNT_verts);
}
добавить:
Код
// KD: we must not clear vis on r2 since we want details shadows
#if RENDER==R_R2 || RENDER==R_R3 || RENDER==R_R4
if ((ps_r2_ls_flags.test(R2FLAG_SUN_DETAILS) && (RImplementation.PHASE_SMAP == RImplementation.phase)) // phase smap with shadows
|| (ps_r2_ls_flags.test(R2FLAG_SUN_DETAILS) && (RImplementation.PHASE_NORMAL == RImplementation.phase) && (!RImplementation.is_sun())) // phase normal with shadows without sun
|| (!ps_r2_ls_flags.test(R2FLAG_SUN_DETAILS) && (RImplementation.PHASE_NORMAL == RImplementation.phase))) // phase normal without shadows
#endif
Далее в r2.cpp, а также в r3.cpp и в r4.cpp добавить функцию:
Код
BOOL CRender::is_sun()
{
if (o.sunstatic) return FALSE;
Fcolor sun_color = ((light*)Lights.sun_adapted._get())->color;
return (ps_r2_ls_flags.test(R2FLAG_SUN) && (u_diffuse2s(sun_color.r, sun_color.g, sun_color.B )>EPS));
}
Затем в r2.h, а также в r3.cpp и в r4.cpp добавить идентификатор:
Код
BOOL is_sun();
RayTwitty
Цитата(Antnigm @ 12.01.2017, 07:33) *
Крутил, эффект нулевой. Собственно, потому и спросил. Даже диапазон до 150 увеличил (по аналогии с Extensions).

Значит, в ЗП какой-то другой алгоритм отрисовки дин. теней от солнца (слышал, что там несколько градаций детальных теней). В ТЧ sun near корректно работает.
ForserX
Цитата(Antnigm @ 12.01.2017, 09:58) *
Тени делал согласно данной инструкции:
Затем в r2.h, а также в r3.cpp и в r4.cpp добавить идентификатор:
Код
BOOL is_sun();

Я надеюсь, что в r3.h и в r4.h?
Antnigm
Цитата(Forser @ 12.01.2017, 16:04) *
Цитата(Antnigm @ 12.01.2017, 09:58) *
Тени делал согласно данной инструкции:
Затем в r2.h, а также в r3.cpp и в r4.cpp добавить идентификатор:
Код
BOOL is_sun();

Я надеюсь, что в r3.h и в r4.h?
Естественно. :-)
Иначе бы тень травы на r3 и r4 попросту не работала, да и ошибки при сборке полезли бы. Скопировал ранее и забыл поправить в посте. Там еще не
Код
(u_diffuse2s(sun_color.r, sun_color.g, sun_color.B)
, а
Код
(u_diffuse2s(sun_color.r, sun_color.g, sun_color.b)
должно быть.
mortan
Никто случайно не знает, как можно загрузить модельку на худ и привязать её к пушке?)Как загрузить я примерно знаю, код есть , но пока не пробовал, а вот как заставить модельку вслед за пушкой при анимках перемещаться по экрану это загадка)
Shoкer
Смотри в player_hud.cpp как идёт привязка оружия к рукам, и делай по аналогии. (функция calc_transform)
Если вкратце то ты рассчитываешь координаты своей модели относительно другой, а потом просто рендеришь эту модель (::render()) в этих координатах.
mortan
Цитата(Shoкer @ 13.01.2017, 22:50) *
Смотри в player_hud.cpp как идёт привязка оружия к рукам, и делай по аналогии. (функция calc_transform)
Если вкратце то ты рассчитываешь координаты своей модели относительно другой, а потом просто рендеришь эту модель (::render()) в этих координатах.

я так и понял, спасибо. Но ведь нужно же как-то двигать модельку вслед за руками или пушкой) Не подскажешь функцию где пушки к нпс аттачатся? По аналогии же можно будет к мировой модели лепить что-нибудь ( скажем так прицел biggrin.gif )
mortan
порывшись в движке нашёл ещё такую штуку - игра может аттачить итем ( или модель) к определённой кости. Вопрос - можно ли сделать их как бы одним целым, дабы при анимках ничего не дёргалось?
SkyLoader
Цитата(mortan @ 17.01.2017, 23:39) *
Вопрос - можно ли сделать их как бы одним целым, дабы при анимках ничего не дёргалось?

В ТЧ, насколько я помню, аттаченные предметы не отставали и не дергались. В ЗП такая проблема есть. Можно глянуть отличия ЗП от ТЧ в расчетах позиции предметов, может там отставание на один кадр есть.
mortan
Цитата(SkyLoader @ 18.01.2017, 00:31) *
Цитата(mortan @ 17.01.2017, 23:39) *
Вопрос - можно ли сделать их как бы одним целым, дабы при анимках ничего не дёргалось?

В ТЧ, насколько я помню, аттаченные предметы не отставали и не дергались. В ЗП такая проблема есть. Можно глянуть отличия ЗП от ТЧ в расчетах позиции предметов, может там отставание на один кадр есть.

понял, спасибо, надо глянуть. Как вариант хочу попробовать отключение коллизии у отдельной кости ( не знаю реально ли такое сделать)
GermanAizek
Не подскажете, а при компиляции Level Editor какие библиотеки надо подключать? Хотя всех редакторов тоже. Чекал статьи про сборки движков, но написаны либы только для самого движка или я слепой?
AndreySol
Требуется добавить новый класс в xrGame. Он должен сохранять\загружать значения нескольких своих переменных(при сохранении\загрузке сейвов) + иметь возможность менять значения переменных с течением игрового времени(типа CEntityCondition::UpdateConditionTime()\CEntityCondition::UpdateCondition()) + класс будет использован как один из родительских для некоторых инвентарных объектов. Подскажите, как правильно сделать ? Создать его с нуля, без наследования от какого либо родительского, или все-же наследовать от CGameObject ? Или от какого-то другого ?
Карлан
Свой вопрос закрываю. Решил параллельной дллкой и парой скриптовых приблуд.
Winsor
Цитата(AndreySol @ 21.01.2017, 21:51) *
Создать его с нуля, без наследования от какого либо родительского, или все-же наследовать от CGameObject ? Или от какого-то другого ?

наверное подойдет CInventoryItem, или, если надо поддерживать "физические" свойства - CInventoryItemObject. например, CEatableItem наследуется от CInventoryItem, а вот уже CCustomOutfit - от CInventoryItemObject. переопределяя методы save/load можете сохранять свои значения после inherited::*.
AndreySol
А что насчет Update-ф-ций ? У CInventoryItemObject есть ф-ция "UpdateCL", проверил - действительно какой-то апдейт. Его можно использовать аналогично UpdateCondition из CEntityCondition ?
Winsor
Цитата(AndreySol @ 23.01.2017, 18:30) *
А что насчет Update-ф-ций ? У CInventoryItemObject есть ф-ция "UpdateCL", проверил - действительно какой-то апдейт. Его можно использовать аналогично UpdateCondition из CEntityCondition ?
чесно - не знаю, smile.gif их апдейты я не изучал smile.gif это на совести дебага. я думаю, банальный вывод в лог покажет насколько часто и когда они обновляются.
===
посмотрел.
В основном UpdateCondition выполняется на главном апдейте CEntityAlive::shedule_Update. т.е. для Вашего класса , если Вы хотите использовать shedule_Update - Вам необходимо свой класс наследовать от CInventoryItemObject. CInventoryItem не имеет в предках CObject и не подходит для Вашей задачи.
serg101188
кто в курсе или в чем проблема вот с такой ошипки

Loading DLL: xrGameSpy.dll
! cant find corresponding [id] for action_name
! cant find corresponding [id] for action_name
! cant find corresponding [id] for action_name
! cant find corresponding [id] for action_name
! cant find corresponding [id] for action_name
! cant find corresponding [id] for action_name
! cant find corresponding [id] for action_name
! cant find corresponding [id] for action_name
! cant find corresponding [id] for action_name
AndreySol
serg101188
Если я правильно понял по содержимому файла(xrGame\xr_level_controller.cpp), то проблемы с дефолтным назначением действий на клавиши в настройках клавиатуры. Там из таблицы "actions" такого вида:
actions[] = {
{ "left", kLEFT ,_both},
{ "right", kRIGHT ,_both},
...........
происходит выборка значения по строковому названию. Указанные тобой сообщения выводятся, если в таблице не найдено соответствующее поле. Если в ф-ции
_action* action_name_to_ptr(LPCSTR _name)
исправить вывод сообщения как-то так:
Msg ("! cant find corresponding [id] for action_name=%S", _name);
то можно будет увидеть конкретные команды, которым не назначены клавиши по дефолту.
ForserX
Пролистал подфорум, никакого поиска в команду не нашёл, а может и просто не заметил, поэтому пишу сюда:

В проект "Тайна Станции «Дуга»" требуется программист. На данный момент проект базируется на Open X-Ray. Если кому-то интересно, пишете мне в личку.

Скажу сразу:
1. Проект не мой
2. Участвую в нём косвенно (подсказываю, когда допекут в лс)
3. Работа в проекте (любом) на данный момент мне не интересна, в связи с чем не помогаю им.
SkyLoader
Цитата(Forser @ 29.01.2017, 22:06) *
В проект "Тайна Станции «Дуга»" требуется программист.

Мы это уже проходили
ForserX
Цитата(SkyLoader @ 30.01.2017, 00:45) *
Мы это уже проходили

Жалко мне его.
AndreySol
Непонятка у меня с методами UPDATE_Read\UPDATE_Write, прошу раъяснения. Собственно дело в чем: для фонарика прописал в CSE_ALifeItemTorch новую переменную. В конструкторе класса инициализирую ее дефолтным значением. После создания объекта, у него первым вызывается метод CSE_ALifeItemTorch::UPDATE_Write, и там эта переменная записывается в нет-пакет, и следовательно она в дальнейшем имеет дефолтное значение. Добавил по такому-же принципу переменную в CSE_ALifeObjectHangingLamp, но там почему-то все оказалось наоборот: первым, после создания объекта вызывается CSE_ALifeObjectHangingLamp::UPDATE_Read, соответственно из нет-пакета читается пустое значение, которое затирает дефолтное значение переменной. Оно понятно, что фонарик объект инвентарный, а лампа - физический, но почему-же так наоборот-то все ? И как сделать тогда для ламп инит\сохранение переменной на подобии как у фонарика ?
Shoкer
Ну начнём с того что сохранять и загружать переменные требуется в STATE_Read\STATE_Write.
Они вызываются при загрузке\сохранении объекта или при его переходе в онлайн\оффлайн.

Как только клиентский объект создался, его серверный вызывает у себя функцию STATE_Read, а та в свою очередь приводит к вызову net_Spawn у клиентcкого. Тут ты и должен загружать сохранённые данные в клиентский объект.

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

У клиентского объекта это соответственно net_Import и net_Export.

То-есть для загрузки твои действия такие:

1) В серверном объекте в конструкторе указываешь дефолтное значение своей переменной.
2) В серверном объекте в STATE_Read ты его считываешь из сейва\спавна. Если это первое создание объекта, то скорее всего там будет тоже-самое дефолтное значение из конструктора, если это загрузка уже существующего объекта, то получишь своё сохранённое значение.
3) В клиентском объекте в функции net_Spawn ты вытаскиваешь свою переменную в клиент. (вызывается ОДИН РАЗ в момент каждого перехода объекта в онлайн)

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

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Ещё есть один трюк, который облегчит тебе жизнь, но скорее всего он не совместим с МП.
Забудь про серверные классы, в клиентских у объектов есть функции save() \ load().
Точно также работают с нет-пакетами, и эти данные даже записываются в серверный объект (там есть под них выделенное место, custom_data кажется, не путать с той что из конфигов)

Единственное что, эти данные могут стираться, если игрок например сменит уровень, а объект останется на старом.
Чтобы такое избежать, достаточно переопределить в клиентском классе функцию keep_saved_data_anyway() чтобы возвращала true. Поищи поиском примеры в движке, там всё просто.

К слову это всё ровно те же самые функции, которые экспортированы в Lua.
AndreySol
Цитата(Shoкer @ 03.02.2017, 03:23) *
что сохранять и загружать переменные требуется в STATE_Read\STATE_Write.
Я пока не очень разобрался в движке, по-этому действую пока по принципу "сделай аналогично":
для фонарика, перечисление EStats с флагами состояния:
тык
void CSE_ALifeItemTorch::STATE_Read(NET_Packet &tNetPacket, u16 size)
{
if (m_wVersion > 20)
inherited::STATE_Read(tNetPacket,size);
}

void CSE_ALifeItemTorch::STATE_Write(NET_Packet &tNetPacket)
{
inherited::STATE_Write(tNetPacket);
}

void CSE_ALifeItemTorch::UPDATE_Read(NET_Packet &tNetPacket)
{
inherited::UPDATE_Read(tNetPacket);

BYTE F = tNetPacket.r_u8();
m_active = !!(F & eTorchActive);
m_nightvision_active = !!(F & eNightVisionActive);
m_attached = !!(F & eAttached);
m_enable = !!(F & eTorchEnable);

m_fValue = tNetPacket.r_float(); // добавлено мной
}

void CSE_ALifeItemTorch::UPDATE_Write(NET_Packet &tNetPacket)
{
inherited::UPDATE_Write(tNetPacket);

BYTE F = 0;
F |= (m_active ? eTorchActive : 0);
F |= (m_nightvision_active ? eNightVisionActive : 0);
F |= (m_attached ? eAttached : 0);
F |= (m_enable ? eTorchEnable : 0);
tNetPacket.w_u8(F);

tNetPacket.w_float(m_fValue ); // добавлено мной
}
в клиентском классе:
BOOL CTorch::net_Spawn(CSE_Abstract* DC)
{
CSE_Abstract *e = (CSE_Abstract*)(DC);
CSE_ALifeItemTorch *torch = smart_cast<CSE_ALifeItemTorch*>(e);
R_ASSERT (torch);
............
............
m_Value = torch->m_fValue; // читаем мою переменную

Switch(torch->m_active);// здесь клиент читает один из флагов состояния
...........
return(TRUE);
}

void CTorch::net_Export(NET_Packet& P)
{
inherited::net_Export(P);

BYTE F = 0;
F |= (m_switched_on ? eTorchActive : 0);
F |= (m_bNightVisionOn ? eNightVisionActive : 0);
const CActor *pA = smart_cast<const CActor *>(H_Parent());
if (pA)
{
if (pA->attached(this))
F |= eAttached;
}
F |= (m_bTorchState ? eTorchEnable : 0);
P.w_u8(F);

P.w_float(m_Value);
}

Все вроде как Вы написали, за исключением STATE_Read\STATE_Write - как видим здесь как-раз все в UPDATE-... сделано. И работает.
Цитата(Shoкer @ 03.02.2017, 03:23) *
В серверном объекте в STATE_Read ты его считываешь из сейва\спавна. Если это первое создание объекта, то скорее всего там будет тоже-самое дефолтное значение из конструктора

У программистов слова "скорее всего" - верный путь к багам cool.gif К примеру после НИ, как мы прочитаем из нет-пакета значение которого там еще нет ? Логично, что все-таки сначала надо его туда записать, а уж потом читать... Я расставил проверки в STATE и UPDATE методы - в логе вижу, что для фонарика первым вызывается всегда Write на серверной части.
Я наверное опять чего-то не понял ?
Shoкer
Цитата
К примеру после НИ, как мы прочитаем из нет-пакета значение которого там еще нет ?

А оно будет. Движок сталкера в этом плане устроен очень интересно.

Во первых если объект был создан через all.spawn, то при создании новой игры STATE_Read будет считывать твой объект из него, поскольку .spawn файлы это по сути огромный нет-пакет. (поэтому если ты в STATE_ функциях меняешь порядок чтения\записи переменных, то можешь сломать оригинальный all.spawn. Чтобы это избежать нужно проверку на версию спавна делать - в ЗП версия текущего спавна хранится в переменной CSE_Abstract -> m_wVersion, а изменить её на новую можно в xrServer_Objects.h - SPAWN_VERSION)

Во вторых если объект был создан скриптом через alife():create() то там ровно тоже самое. Движок сперва создаёт фейковый серверный объект на стороне клиента, нигде его не регистрируя. ( у него вроде как даже ID нету ) В этот момент можно ему свойства любые поменять. А дальше он "отправляет" его на сервер, где данные этого объекта опять же считываются в STATE_Read и создаётся "настоящий" объект, таким образом ты STATE_-функции никак не пропустишь.

Возможно тут есть какие то особенности, ибо разбираться во всём этом себе дороже, но по примерам GSC и моему опыту всё именно так и работает. Если интересно, то вот я тоже сделал логирование в CSE_ALifeInventoryItem, и в момент загрузки игры (не НИ) у меня вот такое вышло.

Лог 1
// Создаются какие то пустышки (не обязательно от нашего объекта, у них ID нету)
[65535] STATE_Read
[65535] UPDATE_Read
// Первой вызывается STATE_Read - считывает либо данные из сейва, либо из all.spawn, либо из фейкового объекта
[7151] STATE_Read
// Далее UPDATE_Read, аналогично STATE_Read, т.к эти данные тоже в сейве\спавне сохраняются
[7151] UPDATE_Read
// Дальше идёт вызов функций записи в нет_Пакет, не знаю точно для чего это нужно, но данные там не меняются
[7151] STATE_Write
[7151] UPDATE_Write
[7151] STATE_Write
[7151] UPDATE_Write
// Тут снова идёт считывание из нет_Пакета
[7151] STATE_Read
[7151] UPDATE_Read
// И наконец наш серверный объект с загруженными данными попадает к клиентскому
[7151] net_Spawn
// И в дальнейшем эти функции вызываются на апдейте
[7151] net_Export
[7151] UPDATE_Read


Как видно, при загрузке игры первым всегда идёт вызов STATE_Read. А UPDATE_Read вызывается, поскольку его данные тоже в сохранение идут. (я об этом успел подзабыть

Для новой игры:
Лог 2

[6538] STATE_Write
[6538] UPDATE_Write
[6538] STATE_Write
[6538] UPDATE_Write
[6538] STATE_Read
[6538] UPDATE_Read
[6538] net_Spawn


Наоборот сперва идёт UPDATE_Write - почему так происходит? А ПЫС его знает %)


А вот лог для предмета, который я заспавнил скриптом:

Лог 3

[16109] STATE_Write // Запишет в нет_Пакет дефолты из конструктора
[16109] STATE_Read
[16109] STATE_Write
[16109] STATE_Write
[16109] STATE_Read
[16109] net_Spawn


Для него UPDATE_ функции даже ни разу не вызвались в момент создания.

А вот что происходит в момент сохранения игры:

Лог 4

[16109] net_Export // Шлём данные из клиента в серверный объекта
[16109] UPDATE_Read // Считываем их там
[16109] STATE_Write // Сохраняем STATE_ в сейв
[16109] UPDATE_Write // Сохраняем UPDATE_ в сейв


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

- - - - - - - - - - - - - - - - - - - -
По поводу твоего кода:
1) Добавь чтение своей переменной в net_Import (если тебе не наплевать на МП, иначе игра там вылетит\сломается)
2) В xrServer_Objects.h измени версию спавна на единичку.
3) В UPDATE_Read добавь перед m_fValue проверку на версию (if (m_wVersion > "старая_версия")).

Либо если тебя интересует только сингл (или эти данные не критичны для МП) - откати все свои правки и юзай save()\load() у клиента.

Цитата
Добавил по такому-же принципу переменную в CSE_ALifeObjectHangingLamp, но там почему-то все оказалось наоборот: первым, после создания объекта вызывается CSE_ALifeObjectHangingLamp::UPDATE_Read, соответственно из нет-пакета читается пустое значение, которое затирает дефолтное значение переменной.


Посмотри на Лог 1\Лог 2 и поймёшь почему так происходит. Если это новая игра, то сперва будет вызываться UPDATE_Write (почему хз, наверно это так спавн парсится или объект пустышка гонит в нет-пакет свои данные), если это загрузка сейва то наоборот UPDATE_Read. Добавь проверку на версию (пункт 3) и в фонарик, и в лампу - и, теоретически, твоя проблема должна исчезнуть.

- - - - - - - - - - - - - - - -
Небольшая заметка

UPDATE_ и net_Export следует использовать только для передачи небольших переменных. Если тебе надо сохранить на сервере какую-нибудь строку (например длинную строку со списком апгрейдов), то следует использовать STATE_Write.
Пример можешь глянуть в inventory_item_upgradge.cpp -> add_upgrade() и в xrServer_process_event.cpp -> GE_INSTALL_UPGRADE.

Но если тебе всё равно на МП, то можешь прям из клиентского объекта напрямую изменять переменные серверного объекта.
GermanAizek
Простите, но я встал в тупик при компиляции Level Editor, да и вообще всех editors, к примеру при компиляции проекта отдельно le (исходники ЗП оригинал) он просит хэдеры "stdafx.h" и "fastmath.h". Я вбил в поиск fastmath и не нашел, а stdafx много. Вопрос какой инклюд надо подключать к проекту если нет этой fastmath.h? Может я что-то упустил от Шокера в инструкции по сборке? biggrin.gif
GermanAizek
Цитата(GermanAizek @ 04.02.2017, 18:12) *
Простите, но я встал в тупик при компиляции Level Editor, да и вообще всех editors, к примеру при компиляции проекта отдельно le (исходники ЗП оригинал) он просит хэдеры "stdafx.h" и "fastmath.h". Я вбил в поиск fastmath и не нашел, а stdafx много. Вопрос какой инклюд надо подключать к проекту если нет этой fastmath.h? Может я что-то упустил от Шокера в инструкции по сборке? biggrin.gif


Стойте, а есть же готовые исходники в репозиториях? Я бы не парился делая то, что кто-то сделал. И если есть, то посоветуйте репозиторий и как понять какую использовать мне visual studio для сборки без бубна исходников из репозитория?
abramcumner
Цитата(GermanAizek @ 04.02.2017, 20:22) *
и как понять какую использовать мне visual studio для сборки без бубна исходников из репозитория?

В описании репозитория будет написано, какая студия нужна для сборки.

Только level Editor собирается не в студии, а в C++ Builder. Шестой версии вроде.
GermanAizek
Цитата(abramcumner @ 04.02.2017, 20:29) *
Цитата(GermanAizek @ 04.02.2017, 20:22) *
и как понять какую использовать мне visual studio для сборки без бубна исходников из репозитория?

В описании репозитория будет написано, какая студия нужна для сборки.

Только level Editor собирается не в студии, а в C++ Builder. Шестой версии вроде.


Вот насчет левел эдитора неожиданный поворот, спасибо за информацию. Ну вот к примеру есть репозиторий xrDev там есть исходники фиксенные ЗП, но я не могу найти какая студия года, пытался открыть 2008,2010 пока тщетно.
abramcumner
Цитата(GermanAizek @ 04.02.2017, 22:32) *
репозиторий xrDev там есть исходники фиксенные ЗП

Visual Studio 2013
если *.sln открыть блокнотом, то во второй строке будет названии студии smile.gif
AndreySol
При открытом окне обыска ящика\нычки\трупа(это CUICarBodyWnd ?), если перемещаем какой-то предмет из инвентаря актера в другой инвентарь - где отслеживается, что именно мы переместили ?
А то обнаружил, что если на актера надет броник с ПНВ, и он включен, если открыть инв. ящик и переместить этот броник из инв. актера в инв. ящика - ПНВ продолжает работать. Хочу поправить это...
GermanAizek
Цитата(abramcumner @ 04.02.2017, 23:03) *
Цитата(GermanAizek @ 04.02.2017, 22:32) *
репозиторий xrDev там есть исходники фиксенные ЗП

Visual Studio 2013
если *.sln открыть блокнотом, то во второй строке будет названии студии smile.gif


Благодарю теперь буду знать.
ForserX
Наткнулся случайно парки месяцев назад. https://github.com/Im-dex/xray-162

VS2015
Stalker_Monolit
Помогите решить проблему в xrGame в исходниках ТЧ
Клац
Ошибка 1 error C2770: недопустимые явные аргументы шаблон для "luabind::detail::class_rep *luabind::detail::get_class_rep(lua_State *,void (__cdecl *)(T))" X:\Users\xray_engine_soc\sources\SDK\luabind\luabind\luabind\detail\policy.hpp 673 1 xrGame
Ошибка 2 error C2770: недопустимые явные аргументы шаблон для "luabind::detail::class_rep *luabind::detail::get_class_rep(lua_State *,void (__cdecl *)(T))" X:\Users\xray_engine_soc\sources\SDK\luabind\luabind\luabind\detail\policy.hpp 673 1 xrGame
Ошибка 3 error C2770: недопустимые явные аргументы шаблон для "luabind::detail::class_rep *luabind::detail::get_class_rep(lua_State *,void (__cdecl *)(T))" X:\Users\xray_engine_soc\sources\SDK\luabind\luabind\luabind\detail\policy.hpp 673 1 xrGame
Ошибка 4 error C2770: недопустимые явные аргументы шаблон для "luabind::detail::class_rep *luabind::detail::get_class_rep(lua_State *,void (__cdecl *)(T))" X:\Users\xray_engine_soc\sources\SDK\luabind\luabind\luabind\detail\policy.hpp 673 1 xrGame

не пойму в чем проблема все вроде бы как правильно.
GermanAizek
Цитата(Forser @ 05.02.2017, 00:37) *
Наткнулся случайно парки месяцев назад. https://github.com/Im-dex/xray-162

VS2015

Воу тут visual 2015, уто-то еще компилил под новые версии biggrin.gif
Интересно, а там пофиксены все баги и недочеты, которые вы перечислили?

Цитата(Forser @ 05.02.2017, 00:37) *
Наткнулся случайно парки месяцев назад. https://github.com/Im-dex/xray-162

VS2015


Эм, чекнул внутри описание проекта, а там версия 14 года.
14 и можно открыть в 15?

Код
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
abramcumner
Цитата(GermanAizek @ 05.02.2017, 11:26) *
# Visual Studio 14

Visual Studio 14 = Visual Studio 2015. В файле пишется внутренняя версия, а программы называют маркетологи по своей системе biggrin.gif
Winsor
Уважаемые знающие, а какой элемент отвечает в движке за рисование анимации приседания? как сделать более "плавное" приседание? ТЧ

CODE
void CActor::g_cl_CheckControls(u32 mstate_wf, Fvector &vControlAccel, float &Jump, float dt)
...skip...
if (isActorAccelerated(mstate_wf, IsZoomAimingMode()))
{
Crouched = character_physics_support()->movement()->ActivateBoxDynamic(1);
}
...skip...

Вот собственно "присели", но какие бы параметры я в ActivateBoxDynamic не передавал - "плавности" не добавляется...
Спасибо за Ваши советы!
macron
Цитата(Winsor @ 06.02.2017, 12:18) *
Уважаемые знающие, а какой элемент отвечает в движке за рисование анимации приседания? как сделать более "плавное" приседание? ТЧ

Дык вроде скорости анимаций настраиваются через Actoreditor в самих моделях и *.omf/*.skls-сборниках анимаций на которые они ссылаются. Для более серьезных настроек еще вроде Майу используют. Что касается самого движка, возможно в нем где-то заложен "fps" в целом для всех анимаций.
Zagolski
Он наверное имеет в виду приседание от первого лица, чтоб оно плавно происходило, наподобие как в CoC сделано.
Winsor
Цитата(Zagolski @ 06.02.2017, 19:44) *
Он наверное имеет в виду приседание от первого лица, чтоб оно плавно происходило, наподобие как в CoC сделано.
Да, именно это.
Карлан
Цитата(Shoкer @ 03.02.2017, 03:23) *
Ещё есть один трюк, который облегчит тебе жизнь, но скорее всего он не совместим с МП.
Забудь про серверные классы, в клиентских у объектов есть функции save() \ load().
Точно также работают с нет-пакетами, и эти данные даже записываются в серверный объект (там есть под них выделенное место, custom_data кажется, не путать с той что из конфигов)

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

Цитата(Shoкer @ 03.02.2017, 03:23) *
net_Import в сингле вроде как не работает (по крайнем мере я не словил его вызовов)

Напущу туманности. Вроде как работает, вроде как ловил, но вот тут точно не буду говорить, не помню. Нужно проверять. Да и сетевая часть у меня, мягко сказать, немного переделана.

Student91122
Ребята может кто-то напишет как собрать debug версию движка ЗП. А то у меня все собирается но движок зависает на логотипе. Или может кто-то подскажет как включить Master Gold для release версии.
ForserX
1. Mixed тоже на мастерголд настроен
2. Задав MASTER_GOLD в препроцессоре. (точное название макроса не помню)
AndreySol
Нубский вопрос можно ?
Что есть MASTER_GOLD ?
ForserX
Цитата(AndreySol @ 10.02.2017, 16:36) *
Нубский вопрос можно ?
Что есть MASTER_GOLD ?

#define, только задаётся в настройках препроцессора
Vampir35
Кто разбирался с детекторами в ЗП/ЧН?
Код
if(m_artefacts.m_ItemInfos.size()==0)    return;

Вот где этот лист формируется и наполняется артефактами? Никак не могу понять.
AndreySol
Цитата(Vampir35 @ 13.02.2017, 21:08) *
Вот где этот лист формируется и наполняется артефактами?

Ну пройдись поиском по "m_ItemInfos"...
Vampir35
Это было первое что я делал) Если бы всё было так просто - в тему бы я не писал.
ForserX
Не вижу смысла хранить в привате.
https://bitbucket.org/sv3nk/fray 1.6.02

Интересного мало, большая часть изменений описана тут:
https://bitbucket.org/sv3nk/fray/wiki/Home
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.