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

# Module

> Ersetze Standard-Funktionen wie Notify, Fortschrittsbalken, Stash und Logs durch deine eigenen Module.

Module sind ein einfacher Weg für Drugs Creator, bestimmte Standard-Funktionen (Notify, Fortschrittsbalken, Stash, Logs) zu ersetzen.

Um ein bereits vorhandenes Modul auszuwählen, öffne das `/drugscreator`-Menü, gehe zu den Einstellungen und wähle es aus. So einfach ist das.

### Verfügbare Module

| Kategorie          | Verfügbare Optionen                                |
| ------------------ | -------------------------------------------------- |
| Dispatch           | `codesign`, `default`, `rcore`, `roadphone`        |
| Gangs              | `default`                                          |
| Inventory          | `jaksam_inventory`, `ox_inventory`, `qb-inventory` |
| Logs               | `custom`, `jaksam`                                 |
| Menü               | `menu_default`, `ox_context`, `ox_lib`             |
| Fortschrittsbalken | `jaksam`, `ox_lib`, `qb-core`                      |
| Stash              | `jaksam_inventory`, `ox-inventory`, `qb-inventory` |
| Text UI            | `esx`, `none`, `ox_lib`                            |

### Ein eigenes Modul erstellen

Wähle die Kategorie, für die du ein Modul erstellen möchtest. Jeder Tab führt dich durch die genauen Schritte für diese Kategorie und liefert dir eine fertige Vorlage zum Bearbeiten.

<Tabs>
  <Tab title="Dispatch">
    <Steps>
      <Step title="Zum Modules-Ordner navigieren">
        Gehe zum Ordner `drugs_creator/_modules/dispatch`.
      </Step>

      <Step title="Vorhandenes Modul duplizieren">
        Kopiere ein vorhandenes Modul (z.B. `default`) und füge es im gleichen Ordner als Vorlage ein.
      </Step>

      <Step title="Die Kopie umbenennen">
        Benenne die eingefügte Kopie passend zur Integration um, die du erstellen möchtest.
      </Step>

      <Step title="Die benötigten Funktionen implementieren">
        Öffne die umbenannte Datei und passe sie an die Events des Drittanbieter-Scripts an, das du integrierst:

        ```lua theme={null}
        local moduleType = "dispatch"
        local moduleName = "yourModuleName" -- Passend zur Integration umbenennen, die du erstellst

        -- Nicht anfassen, wird benötigt damit es in den Ingame-Einstellungen erscheint
        Integrations.modules = Integrations.modules or {}
        Integrations.modules[moduleType] = Integrations.modules[moduleType] or {}
        Integrations[moduleType] = Integrations[moduleType] or {}
        Integrations[moduleType][moduleName] = {}
        table.insert(Integrations.modules[moduleType], moduleName)

        -- Läuft einmal pro Aufruf, server-seitig
        Integrations[moduleType][moduleName].alertPoliceServerSide = function(coords, message, category)
            if not IsDuplicityVersion() then return end

            -- Füge hier deinen Code ein (z.B. das Export/Event deines Dispatch-Scripts aufrufen, um die Polizei zu alarmieren)
        end

        -- Läuft client-seitig, auf jedem Client eines Polizei-Mitglieds
        Integrations[moduleType][moduleName].alertPoliceMemberClientSide = function(coords, message, category)
            if IsDuplicityVersion() then return end

            -- Füge hier deinen Code ein (z.B. dem Officer einen Blip/eine Benachrichtigung anzeigen)
        end
        ```
      </Step>
    </Steps>
  </Tab>

  <Tab title="Gangs">
    <Steps>
      <Step title="Zum Modules-Ordner navigieren">
        Gehe zum Ordner `drugs_creator/_modules/gangs`.
      </Step>

      <Step title="Vorhandenes Modul duplizieren">
        Kopiere ein vorhandenes Modul (z.B. `default`) und füge es im gleichen Ordner als Vorlage ein.
      </Step>

      <Step title="Die Kopie umbenennen">
        Benenne die eingefügte Kopie passend zur Integration um, die du erstellen möchtest.
      </Step>

      <Step title="Die benötigten Funktionen implementieren">
        Öffne die umbenannte Datei und passe sie an die Events des Drittanbieter-Scripts an, das du integrierst:

        ```lua theme={null}
        local moduleType = "gangs"
        local moduleName = "yourModuleName"

        Integrations.modules = Integrations.modules or {}
        Integrations.modules[moduleType] = Integrations.modules[moduleType] or {}
        Integrations[moduleType] = Integrations[moduleType] or {}
        Integrations[moduleType][moduleName] = {}
        table.insert(Integrations.modules[moduleType], moduleName)

        --- Prüft, ob ein Spieler anhand seiner Gang und seines Rangs berechtigt ist, SERVER-SEITIG
        --- @param playerId number - Die Server-ID des Spielers
        --- @param allowedGangs table<string, boolean|table<string, boolean>> - Tabelle erlaubter Gangs und deren Ränge
        --- @return boolean|nil - Ob der Spieler berechtigt ist
        Integrations[moduleType][moduleName].isPlayerGangAllowed = function(playerId, allowedGangs)
            -- Füge hier deinen Code ein
        end

        --- Gleiche Prüfung, aber CLIENT-SEITIG
        --- @param allowedGangs table<string, boolean|table<string, boolean>>
        --- @return boolean|nil
        Integrations[moduleType][moduleName].isClientGangAllowed = function(allowedGangs)
            -- Füge hier deinen Code ein
        end

        --- Gibt den Gang-Namen eines Spielers zurück, SERVER-SEITIG
        --- @param playerId number
        --- @return string|nil
        Integrations[moduleType][moduleName].getPlayerGangName = function(playerId)
            -- Füge hier deinen Code ein
        end

        --- Gibt den Gang-Namen des lokalen Spielers zurück, CLIENT-SEITIG
        --- @return string|nil
        Integrations[moduleType][moduleName].getClientGangName = function()
            -- Füge hier deinen Code ein
        end

        --- Gibt alle im Spiel verfügbaren Gangs zurück
        --- @return table<string, { label: string, grades: table<number, { grade: number, label: string }> }>
        Integrations[moduleType][moduleName].getAllGangs = function()
            -- Füge hier deinen Code ein
        end
        ```
      </Step>
    </Steps>
  </Tab>

  <Tab title="Inventory">
    <Steps>
      <Step title="Zum Modules-Ordner navigieren">
        Gehe zum Ordner `drugs_creator/_modules/inventory`.
      </Step>

      <Step title="Vorhandenes Modul duplizieren">
        Kopiere ein vorhandenes Modul (z.B. `jaksam_inventory`) und füge es im gleichen Ordner als Vorlage ein.
      </Step>

      <Step title="Die Kopie umbenennen">
        Benenne die eingefügte Kopie passend zur Integration um, die du erstellen möchtest.
      </Step>

      <Step title="Die benötigten Funktionen implementieren">
        Öffne die umbenannte Datei und passe sie an die Events des Drittanbieter-Scripts an, das du integrierst:

        ```lua theme={null}
        local moduleType = "inventory"
        local moduleName = "yourModuleName"

        Integrations.modules = Integrations.modules or {}
        Integrations.modules[moduleType] = Integrations.modules[moduleType] or {}
        Integrations[moduleType] = Integrations[moduleType] or {}
        Integrations[moduleType][moduleName] = {}
        table.insert(Integrations.modules[moduleType], moduleName)

        -- Gibt den Slot zurück, der das angegebene Item enthält, oder nil falls keiner
        Integrations[moduleType][moduleName].getSlotIdWithItem = function(playerId, itemName, metadata)
            -- Füge hier deinen Code ein
        end

        -- Setzt die Metadaten des Items im angegebenen Slot
        Integrations[moduleType][moduleName].setItemMetadata = function(playerId, slotId, metadata)
            -- Füge hier deinen Code ein
        end

        -- Gibt die Item-Daten des angegebenen Slots zurück
        Integrations[moduleType][moduleName].getSlotItem = function(playerId, slotId)
            -- Füge hier deinen Code ein
        end
        ```
      </Step>
    </Steps>
  </Tab>

  <Tab title="Logs">
    <Steps>
      <Step title="Zum Modules-Ordner navigieren">
        Gehe zum Ordner `drugs_creator/_modules/logs`.
      </Step>

      <Step title="Vorhandenes Modul duplizieren">
        Kopiere ein vorhandenes Modul (z.B. `jaksam`) und füge es im gleichen Ordner als Vorlage ein.
      </Step>

      <Step title="Die Kopie umbenennen">
        Benenne die eingefügte Kopie passend zur Integration um, die du erstellen möchtest.
      </Step>

      <Step title="Die benötigten Funktionen implementieren">
        Öffne die umbenannte Datei und passe sie an die Events des Drittanbieter-Scripts an, das du integrierst:

        ```lua theme={null}
        local moduleType = "logs"
        local moduleName = "yourModuleName"

        Integrations.modules = Integrations.modules or {}
        Integrations.modules[moduleType] = Integrations.modules[moduleType] or {}
        Integrations[moduleType] = Integrations[moduleType] or {}
        Integrations[moduleType][moduleName] = {}
        table.insert(Integrations.modules[moduleType], moduleName)

        -- Sendet einen Log-Eintrag (z.B. an einen Discord-Webhook oder ein eigenes Logging-Script)
        Integrations[moduleType][moduleName].log = function(playerId, title, description, type, logType)
            -- Füge hier deinen Code ein
        end
        ```
      </Step>
    </Steps>
  </Tab>

  <Tab title="Menü">
    <Steps>
      <Step title="Zum Modules-Ordner navigieren">
        Gehe zum Ordner `drugs_creator/_modules/menu`.
      </Step>

      <Step title="Vorhandenes Modul duplizieren">
        Kopiere ein vorhandenes Modul (z.B. `menu_default`) und füge es im gleichen Ordner als Vorlage ein.
      </Step>

      <Step title="Die Kopie umbenennen">
        Benenne die eingefügte Kopie passend zur Integration um, die du erstellen möchtest.
      </Step>

      <Step title="Die benötigten Funktionen implementieren">
        Öffne die umbenannte Datei und passe sie an die Events des Drittanbieter-Scripts an, das du integrierst:

        ```lua theme={null}
        local moduleType = "menu"
        local moduleName = "yourModuleName"

        Integrations.modules = Integrations.modules or {}
        Integrations.modules[moduleType] = Integrations.modules[moduleType] or {}
        Integrations[moduleType] = Integrations[moduleType] or {}
        Integrations[moduleType][moduleName] = {}
        table.insert(Integrations.modules[moduleType], moduleName)

        -- Öffnet ein Menü mit den angegebenen Elementen
        Integrations[moduleType][moduleName].open = function(id, title, elements, onSelect, onClose)
            -- Füge hier deinen Code ein
        end

        -- Schließt alle von diesem Modul geöffneten Menüs
        Integrations[moduleType][moduleName].closeAll = function()
            -- Füge hier deinen Code ein
        end

        -- Fragt den Spieler nach einer Zahl zwischen min und max
        Integrations[moduleType][moduleName].askQuantity = function(title, min, max)
            -- Füge hier deinen Code ein
        end

        -- Fragt den Spieler nach freier Texteingabe
        Integrations[moduleType][moduleName].askInput = function(title)
            -- Füge hier deinen Code ein
        end
        ```
      </Step>
    </Steps>
  </Tab>

  <Tab title="Fortschrittsbalken">
    <Steps>
      <Step title="Zum Modules-Ordner navigieren">
        Gehe zum Ordner `drugs_creator/_modules/progressbar`.
      </Step>

      <Step title="Vorhandenes Modul duplizieren">
        Kopiere ein vorhandenes Modul (z.B. `jaksam`) und füge es im gleichen Ordner als Vorlage ein.
      </Step>

      <Step title="Die Kopie umbenennen">
        Benenne die eingefügte Kopie passend zur Integration um, die du erstellen möchtest.
      </Step>

      <Step title="Die benötigten Funktionen implementieren">
        Öffne die umbenannte Datei und passe sie an die Events des Drittanbieter-Scripts an, das du integrierst:

        ```lua theme={null}
        local moduleType = "progressbar"
        local moduleName = "yourModuleName"

        Integrations.modules = Integrations.modules or {}
        Integrations.modules[moduleType] = Integrations.modules[moduleType] or {}
        Integrations[moduleType] = Integrations[moduleType] or {}
        Integrations[moduleType][moduleName] = {}
        table.insert(Integrations.modules[moduleType], moduleName)

        -- Startet einen Fortschrittsbalken für die angegebene Zeit (ms), mit Text und Farbe
        Integrations[moduleType][moduleName].start = function(time, text, hexColor)
            -- Füge hier deinen Code ein
        end

        -- Stoppt/versteckt den Fortschrittsbalken
        Integrations[moduleType][moduleName].stop = function()
            -- Füge hier deinen Code ein
        end
        ```
      </Step>
    </Steps>
  </Tab>

  <Tab title="Stash">
    <Steps>
      <Step title="Zum Modules-Ordner navigieren">
        Gehe zum Ordner `drugs_creator/_modules/stash`.
      </Step>

      <Step title="Vorhandenes Modul duplizieren">
        Kopiere ein vorhandenes Modul (z.B. `jaksam_inventory`) und füge es im gleichen Ordner als Vorlage ein.
      </Step>

      <Step title="Die Kopie umbenennen">
        Benenne die eingefügte Kopie passend zur Integration um, die du erstellen möchtest.
      </Step>

      <Step title="Die benötigten Funktionen implementieren">
        Öffne die umbenannte Datei (client- und serverseitig) und passe sie an die Events des Drittanbieter-Scripts an, das du integrierst:

        Client:

        ```lua theme={null}
        local moduleType = "stash"
        local moduleName = "yourModuleName"

        Integrations.modules = Integrations.modules or {}
        Integrations.modules[moduleType] = Integrations.modules[moduleType] or {}
        Integrations[moduleType] = Integrations[moduleType] or {}
        Integrations[moduleType][moduleName] = {}
        table.insert(Integrations.modules[moduleType], moduleName)

        -- Öffnet die Stash-UI für den Spieler
        Integrations[moduleType][moduleName].open = function(stashId)
            -- Füge hier deinen Code ein
        end
        ```

        Server:

        ```lua theme={null}
        -- Registriert die Stash, damit sie existiert und geöffnet werden kann
        Integrations[moduleType][moduleName].register = function(options)
            -- Füge hier deinen Code ein
        end

        -- Fügt der Stash ein Item hinzu
        Integrations[moduleType][moduleName].addItem = function(stashId, itemName, amount, metadata)
            -- Füge hier deinen Code ein
        end

        -- Entfernt ein Item aus der Stash
        Integrations[moduleType][moduleName].removeItem = function(stashId, itemName, amount, metadata)
            -- Füge hier deinen Code ein
        end

        -- Gibt zurück, wie viele von itemName sich aktuell in der Stash befinden
        Integrations[moduleType][moduleName].getItemCount = function(stashId, itemName)
            -- Füge hier deinen Code ein
        end

        -- Gibt zurück, ob amount weitere itemName noch in die Stash passen würden
        Integrations[moduleType][moduleName].canAddItem = function(stashId, itemName, amount)
            -- Füge hier deinen Code ein
        end

        -- Entfernt alle Items aus der Stash
        Integrations[moduleType][moduleName].clearStash = function(stashId)
            -- Füge hier deinen Code ein
        end
        ```
      </Step>
    </Steps>
  </Tab>

  <Tab title="Text UI">
    <Steps>
      <Step title="Zum Modules-Ordner navigieren">
        Gehe zum Ordner `drugs_creator/_modules/textui`.
      </Step>

      <Step title="Vorhandenes Modul duplizieren">
        Kopiere ein vorhandenes Modul (z.B. `ox_lib`) und füge es im gleichen Ordner als Vorlage ein.
      </Step>

      <Step title="Die Kopie umbenennen">
        Benenne die eingefügte Kopie passend zur Integration um, die du erstellen möchtest.
      </Step>

      <Step title="Die benötigten Funktionen implementieren">
        Öffne die umbenannte Datei und passe sie an die Events des Drittanbieter-Scripts an, das du integrierst:

        ```lua theme={null}
        local moduleType = "textui"
        local moduleName = "yourModuleName"

        Integrations.modules = Integrations.modules or {}
        Integrations.modules[moduleType] = Integrations.modules[moduleType] or {}
        Integrations[moduleType] = Integrations[moduleType] or {}
        Integrations[moduleType][moduleName] = {}
        table.insert(Integrations.modules[moduleType], moduleName)

        -- Zeigt eine Text-UI-Meldung mit dem angegebenen Text
        Integrations[moduleType][moduleName].show = function(message)
            -- Füge hier deinen Code ein
        end

        -- Versteckt die Text-UI-Meldung
        Integrations[moduleType][moduleName].hide = function()
            -- Füge hier deinen Code ein
        end
        ```
      </Step>
    </Steps>
  </Tab>
</Tabs>


## Related topics

- [Module](/de/doors-creator/modules.md)
