[SAM] Разрешить использовать физган в одной профе

Привет, не могу сделать так, чтобы Физ.Ганом могли трогать только в админ профе, уже что только не перепробовал, много хуков брал с форума , но все равно.


image
Если кто знает, буду очень благодарен!

-- addons/sam/lua/sam/modules/physgun.lua


hook.Add("Initialize", "Custom_SAM_Physgun", function()
	local function freeze_player(ply)
		if SERVER then
			ply:Lock()
		end
		
		ply:SetMoveType(MOVETYPE_NONE)
		ply:SetCollisionGroup(COLLISION_GROUP_WORLD)
	end

	sam.hook_first("PhysgunPickup", "SAM.CanPhysgunPlayer", function(ply, target)
		if sam.type(target) == "Player" and 
			ply:HasPermission("can_physgun_players") and 
			ply:CanTarget(target) and
			ply:Team() == TEAM_STAFF  -- обязательньно к редактированию
		then
			freeze_player(target)
			return true
		end
	end)
end)
1 лайк

Можно пойти дальше и еще немного улучшить, но твой вариант уже лучше изначального

Я не знаю как работает под капотом sam.hook_first(), но предположим, что там просто hook.Add

Тогда можно упростить до этого:


if not sam.PhysgunPickup_orig then
	sam.PhysgunPickup_orig = hook.GetTable()["PhysgunPickup"]["SAM.CanPhysgunPlayer"]
end

sam.hook_first("PhysgunPickup", "SAM.CanPhysgunPlayer", function(pl, targ) -- заменяем оригинальный хук
	local allowed = sam.PhysgunPickup_orig(pl, targ) -- вызываем функцию оригинального хука
	if allowed == true and pl:Team() ~= TEAM_STAFF then -- если в ней разрешено трогать игрока, но профа не подходит, то запрещаем
		return false
	else
		return allowed -- иначе возвращаем то, что вернула оригинальная функция
	end
end)

Но это уже мысли вслух

2 лайка

Куда кидать?

Будь внимательнее:

[adminmode] addons/adminmode/lua/sam/modules/physgun.lua:4: attempt to call method ‘Lock’ (a nil value)

  1. freeze_player - addons/adminmode/lua/sam/modules/physgun.lua:4
  2. v - addons/adminmode/lua/sam/modules/physgun.lua:17
    3. unknown - lua/includes/modules/hook.lua:96
    Помогите

замени тут на ply:Freeze()

1 лайк

понял, зря быканул

1 лайк

Как исправить то?

не ко мне вопрос же. Не мой скрипт

А можешь скинуть, который работает, пожайлуста.

у меня его нет

local allowed = {
    ["superadmin"] = true,
    ["iventer"] = true,
    ["Sled"] = true,
    ["Support"] = true,
    ["sudoroot"] = true,  -- и т.д.
}

hook.Add("PhysgunPickup", "restrict_physgun", function(ply, ent)
    if !ent:IsPlayer( ) then return end

    if ply:Team( ) != TEAM_ADMIN -- тут нужно поменять на название профы админа у вас
    and !allowed[ply:GetUserGroup()] then
        return false
    end
end)

ну как-то так

Можна брать superadmin, в админ профе.

-- addons/sam/lua/sam/modules/physgun.lua

if SAM_LOADED then return end

local function freeze_player(ply)
	if SERVER then
		ply:Lock()
	end
	
	ply:SetMoveType(MOVETYPE_NONE)
	ply:SetCollisionGroup(COLLISION_GROUP_WORLD)
end

sam.hook_first("PhysgunPickup", "SAM.CanPhysgunPlayer", function(ply, target)
	if sam.type(target) == "Player" and 
		ply:HasPermission("can_physgun_players") and 
		ply:CanTarget(target) and
		ply:Team() == TEAM_STAFF  -- обязательньно к редактированию
	then
		freeze_player(target)
		return true
	end
end)

Не работает скрипт…

Я проверил этот код работает (может другой хук ломает или что-то делаешь не так)

Попробуй:

local function freezePlayer(ply)
	if SERVER then
		ply:Lock()
	end
	
	ply:SetMoveType(MOVETYPE_NONE)
	ply:SetCollisionGroup(COLLISION_GROUP_WORLD)
end

local function isStaffPlayer(ply)
	return ply:Team() == TEAM_STAFF
end

sam.hook("PhysgunPickup", "SAM.RestrictPhysgun", function(ply, target)
	if sam.isplayer(target) and ply:HasPermission("can_physgun_players") and isStaffPlayer(ply) then
		freezePlayer(target)
		return true
	end
end)

sam.hook("PlayerSpawn", "SAM.UnfreezeOnSpawn", function(ply)
	if SERVER then
		ply:UnLock()
		ply:SetMoveType(MOVETYPE_WALK)
		ply:SetCollisionGroup(COLLISION_GROUP_PLAYER)
	end
end)

Ошибка в твоем коде. Как исправить?
[sam-144] addons/sam-144/lua/sam/modules/physgun.lua:14: attempt to call field ‘hook’ (a nil value)

  1. unknown - addons/sam-144/lua/sam/modules/physgun.lua:14
  2. func - [C]:-1
    3. load_file - addons/sam-144/lua/autorun/sam.lua:45
    4. unknown - addons/sam-144/lua/autorun/sam.lua:106
  • Видимо из за ошибки код не работает,я в дефолт профессии могу хватать физганом