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

AI additions


Bak

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

К данному посту. Наткнулся у OGSE-шников по этому поводу:

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

"Изредка движок сглюкивает, назначая неписю в слот артефакт. Этого следует избежать, так как такие неписи застревают на попытке применения арта как оружия."(c)

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

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

function check_art_weapon(npc)
    local item_in_slot = npc:item_in_slot(1)
    local act_item = npc:active_item()
    if act_item and item_in_slot and act_item:id() == item_in_slot:id() then
        local item_in_slot_sec = act_item:section()
        local item_in_slot_id = act_item:id()
        if item_in_slot_sec and item_in_slot_id and string.find(item_in_slot_sec, "af_") then
--' Если непись получил арт в слот по ошибке при загрузке игры, мы просто, обновим ему оружие в руках и всё. Иначе, если он взял арт в руки и отказывается его убирать, а лучшее оружие получить не удаётся, придётся арт выбросить, отрелизить и вернуть ему в рюкзак.
            local bw = npc:best_weapon()
            local be = npc:best_enemy()
            local rem_id = npc:active_item():id()
            npc:drop_item(npc:active_item())
            local s_obj = alife():object(rem_id)
            if s_obj then
                alife():release(s_obj, true)
                alife():create(item_in_slot_sec,npc:position(),npc:level_vertex_id(),npc:game_vertex_id(),npc:id())
            end            
            if bw and string.find(bw:section(), "wpn_") then
                if be then
                    npc:set_item(object.fire1, bw)
                    return
                else
                    npc:set_item(object.idle, bw)
                    return
                end
            end
        end
    end
end

 

Простенько и со вкусом. И куда-нибудь на апдейт в мотиваторе:

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

function motivator_binder:update(delta)
...
        if self.object:alive() then
            check_art_weapon(self.object)
        end
...
end

 

  • Полезно 4

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


Ссылка на сообщение

@Space.Marine, да. В таком виде непосредственно в мотиватор. Не совсем корректно озвучил :blush:. Если делать отдельно - придётся видоизменять вызов функции, хотя напуркуа :biggrin:?

Вариант решения не единственный, конечно. Просто обычно всё это зарыто в дебрях авторского кода, с кучей собственных "прибамбасов" под себя. А тут всё достаточно прозрачно и "модульно" для использования.

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

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


Ссылка на сообщение

@DarkSnowder , rx_ff.script и misc\ai_additions\misc.ltx + поиском по тому, где он вызывается: rx_ai.script, xr_combat.script, xsr_grenade.script

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


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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