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

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

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

CUIScrollView одними скриптами

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

Ссылка на комментарий

@AndreySol, проблема в том, что при AddWindow в такой скролл весь гуй виснет. Можешь привести рабочий пример, может, я что-то не так делаю?

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Ссылка на комментарий

@lordmuzer, нет, тогда окно не добавится в скроллбар, а просто статически приаттачится к контролу, т.е. прокрутить его нельзя будет.

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Ссылка на комментарий

Точно, туплю. Как раз для CUIScrollView  нужно делать AddWindow 

А как именно виснет ? Высота есть у всех UI элементов ?

И работает ли если CUIScrollView  инитить из xml в таком случае. 

Изменено пользователем lordmuzer
Ссылка на комментарий

@lordmuzer, если делать с xml, то всё работает, да.

Виснет на том месте, где делаю AddWindow (list, true), по-тихому, без вылета, просто окно не показывается совсем.

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Ссылка на комментарий

Тот же вопрос по счетчику хилок…

Потестил оригинальный мод – после 3-й или 4-й загрузки (не важно, один сейв или разные) случается безлоговый вылет. Судя по результатам частичного исключения кода, ошибка все-таки не в таблице, а в выводе статиков.

Знаю, что мод написан еще под ТЧ 1.0004 – может, с тех пор что-то поменялось в способе вывода? В текущей версии (Steam 1.0006) повыключал все скриптовые моды, и все равно вылет после нескольких загрузок.

Кто-нибудь, попробуйте повесить у себя на апдейт оригинальный мод (hud_med) – случается ли вылет?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий

@naxac

Если еще интересно, насчет CUIScrollView, то глянул я в исходники: при скриптовом создании конторла не вызывается метод Init. Соответственно, имеем зависание\вылет при вызове AddWindow. 

  • Спасибо 1
Ссылка на комментарий

Здрасьте.

 

Можно ли проверить наличие открытых диалоговых окон без перебора инфо-поршней ui_…? Видел упоминания о функции level.main_input_receiver, но где бы найти пример ее использования (кроме закрытия текущего окна через GetHolder():start_stop_menu)?

 

Может, просто есть какая-то проверка на отображение HUD?

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

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий

@Norman Eisenherz, проверка того, что все движковые окна закрыты:

if level.main_input_receiver() == nil then

Цитата

проверка на отображение HUD?

В X-Ray Extensions для этого есть функция level.has_indicators(). В обычной ТЧ вроде никак не проверить.

  • Согласен 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Ссылка на комментарий

Всем привет, возник вопрос.

Спавню скриптово аномалии (всякие Жарки, Электры и прочие).

Код спавна:

Скрытый текст

           local obj = alife():create(section, pos, lv, gv)
           local rad_new_anom = math.random(2,4)
           create_anom(obj, rad_new_anom, "anom_on)  

 

function create_anom(p_obj, rad_anom, mode)

    local packet = net_packet()

    p_obj:STATE_Write(packet)

    local game_vertex_id = packet:r_u16()
    local cse_alife_object__unk1_f32 = packet:r_float()
    local cse_alife_object__unk2_u32 = packet:r_s32()
    local level_vertex_id = packet:r_s32()
    local object_flags = packet:r_s32()
    local custom_data = packet:r_stringZ()
    local story_id = packet:r_s32()
    local cse_alife_object__unk3_u32 = packet:r_s32()

    local shape_count = packet:r_u8()
    for i=1,shape_count do
        local shape_type = packet:r_u8()
        if shape_type == 0 then
            local center = packet:r_vec3()
            local radius = packet:r_float()
        else
            local box = packet:r_matrix()
        end
    end

    local restrictor_type = packet:r_u8()

    local cse_alife_custom_zone__unk1_f32 = packet:r_float()
    local cse_alife_custom_zone__unk2_u32 = packet:ru8( _s32()

    local on_off_mode_enabled_time = packet:r_s32()
    local on_off_mode_disabled_time = packet:r_s32()
    local on_off_mode_shift_time = packet:r_s32()

    local offline_interactive_radius = packet:r_float()
    local artefact_spawn_places_count = packet:r_u16()
    local cse_alife_anomalous_zone__unk1_u32 = packet:r_s32()

    local last_spawn_time_present = packet:r_u8()

    if packet:r_elapsed() ~= 0 then abort("left=%d", packet:r_elapsed()) end

    packet:w_u16(game_vertex_id)
    packet:w_float(cse_alife_object__unk1_f32)
    packet:w_s32(cse_alife_object__unk2_u32)
    packet:w_s32(level_vertex_id)
    packet:w_s32(object_flags)
    if mode~=nil then custom_data = mode end
    packet:w_stringZ(custom_data)
    packet:w_s32(story_id)
    packet:w_s32(cse_alife_object__unk3_u32)

    packet:w_u8(1)
    packet:w_u8(0)
    local sphere_center = vector()
    sphere_center:set(0, 0, 0)
    packet:w_vec3(sphere_center)
    radius = rad_anom
    packet:w_float(radius)

    packet:w_u8(restrictor_type)

    packet:w_float(cse_alife_custom_zone__unk1_f32)
    cse_alife_custom_zone__unk2_u32 = bit_not(0)
    packet:w_s32(cse_alife_custom_zone__unk2_u32)
    packet:w_s32(on_off_mode_enabled_time)
    packet:w_s32(on_off_mode_disabled_time)
    packet:w_s32(on_off_mode_shift_time)

    packet:w_float(offline_interactive_radius)
    packet:w_u16(artefact_spawn_places_count)
    packet:w_s32(cse_alife_anomalous_zone__unk1_u32)

    packet:w_u8(last_spawn_time_present)

    p_obj:STATE_Read(packet, packet:w_tell()-packet:r_tell())
    return p_obj
end

Все прекрасно спавнится ( в данном случае в Предбаннике). Но когда дело доходит до радиации, начинается фигня. Радиация спавнится, но почему-то не в Предбаннике, а где-то между Кордоном и Болотами. См. скрин

339eec7202cfd99049fb4ccb289d403250466f34

 

Вот в чем здесь причина? Или Радиацию надо как-то по-другому спавнить?

 

upd: пробовал спавнить аномалии на Свалке - все то же самое. Аномалии спавнятся на Свалке, радиация - между Кордоном и Болотами.

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

Сталкер - наше всё!

Ссылка на комментарий

@AndrewMor, радиоактивные зоны относятся к классу cse_alife_anomalous_zone, а разные жарки, электры, воронки и т.д. - это se_zone_anom. Пакеты, соответственно, немного отличаются, у радиации нет последнего поля, которое у тебя зовётся last_spawn_time_present. Может, дело в этом?

Поставь проверку перед чтением/записью

 

local last_spawn_time_present

if not packet:r_eof() then

    last_spawn_time_present = packet:r_u8()

end

...

if last_spawn_time_present then

    packet:w_u8(last_spawn_time_present)

end

 

А ещё вот перед этим

p_obj:STATE_Read(packet, packet:w_tell()-packet:r_tell())

Нужно сначала поставить чтение пакета на начало:

packet:r_seek(0)

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

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Ссылка на комментарий

 

@naxac, Попробовал для начала вот это:

 

Нужно сначала поставить чтение пакета на начало:

packet:r_seek(0)

 

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

А вот конструкции

 

if not packet:r_eof() then

    last_spawn_time_present = packet:r_u8()

end

...

if last_spawn_time_present then

    packet:w_u8(last_spawn_time_present)

end

 

сработали. Все спавнится и наносит урон, как и задумано. Спасибо за помощь, может еще кому пригодится.

Изменено пользователем AndrewMor
  • Полезно 1

Сталкер - наше всё!

Ссылка на комментарий

@AndrewMor

Ты бы лучше, вместо прямой работы с нет-пакетом, использовал какой-нить модуль, ну хотя бы того же Artos'а. Меньше проблем бы было...

Изменено пользователем AndreySol
Ссылка на комментарий

Подскажет кто, что нужно изменить в логике дверей бункера Сидоровича, чтобы они изначально были октрыты?

[logic]
active = ph_door@locked

[ph_door@locked]
locked = true
snd_open_start = trader_door_unlock
on_info = {+esc_trader_can_leave} ph_door@closed %=play_snd(device\door_servomotor)%

[ph_door@closed]
closed = true
locked = false
on_use = ph_door@open %-esc_close_door%
snd_open_start = trader_door_open_start
snd_close_start = trader_door_close_start
snd_close_stop = trader_door_close_stop

[ph_door@open]
closed = false
locked = false
on_use = ph_door@closed
on_info = {+esc_close_door} ph_door@closed
snd_open_start = trader_door_open_start
snd_close_start = trader_door_close_start
snd_close_stop = trader_door_close_stop

 

Discord-сервер modfaq.ru: https://discord.gg/9j42BXwB

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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