242 lines
8.9 KiB
Lua
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) |