PlayerSettings
Settings that can be applied to a Player.
Functions
Function Name | Return Type | Description | Tags |
---|---|---|---|
ApplyToPlayer(Player) | None | Apply settings from this settings object to Player. | Server-Only |
Examples
Example using:
ApplyToPlayer
The Player Settings
object determines a player's movement, camera and other such properties. In this example, when an ability is activated it applies a special Player Settings
for a short period of time. Afterwards, it reverts the player back to default settings.
local SPECIAL_PLAYER_SETTINGS = script:GetCustomProperty("SpecialPlayerSettings"):WaitForObject()
local DEFAULT_SETTINGS = World.FindObjectByName("Third Person Player Settings")
local ABILITY = script:FindAncestorByType("Ability")
local EFFECT_DURATION = 3
function OnAbilityExecute(ability)
local player = ability.owner
SPECIAL_PLAYER_SETTINGS:ApplyToPlayer(player)
Task.Wait(EFFECT_DURATION)
if Object.IsValid(player) then
DEFAULT_SETTINGS:ApplyToPlayer(player)
end
end
ABILITY.executeEvent:Connect(OnAbilityExecute)
See also: Ability.executeEvent | World.FindObjectByName | CoreObject.FindAncestorByType | Object.IsValid | Task.Wait
Example using:
ApplyToPlayer
In this example, we can avoid exploits and bugs, such as players gaining infinite movement speed bonuses when they equip/unequip items in particular sequences. We achieve this by defining two functions, ApplySettings()
and RemoveSettings()
that are to be used instead of directly applying settings to a player. This adds a layer of decision-making when adding/removing settings, allowing a more complex project where multiple gameplay systems modify players at arbitrary moments. As long as Apply/Remove are called consistently problems are avoided and settings resolve themselves back, like an "Undo" stack.
local DEFAULT_SETTINGS = World.FindObjectByName("Third Person Player Settings")
function ApplySettings(player, settings)
local stack = GetSettingsStack(player)
table.insert(stack, settings)
settings:ApplyToPlayer(player)
end
function RemoveSettings(player, settings)
local stack = GetSettingsStack(player)
for i = #stack, 1, -1 do
if stack[i] == settings then
table.remove(stack, i)
if #stack == 0 then
-- The stack is empty. Go back to default player settings
DEFAULT_SETTINGS:ApplyToPlayer(player)
elseif i == #stack + 1 then
-- The top settings was removed. Go back to previous one
local previousSettings = stack[#stack]
previousSettings:ApplyToPlayer(player)
else
-- In case a setting from the middle of the stack is removed,
-- do nothing.
end
return
end
end
end
function GetSettingsStack(player, ikAnchor)
if player.serverUserData.settingsStack == nil then
player.serverUserData.settingsStack = {}
end
return player.serverUserData.settingsStack
end
See also: Player.serverUserData | World.FindObjectByName