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

DMT

Проверенные
  • Число публикаций

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

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

  • AMKoin

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

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

  1. Цитата

    5. [CHECK INVALID] с режимом LINE - не выявляет инвалидов, зато определяет "потяжки" текстур, которые иногда появляются на тонких рёбрах. Ошибкой не является - сделал так - по приколу.

     

    12 минут назад, sto1en сказал:

    модель крива

    Нет, модель не крива.

     

    14 минут назад, sto1en сказал:

    Возможно, поэтому СДК  переварить не может.

    Нет, не поэтому. От вышеупомянутой проблемы зачастую спасает лишь полное ретекстурирование модели. Например можно попробовать ради эксперимента применить UVW Remove, а затем залить всю модель кирпичом. Проблема с экспортом модели должна исчезнуть, а вот "потяжки" текстур в режиме line так и останутся

    --------------------------------------------------

    Или можно действовать иначе: нажимаем кнопку weld vertices, получаем лог:

    * object Object009 | verts before 5233 , after 4116

    "Потяжек" текстур в режиме LINE больше нет, но остаётся проблема с экспортом модели. Заходим в СДК, видим, что проблема осталась.

  2. Как и ожидалось, замена макса с 2016 версии на 2018 с последующей переустановкой скриптов не помогла решить проблему.

    17 часов назад, HellRatz сказал:

    скрипты работают нормально

    Нет, скрипты работают ненормально. По крайней мере у меня.

  3. @HellRatz

    У меня такие ситуации возникают постоянно, после некоторого количества применений attach\detach.

    Собственно, вот что я вижу в максе: snhtPZh.jpg

    А вот результат после экспорта в сдк: LcqyfVJ.jpeg

    Почему стены и потолок отсутствуют ?

    Я залил на файлообменник исходный максовский файл проекта https://dropmefiles.com/uMKlz для желающих его протестировать. Но вам надо будет прописать свои пути к текстурам в material editor-е. У меня всё лежит в E:\X-Ray CoP SDK\editors\gamedata\textures

  4. 04.04.2020 в 10:03, Zander_driver сказал:

    Где treasure, obj, npc - это клиентские объекты тайника, перемещаемого итема, и НПС, соответственно. И делать надо в цикле, перебирая все итемы в тайнике.

    А как сделать? Я же заранее не знаю, что окажется в тайнике.

  5. https://www.dropbox.com/s/wvub0j4ix30gecy/trade_manager.script?dl=0

     

    С этим скриптом имеются странности:

    * Непись, зашедший в онлайн, потом оффлайн, а потом снова в онлайн, начинает торговать гитарой, губной гармошкой и кпк.

    * Сразу после старта игры лишних предметов в ассортименте ни у кого нет. Они появляются после того, как актор успел побегать по локации.

    * Если рядом с НПС, у которого в ассортименте есть гитара, губная гармошка и кпк, сохраниться и загрузиться, то лишних предметов после загрузки не будет.

     

    Что приводит к возникновению этого бага? И как пофиксить? Кто сталкивался с этим ?

  6. 2 часа назад, Kirgudu сказал:

    а результаты изменений, сделанных внутри функции update, доступны также и за её пределами.

    Я о том и спрашивал. Но... Нужны детали.

    2 часа назад, Kirgudu сказал:

    Для общего понимания рекомендую почитать, что такое ссылочные типы данных и типы значений (reference type и value type).

    Насколько я знаю, в Lua ссылочные типы отсутствуют. Так ведь ?

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

    Это не чистая функция, у нее есть побочные эффекты в виде вызовов npc:buy_condition и аналогичных функций.

    А почему после

    npc:buy_condition( tt.config, str )

    идет строка

    tt.current_buy_condition = str

    ?

    Для какой цели записывать что-то в локал tt, объявленный внутри функции, если вызов npc:buy_condition уже был ?

    Я написал следующий код:

    Цитата
    function func()
    local s
    if s==nil then
    print(64)
    s=32
    end
    end
     
    func()
    func()

    Проверил его тут: https://repl.it/languages/lua

    Результат работы:

    Цитата

    64

    64

    То есть значение переменной s не сохраняется между двумя вызовами функции func.

    Зачем тогда в скрипте торговли присваивание tt.current_buy_condition = str ? Как дальше это используется ?

  7. https://www.dropbox.com/s/wvub0j4ix30gecy/trade_manager.script?dl=0

    Надо разбораться и понять, как работает функция update из этого скрипта. Имеются внешние локалы:

    Цитата

    local h24 = 24

    local s24 = 3600 * h24

    local c_time = game.CTime()

    local actor = db.actor

    local t_data = {}

    local t_ini = {}

    Имеется функция:

    Скрытый текст
    
    function update( npc )
    	local tt = t_data[npc:id()]
    	if ( tt.update_time or 0 ) >= time_global() then return end
    
    	tt.update_time = time_global() + 60000 + npc:id()	-- хреновая, но рандомизация
    
    	local str = pick_section( actor, npc, tt.buy_condition )
    	if tt.current_buy_condition ~= str then
    		npc:buy_condition( tt.config, str )
    		tt.current_buy_condition = str
    	end
    
    	str = pick_section( actor, npc, tt.sell_condition )
    	if tt.current_sell_condition ~= str then
    		npc:sell_condition( tt.config, str )
    		tt.current_sell_condition = str
    	end
    
    	if not tt.buy_supplies then return end
    
    	str = pick_section( actor, npc, tt.buy_supplies )
    	if ( tt.current_buy_supplies ~= str ) or ( not tt.resuply_time ) or tt.resuply_time < game.get_game_time() then
    
    		npc:buy_supplies( tt.config, str )
    		tt.current_buy_supplies = str
    		c_time:setHMS( h24, 0, 0 )
    		tt.resuply_time = game.get_game_time() + c_time
    	end	
    end

    Из всех внешних локалов в теле этой функции используется только c_time. Но этот c_time нигде больше за пределами этой функции не используется, следовательно никакая информация через него не передаётся вовне.

     

    А что тогда вообще делает эта функция? Она принимает аргумент npc, ничего не возвращает и ничего не пишет во внешние локалы. Как тогда вызов этой функции может на что-то повлиять в игре? Тем не менее влияние на игровой процесс есть. Например если модифицировать строчку 

    Цитата

    tt.update_time = time_global() + 60000 + npc:id()

    эффект может быть весьма заметным и ощутимым.

     

    Я не понимаю, каким образом вышеупомянутая функция может передать информацию (например update_time) за пределы себя. Кто может объяснить, помочь или хотя бы посочувствовать?

    • Сочувствую 2
  8. Цитата

    https://www.dropbox.com/s/wvub0j4ix30gecy/trade_manager.script?dl=0

     

    В общем, вот. На ту же тему - "очистим от тормозов". При загрузке в частности, ну и вообще.

    Поскольку чистая соль сейчас мало кого интересует, а к ОПам патчефиксы пекутся как блины - по-людски, с перевешиванием всего на xr_meet, делать не стал. Зато можно прямо файл закидывать, как есть.

     

    Смысл - тот же, что и с _g.script, но при загрузке в присутствии неписей, ну или при подходе к лагерям неписей. Плюс обновление ассортимента раз в сутки, либо сюжетное. Зато сюжетное - максимум в течение 2-х минут.

     

    Как-то так.

     

    upd: h24 - игровые часы между этими самыми обновлениями.

     

    upd2:

    Если нет файла _util.script - который поддерживает вывод логов, то замените строку

    function log( ... ) _util.log( "trade_manager", ... ) end

    на function log() end

    Обновление ассортимента раз в сутки работает некорректно. Если поспать рядом с торговцем больше суток и проверить, то ассортимент будет тот же самый. Но если подождать несколько (около 5) игровых минут, то ассортимент обновится прямо на ваших глазах прямо в окне торговли.

     

    Я тестировал много раз, и каждый раз наблюдается вышеописанная ситуация.

    @Dennis_Chikin, А вот ещё интересная инфа насчёт работы скрипта: если от какого-то непися убежать, чтобы он перешёл в оффлайн, а затем встретить его снова, то непись начнет торговать ВСЕМИ своими вещами, включая гитару, губную гармошку и КПК. И всё это можно будет у него купить. Но на старте игры у неписей этих вещей в продаже нет! Эксперимент проделан много раз с одинаковым результатом.

  9. 24 минуты назад, abramcumner сказал:

    Попробуй заменить "local story_id = packet:r_u32()" на "local story_id = packet:r_s32()" и "packet:w_u32(story_id)" на "packet:w_s32(story_id)", тоже в двух функциях. Меняется u32 на s32. Битый сейв удали.

    Спасибо, сработало!

    Интересный момент: при каждом сохранении-загрузке спавнится ещё одна аномалия и ещё один вертолёт помимо тех, которые уже были заспавнены в прошлые разы. Так можно делать сколько угодно или после некоторого критического количества спавнов начнутся вылеты?

     

    А есть какие-то уроки с детальным разбором нет-пакетов и как ими пользоваться? Да, я читал коммент Malandrinus в справочнике по функциям и классам https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkciyam-i-klassam/?do=findComment&comment=258470

    и даже кое-что понял, но этот коммент всё же вряд ли можно назвать уроком.

  10. http://stalkerin.gameru.net/wiki/index.php?title=SoC._Один_из_методов_спавна

     

    Я внедрил в геймдату готовый пример от Бардака. Суть примера: имеется файл db.script, в котором две функции: одна спавнит электру, другая — вертолёт. Начинать новую игру не обязательно, НО если после спавна сделать сохранение и загрузку то получаю вылет:

    Цитата

    Line          : 30
    Description   : Specified story object is already in the Story registry!

    Мои собственные догадки о причинах вылета такие: после загрузки скрипт второй раз пытается заспавнить электру и вертолёт, которые уже заспавнены. То есть скрипт пытается использовать такие story_id, которые уже использованы. Если это верное предположение, то возникает вопрос: как модифицировать скрипт Бардака, чтобы не было вылета? Самый простой способ?

    Несколько минут спустя: моё предположение оказалось неверным. Даже если удалить скрипт от Бардака, сейв всё равно не грузится, всё равно происходит этот вылет. Значит проблема в том, что заспавненные объекты неправильно сохраняются. Почему сейв получается битым ?

  11. @naxac, Я в _g.script прописал пустую функцию ASSERT

    Цитата

    function ASSERT( cond, ... )
    end

    Вылет каким был — таким и остался.

    Я вырезал все вызовы ASSERT из ogse_signals.script, теперь вылет такой:

    Цитата

    LUA error: ...ow of chernobyl\gamedata\scripts\ogse_signals.script:243: attempt to index local 'module' (a nil value)

    Кусок кода:

    Цитата

    function signals_mgr:subscribe_module( module_name )
      local module = _G[ module_name ]
      module.attach( self )
    end

    Строчка 243 выделена курсивом

AMK-Team.ru

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