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

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

@AndreySol, я про таблицы значений clsid, на которых эти функции работают. Неудобно, когда они разбросаны по куче разных файлов. Лучше иметь одну большую таблицу, где всё это собрано.

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

Здрасьте.

 

Делаю счетчик хилок на HUD: создал группу скриптовых статиков, вывел через get_hud():AddDialogToRender(…) и записал в таблицу, чтобы статики не потерялись при уборке.

Проблема: если добавлять статики в таблицу через table.insert, то индексы получаются просто числами, и найти среди них нужный статик (для привязки текста или для удаления статика, если каких-то предметов 0) невозможно. Если добавлять статики в таблицу по секции предмета list[sect] = static, то случается безлоговый вылет через секунду после загрузки – так же, как при отсутствии хранения ссылок на статики. Что я упускаю?

 

Мой мод и оригинал счетчика: https://drive.google.com/open?id=16gX0BYqim6zB6aZnGLqSV-kMPMB3QjQC

 

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

Шпаргалка

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

Привет.

Товарищи, кто пробовал вывести CUIScrollView одними скриптами без xml в ТЧ? Может, у кого вышло? 

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

naxac.gif


Подарки

Ссылка на комментарий
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 если есть возможность - скинь скрипты. Аж интересно стало. У меня в скриптах есть AddWindow - ничего не зависает.

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

@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

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

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

Приветствую всех! Подскажите пожалуйста, как заспавнить чего либо(бочки, мутни, нпс) вокруг ГГ, в радиусе ну скажем 10м.?

Ссылка на комментарий
4 часа назад, temass сказал:

как заспавнить чего либо(бочки, мутни, нпс) вокруг ГГ

Повелитель Зоны от Shoker-а.

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

@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

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

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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