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

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

 
 

Добрый вечер.  Возник вопрос.  Есть объект - inventory_box.  На боксе стоит метка.  Эту метку надо удалить.  Функция для удаления должна вызываться из логики этого самого бокса.  Как её правильно составить?


        if level.map_has_object_spot(box:id(), "treasure") ~= 0 then
            level.map_remove_object_spot(box:id(), "treasure")
        end

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


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

Эту метку надо удалить. 

Пардон, а как вы её ставили? Я делаю так:
 

	local box_1 = get_story_object_id("ид_объекта")
	level.map_add_object_spot_ser(box_1, "иконка_метки", "описание")

Потом удалить метку этой функцией:
	level.map_remove_object_spot(box_1, "иконка_метки")

 

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


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

if level.map_has_object_spot(box:id(), "treasure") ~= 0 then

Не стоит так записывать, не разобравшись. Если ты пытаешь проверить наличие метки, то НИКОГДА не пиши так. В программирование есть разница между nil и 0. А разница в том, что 0 это значение типа int, а nil это отсутствие значения.

Вообще, советую писать вот так, точно не ошибешься:

if level.map_has_object_spot(box:id(), "treasure") then
	--действия
end

 

  • Мастер! 1

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


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

Не стоит так записывать, не разобравшись

Я сделал рюкзаки-тайники с хабаром.  Спавнятся по скрипту в ходе игры.  Как награда за квесты и.д.  С метками или без меток.  Встала задача - при первою юзании рюкзака метку удалить.  Есть функция.

function on_use_box(box)
    local box_name=box:section()
    if (box_name=="deserve_rukzak" or box_name=="reward_rukzak" or box_name=="treasure_rukzak") then
        local name = box:name()
        if not has_alife_info(name) then
            give_info(name)
            xr_statistic.inc_founded_secrets_counter()
            news_manager.send_treasure(1)
        end
        if level.map_has_object_spot(box:id(), "treasure") ~= 0 then
            level.map_remove_object_spot(box:id(), "treasure")
        end
        if level.map_has_object_spot(box:id(), "treasure_npc") ~= 0 then
            level.map_remove_object_spot(box:id(), "treasure_npc")
        end
    end
end

Вызывается из generic_physics_binder:use_callback(obj, who).  И все работает отлично.  Сделал рюкзаки-бомбы. Тоже с метками.  Но тут задача другая. Метку надо удалять непосредственно перед подрывом.  И удалить её должен рюкзак из своей логики.

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


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

Народ! Сори за нубский вопрос. В начале диалога две строки

 <precondition>scripts_локация.функция</precondition>
 <has_info>инфопоршень</has_info>

Поясните плиз, диалог начнётся при соблюдении обоих условий?
Или любого из этих условий?

И второй вопрос, в чём ошибки функций: Прекондишен, роверка наличия у актора 5 КПК

Цитата

function bar_balamut_kpk_items(first_speaker, second_speaker)
    return (db.actor:object("device_pda_quest_bar") ~= nil and db.actor:object("device_pda_quest_bar") ~= nil and db.actor:object("device_pda_quest_bar") ~= nil and db.actor:object("device_pda_quest_bar") ~= nil and db.actor:object("device_pda_quest_bar") ~= nil )
end

Диалог всё равно начинается,  независимо от того, есть ли у актора 5 кпк или нету...

И функция передачи 3 КПК

Цитата

function bar_relocate_items_balamut( first_speaker, second_speaker )
        dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "device_pda_quest_bar" )
        dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "device_pda_quest_bar" )
        dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "device_pda_quest_bar" )
end

Функция срабатывает,  в диалоге 3 раза высвечивается потерян предмет, но из инвентаря изымается только 1 КПК...


DCM

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


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

диалог начнётся при соблюдении обоих условий?

Должны быть выполнены все условия.

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

есть ли у актора 5 кпк или нету

function bar_balamut_kpk_items(first_speaker, second_speaker)
    local item_sections    = {
        [1] = "device_pda_quest_bar"
    }
    local needed = 5
    local count    = 0
    local item_section

    local function calc(temp, item)
        if item:section() == item_section then
            count = count + 1
        end
    end

    for k,v in pairs(item_sections) do
        item_section = v
        get_story_object("actor"):iterate_inventory(calc, actor)
--        printf("?bar_balamut_kpk_items? : section [%s] count [%s]", tostring(v), tostring(count))
    end

    return count >= needed
end

 

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

в диалоге 3 раза высвечивается потерян предмет

function bar_relocate_items_balamut(first_speaker, second_speaker)
dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "device_pda_quest_bar", 3)
end

 

  • Лайк 1

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


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

function bar_balamut_kpk_items(first_speaker, second_speaker)     local item_sections    = {         [1] = "device_pda_quest_bar"     }     local needed = 5     local count    = 0     local item_section     local function calc(temp, item)         if item:section() == item_section then             count = count + 1         end     end     for k,v in pairs(item_sections) do         item_section = v         get_story_object("actor"):iterate_inventory(calc, actor) --        printf("?bar_balamut_kpk_items? : section [%s] count [%s]", tostring(v), tostring(count))     end     return count >= needed end

А почему такая сложная функция для прекондишена?  Я просто пример привёл с 5 кпк. Та функция что я привёл, работает с разными предметами в количестве по 1 штуки. а вот как там прописать чтоб учитывало количество я не соображу.(((

35 минут назад, Neptun сказал:

Должны быть выполнены все условия.

Значит всё таки у меня неверная функция..(((

  

38 минут назад, Neptun сказал:

function bar_relocate_items_balamut(first_speaker, second_speaker) dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "device_pda_quest_bar", 3) end

Спасибо,  работает как нужно.

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

DCM

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


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

Здравствуйте, не знаю можно ли тут такое писать, но все же. Мне нужна помощь, а именно снятие координат инвентаря. Просто я добрался до OpenXRay и я умудрился сделать 8 слотов артефактов и ячейки ножа, бинокля. Кто может помочь? Просто я если честно не разбираюсь в снятии координат. Максимум координаты предмета, не более. Помогите пожалуйста! 

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


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

А почему такая сложная функция для прекондишена?

Так делали пысы. Твоя функция не работает, потому что нет именно подсчёта одинаковых предметов.

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


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

Здравствуйте. У меня есть чистый нпс(к нему написана логика, чтобы он стоял в одной позиции.), делал его через сдк. С персом всё нормально. Вопрос: как его заспавнить во время диалога, после определенного инфопоршня? Это надо вскрывать all.spawn, или через сдк или всё же можно прописать ему это в логику? Или со скриптами работать?

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

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


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

Это надо вскрывать all.spawn

Для этого НПС создаётся сквад, и он спавнится в любое время. Урок ТЫК

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


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

Для этого НПС создаётся сквад, и он спавнится в любое время. Урок ТЫК

Спасибо.

Изменено пользователем stalker032
Проблему уладил.

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


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

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

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


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

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

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


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

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

Миш! А нельзя в логике после   =kill_npc  добавить воспроизведение нужного звука =play_sound_to_actor(звук относительно папки sounds ) ?

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

DCM

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


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

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

Сам таймер вызывается как action в диалоге. Делал по этому уроку, но оба варианта сбиваются как раз.

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


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

который бы не обнулялся при сейвлоаде

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

  • Спасибо 1

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


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

галочку, чтобы он работал для всех локаций

Это которая used AI locations?

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


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

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

Не, на другой локации рестриктор будет оффлайн. Пробовал когда-то. ?

Да и нет у рестриктора никаких особых галочек.

Не знаю, делал ли кто-то для ЗП функционал сохраняющихся таймеров, но можешь подсмотреть в AMK моде, там есть такое дело. Правки движка-то зачем?

  • Жму руку 1

c01570bf2e07524.png

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


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

play_sound_to_actor

Вроде как играть в голове актора это, а ему нужно от нпс!?  В чём проблема использовать on_death из логики сквада или нпс и проиграть нужный звук от точки нпс?. От самого нпс не стОит т.к  судя по примерам в ЗП есть аборт в xr_effects, на случай того, что нпс озвучивает фразу. Но надо смотреть сорцы, вдруг я ошибаюсь.

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

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


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

Вроде как играть в голове актора это,

Я смотрю на это манешко по другому..)))) Слушать это будет игрок.  НПС по барабану что там и кто орёт..)))), так что какая разница откуда звучит звук? он по любому в динамиках..))) Ну или в наушниках...  Ну и на крайняк. я просто предложил вариант, наверно есть и другая функция. звучащая "формально" не в голове актора..)))


DCM

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


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

создал рестрикторы и логики для персов, но вылет при старте новой игры:
[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 : e:\mods\zp\stalker 2\gamedata\scripts\utils.script:469: bad argument #1 to 'gsub' (string expected, got nil)

как вылечить? И в чём собственно проблема?

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


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

как вылечить? И в чём собственно проблема?

Где то ошибка в логике.  Отключите логику у свежедобавленных рестрикторов.  Уберите спавн персов.  Затем подключайте их по одному.  И найдете ошибочную логику.

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


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

Народ! Как будет выглядеть в логике строка, переместить актора на точки walk, look? 
Как удалить нпс в логике рестриктора по получению поршня?

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

DCM

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


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

Как будет выглядеть в логике строка, переместить актора на точки walk, look? 

=teleport_actor(walk:look)

5 часов назад, Policai сказал:

Как удалить нпс в логике рестриктора по получению поршня?

=destroy_object(story:story_npc)

  • Лайк 1

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


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

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

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

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

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

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

Войти

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

Войти

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

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