diff --git a/Classes/ItemEventSpawner.uc b/Classes/ItemEventSpawner.uc new file mode 100644 index 0000000..fc0d071 --- /dev/null +++ b/Classes/ItemEventSpawner.uc @@ -0,0 +1,40 @@ +class ItemEventSpawner extends Actor; + +var() class SpawnClass; +var() float SpawnDelay; // Delay in seconds (default 0, set to 10 for 10s delay) +var bool bPendingSpawn; + +function Trigger(actor Other, pawn EventInstigator) +{ + if (SpawnDelay > 0) + { + bPendingSpawn = true; + SetTimer(SpawnDelay, false); + } + else + { + DoSpawn(); + } +} + +function Timer() +{ + if (bPendingSpawn) + DoSpawn(); +} + +function DoSpawn() +{ + local Actor A; + A = Spawn(SpawnClass,,, Location); +} + +defaultproperties +{ + SpawnClass=class'Armor2' + Tag=DP2 + bHidden=True + bCollideActors=False + bCollideWorld=False + SpawnDelay=0.0 // Set to 10.0 for 10 seconds +} \ No newline at end of file diff --git a/Classes/MapFixes.uc b/Classes/MapFixes.uc index c75c7b0..ffa2231 100644 --- a/Classes/MapFixes.uc +++ b/Classes/MapFixes.uc @@ -75,6 +75,9 @@ function fixMaps() case "AS-BRIDGE": F = Spawn(class'fix_Bridge'); break; + case "AS-BRIDGEPV_BETA8": + F = Spawn(class'fix_BridgePV_beta8'); + break; case "AS-COLDERSTEEL": F = Spawn(class'fix_Coldersteel'); break; @@ -105,6 +108,9 @@ function fixMaps() case "AS-SUBMARINEBASE][": F = Spawn(class'fix_Submarinebase2'); break; + case "AS-THEDUNGEON]L[AL": + F = Spawn(class'fix_TheDungeon3AL'); + break; case "THEDUNGEON]L[BETA2": F = Spawn(class'fix_TheDungeons3Betas'); break; diff --git a/Classes/fix_Ballistic.uc b/Classes/fix_Ballistic.uc index 9430867..0b66859 100644 --- a/Classes/fix_Ballistic.uc +++ b/Classes/fix_Ballistic.uc @@ -21,6 +21,7 @@ function BeginPlay() fixWalls(); if (bIncludeLAS140Tweaks) fixBallisticObjects(); + spawnBallisticItems(); } } } @@ -96,6 +97,20 @@ function fixWalls() if (bDebug) log("Ballistic Wall Fixes -->"); } +function spawnBallisticItems() +{ + local ItemEventSpawner Spawner; + + // Example: Spawn a ShieldBelt after the generator is destroyed (event "powerdestroyed") + Spawner = Spawn(class'ItemEventSpawner',,, vect(-778.608215, -377.934814, -1006.903076)); + if (Spawner != None) + { + Spawner.SpawnClass = class'UT_ShieldBelt'; + Spawner.Tag = 'powerdestroyed'; + Spawner.SpawnDelay = 10.0; // Set to 10 seconds delay + } +} + function fixTele_ThanksToMyM() { local Dispatcher D; diff --git a/Classes/fix_BridgePV_beta8.uc b/Classes/fix_BridgePV_beta8.uc new file mode 100644 index 0000000..2e340b2 --- /dev/null +++ b/Classes/fix_BridgePV_beta8.uc @@ -0,0 +1,99 @@ +//============================================================================= +// BridgePV_beta8 - lilfvb@gmail.com - Ulv 2025 +//============================================================================= +class fix_BridgePV_beta8 extends MapFix config(MapFixes); + +var bool bTweaked; +var() config bool bEnabled; +var() config bool bDebug; + +function BeginPlay() +{ + Super.BeginPlay(); + if (!bTweaked) + { + bTweaked = True; + if (bEnabled) + { + fixBridgePV_beta8Objects(); + } + } +} + +function fixBridgePV_beta8Objects() +{ + local string S; + local string SA; + local BulletBox BB; + local RifleShell RS; + local UT_ShieldBelt SB; + local Armor2 A2; + local HealthPack HP; + local Vector V; + local Rotator R; + local UT_Eightball RL; + + S = Left(Self, InStr(Self, ".")); + if(S~="AS-BridgePV_beta8") + { + foreach AllActors(class'BulletBox', BB) + { + SA = Mid(string(BB), InStr(string(BB), ".") + 1); + if ( (SA == "BulletBox0") || (SA == "BulletBox2") || (SA == "BulletBox3") || (SA == "BulletBox4") || (SA == "BulletBox11") ) + { + V = BB.Location; + R = BB.Rotation; + BB.Destroy(); + RS = Spawn(class'RifleShell',,, V, R); + } + } + + // Replace the belt with armor in defender spawn + foreach AllActors(class'UT_ShieldBelt', SB) + { + SA = Mid(string(SB), InStr(string(SB), ".") + 1); + if (SA == "ut_shieldbelt0") + { + V = SB.Location; + R = SB.Rotation; + SB.Destroy(); + A2 = Spawn(class'Armor2',,, V, R); + } + } + + // Add a Keg in the box in attacker spawn + V.X = -3120.438721; + V.Y = 581.074585; + V.Z = 792.103943; + R.Pitch = 0; + R.Roll = 0; + R.Yaw = 0; + HP = Spawn(class'HealthPack',,, V, R); + + // Add a RifleShell near the Sniper at Final exit + V.X = -2507.945801; + V.Y = -1440.486694; + V.Z = 1462.380005; + R.Pitch = 0; + R.Roll = 0; + R.Yaw = 0; + RS = Spawn(class'RifleShell',,, V, R); + + // Add a RocketLauncher near sniper and flak at the underwater tele exit + V.X = 295.726440; + V.Y = -448.705444; + V.Z = -1373.900024; + R.Pitch = 0; + R.Roll = 0; + R.Yaw = 0; + RL = Spawn(class'UT_EightBall',,, V, R); + RL.bRotatingPickup = False; + RL.SetWeaponStay(); + } +} + +defaultproperties +{ + bEnabled=True + bHidden=True +} \ No newline at end of file diff --git a/Classes/fix_Desolate2.uc b/Classes/fix_Desolate2.uc index 7991a42..a420b25 100644 --- a/Classes/fix_Desolate2.uc +++ b/Classes/fix_Desolate2.uc @@ -20,6 +20,7 @@ function BeginPlay() if (bIncludeLAS140Tweaks) fixD2Spawns(); fixDesolateObjs(); + spawnDesolate2Items(); } } } @@ -61,6 +62,17 @@ function fixDesolateObjs() { if (bDebug) log("Desolate][ Fixes -->"); } +function spawnDesolate2Items() { + local ItemEventSpawner Spawner; + // Spawn Armor after Lower Levels + Spawner = Spawn(class'ItemEventSpawner',,, vect(-5275.133789, -477.687500, -1106.479858)); + if (Spawner != None) + { + Spawner.SpawnClass = class'Armor2'; + Spawner.Tag = 'dis1'; + } +} + function fixD2Spawns() { local Dispatcher D; local string S; diff --git a/Classes/fix_Riverbed3AL.uc b/Classes/fix_Riverbed3AL.uc index cfd29c0..e144e61 100644 --- a/Classes/fix_Riverbed3AL.uc +++ b/Classes/fix_Riverbed3AL.uc @@ -10,6 +10,7 @@ var() config bool bDebug; function BeginPlay() { local string S; + Super.BeginPlay(); if (!bTweaked) { @@ -18,7 +19,7 @@ function BeginPlay() if (bEnabled && S~="AS-Riverbed]l[AL") { fixRiverbed3(); - + spawnRiverbed3Items(); } } } @@ -47,11 +48,24 @@ function fixRiverbed3() { KR.SetCollisionSize(KickerR[i],KickerH[i]); KR.KickVelocity = vect(150.000000,150.000000,-80.000000); if (bDebug) log("* Spawned KR - L:"@KR.Location@"/ R:"@KR.CollisionRadius@"/ H:"@KR.CollisionHeight); + } if (bDebug) log("Riv3 Wall Tweak -->"); } +function spawnRiverbed3Items() { + local ItemEventSpawner Spawner; + // Spawns armor in truck after Compressor + Spawner = Spawn(class'ItemEventSpawner',,, vect(-2340.212158, -3763.420410, 975.493347)); + if (Spawner != None) + { + Spawner.SpawnClass = class'Armor2'; + Spawner.Tag = 'DP2'; + } +} + defaultproperties { - bEnabled=False + bEnabled=True + Tag=DP2 } diff --git a/Classes/fix_TheDungeon3AL.uc b/Classes/fix_TheDungeon3AL.uc new file mode 100644 index 0000000..769e13b --- /dev/null +++ b/Classes/fix_TheDungeon3AL.uc @@ -0,0 +1,46 @@ +//============================================================================= +// TheDungeon]l[AL - lilfvb@gmail.com - Ulv 2025 +//============================================================================= +class fix_TheDungeon3AL extends MapFix config(MapFixes); + +var bool bTweaked; +var() config bool bEnabled; +var() config bool bDebug; + +function BeginPlay() +{ + local string S; + + Super.BeginPlay(); + if (!bTweaked) + { + bTweaked = True; + S = Left(Self, InStr(Self, ".")); + if (bEnabled && S~="AS-TheDungeon]L[AL") + { + + spawnDungeon3Items(); + } + } +} + +function spawnDungeon3Items() { + local ItemEventSpawner Spawner; + + // Spawn armor at boots 10 seconds after skull lock. + Spawner = Spawn(class'ItemEventSpawner',,, vect(11218.932617, 11338.771484, 1018.700195)); + if (Spawner != None) + { + Spawner.SpawnClass = class'Armor2'; + Spawner.Tag = 'skullboom'; + Spawner.SpawnDelay = 10.0; + Spawner.Rotation.Pitch = 12; + Spawner.Rotation.Roll = 3456; + Spawner.Rotation.Yaw = 15364; + } +} + +defaultproperties +{ + bEnabled=True +} \ No newline at end of file