local H = game:GetService("HttpService") local P = game:GetService("Players") local R = game:GetService("ReplicatedStorage") local T = game:GetService("TextChatService") local UIS = game:GetService("UserInputService") local p = P.LocalPlayer local pg = p:WaitForChild("PlayerGui") -- Eski UI temizle if pg:FindFirstChild("ECHO_HAX") then pg.ECHO_HAX:Destroy() end local chatHistory = {} local MyLang, TargetLang, TargetLangName, UILang = "tr", "en", "ENGLISH", "tr" local currentOverlayMode = "" local isOpened = true -- 🌍 UI Sözlüğü local dict = { ["en"] = {my="MY:", tg="TARGET:", lg="LOGS", sn="SEND", ui="UI:", bk="BACK", se="Search...", ph="Type here..."}, ["tr"] = {my="BENİM:", tg="HEDEF:", lg="GEÇMİŞ", sn="GÖNDER", ui="DİL:", bk="GERİ", se="Ara...", ph="Buraya yaz..."} } setmetatable(dict, {__index = function() return dict["en"] end}) local langList = {{"ENGLISH", "en"}, {"TURKISH", "tr"}, {"CHINESE", "zh-CN"}, {"HINDI", "hi"}, {"SPANISH", "es"}, {"FRENCH", "fr"}, {"ARABIC", "ar"}, {"BENGALI", "bn"}, {"PORTUGUESE", "pt"}, {"RUSSIAN", "ru"}, {"URDU", "ur"}, {"INDONESIAN", "id"}, {"GERMAN", "de"}, {"JAPANESE", "ja"}, {"VIETNAMESE", "vi"}, {"TAGALOG", "tl"}, {"KOREAN", "ko"}, {"PERSIAN", "fa"}, {"HAUSA", "ha"}, {"ITALIAN", "it"}, {"POLISH", "pl"}, {"GREEK", "el"}, {"TELUGU", "te"}, {"MARATHI", "mr"}, {"TAMIL", "ta"}} -- ⚡ AKIŞKAN SÜRÜKLEME (SMOOTH DRAG) local function SmoothDrag(frame) local dragging, dragInput, dragStart, startPos frame.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true; dragStart = input.Position; startPos = frame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) frame.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) UIS.InputChanged:Connect(function(input) if input == dragInput and dragging then local delta = input.Position - dragStart frame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) end -- 🔄 ÇEVİRİ MOTORU local function Translate(text, to) local url = "https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl="..to.."&dt=t&q="..H:UrlEncode(text) local success, res = pcall(function() return (request or syn.request or http_request)({Url = url, Method = "GET"}).Body end) if success and res then return H:JSONDecode(res)[1][1][1] end return text end -- 🏗️ UI TEMEL local sg = Instance.new("ScreenGui", pg); sg.Name = "ECHO_HAX"; sg.ResetOnSpawn = false local main = Instance.new("Frame", sg) main.Size = UDim2.new(0, 400, 0, 460); main.Position = UDim2.new(0.5, -200, 0.5, -230); main.BackgroundColor3 = Color3.fromRGB(15, 15, 15); main.Active = true Instance.new("UIStroke", main).Color = Color3.fromRGB(0, 255, 150) Instance.new("UICorner", main) SmoothDrag(main) -- 🏷️ BAŞLIK (ECHO HAX) local title = Instance.new("TextLabel", main) title.Size = UDim2.new(1, 0, 0, 30); title.Position = UDim2.new(0, 0, 0, 5); title.BackgroundTransparency = 1; title.Text = "ECHO HAX"; title.TextColor3 = Color3.fromRGB(0, 255, 150); title.Font = "GothamBold"; title.TextSize = 18 -- 🔴 NEON + BUTONU local mini = Instance.new("TextButton", sg) mini.Size = UDim2.new(0, 40, 0, 40); mini.Position = main.Position; mini.BackgroundColor3 = Color3.fromRGB(255, 0, 0) mini.Text = "+"; mini.TextColor3 = Color3.new(1, 1, 1); mini.Font = "GothamBold"; mini.TextSize = 25; mini.Visible = false; mini.Active = true Instance.new("UICorner", mini).CornerRadius = UDim.new(0.5, 0) local glow = Instance.new("UIStroke", mini); glow.Color = Color3.fromRGB(255, 0, 0); glow.Thickness = 3; glow.Transparency = 0.3 SmoothDrag(mini) local function bBtn(t, p, s, c, par, zi) local b = Instance.new("TextButton", par) b.Text = t; b.Position = p; b.Size = s; b.BackgroundColor3 = c; b.TextColor3 = Color3.new(1,1,1); b.Font = "GothamBold"; b.TextSize = 13; b.ZIndex = zi or 10 Instance.new("UICorner", b); return b end local d = dict[UILang] local s1 = bBtn(d.my.." TR", UDim2.new(0.05, 0, 0.12, 0), UDim2.new(0.43, 0, 0, 40), Color3.fromRGB(30, 30, 30), main) local s2 = bBtn(d.tg.." EN", UDim2.new(0.52, 0, 0.12, 0), UDim2.new(0.43, 0, 0, 40), Color3.fromRGB(0, 150, 100), main) local box = Instance.new("TextBox", main); box.Size = UDim2.new(0.9, 0, 0, 100); box.Position = UDim2.new(0.05, 0, 0.24, 0); box.BackgroundColor3 = Color3.fromRGB(25, 25, 25); box.TextColor3 = Color3.new(1, 1, 1); box.TextWrapped = true; box.TextSize = 16; box.PlaceholderText = d.ph; box.Text = "" Instance.new("UICorner", box) local lBtn = bBtn(d.lg, UDim2.new(0.05, 0, 0.50, 0), UDim2.new(0.9, 0, 0, 40), Color3.fromRGB(70, 40, 150), main) local snd = bBtn(d.sn, UDim2.new(0.05, 0, 0.62, 0), UDim2.new(0.9, 0, 0, 50), Color3.fromRGB(0, 120, 255), main) local uiBtn = bBtn(d.ui.." "..UILang:upper(), UDim2.new(0.05, 0, 0.77, 0), UDim2.new(0.9, 0, 0, 40), Color3.fromRGB(45, 45, 45), main) local overlay = Instance.new("Frame", main); overlay.Size = UDim2.new(1, 0, 1, 0); overlay.BackgroundColor3 = Color3.fromRGB(10, 10, 10); overlay.ZIndex = 100; overlay.Visible = false; Instance.new("UICorner", overlay) local back = bBtn(d.bk, UDim2.new(0.05, 0, 0.05, 0), UDim2.new(0.25, 0, 0, 35), Color3.fromRGB(150, 0, 0), overlay, 110) local search = Instance.new("TextBox", overlay); search.Size = UDim2.new(0.6, 0, 0, 35); search.Position = UDim2.new(0.35, 0, 0.05, 0); search.BackgroundColor3 = Color3.fromRGB(30,30,30); search.TextColor3 = Color3.new(1,1,1); search.PlaceholderText = d.se; search.ZIndex = 110; Instance.new("UICorner", search) local scroll = Instance.new("ScrollingFrame", overlay); scroll.Size = UDim2.new(0.9, 0, 0.75, 0); scroll.Position = UDim2.new(0.05, 0, 0.18, 0); scroll.BackgroundTransparency = 1; scroll.ZIndex = 110; scroll.ScrollBarThickness = 4; scroll.CanvasSize = UDim2.new(0,0,0,0) Instance.new("UIListLayout", scroll).Padding = UDim.new(0, 8) -- 🔄 DİL GÜNCELLEME local function UpdateUILanguage() local cur = dict[UILang] s1.Text = cur.my.." "..MyLang:upper() s2.Text = cur.tg.." "..TargetLangName:upper() lBtn.Text = cur.lg; snd.Text = cur.sn; uiBtn.Text = cur.ui.." "..UILang:upper(); back.Text = cur.bk; search.PlaceholderText = cur.se; box.PlaceholderText = cur.ph end local function toggleUI() isOpened = not isOpened if isOpened then main.Position = mini.Position; main.Visible = true; mini.Visible = false else mini.Position = main.Position; main.Visible = false; mini.Visible = true end end mini.MouseButton1Click:Connect(toggleUI) local function render(mode, filter) currentOverlayMode = mode for _, v in pairs(scroll:GetChildren()) do if v:IsA("GuiObject") then v:Destroy() end end if mode == "logs" then for _, item in pairs(chatHistory) do if not filter or item.msg:lower():find(filter:lower()) or item.sender:lower():find(filter:lower()) then local b = bBtn("", UDim2.new(0,0,0,0), UDim2.new(1,-10,0,40), Color3.fromRGB(30,30,30), scroll, 120) local l = Instance.new("TextLabel", b); l.Size = UDim2.new(1,-16,1,0); l.Position = UDim2.new(0,8,0,0); l.BackgroundTransparency = 1; l.TextColor3 = Color3.new(1,1,1); l.Font = "Gotham"; l.TextSize = 12; l.TextWrapped = true; l.TextXAlignment = "Left"; l.ZIndex = 121; l.Text = item.sender..": "..item.msg b.Size = UDim2.new(1,-10,0, math.max(40, l.TextBounds.Y + 14)) b.MouseButton1Click:Connect(function() box.Text = "...Çevriliyor..." task.spawn(function() box.Text = Translate(item.msg, TargetLang) end) overlay.Visible = false; currentOverlayMode = "" end) end end else for _, item in pairs(langList) do if not filter or item[1]:lower():find(filter:lower()) then local b = bBtn(item[1], UDim2.new(0,0,0,0), UDim2.new(1,-10,0,35), Color3.fromRGB(40,40,40), scroll, 120) b.MouseButton1Click:Connect(function() if mode == "my" then MyLang = item[2] elseif mode == "target" then TargetLang = item[2] TargetLangName = item[1] elseif mode == "ui" then UILang = item[2] end UpdateUILanguage() overlay.Visible = false; currentOverlayMode = "" end) end end end scroll.CanvasSize = UDim2.new(0,0,0, scroll.UIListLayout.AbsoluteContentSize.Y + 10) overlay.Visible = true end -- 📝 SINIRSIZ KAYIT SİSTEMİ local function addLog(sender, message) if message == "" or not sender or message:find("Çevriliyor") then return end table.insert(chatHistory, 1, {sender = tostring(sender), msg = tostring(message)}) if overlay.Visible and currentOverlayMode == "logs" then render("logs", search.Text) end end for _, v in pairs(P:GetPlayers()) do v.Chatted:Connect(function(m) addLog(v.DisplayName, m) end) end P.PlayerAdded:Connect(function(v) v.Chatted:Connect(function(m) addLog(v.DisplayName, m) end) end) T.MessageReceived:Connect(function(m) if m.TextSource then addLog(m.TextSource.DisplayName, m.Text) end end) UIS.InputBegan:Connect(function(input, processed) if not processed and input.KeyCode == Enum.KeyCode.Z then toggleUI() end end) lBtn.MouseButton1Click:Connect(function() render("logs") end) s1.MouseButton1Click:Connect(function() render("my") end) s2.MouseButton1Click:Connect(function() render("target") end) uiBtn.MouseButton1Click:Connect(function() render("ui") end) back.MouseButton1Click:Connect(function() overlay.Visible = false; currentOverlayMode = "" end) search:GetPropertyChangedSignal("Text"):Connect(function() render(currentOverlayMode, search.Text) end) snd.MouseButton1Click:Connect(function() if box.Text ~= "" then local txt = box.Text task.spawn(function() local t = Translate(txt, TargetLang) local ch = T.TextChannels:FindFirstChild("RBXGeneral") or T.TextChannels:FindFirstChild("All") if ch then ch:SendAsync(t) else R:FindFirstChild("SayMessageRequest", true):FireServer(t, "All") end end) box.Text = "" end end) bBtn("X", UDim2.new(1,-35,0,5), UDim2.new(0,30,0,30), Color3.fromRGB(200,50,50), main, 10).MouseButton1Click:Connect(toggleUI)