Перейти к контенту

Рекомендуемые сообщения

@Nazgool, да, мы идем разными путями к одному и тому же. Я поэтому и спросил, зачем читать их динамически? Вопрос был не "Зачем список clsid'ов?", а "Зачем читать статические данные из скриптов?". Важен академический интерес? Хорошо, но ИМХО этот способ применять в конечном продукте я бы не стал. 2 причины, подключение X-Ray Extensions и мы все равно не видим список, визуально, да, для кода задача решена, но для программиста какие ключи писать не ясно. Да, можно вывести в лог или еще что-нибудь, но тогда придется их куда то записать. И лично моя причина, читать так чтото из длл - жесть, для этого и существует hex редакторы. Но ладно.

Так еще то вопрос у меня был, что с clsid'ами объявленными в скриптах, а не в движке? Есть вариант (может работает, а может и нет, так что без кода), подмена функции метатаблицы __newindex на свою с вызовом старой, в своей написать добавление этого ключа в некую глобальную таблицу, только надо найти место, где переопределять это дело.

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий

Проще всего посмотреть список ключей в исходниках движка.

Ссылка на комментарий

Nazgool

 

Сам по себе список не имеет ни какого смысла. Если уже охота попрактиковться в бинарных извращенях то составь табличку соответствий ключей к числовым констатам

Ссылка на комментарий

Andrey07071977

 

 

Не знаю что дальше хочешь делать,

А почему я это написал?

 

 

а дальше уже просто

Я думаю составить таблицы соответствия из уже имеющегося списка ключей абсолютно не сложно.

Если я ещё и это сделаю, то что останется вопрошающему?

 

И ещё. Я никого не заставляю пользоваться этим. Одному это жесть, другому извращения.

Это одна из техник!

Изменено пользователем Nazgool
Ссылка на комментарий

Nazgool, доведи дело до конца, неужели самому не интесно сделать полностью динамическое и функциональное заполнение таблички, как говориться on demand. Про извращения это была шутка вызванная восхищением твоей упертости :)

Ссылка на комментарий

Ну в моем конкретном случае составлять соответствие числовых значений - уже лишнее.
Мне собственно требовалось написать аналог функций IsStalker, IsWeapon, ... etc из _g.script. и для тех объектов, которые мне нужны, надо было найти как их звать по клсиду)

В случае скриптово-добавленных клсидов их можно просто в class_registrator-e посмотреть.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

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

Ссылка на комментарий
составь табличку соответствий ключей к числовым констатам

А чего там составлять? Заменить в коде

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. Т.е. обращаться к ней можно будет и по строке и по номеру.

сделать полностью динамическое и функциональное заполнение таблички

Насколько я понял по условию, никакой динамики и не нужно. Просто необходим список и всё. Читать его один раз при загрузке - много времени не займёт. Вроде так?

Изменено пользователем Nazgool
Ссылка на комментарий

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

Учитывая что в моем моде клсиды добавляются так же и через скрипты, и, разработка еще в процессе - могут и еще новые классы добавиться. А числовые значения при этом смещаются. И да, экспериментальным путем выяснилось, что то, что мы добавляем в class_registrator-e, добавляется вовсе не в конец списка clsid. Я так понимаю добавленные следуют за своими родителями. А все последующие в списке - смещаются. И потому даже числовые значения классов, прописанных в движке, уже не соответствуют "имеющимся табличкам".

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

Доброго времени суток  :) 
Вопрос такой, товарищи модмейкеры, как сохранить некую переменную с числовым значением для определенного предмета? Допустим есть пять разных предметов одной секции, и вот у этих пяти предметов эта переменная может быть разной. Интересует процесс сохранения и загрузки такой переменной и что для этого нужно. (вроде называется сохранить в pstor предмета?)

Ссылка на комментарий

,

У инвентарных предметов нет пстора, насколько я помню. для них удобнее пользоваться кастом-датой их нет-пакета. см. модуль Артоса для работы с нет-пакетами, хотя ему вроде есть и другие аналоги.

  • Полезно 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

 

Zander_driver, а чуть подробнее можно?) Потому как с такой темой столкнулся впервые и где этот модуль взять/посмотреть примеры работы, а тем более аналоги я даже не знаю)

 

Ссылка на комментарий

как запретить использование предмета без другого 
Ну например консервы без специального ножа не открыть ?

svarog2741.gif

 

НС - шлак, солянки - шлак.

Ссылка на комментарий

Ну для этого надо 3 вещи.

1. отловить факт того, что предмет попытались использовать (use_collback, тут все просто)
2. проверить наличие другого предмета. тоже все просто. if db.actor:object("ваш_консервный_нож") ~= nil then и так далее.

3. если второго предмета нет, то спавнить первый обратно. а если есть, то выполнять то, что должно свершиться от применения первого. И выполнять скриптово, потому что первый объект на самом деле был безвозвратно съеден в первом пункте и на этот факт никак не повлиять.

Изменено пользователем Zander_driver

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

@Zander_driver,

1. отловить факт того, что предмет попытались использовать (use_collback, тут все просто)

Может я не прав, но use_collback вроде извещает о том что уже было сделано, а не о попытке это сделать ?

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

 

 

как запретить использование предмета без другого

А если близко к тексту, именно "запретить" - то можно попытаться покопать в сторону фейковых объектов. Примерно так:

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

 - вообще насчет консервы пример глуповат - имея нож как одно из оружий, не открыть им консерву... :blink:

 - для вскрытых банок можно текстурки использовать соответствующие, для пущей достоверности...

 - и сделать, чтоб содержимое вскрытой банки протухало по-быстрому, опять-же для пущей достоверности...

 

И вообще - все это извращение...

 

 

Изменено пользователем AndreySol
  • Нравится 1
Ссылка на комментарий

 

 

Может я не прав, но use_collback вроде извещает о том что уже было сделано, а не о попытке это сделать ?

Да, о том что уже сделано. Если прочитать весь мой пост, становится ясно почему я назвал это "попыткой".

 

@svarog2741, Все данные вам ответы, как мои так и Dennis_Chikin-a, относятся к Оригинальной игре. При достаточном желании и навыках работы с скриптами, реализовать чтобы именно так все выглядело для игрока - не сложно. Но метод непрост, и новичку маловероятно его осилить.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

Ну, так уж "непрост"... Листнуть 4 страницы назад - не такое уж и непосильное дело. Да и на сталкер-вики сходить - не велик подвиг. ;)

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

Раньше где-то на форуме я видел функцию, которая округляла число, например, до десятитысячных, найти что-то не могу ее, потому вопрос:
Как можно округлять числа до десятитысячных, тысячных и сотых?

Ссылка на комментарий

, можно округлить в помощью 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
Ссылка на комментарий

, или так:

function round(num, idx)
  local coeff = 10^(idx or 0)
  return math.floor(num*coeff+0.5)/coeff
end

где num - округляемое число, idx - порядковый номер знака после запятой, до которого следует округлить, включая 0 для округления до целого.

Но если необходимо предусмотреть округление в том числе и до какого-либо старшего знака в целой части, тогда нужна доработка.

  • Спасибо 1
  • Полезно 1
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...