> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Modificar datos de solo lectura o internos del jugador mediante CloudScript

> Actualice de forma segura los datos de solo lectura e internos del jugador de PlayFab desde CloudScript mediante server.UpdateUserInternalData con código de ejemplo en C# y JavaScript.

Los datos del jugador son accesibles desde CloudScript si su título lo requiere.

Para obtener más información sobre el uso de CloudScript, consulte el [inicio rápido de CloudScript](/services/playfab/live-service-management/service-gateway/automation/cloudscript/quickstart).

El ejemplo de C# de este tema está escrito para el SDK de Unity. El SDK de Unity usa un modelo controlado por eventos para controlar las tareas asincrónicas. Para ejecutar el código de ejemplo con el SDK de C#, debe modificar el código para usar un modelo asincrónico de tareas (Task). Los métodos que deben modificarse tienen Async anexado al nombre del método en la firma. Por ejemplo, SetObject en el SDK de Unity se convierte en SetObjectAsync en el SDK de C#. Para obtener más información, consulte [Programación asincrónica con async y await](https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/).

## Ejemplo de código de CloudScript

Debe prestar atención para garantizar la seguridad de sus llamadas a la API de servidor en CloudScript. El código siguiente demuestra cómo modificar de forma segura un dato de solo lectura del jugador desde CloudScript.

```javascript theme={null}
function IncrementReadOnlyUserData(args) {
  var playerData = server.GetUserInternalData({
        PlayFabId: currentPlayerId,
        Keys: ["ReadOnlyTest"]
  });

  var prevCount = "0";
  var nextCount = "1";
  try {
    prevCount = playerData.Data["ReadOnlyTest"].Value;
    var prevInt = parseInt(prevCount, 10);
    if (prevInt != prevInt) {
      prevInt = 0;
      nextCount = (prevInt + 1).toString();
    }
  } catch (e) {
    prevCount = "0";
    nextCount = "0";
  }

  var updateUserDataResult = server.UpdateUserInternalData({
    PlayFabId: currentPlayerId,
    Data:
        {
          "ReadOnlyTest": nextCount
        }
  });
}
```

## Ejemplo de código en C\#

Como se explica en el inicio rápido de CloudScript, puede llamar a la lógica siguiente desde el cliente.

```csharp theme={null}
public void CloudIncrement() {
    PlayFabClientAPI.ExecuteCloudScript( new ExecuteCloudScriptRequest {
        FunctionName = "IncrementReadOnlyUserData"
    },
    result => Debug.Log("CloudScript call successful"),
    error => {
        Debug.Log("CloudScript call failed");
        Debug.Log(error.GenerateErrorReport());
    });
}
```


## Related topics

- [Inicio rápido de datos del jugador](/es/services/playfab/player-progression/player-data/quickstart.md)
- [Cómo obtener datos de solo lectura del jugador](/es/services/playfab/player-progression/player-data/how-to-get-read-only-player-data.md)
- [Cómo establecer datos de solo lectura del jugador](/es/services/playfab/player-progression/player-data/how-to-set-read-only-player-data.md)
- [Modelos de contexto de CloudScript de PlayFab con Azure Functions](/es/services/playfab/live-service-management/service-gateway/automation/cloudscript-af/CloudScript-af-context.md)
- [Uso de los datos del publicador](/es/services/playfab/live-service-management/game-configuration/titledata/using-publisher-data.md)
