command.new("tp")
:DisallowConsole()
:SetPermission("goto", "admin")
:AddArg("player", {single_target = true, allow_higher_target = true, cant_target_self = true})
:Help("goto_help")
:OnExecute(function(ply, targets)
if ply:sam_get_exclusive(ply) then
return ply:sam_send_message(ply:sam_get_exclusive(ply))
end
if not ply:Alive() then
ply:Spawn()
end
local target = targets[1]
ply.sam_tele_pos, ply.sam_tele_ang = ply:GetPos(), ply:EyeAngles()
ply:ExitVehicle()
ply:SetVelocity(Vector(0, 0, 0))
ply:SetPos(find_empty_pos(target:GetPos(), ply))
ply:SetEyeAngles((target:EyePos() - ply:EyePos()):Angle())
sam.player.send_message(nil, "goto", {
A = ply, T = targets
})
end)
:End()
command.new("return")
:SetPermission("return", "admin")
:AddArg("player", {single_target = true, optional = true})
:Help("return_help")
:OnExecute(function(ply, targets)
local target = targets[1]
local last_pos, last_ang = target.sam_tele_pos, target.sam_tele_ang
if not last_pos then
return sam.player.send_message(ply, "no_location", {
T = targets
})
end
if target:sam_get_exclusive(ply) then
return ply:sam_send_message(target:sam_get_exclusive(ply))
end
if not target:Alive() then
return ply:sam_send_message(target:Name() .. " is dead!")
end
target:ExitVehicle()
target:SetVelocity(Vector(0, 0, 0))
target:SetPos(last_pos)
target:SetEyeAngles(last_ang)
target.sam_tele_pos, target.sam_tele_ang = nil, nil
sam.player.send_message(nil, "returned", {
A = ply, T = targets
})
end)
:End()
У меня нет нормальной SAM админки и некуда ее поставить, так что скачал с брокенкора, дабы чекнуть функции имунок
На, попробуй это
command.new("tp")
:DisallowConsole()
:SetPermission("goto", "admin")
:AddArg("player", {single_target = true, allow_higher_target = true, cant_target_self = true})
:Help("goto_help")
:OnExecute(function(ply, targets)
if ply:sam_get_exclusive(ply) then
return ply:sam_send_message(ply:sam_get_exclusive(ply))
end
local target = targets[1]
if ply:sam.ranks.get_immunity() < target:sam.ranks.get_immunity() then
if SERVER then ply:ChatPrint('Вы не можете телепортироваться к старшему по званию администратору') end
return
end
if not ply:Alive() then
ply:Spawn()
end
ply.sam_tele_pos, ply.sam_tele_ang = ply:GetPos(), ply:EyeAngles()
ply:ExitVehicle()
ply:SetVelocity(Vector(0, 0, 0))
ply:SetPos(find_empty_pos(target:GetPos(), ply))
ply:SetEyeAngles((target:EyePos() - ply:EyePos()):Angle())
sam.player.send_message(nil, "goto", {
A = ply, T = targets
})
end)
:End()
Если не будет работать, то принти что выводит
sam.ranks.get_immunity()
и дальше уже сравнивай полученные значения от ply с target
Ибо функция возвращает ранг и иммунитет
allow_higher_target = false,
попробуй
[_admin_system] addons/_admin_system/lua/sam/modules/teleport.lua:136: function arguments expected near ‘.’ (x2)
if ply:sam.ranks.get_immunity() < target:sam.ranks.get_immunity() then
Помогло?
Да спасибо!
Не за что
Можешь помочь сделать такое же, только с физганом? Типа, тебе нужно иметь професию администратор?
\addons\sam-148\lua\sam\modules\util.lua
найди там SAM.CanPhysgunPlayer и замени хук на
sam.hook_first("PhysgunPickup", "SAM.CanPhysgunPlayer", function(ply, target)
if sam.type(target) == "Player" && ply:HasPermission("can_physgun_players") && ply:CanTarget(target) && IsValid(ply) && ply:IsPlayer() && ply:Team() == TEAM_ADMIN or ply:IsSuperAdmin() then
freeze_player(target)
return true
end
end)
Как сделать для ulx? Очень хочу разобраться, как делать из кодов Sam ulx!
По аналогии
Ищи там хук PhysgunPickup
написал код… Подумал… Переделал на сам (ну почти) ахзпхзпа
А как сделать что бы наоборот нельзя было телепортировать к себе?
меняешь goto на bring