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

Malandrinus

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

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

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

  • Дней в топе

    13
  • AMKoin

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

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

  1. PazDim, Никак. Вычисляй координаты заранее. И скажи на милость, зачем тебе понадобилось спавнить динамические аномалии на другой локации? Кому они там нужны?
  2. Garry_Galler, Понять это можно так. Это нужно для тайников. Есть, к примеру, огрызок трубы или обломок дерева. Там может быть тайник, а может и не быть. Хотя в игре тайники не исчезают, но может так было на каком-то этапе задумано. Оттуда и остался прозрачный визуал тайников. Это в качестве гипотезы.
  3. Garry_Galler, значит это не работает. Есть вероятность, что это как-то прописывается прямо в визуале. Тогда об этом возможно знают комрады, работающие с SDK. А может это зависит от класса объекта. Например тушки становятся физически прозрачными после смерти, но если тот-же визуал тушки прописать физическому объекту, то он вполне взаимодействует с актором. Кроме того я обнаружил, что визуалы для тайников из all.spawn почему-то все невидимые. Это наводит на дополнительную мысль, что то, что мы видим в игре, - это просто часть местности, а невидимый визуал в этом случае просто накладывается на сетку местности.
  4. Garry_Galler, Попробуй поиграться с флажками визуала.
  5. БоБеР, Назначь ему story_id, потом по нему и удалишь.
  6. PazDim, Нет, нельзя. Сетка уровня - это что-то вроде невидимой альтернативной поверхности, натянутой на геометрический ландшафт. Неписи ходят по этой поверхности, а не по геометрии, и без неё не смогут передвигаться вообще. Физическим объектам эта сетка не нужна, хотя и можно сделать так, чтобы они привязывались к ней при спавне.
  7. кровоSTALKER, Gonarh, К чему такие сложности? В секции объекта есть параметр custom_data.
  8. Mechanic.92, Читать сюда. Я для кого тему делал?! :ny_z_9:
  9. Garry_Galler, Физической оболочки у предметов в инвентаре нет. Это в общем-то логично, зачем она там нужна? Мелкая правка xrGame.dll для 6-го патча, которая позволяет выполнять drop_item для ящиков. Самой либы в архиве нет, так что вроде правила форума не нарушены. P.S.: И не забудьте сделать резервную копию!
  10. TREWKO, level_name(level_id) - системное имя уровня по его номеру level_id() - номер текущего уровня switch_distance(<радиус>) - по идее установка радиуса переключения алайфа, но у меня не сработало, работало только изменение из конфига Внятное имя уровня (не системное, а то, которое изображается на карте): game.translate_string(string.lower(alife():level_name(level_id)))
  11. sapsan, а смысл? Время в игре всё равно зацикленное. Как 2^32 игровых миллисекунд проходит - отматывается на стартовое значение. Добавлено через 128 мин.: sapsan, Так а толку, что там 64 бита?! Это время всё равно заворачивается на стартовое после переполнения счётчика. Я проверял. Но если переделал, то сохраняй по компонентам: год сохранять не нужно, так как он никогда не изменится. месяц, день месяца, час, минута, секунда - по одному байту, всего 5 миллисекунды - два байта итого 7 байт и сделать пару служебных функций для сохранения/загрузки, и все дела.
  12. alex210192, есть такая штука, "сетевой этикет" называется. Написание капсом, равно как и любое другое визуальное увеличение шрифта, считается криком. Для воплей нужны веские причины, и рядовая просьба о помощи к ним не относится. По регистрации классов есть здесь.
  13. Knight, set_community_goodwill/change_community_goodwill/community_goodwill - установить/изменить/получить отношение группировки к персонажу set_community_relation/community_relation - установить/получить отношение одной группировки к другой
  14. Архара, внесу свои пять копеек в холивар. Лично мне всегда были интересны подходы, которые позволяли дополнять игру без потери совместимости со старыми сохранениями. Скриптовый путь здесь более удобен. Хотя на самом деле дополнять можно почти что угодно и, при соблюдении определённых ограничений, совместимость с сохранёнками не потеряется: all.spawn, новые локации, новые объекты, визуалы и пр. - всё можно добавлять. Только представьте себе мод, который расширяется эволюционно. Добавили новую локацию, появилась новость "открыты проходы туда-то". Со старой сохранёнкой бежишь исследовать новые локации. Другое дело, что на практике эта идея загнётся на первом же баге, правка которого убьёт совместимость и лишит всю затею смысла.
  15. Arhara, а как? Колбек на хит? Память хитов? Так это же только если попал?
  16. Хемуль04, Я может не понял твой вопрос, но с какой стати в группе имён для бандитов будут имена для сталкеров? Всё, что есть по генерации имен было описано здесь. Другого нет.
  17. dimos, связь самая непосредственная. Естественно, надо прописать story_id в game_story_ids.ltx, и после этого он появляется под прописанным именем в классе story_ids. Через этот класс-перечисление можно обращаться к новому story_id по имени, а не использовать малопонятную цифру.
  18. alexwew, Динамические аномалии так не сделать.
  19. Dennis_Chikin, Эту информацию можно получить из acdc. Perl при этом знать не обязательно. Если включить логику, то восстановить последовательность загрузки конкретного класса не сложно.
  20. Завершаем диалоги. В последней части подробно рассмотрены функции и методы, так или иначе относящиеся к диалогам: инициирование, завершение, блокирование/разблокирование и т.д.
  21. К этому уровню надо копить патроны. И на этом уровне не жалеть. Всё равно в конце дадут патронов перед выходом к башне, и там у броневика будет ящик с патронами. Копить патроны просто. Пользуйся хеллсингом, с ним можно почти всю игру пройти. Я, кстати, с удивлением обнаружил, что гнёздам совершенно по барабану стрелы из хеллсинга и гранаты. Я ещё могу понять стрелы, но неуязвимость к гранатам - это просто нонсенс! Так что гранаты лучше с толком потратить раньше и хеллсинг не забыть сменить на дробовик.
  22. Ох, развели флуд в теме... Сначала по CTime. На самом деле совершенно фиолетово, правильно ли он считает даты или нет по совершенно банальной причине. В сталкере время не может быть больше чем стартовое время + 2^32 миллисекунд, что соответствует примерно 49 дням. По истечении этого времени счётчик отмотается на ноль и время изменится на стартовое. Дата никогда не дойдет до проблемного конца 12-го месяца. Теперь по числам. Выглядит так, что в сталкере разработчики изменили дефолтовое представление чисел с double на float. Прежде чем паниковать давайте разберёмся немного в основах. Во-первых, а что собственно плохого в использовании числа с плавающей запятой (в смысле, что плохого в использовании его как универсального типа "для всего")? Разработчики Lua и здесь не отошли от принципа "ничего лишнего". Может они переусердствовали? К примеру, бытует следующее правило - числа с плавающей запятой нельзя сравнивать на равенство. Это верно, спорить не буду, но с некоторыми оговорками. Почему, собственно, нельзя? Ответ - из-за ошибок округления. Ну а если их нет? Число с плавающей запятой содержит в себе как подмножество некоторый непрерывный диапазон целых чисел (т.е. подмножество целых чисел, которые могут быть представлены этим типом гораздо больше, чем этот диапазон, но за пределами диапазона между числами уже будут разрывы, и корректность целочисленных сложений будет нарушена). Пока мы ведём вычисления в пределах этого диапазона и не используем операций, которые могут привести к появлению дробных чисел (деление, к примеру), то число будет оставаться целым, информация теряться не будет и в частности не будет никаких проблем с точным сравнением чисел на равенство. Диапазон этот определяется размером мантиссы и не столь уж он и маленький. В частности у double мантисса занимает 52 бита + знаковый бит, т.е. в сумме 53 бита. Это, между прочим, позволяет представить больше целых чисел, нежели обычным типом int языка C/C++, в котором на большинстве архитектур 32 бита. Да, при выходе за этот диапазон арифметика ведёт себя не так, как целочисленная арифметика СИ. Ну и что? Не выходите за диапазон и всё. При выходе за допустимый диапазон любая машинная арифметика будет вести себя ненормально. То, что мы привыкли к одному способу ненормальности не означает, что так должно быть везде. Все прочие особенности и ограничения, связанные с этим представлением, также не вызывают особенных проблем. Как правило, в скриптовых языках применение целых типов ограничено всевозможными счётчиками в циклах и подсчётом количества чего-либо. Операция деления при этом является попросту излишней. Если вдруг до зарезу надо, то просто не забудьте про необходимость использовать явно функцию округления. Дело привычки опять же. Второй вопрос, насколько плохо урезание дефолтового типа с double до float? Оценим без лишних эмоций. Тип float имеет мантиссу в 23 бита + 1 знаковый. Диапазон целых чисел, которые могут храниться без потери точности составляет +/- 16777216 (16 миллионов). Давайте вспомним, что в игре может существовать всего 65534 объекта. И даже количество вертексов уровня (самая многочисленная сущность в игре) не превышает обычно полутора-двух миллионов. Так что с учётом тех потребностей, которые обычно возникают в скриптовании в этой игре, тип float выглядит вполне достаточным. По скорости же работы float на 32-х разрядной архитектуре существенно быстрее, чем double. С точки зрения собственно вычислений с плавающей запятой, то тут тоже всё нормально. В игровой математике нет необходимости в повышенной точности, зато есть необходимость в скорости. Ну и про память не забываем. Теперь я кстати понял, почему у меня возникали проблемы со старшими битами при использовании функций побитовых операций (bit_and, bit_or, bit_xor). Сами то функции работают нормально, но вот маску можно задать не любую. Хотя опять же, в игре не используются флажки разрядности больше 16 бит, так что и с этим проблем никаких.
×
×
  • Создать...