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

[SoC] Ковыряемся в файлах


Halford

Рекомендуемые сообщения

Так Вы б хоть уточнили, какой мод имеете в виду, для начала.

А тема - вот: http://www.amk-team.ru/forum/topic/12730-spravochnik-vyletov/

 

Суть вылета - попытка произвести какую-либо операцию с УЖЕ не существующим объектом.

Например, с патронами непися после его смерти. Именно это, кстати, поправлено в ОГСЕ: патроны непися не удаляются самим движком. Но остаются, например, гранаты, с  которыми пытаюстя что-то сделать как минимум четры "аддона" только известных мне, и какео-то число неизвестных.

Или с аптечками.

 

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

И так далее - куча таких ситуаций возможна.

 

Поделиться этим сообщением


Ссылка на сообщение

Ну вот это уже что-то...

 

А что там делает "уборщик трупов" ?

Ну и самое простое, что здесь можно сделать, раз вылет вполне стабильный - попробовать все по-отдельности.

Поделиться этим сообщением


Ссылка на сообщение

Ну, "уборщик трупов" в подобной ситуации точно не нужен. Наоборот, надо избавиться от всего лишнего.

item and item:id() and alife():object(item:id())  - это хорошая проверка, но в одном месте ее мало. Это надо делать перед любыми операциями, если собираем несколько разных изделий разных авторов, которые что-то удаляют. Плюс к тому, она же в таком случае не помешает и там, где используется transfer_item() или drop_item()

 

И. да, сама проверка делается так:  item and alife():object( item:id() )  - проверять просто наличие результата item:id() - бесполезно, так как при проблемах все умрет раньше.

А начинать, все-же, подключая дополнения по одному - менше таких вот проверок в разные места придется вписывать.

 

Вылет с attempt to index field 'actor' - говорит или об опечатке в том, что было до .actor (например вместо db.actor  - bd.actor), либо что пространство, к которому обращаемся, разрушено какими-то предыдушими действиями (например, пытались сделать db[npc_id] = ..., а npc_id не получили, или, опять же, опечатка.)

 

Ну, в общем-то, это все должно быть в той теме по ссылке.

Поделиться этим сообщением


Ссылка на сообщение

combat_ignore_cond =.....

Там есть ключ - fighting_actor

 

означает, что непись не будет переходить в бой при виде актора.

 

На сколько я ничего не понимаю, враг получается npc1:set_relation( game_object.enemy,  npc2 ) и наоборот.

Поделиться этим сообщением


Ссылка на сообщение
10 часов назад, HellRatz сказал:

Сделал скриптовой функцией, да.

Ты удивишься, но все, прописанное в виде черточек, скобочек и плюсиков-минусиков делается в итоге скриптовой функцией. У меня вообще подозрение, что все эти загогулины - это по замыслу - прокладка для роботов, генерируемая роботами же, и вся "логика" по уму (быстро, качественно и внятно)  сводится к "[mysect1]on_info = {=mufunc1} mysect2"

Поделиться этим сообщением


Ссылка на сообщение

Оторвать к чертям сохранения/загрузки диалогов, которые все равно не работают, и не будут.

task_manager/dialog_manager.

 

ПРОСТО оторвать, и не нужны ни какие дальнейшие преобразования строк в числа и обратно.

  • Согласен 1
  • Сомнительно 1

Поделиться этим сообщением


Ссылка на сообщение

"более подробно" - это просто повторить ну не все посты этой темы, но 1/10 точно. Зачем их дублировать, если они и так есть ?

Если коротко, квесты оригинала - в task_manager.ltx (если что-то меняем там, и не меняем больше ни где - Новая Игра).

Население лагерей, как и сами лагеря - в allspawn, но может уточняться в файлах, перечисленных в начале xr_gulag.script и в smart_terrain_presets.ltx

 

 

Поделиться этим сообщением


Ссылка на сообщение

Как бы +1: ни разу ни где не видел этой самой отмены, по-этому слегка непонятно: что правилось-то ?

  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение

Типа, для статики. Свет от анимки не одинаково работает.

 

30 минут назад, UnLoaded сказал:

Подробнее можно ?

С костями ерунда какая-то. Подробно не копал, но, типа, какая-то уникальная.

Поделиться этим сообщением


Ссылка на сообщение

idle_light        = on
idle_light_range    = 5
idle_light_range_delta    = 0.325
idle_light_anim        = koster_00
idle_light_height    = 0.60

 

Воткнуть костру "без лампочки", сравнить на статике и на динамике...

 

По моделям - то-ли у обреза, то-ли у сталкера прописана эта самая кость, к которой цепляется обрез. У других - не хватает.

Поделиться этим сообщением


Ссылка на сообщение

Все-таки:

local set_current_time_t, set_current_time_f

function set_current_time_wait()
    if game.get_game_time() < set_current_time_t then return false end
    level.set_time_factor( set_current_time_f )
    set_current_time_f = false
    return true
end


function set_current_time( hour, min, sec )    -- починено, работает.
    game_time_time = game.get_game_time()    -- полное игровое время

    local new_time = game.CTime()    -- нужно выставить
    new_time:setHMS( hour, min, sec )

    local hh, mm, ss
    _, _, _, hh, mm, ss = game_time_time:get()    -- текущее время
    local c_time = game.CTime()
    c_time:setHMS( hh, mm, ss )

    if new_time == c_time then return    -- ничего не делаем
    elseif new_time < c_time then        -- следующие сутки
        new_time:setHMS( hour + 24, min, sec )
    end

    new_time:setHMS( 0, 0, new_time:diffSec( c_time ) )
    set_current_time_t = game_time_time + new_time

    if not set_current_time_f then set_current_time_f = level.get_time_factor() end

    level.set_time_factor( 10000 )
    level.add_call( set_current_time_wait, dummy_action )
end

чем именно не нравится такая перемотка ?

 

Да, при смене локации и вообще s/l таймфактор надо заново читать из конфига и выставлять. Или останаввливать перемотку из on_save() хотя-бы, к примеру, актора. Текущий сохраняется непосредственно в сэйве. По-другому - ни как.

 

  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение
3 часа назад, UnLoaded сказал:

Нет.

_g.script же... Другое дело, она там не рабочая была: обращалась к отсутствующей функции движка.

Поделиться этим сообщением


Ссылка на сообщение
6 часов назад, naxac сказал:

флаги в object_flags, запрещающие переходить в оффлайн. Тогда рюкзак вместе с хабаром будет грузится сразу, при загрузке сохранения.

Но это плохое, негодное решение.

Вместо лага получаем загрузку по полчаса и пачку глюков от всяких "фиксов здоровья/радиации/видов от 3-его лица/античитов"

 

Смотрите стрим Петренки с нс2016 и тайником на Кордоне.

 

Хорошее, годное решение - проверить текстуры/звуки/модели и т.д., являющиеся источниками лага при входе в онлайн конкретного предмета.

  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение

Ну так классика жанра же: текстуры типа 537x9135...

По моделькам - не спец, но спецы, к примеру, способны создать вот такое: https://www.dropbox.com/s/sct4psukal6gcjh/item_bezoar.ogf?dl=0

  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение

Ну как бы это не единственный случай, когда что-либо просто не сохраняется.

Псевдокод того, чего нет, привести затруднительно. ;)

Поделиться этим сообщением


Ссылка на сообщение

Ну так разобрались же...

Конкретно по тому вопросу - это такой "античит", прикрученный к "жажде". Дает хит актору, после чего, естественно, актор все роняет.

Есть еще вариант с нетаскаемыми моделями - задается в system.ltx и в самих моделях. Плюс еще коллизии - выставляются границы объекта таскания и границы самого актора, чтобы взаимно отталкивались.

В каждом конкретном случае надо смотреть, что именно мешает.

  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение

Всегда говорил, что спавн через СДК - зло. Только что в очередной раз убедился. То есть, там, конечно, не через СДК сделано, но с СДК по-другому вообще в принципе невозможно.

  • Согласен 2
  • Не согласен 1

Поделиться этим сообщением


Ссылка на сообщение

Именно рестриктором - нет. Можно только отслеживать, что что-то выброшено, и проверять координаты.выброшенного.

В частности для Мухи -

function life_heart2( item )
    local obj = sim:object( item:id() )
    local obj1 = sim:object( "hospital_muha_trup" )
    if obj and obj1 and obj1.position:distance_to_sqr( actor:position() ) < 9 then

 

Для живого  сердца -

function life_heart1( item )
    local obj = sim:object( item:id() )
    if obj and level.vertex_position( 1379 ):distance_to_sqr( actor:position() ) < 5 then

 

подробности см. в xl_story_hospital.script

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...