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

UriZzz

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

    3 438
  • Регистрация

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

  • Дней в топе

    2
  • AMKoin

    20,314 [Подарить AMKoin]

UriZzz последний раз побеждал 20 Февраля 2023

UriZzz - автор самых популярных публикаций!

Баланс оценок

1 004

1 подписчик

О UriZzz

  • День рождения 17.12.1982

Звание

  • Звание
    Иди и смотри...

Информация

  • Реальное имя
    Юрий
  • Город
    Ростов на Дону
  • Интересы
    Сталкерство и тяжёлый метал.

Недавние посетители профиля

14 569 просмотров профиля

Закладки

  1. Скриптование
    Скриптование
      14.12.2019 в 06:27, Kirgudu сказал:

    Выше, кстати, есть опечатка: должно быть "se_stor.get(key, default)"

    Да, виноват-с... :blush: вы правы.

      14.12.2019 в 06:27, Kirgudu сказал:

    проще, чем выискивать по всем скриптам

    Так я же и не выискивал. Вообще понятия не имею, где у меня se_stor дергается. Не помню)

    Просто сам se_stor заменил на такой.

    -----------------------------------------------------------------------------------------------------------
    -- Заглушка для подключения всех скриптов, использующих se_stor Артоса, к SCRIPT_VARS_STORAGE движка OGSR
    -----------------------------------------------------------------------------------------------------------
    
    function get(var_name, default)
    	local s = get_stored_vars()
    	if s[var_name] ~= nil then return s[var_name] end
    	return default
    end
    function set(var_name, value, f_check)
    	local s = get_stored_vars()
    	s[var_name] = value
    end
    --~

    Для движка OGSR, se_stor выглядит вот так :) Это на всякий случай, если кто-то будет заморачиваться зачем-то установкой модуля se_stor на моды на этом движке.

    Глобальные GetVar, SetVar, etc... на основе этих двух функций тоже дописать можно, при желании.

    Показать еще  
  2. Скриптование
    Скриптование

    @Stalkersof Бро, не советую пользоваться пстором, у движка есть некое хранилище где можешь что то сохранять.

    Модуль

     

    local xvars = get_stored_vars()
    
    --------------| Публичный интерфейс модуля |-----------------------------------
    
    function unpack_value(value)
        if type(value) == "userdata" then
            value = value(true)
        end
        return value
    end
    
    function value_exist(name)
        return xvars[name] ~= nil
    end
    
    function set_value(name, value)
        xvars[name] = value
    end
    
    function get_value(name, default_value)
        local value = xvars[name]
        if value == nil then
            ASSERT(default_value ~= nil, "get_value: neither value '%s' is exist, nor default value is provided", name)
            set_value(name, default_value)
            return default_value
        end
        return unpack_value(value)
    end
    
    -- в случае, если не существует, просто вернуть nil
    function get_value_safe(name)
        return unpack_value(xvars[name])
    end
    
    function remove_value(name)
        xvars[name] = nil
    end
    
    function set_or_remove_value(name, value)
        if value then
            set_value(name, value)
        else
            remove_value(name)
        end
    end
    
    function get_all_vars()
        return xvars()
    end

     

    Показать еще  
  3. Скриптование
    Скриптование

    @UriZzz, предлагаю борьбу с невнимательностью и fps продолжить дальше и поднять не невиданный доселе уровень, увеличив твою опытность ещё больше. ;)

    Смотри.

    Функция у тебя с говорящим названием, sleep(obj), предназначена теоретически только для обработки нажатия на спальный мешок. Не знаю, откуда и как она вызывается, но если проверка на то, что ты используешь именно спальник, до вызова функции есть, тогда условие if obj:section() == "sleep_bag" then является лишним.

    Но скорее всего такую проверку ты до функции не делаешь, а просто всегда дёргаешь её в коллбэке на дроп (ТЧ) или использование предмета (ЧН, ЗП). Примем это допущение, и тогда возникает другой момент.

    Что будет, если вокруг тебя на расстоянии 40 метров нет ни одного врага? А если ты съел колбасу? Правильно, проверка на врага сработает, а поскольку рядом никого нет, пройдёт по полному циклу, по всем 65 с лишним тысячам потенциальных объектов. И в результате ты, может, и избавился от тормозов при выдаче сообщения, зато приобрёл их при любом использовании любого предмета (если только ты не ставишь целью кушать, применять антирад, использовать бинты и аптечки и т. д. также только в спокойном месте).

    Выходом является перемещение поиска врагов после условия if obj:section() == "sleep_bag" then, так чтобы цикл запускался только если ты используешь нужный предмет.

    И последнее, чисто перфекционистское замечание. Если всё, что делает функция, это проверяет, можешь ли ты использовать спальник, и показывает нужный диалог или выдаёт сообщение, тогда нет нужды заморачиваться с лишними брейками и переменными. Можно выдать сообщение и сразу выйти из функции (return сработает как и break, прервёт выполнение цикла, но вдобавок ещё и обеспечит выход), а меню будет показано за пределами цикла, если всё хорошо, и прерывания не случилось.

    Самое время проиллюстрировать вышесказанное.

      Код (Показать)

     

    P.S. При желании ты с Lua разберёшься, я уверен. С СДК разобрался, значит и со скриптами сможешь. :) Надо лишь пройти чуть дальше, чем "работает - и ладно".

     

     

    @Марка демченков, попробуй это:

    exit()

     

    Показать еще  
  4. Текстура Арена
    [SoC] Ковыряемся в файлах

    @UriZzz sign_info_01r.dds


  5. Проблема последнего дня месяца
    Скриптование

    Вампир35

    1. Никак не получить, т.к. АМК-таймеры не имеют соответствующего интерфейса по доступу к ним. Ну а кто патался написать ... вероятно понимал, что проще и лучше написать свои таймеры заново, чем вставлять костыли "одряхлевшему" коду.

    2. А не слышал о проблеме 2000-го года? Того же порядка, т.е. в принятом формате параметра не хватает разрядности и в какой-то момент наступает "переполнение"/сброс.

    В АМК-тайрах используется 32-х битный таймер game.time() и кол-во разрядов хватает на ... немного меньше месяца игрового времени. Далее наступает обнуление бахового времени и все "новые" таймеры будут заведомо с меньшим временем, чем те, которые были до "часа Х".

    Лечить таймеры в общем-то бессмысленно, т.к. эта ошибка присуща не только им а имеется во многих кодах игры и следует глобально поменять использование game.time() на 64-х битный вариант game.CTime()

    Показать еще  
  6. Методы управления погодой OGSR
    [SoC] Ковыряемся в файлах
      27.04.2023 в 13:27, UriZzz сказал:

    что это за метод level.set_weather_next? В чём его смысл? Чем он разнится с level.set_weather?

    Попробую вспомнить. На всякий случай начнем с начала, как собственно погода выбирается. Допустим у нас имеется погода с названием "clear". Она состоим из нескольких секций с описанием погоды. Каждая секция описывает погоду в указанное время. Время - это имя секции. В движке имеется указание на секцию для текущего времени и следующую за ней. Назовем их C0 и C1. В процессе нахождения на локации движок плавно меняет погоду от C0 к C1. Когда наступает, время соответствующее погоде C1, текущаяя погода полностью соответствует той, что описана в секции C1 и движок делает C0 = C1 и C1 = следующаяя секция погоды, которая следует за C1 и так далее, до самого конце секции, а потом переходит к началу секции и так по кругу бесконечно. Так вот, set_weather( "clear", true ) устанавливает C0 и C1 из погоды "clear" в соответствии с текущим временем. set_weather( "clear" ) просто устанавливает из какой погоды будут браться следующие C1 и не меняет текущую погоду. Т.е. если мы сделаем set_weather( "cloudy" ), то у нас будет плавное изменение погоды "clear" от С0 к C1, и при наступлении времени, соответствующего C1, погода C1 перейдет в C0, а следующий C1 уже будет выбираться не из погоды "clear", а из погоды "cloudy". Но с динамической погодой возможна ситуация, когда у нас в 12:00 погода "clear", а в 13:00 погода "cloudy". Т.е. нам нужно, вот в этот данный момент, что бы C0 было из "clear", а C1 - из "cloudy". Именно это и делает set_weather_next( "cloudy" ), устанавливает C1 из указанной погоды, т.е. из "cloudy" и ничего более. Т.е. для нашего случая нам нужна цепочка из

    -- установить C0 и С1 из погоды "clear"
    level.set_weather( "clear", true )
    -- т.к. начиная с C1 у нас должна действовать погода "cloudy", установим C1 из неё
    level.set_weather_next( "cloudy" )
    -- и далее, после C1 тоже должна действовать погода "cloudy"
    level.set_weather( "cloudy" )

     

    Показать еще  
  7. фикс карты Ростока от @naxac
    [SoC] Ковыряемся в файлах

    @Sikorskyi , 

      исправленные файлы (Показать)
    Показать еще  
  8. мертвая зона
    Текстурная модификация "МЕРТВАЯ ЗОНА"

    .


  9. модули Артоса
    Сборочный цех

    Навеяно помощью @Romz по прикручиванию se_stor к ЗП, результатом чего стал его объединённый комплект скриптов. Он всем хорош, однако, во-первых, предназначен только для ЗП, а во-вторых, предлагает подключение, например, m_timers даже в том случае, если таймеры не нужны, а нужно только универсальное хранилище.

     

    Здесь я хочу выложить немного другой комплект модулей @Artos'a, содержащий не все модули сразу, а каждый модуль по отдельности. При этом:

    • реализована полная совместимость модулей между собой (можно интегрировать их в мод в любых необходимых сочетаниях);
    • подключение и работа всех модулей протестированы во всех частях игры;
    • для модуля универсального хранилища (se_stor) добавлено 3 разных примера подключения - для ТЧ, ЧН и ЗП соответственно. Примеры эти 100% рабочие, не требуют никакой доработки напильником. Достаточно в нужных местах добавить/закомментировать указанные куски кода.
    • модуль se_stor доработан так, что теперь он позволяет не только сохранять в чанках те внешние модули, у которых есть публичные методы save/load, но и указывать кастомные названия соответствующих методов. Таким образом, теперь можно больше данных, сохраняемых в оригинале в нет-пакете главного героя, перенести в универсальное хранилище. В добавленных примерах подключения это отражено.

    Состав:

    lua_helper - различные часто употребляемые и/или полезные функции которые могут использоваться модмейкерами.

    m_netpk - интерфейс чтения/записи net-пакетов.

    m_timers - менеджер универсальных таймеров.

    se_stor - универсальное хранилище данных произвольного размера.

     

      подробнее (Показать)

     

    lua_helperhttps://yadi.sk/d/1_J1HVZsu7Jgy, обновлено 08.02.2025

    m_netpkhttps://yadi.sk/d/GtYsSbjnxqdtp, обновлено 08.02.2025

    se_storhttps://yadi.sk/d/a38PlQdju7Jhr, обновлено 10.08.2016

    m_timershttps://yadi.sk/d/FWJkTnAMu7Jhg, обновлено 08.02.2025

    Общий комплект + скрипт для тестированияhttps://yadi.sk/d/p69RQkBMu7JgR, обновлено 08.02.2025

    Показать еще  
  10. Правка последнего дня месяца
    [SoC] Ковыряемся в файлах

    Берем, и ВЕЗДЕ меняем. Либо на game.CTime(), либо сохранения делаем как-то типа вот так:

     

        local n = 0    -- корректировка и сохранение времени
        for k, v in pairs( tm_sec ) do n = n + 1 end
        pk:w_u32( n )
        for k, v in pairs( tm_sec ) do pk:w_stringZ( k ); pk:w_float( v - game_time_sec ) end
        n = 0
        for k, v in pairs( tm_ms ) do n = n + 1 end
        pk:w_u32( n )
        for k, v in pairs( tm_ms ) do pk:w_stringZ( k ); pk:w_float( v - game_time_ms ) end

    преимущества последнего варианта - меньший объем сэйва, быстрее все вычисления, недостаток - кто-то из принципа может проторчать на одной локации не сохраняясь до 35 мая. ;)
     

    Показать еще  
  11. СДК от яра
    [SoC] Вопросы по SDK

    X-Ray SDK от Yara. Это собранный из исходников SDK 0.4, в котором имеются десятки исправлений и улучшений. Прочитав чейндж-лист вывод один: :good2: Инфа взята тут (оригинальный пост)

      Список изменений (Показать)

     

      Ссылка и установка (Показать)

     

    Приправляется все это х64 компиляторами от @hi_flyer. Скажу сразу: присущи ли им баги как у компиляторов @KD87 я не в курсе, но вроде как тут все работает нормально, без засветов лмапов и прочих страданий. (линк на ориг)

      Цитата

    Собрал свой вариант х64 (ТЧ) компиляторов xrLC и xrDO.
    xrDO использует до 8 потоков, xrLC до 11 потоков на стадии просчета лайтмапов, на процессорах с количеством потоков < 11 может работать медленнее.
    Также в наличии для xrLC новые ключи на отключение просчета лайтмапа террейна, источников света hemi и sun

    Ссылка: https://yadi.sk/d/ZeqjyINRDndl_w


    И немного дополненный вариант компиляторов от @macron, чутка прибрано + инструкция. (линк на ориг)

     

      Цитата

    Небольшое обновление х64 (ТЧ) компиляторов:
    -добавлена инструкция.
    -xrLC: исправлен двойной вывод ошибок о ненайденных файлах в лог. Ошибки выделяются пустыми строчками.

    Ссылка: https://yadi.sk/d/MR5apdQmq3dLpw

     

    Обновленный XrAI — сообщением выше.

    Показать еще  
  12. Сборка от Adm-RAL для FM
    S.T.A.L.K.E.R. F.M.

    Тут что-то совершенно случайно собралось... :) За день. :)

    Если честно, то я до сих пор не понимаю - с какого вообще я зацепился за...? Может когда услышал, что есть мод где ГГ зовут Леченный!? По началу даже хотел нахамил автору за такое, но уже поздно... теперь... :biggrin:

     

     

    Начну, пожалуй...  biggrin.png

     

     

      S.T.A.L.K.E.R. The Fundamental Mode - S.G.C. Edition (Показать)

     

    P.S.

    Ну, терь можно и погамать малёху... Попробую пройти. А потом опять в яму!

    Показать еще  
  13. Ссылка на Дискорд ПП
    Prosectors Project
      27.01.2020 в 20:26, NOapostoL сказал:

    Ссылка, кстати, была опубликована тут же

    Продублирую ее- https://discord.gg/YrW38Tc


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