Загрузка данных



-- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ 
-- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ 




local sensitivity_pc = 0.8 -- Чуствительность камеры на пк
local sensitivity_mobile = 1.5  -- Чуствительность камеры на телефонах


local first_person_key = Enum.KeyCode.F  -- На какую клавишу будет 3 лицо и 1 лицо, открываться/закрываться
-- (ПОСТАВЬТЕ ТУТ ПРОСТО "local first_person_key = 0" ЕСЛИ ХОТИТЕ УБРАТЬ ВОЗМОЖНОСТЬ ПЕРЕКЛЮЧЕИЯ КАМЕРЫ!)


local head_hig = 1.2 -- Высота камеры над головой
local forw_offset = 1.2 -- дальность камеры впереди головы


local max_angl = math.rad(80) -- До скольки можно поворачивать камеру градусов максимум
local mouse_cursor = false -- Будет ли виден курсор на экране (ПК) true - да, false - нет
local smoth = 0.15 -- Насколько будет сглаживание камеры при повороте


-- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ 
-- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ -- ⚙️ НАСТРОЙКИ 

-- РАЗБЛОКАТЬ МЫШКУ НА ПКМ!!
-- крейес.


















local cur_pit = 0
local cu_ya = 0
local targ_pic = 0
local targ_ya = 0
local drag_cam = false
local last_tou = Vector2.new(0, 0)
local fir_pes = true
local dis_3 = 8 
local thirdPersonHeight = 2 

local uis = game:GetService("UserInputService")

local player = game.Players.LocalPlayer
local camera = workspace.CurrentCamera

local he_of = Vector3.new(0, 0.5, 0) 
local hide_parts = {}

local sensa = uis.TouchEnabled and sensitivity_mobile or sensitivity_pc


local function hideHeadAndAccessories(character)
	local head = character:FindFirstChild("Head")
	if head then

		head.LocalTransparencyModifier = 1
		table.insert(hide_parts, head)
	
		local face = head:FindFirstChild("face")
		if face and face:IsA("Decal") then
			face.Transparency = 1
			table.insert(hide_parts, face)
		end
	end


	for _, accessory in character:GetDescendants() do
		if accessory:IsA("Accessory") then
			local handle = accessory:FindFirstChild("Handle")
			if handle then
	
				local weld = handle:FindFirstChildOfClass("Weld") or handle:FindFirstChildOfClass("WeldConstraint") or handle:FindFirstChildOfClass("Motor6D")
				if weld then
					local part0 = weld.Part0
					local part1 = weld.Part1
					if (part0 and part0.Name == "Head") or (part1 and part1.Name == "Head") then
						handle.LocalTransparencyModifier = 1
						table.insert(hide_parts, handle)
					end
				end
			end
		end
	end
end
-- КРЕЙЕС
local function showHeadAndAccessories()
	for _, part in hide_parts do
		if part and part.Parent then
			if part:IsA("Decal") then
				part.Transparency = 0
			else
				part.LocalTransparencyModifier = 0
			end
		end
	end
	hide_parts = {}
end

local function update_cam()
	local chara = player.Character
	if not chara then return end

	local head = chara:FindFirstChild("Head")
	if not head then return end

	local hrp = chara:FindFirstChild("HumanoidRootPart")
	if not hrp then return end
	cu_ya = cu_ya + (targ_ya - cu_ya) * smoth
	cur_pit = cur_pit + (targ_pic - cur_pit) * smoth
	local chara_frame = hrp.CFrame
	local chara_pos1 = chara_frame.Position
	local yar = CFrame.Angles(0, cu_ya, 0)
	local pir = CFrame.Angles(cur_pit, 0, 0)
	local cam_rot = yar * pir
	if fir_pes then
		
		local chara_forward = Vector3.new(chara_frame.LookVector.X, 0, chara_frame.LookVector.Z).Unit
		local cam_poss = chara_pos1 + Vector3.new(0, head_hig, 0) + (chara_forward * forw_offset)

		camera.CFrame = CFrame.new(cam_poss) * cam_rot

		
		local lookDirection = cam_rot.LookVector
		local lok_do = Vector3.new(lookDirection.X, 0, lookDirection.Z).Unit

		if lok_do.Magnitude > 0 then
		
			hrp.CFrame = CFrame.lookAt(chara_pos1, chara_pos1 + lok_do)
		end
	else

		local cameraOffset = cam_rot.LookVector * -dis_3 + Vector3.new(0, thirdPersonHeight, 0)
		local cam_poss = chara_pos1 + cameraOffset

		camera.CFrame = CFrame.lookAt(cam_poss, chara_pos1 + Vector3.new(0, 2, 0))
		
	end
end

local function toggleViewMode()
	local chara = player.Character
	if not chara then return end
	fir_pes = not fir_pes

	if fir_pes then
		
		hideHeadAndAccessories(chara)
		camera.FieldOfView = 70
	else
	
		showHeadAndAccessories()
		camera.FieldOfView = 60
	end
end

local function setupCamera(character)

	camera.CameraType = Enum.CameraType.Scriptable
	camera.FieldOfView = 70


	uis.MouseIconEnabled = mouse_cursor

-- by kreyes
	hideHeadAndAccessories(character)

	if uis.TouchEnabled == true then
		local playerGui = player:WaitForChild("PlayerGui")

		local buttonGui = Instance.new("ScreenGui")
		buttonGui.Name = "MobileViewToggle"
		buttonGui.ResetOnSpawn = false
		buttonGui.Parent = playerGui

		local tog_but = Instance.new("TextButton")
		tog_but.Name = "ToggleButton"
		tog_but.Size = UDim2.new(0, 30, 0, 30)
		tog_but.Position = UDim2.new(0, 20, 0, 20)
		tog_but.BackgroundColor3 = Color3.new(0.2, 0.2, 0.2)
		tog_but.BackgroundTransparency = 0.3
		tog_but.BorderSizePixel = 0
		tog_but.Text = "1"
		tog_but.TextColor3 = Color3.new(1, 1, 1)
		tog_but.TextScaled = true
		tog_but.Parent = buttonGui
		
		if first_person_key == 0 then
			tog_but.Visible =false
		end

		local corner = Instance.new("UICorner")
		corner.CornerRadius = UDim.new(0, 10)
		corner.Parent = tog_but
		

		local strok = Instance.new("UIStroke")
		strok.Color = Color3.new(0.5, 0.5, 0.5)
		strok.Thickness = 2
		strok.Parent = tog_but
		tog_but.MouseButton1Click:Connect(function()
			toggleViewMode()
			tog_but.Text = fir_pes and "1" or "3"
		end)
	end
	
	update_cam()
	
end

-- чо смотришь?

local function onCharacterAdded(character)
	local head = character:WaitForChild("Head")
	local hrp = character:WaitForChild("HumanoidRootPart")

	cur_pit = 0
	cu_ya = 0
	targ_pic = 0
	targ_ya = 0 -- by крeyеc

	setupCamera(character)

	uis.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
end


uis.InputChanged:Connect(function(input, gameProcessed)
	if gameProcessed then return end

	if input.UserInputType == Enum.UserInputType.MouseMovement then
		local delta = input.Delta
		targ_ya = targ_ya - delta.X * sensa * 0.005
		targ_pic = targ_pic - delta.Y * sensa * 0.005

		targ_pic = math.clamp(targ_pic, -max_angl, max_angl)
	elseif input.UserInputType == Enum.UserInputType.Touch and drag_cam then
	
		local currentPosition = Vector2.new(input.Position.X, input.Position.Y)
		local delta = currentPosition - last_tou
		last_tou = currentPosition

		targ_ya = targ_ya - delta.X * sensa * 0.005
		targ_pic = targ_pic - delta.Y * sensa * 0.005

	
		targ_pic = math.clamp(targ_pic, -max_angl, max_angl)
	end
end)

-- от кpeйеca



uis.InputBegan:Connect(function(input, gameProcessed)
	if gameProcessed then return end

	if input.UserInputType == Enum.UserInputType.MouseButton2 then
		
		if uis.MouseBehavior == Enum.MouseBehavior.LockCurrentPosition then
			uis.MouseBehavior = Enum.MouseBehavior.Default
		else
			uis.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
		end
	elseif input.UserInputType == Enum.UserInputType.Touch then

		drag_cam = true
		last_tou = Vector2.new(input.Position.X, input.Position.Y)
	elseif input.KeyCode == first_person_key and first_person_key ~= 0 then
	
		toggleViewMode()
	end
end)


uis.InputEnded:Connect(function(input, gameProcessed)
	if gameProcessed then
		
	else
	
		if input.UserInputType == Enum.UserInputType.Touch then
			drag_cam = false
		end
	end

end)


game:GetService("RunService").RenderStepped:Connect(function()
	update_cam()
end) -- канал KPЕйeс


if player.Character then
	onCharacterAdded(player.Character)
end
player.CharacterAdded:Connect(onCharacterAdded)

player.AncestryChanged:Connect(function()
	if not player.Parent then
		showHeadAndAccessories()
		uis.MouseBehavior = Enum.MouseBehavior.Default
	end
end)