Перейти к содержанию

Etil

Сталкеры
  • Публикаций

    41
  • Зарегистрирован

  • Посещение

Весь контент Etil

  1. N42 Как оказалось, всё довольно просто. Код под спойлером в моём предыдущем сообщении.
  2. Всем привет. Появилась необходимость создать в окне (CUIScriptWnd) элемент, где текст - это строковая переменная. Вопрос: как это осуществить? Upd: Нашёл решение, выдрал из одного из скриптов Вергаса. Кому интересно:
  3. Mass То есть, время до апдейта торговли и прочие параметры, которые сохраняются (должны сохраняться) в функции save(obj, packet), которая вызывается из xr_motivator function motivator_binder:save(packet) trade_manager.save(self.object, packet) end - это всё не работает?
  4. N42 Так и планирую сделать: буду записывать значения переменных в строгой последовательности, названия уровней сокращу до номеров, остальное - в бинарном/числовом формате. P.S: параметры динамические, присваиваются каждому НПС рандомным образом, потому комбинаций конфигов может быть бесконечное множество. P.P.S: надо будет не забыть прописать удаление переменной из se_stor при удалении НПС (можно поставить удаление на смерть НПС, но лучше также прописать проверку в функции удаления обьекта из игры).
  5. N42 Кхм, там... перечень локаций + отношение НПС к каждой из локаций (нравится\не нравится), плюс ещё штук так пять-шесть других параметров. И так для каждого НПС. Полагаю, придётся провести оптимизацию и записывать сокращённую строку в se_stor (там, насколько я помню, тоже есть лимит на длину). На самом деле, так будет даже лучше, т.к. можно будет запросто получить доступ к переменным из других файлов.
  6. Всем привет. Такой вопрос: существует ли ограничение длины строки (или символов, которые можно сохранять) при записи в function save(obj, packet) (скрипт trade_manager) через packet:w_stringZ() ? Просто при сохранении строки подобного вида: "текст==текст==текст" (или при считывании записи) игра ломается.
  7. imcrazyhoudini Да. Возможность "переписки" с НПС меня в этом контексте не особо интересует.
  8. imcrazyhoudini Да оно и в солянке, и в аномали, и в NLC, и ещё много где есть. Но реализовано так себе.
  9. Всем привет. Пока есть свободная минутка, спрошу: в некоторых модах реализована сталкерская сеть (интернет), но есть ли моды, которые добавляют только её? Если нет - напишу сам (т.к. фичи удовлетворительного качества ни в одном моде не припомню).
  10. Pepel По поводу лечения - это реально. Если будет на днях свободное время - помозгую. Но тут есть нюансы: если не улучшать логику НПС, то доктор ведь буквально под огонь полезет, и запросто может до ГГ живым и не дойти. Поскольку в тч такой системы отрядов, как в зп, нет, можно будет считать отрядом население того же смарт-террейна, к которому приписан доктор. Если док гуляет без смарта - то лечит всех из своей группировки в радиусе, скажем, 80 метров. Ну и ГГ он лечит в любом случае, в том же радиусе. По поводу передачи лута - так, в принципе, можно. Есть на уме как минимум один вариант, но он может не очень хорошо сказаться на оптимизации. Функция переноса предмета в инвентарь ГГ есть (я ей пользовался когда черновик скрипта многоприцельности писал), можно прикрутить обработчик событий к разным предметам (и модифицировать у тех, у которых он уже есть), и поставить проверку на расстояние до ГГ. Если ближе чем n метров - то предмет перемещается в инвентарь. Опять же, это очень даже может создать лаги. Дополнено 6 минуты спустя Pepel в геометрию входят: террейн (земля), деревь, кусты, дома и т.д. Грубо говоря, всё то, с чем нельзя взаимодействовать. Ящики, бочки, аномалии, люди, и т.д. - динамические обьекты. Поскольку изменения вносятся только в спавн, то нужен он и гейм_граф (они связаны). Вроде, ещё нужны левел_граф каждого уровня, level.game каждого уровня, и ещё что-то. Весь список не помню, советую посмотреть уроки по компиляции локации. По крайней мере это так, если не совмещать СДК и игру. Вроде, при сборке локации часть файлов пропадают/заменяются готовыми к компиляции геометрии и на такой локе игра уже действительно не запустится. Поэтому я держу СДК и файлы мода отдельно.
  11. Pepel Геометрию нужно компилировать только когда ты геометрию редактируешь. При изменении спавна, компилируется левел_граф, гейм_граф и спавн. А я тридцать квестовых НПС, переделанные гулаги, километровые патрульные пути и полностью новое заселение локации прикручивал. Надолго меня не хватило)
  12. Delford На скриптах далеко не уедешь. Можно осваивать acdc, но я бы на неё останавливать не советовал. Научился декомпилировать и компилировать спавн - и пошёл изучать СДК. На канале Андрея Непряхина (ссылка) есть уроки по ней, сам по ним учился. Работать исключительно с ACDC можно либо создавая халтуру (мод, полностью или почти полностью основанный на вейпоинтах тч и использующий обекты ТЧ), либо если ты мазохист (я невероятно терпеливый человек, и даже я не выдержал. Переписывание координат со скриншота или копипаста каждой координаты по отдельности из лога - это мука, а их ещё вручную надо снимать). СДК, если не ковырять геометрию локаций, позволяет работать с удовольствием и создавать сложные квесты, постановочные сцены, и т.д, без особых проблем. Дополнено 9 минуты спустя Pepel Что подразумевается под "лечением наподобие халфлайф"? Лечение через диалог - пожалуйста, без проблем. Спокойно по принципу медиков из зп можно сделать (да и делали уже). Лечение по желанию НПС? Заскриптованое, или нет? Если да - то можно зафиксировать гг на одном месте, заставить НПС подойти к нему, проиграть анимацию, и под её конец хп ГГ будет восстановлено. Если нет - это уже другой разговор. Желание-то лечить ГГ для НПС можно организовать, а нужно ли? При каких условиях оно должно срабатывать, и не повредит ли это игровому балансу? И как (в теории) должна работать передача лута без диалоговых окон? Просто спавнить по скрипту? А как понять, какой предмет нужно заспавнить? Вообще не понятно.
  13. N42 Каждая строка является названием секции, в которой находится перечень предметов, вероятность спавна, мин. и макс. количество каждого из них. В большинстве случаев, секции не повторяются, потому прописывать строку в виде "название_секции" = n попросту нет смысла, проще заставить скрипт считывать строку за строкой из пресета и спавнить их по очереди, т.к. в подавляющем большинстве случаев n == 1. Однако, судя по всему, так нельзя, так что пришлось переписать конфиги.
  14. И снова здравствуйте. Есть вопрос по поводу функции line_count, код выглядит примерно так: Правильно ли я понимаю, что line_count() считает только уникальные параметры, и игнорирует дубликаты?
  15. band1tov xr_s.script Лично у меня вызов данного скрипта висит только на апдейте (ибо нигде больше и не нужен), вот здесь: function actor_binder:update(delta) object_binder.update(self, delta) xr_s.on_actor_update(delta) ...
  16. band1tov Вариант 1 - повесить на :update в bind_stalker. Не рекомендую так делать, т.к. навешивание большого количества лишних проверок отрицательно скажется на производительности. Впрочем, если проверка одна на всю игру - то и так сойдёт. Вариант 2 - поставить проверку на апдейт в нужный момент, и убрать по получению инфопоршня. Как это сделать? В ЗП и ЧН есть скрипт xr_s , который (вроде, после должной адаптации) можно использовать как раз для этого. У меня он есть, сейчас гляну, что с ним нужно делать.
  17. Разобрался. Все ещё не понимаю, что выдавало миллион 'true', но хоть работает.
  18. Merci Речь о единичном тайнике, или о всех тайниках в ТЧ? Если о всех - то переделать скриптовую схему тайников (и написать свои таблицы с лутом). Не советую, очень геморно. Сам этим занимаюсь. Если речь о единичном тайнике, то тут можно составить таблицу с предметами (названиями секций из конфигов), потом через table.getn("имя_таблицы") получить кол-во позиций в таблице, и при помощи math.random(1, table.getn("имя_таблицы")) определять то, какой предмет выпадет. В итоге, в функции спавна alife():create() вместо секции предмета прописываешь имя_таблицы[math.random(1, table.getn("имя_таблицы"))] . Но, это будет спавнить все предметы с одинаковой вероятностью. Хочешь разный шанс выпадения для разных предметов? Переписывай скриптовую схему тайников, составляй таблицы лута - и будет тебе счастье. Лично у меня на подобный проект ушло часов 16 - и это при условии, что я знал, что я делал. Удовольствие неописуемое.
  19. band1tov Вариант 1 - выдай НПС другую группировку, и назови её "Сталкеры". Вариант 2 - при смерти НПС (через логику смарт террейна, или через xr_motivator (что, однако, значительно хуже)) принудительно измени отношение выбранных нпс к ГГ на "нейтрал", или "друг". Можно ещё воткнуть проверку на случай, если они не заагрятся (чтобы их отношение к гг, которое, скажем, было "друг" не изменилось на нейтрал в ситуации, когда этого можно было бы избежать). Полагаю, есть и другие варианты. Upd: по технической части: если все НПС в одном смарте, то можешь сделать так (строка из xr_effects): xr_gulag.setGulagNeutral("название_смарта", db.actor) Строка в скрипте закомментирована, но аналогичная, делающая всех НПС в гулаге врагами, в игре работает. Так что и тут проблем быть не должно.
  20. band1tov Вообще, в xr_conditions есть полезные функции (gulag_empty, gulag_population_le, gulag_population_ge и прочие). Можно использовать xr_conditions.gulag_empty(название_смарта). Стоит при этом учесть, что если есть респавны и население гулага может респавниться, то их может учитывать, даже если они ещё очень далеко от смарт террейна. Потому, возможно, в таком случае стоит использовать функции по типу xr_conditions.gulag_population_comed_le(название_смарта, количество).
  21. ian98 Так выдавайте инфопоршень при запуске функции, а в условиях запуска пропишите его (инфопоршня) отсутствие. В самой функции также либо забирайте инфопоршень в конце (по выполнению), либо повесьте забирание на таймер.
  22. Просто хочу кое-что уточнить. Я тут разбирал скрипт death_manager, и нашёл кое-что интересное. Вот так высчитывается вероятность выпадения предмета (с дальнейшим сравнением с math.random(100)): item_by_community[таблица][секция_предмета] = 100*tonumber(вероятность_выпадения_прописанная_в_конфигах). И тут назревает вопрос: а как быть с оригинальными вероятностями, например 0.005 (такая у "Слюды", или "Души")? Ведь math.random(100) выбирает число в промежутке 1-100, а 100*tonumber("0.005") == 0.5. То есть, ни "Слюда", ни "Душа" никогда с трупа не выпадут, хотя вероятность и не нулевая?
  23. И снова здравствуйте. Есть "небольшая" проблема: игра при сохранении не сохраняет брошенные гранаты, а в моём случае (очень) желательно, чтобы сохраняла - на их биндерах вся логика висит, и изменено это не будет. Вопрос: можно ли принудить игру запоминать брошенные гранаты?
  24. M31 Взрываю чтобы убить, но выглядит это довольно странно, когда вызываешь минометный обстрел, отходишь на 100-150 метров, и он не происходит. Потом подходишь на метров 30, вызываешь повторно - и всё работает. По поводу функционала соглашусь, большинство НПС в оригинальной игре постоянно в онлайне не находятся, хотя такие есть (или, как минимум, такая функция). С учётом этого, проще будет симулировать взрыв, если ГГ находится за радиусом алайфа (партиклы + звук, что можно без особых проблем реализовать). За информацию спасибо.