WinCap 323 Опубликовано 19 Февраля 2017 Здравствуйте. Решил заняться редактированием движка ЗП. Использую Visual Studio 2008 и архивы stasvn.7z и engine.vc2008.fixed.rar. Подскажите, пожалуйста: 1. Как правильно делать правки, что бы была возможность отката изменений? 2. Есть какой-нибудь перечень очевидных или общепризнанных ошибок или опечаток разработчиков, которые обязательны к исправлению в исходниках? 3. Можно ли включить или добавить в VS2008 подсветку выделенного символа и парных скобок? S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Поделиться этим сообщением Ссылка на сообщение
WinCap 323 Опубликовано 14 Марта 2017 В каком месте кода CInifile ? Вот в этом: void CInifile::Load(IReader* F, LPCSTR path ... { . . . if (0!=inherited_names) { VERIFY2 (m_flags.test(eReadOnly),"Allow for readonly mode only."); inherited_names += 2; // в inherited_names содержится строка с родительскими секциями . . . } . . . } S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Поделиться этим сообщением Ссылка на сообщение
WinCap 323 Опубликовано 10 Июля 2017 Здравствуйте. Подскажите, пожалуйста, можно ли в движке синхронизировать клиентский объект с серверным? Например, если изменить что-то в CSE_ALifeInventoryItem и применить изменения к клиентскому объекту. S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Поделиться этим сообщением Ссылка на сообщение
WinCap 323 Опубликовано 10 Июля 2017 4 часа назад, mortan сказал: получить серверный объект при спавне та ещё морока Тут можно по подробнее? Я думал, что alife():create() возвращает как раз серверный объект. Задача у меня относительно простая, получить доступ к полю condition для любого объекта, например, так: Скрытый текст for id = 1, 65535, 1 do local obj = alife():object(id) if obj ~= nil and (ещё_условия) then obj:set_condition(x) end end В принципе у меня все получилось и если объект не имеет клиентской копии, то всё работает. Но если клиентский объект существует, то понятно, что для изменения condition нужно получить его функцией level.object_by_id(obj.id). Однако есть проблема, при спавне функцией alife():create() существует момент, когда level.object_by_id(obj.id) ещё возвращает nil, а вызывать set_condition для серверного объекта уже поздно, клиент все равно получит condition = 1.0. Не знаю как это происходит. Вот я и хотел принудительно синхронизировать клиент/сервер. S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Поделиться этим сообщением Ссылка на сообщение
WinCap 323 Опубликовано 12 Июля 2017 В 11.07.2017 в 08:11, naxac сказал: используй каллбэк на выход объекта в онлайн Тут есть проблема, а если объект не выйдет в онлайн? Каллбэк пропадает не только при save/load, но и при повторной установке. Я хотел реализовать бесполезную фишку, чтобы оружие валяющееся на локации постепенно портилось и в конце концов исчезало. В принципе мне удалось этого добиться, код теперь будет примерно такой: Скрытый текст for i = 1, 65535, 1 do local sobj = alife():object(i) if sobj ~= nil then if isWeapon(sobj) then local obj = level.object_by_id(sobj.id) or sobj local condition = obj:condition() if condition <= 0.05 then alife():release(sobj, true) else obj:set_condition(condition - 0.05) end end end end Разобрался с функцией alife():create(), может кому пригодится: Скрытый текст Существует три случая вызова функции alife():create(): 1. Без указания parent_id (пятый параметр). 2. Когда parent_id указывает на объект ОФФлайн. 3. Когда parent_id указывает на объект ОНлайн. В первых двух случаях создается только серверный объект независимо от координат спавна, т.е. даже при спавне в радиусе алайфа. При этом можно сразу же изменить любые параметры серверного объекта т.к. создание клиентского объекта произойдет только на следующем апдейте при переходе в онлайн самого объекта или объекта parent_id. В третьем случае создается не только серверный объект, но и клиентский, однако его регистрация в глобальной таблице объектов произойдет только на следующем апдейте. Поэтому немедленный вызов level.object_by_id(id) возвращает nil. 1 S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Поделиться этим сообщением Ссылка на сообщение
WinCap 323 Опубликовано 12 Июля 2017 @UnLoaded Клиентский объект будет создан, но не сразу, а только на следующем апдейте, когда будет определено, что он находится в радиусе а-лайфа. Файл alife_simulator_script.cpp функция CALifeSimulator__spawn_item2. S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Поделиться этим сообщением Ссылка на сообщение
WinCap 323 Опубликовано 12 Июля 2017 @Zagolski На счет перебора всех объектов согласен, это жестоко. А на счет движка идея хорошая, я подумаю. Только, наверное, настройки снижения надо будет в конфиги вынести. S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Поделиться этим сообщением Ссылка на сообщение
WinCap 323 Опубликовано 25 Июля 2017 @mortan Проблема не в функции "SendEvent_Item2Slot()", а в том как и откуда она вызывается. Если посмотреть все вызовы этой функции, а их не так уж много, то, так или иначе, в параметр slot_id передается базовый слот предмета записанный в конфигах. 1 S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Поделиться этим сообщением Ссылка на сообщение
WinCap 323 Опубликовано 25 Июля 2017 @mortan Ну, вроде все логично: Переместить предмет в слот можно только из инвентаря. Если предмет находится в другом контейнере, и мы его переносим на место какого-нибудь слота, он перемещается не в слот, а в инвентарь. И уже потом происходит его перемещение в базовый слот, если тот свободен. S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Поделиться этим сообщением Ссылка на сообщение
WinCap 323 Опубликовано 7 Сентября 2017 Здравствуйте. Мне нужно выделить и удалить часть строки заключенную в круглые скобки. Например, строку "abc(def)" разделить на "abc" и "def". У меня получился следующий код: Скрытый текст xr_string str = array_str[i].c_str(); xr_string part; xr_string::size_type bb = str.find( "(" ); xr_string::size_type eb = str.find( ")" ); if ( bb != xr_string::npos && eb != xr_string::npos ) { part = str.substr( bb + 1, eb - bb - 1 ); str.resize ( bb ); } Всё работает, но подскажите, пожалуйста, может, есть более правильный способ или более простой? S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Поделиться этим сообщением Ссылка на сообщение
WinCap 323 Опубликовано 21 Ноября 2017 @Romann Если я не ошибаюсь, в оригинальном ЗП инициализация главного меню происходит в скрипте "ui_main_menu.script". Там можно и реализовать выбор заставки. S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Поделиться этим сообщением Ссылка на сообщение
WinCap 323 Опубликовано 21 Ноября 2017 @Romann Если в движке, тогда нужно править функцию InitStatic в файле xrGame\ui\UIXmlInit.cpp. А конкретно строчку: InitTexture(xml_doc, path, index, pWnd); В ней используется переданный в функцию параметр index. Нужно добавить проверку на наличие атрибута "random" и при его наличии генерировать новый index, а при отсутствии использовать переданный. 1 S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Поделиться этим сообщением Ссылка на сообщение
WinCap 323 Опубликовано 28 Ноября 2017 @AndreySol Табуляция не работает на HUD'е игры. Попробуй использовать модификатор ширины, результат будет не очень, но это лучшее, что можно сделать в единой строке. Если хочется добиться идеальной таблицы нужно использовать отдельные статики для каждого столбца. S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Поделиться этим сообщением Ссылка на сообщение
WinCap 323 Опубликовано 2 Мая 2020 @Norman Eisenherz, если значение bSingleInstance = false, то создается новый статик. А если true, то статик с таким id ищется среди уже созданных, если находится - возвращается найденный, нет - создается новый. 1 S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Поделиться этим сообщением Ссылка на сообщение
WinCap 323 Опубликовано 17 Мая 2020 (изменено) Здравствуйте. Нужен совет профессионала. Для своего мода я использую движок CoP 1.6.0.2, собранный из исходников в VS2008. В него внесено несколько незначительных правок. Поскольку C++ не мой "конёк", а Visual Studio тем более, подскажите, пожалуйста: 1. Есть ли смысл переносить движок в более новую VS, если никаких серьёзных изменений вносить не планируется? 2. В какую версию VS проще всего перенести движок из 2008? (В 2019-ю с "наскока" перенести не получилось) 3. Если перенос в новую версию VS слишком сложен для "дилетанта", может проще перенести несколько собственных правок в другой движок? OpenXRay, например? Изменено 17 Мая 2020 пользователем WinCap S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Поделиться этим сообщением Ссылка на сообщение
WinCap 323 Опубликовано 1 Ноября 2020 @Romann, за это отвечает параметр "satiety_critical" в actor.ltx. Когда сытость меньше "satiety_critical" - здоровье уменьшается, когда больше - увеличивается. Можно не править движок, а установить "satiety_critical" = 1.0. Или изменить вычисление "satiety_health_koef": float satiety_health_koef = m_fSatiety>=m_fSatietyCritical ? 0.0 : (m_fSatiety-m_fSatietyCritical) / m_fSatietyCritical; 1 1 S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Поделиться этим сообщением Ссылка на сообщение
WinCap 323 Опубликовано 14 Сентября 2022 Здравствуйте. Подскажите, пожалуйста, как остановить падение Actor'а? Выполнение функции character_physics_support()->movement()->SetVelocity(Fvector().set(0,0,0)) только обнуляет скорость, но падение после этого продолжается, а мне нужно, чтобы Actor завис в воздухе. Движок ЗП 1.6.02. S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Поделиться этим сообщением Ссылка на сообщение
WinCap 323 Опубликовано 6 Декабря 2022 Здравствуйте. Подскажите, пожалуйста, удалось ли кому-нибудь исправить работу “квадратных” аномальных зон в ЗП (1.6.02)? Если сделать аномальную зону не из сферы, а из куба, то она работает не верно. Хит наносится правильно – внутри шейпа, а вот индикаторы на худе и постпроцесс отрабатывают так, будто она круглая. S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Поделиться этим сообщением Ссылка на сообщение
WinCap 323 Опубликовано 30 Мая Здравствуйте. Движок CoP 1.6.02. В серверных классах есть парные функции: void UPDATE_Read(NET_Packet &tNetPacket) и void UPDATE_Write(NET_Packet &tNetPacket). Есть необходимость добавить новую переменную в эти функции для обмена между серверным и клиентским классом. Для предметов "заспавненных" во время игры всё работает, но для предметов, поставленных в SDK, происходит вылет. Это ожидаемо, т.к. в all.spawn'е, собранным стандартным xrCompiler'ом, этой переменной нет. Подскажите, пожалуйста, возможно ли в функции "UPDATE_Read" как-то определить, что чтение переменных происходит из all.spawn? S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Поделиться этим сообщением Ссылка на сообщение
WinCap 323 Опубликовано 16 Сентября Здравствуйте. Подскажите, пожалуйста, возможно ли реализовать функцию "телепортации" для физических объектов (physic_object)? Может кто-то уже такое делал и есть откуда позаимствовать? Движок игры 1.6.02 CoP. S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Поделиться этим сообщением Ссылка на сообщение