Welcome to Сообщество игровых серверов NETZONA.ORG

Присоединяйтесь к нам сейчас, чтобы получить доступ ко всем нашим функциям. Зарегистрировавшись и войдя в систему, вы сможете создавать темы, публиковать ответы в существующих темах, давать репутацию другим участникам, получать собственный личный мессенджер и многое другое. Это также быстро и совершенно бесплатно, так чего же вы ждете?
  • Приветствуем на сайте, Гость! Обязательно ознакомьтесь с условиями и правилами Публичной оферты Проекта NetZONA.org: https://netzona.org/help/public-offer/

  • Приветствуем на сайте, Гость! Обязательно ознакомьтесь с условиями и правилами использования Ваших файлов cookie на Проекте NetZONA.org: https://netzona.org/help/cookies/

  • Приветствуем на сайте, Гость! Обязательно ознакомьтесь с Политикой конфиденциальности Проекта NetZONA.org: https://netzona.org/pages/privacy-policy/

  • Ответы на основные вопросы: https://netzona.org/threads/populjarnye-voprosy-i-otvety-na-nix.6122/

  • Приветствуем на сайте, Гость! Приобрести (купить) Информационную услугу (в том числе группу "Проверенный") на Проекте NetZONA.org: https://netzona.org/account/upgrades

NPC. Как сделать так, чтобы NPC не атаковали выбранные фракции на NS?

Статус
В этой теме нельзя размещать новые ответы.

One Touch Gamer

Пользователь
Проверенный
Регистрация
25 Июн 2015
Сообщения
62
Реакции
0
Баллы
22
Возраст
21
Адрес
Parts Unknown
Как сделать так, чтобы NPC не атаковали выбранные фракции на NS?
 

Hikka

Модератор
Команда форума
Проверенный
Регистрация
29 Сен 2016
Сообщения
555
Реакции
1
Баллы
60
Возраст
30
Пол
Используешь какой ни будь аддон на создание враждебных NPC?
[doublepost=1513115584,1513113291][/doublepost]В принципе пофиг, пробуй. Не проверял.
Код:
local immFactions = { -- иммунитет фракций
    [FACTION_ADMIN] = true,
    [FACTION_CITIZEN] = true,
}

local nxtThk = CurTime()
function PLUGIN:Think()
    if (nxtThk < CurTime()) then
        for k, v in ipairs(ents.FindByClass("npc_*")) do
            if (v:IsNPC() and !IsValid(v:GetEnemy())) then
                local target = NULL
                local dist = 512
                for _, ply in ipairs(player.GetHumans()) do
                    if (IsValid(ply) and ply:IsPlayer() and ply:Alive()) then
                        if (immFactions[nut.faction.indices[ply:Team()]]) then continue end
                        local dist2 = ply:GetPos():Distance(v:GetPos())
                        if dist2 < dist then
                            dist = dist2
                            target = ply
                        end
                    else
                        v:SetEnemy(NULL)
                    end
                end
                v:SetEnemy(target)
                v:UpdateEnemyMemory(target, target:GetPos())
                v:SetSaveValue("m_vecLastPosition", target:GetPos())
                v:SetSchedule(SCHED_FORCED_GO)
            end
        end
        nxtThk = CurTime() + 1
    end
end

В коде есть функция, если что-то не будет работать корректно замени v:SetSchedule(SCHED_FORCED_GO) на v:SetSchedule(SCHED_CHASE_ENEMY) или удали во все.
 

One Touch Gamer

Пользователь
Проверенный
Регистрация
25 Июн 2015
Сообщения
62
Реакции
0
Баллы
22
Возраст
21
Адрес
Parts Unknown
Но, я хотел отдельным нпс.
Я использую VJbase
 

Hikka

Модератор
Команда форума
Проверенный
Регистрация
29 Сен 2016
Сообщения
555
Реакции
1
Баллы
60
Возраст
30
Пол
Но, я хотел отдельным нпс.
Я использую VJbase
если тебе нужны какие то конкретно нпс то вот код
Код:
local immFactions = { -- иммунитет фракций
    [FACTION_ADMIN] = true,
    [FACTION_CITIZEN] = true,
}
local npcs = {
    ["npc_zombie"] = true,
    ["npc_headcrab"] = true,
}

local nxtThk = CurTime()
function PLUGIN:Think()
    if (nxtThk < CurTime()) then
        for k, v in ipairs(ents.FindByClass("npc_*")) do
            if (v:IsNPC() and npcs[v:GetClass()] and !IsValid(v:GetEnemy())) then
                local target = NULL
                local dist = 512
                for _, ply in ipairs(player.GetHumans()) do
                    if (IsValid(ply) and ply:IsPlayer() and ply:Alive()) then
                        if (immFactions[nut.faction.indices[ply:Team()]]) then continue end
                        local dist2 = ply:GetPos():Distance(v:GetPos())
                        if dist2 < dist then
                            dist = dist2
                            target = ply
                        end
                    else
                        v:SetEnemy(NULL)
                    end
                end
                v:SetEnemy(target)
                v:UpdateEnemyMemory(target, target:GetPos())
                v:SetSaveValue("m_vecLastPosition", target:GetPos())
                v:SetSchedule(SCHED_FORCED_GO)
            end
        end
        nxtThk = CurTime() + 1
    end
end
 

One Touch Gamer

Пользователь
Проверенный
Регистрация
25 Июн 2015
Сообщения
62
Реакции
0
Баллы
22
Возраст
21
Адрес
Parts Unknown
Окей, а можно это в код нпс засунуть? Имею в виду. Взять какого-нибудь нпс из аддона VJ и сделать так, чтобы он всех атаковал, но засунуть туда код, который заставлял не атаковал нужные мне фракции NS.
 

Hikka

Модератор
Команда форума
Проверенный
Регистрация
29 Сен 2016
Сообщения
555
Реакции
1
Баллы
60
Возраст
30
Пол
Окей, а можно это в код нпс засунуть? Имею в виду. Взять какого-нибудь нпс из аддона VJ и сделать так, чтобы он всех атаковал, но засунуть туда код, который заставлял не атаковал нужные мне фракции NS.
если тебе нужно настроить в самом vjbase то делай в функциях : function ENT:SelectSchedule() и function ENT:FindEnemy()
эти функции ты найдешь в самом npc.
 
Последнее редактирование:

One Touch Gamer

Пользователь
Проверенный
Регистрация
25 Июн 2015
Сообщения
62
Реакции
0
Баллы
22
Возраст
21
Адрес
Parts Unknown
Нет в нпс самом, не в базе, а в нпс.
Желательно бы полный код...
[doublepost=1513461317,1513461256][/doublepost]Я просто 100% криво напишу.
 

Hikka

Модератор
Команда форума
Проверенный
Регистрация
29 Сен 2016
Сообщения
555
Реакции
1
Баллы
60
Возраст
30
Пол
Нет в нпс самом, не в базе, а в нпс.
Желательно бы полный код...
[doublepost=1513461317,1513461256][/doublepost]Я просто 100% криво напишу.
Код:
function ENT:SelectSchedule()
    if self:GetEnemy() != nil then
        if immFactions[nut.faction.indices[self:GetEnemy():Team()]] then
            self:SetSchedule(SCHED_CHASE_ENEMY)
            self:SetEnemy(NULL)
        else
            self:DoIdleAnimation()
        end
    end
end

function ENT:FindEnemy()
    for k,v in pairs(EnemyTargets) do
        if immFactions[nut.faction.indices[v:Team()]] then continue end
        -- ниже код
    end
end

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

One Touch Gamer

Пользователь
Проверенный
Регистрация
25 Июн 2015
Сообщения
62
Реакции
0
Баллы
22
Возраст
21
Адрес
Parts Unknown
А можно конкретнее как это сделать? И так и сяк...
Включаю, чтобы нпс атаковал игроков.
Посмотреть вложение 1049
Этот код как я понимаю делает так, чтобы он не атаковал фракции, так как он не атакует меня, когда код введён, а без него он меня атакует. И вот я пытался и так и сяк сделать. Как точнее сделать определённые фракции, чтобы нпс не атаковал
Посмотреть вложение 1050
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху Снизу