2026-04-14 17:41:39 +02:00

242 lines
8.9 KiB
Lua

ESX = nil
Citizen.CreateThread(function()
while ESX == nil do
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
Citizen.Wait(0)
end
end)
-- #############################################
-- # KONFIGURATION
-- #############################################
local Config = {}
-- Hier kannst du einstellen, wie die Nachricht angezeigt wird.
-- Funktioniert so mit jedem HUD, wenn du den Export unten anpasst.
Config.ShowNotification = function(msg, type)
-- BEISPIEL: Standard ESX
-- ESX.ShowNotification(msg)
-- BEISPIEL: Hex HUD
-- TriggerEvent('hex_hud:notify', 'Killfeed', msg, type, 3000)
-- BEISPIEL: Okok Notify
-- exports['okokNotify']:Alert("Killfeed", msg, 3000, type)
-- Aktuell aktiv (pass dies an dein HUD an):
if type == 'success' then
TriggerEvent('hex_4_hud:notify', 'Killfeed', msg, 'success', 3000)
elseif type == 'error' then
TriggerEvent('hex_4_hud:notify', 'Killfeed', msg, 'error', 3000)
else
ESX.ShowNotification(msg)
end
end
-- Hier trägst du alle FFA Checks ein.
-- Return true = Killfeed ist AUS. Return false = Killfeed ist AN.
Config.IsPlayerInFFA = function()
local playerPed = PlayerPedId()
local coords = GetEntityCoords(playerPed)
-- CHECK 1: Dein ursprünglicher Export (falls vorhanden)
if GetResourceState("ov_ffa") == "started" then
if exports["ov_ffa"]:isInFFA() then return true end
end
-- CHECK 2: Beispiel für eine andere FFA Resource (z.B. absolute_ffa)
-- if GetResourceState("absolute_ffa") == "started" then
-- if exports["absolute_ffa"]:isPlayerInFFA() then return true end
-- end
-- CHECK 3: Über Dimensionen (Routing Bucket)
-- Viele FFAs nutzen andere Dimensionen (nicht 0).
-- if GetEntityRoutingBucket(playerPed) ~= 0 then return true end
-- Wenn kein FFA erkannt wurde:
return false
end
Config.WeaponNames = {
-- Nahkampfwaffen (Melee)
[`WEAPON_UNARMED`] = "Unbewaffnet",
[`WEAPON_KNIFE`] = "Messer",
[`WEAPON_NIGHTSTICK`] = "Schlagstock",
[`WEAPON_HAMMER`] = "Hammer",
[`WEAPON_BAT`] = "Baseballschläger",
[`WEAPON_GOLFCLUB`] = "Golfschläger",
[`WEAPON_CROWBAR`] = "Brecheisen",
[`WEAPON_BOTTLE`] = "Flasche",
[`WEAPON_DAGGER`] = "Antiker Dolch",
[`WEAPON_HATCHET`] = "Kriegsbeil",
[`WEAPON_KNUCKLE`] = "Schlagring",
[`WEAPON_MACHETE`] = "Machete",
[`WEAPON_FLASHLIGHT`] = "Taschenlampe",
[`WEAPON_SWITCHBLADE`] = "Springmesser",
[`WEAPON_POOLCUE`] = "Billardqueue",
[`WEAPON_PIPEWRENCH`] = "Rohrzange",
[`WEAPON_BATTLEAXE`] = "Streitaxt",
[`WEAPON_STONE_HATCHET`] = "Stein-Kriegsbeil",
[`WEAPON_CANDYCANE`] = "Zuckerstange",
-- Pistolen (Handguns)
[`WEAPON_PISTOL`] = "Pistole",
[`WEAPON_PISTOL_MK2`] = "Pistole MK2",
[`WEAPON_COMBATPISTOL`] = "Kampfpistole",
[`WEAPON_APPISTOL`] = "AP-Pistole",
[`WEAPON_STUNGUN`] = "Betäubungspistole",
[`WEAPON_STUNGUN_MP`] = "Taser (Multiplayer)",
[`WEAPON_PISTOL50`] = "Pistole .50",
[`WEAPON_SNSPISTOL`] = "Billigknarre",
[`WEAPON_SNSPISTOL_MK2`] = "Billigknarre MK2",
[`WEAPON_HEAVYPISTOL`] = "Schwere Pistole",
[`WEAPON_VINTAGEPISTOL`] = "Vintage-Pistole",
[`WEAPON_FLAREGUN`] = "Leuchtpistole",
[`WEAPON_MARKSMANPISTOL`] = "Marksman-Pistole",
[`WEAPON_REVOLVER`] = "Revolver",
[`WEAPON_REVOLVER_MK2`] = "Revolver MK2",
[`WEAPON_DOUBLEACTION`] = "Double-Action Revolver",
[`WEAPON_RAYPISTOL`] = "Up-n-Atomizer",
[`WEAPON_CERAMICPISTOL`] = "Keramik-Pistole",
[`WEAPON_NAVYREVOLVER`] = "Navy-Revolver",
[`WEAPON_GADGETPISTOL`] = "Perico-Pistole",
[`WEAPON_PISTOLXM3`] = "WM 29-Pistole",
-- Maschinenpistolen (SMGs)
[`WEAPON_MICROSMG`] = "Micro-SMG",
[`WEAPON_SMG`] = "SMG",
[`WEAPON_SMG_MK2`] = "SMG MK2",
[`WEAPON_ASSAULTSMG`] = "Sturm-SMG",
[`WEAPON_COMBATPDW`] = "Kampf-PDW",
[`WEAPON_MACHINEPISTOL`] = "Maschinenpistole",
[`WEAPON_MINISMG`] = "Mini-SMG",
[`WEAPON_RAYCARBINE`] = "Unholy Hellbringer",
[`WEAPON_TACTICALSMG`] = "Taktische SMG",
-- Schrotflinten (Shotguns)
[`WEAPON_PUMPSHOTGUN`] = "Pumpgun",
[`WEAPON_PUMPSHOTGUN_MK2`] = "Pumpgun MK2",
[`WEAPON_SAWNOFFSHOTGUN`] = "Abgesägte Schrotflinte",
[`WEAPON_ASSAULTSHOTGUN`] = "Sturm-Schrotflinte",
[`WEAPON_BULLPUPSHOTGUN`] = "Bullpup-Schrotflinte",
[`WEAPON_MUSKET`] = "Muskete",
[`WEAPON_HEAVYSHOTGUN`] = "Schwere Schrotflinte",
[`WEAPON_DBSHOTGUN`] = "Doppelläufige Schrotflinte",
[`WEAPON_AUTOSHOTGUN`] = "Sweeper-Schrotflinte",
[`WEAPON_COMBATSHOTGUN`] = "Kampfschrotflinte",
-- Sturmgewehre (Assault Rifles)
[`WEAPON_ASSAULTRIFLE`] = "Sturmgewehr",
[`WEAPON_ASSAULTRIFLE_MK2`] = "Sturmgewehr MK2",
[`WEAPON_CARBINERIFLE`] = "Karabinergewehr",
[`WEAPON_CARBINERIFLE_MK2`] = "Karabinergewehr MK2",
[`WEAPON_ADVANCEDRIFLE`] = "Erweitertes Gewehr",
[`WEAPON_SPECIALCARBINE`] = "Spezialkarabiner",
[`WEAPON_SPECIALCARBINE_MK2`] = "Spezialkarabiner MK2",
[`WEAPON_BULLPUPRIFLE`] = "Bullpup-Gewehr",
[`WEAPON_BULLPUPRIFLE_MK2`] = "Bullpup-Gewehr MK2",
[`WEAPON_COMPACTRIFLE`] = "Kompaktes Gewehr",
[`WEAPON_MILITARYRIFLE`] = "Militärgewehr",
[`WEAPON_HEAVYRIFLE`] = "Schweres Gewehr",
[`WEAPON_TACTICALRIFLE`] = "Taktisches Gewehr",
[`WEAPON_BATTLERIFLE`] = "Kampfgewehr",
-- Maschinengewehre (LMGs)
[`WEAPON_MG`] = "MG",
[`WEAPON_COMBATMG`] = "Kampf-MG",
[`WEAPON_COMBATMG_MK2`] = "Kampf-MG MK2",
[`WEAPON_GUSENBERG`] = "Gusenberg-Bleispritze",
-- Scharfschützengewehre (Sniper Rifles)
[`WEAPON_SNIPERRIFLE`] = "Scharfschützengewehr",
[`WEAPON_HEAVYSNIPER`] = "Schweres Scharfschützengewehr",
[`WEAPON_HEAVYSNIPER_MK2`] = "Schweres Scharfschützengewehr MK2",
[`WEAPON_MARKSMANRIFLE`] = "Marksman-Gewehr",
[`WEAPON_MARKSMANRIFLE_MK2`] = "Marksman-Gewehr MK2",
[`WEAPON_PRECISIONRIFLE`] = "Präzisionsgewehr",
-- Schwere Waffen (Heavy Weapons)
[`WEAPON_RPG`] = "Raketenwerfer",
[`WEAPON_GRENADELAUNCHER`] = "Granatwerfer",
[`WEAPON_GRENADELAUNCHER_SMOKE`] = "Tränengas-Werfer",
[`WEAPON_MINIGUN`] = "Minigun",
[`WEAPON_FIREWORK`] = "Feuerwerk-Werfer",
[`WEAPON_RAILGUN`] = "Railgun",
[`WEAPON_HOMINGLAUNCHER`] = "Lenkraketenwerfer",
[`WEAPON_COMPACTLAUNCHER`] = "Kompakter Granatwerfer",
[`WEAPON_RAYMINIGUN`] = "Witwenmacher",
[`WEAPON_EMPLAUNCHER`] = "EMP-Werfer",
-- Wurfwaffen (Throwables)
[`WEAPON_GRENADE`] = "Granate",
[`WEAPON_BZGAS`] = "BZ-Gas",
[`WEAPON_MOLOTOV`] = "Molotowcocktail",
[`WEAPON_STICKYBOMB`] = "Haftbombe",
[`WEAPON_PROXMINE`] = "Annäherungsmine",
[`WEAPON_SNOWBALL`] = "Schneeball",
[`WEAPON_PIPEBOMB`] = "Rohrbombe",
[`WEAPON_BALL`] = "Baseball",
[`WEAPON_SMOKEGRENADE`] = "Rauchgranate",
[`WEAPON_FLARE`] = "Leuchtfackel",
[`WEAPON_ACIDPACKAGE`] = "Säurepaket",
-- Sonstiges (Miscellaneous)
[`WEAPON_PETROLCAN`] = "Benzinkanister",
[`WEAPON_HAZARDCAN`] = "Gefahrgutkanister",
[`WEAPON_FERTILIZERCAN`] = "Düngerkanister",
[`WEAPON_FIREEXTINGUISHER`] = "Feuerlöscher",
[`GADGET_PARACHUTE`] = "Fallschirm",
}
-- #############################################
-- # LOGIK
-- #############################################
AddEventHandler('gameEventTriggered', function(eventName, eventData)
if eventName == 'CEventNetworkEntityDamage' then
local victimPed = eventData[1]
local attackerPed = eventData[2]
-- Validierung: Sind beide echte Spieler?
if not IsPedAPlayer(victimPed) or not IsPedAPlayer(attackerPed) then
return
end
-- Check ob Spieler tot ist
local health = GetEntityHealth(victimPed)
if health <= 0 then
-- GLOBALER FFA CHECK
if Config.IsPlayerInFFA() then
return
end
local victimId = GetPlayerServerId(NetworkGetPlayerIndexFromPed(victimPed))
local attackerId = GetPlayerServerId(NetworkGetPlayerIndexFromPed(attackerPed))
-- Waffe ermitteln
local weaponHash = GetSelectedPedWeapon(attackerPed)
local weaponName = Config.WeaponNames[weaponHash] or "Unbekannte Waffe"
local myPed = PlayerPedId()
-- Wenn ich gestorben bin
if myPed == victimPed then
Config.ShowNotification('Du wurdest von ID: ' .. attackerId .. ' mit ' .. weaponName .. ' getötet.', 'error')
end
-- Wenn ich getötet habe
if myPed == attackerPed and victimPed ~= attackerPed then
Config.ShowNotification('Du hast ID: ' .. victimId .. ' mit ' .. weaponName .. ' getötet.', 'success')
end
end
end
end)
-- Test Command (optional, zum Debuggen)
RegisterCommand("testkill", function()
Config.ShowNotification('Du hast ID: 99 mit Pistole getötet.', 'success')
end)