Was bedeutet dieser Fehler?
Die oben genannte Fehlermeldung besagt:
SCRIPTNAME verwendet das Event getSharedObject, aber dieses Event existiert nicht mehr!
Dieser Fehler tritt auf, da in den neueren Versionen von ESX (ab Version 1.9) ein Event namens GetSharedObject nicht mehr verwendet wird. Stattdessen wurde es durch einen Export ersetzt.
Warum tritt dieser Fehler auf?
Dieser Fehler tritt auf, da Events in FiveM als unperformant angesehen werden, was bedeutet, dass sie die Leistung beeinträchtigen können. Aus diesem Grund wurde das Event, das zuvor verwendet wurde, durch einen Export ersetzt. Allerdings stellte sich später heraus, dass dies ein Fehler war, da der Export im Wesentlichen dasselbe wie das Event ist.
In Skripten sieht das dann so aus:
Das gezeigte Event kann in verschiedenen Skripten unterschiedlich implementiert sein und von dem abweichen, was hier gezeigt wird.
ltes Event:
TriggerEvent("esx:getSharedObject", function(obj) ESX = obj end)
Neuer Export:
ESX = exports["es_extended"]:getSharedObject()
Wie kann ich diesen Fehler beheben?
Es gibt zwei Methoden, um diesen Fehler zu beheben:
- Ersetzen Sie das Event in jedem Skript durch den Export.
Diese Methode wird von ESX unterstützt und empfohlen. Sie ist jedoch etwas anspruchsvoller umzusetzen, spart jedoch an Leistung!
- Schreiben Sie ESX so um, dass das Event wieder verwendet wird.
Diese Methode wird NICHT von ESX empfohlen, da sie die Leistung beeinträchtigen kann
Beide Methoden werden hier ausführlich erklärt:
1. Ersetzen des Events in jedem Skript durch den Export
Um dies zu erreichen, müssen Sie in dem jeweiligen Skript (Client- und Server-Lua-Dateien) nach dem alten Event suchen:
TriggerEvent("esx:getSharedObject", function(obj) ESX = obj end)
Suchen Sie nach dieser Zeile und ersetzen Sie sie durch den neuen Export:
ESX = exports["es_extended"]:getSharedObject()
Dies kann manchmal schwierig sein, da diese Zeile möglicherweise in einer verschlüsselten Datei steht, auf die Sie keinen Zugriff haben. In diesem Fall sollten Sie Methode 2 in Erwägung ziehen.
2. Schreiben Sie ESX so um, dass das Event wieder verwendet wird
Um dies zu erreichen, öffnen Sie Ihren ESX-Ordner (es_extended) und suchen Sie zuerst in der Datei client/common.lua
nach folgendem Code:
Dies ist das alte Event, das wir umschreiben, damit es wieder wie früher funktioniert!
AddEventHandler("esx:getSharedObject", function()
local Invoke = GetInvokingResource()
print(("[^1ERROR^7] Resource ^5%s^7 Used the ^5getSharedObject^7 Event, this event ^1no longer exists!^7 Visit https://documentation.esx-framework.org/tutorials/tutorials-esx/sharedevent for how to fix!"):format(Invoke))
end)
Ersetzen Sie diesen Codeabschnitt durch:
AddEventHandler("esx:getSharedObject", function(cb)
cb(ESX)
end)
Führen Sie denselben Schritt auch in der Datei es_extended/server/common.lua
durch.
Bei Neueren ESX Versionen (ab 1.10.1 oder höher) liegen die Beschriebenen Code-Abschnitte in der datei es_extended/shared/main.lua statt in dem client und server ordner :) und müssen nur einmal ersetzt werden.