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

Kirgudu

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

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

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

  • Дней в топе

    18
  • AMKoin

    10,073 [Подарить AMKoin]

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

  1. @Zander_driver, оговорился. Не будет работать запись в абстрактную часть пакета, которая возможна только при выходе в онлайн. А это - STATE_Write.
  2. Ну конечно. Иначе как раз переключение оффлайн-онлайн работать не будет. А class_registrator в большинстве случаев нужен только затем, чтобы посмотреть, какой биндер и где искать. Потому что вызов данных команд в паре приводит к исходному положению дел. Ведь даже в комментарии поста сказано, что первая - сброс флага, тогда как вторая - поднятие оного. В итоге флаг привязки к сетке после парного выполнения остаётся установленным. Аптечки... честно говоря, не помню, есть ли у них биндер в принципе.
  3. data.object_flags = bit_and(data.object_flags, bit_not(128)) -- сброс UsedAI_Locations Полный список флагов можно посмотреть в том же m_netpk в конце файла, где "_G.object_flags = ..." и далее. Или так, наверное. Только что-то одно.
  4. @div, ну тут одно из двух: либо дьявол в неучтённых мелочах, либо, как мы раньше писали, для NPC это не сработает. Изучать и экспериментировать.
  5. @div готовый тестовый пример с вентилятором: https://disk.yandex.ru/d/T2v4KZ0WfBOp4g Внутри сейвы у Сидоровича и в подвале деревни после переноса (сделаны на Steam версии ТЧ, поэтому скорее всего не загрузятся), скриншоты для визуального подтверждения. Для лёгкости понимания вставок упаковал 2 папки: оригинальную из Steam-версии и уже с изменениями. WinMerge или аналог покажет разницу между изменёнными файлами. Не мудрствуя лукаво, повесил запуск телепорта вентилятора на апдейт актора, через 10 секунд после первого апдейта (чтобы успеть сбросить начальный ролик и увидеть телепорт глазами). Дальше самостоятельно, код писать больше не буду. Имхо, технических сведений вполне достаточно, может просто не хватило внимательности при реализации.
  6. Тоже не знаю. Убирал флаги перехода в оффлайн у БТР, сбрасывал какие-то флаги у физ. объектов - проблем не было. НПС спавнить в воздухе в голову не приходило.
  7. Может и так, не проверял. Правда, внутри самого модуля она в шапке не упомянута. @Zander_driver, кстати, там level.add_call под капотом, см. do_switchings и execute_switchings. Так что очень может быть, что заработает. Не нужно. При изменении абстрактной части нет-пакета модуль проделывает необходимые манипуляции автоматически, как и написано в readme. Если интересно, см. упомянутые выше функции модуля do_switchings и execute_switchings, там всё уже есть. Для NPC - скорее se_stalker.script Не уверен, что подействует на живой объект, но можно попробовать при спавне НПС снять флаг use_ai_locations = 128 (привязка к сетке). Делается это в том же модуле m_netpk, примеры есть на форуме, например этот из свежих: В общем, дальше надо экспериментировать.
  8. @div, нет, я писал про пункты 1), 2) и 3) чуть пониже процитированной строки. Но это действительно может быть совершенно не важно. Речь-то, как справедливо тут заметили, о версии 1.0004, а я на это не обратил внимания. Модуль Артоса предназначен для 1.0006.
  9. @div, в readme_m_netpk.txt есть раздел "Про специальный нет-пакет 'abstract'". Инструкции из него выполнены?
  10. @div, изменив нужное свойство в абстрактной части нет-пакета объекта. Например, можно воспользоваться модулем m_netpk от Артоса (если мы говорим о ванильном движке; в модифицированных это, возможно, сделать куда проще). Модуль можно взять здесь: Авторский пример изменения координат см. в описании внутри архива с модулем.
  11. Kirgudu

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

    @Norman Eisenherz не лучше и не хуже, просто работают по-разному. Это примерно как разница между while do и repeat until. В add_call функция fx2 будет запущена только в том случае, если функция fx1 вернёт true (я бы сказал, что с оговорками аналог while ... do ...). А в set_fastcall функция fx будет выполнена в любом случае (repeat ... until ...).
  12. Kirgudu

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

    @Norman Eisenherz скорее всего, дело в типе и размерности промежуточных переменных. 69 год - это (примерно) ёмкость int. Я бы предположил, что ограничение начинает работать где-то в строке "local ms = ...", поскольку diffSec сама по себе возвращает вполне вместимый float результат. Но это надо проверять. Только зачем превращать сохраняемое значение в миллисекунды? Сохранять и восстанавливать можно непосредственно результат diffSec без промежуточных умножений и делений. Ну а лично я сохранял бы в сейве все составляющие даты: local year, month, day, hour, min, sec, ms = ct:get() и восстанавливал потом также из всех: local ct1 = game.CTime() ct1:set(year, month, day, hour, min, sec, ms)
  13. Скриптовый парсер XML https://disk.yandex.ru/d/1ecmI-oPY5b11A Может пригодиться тем, кто, во-первых, хочет иметь возможность читать и понимать в игре файлы xml формата, а во-вторых, по ряду причин не хочет или не может пользоваться другими механизмами, в том числе модифицированными движками. @Zander_driver, если думаешь, что тема мертва и реанимировать её не стоит, попросим модераторов перенести пост куда-нибудь ещё.
  14. Kirgudu

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

    @Stalkersof разумеется, так и будет, поскольку при каждой загрузке из сохранения твоя строка в начале скрипта выполняется заново, и переменная приобретает первоначальное значение. Чтобы этого не происходило, значение переменной нужно не просто присваивать, но также сохранять в сейве (и читать оттуда при загрузке). Примеров достаточно на любой вкус, даже в оригинале: см. xr_logic.pstor_store / xr_logic.pstor_retrieve (но это не лучший из вариантов, разве что для единичного использования).
  15. @Murarius да, имею в виду окно браузера, причём на ПК. У меня режим редактора вполне себе переключается на лету при переходе общей ширины окна через значение 915 пикселей.
  16. @mole venomous Это у тебя сокращённая форма для нешироких областей редактирования. Расширишь - и эта, и несколько других кнопок появятся.
  17. Kirgudu

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

    @Norman Eisenherz я б сказал, что родительский объект не успевает получить информацию об этой привязке. Сама привязка существует уже в момент спавна; достаточно после выхода нового объекта в онлайн проверить свойство parent_id (серверное) - оно будет равным id контейнера (актора). Но это единственное свойство, которое изменяется при помещении одного объекта внутрь другого. Поскольку методы поиска дочернего объекта (:object(), :iterate_inventory() и :inventory_for_each()) работают не со всеми объектами игры - это было бы неоправданно долго, а с динамической коллекцией подчинённых объектов контейнера, требуется, чтобы эта коллекция также обновилась на клиенте. А это происходит, очевидно, на апдейте уже после выхода созданного дочернего объекта в онлайн. Если требуется проверить, что объект создан внутри контейнера, можно посмотреть parent_id или подождать апдейт-другой.
  18. Kirgudu

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

    @Norman Eisenherz я не знаток С++, но скорее всего break внутри выполняемой функции работает только в контексте этой функции, а поскольку никакого цикла в ней нет, такая команда приводит к исключению. Более того, поскольку в нет и обработки и возвращаемого из functor значения (можно было бы вернуть true или false для остановки, как это сделано, например, в level.add_call для проверки выполнения условия), то и этот метод не пойдёт. Отсюда ответ - никак. А потому я бы переписал код так, чтобы после первого найденного предмета он сохранял его, не меняя больше: local inv_item = nil db.actor:inventory_for_each(function(item) if inv_item == nil and item:section() == section then inv_item = item end end) if inv_item then db.actor:transfer_item(inv_item, victim) end
  19. Kirgudu

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

    Подтверждаю то, что написал @WinCap
  20. Kirgudu

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

    Например, сняв искомый флаг в нет-пакете объекта с помощью модуля m_netpk от Артоса: local sobj = alife():create(section, position, lvid, gvid) if sobj then local pk = get_netpk(sobj) if pk:isOk() then local data = pk:get() data.object_flags = bit_and(data.object_flags, bit_not(object_flags.UsedAI_Locations)) -- сброс флага привязки к сетке (128) pk:set(data) end end
  21. Не должно. Для этого достаточно сделать не абсолютные ссылки <link ... href="/foz-logo16.png">, а относительные <link ... href="foz-logo16.png">. Уверен. Подступался к загрузке данных в 2 захода: сначала поленился и свалил всё в кучу, после чего получил ошибки и написал пункты 1 и 2, очистил БД (написав попутно рекомендательный пункт 1 ) и уже не торопясь, внимательно, собрал мод и файлы оригинала с соблюдением иерархии и загрузил весь пакет заново. После того, как ошибки воспроизвелись, ещё раз всё перепроверил - нет, ничего не забыл, всё на своих местах и всё загружено в БД. Ну да это не важно в данном случае, всё равно получился вполне рабочий инструмент. Более того, автор упомянутого выше мода сейчас активно им пользуется, внося правки в скрипты и конфиги по результатам анализа. ЗЫ: С когнитивным диссонансом при сравнении ожиданий и реальности я сталкиваюсь регулярно, когда у нас идёт взаимодействие разрабов и тестировщиков. Казалось бы, предусмотрено практически всё, ан нет! Получи багом по мягкому месту. И хорошо, если это происходит заранее, а не во время приёмки заказчиком.
  22. Запустил таки инструмент на своём NAS. Это оказалось не так уж и сложно, просто за прошедшие несколько лет я забыл кое-какие детали взаимной настройки PHP и MySQL в пакетах. Ничего не скажешь, штука хорошая. Такое приложение лет эдак 10 назад, в разгар сталкерского модопроизводства, пригодилось бы очень многим, да и сейчас может принести пользу. Например, смотреть иерархию и искать все места использования того или иного значения становится действительно удобно, а результат нагляден и не требует того, чтобы держать всё в голове или блокноте. Точно знаю, что если б в далёком 2012 году при работе над OGSM CS у меня в руках был похожий инструмент, я бы пользовался им постоянно. Собственно, на примере OGSM CS, точнее его наследнике, я и попробовал оценить результат трудов автора. Если позволите, далее под спойлером мои оценки, замечания, предложения и прочие мысли. А в целом, @Zander_driver, спасибо! Это был увлекательный и полезный опыт. Даже немножко жаль, что мой брачный период энтузиазма уже позади. @7.9 Скажу прямо: признаваться в том, что с чем-то заморачиваться в лом (то есть в принципе способен, но лень), но при этом просить сопоставимую по трудозатратам работу от других - ну как-то не очень.
  23. Из него самого. В своё время я спокойно запустил у себя таким же образом копию форума для экспериментов, а сейчас что-то не выходит. Видимо, придётся так и сделать, уж очень хочется сабж оценить.
  24. Немножко оффтоп, но по теме: никому не доводилось ставить PHP и MySQL на Synology? Вторую неделю в ленивом режиме пытаюсь настроить и запустить сабж на своём NAS, но хотя с адресами, портами и прочим вроде не ошибся, пока добился только этого: Warning: mysqli::__construct(): (HY000/2002): No such file or directory in /volume1/web/stalker/stmt.php on line 12 Не удалось установить соединение с базой данных: No such file or directory/n
  25. Kirgudu

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

    @Black_Raven_03 и снова ты не понял, что именно я тебе пытался показать. Посмотри на строку 5 своего кода, где длинное условие, не помещающееся на экране. Там в самом конце часть условия "and distance_between_safe(...) < 900", которое никогда не выполнится, а значит, ты не попадёшь внутрь к удалению аномалий. Почему - расписал выше.

AMK-Team.ru

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