1
0
Fork 0
forked from Simnation/Main

Update fireworks.lua

This commit is contained in:
Nordi98 2025-07-02 17:30:08 +02:00
parent 24efaf6498
commit 050ff54c7d

View file

@ -5,30 +5,25 @@ local fireworkLoc = nil
-- Modelle für Feuerwerks-Batterien und Raketen -- Modelle für Feuerwerks-Batterien und Raketen
local fireworkModels = { local fireworkModels = {
["firework1"] = "ind_prop_firework_01", -- Rakete für firework1 ["firework1"] = "ind_prop_firework_01", -- Rakete für firework1
["firework2"] = "ind_prop_firework_04", -- Standard-Batterie für firework2 ["firework2"] = "ind_prop_firework_04", -- Standard-Batterie für firework2 (Bunte Sterne)
["firework3"] = "ind_prop_firework_03", -- Große Batterie für firework3 ["firework3"] = "ind_prop_firework_03", -- Große Batterie für firework3 (Massive Show)
["firework4"] = "prop_firework_03" -- Alternative Batterie für firework4 (Fontäne) ["firework4"] = "prop_firework_03" -- Fontäne für firework4 (Kreischende Fontäne)
} }
-- Verbesserte Feuerwerkseffekte ohne Flammen -- Spezifische Effekte für jeden Feuerwerkstyp
local fireworkEffects = { local firework2Effects = {
-- Bunte Explosionseffekte "scr_indep_firework_starburst", -- Sternenförmige Explosionen
"scr_indep_firework_starburst", "scr_firework_indep_spiral_burst_rwb", -- Spiralförmige Explosionen
"scr_indep_firework_shotburst", "scr_indep_firework_shotburst" -- Schrotartige Explosionen
"scr_indep_firework_trailburst",
"scr_xmas_firework_burst_fizzle",
"scr_firework_indep_burst_rwb",
"scr_firework_indep_spiral_burst_rwb",
"scr_firework_indep_ring_burst_rwb",
-- Konfetti und Funken
"scr_indep_firework_sparkle_spawn",
"scr_xmas_firework_sparkle_spawn",
-- Trails
"proj_indep_flare_trail",
"scr_indep_firework_trail_spawn"
} }
-- Funktion zum Starten einer Feuerwerksrakete local firework3Effects = {
"scr_firework_indep_ring_burst_rwb", -- Ringförmige Explosionen
"scr_firework_indep_burst_rwb", -- Massive Explosionen
"scr_xmas_firework_burst_fizzle" -- Knisternde Explosionen
}
-- Funktion zum Starten einer Feuerwerksrakete (firework1)
local function launchFireworkRocket(coords) local function launchFireworkRocket(coords)
-- Lade das Raketenmodell -- Lade das Raketenmodell
local rocketModel = "ind_prop_firework_01" local rocketModel = "ind_prop_firework_01"
@ -117,42 +112,43 @@ local function launchFireworkRocket(coords)
-- Explosionseffekt in der Luft -- Explosionseffekt in der Luft
local explosionHeight = startZ + height local explosionHeight = startZ + height
-- Wähle mehrere zufällige Effekte für die Explosion -- Hauptexplosion - Spezifisch für Rakete: Große Explosion mit Sternen
UseParticleFxAssetNextCall("proj_indep_firework_v2")
StartParticleFxNonLoopedAtCoord(
"scr_firework_indep_burst_rwb",
coords.x, coords.y, explosionHeight,
0.0, 0.0, 0.0,
3.0, -- Größere Skalierung für bessere Sichtbarkeit
false, false, false
)
-- Explosionsgeräusch
PlaySoundFromCoord(-1, "DISTANT_FIREWORK_BURST_01",
coords.x, coords.y, explosionHeight,
"dlc_sum20_beach_party_sounds", true, 50, false)
Wait(300)
-- Sekundäre Explosionen - Kleinere Sterne, die sich ausbreiten
for i = 1, 5 do for i = 1, 5 do
-- Wähle einen zufälligen Effekt aus der Liste
local effectIndex = math.random(1, #fireworkEffects)
local effect = fireworkEffects[effectIndex]
-- Bestimme das richtige Asset für diesen Effekt
local effectAsset = "scr_indep_fireworks" -- Standard
if effect:find("xmas") then
effectAsset = "proj_xmas_firework"
elseif effect:find("indep_burst") or effect:find("indep_spiral") or effect:find("indep_ring") then
effectAsset = "proj_indep_firework_v2"
elseif effect:find("flare") then
effectAsset = "proj_indep_firework"
end
-- Leichte Variation in der Position -- Leichte Variation in der Position
local offsetX = math.random(-5, 5) local offsetX = math.random(-5, 5)
local offsetY = math.random(-5, 5) local offsetY = math.random(-5, 5)
local offsetZ = math.random(-5, 5) local offsetZ = math.random(-5, 5)
-- Starte den Effekt UseParticleFxAssetNextCall("scr_indep_fireworks")
UseParticleFxAssetNextCall(effectAsset)
StartParticleFxNonLoopedAtCoord( StartParticleFxNonLoopedAtCoord(
effect, "scr_indep_firework_starburst",
coords.x + offsetX, coords.y + offsetY, explosionHeight + offsetZ, coords.x + offsetX, coords.y + offsetY, explosionHeight + offsetZ,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
math.random(20, 30) / 10, -- Größere Skalierung für bessere Sichtbarkeit math.random(15, 25) / 10,
false, false, false false, false, false
) )
-- Explosionsgeräusch -- Sekundäres Explosionsgeräusch
PlaySoundFromCoord(-1, "DISTANT_FIREWORK_BURST_0" .. math.random(1, 3), PlaySoundFromCoord(-1, "DISTANT_FIREWORK_BURST_0" .. math.random(2, 3),
coords.x + offsetX, coords.y + offsetY, explosionHeight + offsetZ, coords.x + offsetX, coords.y + offsetY, explosionHeight + offsetZ,
"dlc_sum20_beach_party_sounds", true, 50, false) "dlc_sum20_beach_party_sounds", true, 30, false)
Wait(math.random(100, 300)) Wait(math.random(100, 300))
end end
@ -302,14 +298,10 @@ local function launchFireworkFountain(coords)
DeleteEntity(fountain) DeleteEntity(fountain)
end end
-- Funktion zum Starten einer Feuerwerks-Batterie ohne Flammeneffekte -- Funktion für bunte Sterne (firework2)
local function startFireworkBattery(coords, itemName) local function startFireworkColorStars(coords)
-- Wähle ein Batteriemodell basierend auf dem Item -- Lade das Batteriemodell
local batteryModel = fireworkModels[itemName] or "ind_prop_firework_04" -- Standard, falls nicht definiert local batteryModel = "ind_prop_firework_04"
print("Verwende Batteriemodell: " .. batteryModel)
-- Lade das Modell
RequestModel(GetHashKey(batteryModel)) RequestModel(GetHashKey(batteryModel))
while not HasModelLoaded(GetHashKey(batteryModel)) do while not HasModelLoaded(GetHashKey(batteryModel)) do
Wait(10) Wait(10)
@ -317,7 +309,7 @@ local function startFireworkBattery(coords, itemName)
-- Erstelle die Batterie -- Erstelle die Batterie
local battery = CreateObject(GetHashKey(batteryModel), local battery = CreateObject(GetHashKey(batteryModel),
coords.x, coords.y, coords.z - 0.5, -- Leicht in den Boden eingelassen coords.x, coords.y, coords.z - 0.5,
true, true, false) true, true, false)
-- Stelle die Batterie richtig auf den Boden -- Stelle die Batterie richtig auf den Boden
@ -330,9 +322,7 @@ local function startFireworkBattery(coords, itemName)
-- Lade die Feuerwerkseffekte -- Lade die Feuerwerkseffekte
local ptfxAssets = { local ptfxAssets = {
"scr_indep_fireworks", "scr_indep_fireworks",
"proj_xmas_firework", "proj_indep_firework_v2"
"proj_indep_firework_v2",
"proj_indep_firework"
} }
for _, asset in ipairs(ptfxAssets) do for _, asset in ipairs(ptfxAssets) do
@ -342,7 +332,7 @@ local function startFireworkBattery(coords, itemName)
end end
end end
-- Füge einen Zündungseffekt hinzu (kleiner Funke statt Flamme) -- Füge einen Zündungseffekt hinzu
UseParticleFxAssetNextCall("scr_indep_fireworks") UseParticleFxAssetNextCall("scr_indep_fireworks")
local ignitionEffect = StartParticleFxLoopedOnEntity("scr_indep_firework_sparkle_spawn", local ignitionEffect = StartParticleFxLoopedOnEntity("scr_indep_firework_sparkle_spawn",
battery, 0.0, 0.0, 0.2, 0.0, 0.0, 0.0, 0.5, false, false, false) battery, 0.0, 0.0, 0.2, 0.0, 0.0, 0.0, 0.5, false, false, false)
@ -356,16 +346,10 @@ local function startFireworkBattery(coords, itemName)
-- Stoppe den Zündungseffekt -- Stoppe den Zündungseffekt
StopParticleFxLooped(ignitionEffect, 0) StopParticleFxLooped(ignitionEffect, 0)
-- Bestimme die Anzahl der Schüsse basierend auf dem Item -- Anzahl der Schüsse für firework2
local numShots = 15 -- Standard local numShots = 15
if itemName == "firework3" then print("Starte bunte Sterne mit " .. numShots .. " Schüssen")
numShots = 30 -- Mehr Schüsse für firework3 (große Batterie)
elseif itemName == "firework2" then
numShots = 15 -- Standard für firework2
end
print("Starte Feuerwerks-Batterie mit " .. numShots .. " Schüssen")
-- Starte die Feuerwerksschüsse -- Starte die Feuerwerksschüsse
for i = 1, numShots do for i = 1, numShots do
@ -390,19 +374,14 @@ local function startFireworkBattery(coords, itemName)
-- Explosionseffekt in der Luft (nur Partikel, keine echte Explosion) -- Explosionseffekt in der Luft (nur Partikel, keine echte Explosion)
local explosionHeight = coords.z + height local explosionHeight = coords.z + height
-- Wähle einen zufälligen Effekt aus der Liste -- Wähle einen zufälligen Effekt aus der Liste für firework2
local effectIndex = math.random(1, #fireworkEffects) local effect = firework2Effects[math.random(1, #firework2Effects)]
local effect = fireworkEffects[effectIndex]
-- Bestimme das richtige Asset für diesen Effekt -- Bestimme das richtige Asset für diesen Effekt
local effectAsset = "scr_indep_fireworks" -- Standard local effectAsset = "scr_indep_fireworks" -- Standard
if effect:find("xmas") then if effect:find("indep_burst") or effect:find("indep_spiral") or effect:find("indep_ring") then
effectAsset = "proj_xmas_firework"
elseif effect:find("indep_burst") or effect:find("indep_spiral") or effect:find("indep_ring") then
effectAsset = "proj_indep_firework_v2" effectAsset = "proj_indep_firework_v2"
elseif effect:find("flare") then
effectAsset = "proj_indep_firework"
end end
-- Starte den Haupteffekt -- Starte den Haupteffekt
@ -415,25 +394,176 @@ local function startFireworkBattery(coords, itemName)
false, false, false false, false, false
) )
-- Füge zusätzliche Effekte für mehr Volumen hinzu -- Explosionsgeräusch
PlaySoundFromCoord(-1, "DISTANT_FIREWORK_BURST_0" .. math.random(1, 3),
coords.x + offsetX, coords.y + offsetY, explosionHeight,
"dlc_sum20_beach_party_sounds", true, 50, false)
-- Warte zwischen den Schüssen
-- Schnellere Abfolge gegen Ende für ein Finale
local waitTime = 0
if i < numShots * 0.7 then
waitTime = math.random(300, 800)
else
waitTime = math.random(100, 300)
end
Wait(waitTime)
end
-- Warte nach dem letzten Schuss
Wait(2000)
-- Finale mit mehreren gleichzeitigen Effekten
for i = 1, 5 do
local finalOffsetX = math.random(-15, 15)
local finalOffsetY = math.random(-15, 15)
local finalHeight = math.random(30, 50)
-- Wähle einen zufälligen Effekt für das Finale
local finalEffect = firework2Effects[math.random(1, #firework2Effects)]
-- Bestimme das richtige Asset für diesen Effekt
local finalEffectAsset = "scr_indep_fireworks" -- Standard
if finalEffect:find("indep_burst") or finalEffect:find("indep_spiral") or finalEffect:find("indep_ring") then
finalEffectAsset = "proj_indep_firework_v2"
end
UseParticleFxAssetNextCall(finalEffectAsset)
StartParticleFxNonLoopedAtCoord(
finalEffect,
coords.x + finalOffsetX,
coords.y + finalOffsetY,
coords.z + finalHeight,
0.0, 0.0, 0.0,
math.random(25, 35) / 10, -- Größere Skalierung für das Finale
false, false, false
)
-- Finale-Geräusch
PlaySoundFromCoord(-1, "DISTANT_FIREWORK_BURST_0" .. math.random(1, 3),
coords.x + finalOffsetX, coords.y + finalOffsetY, coords.z + finalHeight,
"dlc_sum20_beach_party_sounds", true, 50, false)
Wait(100)
end
-- Lösche die Batterie nach einer Weile
Wait(5000)
DeleteEntity(battery)
end
-- Funktion für massive Show (firework3)
local function startFireworkMassiveShow(coords)
-- Lade das Batteriemodell
local batteryModel = "ind_prop_firework_03"
RequestModel(GetHashKey(batteryModel))
while not HasModelLoaded(GetHashKey(batteryModel)) do
Wait(10)
end
-- Erstelle die Batterie
local battery = CreateObject(GetHashKey(batteryModel),
coords.x, coords.y, coords.z - 0.5,
true, true, false)
-- Stelle die Batterie richtig auf den Boden
PlaceObjectOnGroundProperly(battery)
FreezeEntityPosition(battery, true)
-- Warte kurz, damit die Batterie sichtbar ist
Wait(500)
-- Lade die Feuerwerkseffekte
local ptfxAssets = {
"scr_indep_fireworks",
"proj_indep_firework_v2",
"proj_xmas_firework"
}
for _, asset in ipairs(ptfxAssets) do
RequestNamedPtfxAsset(asset)
while not HasNamedPtfxAssetLoaded(asset) do
Wait(10)
end
end
-- Füge einen Zündungseffekt hinzu
UseParticleFxAssetNextCall("scr_indep_fireworks")
local ignitionEffect = StartParticleFxLoopedOnEntity("scr_indep_firework_sparkle_spawn",
battery, 0.0, 0.0, 0.2, 0.0, 0.0, 0.0, 0.5, false, false, false)
-- Zündungsgeräusch
PlaySoundFromEntity(-1, "DISTANT_FIREWORK_LAUNCH_01", battery, "dlc_sum20_beach_party_sounds", true, 20)
-- Warte kurz für den Zündungseffekt
Wait(1000)
-- Stoppe den Zündungseffekt
StopParticleFxLooped(ignitionEffect, 0)
-- Anzahl der Schüsse für firework3
local numShots = 30
print("Starte massive Show mit " .. numShots .. " Schüssen")
-- Starte die Feuerwerksschüsse
for i = 1, numShots do
-- Bestimme die Höhe und Position des Schusses
local height = math.random(30, 50)
local offsetX = math.random(-15, 15) * (i / numShots) -- Größere Streuung bei späteren Schüssen
local offsetY = math.random(-15, 15) * (i / numShots)
-- Starteffekt (kleiner Funke statt Flamme)
UseParticleFxAssetNextCall("scr_indep_fireworks")
StartParticleFxNonLoopedAtCoord("scr_indep_firework_sparkle_spawn",
coords.x, coords.y, coords.z + 0.5,
0.0, 0.0, 0.0,
0.8, false, false, false)
-- Abschussgeräusch
PlaySoundFromEntity(-1, "DISTANT_FIREWORK_LAUNCH_01", battery, "dlc_sum20_beach_party_sounds", true, 20)
-- Warte kurz für den visuellen Effekt des Aufstiegs
Wait(math.random(100, 200))
-- Explosionseffekt in der Luft (nur Partikel, keine echte Explosion)
local explosionHeight = coords.z + height
-- Wähle einen zufälligen Effekt aus der Liste für firework3
local effect = firework3Effects[math.random(1, #firework3Effects)]
-- Bestimme das richtige Asset für diesen Effekt
local effectAsset = "proj_indep_firework_v2" -- Standard für firework3
if effect:find("xmas") then
effectAsset = "proj_xmas_firework"
end
-- Starte den Haupteffekt
UseParticleFxAssetNextCall(effectAsset)
StartParticleFxNonLoopedAtCoord(
effect,
coords.x + offsetX, coords.y + offsetY, explosionHeight,
0.0, 0.0, 0.0,
math.random(25, 35) / 10, -- Größere Skalierung für bessere Sichtbarkeit
false, false, false
)
-- Füge zusätzliche Effekte für mehr Volumen hinzu (nur bei firework3)
for j = 1, 2 do for j = 1, 2 do
local subOffsetX = math.random(-3, 3) local subOffsetX = math.random(-5, 5)
local subOffsetY = math.random(-3, 3) local subOffsetY = math.random(-5, 5)
local subOffsetZ = math.random(-3, 3) local subOffsetZ = math.random(-5, 5)
-- Wähle einen anderen zufälligen Effekt -- Wähle einen anderen zufälligen Effekt
local subEffectIndex = math.random(1, #fireworkEffects) local subEffect = firework3Effects[math.random(1, #firework3Effects)]
local subEffect = fireworkEffects[subEffectIndex]
-- Bestimme das richtige Asset für diesen Effekt -- Bestimme das richtige Asset für diesen Effekt
local subEffectAsset = "scr_indep_fireworks" -- Standard local subEffectAsset = "proj_indep_firework_v2" -- Standard für firework3
if subEffect:find("xmas") then if subEffect:find("xmas") then
subEffectAsset = "proj_xmas_firework" subEffectAsset = "proj_xmas_firework"
elseif subEffect:find("indep_burst") or subEffect:find("indep_spiral") or subEffect:find("indep_ring") then
subEffectAsset = "proj_indep_firework_v2"
elseif subEffect:find("flare") then
subEffectAsset = "proj_indep_firework"
end end
UseParticleFxAssetNextCall(subEffectAsset) UseParticleFxAssetNextCall(subEffectAsset)
@ -468,24 +598,19 @@ local function startFireworkBattery(coords, itemName)
Wait(2000) Wait(2000)
-- Finale mit mehreren gleichzeitigen Effekten -- Finale mit mehreren gleichzeitigen Effekten
for i = 1, 8 do for i = 1, 10 do
local finalOffsetX = math.random(-15, 15) local finalOffsetX = math.random(-20, 20)
local finalOffsetY = math.random(-15, 15) local finalOffsetY = math.random(-20, 20)
local finalHeight = math.random(30, 50) local finalHeight = math.random(30, 50)
-- Wähle einen zufälligen Effekt für das Finale -- Wähle einen zufälligen Effekt für das Finale
local finalEffectIndex = math.random(1, #fireworkEffects) local finalEffect = firework3Effects[math.random(1, #firework3Effects)]
local finalEffect = fireworkEffects[finalEffectIndex]
-- Bestimme das richtige Asset für diesen Effekt -- Bestimme das richtige Asset für diesen Effekt
local finalEffectAsset = "scr_indep_fireworks" -- Standard local finalEffectAsset = "proj_indep_firework_v2" -- Standard für firework3
if finalEffect:find("xmas") then if finalEffect:find("xmas") then
finalEffectAsset = "proj_xmas_firework" finalEffectAsset = "proj_xmas_firework"
elseif finalEffect:find("indep_burst") or finalEffect:find("indep_spiral") or finalEffect:find("indep_ring") then
finalEffectAsset = "proj_indep_firework_v2"
elseif finalEffect:find("flare") then
finalEffectAsset = "proj_indep_firework"
end end
UseParticleFxAssetNextCall(finalEffectAsset) UseParticleFxAssetNextCall(finalEffectAsset)
@ -495,7 +620,7 @@ local function startFireworkBattery(coords, itemName)
coords.y + finalOffsetY, coords.y + finalOffsetY,
coords.z + finalHeight, coords.z + finalHeight,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
math.random(25, 35) / 10, -- Größere Skalierung für das Finale math.random(30, 40) / 10, -- Größere Skalierung für das Finale
false, false, false false, false, false
) )
@ -503,7 +628,6 @@ local function startFireworkBattery(coords, itemName)
PlaySoundFromCoord(-1, "DISTANT_FIREWORK_BURST_0" .. math.random(1, 3), PlaySoundFromCoord(-1, "DISTANT_FIREWORK_BURST_0" .. math.random(1, 3),
coords.x + finalOffsetX, coords.y + finalOffsetY, coords.z + finalHeight, coords.x + finalOffsetX, coords.y + finalOffsetY, coords.z + finalHeight,
"dlc_sum20_beach_party_sounds", true, 50, false) "dlc_sum20_beach_party_sounds", true, 50, false)
Wait(100) Wait(100)
end end
@ -557,12 +681,18 @@ local function startFirework(asset, coords, itemName)
if itemName == "firework1" then if itemName == "firework1" then
-- Rakete für firework1 -- Rakete für firework1
launchFireworkRocket(coords) launchFireworkRocket(coords)
elseif itemName == "firework2" then
-- Bunte Sterne für firework2
startFireworkColorStars(coords)
elseif itemName == "firework3" then
-- Massive Show für firework3
startFireworkMassiveShow(coords)
elseif itemName == "firework4" then elseif itemName == "firework4" then
-- Kreischende Fontäne für firework4 -- Kreischende Fontäne für firework4
launchFireworkFountain(coords) launchFireworkFountain(coords)
else else
-- Batterie für alle anderen -- Fallback: Bunte Sterne
startFireworkBattery(coords, itemName) startFireworkColorStars(coords)
end end
fireworkLoc = nil fireworkLoc = nil
@ -668,10 +798,14 @@ RegisterCommand('feuerwerk', function(source, args)
-- Starte das passende Feuerwerk -- Starte das passende Feuerwerk
if itemName == "firework1" then if itemName == "firework1" then
launchFireworkRocket(coords) launchFireworkRocket(coords)
elseif itemName == "firework2" then
startFireworkColorStars(coords)
elseif itemName == "firework3" then
startFireworkMassiveShow(coords)
elseif itemName == "firework4" then elseif itemName == "firework4" then
launchFireworkFountain(coords) launchFireworkFountain(coords)
else else
startFireworkBattery(coords, itemName) startFireworkColorStars(coords)
end end
end) end)
@ -693,7 +827,7 @@ RegisterCommand('rakete', function()
launchFireworkRocket(coords) launchFireworkRocket(coords)
end) end)
RegisterCommand('batterie', function() RegisterCommand('buntesterne', function()
local playerPed = PlayerPedId() local playerPed = PlayerPedId()
local coords = GetEntityCoords(playerPed) local coords = GetEntityCoords(playerPed)
@ -706,11 +840,11 @@ RegisterCommand('batterie', function()
-- Spiele die Feuerzeug-Animation ab -- Spiele die Feuerzeug-Animation ab
playLighterAnimation() playLighterAnimation()
-- Starte die Standard-Batterie (firework2) -- Starte die bunten Sterne (firework2)
startFireworkBattery(coords, "firework2") startFireworkColorStars(coords)
end) end)
RegisterCommand('grossebatterie', function() RegisterCommand('massiveshow', function()
local playerPed = PlayerPedId() local playerPed = PlayerPedId()
local coords = GetEntityCoords(playerPed) local coords = GetEntityCoords(playerPed)
@ -723,8 +857,8 @@ RegisterCommand('grossebatterie', function()
-- Spiele die Feuerzeug-Animation ab -- Spiele die Feuerzeug-Animation ab
playLighterAnimation() playLighterAnimation()
-- Starte die große Batterie (firework3) -- Starte die massive Show (firework3)
startFireworkBattery(coords, "firework3") startFireworkMassiveShow(coords)
end) end)
RegisterCommand('fontaene', function() RegisterCommand('fontaene', function()
@ -744,3 +878,4 @@ RegisterCommand('fontaene', function()
launchFireworkFountain(coords) launchFireworkFountain(coords)
end) end)