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

# getscripthash

> Devuelve un uppercase SHA384 hex digest para el stored bytecode string de un Roblox script object. El argument debe ser object. El helper compartido GetBytecode acepta valores ClassName ModuleScript, LocalScript, CoreScript y Script. Para Script, RunContext debe ser Client. Si falta ClassName, la function lanza "Invalid Instance". Si ClassName no es una de las script classes admitidas, lanza "Script expected". Si el valor es un Script con otro RunContext, lanza "Expected a Script with RunContext set to Client". Si el embedded bytecode reference no es valido o la longitud de stored bytecode es de 8 bytes o menos, la function devuelve nil. En caso contrario, calcula SHA384 sobre los stored bytecode bytes exactos y devuelve el uppercase hex string. La function no llama a DecompressBytecode y no hashea decompressed bytecode.

<div className="real-function-page">
  ```lua theme={null}
  getscripthash(script: userdata): string | nil
  ```

  ## Argumentos

  <ParamField path={"script"} type={"userdata"} required>
    Script object que se va a hashear. Los valores ClassName admitidos son ModuleScript, LocalScript, CoreScript y Script con RunContext Client.
  </ParamField>

  ## Retornos

  <ResponseField name={"hash"} type={"string | nil"}>
    Uppercase SHA384 hex digest de los stored bytecode bytes, o nil cuando no hay embedded bytecode utilizable.
  </ResponseField>

  ## Ejemplo

  Hash the bytecode of a supported Roblox script Instance when bytecode is available.

  ```lua theme={null}
  local targetScript

  for _, descendant in ipairs(game:GetDescendants()) do
      if descendant:IsA("LuaSourceContainer") then
          targetScript = descendant
          break
      end
  end

  if targetScript then
      local hash = getscripthash(targetScript)
      print(hash)
  end
  ```
</div>
