Winsor 178 Опубликовано 11 Января 2017 или находился, в зависимости от места вызова перемещение из различных мест внутри инвентаря отслеживается без проблем методы в оригинале, который бы говорил, где предмет находился до перемещения - InBelt/InRuck - используют итераторы, единственный более быстрый - это InSlot. т.е. для того чтобы определить место, где предмет был - необходимо 1) доэкспортировать методы аналогичные InBelt/InSlot/InRuck в скрипты 2) контролировать вызов калбека строго ДО удаления предмета из списков 3) забыть о асинхронных таймерах при обработке этого калбека из скрипта 4) Вам все равно придется делать вызовы калбека на перед каждым изменением положения предмета, ибо после m_ruck.erase(it); InRuck уже никак не скажет где предмет был... Возьмем например CInventory::Slot - функция помещения предмета в слот. в ней два итератора - по рюкзаку и по поясу. Причем они вызываются последовательно, а не через ИЛИ и удаление предмета это просто erase из списка (не Drop, не REJECT_PARENT). т.е. для того чтобы сказать однозначно откуда был убран предмет в моем случае надо вызвать один и тот же калбек со второй константой callMovingCallback(pIItem,InventoryPlaceChange::removeFromBelt); или callMovingCallback(pIItem,InventoryPlaceChange::removeFromRuck); в Вашем случае, дабы разделить эти две операции и узнать однозначно где был предмет необходимо вызвать два разных калбека? Далее, помещение этого же предмета непосредственно в слот callMovingCallback(pIItem,InventoryPlaceChange::putToSlot); если при Вашем случае не вызывать предыдущие калбеки то в этом месте узнать где предмет был - нет никакой возможности. так что в моем случае не вижу кощунства, а всего лишь упрощение жизни использованием стандартного подхода к обработке событий... вся винда сделана на событиях с константами... Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 12 Января 2017 Объясните пожалуйста как это сделать.в двух словах это однозначно не объяснить. если не лезть в движок - то Вам потребуется отличное знание LUA и понимание механики сталкера, для реализации этого функционала скриптами. поэтому Ваш вопрос чрезвычайно объемный - конкретизируйте вопрос - получите конкретный ответ. 1 Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 16 Января 2017 Уважаемые знающие, что нужно в движке ТЧ добавить, чтобы работал шейдер selflight на худе оружия? Изменения в рендере, или где то в худе (CHUDTarget::Render) ? Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 18 Января 2017 (изменено) KD же фиксил на репозитории XR-DEV Что именно? Если касаемо рендера там очень много всяких добавлений, какое из них касается шейдера самосвечения? Если худ оружия - разницы я не заметил. Я готов признать полную несостоятельность свою и пасть ниц пред знающим - но Вы конкретно знаете - что именно правилось, можете меня ткнуть? Или так - вот в каком то репозитарии кто-то что-то поправил и все у них заработало, наверное. У меня уже на 3-и листа такой информации.... Изменено 18 Января 2017 пользователем Kirgudu Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 24 Января 2017 (изменено) Или от какого-то другого ? В основном UpdateCondition выполняется на главном апдейте CEntityAlive::shedule_Update. т.е. для Вашего класса , если Вы хотите использовать shedule_Update - Вам необходимо свой класс наследовать от CInventoryItemObject. CInventoryItem не имеет в предках CObject и не подходит для Вашей задачи. Изменено 24 Января 2017 пользователем HellRatz Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 7 Февраля 2017 Уважаемые знающие, а какой элемент отвечает в движке за рисование анимации приседания? как сделать более "плавное" приседание? для ТЧ 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 не передавал - "плавности" не добавляется... Спасибо за Ваши советы! Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 8 Февраля 2017 Чисто, логика: если ни чего не меняется - может не там меняешь ? ActivateBoxDynamic - в нем происходит какая то магия с физическими координатами тела. я ж не против, что не там. а где там? Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 20 Марта 2017 Помощь нужна: как сделать массив(таблицу) произвольного размера? Типа такого: строка = строка строка = строка строка = строкаxr_vector не подойдет - это аналог std::vector. для Вашей задачи необходимо использовать std::map - в xray аналог - xr_map. для ключей и значений можно использовать как shared_str (память выделяется один раз и храниться до тех пор пока есть хоть одна ссылка на эту строку) так и xr_string (аналог std::string). Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 20 Апреля 2017 Уважаемые , есть ли у кого распаковщик ресурсов ЛА? почему то некоторые архивы распаковываются, а некоторые нет. У меня в стандартной установке распаковываются архивы до dba - далее все с ошибкой распаковки. Спасибо за помощь! 1 Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 3 Мая 2017 Уважаемые знающие, столкнулся с багом (который говорят присутствовал еще с оригинала ТЧ) - при одевании на ствол глушителя и прицела - иногда текстура либо глушителя либо прицела может не вырисовываться на худе. при этом флаги аддонов выставляются правильно. лечится повторно снятием/одеванием, например, прицела. Сталкивался ли кто либо с таким багом и как боролись? Благодарю! Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 14 Июня 2017 ТЧ 1.0007 rc1Уважаемые знающие, подскажите место, хотя бы приблизительно - что в движке отвечает за "выбрасывание" активного предмета по kDROP?есть некаяg_PerformDrop()/pItem->SetDropManual (TRUE); - но я не увидел, где именно и чем меняются координаты объекта, что он вылетает по такой "красивой дуге".Благодарю за информацию! Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 19 Июля 2017 (изменено) Уважаемые знающие, вопрос про серверные объекты. создаю некий клиентский класс class CGBox:public CInventoryItemObject експортирую в скрипты Скрытый текст void CGBox::script_register(lua_State *L) { module(L) [ class_<CGBox, CGameObject>("CGBox") .def(constructor<>()) ]; } регистрирую в class_registrator.script cs_register(object_factory, "CGBox", "se_gbox.se_gbox", "CL_GBOX_S", "game_box_s") сам серверный скриптовый класс class "se_gbox" (cse_alife_item) Так вот вопросы - 1) почему у меня для итема данного класса (CL_GBOX_S) в упор не хотят вызываться методы on_unregister/on_register/keep_saved_data_anyway/on_spawn ? при этом __init/STATE_Read/STATE_Write вызываются. 2) как в биндере объекта (object_binder) из скриптов "увидеть" переход offline/online? Для этого же объекта почему то из биндера не вызываются методы net_export/net_import. При переходе в офлайн вызывается net_destroy, но он же вызывается и при обычном release() Благодарю! p.s. зачем все это - дабы в момент перехода в оффлайн сохранить данные клиентского скриптового объекта в серверный, при онлайн - обратно. Изменено 19 Июля 2017 пользователем Winsor Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 19 Июля 2017 (изменено) 46 минут назад, Zagolski сказал: то вешай сразу на движковый класс что именно вешать? почему то из скриптового движкового класса не вызываются методы нужные... или я немного не понял Ваш ответ. p.s. так же выяснил что, если класс наследован от CInventoryitemObject и лежит в инвентаре актора - в онлайн он не переводиться (т.е. для него не вызываются движковый метод CSE_ALifeDynamicObject::add_online) Изменено 19 Июля 2017 пользователем Winsor Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 19 Июля 2017 3 минуты назад, Zagolski сказал: Не нужно ничего в скриптах регистрировать никаких классов. В движке в clsid_game.h новый класс регистрируй как какой-нибудь O_GBOX, на него в игре свой предмет и цепляй. В ТЧ для большинства так нужно делать. До определенного момента хватало биндера (object_binder). Но приспичило мне сохранять некие данные в нетпакете класса. save/load работают , но если выбросить такой предмет на землю - то при переходе offline/online методы save/load не вызываются. т.е. задача именно из скриптов увидеть этот переход. Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 20 Июля 2017 14 часов назад, Дизель сказал: включать черно-белое изображение пост процесс, аналогично работе ПНВ. Где то на просторах интернета даже валялся (вроде на сталкерине) файлик с черно-белым постпроцессом. Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 20 Июля 2017 21 час назад, Карлан сказал: по первому вопросу текстом не знаю как быстро описать можно не быстро, главное - понять что не так. 21 час назад, Карлан сказал: Мое хранилище умеет это делать (различать факт того, когда объект удален, от факта, когда объект просто ушел в оффлайн) , пример использования можешь в m_items.script посмотреть. посмотрел очень внимательно. не увидел ничего, что относилось бы к проверке такого факта. Есть, конечно write_pstor, но она у Вас движковая - мне ничем не поможет. единственное что хоть как то наводит на мыслб о отличии удаляется объект или переходит в офлайн - это local sobj = sim:object(obj:id()). Хотя по коду движка серверный объект всегда удаляется позже клиентского (ну во всяком случае такая очередность удаления объекта и сообщения GE_DESTROY)... Не смог найти... Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 14 Августа 2017 Уважаемые... Наверное, многие сталкивались с необходимостью изменить аи-сетку. Собственно при работе с уже существующим спавном - помогает universal_acdc -update. А что делать со скриптовым create()? Вариант - переснимать координаты - не подходит, ибо когда таких объектов 100 - это еще реально. А вот когда 9000 - это жестоко. Кто нибудь пытался облегчить решение этой проблемы со стороны движка? Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 16 Августа 2017 Уважаемые, можно ли где то найти исходники vertex.exe , который идет в комплекте с universal_acdc? в ридми написано что использовались исходники xray_re, но в самом xray_re я такой утилиты не нашел. Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 22 Августа 2017 1) Если у Вас компилятор поддерживает c++11 (например VS2015) - можно воспользоваться функцией std::stoi. Причем данная функция гарантированно генерирует исключение при некорректной строке ввода и Вы можете перехватить это исключение и работать далее с входящей строкой как с "нечисло". 2) Если нет поддержки c++11 - используйте функцию strtol, вторым параметром в которую передается "контрольная строка", через которую можно проверить , удалось ли преобразование или нет. Вот небольшой пример Скрытый текст bool parseLong(const char *str, long *val) { char *temp; bool rc = true; errno = 0; *val = strtol(str, &temp, 0); if (temp == str || *temp != '\0' || ((*val == LONG_MIN || *val == LONG_MAX) && errno == ERANGE)) rc = false; return rc; } 3) или же Вы можете воспользоваться банальной проверкой - вся ли входящая строка является числом.например функцией std::isdigit в цикле по символьно по story_id , либо string::find_first_not_of, либо если у Вас с++11 all_of. p.s. Функция atoi чрезвычайно не рекомендуема к использованию в с++. 2 Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 19 Октября 2017 есть такая утилита - WinLister. Бесплатная - находите дам окно MSCTFIME UI и нажимаете F2 . Без диспетчера задач и перезагрузки... Оставляет его IME подсистема ввода винды. Началось это с какого то апдейта винды. 1 2 Поделиться этим сообщением Ссылка на сообщение