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
