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

Kirgudu

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

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

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

  • Дней в топе

    27
  • AMKoin

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

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

  1. Kirgudu

    STALKER CS: Final stroke 0.9

    В погоне за восстановлением всего и вся не забывайте, что ЧН - другая игра, действие которой происходит до событий ТЧ и "большого" выброса, перекроившего ЗО. Почему бы в ЧН и не отсутствовать некоторым аномалиям и артефактам, появившимся позже? Вообще, я искренне не понимаю это ваше стремление сделать клона ТЧ, но с другим сюжетом. Зачем? Вот зачем? Просто «чтобы было»? Хорошо, что @monk далеко не на все ваши «хотелки» соглашается.
  2. Kirgudu

    STALKER CS: Final stroke 0.9

    @reveroman, только тот техник, которому отдал флешки. По крайней мере так в OGSM было; разве только @monk изменил схему.
  3. Kirgudu

    Скриптование

    Потому что в news_manager.send_tip() используется альтернативный метод вывода сообщения: db.actor:give_game_news("Свободу тушканам!", "Тушканчики всех стран, объединяйтесь!", "ui\\ui_npc_monster", 0, 50000) В этом варианте не указываются координаты и размеры вырезаемого из текстуры изображения. Возможно, в этом и причина неработоспособности первого варианта, если вырезаемый прямоугольник не совпадает с текстурой.
  4. Kirgudu

    Скриптование

    Точно sactor.id? Строчкой раньше определяется переменная actor. Это первое.А второе - зачем такие мучения? Не проще ли сделать так? db.actor:give_game_news("Свободу тушканам!\\nТушканчики всех стран, объединяйтесь!","ui\\ui_npc_monster",Frect():set(0,215,163,105),1000,50000) @Serge!, это при условии, что там всегда 0. А также что позиция чтения установлена с начала пакета (см. выше).
  5. Kirgudu

    Скриптование

    @alex4321, ещё раз: Поэтому local packet = net_packet() local new_game = packet:r_u8() вернёт что? Мне неизвестно - не пробовал получать значение из нового net-пакета.
  6. Kirgudu

    STALKER CS: Final stroke 0.9

    Эти файлы необходимы только для (попытки) решения одного вопроса с Ашотом. Если этот вопрос не беспокоит - можно не применять.
  7. Kirgudu

    Скриптование

    В зависимости от специфики и размера сохраняемых данных - пстор, обсуждавшиеся тут универсальные хранилища, нет-пакет конкретного объекта и т. д. Вариантов хватает. По целям надо и средства выбирать.
  8. Kirgudu

    Скриптование

    И не будет никакого сообщения при таком коде. local packet = net_packet() local new_game = packet:r_u8() != 1 Во-первых, как справедливо заметил @naxac, неравенство должно обозначаться «~=». А во-вторых, чтобы пользоваться net-пакетами, надо для начала хотя бы изучить что они такое и с чем их едят. Начать можно с азов в теме «Справочник по функциям и классам», да и в целом на форуме информации предостаточно. Даже тут, на предыдущей странице, было обсуждение, которое могло бы навести на некоторые мысли. В частности, вызов конструктора local packet = net_packet() возвращает новый, чистый (!) net-пакет. Всегда. И пытаться получить из него признак запуска игры - бессмысленно. Вообще, использовать net-пакеты для сохранения признака того, что игра уже запускалась - это палить из пушки по воробьям. Один вопрос: зачем? Для этого лучше сохранить переменную в pstor; как это сделать - писалось много раз, в том числе на предыдущей странице.
  9. Kirgudu

    БЛОКпост

    Специально оставил вышестоящий пост, хотя первоначально не хотел это делать. Так вот, позволю себе напомнить, что тема называется «Скриптование». Средневзвешенный скриптёр, не желающий или не могущий лезть в другие области, такие как редактирование движка и проч., оперирует теми инструментами, которые ему предоставлены, а это, как ни крути, нет-пакеты, их ограничения, недостаток доступных пространств и методов и т. д. Конечно, можно растечься мыслями по древу сколь угодно широко, однако это категорически выходит за рамки темы. И в данном случае конкретная проблема именно решена или, по крайней мере, обнаружен (возможно, повторно) нюанс, её решающий. Дальнейшее педалирование этого вопроса буду считать оффтопом и флудом, со всеми вытекающими. Если есть что сказать по существу, то есть касаемо именно скриптования - пожалуйста. А если нет - тогда путь лежит в «Курилку программистов» или «ещё более другую тему» ((с) DC). P.S. Оба поста под снос через какое-то время.
  10. Исчерпывающий ответ уже дал @UnLoaded в этом посте.
  11. Kirgudu

    Скриптование

    Проблема нами с автором вопроса решена, исправленный модуль se_stor выложен в теме «Сборочный цех». Что касается обещанных мной подробностей. Как известно, при создании нового net-пакета в ЗП и ЧН позиция записи может не быть автоматически установлена на начало, и чтобы запись в пакет происходила как положено, позиция записи должна быть изменена принудительно методом packet:w_begin(0). Об этом уже неоднократно писалось, например здесь. Однако было обойдено вниманием (или, по крайней мере, я не нашёл на форуме соответствующей информации) то, что для «чистого» net-пакета может не быть нулём также и позиция чтения. При этом packet:r_tell() для этого пакета возвращает, например, 263. Такая ситуация встречается как минимум в ЗП, вероятно и в ЧН тоже. @Artos не учёл это в модуле se_stor, либо просто забыл исправить, что и привело к вышеописанным вылетам. Теперь данной ошибки модуль лишён. А решение простое - после создания нового net-пакета следует принудительно выставлять как позицию записи, так и позицию чтения: local packet = net_packet() packet:w_begin(0) --/ установка позиции записи в начало net-пакета (+2 технологических байта) packet:r_seek(0) --/ установка позиции чтения с начала net-пакета @Max_Raf, указанным тобой способом данные сохраняются в pstor игрока, а значит имеют ограниченный общий объём, не превышающий размера net-пакета для соотв. платформы (около 8 КБ для ТЧ и 16 КБ для ЧН/ЗП). «Войну и мир» ты в них не запихнёшь, так как переполнение гарантированно приведёт к порче сохранений. Если есть необходимость сохранять что угодно и сколько угодно, лучше посмотреть в сторону так называемых универсальных хранилищ. Что это такое - неоднократно тут объяснялось и обсуждалось, с примерами, инструкциями и т. п. Информацию легко найти; достаточно сделать поиск по форуму или, для начала, заглянуть в тему «Сборочный цех».
  12. Обнаружена и исправлена критическая ошибка в модуле универсального хранилища se_stor, приводившая к периодической невозможности сохранить в чанках данные всех подключённых внешних модулей. Ссылки те же (обновлены комплект se_stor и общий комплект). За помощь в тестировании спасибо @Romz.
  13. Kirgudu

    БЛОКпост

    @Romz, возьми эти скрипты: http://rghost.ru/6YQt5Cl2X Я взял их из последнего фикса твоего мода (то есть в твоём случае доработки напильником не требуется), поправил и дополнил вывод в лог. Надо снять лог от диалога с проводником до вылета. Дальше посмотрим по результатам. Думаю, имеет смысл переместиться с дальнейшим обсуждением в личку, пока не появится интересных общественности результатов.
  14. Kirgudu

    Скриптование

    npc:goodwill(db.actor) -- результат - число npc:relation(db.actor) -- результат - одно из значений game_object.enemy | game_object.neutral | game_object.friend Примеры использования можно найти в оригинальных скриптах игры. Вообще, поиск по файлам с помощью, например, TC, может дать много интересной и полезной информации.
  15. Kirgudu

    Скриптование

    if relation_registry.community_goodwill("stalker", db.actor:id()) > 2000 then -- действие end
  16. Kirgudu

    Тайный путь

    Оффтоп. @Outfater, в 2.1.4 нет прямого запрета писать на другом языке, только рекомендация. Понятно, что форум русскоязычный, и крайне желательно писать по-русски. Мы даже рекомендуем пользоваться онлайн-переводчиками, чтобы пост был понятен максимальному числу читателей. Но вот в чём беда: @kahului - француз (или, по крайней мере, франкоговорящий человек), и автоматический перевод именно с французского на русский (не говоря уж о трёхступенчатом переводе фр.-англ.-рус.) даёт настолько нечитаемый результат, что 2 его поста выше покажутся цветочками по сравнению с ним. Проходили некоторое время назад, знаем. Поэтому была дана рекомендация писать по-английски. Так что давайте отнесёмся к данной ситуации как к исключению. Если это так уж необходимо - я лично могу перевести 2 вышестоящих поста на русский и опубликовать здесь перевод.
  17. Kirgudu

    Дом и дача

    @ed_rez, в точку! И как я сам не догадался? Стоило буквально на одну восьмую витка резьбы сместить вправо нижний край створки (то есть поднять правый край) - справа практически перестало дуть. Осталось найти баланс по осям... наверное, буду не наклон менять, а подъём, чтобы прижим улучшился со всех сторон. Впрочем, это уже детали. Ещё раз спасибо!
  18. Kirgudu

    Дом и дача

    Продолжение моего вопроса про регулировку окна. Регулировку в плоскости, совпадающей с плоскостью окна, я нашёл. С этого ракурса не видно, но паз под шестигранник есть справа в нижней части - это сдвиг, я так понял, вправо-влево. Зубчатое колёсико - это, видимо, вверх-вниз (гнездо под ключ не нашёл, может саму зубчатку надо вращать). Но это всё мне, как оказалось, не нужно. Если помните, жаловался я на плохой прижим окна в полностью закрытом состоянии, не говоря уж о режиме проветривания. Так вот, прижимные язычки у этого окна, как оказалось, круглые, и простым их поворотом большего усилия не добиться. Вот фото механизма:
  19. По-хорошему, ответить на вопрос должен был бы кто-нибудь из знатоков NLC, но что поделать. sak_off_corpses - это полностью самостоятельный уборщик, который надо вызвать один раз при каждой загрузке. Соответственно, на наличие/отсутствие каких-либо специфических строк обращать внимание не нужно, инструкция в этом плане некорректна. Достаточно поместить строку sak_off_corpses.off_corpses() например, в самом конце функции actor_binder:net_spawn(data) оригинального модуля bind_stalker.script, перед закрывающим end.
  20. Kirgudu

    Скриптование

    @Zander_driver, судя по всему, ты пользуешься старым m_net_utils. upd.quaternion в m_net_utils --> upd.ph_rotation в m_netpk. Помимо названия, в m_netpk существенно изменился сам способ чтения/записи данных, в том числе этого свойства. Я полагаю, что в новой версии модуля твоей ошибки уже не будет. Если это так, а старая версия модуля интегрирована в слишком многие скрипты, тебе даже не обязательно повсеместно переходить на новую. Судя по инициализации там и там, обе версии вполне уживутся рядом друг с другом.
  21. Kirgudu

    Скриптование

    @Romz, ну тогда сам смотри, с какого конца подходить. Если тебе проще оперировать секундами - используй свою функцию, в оптимизированном или нет виде. Либо, если делать через CTime, у тебя уже есть время последнего выброса (self.last_surge_time)), а время до следующего можно получить так (при учёте того, что self._delta - в минутах): local delta_ctime = game.CTime() delta_ctime:setHMS(0,self._delta,0) И тогда, вернув оба объекта, можно воспользоваться функцией, которую привёл @abramcumner. Только потом не забудь перевести его результат delta (который тоже CTime) в часы и минуты: return delta:timeToString(game.CTime.TimeToMinutes) И получишь сразу строку вида "hh:mm".
  22. Kirgudu

    Скриптование

    @abramcumner, можно я отвечу? @Romz, где ты такое увидел? Сначала сложением вычисляется время следующего выброса (двух), потом разница между ними и текущим временем (next_surge:diffSec(now)), потом берётся минимальная разница. Она и возвращается, как оставшееся время до ближайшего выброса.
  23. Kirgudu

    Скриптование

    Возвращает целую и дробную части, но уже после деления на 3600, то есть и то и другое - в часах. Поэтому для получения минут дробную часть надо умножать на 60. Тогда бери мой пример. Вариант @abramcumner относится к CTime.
  24. Kirgudu

    Скриптование

    @abramcumner, вот кстати да. Но и в твоём примере не всё гладко. Если get_last_surge_time возвращает объект CTime, а get_delta - секунды, то...
  25. Kirgudu

    Скриптование

    @Romz, я правильно понимаю, что здесь ты вычисляешь время, оставшееся до ближайшего из двух типов выброса? В целом нормально, но оптимизировать есть куда. Например: function dream_calculation() local delta_su = surge_manager.get_delta() - surge_manager.get_last_surge_time() local delta_ps = psi_storm_manager.get_delta() - psi_storm_manager.get_last_psi_storm_time() local delta_h, delta_m = math.modf(math.min(delta_ps, delta_su)/3600) delta_m = math.floor(delta_m*60) return delta_h, delta_m endНу и отсюда очевидно, что лучше не дёргать 2 раза подряд один и тот же менеджер, а вычислять соотв. дельту прямо в нём, в дополнительной функции, передавая наружу уже результат.
×
×
  • Создать...