if not game:IsLoaded() then game.Loaded:Wait() end task.wait(2) local Hub = "Hina Hub" local Discord_Invite = "NZHwScVxv3" local Linkvertise_Link = "https://ads.luarmor.net/get_key?for=Hina_Hub-PQmcKkkVQYbm" -- Script configurations per game local Scripts = { [76285745979410] = { name = "Anime Card Collection", script_id = "9efd7aeb253b0c53236b2a1f600e7124", description = "" }, [130247632398296] = { name = "Anime Fighting Simulator Endless", script_id = "a8ab07c9581584c7d03ec6b1f46cc219", description = "" }, [73277298613633] = { name = "Anime Fighting Simulator Endless", script_id = "892707091dc21755851ef0116a11d693", description = "" }, [130253630950453] = { name = "Anime Card Battle X ", script_id = "1e1af645f3b86af24fc58e3375b70f81", description = "" }, [110829983956014] = { name = "Anime Card Clash", script_id = "faec2e5ab410523753d5ba96ef3362ed", description = "Anime CARD CLASH" }, [79305036070450] = { name = "Spin A Baddie", script_id = "36c6169a212629563329011d574698a2", description = "Steal a Baddie" }, [101640913672688] = { name = "Anime Ghost", script_id = "3d92f8b30257fddaba283735a48c1eb4", description = "Ghost" }, [119091684252491] = { name = "Sorcerer Tycoon", script_id = "c470444ffb23c6e8410bc2fddf0f7f8b", description = "Sorcerer" }, [79910556932462] = { name = "Sorcerer Tycoon", script_id = "c470444ffb23c6e8410bc2fddf0f7f8b", description = "Sorcerer" }, [90738171169572] = { name = "Anime Tactical Simulator", script_id = "ec2f99d8cb00cd026f2a9579d9c35fba", description = "Tactical" }, } -- Check if game is supported local currentGame = Scripts[game.PlaceId] if not currentGame then game:GetService("StarterGui"):SetCore("SendNotification", { Title = "Hina Hub", Text = "This game is not supported!", Duration = 5 }) return end makefolder(Hub) -- Universal key path (one key for all games) local key_path = Hub .. "/Universal_Key.txt" local saved_key = isfile(key_path) and readfile(key_path) or "" -- Use the current game's script_id for API validation local API = loadstring(game:HttpGet( "https://sdkAPI-public.luarmor.net/library.lua" ))() API.script_id = currentGame.script_id local Players = game:GetService("Players") local HttpService = game:GetService("HttpService") local Request = http_request or request or syn.request or http local function safeDeleteFile(path) local success = pcall(function() if delfile then delfile(path) elseif deletefile then deletefile(path) elseif writefile then writefile(path, "") end end) return success end -- Helper: try validating a key against all game script_ids local function validateKeyUniversal(key) for placeId, data in pairs(Scripts) do local tempAPI = loadstring(game:HttpGet( "https://sdkAPI-public.luarmor.net/library.lua" ))() tempAPI.script_id = data.script_id local status = tempAPI.check_key(key) if status.code == "KEY_VALID" then return true, data.script_id, status end end return false, nil, nil end -- Helper: load the script with the correct script_id local function loadWithScriptId(scriptId) local loadAPI = loadstring(game:HttpGet( "https://sdkAPI-public.luarmor.net/library.lua" ))() loadAPI.script_id = currentGame.script_id loadAPI.check_key(script_key) loadAPI.load_script() end -- Try script_key global first if script_key and script_key ~= "" then local premiumStatus = API.check_key(script_key) if premiumStatus.code == "KEY_VALID" then writefile(key_path, script_key) API.load_script() return else -- Try against all games in case key belongs to a different script_id local valid, validScriptId = validateKeyUniversal(script_key) if valid then writefile(key_path, script_key) -- Still load the current game's script API.script_id = currentGame.script_id local recheck = API.check_key(script_key) if recheck.code == "KEY_VALID" then API.load_script() return end end end end -- Try saved universal key if saved_key ~= "" then script_key = saved_key local tempStatus = API.check_key(saved_key) if tempStatus.code == "KEY_VALID" then API.load_script() return else -- Try against all games local valid, validScriptId = validateKeyUniversal(saved_key) if valid then API.script_id = currentGame.script_id local recheck = API.check_key(saved_key) if recheck.code == "KEY_VALID" then API.load_script() return end end -- Key invalid everywhere, clean up safeDeleteFile(key_path) saved_key = "" script_key = nil end end local UI = loadstring(game:HttpGet( "https://github.com/dawid-scripts/Fluent/releases/latest/download/main.lua" ))() local function notify(title, content, duration) UI:Notify({ Title = title, Content = content, Duration = duration or 8 }) end local function checkKey(input_key) -- First try against the current game local status = API.check_key(input_key) if status.code == "KEY_VALID" then script_key = input_key writefile(key_path, input_key) notify("Success", "Key valid! Loading script...", 3) task.wait(1) UI:Destroy() API.load_script() return true elseif status.code == "KEY_HWID_LOCKED" then notify("Error", "Key locked to another device!", 5) return false elseif status.code == "KEY_INCORRECT" or status.code == "KEY_INVALID" then -- Key didn't work for this game, try all other games local valid, validScriptId = validateKeyUniversal(input_key) if valid then -- Key is valid for another game but not this one notify("Error", "This key is valid but not for " .. currentGame.name .. ".\nIt may belong to a different game's script.", 5) else notify("Error", "Invalid or incorrect key!", 5) end return false else notify("Error", status.message or "Unknown error", 5) return false end end -- UI Window local Window = UI:CreateWindow({ Title = Hub, SubTitle = currentGame.name .. " | " .. currentGame.description, TabWidth = 160, Size = UDim2.fromOffset(580, 350), Acrylic = false, Theme = "Dark", MinimizeKey = Enum.KeyCode.End }) local Tab = Window:AddTab({ Title = "Key", Icon = "" }) Tab:AddParagraph({ Title = "Universal Key", Content = "One key works for all supported games!" }) local Input = Tab:AddInput("KeyInput", { Title = "Enter Key", Default = "", Placeholder = "Paste your universal key here", Numeric = false, Finished = false }) Tab:AddButton({ Title = "Check Key", Callback = function() if Input.Value == "" then notify("Error", "Please enter a key!", 3) return end notify("Checking", "Validating key...", 2) checkKey(Input.Value) end }) Tab:AddButton({ Title = "Get Key (Linkvertise)", Callback = function() setclipboard(Linkvertise_Link) notify("Copied", "Key link copied to clipboard!", 5) end }) Tab:AddButton({ Title = "Join Discord", Callback = function() setclipboard("https://discord.gg/" .. Discord_Invite) pcall(function() Request({ Url = "http://127.0.0.1:6463/rpc?v=1", Method = "POST", Headers = { ["Content-Type"] = "application/json", ["origin"] = "https://discord.com" }, Body = HttpService:JSONEncode({ cmd = "INVITE_BROWSER", args = { code = Discord_Invite }, nonce = "." }) }) end) notify("Copied", "Discord link copied!", 5) end }) -- Info Tab local InfoTab = Window:AddTab({ Title = "Info", Icon = "" }) InfoTab:AddParagraph({ Title = "Supported Games", Content = (function() local list = "" for placeId, data in pairs(Scripts) do list = list .. data.name .. " - " .. data.description .. "\n" end return list end)() }) InfoTab:AddParagraph({ Title = "Credits", Content = "Hina Hub\nDiscord: discord.gg/" .. Discord_Invite }) Window:SelectTab(1) notify(Hub, "Loading " .. currentGame.name, 5)