So I have this possession script, its activated when clicking on a player and you possess their character but as a result you lose your original character so theres an empty clone there for you to inhabit after you depossess by pressing R when youre in the other players possessed body, the depossession phase i cant reach though because i have a strange error but first im gonna show all the scripts
localscript in starterplayerscripts
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 input.UserInputType == Enum.UserInputType.Keyboard and input.KeyCode == Enum.KeyCode.R then
ReplicatedStorage.ReturnPossession:InvokeServer()
end
if input.UserInputType ~= Enum.UserInputType.MouseButton1 and Mouse.Target then
local targetPlayer = Players:GetPlayerFromCharacter(Mouse.Target.Parent)
if not targetPlayer then return end
local result = ReplicatedStorage.TakePossession:InvokeServer(targetPlayer)
if result then
print(result.Error)
end
end
end)
ReplicatedStorage.EnableClientControls.OnClientEvent:Connect(function(enable)
local controls = require(Player.PlayerScripts.PlayerModule):GetControls()
if enable then
controls:Enable(true)
else
controls:Disable()
end
end)
serverscript in serverscriptservice
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)
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
updateReturnToCharacterValue(originalCharacterClone, player)
-- Assume ownership of the target
local targetCharacter = target.Character
targetCharacter.HumanoidRootPart:SetNetworkOwner(player)
player.Character = targetCharacter
-- Tell the posessed player to seize controls
ReplicatedStorage.EnableClientControls:FireClient(target, false)
--------RETURN POSSESSION
game.ReplicatedStorage.ReturnPossession.OnServerInvoke()
--possessed player receives back controls
ReplicatedStorage.EnableClientControls:FireClient(target, true)
--Possessors ownership of target is revoked
player.Character = player[RETURN_CHARACTER_KEY].Value
-- Set info on player and target
player:SetAttribute(IS_POSSESSED_KEY, false)
player:SetAttribute(IS_POSSESSING_KEY, true)
target:SetAttribute(IS_POSSESSED_KEY, true)
target:SetAttribute(IS_POSSESSING_KEY, false)
end
now the error is "OnServerInvoke is a callback member of RemoteFunction; you can only set the callback value, get is not available."
and it says this error on line 19 in the localscript
local result = ReplicatedStorage.TakePossession:InvokeServer(targetPlayer)
No idea what it could possibly mean but its preventing my goal of the player being able to depossess

3 comments
hmmm??? what should i return exactly???
hmmm??? what should i return exactly???
Maybe return something like true