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

Справочник по функциям и классам


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

Интересно, а из всего многообразия есть что-нибудь, чем можно пнуть живого актора ? Не труп, а живого ?

Монстры - швыряют с легкостью, аномалии засасывают, неписи с дороги двигают... А скриптом ?

 

 

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


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

Сколько и куда надо этого импульса, чтобы было хоть чуть-чуть заметно ?

У меня ощущение, что на живого ГГ это не действует. Только собственно хит.

 

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


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

Наверное сюда вопрос:

правильно ли я понимаю, что npc:critically_wounded() возращает не false/nil примерно на время, когда проигрывается анимация ранения ? Что она вообще такое на самом деле ?

 

а npc:wounded() - это когда хиты непися ушли за некое пороговое значение (и кстати вот здесь примерно он должен лечь совсем ?)

 

Как оно связано с конфигами ?

 

 

  • Нравится 1

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


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

Внезапный такой вопрос: от чего зависит (и где вызывается) :load() для монстров ?

Ибо внезапно обнаружил, что сэйв у меня для них отрабатывает, и что-то туда пишет, а вот load почему-то отрабатывает только для торговца. Собственно монстры - reinit() и сразу net_spawn().

 

Upd: эффект явно связан с se_monster, и вдумчивой ревизией я, наверное, и проблему найду. Но сама суть эффекта пока что загадочна.

Изменено пользователем Dennis_Chikin

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


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

2 Карлан: вообще-то вопрос скорее в тему с++.

Если сохранять/читать фиксированными блоками, причем в один файл - будет практически мгновенно. Построчно/побайтно - медленно и печально. Традиционно медленными являются сами вызовы/служебные операции, действия с 1000 файлов - это очень медленно. С 10000 - невменяемо.  Операция с  1 байтом - не сильно быстрее операции с 100kb.

 

Вообще, то, что мы видим как "загрузку игры" - это чтение много разных файлов (сравни с re-load на той же локации), а все остальное (вот этот самый re-load) - вычисления и всяческие многократные рекурсивные переборы разной ереси.

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


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

Вопрос весьма расплывчат. Даже непонятно, относится ли он к работе с файлами, или к организации данных.

Как бы в идеале, чтобы все было быстро, у тебя должен быть организован непрерывный блок, скажем, полученный через malloc() (ну или массив таки блоков), который ты пишешь/читаешь через read() или pread() / write(), а потом накладываешь структуру, и разбираешь все в один проход.

При этом, да, размер сэйва тебя волновать не должен от слова совсем - ты вряд-ли в данном случае выйдешь за ту границу, где он начнет реально влиять.

И, да, взятую память ни кому никогда больше не отдавать.

 

Это я тебе как человек, писавший/правивший всякие ata* и прочие burncd с raid'ами рекомендую. И забить на "совместимость" с 49.5битным процессором неведомого производителя, работающим на троичной логике, со старшим байтом в середине слова. :)

 

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

Изменено пользователем Dennis_Chikin

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


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

Нет, ну если уж трогать непосредственно движок, то почему бы и не потрогать код сохранения/загрузки ?

Весь вопрос в том, что именно мы хотим сохранять, и как оно выглядит внутри игры. Сохранению контекста объектов и нетпакетам - отказать.

Сделать плоскую таблицу, иметь ее в виду как последовательный кусок памяти, и тупо писать/читать поблочно. Вот прямо в новосозданный сэйв. Ничего лучшего не придумали. Скорость будет выше, чем у копирования средствами системы.

Изменено пользователем Dennis_Chikin

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


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

Очередной забавный вопрос: se_monster:on_death() / se_stalker:on_death() при каких-то условиях вообще вызываются, или это кто-то просто для красоты добавил ?


Так, я вообще не понял этого юмора...  При net_destroy()/net_spawn(), то есть, при переходе offline/online, у монстров load() тоже не вызывается. Init() -> reload() -> reinit() -> netspawn(). По крайней мере в солянке. Это значит, что все, например, сохраненное в pstor - того...

 

А в оригинале-то оно работает ?

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


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

Винда, однако. Кроме того, а оно вообще разве позволяет гулять за пределы FS root ?

Изменено пользователем Dennis_Chikin

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


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

Еле нашел, об чем речь.

Беда в том, что колбэк на сохранение дергается тогда, когда есть сохранение. Если объект ушел в офлайн - ни каких колбэков уже нет.

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


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

На сколько неправильно я понимаю, что именно npc:set_path_type( game_object.patrol_path ) означает "игнорировать рестрикторы" и, возможно, игнорировать что-то еще ?

Такое, что не позволяет построить путь в случае npc:set_path_type( game_object.level_path ) ?

Изменено пользователем Dennis_Chikin

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


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

Под "такое" понималось "что-то еще". Черт его знает, что там может быть. Например, game_graph():accessible( gvid, false ) - это я просто написал, что первое в голову пришло.

 

Под "построить путь" - это именно последовательность level vertex, позволяющих попасть в искомый.

 

С обходом аномалий именно сейчас и бьюсь. Тут move_manager в общем-то не при чем. Предполагается, что между точками ни каких аномалий нет, и быть не может. Динамические аномалии появились в амк, и там же появилась, но была недоделана, схема их обхода.

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


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

npc:set_path_type( game_object.patrol_path )

npc:set_dest_level_vertex_id( lvid )

- работает

 

npc:set_path_type( game_object.level_path )

npc:set_dest_level_vertex_id( lvid )

- расстояние 50 метров до точки - работает

- расстояние 200+ метров - то работает, то не работает. Не работает, например, в случае, если на пути, по которому идем в случае npc:set_path_type( game_object.patrol_path ) - есть аномалия. Но как я заметил, именно аномалии может и не быть, но все равно не работает.

 

Как-то так.

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


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

Что-то я забыл: у актора callback.hit не работает ? Совсем-совсем ? И как тогда ?

Есть же подсветка, с какой стооны ему прилетает, или оно целиком внутрях движка ?

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


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

Наверное, сюда:

 

function my_func()

...

level.set_weather_fx( ... ) -- висим, и через некоторое время вылет без лога либо CCustomMotion::Length()

...

end

 

level.add_call( my_func, another_func )

 

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


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

Однократного вызова достаточно.

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

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


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

вот полный код:

function update()
    local v = upd_t[upd_i]
    if v then
        local st = v.st
            if st.active_section then
                issue_event( v.object, st[st.active_scheme], "update", delta )
            else upd_t[upd_i] = false    -- удаляем из списка на апдейт
            end
        upd_i = upd_i + 1

    elseif v == false then      -- удаляем из списка на апдейт
        table_remove( idx_t, upd_i )
        table_remove( upd_t, upd_i )
        upd_n = upd_n - 1

    else upd_end = true
    end

    return false
end

 

Если через issue_event() каким-то образом доходит до level.set_weather_fx( ... ) - вот на ней и виснем.

Если это же самое вызывать не через level.add_call( update, dummy_action ), а, например, из апдейта актора, либо конкретно if условие then ... level.set_weather_fx( ... ) ... end вынести в тот же апдейт актора - все замечательно работает.

 

То есть, делаем вывод, что все-таки связка level.add_call( ... ) + level.set_weather_fx( ... ).

 

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


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

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

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