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

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

 
 

@SoDizzari спасибо чувак)


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

Блин у меня остался ещё один вопрос, как сделать артефакт видимым через СДК?

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


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

Добрый день, может кто привести конкретный пример секции ph_code, пробовал пару вариантов, но сейф не открывается. Задумка такова: ГГ берет квест на открытие квеста, далее по вводу кода "1942" сейф должен открыться со звуком (=play_sound(..) ) , а так-же выдаться инфорпоршень , который обновляет описание квеста (+seif_door_open), буду премного благодарен.

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


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

Добрый день, может кто привести конкретный пример секции ph_code, пробовал пару вариантов, но сейф не открывается. Задумка такова: ГГ берет квест на открытие квеста, далее по вводу кода "1942" сейф должен открыться со звуком (=play_sound(..) ) , а так-же выдаться инфорпоршень , который обновляет описание квеста (+seif_door_open), буду премного благодарен.

Могу показать вот такой пример.

Спойлер

[logic]

active = ph_code@lock   

[ph_code@lock]
code = 1942              ;тут любой код
on_code = %=play_sound(..) ) +seif_door_open% sr_idle@end     ;когда правильный код будет введён, будет выдаваться инфопоршень и звук

[sr_idle@end]

 

  • Спасибо 1

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


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

@Boomer При введении "1942" звук проигрывается, инфопоршень выдается, соответственно и задание обновляется, но сам сейф не открывается :u1F914:

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


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

Mindallius Читайте лог далее, значит там не единственная проблема.
К стати вылет sim_squad_scripted.script:124: attempt to index local 'point' относиться именно к смарту, проверьте его наличие.

Смарт существует и прописан

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


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

@Boomer При введении "1942" звук проигрывается, инфопоршень выдается, соответственно и задание обновляется, но сам сейф не открывается :u1F914:

Должна быть логика двери сейфа, чтобы дверь открывалась по инфопоршню, который выдаётся при вводе правильного кода. По типу:

Спойлер

[logic]
active = ph_door@locked             ;сейчас дверь закрыта

[ph_door@open]
locked = false
closed = false

[ph_door@locked]
locked = true
closed = true
on_info = {+info} ph_door@open                  ;инфо для открытия, переход в секцию ph_door@open   

 

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

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


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

@Boomer Сейф типа inventory_box, маленький, такой-же, как и тот, что стоит в комнате у Отца Валерьяна, сомневаюсь, что на него эта логика подействует.

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


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

! Cannot find saved game ~~~ [smart_terrain escape_smart_terrain] no configuration!

Очевидно, что этот смарт escape_smart_terrain не зарегистрирован! Ищите ошибку

7 часов назад, Mindallius сказал:

! Cannot find saved game ~~~ there is no configuration file [scripts\escape\smart\escape_timoha_spawn.ltx] in smart_terrain [escape_timoha_spawn]

Файла нет на месте. Путь до указания файла указан неверно, или сам файл отсутствует/имеет другое имя. Проверяйте и исправляйте!


Дополнено 3 минуты спустя
2 часа назад, Drive сказал:

Сейф типа inventory_box

Нужно использовать коллбек on_use,  я так думаю! Или я неправильно понял вопрос =)!


Дополнено 21 минуты спустя
4 часа назад, Boomer сказал:

on_code = %=play_sound(..) ) +seif_door_open% sr_idle@end

Кстати, так делать нельзя! Даже если и работает

Для классов рестриктора и инвентори разные схемы

Спойлер

 

on_code = %=play_sound(..) ) +seif_door_open% ph_idle

[ph_idle]

on_use = ph_idle@end


 [ph_idle@end]

 

Так попробуйте

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

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


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

Очевидно, что этот смарт escape_smart_terrain не зарегистрирован! Ищите ошибку

Файла нет на месте. Путь до указания файла указан неверно, или сам файл отсутствует/имеет другое имя. Проверяйте и исправляйте!


Исправил, осталось старое.

Спойлер

! Cannot find saved game ~~~ incorrect next point [escape_stalker_village_spawn] for squad [248]
* Log file has been saved successfully!
 
FATAL ERROR
 
[error]Expression    : !m_error_code
[error]Function      : raii_guard::~raii_guard
[error]File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
[error]Line          : 748
[error]Description   : ...f pripyat\gamedata\scripts\sim_squad_scripted.script:124: attempt to index local 'point' (a nil value)
 

stack trace:
 

 

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


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

Mindallius возможно в target_smart ошибка. Или nil или сам целевой смарт должен быть указан

Изменено пользователем Mass
  • Спасибо 1

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


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

Mindallius возможно в target_smart ошибка

Так оно и было, спасибо

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


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

Есть у меня одна аномалия, которая должна включиться ненадолго по скрипту, и потом выключиться. Реализовал это через аномальную зону с лишь одним полем, и с помощью функций =anomaly_turn_off() и =anomaly_turn_on() я включаю и выключаю её. Однако, заметил такое: если аномалия выключена, и прошёл выброс, то она сама включается, но при этом, если после этого сделать сохранение и тут же загрузить его, то аномалия выключается назад.

Можно ли как-то этого избежать? Я, конечно, могу сделать отдельный рестриктор на автовыключение аномалии после выброса, но хотелось бы узнать, есть ли менее костыльный способ.

За основу логики для аномалии брал логику аналогичной аномалии из оригинала по квесту "Переменное пси-излучение".

Спойлер

[anomal_zone]
layers_count = 2
respawn_tries = 0
max_artefacts = 0
artefacts = af_cristall
coeff = 1
field_name = yan_zavod_zone_field_psychic_average
artefact_ways = yan_psi_oko_spawn

[layer_1]
mines_section = mines_layer_1 

[mines_layer_1]

[layer_2]
mines_section = mines_layer_2 

[mines_layer_2]
 

 

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

Мод в разработке - X-7: Эпицентр

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


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

Prostomod Замена аномалии производится в 2-ух местах в surge_manager.script

Можно попробовать добавить проверку на отсечение по имени в respawn_artefacts_and_replace_anomaly_zone

Спойлер

 

    for k,v in pairs(anomalies) do

if v~="аномалия" then
        v:respawn_artefacts_and_replace_anomaly_zone()
        --printf("respawn artefacts in anomal zone [%s]", tostring(k))
    end end

 

 

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

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


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

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

 


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

Столкнулся с необходимостью получить информацию об НПС через story_id в оффлайне. Если я использую просто get_story_object(), то он возвращает НПС только если он в онлайне, иначе nil. Как я могу обратиться к объекту через story_id, который в оффлайне?
Расширить онлайн на всю карту можно, но это будет потреблять много ресурсов компа.

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

Мод в разработке - X-7: Эпицентр

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


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

Как я могу обратиться к объекту через story_id, который в оффлайне?

local npc_id = get_story_object_id(story_id)

local obj_server = alife():object(npc_id)

  • Жму руку 1

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

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


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

makdm Как я понял, тип, возвращаемый из alife():object(npc_id) не тот же самый, что из get_story_object(story_id), верно? У меня просто не получается с полученными объектом работать как прежде. Может, как-то преобразовать надо?

Спойлер

function send_message(actor, npc, p)
    local npc_id = get_story_object_id(p[3])
    if npc_id == nil then
        abort("Cannot get id from story_id [%s]", p[3])
    end
    local sender = alife():object(npc_id)
    if sender == nil then
        abort("Cannot find object for id = [%s]", p[3])
    end
    local function is_npc_stalker(class_id)
        if class_id==clsid.script_stalker or
            class_id==clsid.stalker then
            return true
        end
        return false
    end
-- тут спокойно выводится "Try to access object [yan_expedition_dolg_10341]"
    printf("Try to access object [%s]", sender:name())
    local sender_name = nil
    if is_npc_stalker(sender:clsid()) then
        sender_name = sender:character_name() -- Вот тут падает: attempt to call method 'character_name' (a nil value)
    elseif sender == actor then
        sender_name = actor:character_name()
    end
    news_manager.send_tip(actor, p[1], nil, sender, nil, p[3], sender_name)
end

 


Мод в разработке - X-7: Эпицентр

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


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

Prostomod , вот так я делал в моде Время Альянса 3.0

Спойлер

 

function send_message(actor, npc, p)
    --' p[1] - id текста сообщения из папки text\rus
    --' p[2] - story_id сендера
    --' p[3] - id имени сендера из папки text\rus
    --' p[4] - длительность показа сообщения  в миллисек, по-умолчанию 5 секунд.
    --' =send_message(p[1]:p[2]:p[3]:p[4]) - вызов функции
        if p == nil then
            abort("Wrong parameters in 'send_message' function!!!")
        end
            if p[4] == nil then p[4] = 5000 end
        --' Иконки сендеров [ story_id сендера ] = "Название иконки"
    local portrets = {
                     ["jup_a18_sherkchan_bandit"]     = "ui_inGame2_sherkchan_noheat",
                     ["jup_a9_sedoy_stalker"]         = "ui_inGame2_sedoy",
                     ["jup_a18_baloon_bandit"]         = "ui_inGame2_puzir",
                     ["jup_smuggler_lena"]             = "ui_inGame2_lena_contra",
                     ["bar_a1_botanick"]             = "ui_inGame2_doctor",
                     ["bar_a5_stalkerden"]             = "ui_inGame2_den",
                     ["bar_a2_duty_leader"]         = "ui_inGame2_stalker_dolg_leader",
                     ["jup_a18_botan_bandit"]         = "ui_inGame2_botan_bandit",
                     ["jup_stalker_garik"]             = "ui_inGame2_stalker_Garik",
                     ["jup_stalker_dectyrev"]         = "ui_inGame2_Degtyaryov",
                     ["bar_a1_proveren_3"]             = "ui_inGame2_makdm",
                     ["radar_a4_lider_night"]         = "ui_inGame2_stalker_night_2",
                     ["aver_a1_4erepok_bandit"]     = "ui_inGame2_stalker_bandit_3",
                     ["radar_a1_lider_bandit"]         = "ui_inGame2_evil_raccoon",
                     ["lim_a4_lider_monolit"]         = "ui_inGame2_semperfay",
                     ["lim_a4_brodiaga_monolit"]     = "ui_inGame2_Brodyaga_monolith",
                     ["radar_a6_botanic"]             = "ui_inGame2_ecolog_red",
                     ["bar_a2_dolg_3"]                 = "ui_inGame2_inkvizitor",
                     ["dark_a2_winchester"]         = "ui_inGame2_stalker_jagernaut1",
                     ["radar_a1_gupi_bandit"]         = "ui_inGame2_stalker_bandit_3_face_1",
                     ["bar_a5_voyak_4"]             = "ui_inGame2_stalker_soldier_33",
                     ["pr_a7_stalker_degtyrev"]     = "ui_inGame2_Degtyaryov"
                     }        

                local news_text = game.translate_string(p[1])
                local news_caption = game.translate_string(p[3])
                local showtime =  p[4]
                local sender = get_story_object(p[2])
                local texture = "ui_iconsTotal_grouping"
                        if sender then
                            texture = sender:character_icon()
                        elseif portrets[ p[2] ] ~= nil then
                            texture = portrets[ p[2] ]
                        end                        
            xr_sound.set_sound_play(db.actor:id(), "pda_tips")
            db.actor:give_game_news(news_caption, news_text, texture, 0, showtime, 0)
end

 

 

  • Лайк 1

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

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


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

Так попробуйте

Все так-же, квест обновляется, звук срабатывает, но сейф упрямый)

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


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

Сейф типа inventory_box, маленький

У объекта этого класса нет никаких дверей.
Используйте nonscript_usable = true - инвентарный ящик доступен или nonscript_usable = false - инвентарный ящик не доступен.


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

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


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

Используйте nonscript_usable = true

Пробовал такую логику:
 

Спойлер

[logic]
active = ph_code@lock

[ph_code@lock]
code = 1942
on_code = ph_idle@open %=play_sound(metal_small_open) +seif_door_open%
tips = esc_safe_lock

[ph_idle@open]
nonscript_usable = true
tips = esc_safe_open

 

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


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

Drive Два объекта, нужно. Собственно кодовый замок и инвентори бокс, логика должна быть типа такой:
 

[logic]
active = ph_code@lock

[ph_code@lock]
code = 1942
on_code = nil %=play_sound(metal_small_open) +seif_door_open%
[logic]
active = ph_idle@lock

[ph_idle@lock]
nonscript_usable = false
on_info = {+seif_door_open} ph_idle@open
tips = esc_safe_lock

[ph_idle@open]
nonscript_usable = true
tips = esc_safe_open

 

  • Спасибо 1

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

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


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

Кто может подсказать функцию для очистки локации от всех сквадов с определённой группировкой? У меня есть сильнозаскриптованная территория, и, несмотря на то, что перед её инициализацией я внутри неё и рядом очищаю все симуляционные смарты, а так-же запрещаю их для симуляции (в simulation_objects_props в sim_avail по условия ставиться false), симуляционные сквады всё-равно остаются там, и я теперь хочу просто их удалить путём удаления всех сквадов этой группировки.


Мод в разработке - X-7: Эпицентр

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


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

Prostomod это из тч, но в зп примерно также по идее можно убрать.

character_community() мб вместо community(), если не сработает. клсиды могут быть разными.

Если нужно на конкретном уровне, то, возможно(я скрипты пишу наугад), можно сделать условие... А вообще пофиг, можно просто три разных функции для каждого лвл, наверное хех

function delete_npc()
    for a = 1, 65534, 1 do
      local sobj = alife():object( a )
        if sobj and is_stalker( sobj ) and sobj:alive() and (level.name() == "zaton") not sobj:community() == "stalker" then
		alife():release(sobj, true)
          end
     end
end

function is_stalker( sobj )
  return sobj:clsid() == clsid.script_stalker
end

 

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

76561198152189716.png

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


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

Prostomod Попробуйте %=clear_smart_terrain(смарт)%

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


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

Mass В том то и дело, что я и так вызываю эту функцию для всех нужных смартов (все смарты внутри заскриптованной области и прописанные в simulation_objects_props) - всё-равно отряд остаётся.

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

 

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

Мод в разработке - X-7: Эпицентр

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


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

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

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

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

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

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

Войти

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

Войти

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

    Ни одного зарегистрированного пользователя не просматривает данную страницу