Suhar_ 0 Опубликовано 24 Мая 2018 Поделиться Опубликовано 24 Мая 2018 Доброго времени. Исходный код ЗП. Файл EntityCondition.cpp Функция CEntityCondition::UpdateCondition() Внутри функции необходимо выполнить проверку на то, что текущий апдейт относится к актору. Как это можно сделать? Ссылка на комментарий
AndreySol 215 Опубликовано 24 Мая 2018 Поделиться Опубликовано 24 Мая 2018 @Suhar_, В ТЧ, в EntityCondition.h есть переменная CEntityAlive *m_object; Из названия, думаю, понятно для чего она. В коде можно проверить if (m_object->ID() == 0) объект с ID'ом "0" у нас всегда один - актер. Думаю в ЗП эта переменная осталась... 1 Ссылка на комментарий
mortan 143 Опубликовано 25 Мая 2018 Поделиться Опубликовано 25 Мая 2018 @Suhar_, всё намного проще - для актора есть своя переопределённая функция в файле ActorCondition.cpp. И не надо ничего определять, всё уже сделано. Ссылка на комментарий
Гость Опубликовано 26 Мая 2018 Поделиться Опубликовано 26 Мая 2018 Всем привет! Я решил перенести имя денег в конфиг, и вот что я сделал (пример ниже) во всех файлах CPP (а именно: UIActorMenuTrade.cpp, UIItemInfo.cpp, UIRankingWnd.cpp и UIActorMenu.cpp) в которых объявляется имя денег. Все остальные файлы понимают что такое translate и CStringTable, кроме одного UIActorMenu.cpp. Вот пример кода из файла UIActorMenu.cpp: LPCSTR currency_str = CStringTable().translate( "st_currency" ).c_str(); xr_sprintf( buf, "%d %s", money, currency_str ); m_ActorMoney->SetText( buf ); При комплилации возникают следующие ошибки: 20>.\ui\UIActorMenu.cpp(851) : error C2228: left of '.translate' must have class/struct/union 20> type is ''unknown-type'' 20>.\ui\UIActorMenu.cpp(851) : error C2228: left of '.c_str' must have class/struct/union 20>.\ui\UIActorMenu.cpp(851) : error C3861: 'CStringTable': identifier not found В других файлах штуки типа: "LPCSTR kg_str= CStringTable().translate( "st_kg" ).c_str();" работают, при чём в коде перед этим они не инициализированы, сколько раз я не искал в include файлах и прочее. Я явно что-то упускаю. Вопрос такой: как инициализировать этои "идентификаторы"? И ещё вопрос, но скорее это уже для какого-нибудь гуру кода. В файле Inventory.cpp есть такая переменная bool CInventory::CanTakeItem(CInventoryItem *inventory_item) const В которой есть такие строки: //актер всегда может взять вещь if(!pActor && (TotalWeight() + inventory_item->Weight() > m_pOwner->MaxCarryWeight())) return false; Я хотел сделать так, чтобы при достижении максимально веса, ГГ не смог бы брать предметы, и я поставил true вместо false. После компиляции в игре при достижении максимального веса (при чём ГГ всё таки взял предмет) игра вылетела со следующим логом: Expression : !m_error_code Function : raii_guard::~raii_guard File : ..\xrServerEntities\script_storage.cpp Line : 748 Description : ...- stalker\gamedata\scripts\xr_corpse_detection.script:337: bad argument #1 to 'random' (interval is empty) Как сделать правильно, так чтобы вообще не срабатывала функция на поднятие предмета? Огромное спасибо за ваши ответы. Используется двиг 1.6.02. Ссылка на комментарий
AndreySol 215 Опубликовано 26 Мая 2018 Поделиться Опубликовано 26 Мая 2018 22 минуты назад, Den “Angry Wolf” Koslov сказал: Вопрос такой: как инициализировать эти "идентификаторы"? Где нить в начале UIActorMenu.cpp попробовать добавить #include "string_table.h" Цитата В файле Inventory.cpp есть такая переменная Это функция... gamedata\scripts\xr_corpse_detection.script - Открыть этот скрипт-файл на 337 строке и разбираться с кодом. Ссылка на комментарий
Гость Опубликовано 26 Мая 2018 Поделиться Опубликовано 26 Мая 2018 3 часа назад, AndreySol сказал: Где нить в начале UIActorMenu.cpp попробовать добавить #include "string_table.h" Большое спасибо за подсказку. Как раз этого include в этих файлах не было. Но посколько эти файлы находятся в папке ui, то необходимо было написать так: #include "../string_table.h" Всё прекрасно сработало. Но не знаете ли как создать запрет на подбор предмета в движке? Я знаю что в скриптах есть callback "on_item_take" но это событие уже произошедшее, то есть, то чего мне по сути не нужно допустить. Ссылка на комментарий
AndreySol 215 Опубликовано 26 Мая 2018 Поделиться Опубликовано 26 Мая 2018 8 часов назад, AndreySol сказал: gamedata\scripts\xr_corpse_detection.script - Открыть этот скрипт-файл на 337 строке и разбираться с кодом. Ссылка на комментарий
Shkiper2012 35 Опубликовано 1 Июня 2018 Поделиться Опубликовано 1 Июня 2018 [ ЗП_1.6.02 / СоС_1.4/1.5 ] В каком порядке движок "читает" db-файлы? Как влияет расположение папок с ресурсами игры на это "чтение"? Знаю только, что распакованную "gamedata" в последнюю очередь. Интересуют как оригинальный двиг, так и от СоС. Смотрел исходники, но не разобрался. Заранее признателен. Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Ссылка на комментарий
Graff46 598 Опубликовано 4 Июня 2018 Поделиться Опубликовано 4 Июня 2018 Решил написать сюда... Движок ТЧ 1.0006 + X-Ray extensions. Давал свой мод тестить и столкнулся с очень интересными ошибками: Спонтанная ошибка, я думаю связана со смещениями в движке и (или) его процессе при работе. Суть в том, что строки относящиеся к названиям квестов, строки сообщений для db.actor:give_game_news(...) каким-то образом попадают в метод(ы) класса CMapLocation::LoadSpot Пример вылета: Expression : g_uiSpotXml->NavigateToNode(path_base,0) Function : CMapLocation::LoadSpot File : E:\stalker\sources\trunk\xr_3da\xrGame\map_location.cpp Line : 78 Description : XML node not found in file map_spots.xml Arguments : 60,160]Задание выполнено:\n%c[default]Побег Данная ошибка сохраняется в сейвах! Не ездят машины под собственной логикой, но начинают ехать если включена программа записи видео и нажать кнопку записи... Все эти ошибки были у тестера с Win10, у меня Win7 и их не было... Ссылка на комментарий
AndreySol 215 Опубликовано 14 Июня 2018 Поделиться Опубликовано 14 Июня 2018 В 04.06.2018 в 20:07, Graff46 сказал: + X-Ray extensions Я не шарю в этом вопросе и видимо предложу глупость, но может стоит попробовать пропатчить движок до той версии X-Ray extensions, что у Вас используется, но под Win10(и лучше той сборки, что у тестера). У меня такой вопрос: кто подскажет, в каком классе(классах) смотреть то, что касается взаимодействия актера с шейпами объектов(с аномалиями\рестрикторами\переходами) ? Ссылка на комментарий
dsh 3 824 Опубликовано 20 Июня 2018 Поделиться Опубликовано 20 Июня 2018 Тут вот такая проблема всплыла. Может кто сталкивался/занимался. Допустим у нас имеется рестриктор или его наследник с шейпом в виде сферы радиусом 0.1. Если мы этот рестриктор добавим мобу в restrictions, движок попытается определить границы этого рестриктора в левел вертексах. Т.е. какие левел вертексы составляют границу. Ну, это насколько я понял всю эту машинерию. Так вот, судя по всему, он не может это сделать для такой маленькой сферы. Насколько я понимаю, для определения, принадлежит ли вертекс границе, берутся пять точек, т.е. четыре угла вертекса и точка в центре, представляются в виде сферы радиусом 0.001 и проверяются на пересечение со сферой рестриктора, которая, напомню, имеет радиус 0.1. И тут, похоже, получается так, что при определенном положении рестриктора относительно вертекса ни одного пересечения не будет. Т.е. все эти алгоритмы рассчитаны на проверку шейпов радиусом не меньше некоторого, похоже. И что тут сделать, кроме как не делать таких шейпов? Как алгоритм можно поменять? Там, по идее, не хватает еще проверки, что часть или вся окружность шейпа находится внутри квадрата левел вертекса. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
abramcumner 1 159 Опубликовано 20 Июня 2018 Поделиться Опубликовано 20 Июня 2018 1 час назад, dsh сказал: И что тут сделать, кроме как не делать таких шейпов? Проверять границу при добалении мобам в рестрикторы и не добавлять? Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 20 Июня 2018 Поделиться Опубликовано 20 Июня 2018 Заменить проверку вертексов на таки проверку расстояния ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
dsh 3 824 Опубликовано 20 Июня 2018 Поделиться Опубликовано 20 Июня 2018 @abramcumner, ага, это была моя первая мысль. Только там чёрт ногу сломит. CAnomalyDetector имеет дело с CCustomZone. Расчет границы происходит где-то в CSpaceRestriction, по памяти пишу. Что бы этот самый Restriction появился, нужно в restriction_manager добавить эту аномалию, потом вытащить откуда-то соотв. Restriction, а потом удалить эту аномалию из менеджера, если у этого Restriction border().empty(). Бррр... dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
AndreySol 215 Опубликовано 20 Июня 2018 Поделиться Опубликовано 20 Июня 2018 5 часов назад, dsh сказал: рестриктор или его наследник с шейпом в виде сферы радиусом 0.1 Чисто по интересу - для чего нужны такие шейпы в игре ? Ссылка на комментарий
dsh 3 824 Опубликовано 20 Июня 2018 Поделиться Опубликовано 20 Июня 2018 @AndreySol, в моем случае это были аномалии костров. Я их создавал со сферой такого радиуса и не указал им eRestrictorTypeNone, что бы CAnomalyDetector их игнорировал. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
AndreySol 215 Опубликовано 20 Июня 2018 Поделиться Опубликовано 20 Июня 2018 @dsh, И, типа, проще движок править, чем поменять размеры шейпов\сменить тип рестриктора ??? Ссылка на комментарий
dsh 3 824 Опубликовано 20 Июня 2018 Поделиться Опубликовано 20 Июня 2018 @AndreySol, нет, но такое поведение движка не правильно в любом случае и если есть возможность исправить, то почему бы не исправить. Если движок не рассчитан на корректную работу с таким шейпами, то хорошо бы, если он это как-то обрабатывал, ведь подсунуть ему могут что угодно и не обязательно специально. Пусть в лог ругнется или упадет с внятной диагностикой, в крайнем случае. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 21 Июня 2018 Поделиться Опубликовано 21 Июня 2018 Использовал 0 там, где нужна просто фиговина с партклями. Позже осознал, что "фиговина с партиклями" сама по себе не нужна, но я с этим легко справлюсь, а вот люди, которым проще олспавн пересобрать, чем при загрузке сказать p = particles_object(); p:play_at_pos() - им что делать ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
dsh 3 824 Опубликовано 21 Июня 2018 Поделиться Опубликовано 21 Июня 2018 @abramcumner, сначала подумал эту проверку в CAnomalyDetector добавить, добавил, посмотрел и решил, что более общее решение наверное будет лучше. В итоге остановился на таком: https://github.com/dsh2dsh/OGSR-Engine/commit/378a34414c26a58c4422536dfbdbb84f0f8c8adc Все равно костыль, на моя взгляд, но вроде работает. 1 1 1 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти