Как запретить урон по своим?

Как запретить нанесение урона по своим? К примеру: TEAM_SWAT не может нанести урон TEAM_POLICE

Sv часть.

hook.Add("OnGamemodeLoaded","NoTeamDamage",function()
local TeamGroup={
{TEAM_POLICE,TEAM_SWAT,TEAM_MAYOR},--Команда 1 


}

hook.Add("PlayerShouldTakeDamage", "NoTeamDamage", function(pl, atk)
    if not atk:IsPlayer() then return end
local plT=false
local atkT=false
    for i = 1, #TeamGroup do
        for s = 1, #TeamGroup[i] do
            if TeamGroup[i][s] == pl:Team() then plT=true end
            if TeamGroup[i][s] == atl:Team() then atkT=true end
            if plT and atkT then return false end 
        end
    end
end)
end)
1 лайк

почему-то пропал урон у полиции по всем

попробуй так

не работает

-- addons/anyname/lua/autorun/server/anti_friendly_fire.lua

hook.Add("PlayerShouldTakeDamage", "CP_AntiFriendlyFire", function(victim, attacker)
	if victim:IsCP() and attacker:IsCP() then
		return false
	end
end)

Еще может быть интересно: Как сделать чтобы игроки не сталкивались друг с другом - #7 от пользователя GMD

1 лайк

Можно и так сделать.

TEST_TABLE = TEST_TABLE or {}

hook.Add("OnGamemodeLoaded","NoTeamDamage",function()
   local TEAM_FRIEND = {}
   TEAM_FRIEND[TEAM_POLICE] = true
   TEAM_FRIEND[TEAM_SWAT] = true
   TEAM_FRIEND[TEAM_MAYOR] = true

   -- Перезаписываем в общедоступную таблицу
   TEST_TABLE = TEAM_FRIEND
end)

hook.Add("PlayerShouldTakeDamage", "NoTeamDamage", function(client, attacker)
   local isPlayer = attacker:IsPlayer()
   if (!IsValid(client) or !isPlayer) then return false end -- Проверяем существует ли игрок и тот кто стреляет, чтобы исключить ошибки валидности
   local attackerTeam = attacker:Team()
   local clTeam = client:Team()

   -- Делаем проверку что игрок и тот кто атакует из одной тбалицы TEST_TABLE
   if (TEST_TABLE[attackerTeam] and TEST_TABLE[clTeam]) then return false end -- Делаем возврат, т.к игроки из дружественных профессий.
end)

я делал под большое количество команд. Но нел пишет что не работает :\