> ## 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.

# hookmetamethod

> Wyszukuje metamethod function na value i hookuje tę function przez hookfunction. First argument może być dowolnym value akceptowanym przez raw metafield lookup. Second argument musi być string metamethod name, a third argument musi być function replacement. Jeśli raw metafield lookup nie znajdzie named metafield, function rzuca "Metamethod doesn't exist" dla argument 2. Jeśli metafield istnieje, ale nie jest function, rzuca "Metamethod isn't a function" dla argument 2. Gdy metafield jest function, hookmetamethod wywołuje hookfunction z found metamethod function jako target i zwraca cloned original closure z hookfunction.

<div className="real-function-page">
  ```lua theme={null}
  hookmetamethod(object: any, metamethod: string, replacement: function): function
  ```

  ## Argumenty

  <ParamField path={"object"} type={"any"} required>
    Value, którego methods jest sprawdzany przez raw metafield lookup.
  </ParamField>

  <ParamField path={"metamethod"} type={"string"} required>
    Metafield name przekazany do raw metafield lookup.
  </ParamField>

  <ParamField path={"replacement"} type={"function"} required>
    Function przekazana do hookfunction jako replacement dla found metamethod function.
  </ParamField>

  ## Zwroty

  <ResponseField name={"original"} type={"function"}>
    Cloned original metamethod closure zwrócona przez hookfunction.
  </ResponseField>

  ## Przykład

  Hook an existing metamethod function.

  ```lua theme={null}
  local object = setmetatable({}, {
      __index = function(_, key)
          return key
      end,
  })

  local original
  original = hookmetamethod(object, "__index", function(self, key)
      if key == "Name" then
          return "Real"
      end

      return original(self, key)
  end)
  ```
</div>
