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

Winsor

Опытные
  • Число публикаций

    255
  • Регистрация

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

  • Дней в топе

    2
  • AMKoin

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

Сообщения опубликованы Winsor

  1.   

    15.08.2020 в 07:58, Romann сказал:

     

    Меня больше интересует вопрос - правятся они ладно, а вот как быть с тем что индексы на старых локациях смещаются при компиляции? в этом варианте подключения как происходит?

    p.s. и мне не надо чтобы мобы ходили в данную локацию.

  2. Хм... Приношу свои извинения за введение в заблуждение. "Почитал" более внимательно движок ТЧ - все что я писал ранее не относится к вызовам, которые добавляются из скриптов, а именно CPHScriptAction и CPHScriptCondition. Для других condition и action которые добавляются в движке - алгоритм работает немного иначе...

    Действительно, CPHScriptCondition (условие проверки) выполняется всегда и постоянно, при возврате true из данной функции выполняется запуск CPHScriptAction. если CPHScriptCondition  или CPHScriptAction перешел в состояние obsolete ("устаревший"), менеджер вызовов удаляет этот call. Тонкость в том что именно скриптовый CPHScriptAction сразу после первого вызова переводит свое состояние в obsolete

    void CPHScriptAction::run()
    {
    	(*m_lua_function)();
    	b_obsolete=true;
    }

    что и приводит в удалению всего вызова после единственного срабатывания. Еще раз - прошу прощения за неточность...

    • Нравится 2
    • Полезно 1
  3. 3 часа назад, Kirgudu сказал:

    Ты же возвращаешь db.actor... Поведение коллбэка предсказать в таких условиях не возьмусь; хорошо ещё, что вылета не было.

    1) Вылета не должно быть, так как  в движке происходит

    return (*m_lua_function)();

    а при вызове
    info_callback объект актора уже создан, т.е. функция возвращает указатель на существующий объект, движок преобразует это значение в true, так как оно не nullptr. т.е. в результате результат функции всегда true.

    2) функция проверяется всегда, до тех пор пока не вызван remove_call. если у тебя не вызывается каждый раз msg() - скорее всего проблема в логике. возможно ты делаешь где то remove_call, либо у тебя повис скриптовый биндер, что очень плохо. Единственное что меня немного смущает - то что ты для глобального колбека используешь local function={} - вот это уже может приводить к "непонятному" поведению.

    • Полезно 1
  4. 19 часов назад, Minya сказал:

    demo_record тут называется  blinker. 

    Не вводите людей в заблуждение :)demo_record  - вырезан, blinker - это ошметки моего неудачного эксперимента, который был удален из-за кривизны и недоделанности :)

    • Нравится 1
    • Полезно 1
  5. В 19.11.2019 в 08:06, Vasya Glotov сказал:

    Ты  не понял, я хочу опешные слоты перенести в другой мод.

    Вот ты упорный и недоверчивый. Я тебе как создатель  мода говорю - не получится! Поддержка слота для дробовика добавлена в движок, и если ты и перенесешь файлы для нового слота в другой мод, не на основе движка ОП2.1 - работать не будет!!! Ну как еще объяснить?

    Например за рисование нового слота в инвентаре отвечает файл inventory_new.xml в папке config\ui. Попробуй, перенеси и убедись...

    • Нравится 1
    • Согласен 2
    • Смешно 1
  6. 3 часа назад, joo-jarak сказал:

    слегка допилить этот замечательнейший девайс

    Скачать с яндекса и подсказать на конкретном конфиге не могу, но сделать это очень просто. Необходимо в конфигурации итема, который спавниться в инвентарь изменить ему класс с оружия на обычный "съедаемый" предмет и добавить в конфигурацию параметр item_use_only       = true

    и все. он будет активироваться из инвентаря и не пропадать при активации...

    p.s. зачем его в оружейный слот? О_О Автор, если есть желание - пишите в личку.

     

    • Нравится 3
    • Согласен 1
    • Полезно 1
  7. 6 часов назад, BFG сказал:

    не взяли нормальный файл коллизий для Лиманска из НС16.

    а что делать с теми квестами которые завязаны на этих "кустах"? Причем эти квесты уже кучу лет на этом основаны.

    3 часа назад, vsk94 сказал:

    Батник для запуска игры на двух и более ядрах, используется встроенный виндовый affinity.exe

     

    16 минут назад, pc-2 сказал:

    Задействует все ядра процессора, проверено.

    игра физически не может запуститься на двух и более ядрах. Нет в движке такой возможности. affinity.exe позволяет запускать игру на процессоре, отличном от того который система выделяет запускаемому процессу/приложению по умолчанию - чаще всего это 0-й. На данный момент такая возможность встроена в игру, без каких либо сторонних утилит и батников. Делается это с помощью консольной команды g_affinity.

    • Нравится 1
    • Полезно 3
  8. 1 час назад, V92 сказал:

    если ты не меняешь сеществующие сетки и количество графпоинтов на них

     

    1 час назад, V92 сказал:

    новые локи подключал

    А то я не исправлял вертексы для рюкзаков, которые на землю падали, и на некоторых локациях скриптовый спавн (Юпитер, Затон). Получается что не должно изменяться - но изменяется. Ну да ладно - я не специалист в данном вопросе. Может те кто после меня придут - смогут реализовать. Всем спасибо.

  9. 19 часов назад, V92 сказал:

    просто не хочет НИ.

    Я не хочу вот этого:

     

    В 25.05.2019 в 17:00, V92 сказал:

    Если ты ничего не подключаешь - значения вертексов никогда не изменятся.

    А НИ - это уже побочный эффект, который не так уж и страшен.

    • Согласен 1
  10. 3 часа назад, BFG сказал:

    АИ-связи между локами как будешь делать

    У меня есть специфическая идея, которая не требует наличия "перемещения" между этой локацией и другими для ботов. Так сказать - сама в себе локация. Все что от нее надо - поспавнить свои предметы на себе родной, при загрузке в онлайн. Можно попробовать обойтись координатами. Пока у меня мало опыта в этом направлении - это все предположения.

     

    3 часа назад, BFG сказал:

    game_vertex

    Из существующей загруженной кросс таблицы последний максимальный, далее по нарастающей. Не подойдет?

     

    3 часа назад, BFG сказал:

    Проще нормально подключить локу.

    Нет, к сожалению - не проще. Перекомпиляция геймграфа без добавления локации уже может приводить к изменению значения вертексов, как показала практика.

     

    3 часа назад, BFG сказал:

    когда ты объявишь НИ.

    Оно будет, но не по этой причине. Если задумка не получиться - проще отказаться.

  11. 18 часов назад, BFG сказал:

    невозможно от слова "никогда".

    Думаю что можно. Причем если level.spawn я представляю как заставить работать, то с графом труднее - а именно с нумерацией индексов, тут уже с компилятором надо что-то думать. Правда это уже в другую тему - тему движка. Спасибо!

  12. 17 минут назад, abramcumner сказал:

    Это присваивание новой таблицы, у которой нет метатаблицы.

    т.е. без какого то лишнего шага не обойтись?

    например, псевдокод:

    rawdata={["dsdsd"]=true}

    setmetatable(data,{__index,__newindex})

    copy(data,rawdata)

     

     

  13. Вопрос по метатаблицам

    local data=setmetatable({},{
    		__tostring = function() return "data_table_name" end,
    	})
    
    log("1 "..tostring(data))
    data={["dsdsd"]=true}
    log("2 "..tostring(data))

    Вывод

    1 data_table_name

    2 0A0EC4C8

    т.е. при инициализации таблицы новыми данными ее метатаблица затирается.

    если делать setmetatable после инициализации - не вызываются _index,__newindex. каким образом можно избежать такого эффекта? очень не хочется писать отдельные циклы заполнения таблицы с метаданными...

    p.s. все это вызывается из под движка ТЧ 1.0007

     

    p.s.s. само собой, можно написать и так:

    local data=setmetatable({["dsdsd"]=true},{
    		__tostring = function() return "data_table_name" end,
    	})
    

    но все равно не вызываются события _index,__newindex у таблицы data.

  14. В 05.02.2018 в 02:01, Dennis_Chikin сказал:

    level.add_call( my_func, another_func )

     

    level.add_call добавляет на каждом апдейте вызов Ваших функций, указанных как параметры таким образом

    первый параметр - это функция которая должна в обязательном порядке вернуть значение булевого типа. если функция вернула true - это условие для вызова функции во втором параметре. результат второй функции - не важен. так как данная проверка происходит на каждом OnFrame - для ускорения работы движок не проверяет валидность результата функции my_func вообще. Если функция возвращает , например, userdata, либо не возвращает ничего - будет вылет.

    По поводу однократного вызова - проверка my_func будет вызываться до тех пор пока не будет сделан level.remove-call( my_func, another_func ) - ну и само собой - если my_func вернула true на каждом вызове - то и постоянно будет вызываться another_func.

AMK-Team.ru

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