Перейти к содержанию

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

 
 

Как решить данную проблему?
Добавил функцию, которая выводит на центр экрана текст. После нескольких заданных секунд текст должен исчезать, но он не исчезает и остаётся навсегда.

Спойлер

правки в _G
function SetHudMsg(msg,n)
    msg = tostring(msg)
    local hud = get_hud()
    if (hud) then
        hud:AddCustomStatic("not_enough_money_mine", true)
        hud:GetCustomStatic("not_enough_money_mine"):wnd():TextControl():SetTextST(msg)
    end
    bind_stalker.ShowMessageTime = time_global() + n*1000
end
правки в bind_stalker в функции reinit

ShowMessageTime = nil
function actor_binder:reinit()

...
    local function check_hud_msg()
        if (ShowMessageTime) then
            local hud = get_hud()
            if (hud) then
                local custom_static = hud:GetCustomStatic("not_enough_money_mine")
                if custom_static ~= nil and time_global() > ShowMessageTime then
                    hud:RemoveCustomStatic("not_enough_money_mine")
                    ShowMessageTime = nil
                end
            end
        end
        return false
    end
конец функции

Или может я неправильно вызываю?
if math.random(1,100) <= (Probability*100) then
...
    else
    SetHudMsg(game.translate_string("st_cant_cut_monster_part"),5)
end

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


Ссылка на сообщение
Поделиться на другие сайты
 

Вызов функций через рестриктор

Спойлер

 

Логика

[sr_idle@control_6_1]
on_game_timer = 30 | sr_idle@control_6_2 %=add_cs_text_no_blink(st_sidorovich_text)%

[sr_idle@control_6_2]
on_game_timer = 60 | sr_idle@control_7 %=del_cs_text_no_blink%

Сами функции

function add_cs_text_no_blink(actor, npc, p)
    if p[1] then
        local hud = get_hud()
        local cs_text = hud:GetCustomStatic("text_on_screen_center_no_blink")
        if cs_text then
            hud:RemoveCustomStatic("text_on_screen_center_no_blink")
        end
        hud:AddCustomStatic("text_on_screen_center_no_blink", true)
        cs_text = hud:GetCustomStatic("text_on_screen_center_no_blink")
        cs_text:wnd():TextControl():SetText(game.translate_string(p[1]))
    end
end

function del_cs_text_no_blink(actor, npc)
    local hud = get_hud()
    cs_text = hud:GetCustomStatic("text_on_screen_center_no_blink")
    if cs_text then
        hud:RemoveCustomStatic("text_on_screen_center_no_blink")
    end
end

 

Вызов функции из функции

Спойлер

function add_and_remove_cs_text( text_center, cs_time )
    local hud = get_hud()
    hud:HideActorMenu()
    local cs_text = hud:GetCustomStatic( "text_on_screen_center" )
    if cs_text then
        hud:RemoveCustomStatic( "text_on_screen_center" )
    end
    hud:AddCustomStatic( "text_on_screen_center", true )
    cs_text = hud:GetCustomStatic( "text_on_screen_center" )
    cs_text:wnd():TextControl():SetText( text_center )
    local timer_text = time_global() + cs_time
    level.add_call(
        function ()
        if timer_text < time_global() then
            return true
        end 
        end,
        function ()
            get_hud():RemoveCustomStatic( "text_on_screen_center" )
        end
    )
end

 

  • Мастер! 1
  • Спасибо 1

Терпение... И все получится.

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


Ссылка на сообщение
Поделиться на другие сайты
 

Хочу добавить рюкзаки в мод. В теории представляю себе это так

 

Создать предмет - рюкзак ( на основе чего лучше сделать, пока не знаю)

При использовании\надевания рюкзака нам дается +20кг, второй тип рюкзака дает +35кг

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

Проблема в написании скрипта, пробовал писать - lua нихера не знаю, выходит шляпа)

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

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


Ссылка на сообщение
Поделиться на другие сайты
 
9 часов назад, detoxe сказал:

Создать предмет - рюкзак ( на основе чего лучше сделать, пока не знаю)

 

Если не редактировать движок, то есть следующие возможности влиять на грузоподъемность ГГ.

1. Бустер - энергетик.  Выпили его, грузоподъемность повысилась.  Для рюкзака в принципе подходит.  Время действия ограничено.

2. Костюм.  У костюма есть параметр, влияющий на переносимый вес.  Тут можно сделать примерно так.  Использовали вы свой рюкзак.  Прошла подмена бронекостюма через скрипт на похожий костюм с повышенной грузоподъемностью.  Будут сложности с переносом апгрейдов с костюма на костюм.

3. Артефакт, влияющий на вес.  Рюкзак, который можно поставить в слот.  Зато никаких дополнительных проблем.

 

Выберите один из вариантов и пробуйте.

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


Ссылка на сообщение
Поделиться на другие сайты
 
22 минуты назад, Сергей Шубин сказал:

Если не редактировать движок, то есть следующие возможности влиять на грузоподъемность ГГ.

1. Бустер - энергетик.  Выпили его, грузоподъемность повысилась.  Для рюкзака в принципе подходит.  Время действия ограничено.

2. Костюм.  У костюма есть параметр, влияющий на переносимый вес.  Тут можно сделать примерно так.  Использовали вы свой рюкзак.  Прошла подмена бронекостюма через скрипт на похожий костюм с повышенной грузоподъемностью.  Будут сложности с переносом апгрейдов с костюма на костюм.

3. Артефакт, влияющий на вес.  Рюкзак, который можно поставить в слот.  Зато никаких дополнительных проблем.

 

Выберите один из вариантов и пробуйте.

Лучше создать новый слот в инвентаре, если делаете глобальный проект, то точно придётся редактировать движок.

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


Ссылка на сообщение
Поделиться на другие сайты
 

ДА! Наконец-то я разобрался с этим идиотским спавном, у меня снова вопрос. Я для CoC сделал тайники, а они не работают, я написал здесь, потому-что на CoC вопросницу никто не заходит. Я обыскиваю тайник, а он не засчитывается, на игроке появляется метка "Личный Ящик".

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


Ссылка на сообщение
Поделиться на другие сайты
 

detoxe 
1. Для чего вы это хотите сделать? Фича ради фичи? Инвентарь ГГ - это и есть рюкзак и фичи ограничения объема или веса рюкзака давно реализованы! Если фича не нацелена на реализм (что сужает круг играющих в мод) или не на удобство игрока (на что вам скажут спасибо) или новые интересные механики (сменные рюкзаки сами по себе не механика, а вот использование сменных рюкзаков для игрового процесса - это механика).
2. Если реализовывать подобное, то сразу стоит ставить планку на редактирование движка дабы не плодить скриптовые костыли.
3. Теперь по методам предложенными Сергей Шубин:
   а. Бустер - чрезвычайно просто, но мимо по причине ограничения времени действия.
   б. Слот костюма - очень просто, но опять мимо, по причине не логичности действия - от костюма не должно зависеть наличие или количество рюкзаков, поскольку проверять и управлять слотами костюма не тривиальная задача.
   в. Костюм - сложнее, но есть возможность логичной реализации если сделать у всех костюмов два (или более) дополнительных апгрейда (не доступных механикам, а устанавливаемым чисто скриптово) которые будут увеличивать вес на соответствующее значение.

Реализация плана в: 
1. Рюкзаки - это предметы на классе ПДА, использование которых будет обрабатываться скриптом, который и будет ставить/убирать нужные апгрейды на костюм в слоте, помещая освободившийся рюкзак в виде предмета в инвентарь.
2.  Скрипт должен постоянно мониторить костюм в слоте и при его смене автоматически переносить апгрейды со "старого" костюма на "новый".
3. Нужно отредактировать скрипт апгрейда/ремонта механиков для того, чтобы указывалась правильная причина отказа механиков делать такие апгрейды (типа надписи: вы сами управляете этими функциями посредством использования рюкзаков).

Изменено пользователем denis2000
  • Аплодисменты 1
  • Спасибо 1

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

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


Ссылка на сообщение
Поделиться на другие сайты
 

Доброго дня. При реализации катсцены столкнулся со следующей проблемой. При переключении одной секции на другую (с другими камерами, кусок логики под спойлером) на долю секунды камера переключается на point, и только после этого переключается на cam_effector. Есть какой-то вариант СРАЗУ переключаться на cam_effector, минуя point'ы? Потому что очень сильно страдает целостность сцены.

Спойлер

[sr_cutscene@cam_1]
point = vco_mission_01_actor_walk
look = vco_mission_01_actor_look
global_cameffect = true
enable_ui_on_end = false
outdoor = true
cam_effector = vco_mission_01_cam_01
on_signal = cameff_end | sr_cutscene@cam_2
 
[sr_cutscene@cam_2]
point = vco_mission_01_actor_walk
look = vco_mission_01_actor_look
global_cameffect = true
enable_ui_on_end = false
outdoor = true
cam_effector = vco_mission_01_cam_02
on_signal = cameff_end | sr_cutscene@cam_3

 

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


Ссылка на сообщение
Поделиться на другие сайты
 

svi_042
1. А если сделать сцену с применением одной камеры, которая в определенный момент быстро перескочит в новую точку при грамотной реализации анимации камеры? Нужно пробовать на практике.
2. Точки (point, look) - это начальное положение камеры они должны быть в соответствующих местах и совпадать с нулевой точкой анимации (хотя и это не гарантирует быструю склейку сцены).
3. Обычно при реализации схемы с двумя пролетами между ними делают секцию с перебивкой (например с затемнением) которая скрывает огрехи работы скрипта.

PS: Я в одном моде делал в виде перебивки титры, получалось аристократически-кинематографически (как у Маяковского) так делают многие игры и фильмы.

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

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

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


Ссылка на сообщение
Поделиться на другие сайты
 

denis2000 , в одном месте есть перебивка затемнением, да, но камер суммарно 10 штук, и они по большей степени идут последовательно. Можно сказать, такие требования-с. Похоже, придётся мастырить вэй-поинты в начальных точках каждой анимации и последовательно скакать в них, чтоб не было столь заметно. Жаль.

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


Ссылка на сообщение
Поделиться на другие сайты
 

@svi_042, используйте камерные таблицы из cam_effector_sets.script. Имя таблицы будет служить значением cam_effector в логике. В этом скрипте и функционал склейки есть, и возможность производить всякие действия при старте нужной камеры. Примеры, опять же, в этом самом скрипте. Там же есть и условия включения камер.


55 минут назад, denis2000 сказал:

1. А если сделать сцену с применением одной камеры, которая в определенный момент быстро перескочит в новую точку при грамотной реализации анимации камеры? Нужно пробовать на практике.

В своё время пробовал делать перескок - затея не из приятных (если делать средствами Level Editor). ?

55 минут назад, denis2000 сказал:

2. Точки (point, look) - это начальное положение камеры они должны быть в соответствующих местах и совпадать с нулевой точкой анимации (хотя и это не гарантирует быструю склейку сцены).

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

  • Жму руку 1
  • Аплодисменты 1

c01570bf2e07524.png

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


Ссылка на сообщение
Поделиться на другие сайты
 

Вылеты, я ваш рот...

FATAL ERROR
 
[error]Expression    : cross_table().header().level_guid() == level_graph().header().guid()
[error]Function      : CAI_Space::load
[error]File          : ai_space.cpp
[error]Line          : 113
[error]Description   : cross_table doesn't correspond to the AI-map
 

stack trace:

001B:002224D1 xrCore.dll, xrDebug::fail()
001B:0339E215 xrGame.dll, CDialogHolder::operator=()
001B:75FFF8E4 CRYPT32.dll, CryptUpdateProtectedState()


Дополнено 1 минуту спустя

А, и ещё у меня после правок спавна на ГГ вечно стоит метка "Место для сна", она привязана к ГГ, а не к камере, это можно подтвердить, включив demo_record


Дополнено 21 минуты спустя

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

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


Ссылка на сообщение
Поделиться на другие сайты
 
2 часа назад, Igor_Misery сказал:

FATAL ERROR
 
[error]Expression    : cross_table().header().level_guid() == level_graph().header().guid()
[error]Function      : CAI_Space::load
[error]File          : ai_space.cpp
[error]Line          : 113
[error]Description   : cross_table doesn't correspond to the AI-map

Вот твой вылет: 1 вариант


EaRLNb6.gif
AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb).
Windows -10 PRO (х64)

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


Ссылка на сообщение
Поделиться на другие сайты
 

Создал на локации смарт-террейн, и никак не могу привязать к нему граф-поинт, как только перематываю список террейнов всё намертво зависает, а если покликать то и мышка зависнет.

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

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


Ссылка на сообщение
Поделиться на другие сайты
 

Всем привет! Следующий вопрос имеется: противники НПС игнорируют ГГ на дальних дистанциях. Попробовал менять дальность стрельбы у всего оружия, игрался с параметрами visibility, но по итогу случилось следующее - все НПС начинают агрится друг на друга через всю локацию, но на ГГ им также пофиг как и раньше. Локация новая, так что даже думал насчёт проблем с smart террейнами или путями НПС. Надеюсь сможете помочь, вроде вопрос не сложный, тем не менее на сайтах модостроя я ответа не нашёл.

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


Ссылка на сообщение
Поделиться на другие сайты
 

Gerbys А попробуйте в файле xr_combat_ignore.script вместо:

se_obj.position:distance_to_sqr(se_enemy.position) > 900 then

вписать:

se_obj.position:distance_to_sqr(se_enemy.position) > 10000 then

 

  • Спасибо 2

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

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


Ссылка на сообщение
Поделиться на другие сайты
 
6 часов назад, Igor_Misery сказал:

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

Параметр level_spot в секции logic.


c01570bf2e07524.png

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


Ссылка на сообщение
Поделиться на другие сайты
 

Как выяснить clsid монстра?
if (функция проверки clsid монстра) == clsid.dog_s, например, then
...
end

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


Ссылка на сообщение
Поделиться на другие сайты
 
if monster:clsid() == clsid.dog_s then

end

 

 

  • Жму руку 1

c01570bf2e07524.png

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


Ссылка на сообщение
Поделиться на другие сайты
 
3 часа назад, denis2000 сказал:

Gerbys А попробуйте в файле xr_combat_ignore.script вместо:


se_obj.position:distance_to_sqr(se_enemy.position) > 900 then

вписать:


se_obj.position:distance_to_sqr(se_enemy.position) > 10000 then

 

Спасибо! В целом помогло...


Дополнено 10 минуты спустя

Вопрос по месту для сна на новой локе. Всё сделал по инструкции, есть надпись "Спать" в этом месте в игре, но при нажатии ничего не происходит


Дополнено 36 минуты спустя

Ещё вопрос. Необходимо сделать сквад враждебным после получения определённого инфопоршня. Однако через условия в relationship в настройках сквада этого сделать не получается..

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


Ссылка на сообщение
Поделиться на другие сайты
 
1 час назад, Gerbys сказал:

Ещё вопрос. Необходимо сделать сквад враждебным после получения определённого инфопоршня. Однако через условия в relationship в настройках сквада этого сделать не получается..

Как - то так.

on_info = {+zat_b103_merc_fight}  %=set_squad_goodwill(zat_b103_lost_merc_squad1:enemy)%

relationship кондлист не поддерживает.

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

Всё сделал по инструкции, есть надпись "Спать" в этом месте в игре, но при нажатии ничего не происходит

Видимо, не все. Функция засыпания.

Спойлер

 

function sleep(actor, npc)
    local sleep_zones = {
                        "zat_a2_sr_sleep",
                        "jup_a6_sr_sleep",
                        "pri_a16_sr_sleep",
                        "actor_surge_hide_2"
                        }

    for k,v in pairs(sleep_zones) do
        if utils.npc_in_zone(db.actor, db.zone_by_name[v]) then
            ui_sleep_dialog.sleep()
            give_info("sleep_active")
        end
    end

end

 

 

Изменено пользователем Сергей Шубин
  • Спасибо 1

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


Ссылка на сообщение
Поделиться на другие сайты
 
35 минут назад, Сергей Шубин сказал:

Видимо, не все. Функция засыпания.

Спасибо, со сквадом получилось! А по функции у меня вот так, и всё равно не спит:

Спойлер

function sleep(actor, npc)
    local sleep_zones = {
                        "raz_sleep_1"
                        "zat_a2_sr_sleep",
                        "jup_a6_sr_sleep",
                        "pri_a16_sr_sleep",
                        "actor_surge_hide_2"
                        }

    for k,v in pairs(sleep_zones) do
        if utils.npc_in_zone(db.actor, db.zone_by_name[v]) then
            ui_sleep_dialog.sleep()
            give_info("sleep_active")
        end
    end

end

 

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


Ссылка на сообщение
Поделиться на другие сайты
 
2 минуты назад, Gerbys сказал:

 

 А по функции у меня вот так, и всё равно не спит:

 

Проверь, правильно ли прописана зона raz_sleep_1 в алл.спавн.

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


Ссылка на сообщение
Поделиться на другие сайты
 
2 минуты назад, Сергей Шубин сказал:

 

Проверь, правильно ли прописана зона raz_sleep_1 в алл.спавн.

Я пользуюсь Level эдитором

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


Ссылка на сообщение
Поделиться на другие сайты
 
5 минут назад, Gerbys сказал:

Я пользуюсь Level эдитором

Тогда покажи, как выглядит секция зоны сна.  В алл.спавн или в эдиторе.

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


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   1 пользователь онлайн