I genuinely dont know how this isnt working, im getting no errors whatsoever and it refuses to reach the remoteEvent "returnPossession" it depends on whether the player presses the R key obviously and its disconnected from the remoteFunction "TakePossession" that which ACTUALLY works. I'm at my wits end here I do not know how to fix this at all.
local script
local Players = game:GetService("Players") local replicatedStorage = game:GetService("ReplicatedStorage") local userInputService = game:GetService("UserInputService") local Player = Players.LocalPlayer local Mouse = Player:GetMouse() userInputService.InputEnded:Connect(function(input) if game:GetService("UserInputService"):IsKeyDown(Enum.KeyCode.C) and Mouse.Target ~= nil and Mouse.Target.Parent.Name ~= "Workspace" and Mouse.Target.Parent:FindFirstChildOfClass("Humanoid") ~= nil then local targetPlayer = Players:GetPlayerFromCharacter(Mouse.Target.Parent) print("targetplayer1") if not targetPlayer then print("target player not found") end local result = replicatedStorage.TakePossession:InvokeServer(targetPlayer) print("possession has been fired") if result then print(result) print("result has passed") end end--end of function end) ---end of function replicatedStorage.EnableClientControls.OnClientEvent:Connect(function(enable) local controls = require(Player.PlayerScripts.PlayerModule):GetControls() if enable then controls:Enable(true) print("controls enabled") else controls:Disable() print("controls disabled") end end) --NEW R TO UNPOSSESS SCRIPT --replicatedStorage.ReturnPossession.OnClientEvent:Connect(function(returned) --print("UNPOSSESS PRINT") --end) --OLD R TO UNPOSSESS SCRIPT if userInputService:IsKeyDown(Enum.KeyCode.R) then replicatedStorage.ReturnPossession:FireServer() print("depossession server fired") end
server/receiver
local ReplicatedStorage = game:GetService("ReplicatedStorage") local IS_POSSESSED_KEY = "IsPossessed" local IS_POSSESSING_KEY = "IsPossessing" local RETURN_CHARACTER_KEY = "ReturnCharacter" function updateReturnToCharacterValue(character, parent) local value = nil if parent:FindFirstChild(RETURN_CHARACTER_KEY) then value = parent[RETURN_CHARACTER_KEY] else value = Instance.new("ObjectValue") value.Name = RETURN_CHARACTER_KEY value.Parent = parent end value.Value = character end ReplicatedStorage.TakePossession.OnServerInvoke = function(player, target) print("possession fired has reached server") if not target:IsA("Player") then return { Error = "Target is not a player" } end if player == target then return { Error = "You cannot possess yourself" } end if player:GetAttribute(IS_POSSESSED_KEY) then return { Error = "You are already possessed" } end if player:GetAttribute(IS_POSSESSING_KEY) then return { Error = "You are already possessing someone else" } end if target:GetAttribute(IS_POSSESSED_KEY) then return { Error = target.DisplayName .. " is already possessed" } end if target:GetAttribute(IS_POSSESSING_KEY) then return { Error = target.DisplayName .. " is already possessing someone else" } end -- Clone original character and reassign character -- (clone is required because character is deleted after Character reassignment) local originalCharacter = player.Character originalCharacter.Archivable = true local originalCharacterClone = originalCharacter:Clone() originalCharacterClone.Parent = originalCharacter.Parent print("possessors body has been cloned") updateReturnToCharacterValue(originalCharacterClone, player) -- Assume ownership of the target local targetCharacter = target.Character targetCharacter.HumanoidRootPart:SetNetworkOwner(player) player.Character = targetCharacter print("targets body has been possessed") -- Tell the posessed player to seize controls ReplicatedStorage.EnableClientControls:FireClient(target, false) print("targets body has lost its controls") -- Set info on player and target player:SetAttribute(IS_POSSESSED_KEY, false) player:SetAttribute(IS_POSSESSING_KEY, true) print("first attributes have been set") target:SetAttribute(IS_POSSESSED_KEY, true) target:SetAttribute(IS_POSSESSING_KEY, false) print("second attributes have been set") end local function Depossess(player, target) print("depossess fired has reached the server") ReplicatedStorage.EnableClientControls:FireClient(target, true) print("target received controls back") player.Character = player[RETURN_CHARACTER_KEY].Value print("possessor is now in body of their clone") end --return to body ReplicatedStorage.ReturnPossession.OnServerEvent:Connect(Depossess)
contact me via discord: fenti#8587