diff --git a/bg_inject.ps1 b/bg_inject.ps1 new file mode 100644 index 0000000..28d7180 --- /dev/null +++ b/bg_inject.ps1 @@ -0,0 +1,111 @@ +<# +.SYNOPSIS + Background Lua injection into Roblox Studio via UI Automation +.DESCRIPTION + Injects Lua code into Roblox Studio's command bar using UIAutomation. + Works when Studio is minimized, behind other windows, or in background. + No window focus required. +.PARAMETER Code + The Lua code to inject, or a path to a .lua file +.PARAMETER File + Path to a .lua file to inject +.EXAMPLE + .\bg_inject.ps1 -Code 'print("hello")' + .\bg_inject.ps1 -File C:\scripts\build_map.lua +#> +param( + [string]$Code = '', + [string]$File = '' +) + +Add-Type -AssemblyName UIAutomationClient +Add-Type -AssemblyName UIAutomationTypes + +function Find-StudioCommandBar { + $root = [System.Windows.Automation.AutomationElement]::RootElement + + # Find Studio window + $windows = $root.FindAll( + [System.Windows.Automation.TreeScope]::Children, + [System.Windows.Automation.Condition]::TrueCondition + ) + + $studio = $null + foreach ($w in $windows) { + try { + $n = $w.Current.Name + if ($n -like "*Roblox Studio*") { $studio = $w; break } + } catch {} + } + + if (-not $studio) { + $procs = Get-Process -Name "RobloxStudioBeta" -ErrorAction SilentlyContinue + if (-not $procs) { return $null } + $pidCond = New-Object System.Windows.Automation.PropertyCondition( + [System.Windows.Automation.AutomationElement]::ProcessIdProperty, + $procs[0].Id + ) + $studio = $root.FindFirst([System.Windows.Automation.TreeScope]::Children, $pidCond) + } + + if (-not $studio) { return $null } + + # Find command bar by AutomationId + $autoIdCond = New-Object System.Windows.Automation.PropertyCondition( + [System.Windows.Automation.AutomationElement]::AutomationIdProperty, + "commandBarScriptEditor" + ) + $cmdBar = $studio.FindFirst( + [System.Windows.Automation.TreeScope]::Descendants, + $autoIdCond + ) + + return $cmdBar +} + +function Inject-LuaCode { + param([string]$luaCode) + + $cmdBar = Find-StudioCommandBar + if (-not $cmdBar) { + Write-Error "ERROR: Roblox Studio command bar not found" + return $false + } + + try { + $vp = $cmdBar.GetCurrentPattern([System.Windows.Automation.ValuePattern]::Pattern) + $vp.SetValue($luaCode) + + # Send Enter via keyboard (requires brief focus) + Add-Type -AssemblyName System.Windows.Forms + $cmdBar.SetFocus() + Start-Sleep -Milliseconds 100 + [System.Windows.Forms.SendKeys]::SendWait("{ENTER}") + + return $true + } catch { + Write-Error "Injection failed: $_" + return $false + } +} + +# Main +if ($File -and (Test-Path $File)) { + $Code = Get-Content $File -Raw +} +elseif ($Code -eq '') { + # Read from stdin + $Code = @($input) -join "`n" +} + +if ($Code.Trim() -eq '') { + Write-Error "No code provided. Use -Code or -File" + exit 1 +} + +$result = Inject-LuaCode -luaCode $Code +if ($result) { + Write-Output "OK: Code injected successfully" +} else { + exit 1 +} diff --git a/bg_inject.py b/bg_inject.py new file mode 100644 index 0000000..2b74227 --- /dev/null +++ b/bg_inject.py @@ -0,0 +1,57 @@ +""" +Background injection into Roblox Studio via UI Automation. +Works when Studio is minimized, behind other windows, or in background. +No user interaction required. +""" +import subprocess, sys, os, time + +PS_SCRIPT = r"C:\Users\Admin\bg_inject.ps1" + +def inject(code): + """Inject Lua code into Roblox Studio command bar in the background.""" + # Write code to temp file to avoid quoting issues + tmp = os.path.join(os.environ["TEMP"], "rbx_bg_inject.lua") + with open(tmp, "w", encoding="utf-8") as f: + f.write(code) + + result = subprocess.run( + ["powershell", "-ExecutionPolicy", "Bypass", "-File", PS_SCRIPT, "-File", tmp], + capture_output=True, text=True, timeout=30 + ) + + output = result.stdout.strip() + error = result.stderr.strip() + + if "OK" in output: + return True, output + else: + return False, f"{output}\n{error}" + +def inject_multi(scripts, label=""): + """Inject multiple scripts sequentially.""" + for i, (name, code) in enumerate(scripts, 1): + total = len(scripts) + prefix = f"[{label}] " if label else "" + print(f" {prefix}[{i}/{total}] {name}...", end="", flush=True) + + ok, msg = inject(code) + if ok: + print(" OK") + else: + print(f" FAILED: {msg}") + return False + time.sleep(2.5) # Wait for Studio to process + return True + +if __name__ == "__main__": + if len(sys.argv) > 1: + # Inject a file + path = sys.argv[1] + with open(path, "r", encoding="utf-8") as f: + code = f.read() + ok, msg = inject(code) + print(msg) + else: + # Test + ok, msg = inject('print("BG_INJECT_TEST_OK")') + print(msg) diff --git a/bg_inject_uia2.ps1 b/bg_inject_uia2.ps1 new file mode 100644 index 0000000..85c9188 --- /dev/null +++ b/bg_inject_uia2.ps1 @@ -0,0 +1,164 @@ +# Background injection into Roblox Studio using pure PowerShell + UIAutomation +# Works when Studio is minimized, behind other windows, or in background + +Add-Type -AssemblyName UIAutomationClient +Add-Type -AssemblyName UIAutomationTypes +Add-Type -AssemblyName System.Windows.Forms + +# Find Studio +$root = [System.Windows.Automation.AutomationElement]::RootElement +$cond = New-Object System.Windows.Automation.PropertyCondition( + [System.Windows.Automation.AutomationElement]::ControlTypeProperty, + [System.Windows.Automation.ControlType]::Window +) +$windows = $root.FindAll([System.Windows.Automation.TreeScope]::Children, $cond) + +$studio = $null +foreach ($w in $windows) { + try { + if ($w.Current.Name -like "*Roblox Studio*") { + $studio = $w + break + } + } catch {} +} + +if (-not $studio) { + # Try by process + $procs = Get-Process -Name "RobloxStudioBeta" -ErrorAction SilentlyContinue + if ($procs) { + $pidCond = New-Object System.Windows.Automation.PropertyCondition( + [System.Windows.Automation.AutomationElement]::ProcessIdProperty, + $procs[0].Id + ) + $studio = $root.FindFirst([System.Windows.Automation.TreeScope]::Children, $pidCond) + } +} + +if (-not $studio) { + Write-Output "ERROR: Roblox Studio not found" + exit 1 +} + +Write-Output "Found: $($studio.Current.Name)" + +# Search for Edit controls (command bar) +$editCond = New-Object System.Windows.Automation.PropertyCondition( + [System.Windows.Automation.AutomationElement]::ControlTypeProperty, + [System.Windows.Automation.ControlType]::Edit +) + +# Also check Document controls +$docCond = New-Object System.Windows.Automation.PropertyCondition( + [System.Windows.Automation.AutomationElement]::ControlTypeProperty, + [System.Windows.Automation.ControlType]::Document +) + +$orCond = New-Object System.Windows.Automation.OrCondition($editCond, $docCond) +$edits = $studio.FindAll([System.Windows.Automation.TreeScope]::Descendants, $orCond) + +Write-Output "Found $($edits.Count) Edit/Document controls" + +$commandBar = $null +foreach ($e in $edits) { + try { + $name = $e.Current.Name + $autoId = $e.Current.AutomationId + $className = $e.Current.ClassName + $bbox = $e.Current.BoundingRectangle + Write-Output " Edit: name='$name' autoId='$autoId' class='$className' rect=$bbox" + + # Check if it's the command bar + if ($name -like "*command*" -or $autoId -like "*command*" -or $autoId -like "*script*") { + $commandBar = $e + Write-Output " -> MATCHED by name/autoId" + break + } + } catch { + Write-Output " Edit: (error reading properties)" + } +} + +# If no match by name, try all edits and find one that supports ValuePattern +if (-not $commandBar -and $edits.Count -gt 0) { + Write-Output "`nNo name match. Trying ValuePattern on all edits..." + foreach ($e in $edits) { + try { + $vp = $e.GetCurrentPattern([System.Windows.Automation.ValuePattern]::Pattern) + if ($vp) { + $val = $vp.Current.Value + Write-Output " ValuePattern found: '$($val.Substring(0, [Math]::Min(60, $val.Length)))'" + $commandBar = $e + break + } + } catch {} + } +} + +if (-not $commandBar) { + # List ALL descendants for debugging + Write-Output "`nNo command bar found. Listing all controls..." + $all = $studio.FindAll([System.Windows.Automation.TreeScope]::Descendants, + [System.Windows.Automation.Condition]::TrueCondition) + Write-Output "Total descendants: $($all.Count)" + + $count = 0 + foreach ($a in $all) { + if ($count -ge 80) { break } + try { + $ct = $a.Current.ControlType.ProgrammaticName + $nm = $a.Current.Name + $ai = $a.Current.AutomationId + $cl = $a.Current.ClassName + # Only show interesting ones + if ($ct -match "Edit|Text|Document|Button|MenuItem|Tool" -or + $ai -match "command|script|bar|input|console") { + Write-Output " [$ct] name='$nm' autoId='$ai' class='$cl'" + $count++ + } + } catch {} + } + Write-Output "`nERROR: Could not identify command bar" + exit 1 +} + +# Set value using ValuePattern +Write-Output "`nInjecting code..." +$code = $args[0] +if (-not $code) { + $code = 'print("UI_AUTO_INJECT_OK")' +} + +try { + $vp = $commandBar.GetCurrentPattern([System.Windows.Automation.ValuePattern]::Pattern) + $vp.SetValue($code) + Write-Output "SetValue OK" +} catch { + Write-Output "ValuePattern failed: $_" + Write-Output "Trying keyboard simulation..." + # Focus the element + try { + $commandBar.SetFocus() + Start-Sleep -Milliseconds 200 + [System.Windows.Forms.SendKeys]::SendWait("^a") # Ctrl+A + Start-Sleep -Milliseconds 100 + # Set clipboard and paste + Set-Clipboard -Value $code + [System.Windows.Forms.SendKeys]::SendWait("^v") # Ctrl+V + Start-Sleep -Milliseconds 500 + } catch { + Write-Output "Focus+SendKeys also failed: $_" + exit 1 + } +} + +# Send Enter to execute +Start-Sleep -Milliseconds 300 +try { + [System.Windows.Forms.SendKeys]::SendWait("{ENTER}") + Write-Output "Enter sent" +} catch { + Write-Output "SendKeys Enter failed: $_" +} + +Write-Output "`nSUCCESS: Code injected!" diff --git a/inject_full_gta.py b/inject_full_gta.py new file mode 100644 index 0000000..6152425 --- /dev/null +++ b/inject_full_gta.py @@ -0,0 +1,226 @@ +""" +GTA City full background injection. +Uses UIAutomation to inject into Studio even when minimized. +""" +import subprocess, time, sys, os + +PS_INJECT = r"C:\Users\Admin\bg_inject.ps1" + +def inject_lua(code): + """Inject Lua code via PowerShell UIAutomation.""" + tmp = os.path.join(os.environ["TEMP"], "rbx_bg.lua") + with open(tmp, "w", encoding="utf-8") as f: + f.write(code) + result = subprocess.run( + ["powershell", "-ExecutionPolicy", "Bypass", "-File", PS_INJECT, "-File", tmp], + capture_output=True, text=True, timeout=30 + ) + return "OK" in result.stdout, result.stdout.strip() + +# Step 1: Clean + Ground + Roads + Lighting +print("[1/7] Ground + roads...", end="", flush=True) +ok, _ = inject_lua(""" +for _,v in pairs(workspace:GetChildren()) do +if v:IsA("Part") or v:IsA("Model") then +if v.Name~="Camera" and v.Name~="Terrain" then v:Destroy() end +end end +for _,v in pairs(game.ServerScriptService:GetChildren())do v:Destroy()end +for _,v in pairs(game.StarterGui:GetChildren())do v:Destroy()end +for _,v in pairs(game.StarterPlayer.StarterPlayerScripts:GetChildren())do v:Destroy()end +for _,v in pairs(game.ReplicatedStorage:GetChildren())do v:Destroy()end +wait(0.3) +local g=Instance.new("Part",workspace)g.Name="Ground"g.Size=Vector3.new(800,2,800)g.Position=Vector3.new(0,-1,0)g.Anchored=true g.BrickColor=BrickColor.new("Dark stone grey")g.Material=Enum.Material.Asphalt +for _,r in ipairs({{0,.1,20,800},{0,.1,800,20},{200,.1,14,800},{-200,.1,14,800},{0,.1,14,800,200},{0,.1,14,800,-200}})do +local rd=Instance.new("Part",workspace)rd.Size=Vector3.new(r[4],0.5,r[3])rd.Position=Vector3.new(r[1],r[2],r[3]>100 and r[5] or 0)rd.Anchored=true rd.BrickColor=BrickColor.new("Medium stone grey")rd.Material=Enum.Material.SmoothPlastic end +local L=game:GetService("Lighting")L.ClockTime=6 L.Brightness=0.3 L.FogEnd=500 L.FogStart=100 +print("S1_OK") +""") +print(" OK" if ok else " FAIL") +time.sleep(3) + +# Step 2: Buildings +print("[2/7] Buildings...", end="", flush=True) +ok, _ = inject_lua(""" +for i,b in ipairs({{0,30,0,40,60,30},{-60,25,-50,30,50,25},{70,20,50,35,40,28},{-80,35,60,45,70,35},{-200,15,-80,30,30,25},{-170,20,-30,28,40,22},{200,12,-120,24,24,20},{240,14,-60,22,28,18},{180,10,100,26,20,22},{220,16,160,20,32,16},{-300,18,-200,50,36,40},{300,16,200,45,32,38},{-350,10,-300,30,20,25},{350,8,300,28,16,22},{160,12,-250,22,24,18},{-130,22,0,26,44,20},{130,20,-30,28,40,22},{260,18,80,30,36,25}}) do +local cols={"Medium stone grey","White","Institutional white","Brown","Brick yellow","Reddish brown","Dark stone grey"} +local m=Instance.new("Model",workspace)m.Name="Bld"..i +local p=Instance.new("Part",m)p.Size=Vector3.new(b[4],b[5],b[6])p.Position=Vector3.new(b[1],b[2],b[3])p.Anchored=true p.BrickColor=BrickColor.new(cols[i%#cols+1])p.Material=Enum.Material.Brick +local rf=Instance.new("Part",m)rf.Size=Vector3.new(b[4]+2,1,b[6]+2)rf.Position=Vector3.new(b[1],b[2]*2+0.5,b[3])rf.Anchored=true rf.BrickColor=BrickColor.new("Dark stone grey")rf.Material=Enum.Material.Metal +for fl=1,math.floor(b[5]/12)do for wx=1,2 do local w=Instance.new("Part",m)w.Size=Vector3.new(3,4,0.3)w.Position=Vector3.new(b[1]-b[4]/3+wx*b[4]/3,b[2]-b[5]/2+fl*12,b[3]+b[6]/2+0.2)w.Anchored=true w.BrickColor=BrickColor.new("Pastel light blue")w.Material=Enum.Material.Glass w.Transparency=0.3 end end +end +print("S2_OK") +""") +print(" OK" if ok else " FAIL") +time.sleep(3) + +# Step 3: Street props +print("[3/7] Street lights, cars, trees...", end="", flush=True) +ok, _ = inject_lua(""" +for i=-350,350,50 do for _,s in ipairs({1,-1})do +local p=Instance.new("Part",workspace)p.Size=Vector3.new(0.5,12,0.5)p.Position=Vector3.new(i+s*15,6,s*15)p.Anchored=true p.BrickColor=BrickColor.new("Dark stone grey")p.Material=Enum.Material.Metal +local b=Instance.new("Part",workspace)b.Size=Vector3.new(2,1,2)b.Position=Vector3.new(i+s*15,12.5,s*15)b.Anchored=true b.BrickColor=BrickColor.new("New Yeller")b.Material=Enum.Material.Neon +Instance.new("PointLight",b).Brightness=2 end end +local cc={"Bright red","Bright blue","White","Black","Bright green"} +for i=1,15 do local x,z=math.random(-300,300),math.random(-300,300)if math.abs(x)<20 or math.abs(z)<20 then x=x+30 end +local c=Instance.new("Model",workspace)c.Name="Car"..i +local bd=Instance.new("Part",c)bd.Size=Vector3.new(5,2,10)bd.Position=Vector3.new(x,1.5,z)bd.Anchored=true bd.BrickColor=BrickColor.new(cc[math.random(#cc)]) +Instance.new("Part",c).Size=Vector3.new(4,1.5,5)c[2].Position=Vector3.new(x,3,z-1)c[2].Anchored=true c[2].BrickColor=BrickColor.new("Glass")c[2].Material=Enum.Material.Glass c[2].Transparency=0.5 end +for i=1,20 do local x,z=math.random(-350,350),math.random(-350,350)if math.abs(x)<25 then x=x+40 end +local tr=Instance.new("Part",workspace)tr.Size=Vector3.new(1,6,1)tr.Position=Vector3.new(x,3,z)tr.Anchored=true tr.BrickColor=BrickColor.new("Brown") +local lv=Instance.new("Part",workspace)lv.Size=Vector3.new(6,5,6)lv.Position=Vector3.new(x,8,z)lv.Anchored=true lv.BrickColor=BrickColor.new("Dark green")lv.Material=Enum.Material.Grass lv.Shape=Enum.PartType.Ball end +for _,w in ipairs({{0,10,0,800,20,2,0,400},{0,10,0,800,20,2,0,-400},{0,10,0,2,20,800,400,0},{0,10,0,2,20,800,-400,0}})do +local wl=Instance.new("Part",workspace)wl.Size=Vector3.new(w[4],w[5],w[6])wl.Position=Vector3.new(w[7],w[2],w[8])wl.Anchored=true wl.BrickColor=BrickColor.new("Dark stone grey")wl.Transparency=0.5 end +print("S3_OK") +""") +print(" OK" if ok else " FAIL") +time.sleep(3) + +# Step 4: Weapon data + events +print("[4/7] Weapon data + events...", end="", flush=True) +ok, _ = inject_lua(""" +local sh=Instance.new("Folder",game.ReplicatedStorage)sh.Name="Shared"local ev=Instance.new("Folder",game.ReplicatedStorage)ev.Name="Events" +for _,n in ipairs({"HitEvent","KillEvent","DamageEvent","HitMarkerEvent"})do Instance.new("RemoteEvent",ev).Name=n end +local wd=Instance.new("ModuleScript",sh)wd.Name="WeaponData" +wd.Source=[[local W={ +{n="M4A1",d=28,h=2.5,f=.09,m=30,r=2.2,s=.02,a=.007,rc=.3,rn=350,auto=true}, +{n="AK-47",d=32,h=2.5,f=.11,m=30,r=2.5,s=.03,a=.012,rc=.45,rn=300,auto=true}, +{n="SCAR-H",d=38,h=2.5,f=.1,m=20,r=2.6,s=.022,a=.009,rc=.4,rn=400,auto=true}, +{n="ACR 6.8",d=30,h=2.5,f=.075,m=30,r=2,s=.015,a=.005,rc=.25,rn=380,auto=true}, +{n="MP7",d=22,h=2,f=.06,m=40,r=1.8,s=.03,a=.012,rc=.12,rn=140,auto=true}, +{n="MP5",d=21,h=2,f=.07,m=30,r=1.7,s=.032,a=.014,rc=.15,rn=150,auto=true}, +{n="AWP",d=120,h=3,f=1.5,m=10,r=3.5,s=.001,a=0,rc=2.5,rn=900,auto=false,zm=8}, +{n="Intervention",d=98,h=3,f=1.2,m=5,r=3,s=.002,a=0,rc=3,rn=850,auto=false,zm=10}, +{n="SPAS-12",d=18,h=1.5,f=.85,m=8,r=3,s=.09,a=.07,rc=1.5,rn=45,auto=false,pel=8}, +{n="RPG-7",d=250,h=1,f=2.5,m=1,r=4.5,s=.01,a=.005,rc=3.5,rn=250,auto=false,expl=true,bl=25}, +}return W]] +print("S4_OK") +""") +print(" OK" if ok else " FAIL") +time.sleep(3) + +# Step 5: Use the existing inject_cod_final.py parts 6-8 for server/HUD/weapons +# These are already tested and working - inject via bg_inject.ps1 +print("[5/7] Game server + human enemies...", end="", flush=True) +ok, _ = inject_lua(r""" +for _,v in pairs(game.ServerScriptService:GetChildren())do v:Destroy()end +local s=Instance.new("Script",game.ServerScriptService)s.Name="GameServer" +s.Source=[[ +local RS=game.ReplicatedStorage local P=game.Players local E=RS:WaitForChild("Events") +P.PlayerAdded:Connect(function(pl) +local ls=Instance.new("Folder",pl)ls.Name="leaderstats"Instance.new("IntValue",ls).Name="Kills"ls.Kills.Value=0 Instance.new("IntValue",ls).Name="Deaths" +pl.CharacterAdded:Connect(function(c)local h=c:WaitForChild("Humanoid")h.MaxHealth=100 h.Health=100 h.WalkSpeed=20 +h.Died:Connect(function()ls.Deaths.Value=ls.Deaths.Value+1 task.delay(4,function()if pl and pl.Parent then pl:LoadCharacter()end end)end)end)end) +E.HitEvent.OnServerEvent:Connect(function(pl,hp,dmg,hs) +if hp and hp.Parent and hp.Parent:FindFirstChild("Humanoid")then local hm=hp.Parent.Humanoid +if hm and hm.Health>0 then local d=hs and dmg*2.5 or dmg hm:TakeDamage(d)E.HitMarkerEvent:FireClient(pl,hs) +if hm.Health<=0 then E.KillEvent:FireClient(pl,"Enemy")pl.leaderstats.Kills.Value=pl.leaderstats.Kills.Value+1 end end end end) +local SP={Vector3.new(-300,3,-300),Vector3.new(300,3,-300),Vector3.new(-300,3,300),Vector3.new(300,3,300),Vector3.new(0,3,-350),Vector3.new(0,3,350),Vector3.new(-350,3,0),Vector3.new(350,3,0),Vector3.new(-200,3,-200),Vector3.new(200,3,200),Vector3.new(-100,3,100),Vector3.new(100,3,-100),Vector3.new(-250,3,150),Vector3.new(250,3,-150),Vector3.new(0,3,0)} +local skinT={"Medium stone grey","Light stone grey","Pastel brown","Brick yellow","White","Brown"} +local shirtC={"Bright red","Bright blue","White","Black","Bright green","Dark green","Navy blue"} +local pantC={"Dark stone grey","Black","Dark blue","Brown"} +local function mkH(sp) +local sk=skinT[math.random(#skinT)]local sh=shirtC[math.random(#shirtC)]local pn=pantC[math.random(#pantC)] +local m=Instance.new("Model",workspace)m.Name="EnemyBot" +local rp=Instance.new("Part",m)rp.Name="HumanoidRootPart"rp.Size=Vector3.new(2,2,1)rp.Position=sp rp.Transparency=1 rp.CanCollide=false +local ts=Instance.new("Part",m)ts.Name="Torso"ts.Size=Vector3.new(2,2,1)ts.BrickColor=BrickColor.new(sh) +local hd=Instance.new("Part",m)hd.Name="Head"hd.Size=Vector3.new(2,2,1)hd.BrickColor=BrickColor.new(sk) +local la=Instance.new("Part",m)la.Name="Left Arm"la.Size=Vector3.new(1,2,1)la.BrickColor=BrickColor.new(sk) +local ra=Instance.new("Part",m)ra.Name="Right Arm"ra.Size=Vector3.new(1,2,1)ra.BrickColor=BrickColor.new(sk) +local ll=Instance.new("Part",m)ll.Name="Left Leg"ll.Size=Vector3.new(1,2,1)ll.BrickColor=BrickColor.new(pn) +local rl=Instance.new("Part",m)rl.Name="Right Leg"rl.Size=Vector3.new(1,2,1)rl.BrickColor=BrickColor.new(pn) +local gn=Instance.new("Part",m)gn.Name="GunModel"gn.Size=Vector3.new(.3,.3,2)gn.CanCollide=false gn.BrickColor=BrickColor.new("Dark stone grey")gn.Material=Enum.Material.Metal +local hm=Instance.new("Humanoid",m)hm.MaxHealth=100 hm.Health=100 hm.WalkSpeed=14 +for _,a in ipairs({{rp,ts,0},{ts,hd,1.5},{ts,la,-1.5},{ts,ra,1.5},{ts,ll,-.5},{ts,rl,.5}})do local w=Instance.new("Weld")w.Part0=a[1]w.Part1=a[2]w.C0=CFrame.new(a[3]==0 and 0 or (a[3]==1.5 and 0 or a[3]),a[4]==0 and 0 or (a[4]==1.5 and a[4] or 0),0)w.Parent=a[1]end +local tp=SP[math.random(#SP)]local ls=0 +hm.Died:Connect(function()task.delay(5,function()if m.Parent then m:Destroy()end end)task.delay(12,function()mkH(SP[math.random(#SP)])end)end) +spawn(function()while m.Parent and hm.Health>0 do task.wait(.4)local r=m:FindFirstChild("HumanoidRootPart")if r then hm:MoveTo(tp)if(r.Position-tp).Magnitude<8 then tp=SP[math.random(#SP)]end end end end) +spawn(function()while m.Parent and hm.Health>0 do task.wait(.2)local r=m:FindFirstChild("HumanoidRootPart")if not r then continue end for _,pl in ipairs(P:GetPlayers())do if pl.Character and pl.Character:FindFirstChild("HumanoidRootPart")then local d=(pl.Character.HumanoidRootPart.Position-r.Position).Magnitude if d<80 then hm:MoveTo(pl.Character.HumanoidRootPart.Position)if d<55 and tick()-ls>1 then ls=tick()local ph=pl.Character:FindFirstChild("Humanoid")if ph and ph.Health>0 then ph:TakeDamage(5+math.random(10))E.DamageEvent:FireClient(pl,8)end end end end end end end) +end +for i=1,15 do task.delay(i*.3,function()mkH(SP[i])end)end +]] +print("S5_OK") +""") +print(" OK" if ok else " FAIL") +time.sleep(3) + +# Step 6: HUD +print("[6/7] HUD...", end="", flush=True) +ok, _ = inject_lua(""" +for _,v in pairs(game.StarterGui:GetChildren())do v:Destroy()end +local h=Instance.new("ScreenGui",game.StarterGui)h.Name="COD_HUD"h.ResetOnSpawn=false +local c1=Instance.new("Frame",h)c1.Size=UDim2.new(0,24,0,2)c1.Position=UDim2.new(0.5,-12,0.5,-1)c1.BackgroundColor3=Color3.new(1,1,1)c1.BorderSizePixel=0 +local c2=Instance.new("Frame",h)c2.Size=UDim2.new(0,2,0,24)c2.Position=UDim2.new(0.5,-1,0.5,-12)c2.BackgroundColor3=Color3.new(1,1,1)c2.BorderSizePixel=0 +local hf=Instance.new("Frame",h)hf.Size=UDim2.new(0,260,0,32)hf.Position=UDim2.new(0,15,1,-55)hf.BackgroundColor3=Color3.fromRGB(0,0,0)hf.BackgroundTransparency=0.4 hf.BorderSizePixel=0 +local hfl=Instance.new("Frame",hf)hfl.Name="Fill"hfl.Size=UDim2.new(1,0,1,0)hfl.BackgroundColor3=Color3.fromRGB(0,180,0)hfl.BorderSizePixel=0 +local htx=Instance.new("TextLabel",hf)htx.Size=UDim2.new(1,0,1,0)htx.BackgroundTransparency=1 htx.TextColor3=Color3.new(1,1,1)htx.TextStrokeTransparency=0.5 htx.Font=Enum.Font.GothamBold htx.TextSize=16 htx.Text="100" +local af=Instance.new("Frame",h)af.Name="Ammo_Frame"af.Size=UDim2.new(0,220,0,65)af.Position=UDim2.new(1,-235,1,-75)af.BackgroundTransparency=1 +local at=Instance.new("TextLabel",af)at.Name="AmmoTxt"at.Size=UDim2.new(1,0,0.6,0)at.BackgroundTransparency=1 at.TextColor3=Color3.new(1,1,1)at.TextStrokeTransparency=0.5 at.Font=Enum.Font.GothamBold at.TextSize=30 at.TextXAlignment=Enum.TextXAlignment.Right at.Text="30 | 30" +local wn=Instance.new("TextLabel",af)wn.Name="WepName"wn.Size=UDim2.new(1,0,0.4,0)wn.Position=UDim2.new(0,0,.6,0)wn.BackgroundTransparency=1 wn.TextColor3=Color3.fromRGB(180,180,180)wn.Font=Enum.Font.Gotham wn.TextSize=13 wn.TextXAlignment=Enum.TextXAlignment.Right wn.Text="M4A1" +local sf=Instance.new("Frame",h)sf.Name="ScoreFrame"sf.Size=UDim2.new(0,180,0,36)sf.Position=UDim2.new(0.5,-90,0,8)sf.BackgroundColor3=Color3.fromRGB(0,0,0)sf.BackgroundTransparency=0.5 sf.BorderSizePixel=0 +local st=Instance.new("TextLabel",sf)st.Name="ScoreTxt"st.Size=UDim2.new(1,0,1,0)st.BackgroundTransparency=1 st.TextColor3=Color3.new(1,1,1)st.Font=Enum.Font.GothamBold st.TextSize=18 st.Text="KILLS: 0" +local rb=Instance.new("Frame",h)rb.Name="ReloadBar"rb.Size=UDim2.new(0,180,0,5)rb.Position=UDim2.new(0.5,-90,1,-100)rb.BackgroundColor3=Color3.fromRGB(50,50,50)rb.BorderSizePixel=0 rb.Visible=false rb.BackgroundTransparency=0.3 +Instance.new("Frame",rb).Name="Fill"rb.Fill.Size=UDim2.new(0,0,1,0)rb.Fill.BackgroundColor3=Color3.fromRGB(255,200,0)rb.Fill.BorderSizePixel=0 +print("S6_OK") +""") +print(" OK" if ok else " FAIL") +time.sleep(3) + +# Step 7: Player scripts (same as inject_cod_final.py step 6+7) +print("[7/7] Player + weapon controller...", end="", flush=True) +ok, _ = inject_lua(r""" +for _,v in pairs(game.StarterPlayer.StarterPlayerScripts:GetChildren())do v:Destroy()end +local ps=Instance.new("LocalScript",game.StarterPlayer.StarterPlayerScripts)ps.Name="PlayerSetup" +ps.Source=[[local P=game.Players local RS=game.RunService local UI=game.UserInputService local pl=P.LocalPlayer cam=workspace.CurrentCamera +pl.CharacterAdded:Connect(function(c)local h=c:WaitForChild("Humanoid")h.MaxHealth=100 h.Health=100 h.WalkSpeed=20 +RS.RenderStepped:Connect(function()if h.Health>0 then cam.CameraType=Enum.CameraType.LockFirstPerson local hd=c:FindFirstChild("Head")if hd then cam.CFrame=hd.CFrame end end end) +local sp,cr=false,false UI.InputBegan:Connect(function(i,g)if g then return end if i.KeyCode==Enum.KeyCode.LeftShift then sp=true h.WalkSpeed=30 elseif i.KeyCode==Enum.KeyCode.LeftControl then cr=true h.WalkSpeed=10 end end) +UI.InputEnded:Connect(function(i)if i.KeyCode==Enum.KeyCode.LeftShift then sp=false h.WalkSpeed=cr and 10 or 20 elseif i.KeyCode==Enum.KeyCode.LeftControl then cr=false h.WalkSpeed=sp and 30 or 20 end end)end) +]] +local wc=Instance.new("LocalScript",game.StarterPlayer.StarterPlayerScripts)wc.Name="WeaponCtrl" +wc.Source=[[ +local P=game.Players local RS=game.RunService local UI=game.UserInputService local RepS=game.ReplicatedStorage local TS=game.TweenService local D=game.Debris +local pl=P.LocalPlayer cam=workspace.CurrentCamera ms=pl:GetMouse() +local E=RepS:WaitForChild("Events")local HE=E.HitEvent KE=E.KillEvent HME=E.HitMarkerEvent +local WD=require(RepS:WaitForChild("Shared"):WaitForChild("WeaponData")) +local ci=1 ammo={} isR=false isA=false canS=true ro=0 so=0 kills=0 holdM=false +for i,w in ipairs(WD)do ammo[i]=w.m end +local function hud()return pl.PlayerGui:FindFirstChild("COD_HUD")end +local function sw(idx)if idx<1 or idx>#WD or isR then return end ci=idx local w=WD[ci]isA=false cam.FieldOfView=70 ro=0 so=0 local h=hud()if h then h.Ammo_Frame.AmmoTxt.Text=ammo[ci].." | "..w.m h.Ammo_Frame.WepName.Text=w.n end end +UI.InputBegan:Connect(function(i,g)if g then return end +if i.KeyCode.Value>=48 and i.KeyCode.Value<=57 then local idx=i.KeyCode.Value-47 if idx>0 and idx<=10 then sw(idx==10 and 10 or idx)end end +if i.UserInputType==Enum.UserInputType.MouseButton2 then local w=WD[ci]if w.zm then isA=true cam.FieldOfView=70/w.zm else isA=true TS:Create(cam,TweenInfo.new(.15),{FieldOfView=50}):Play()end end +if i.KeyCode==Enum.KeyCode.R and not isR then local w=WD[ci]if ammo[ci]1 then d=dir+Vector3.new((math.random()-.5)*w.s*2,(math.random()-.5)*w.s*2,(math.random()-.5)*w.s*2).Unit end +local r=workspace:Raycast(hd.Position,d*w.rn,rp)if r then local hp=r.Instance local hs=hp.Name=="Head"local tr=Instance.new("Part",workspace)tr.Size=Vector3.new(.1,.1,(r.Position-hd.Position).Magnitude)tr.CFrame=CFrame.lookAt(hd.Position,r.Position)*CFrame.new(0,0,-tr.Size.Z/2)tr.Anchored=true tr.CanCollide=false tr.BrickColor=BrickColor.new("New Yeller")tr.Material=Enum.Material.Neon tr.Transparency=.4 D:AddItem(tr,.12) +if w.expl then local ex=Instance.new("Explosion",workspace)ex.Position=r.Position ex.BlastRadius=w.bl or 25 end +if hp.Parent and hp.Parent:FindFirstChild("Humanoid")then local hm=hp.Parent.Humanoid if hm and hm.Health>0 then local dm=hs and w.d*w.h or w.d HE:FireServer(hp,dm,hs)if hm.Health<=0 then kills=kills+1 local h=hud()if h then h.ScoreFrame.ScoreTxt.Text="KILLS: "..kills end KE:FireServer("Enemy")end end end end end +ro=math.min(ro+w.rc,w.rc*5)so=math.min(so+w.s*.5,w.s*3) +if ammo[ci]<=0 then task.delay(.2,function()if ammo[ci]<=0 and not isR then isR=true canS=false local ww=WD[ci]local h=hud()if h then h.ReloadBar.Visible=true local f=h.ReloadBar.Fill f.Size=UDim2.new(0,0,1,0)TS:Create(f,TweenInfo.new(ww.r),{Size=UDim2.new(1,0,1,0)}):Play()end task.delay(ww.r,function()ammo[ci]=ww.m isR=false canS=true local h=hud()if h then h.ReloadBar.Visible=false h.Ammo_Frame.AmmoTxt.Text=ammo[ci].." | "..ww.m end end)end end)end end +UI.InputBegan:Connect(function(i,g)if g then return end if i.UserInputType==Enum.UserInputType.MouseButton1 then holdM=true local w=WD[ci]if w.auto then spawn(function()while holdM and canS do shoot()task.wait(w.f)end end)else shoot()end end end) +UI.InputEnded:Connect(function(i)if i.UserInputType==Enum.UserInputType.MouseButton1 then holdM=false end end) +RS.RenderStepped:Connect(function()ro=math.max(ro-.12,0)so=math.max(so-.008,0)end)sw(1) +]] +print("S7_OK") +""") +print(" OK" if ok else " FAIL") +time.sleep(3) + +# Start play mode +print("\n[F5] Starting Play mode...", end="", flush=True) +ok, _ = inject_lua('game:GetService("VirtualInputManager"):SendKeyEvent(true,Enum.KeyCode.F5,false,game)task.wait(.1)game:GetService("VirtualInputManager"):SendKeyEvent(false,Enum.KeyCode.F5,false,game)') +print(" OK" if ok else " FAIL") + +print("\n" + "=" * 55) +print(" GTA CITY + 10 COD WEAPONS + 15 HUMAN ENEMIES") +print(" 100% BACKGROUND INJECTION - no clicks needed!") +print("=" * 55) +print(" WASD=Move LMB=Shoot RMB=ADS R=Reload") +print(" Shift=Sprint Ctrl=Crouch") +print(" 1-4=AR 5-6=SMG 7-8=Sniper 9=SPAS 0=RPG") +print("=" * 55) diff --git a/inject_gta_bg.py b/inject_gta_bg.py new file mode 100644 index 0000000..06415a4 --- /dev/null +++ b/inject_gta_bg.py @@ -0,0 +1,39 @@ +"""GTA City + COD Weapons + Human Enemies - Full Background Injection""" +import bg_inject, time + +scripts = [ + ("Clean+Ground+Roads", "roblox-gta-s1-ground.lua"), + ("Buildings", "roblox-gta-s2-buildings.lua"), + ("StreetProps", "roblox-gta-s3-props.lua"), + ("Weapons+Events", "roblox-gta-s4-weapons.lua"), + ("Server+Enemies", "roblox-gta-s5-server.lua"), + ("HUD", "roblox-gta-s6-hud.lua"), + ("PlayerCtrl", "roblox-gta-s7-player.lua"), + ("WeaponCtrl", "roblox-gta-s8-weaponctrl.lua"), +] + +lua_dir = r"C:\Users\Admin" + +for i, (name, filename) in enumerate(scripts, 1): + path = f"{lua_dir}\\{filename}" + print(f"[{i}/{len(scripts)}] {name}...", end="", flush=True) + + if not bg_inject.inject(open(path, encoding="utf-8").read())[0]: + print(" FAILED") + break + print(" OK") + time.sleep(3) + +# Start play mode +print("\nStarting Play mode...") +ok, msg = bg_inject.inject('game:GetService("VirtualInputManager"):SendKeyEvent(true,Enum.KeyCode.F5,false,game)task.wait(.1)game:GetService("VirtualInputManager"):SendKeyEvent(false,Enum.KeyCode.F5,false,game)') +print(msg) + +print("\n" + "=" * 55) +print(" GTA CITY + COD WEAPONS + HUMAN ENEMIES") +print(" 100% Background Injection - no clicks needed!") +print("=" * 55) +print(" WASD=Move LMB=Shoot RMB=ADS R=Reload") +print(" Shift=Sprint Ctrl=Crouch") +print(" 1-4=AR 5-6=SMG 7-8=Sniper 9=SPAS 0=RPG") +print("=" * 55)