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

Malandrinus

Жители
  • Число публикаций

    1 930
  • Регистрация

  • Последнее посещение

  • Дней в топе

    13
  • AMKoin

    160 [Подарить AMKoin]

Весь контент пользователя Malandrinus

  1. Не так уж много там можно сделать. Нельзя заменить класс на другой и комбинировать клиентский и серверный в произвольном сочетании. Они должны друг другу строго соответствовать. Поэтому это работает только для тех объектов, для которых есть свой персональный класс, унаследованный от CGameObject. А их не так уж и много, и большинство уже и так там использованы. Кроме того, свой серверный класс надо создавать на основе существующего. при этом ты его не заменяешь, а как бы дополняешь. Там опять же возможности весьма ограничены. Можно дополнительные данные сохранить и ещё кое-что по мелочи. Принципиально изменить поведение объектов невозможно. А он разве не в буфере обмена?
  2. Можно ли? Да. Чем? Дизассемблером, чем же ещё. К этому надо знать кучу разных и непростых вещей и иметь _очень_ много свободного времени и аццкого терпенья. Классы, прописанные в движке, регистрировать не надо. Они и так прекрасно работают. Это регистрация скриптовых серверных классов - создание связки "серверный класс / клиентский класс" и привязка этой пары к определённому clsid.
  3. Ковыряю физику объектов. Есть большая непонятка. Код такой: local pshell = cobj:get_physics_shell() -- получаю для онлайнового объекта его физическое тело if pshell then local jn = pshell:get_joints_number() -- получаю количество костей end И вот странность. Для дохлых сталкеров полученное число костей выходит 11, при том, что их 45. Для некоторых моделей и вовсе число костей нулевое, при том, что как минимум одна-то кость точно есть. Соответственно и получить кость не выходит, т.е. вызов pshell:get_joint_by_bone_name(<имя_кости>) приводит к вылету. Кости точно имеются в наличии все, какие прописаны в модели. В этом можно убедиться, получив положение произвольной кости с помощью метода cobj:bone_position(<имя_кости>) Знает кто-нибудь, в чём дело?
  4. Есть отдельная тема Сообщество Мапперов. Там и карт куча и рекомендации имеются, как их подключать. Добавлено через 4 мин.: Насчёт заморачиваться - это да, а вот насчёт компа помощней - не уверен. Если локация уже скомпилена, то зачем там исключительные мощности? Сообщение от администратора _And_ Так я в смысле компиляции и писал.
  5. Народ, меня всегда удивляло, что вам для этого программа нужна. Неужели так сложно написать и выполнить вот такой скрипт? local pos = db.actor:position() local gvid = db.actor:game_vertex_id() local lvid = db.actor:level_vertex_id() get_console():execute(string.format("x=%d_y=%d_z=%d_lvid=%d_gvid=%d", pos.x, pos.y, pos.z, lvid, gvid)) get_console():execute("flush") И у вас в логе есть вся информация. Даже из игры выходить не надо.
  6. неправильно лечишь. На запись свойство health - это не само здоровье, а его приращение, так что если хотел добавить единицу, то написать надо было так: self.npc.health = 1 раненость (неписей) лечить - для этого есть вроде функция wounded(true/false) степень кровотечения можно получить функцией get_bleeding() на лечение кровотечения функции нет, но я поэкспериментировал и выяснил, что можно наносить отрицательный хит. Вот вам и лечение. По моему, эквивалент бинта будет с типом урона wound.
  7. Monnoroch, в своё время на офф. форуме IG-2007 сказал вот такую вещь: Я так понимаю, что до завершения одного процесса нельзя делать следующее действие. Поскольку некоторые действия происходит асинхронно, т.е. вызов функции только инициирует начало этого действия, а заканчивается оно только некоторое время спустя, то нельзя делать что-то с этим предметом сразу после вызова функции. Надо дождаться окончания. Я также думаю, что это такие действия, которые требуют синхронизации серверной и клиентской стороны. Поскольку синхронизация происходит по сети (или как бы по сети при сингловой игре), то этот процесс занимает изрядное время. Чтобы уменьшить время работы скриптового вызова такие действия делают асинхронными. всё это только мои предположения.
  8. Monnoroch, Total Commander используешь? У меня в подписи есть к нему системный плагин для распаковки. Найти любой файл и распаковать занимает секунды.
  9. очепятка? должно быть только одно двоеточие Кстати, кто знает, зачем здесь второй булевский аргумент?
  10. tbl = {1,5,8} -- проверяем, что таблица существует и не пустая if tbl and next(tbl) then ... end Добавлено через 33 мин.: Это сработает только для тех таблиц, у которых ключи начинаются от единицы и идут непрерывно. Или иными словами, для созданных таким образом: t = {v1, v2, v3, ... и т.д.} - в этой таблице ключи создаются автоматически с автонумерацией от единицы если же я создал таблицу общего вида: t = { [k1] = v1, [k2] = v2, [k3] = v3, и т.д. } или просто добавлял в таблицу значения с произвольными ключами: t[k] = v то это не сработает. В этом случае надо использовать функцию next(table, key). Эта функция возвращает ключ, следующий за key. Если key равен nil (или просто не указан), то вернёт первый ключ. Если в таблице нет ничего, то получим nil, что эквивалентно false в логических выражениях.
  11. С прыжком ситуация такая. С одной стороны, когда прыгаешь - разница между позицией и камерой увеличивается определённым образом. С другой стороны, когда бегаешь по пересечённой местности эта разница тоже скачет. Не сильно, но сравнимо с прыжком. Поэтому не знаю, как уверенно определить факт прыжка. Если устроит, что бег по "ребристой" местности будет индицироваться как "подпрыгивание", то в принципе будет работать. Ну почему непременно должно? Фиг его знает, почему движок не сохраняет точно позицию, но это не так уж и странно. От вычислений с плавающей запятой можно ожидать чего угодно. А с практической точки зрения проблем нет, числа там близки к нулю (1E-5 - 1E-6, что составляет несколько игровых микрометров) так что можно спокойно задать безопасную границу в скажем 1E-3 и сказать, что всё, что меньше - стояние на месте. А я думаю, что даже если его будет постэффектом колбасить, то это только повлияет на направление камеры =)
  12. Я проверил. position() - это точка не на земле, а "на ступнях" ГГ. При прыжке перемещается вместе с ГГ. Так что способ вроде работает. Чему именно соответствуют эти координаты, я уже и не знаю. Не проекция на землю - это точно. Но и не тазовая кость. Добавлено через 5 мин.: так а в чём проблема? стоит/полуприсел/сел отличаются отчётливо, а бег/ходьба можно отличить по изменению горизонтальных координат.
  13. Я проверял. Специально для этого сделал световой маркер в пространстве - партикл, позиция которого постоянно обновляется. Видно, что position() - это в точности на земле, поскольку партикл видно ровно наполовину. Правда прыгать не пробовал, так что не знаю, сохраняется ли позиция при прыжке. Добавлено через 2 мин.: Думаю иначе. Это вроде как положение _на сетке_
  14. А если измерять расстояние между db.actor:position() и камерой device().cam_pos ? Я так понимаю, что position - это всегда точка на земле, а cam_pos - это "глаза" ГГ. Из предположительных ограничений: - не знаю, что будет в момент прыжка - однозначно не будет работать в режиме не от первого лица.
  15. 1. По другим не знаю =( 2. Это я недосмотрел. Однако ничто не мешает логически инвертировать возвращаемое значение или изменить условие: function f(obj,npc) return musor[obj:section()] == nil end
  16. Сложно сказать. Но если надо определить принадлежность предмета к некоторому множеству (судя по коду, именно это требуется), то я бы сделал по другому: musor = { ["bolt"] = true, -- вместо true может быть что угодно отличное от nil ["yet_another_musor_section"] = true } function f(obj,npc) return musor[obj:section()] ~= nil end
  17. biskot, 1. Возьми из шапки темы шпаргалку, разберись, где прописываются иконки (ничего сложного), и редактируй сам. Для большинства людей здесь, это - неинтересная рутина. 2. У меня возникают сомнения в адекватности (я не имею в виду квалификацию) авторов мода, которые запихали в него несколько десятков автоматов Калашникова (а было ли в реале столько модификаций?). С другой стороны судя по тем же иконкам никаких особенных новшеств по части новых предметов в этом моде нет. 3. Там что, серьёзно изменён сюжет и графика по сравнению с оригинальной игрой? Что за мод вообще?
  18. Руки бы этому господину поотрывать. Во-первых, 4096*2048. Во-вторых, там редкая помойка. Куча пробелов между иконками и много практически одинаковых изображений. Я этого не понял. Там одних только калашей несколько десятков! Можно попробовать сохранить в DXT1 с некоторой потерей качества, но в целом на мой погляд это не исправить.
  19. biskot, пока скачать не даёт, проверяет что-то. Но уже видно, что файл сделан кривыми руками. 8 мегов при размере 2048x1024 - это ненормально. Без упаковки что-ли сделано? Щас разберёмся.
  20. Залей на обменник. Например на ifolder.ru
  21. По-моему, бред какой-то. Это размер как в оригинальной игре. Ну ладно... Скачиваешь SIE последней версии. Запускаешь, открываешь иконки из пункта меню Файл -> тени Чернобыля -> ui_icon_equipment.dds Он их сам найдёт Далее. Меню "Вид -> Загрузить иконки из ТЧ". Несколько секунд подожди. Когда загрузит, убери сетку "Вид -> показать сетку". Увидишь, как соответствуют иконки из конфигов реальным изображениям. Кроме того, при движении мышой над изображением будет подсвечиваться имя объекта в статусной строке. Если всё выглядит логичным, значит проблема у тебя. Если не соответствуют - значит товарищ тебе напарил.
  22. Monnoroch, Что-то я об этом слышал, но тогда так и не понял. Нельзя ли подробнее?
  23. Покопал глубже и откопал вот такую собаку =) Файл amk_mod.script: local last_condition=0 ... function check_armor() ... if last_condition<armor:condition() then armor:set_condition(last_condition) else last_condition=armor:condition() end end check_armor вызывается по апдейту. Видно, что состояние брони переписывается принудительно, если оно стало больше, чем сохранённое в переменной last_condition. Надо убрать local из объявления переменной last_condition, чтобы сделать её доступной снаружи модуля и при необходимости повысить состояние брони одновременно записывать нужное значение с помощью set_condition и в эту переменную: outfit:set_condition(cond + 0.2) amk_mod.last_condition = cond + 0.2 В принципе, можно что-то в check_armor изменить. Но фиг его знает, зачем там это сделано.
  24. Monnoroch, когда броню снимаешь, то всё работает. Возможно, где-то засел скрипт, который контролирует состояние _надетой_ брони и переписывает твоё значение.
×
×
  • Создать...