Desertir 202 Опубликовано 11 Августа 2014 Поделиться Опубликовано 11 Августа 2014 @Nazgool, да, мы идем разными путями к одному и тому же. Я поэтому и спросил, зачем читать их динамически? Вопрос был не "Зачем список clsid'ов?", а "Зачем читать статические данные из скриптов?". Важен академический интерес? Хорошо, но ИМХО этот способ применять в конечном продукте я бы не стал. 2 причины, подключение X-Ray Extensions и мы все равно не видим список, визуально, да, для кода задача решена, но для программиста какие ключи писать не ясно. Да, можно вывести в лог или еще что-нибудь, но тогда придется их куда то записать. И лично моя причина, читать так чтото из длл - жесть, для этого и существует hex редакторы. Но ладно. Так еще то вопрос у меня был, что с clsid'ами объявленными в скриптах, а не в движке? Есть вариант (может работает, а может и нет, так что без кода), подмена функции метатаблицы __newindex на свою с вызовом старой, в своей написать добавление этого ключа в некую глобальную таблицу, только надо найти место, где переопределять это дело. ТЧ 1.0004. SAP и Trans mod github Ссылка на комментарий
Charsi 440 Опубликовано 11 Августа 2014 Поделиться Опубликовано 11 Августа 2014 Проще всего посмотреть список ключей в исходниках движка. Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
Andrey07071977 18 Опубликовано 11 Августа 2014 Поделиться Опубликовано 11 Августа 2014 Nazgool Сам по себе список не имеет ни какого смысла. Если уже охота попрактиковться в бинарных извращенях то составь табличку соответствий ключей к числовым констатам Ссылка на комментарий
Nazgool 250 Опубликовано 12 Августа 2014 Поделиться Опубликовано 12 Августа 2014 (изменено) Andrey07071977 Не знаю что дальше хочешь делать, А почему я это написал? а дальше уже просто Я думаю составить таблицы соответствия из уже имеющегося списка ключей абсолютно не сложно. Если я ещё и это сделаю, то что останется вопрошающему? И ещё. Я никого не заставляю пользоваться этим. Одному это жесть, другому извращения. Это одна из техник! Изменено 12 Августа 2014 пользователем Nazgool Ссылка на комментарий
Andrey07071977 18 Опубликовано 12 Августа 2014 Поделиться Опубликовано 12 Августа 2014 Nazgool, доведи дело до конца, неужели самому не интесно сделать полностью динамическое и функциональное заполнение таблички, как говориться on demand. Про извращения это была шутка вызванная восхищением твоей упертости Ссылка на комментарий
Zander_driver 10 333 Опубликовано 13 Августа 2014 Поделиться Опубликовано 13 Августа 2014 Ну в моем конкретном случае составлять соответствие числовых значений - уже лишнее.Мне собственно требовалось написать аналог функций IsStalker, IsWeapon, ... etc из _g.script. и для тех объектов, которые мне нужны, надо было найти как их звать по клсиду) В случае скриптово-добавленных клсидов их можно просто в class_registrator-e посмотреть. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Andrey07071977 18 Опубликовано 14 Августа 2014 Поделиться Опубликовано 14 Августа 2014 Дело твое конечно, но не совсем понятна твоя цель - если ты хочешь написать аналог функций IsStalker, IsWeapon то тебе нужны именно числовые значения, если же просто по числу найти название, так это и так можно сделать по уже имеющимся табличкам. Ссылка на комментарий
Nazgool 250 Опубликовано 14 Августа 2014 Поделиться Опубликовано 14 Августа 2014 (изменено) составь табличку соответствий ключей к числовым констатам А чего там составлять? Заменить в коде elseif #key>0 then if clsid[key] then t[#t+1] = key end на elseif #key>0 then local k = clsid[key] if k then t[key] = k t[k] = key end и получиться таблица вида : { строка = число, число = строка, ... } и так будет для каждого поля из clsid. Т.е. обращаться к ней можно будет и по строке и по номеру. сделать полностью динамическое и функциональное заполнение таблички Насколько я понял по условию, никакой динамики и не нужно. Просто необходим список и всё. Читать его один раз при загрузке - много времени не займёт. Вроде так? Изменено 14 Августа 2014 пользователем Nazgool Ссылка на комментарий
Zander_driver 10 333 Опубликовано 16 Августа 2014 Поделиться Опубликовано 16 Августа 2014 Дело твое конечно, но не совсем понятна твоя цель - если ты хочешь написать аналог функций IsStalker, IsWeapon то тебе нужны именно числовые значения, если же просто по числу найти название, так это и так можно сделать по уже имеющимся табличкам. Учитывая что в моем моде клсиды добавляются так же и через скрипты, и, разработка еще в процессе - могут и еще новые классы добавиться. А числовые значения при этом смещаются. И да, экспериментальным путем выяснилось, что то, что мы добавляем в class_registrator-e, добавляется вовсе не в конец списка clsid. Я так понимаю добавленные следуют за своими родителями. А все последующие в списке - смещаются. И потому даже числовые значения классов, прописанных в движке, уже не соответствуют "имеющимся табличкам". Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Kondr48 314 Опубликовано 16 Августа 2014 Поделиться Опубликовано 16 Августа 2014 Доброго времени суток Вопрос такой, товарищи модмейкеры, как сохранить некую переменную с числовым значением для определенного предмета? Допустим есть пять разных предметов одной секции, и вот у этих пяти предметов эта переменная может быть разной. Интересует процесс сохранения и загрузки такой переменной и что для этого нужно. (вроде называется сохранить в pstor предмета?) Ссылка на комментарий
Zander_driver 10 333 Опубликовано 16 Августа 2014 Поделиться Опубликовано 16 Августа 2014 , У инвентарных предметов нет пстора, насколько я помню. для них удобнее пользоваться кастом-датой их нет-пакета. см. модуль Артоса для работы с нет-пакетами, хотя ему вроде есть и другие аналоги. 1 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Kondr48 314 Опубликовано 16 Августа 2014 Поделиться Опубликовано 16 Августа 2014 Zander_driver, а чуть подробнее можно?) Потому как с такой темой столкнулся впервые и где этот модуль взять/посмотреть примеры работы, а тем более аналоги я даже не знаю) Ссылка на комментарий
svarog2741 83 Опубликовано 16 Августа 2014 Поделиться Опубликовано 16 Августа 2014 как запретить использование предмета без другого Ну например консервы без специального ножа не открыть ? НС - шлак, солянки - шлак. Ссылка на комментарий
Zander_driver 10 333 Опубликовано 16 Августа 2014 Поделиться Опубликовано 16 Августа 2014 (изменено) Ну для этого надо 3 вещи. 1. отловить факт того, что предмет попытались использовать (use_collback, тут все просто)2. проверить наличие другого предмета. тоже все просто. if db.actor:object("ваш_консервный_нож") ~= nil then и так далее. 3. если второго предмета нет, то спавнить первый обратно. а если есть, то выполнять то, что должно свершиться от применения первого. И выполнять скриптово, потому что первый объект на самом деле был безвозвратно съеден в первом пункте и на этот факт никак не повлиять. Изменено 16 Августа 2014 пользователем Zander_driver Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
AndreySol 215 Опубликовано 17 Августа 2014 Поделиться Опубликовано 17 Августа 2014 (изменено) @Zander_driver, 1. отловить факт того, что предмет попытались использовать (use_collback, тут все просто) Может я не прав, но use_collback вроде извещает о том что уже было сделано, а не о попытке это сделать ? В результате вашим способом получится на мой взгляд коряво - к примеру, если съедание консервы прибавляет здоровья, то когда съели - здоровье прибавилось, затем оказалось что консервного ножа нет, вернули консерву обратно в инвентарь, а затем надо мудрить с отниманием той прибавки к здоровью, что дало съедание этой консервы. как запретить использование предмета без другого А если близко к тексту, именно "запретить" - то можно попытаться покопать в сторону фейковых объектов. Примерно так: все консервы, в момент открытия инвентаря, подменять на фейковые, созданные на родительской секции како-го либо предмета, который можно только выбросить. Открывашку же сделать как-раз "съедобной" (заменив текст подсказки на "Открыть..."), и при ее "съедании" - создавать скриптовое окно, в которое выводить список фейковых консерв, и после выбора нужной, удалять ее из инвентаря, спаунить вместо нее уже нормальную, съедобную консерву и соответственно открывашку обратно. В результате появится уже типа открытая консерва, которую можно съесть стандартно и получить нужный эффект, и готовый к дальнейшему использованию консервный нож. - вообще насчет консервы пример глуповат - имея нож как одно из оружий, не открыть им консерву... - для вскрытых банок можно текстурки использовать соответствующие, для пущей достоверности... - и сделать, чтоб содержимое вскрытой банки протухало по-быстрому, опять-же для пущей достоверности... И вообще - все это извращение... Изменено 17 Августа 2014 пользователем AndreySol 1 Ссылка на комментарий
Zander_driver 10 333 Опубликовано 17 Августа 2014 Поделиться Опубликовано 17 Августа 2014 Может я не прав, но use_collback вроде извещает о том что уже было сделано, а не о попытке это сделать ? Да, о том что уже сделано. Если прочитать весь мой пост, становится ясно почему я назвал это "попыткой". @svarog2741, Все данные вам ответы, как мои так и Dennis_Chikin-a, относятся к Оригинальной игре. При достаточном желании и навыках работы с скриптами, реализовать чтобы именно так все выглядело для игрока - не сложно. Но метод непрост, и новичку маловероятно его осилить. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 17 Августа 2014 Поделиться Опубликовано 17 Августа 2014 (изменено) Ну, так уж "непрост"... Листнуть 4 страницы назад - не такое уж и непосильное дело. Да и на сталкер-вики сходить - не велик подвиг. Изменено 17 Августа 2014 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Kondr48 314 Опубликовано 21 Августа 2014 Поделиться Опубликовано 21 Августа 2014 Раньше где-то на форуме я видел функцию, которая округляла число, например, до десятитысячных, найти что-то не могу ее, потому вопрос:Как можно округлять числа до десятитысячных, тысячных и сотых? Ссылка на комментарий
Charsi 440 Опубликовано 22 Августа 2014 Поделиться Опубликовано 22 Августа 2014 , можно округлить в помощью string.format, например, так: print(string.format("%.2f", math.pi)) --> 3.14 print(string.format("%.3f", math.pi)) --> 3.142 print(string.format("%.4f", math.pi)) --> 3.1416 1 1 Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
Kirgudu 1 207 Опубликовано 22 Августа 2014 Поделиться Опубликовано 22 Августа 2014 , или так: function round(num, idx) local coeff = 10^(idx or 0) return math.floor(num*coeff+0.5)/coeff end где num - округляемое число, idx - порядковый номер знака после запятой, до которого следует округлить, включая 0 для округления до целого.Но если необходимо предусмотреть округление в том числе и до какого-либо старшего знака в целой части, тогда нужна доработка. 1 1 Инструмент Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти