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

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

Привет всем.

Вопрос такой глупый:

Допускается ли такое оформление условий определяющих значение переменной?

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

if uslovie_1 then

var = 1

elseif uslovie_2 then

var = 2

end

function blablabla()

if tratata == true then

metod(var)

end

end

 

 

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

 Моя нычкаНычка в арендованном у Опричника холодильнике  

Мы хорошие ребята, жаль патронов маловато:):ukostra:

UriZzz.gif

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

@I am Dead То есть выше просто объявить local var ?

Хм, надо будет потестировать, когда доберусь до компьютера.

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

 Моя нычкаНычка в арендованном у Опричника холодильнике  

Мы хорошие ребята, жаль патронов маловато:):ukostra:

UriZzz.gif

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

Здрасьте.

Кто умеет читать C++, подскажите, что должен делать следующий код (платформа ЗП):

Spoiler

[xrGame\ui\UIComboBox.cpp]
void CUIComboBox::disable_id(int id)
{
    if(m_disabled.end()==std::find(m_disabled.begin(),m_disabled.end(),id))
        m_disabled.push_back(id);
}

void CUIComboBox::enable_id(int id)
{
    xr_vector<int>::iterator it = std::find(m_disabled.begin(),m_disabled.end(),id);

    if(m_disabled.end()!=it)
        m_disabled.erase(it);
}

 

 

Ожидаемый результат: отключение и обратное включение строки с заданным id в выпадающем списке CUIComboBox().
Видимый результат отсутствует: строка не удаляется и не становится неактивной, а методы CurrentID() и GetTextOf(id) дают старые значения при ее выборе.

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

Шпаргалка

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

@Norman Eisenherz , это работает только с комбо-боксами, используемыми для игровых опций. После disable/enable_id нужно вызвать SetCurrentOptValue - только там заполняется лист с проверкой по этому m_disabled.

Изменено пользователем naxac
  • Нравится 1
  • Полезно 1

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

naxac.gif

Ссылка на комментарий
10 часов назад, Norman Eisenherz сказал(а):

Кто умеет читать C++

:rolleyes:

Добавляет / убирает id в список m_disabled. И собственно все, больше показанный код ничего не делает.

А этот m_disabled уже в свою очередь, используется...

36 минут назад, naxac сказал(а):

для игровых опций. После disable/enable_id нужно вызвать SetCurrentOptValue - только там заполняется лист с проверкой по этому m_disabled.

Но, никто не запрещает при желании, использовать этот же m_disabled где-нибудь еще и для чего-то более другого, для чего потребуется код свой написать.

  • Полезно 2

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Господа, вопрос к знатокам логики нпс. 

1) Возможно ли в логике нпс вызвать скриптовую функцию? Например по сигналу. 

2) логику же можно переключать в зависимости от инфопорций. А можно переключать логику в зависимости от какого нибудь скриптового прекондишена, как это сделано в диалогах, например? 

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

Я тут снова по поводу боевой схемы БТРов... Немного, КМК, разобрался в её работе, в итоге в db.script:

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

 

creature = {} 
monster_stock  = {}

 

function add_obj( obj ) - корректно ли тут производится проверка и добавление сталкеров и монстров?
    if IsStalker(obj) then
        creature[obj:id()] = true
        monster_stock[obj:id()] = false
    elseif IsMonster(obj) then
        creature[obj:id()] = false
        monster_stock[obj:id()] = true
    end
end

 

function del_obj( obj )
    storage   [obj:id()] = nil
    if IsStalker(obj) or IsMonster(obj) then
        creature[obj:id()] = nil
    end
end

 

 

Собственно не очень красивая функция апдейта друзей и врагов в ph_car.script:

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

 

function action_car:update_friends_and_target()
        if self.st.fire_target == "monsters" then
                for k in pairs(db.monster_stock) do
            local obj = level.object_by_id(k)
                if obj and IsMonster(obj) and obj:alive() and self.car:IsObjectVisible(obj) then
                    self.target_obj = obj
                    self.state_firetarget = state_firetarget_enemy
                        end
                    end
                end

 

        if self.st.fire_target == "stalker_group" then

        --for a=1,65534,1 do
        --local obj = level.object_by_id(a)
                for k in pairs(db.creature) do
            local obj = level.object_by_id(k)

        if obj and IsStalker(obj) and obj:alive() and obj:character_community()=="stalker" and self.car:IsObjectVisible(obj) then
                    self.target_obj = obj
                    self.state_firetarget = state_firetarget_enemy
                        end
                    end
                end
end

 

 

По ней такой вопрос...

 if obj and IsMonster(obj) and obj:alive() and self.car:IsObjectVisible(obj) then

 if obj and IsStalker(obj) and obj:alive() and obj:character_community()=="stalker" and self.car:IsObjectVisible(obj) then

- тут вроде выделенные жирным проверки лишние? Ведь если объекты берутся из  for k in pairs(db.monster_stock) и  for k in pairs(db.creature) do, там же уже была соотв. проверка:

function add_obj( obj )
    if IsStalker(obj) then
        creature[obj:id()] = true
        monster_stock[obj:id()] = false
    elseif IsMonster(obj) then
        creature[obj:id()] = false
        monster_stock[obj:id()] = true
    end
end

 

Просьба не пинать :), хочу разобраться и сделать идеальный ph_car.script с рабочей боевой схемой и правками от переворачивания машин.

 

 

Ссылка на комментарий
2 часа назад, I am Dead сказал(а):

Как запустить анимацию через add_cam_effector циклично

Вот так - 

level.add_cam_effector("camera_effects\\earthquake.anm", 2002, true, "")

true в данном случае и определяет повторять ли анимацию.

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

Здрасьте.

 

ЗП 1.6.02.

Задача: вывести поверх инвентаря окно с набором дочерних статиков.

 

Ссылка level.main_input_receiver() отсутствует, остается отслеживание режима инвентаря в [actor_menu.script] и вывод окна поверх через add_dialog_to_render с небольшой задержкой.

Проблема 1: любые дочерние окна рендер-статика не видны, даже если применить к метод Show(true) – каждый элемент приходится выводить по отдельности.

Проблема 2: рендер-статик выводится поверх всех элементов инвентаря, включая всплывающие окна с информацией.

 

Кроме варианта "вырезать область в текстуре инвентаря и подставить ее обратно через AddCustomStatic вместе с новым окном", как можно решить задачу?

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

Шпаргалка

Ссылка на комментарий
13 часов назад, Norman Eisenherz сказал(а):

Проблема 2: рендер-статик выводится поверх всех элементов инвентаря, включая всплывающие окна с информацией.

Естественно. А почему должно быть иначе, если вы скриптами статик прилепили?

13 часов назад, Norman Eisenherz сказал(а):

как можно решить задачу?

Править движок. В принципе, вполне мыслимо написать и экспортировать в скрипты, методы позволяющие лепить свои статики не поверх, а прямо к выбранным-интересующим элементам интерфейса. Только зачем такие костыли нужны... не знаю.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

@Zander_driver Есть пара модов, которые хотелось бы повторить в ЗП. Вот такой, например: https://drive.google.com/file/d/1yMX6bX03M0ge8kEsI2UCU_RhtzeC7NeJ.

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

Шпаргалка

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

Ребят, нужна еще помощь по логике. Пытаюсь в логике вызвать функцию по сигналу

[walker1@truba1] 
on_signal = test | %=test%
path_walk = test_walk
path_look = test_look
no_move = false

В итоге функция ставится на апдейт. А как вызвать её только один раз?

 

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

@_Sk8_AsTeR_, например так:

[walker1@truba1] 
on_signal = test | {-inf_vizov_test_odin_raz} %+inf_vizov_test_odin_raz =test%

on_info = {+povod_pereiti_v_druguyu_sekciyu} walker@next %-inf_vizov_test_odin_raz%

  • Спасибо 2
  • Согласен 1

S.T.A.L.K.E.R. CoP Objects (upd 15.11.24)

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

Доброго времени суток. Задался тут вопросом: а что в сталкере происходит после смерти актора? Чисто теоретически, ничего не изменяется, можно даже сделать сделать проверку на смерть и какие-то действия NPC, если проверка вернула true. Из этого вытекает вопрос: а можно ли сделать респавн актора без загрузки сохранений? Покопавшись в скриптах, я выяснил, что за создание актора отвечают функции add_actor в файле db.script, a также скрипт actor_proxy.script. Кроме того, в мультиплеере респавн актора возможен. Как он там реализован? Применим ли этот механизм к синглу? Команды alife():release по отношению к актору, даже метвому, не работает. Что произойдет ,если скриптово удалить актора, а затем заспавнит по координатам?

Ссылка на комментарий
22 часа назад, STALKER_Dragon сказал(а):

Что произойдет ,если скриптово удалить актора, а затем заспавнит по координатам?

А что мешает проверить?

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

naxac.gif

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

Помогите разобраться, а то я забуксовал на ровном месте. Дано: скрипт использования предметов со звуками. Мне нужно следующее: при использовании определённого предмета и наличии двух инфопоршней проигрывать звук и выполнять функцию из другого скрипта, если поршней нет - не играть звук и спавнить предмет обратно в инвентарь (он съедобный, на классе антирада). Вот скрипт в упрощённом виде:

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

 

local tSound ={
cocacola            = "scripts\\inv_drinking",
item              = "scripts\\inv_item" - предмет и звук для него
}

function using_items(obj)
   local sect = obj:section()
   local actor = db.actor
   if obj and tSound[obj:section()] then
      local snd = xr_sound.get_safe_sound_object(tSound[obj:section()])
      if snd then
      snd:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 2.0)
      end
   end
        if obj then if sect == "item" then
         if has_alife_info("info_1") and - поршень 1
            has_alife_info("info_2") then - поршень 2
            script.final_action() - выполнить функцию из другого скрипта
            end
         else
           amk.spawn_item_in_inv("item") - спавн обратно в инвентарь
         end
     end
end

Сейчас без наличия инфопоршней предмет просто "съедается" и звук всё равно проигрывается....

 

 

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

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

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

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

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

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

Войти

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

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

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