--[[
WARNING: Heads up! This script has not been verified by ScriptBlox. Use at your own risk!
]]
-- =====================================================
-- ACHERON DEMONOLOGY HELPER
-- FIXED VERSION
-- =====================================================
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local Player = Players.LocalPlayer
local CoreGui = game:GetService("CoreGui")
-- =====================================================
-- CLEAN OLD GUI
-- =====================================================
local OldGui = CoreGui:FindFirstChild("AcheronDemonologyHelper")
if OldGui then
OldGui:Destroy()
end
-- =====================================================
-- GUI
-- =====================================================
local AcheronGui = Instance.new("ScreenGui")
AcheronGui.Name = "AcheronDemonologyHelper"
AcheronGui.ResetOnSpawn = false
AcheronGui.Parent = CoreGui
local Main = Instance.new("Frame")
Main.Name = "Main"
Main.Size = UDim2.fromOffset(320, 440)
Main.Position = UDim2.new(0.5, -160, 0.5, -220)
Main.BackgroundColor3 = Color3.fromRGB(20, 20, 25)
Main.BorderSizePixel = 0
Main.Active = true
Main.Parent = AcheronGui
local Corner = Instance.new("UICorner")
Corner.CornerRadius = UDim.new(0, 10)
Corner.Parent = Main
-- =====================================================
-- DRAGGING
-- =====================================================
local dragging = false
local dragStart
local startPosition
Main.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1
or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
dragStart = input.Position
startPosition = Main.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
dragging = false
end
end)
end
end)
UserInputService.InputChanged:Connect(function(input)
if not dragging then
return
end
if input.UserInputType == Enum.UserInputType.MouseMovement
or input.UserInputType == Enum.UserInputType.Touch then
local delta = input.Position - dragStart
Main.Position = UDim2.new(
startPosition.X.Scale,
startPosition.X.Offset + delta.X,
startPosition.Y.Scale,
startPosition.Y.Offset + delta.Y
)
end
end)
-- =====================================================
-- TITLE
-- =====================================================
local Title = Instance.new("TextLabel")
Title.Size = UDim2.new(1, -20, 0, 40)
Title.Position = UDim2.fromOffset(10, 5)
Title.BackgroundTransparency = 1
Title.Text = "Acheron Demonology Helper"
Title.TextColor3 = Color3.fromRGB(255, 255, 255)
Title.TextSize = 20
Title.Font = Enum.Font.GothamBold
Title.TextXAlignment = Enum.TextXAlignment.Left
Title.Parent = Main
-- =====================================================
-- EVIDENCE FRAME
-- =====================================================
local EvidenceFrame = Instance.new("Frame")
EvidenceFrame.Size = UDim2.new(1, -20, 0, 275)
EvidenceFrame.Position = UDim2.fromOffset(10, 48)
EvidenceFrame.BackgroundTransparency = 1
EvidenceFrame.Parent = Main
local Layout = Instance.new("UIListLayout")
Layout.Padding = UDim.new(0, 2)
Layout.Parent = EvidenceFrame
local EvidenceLabels = {}
local EvidenceNames = {
"EMF Level 5",
"Freezing Temperatures",
"Handprints",
"Ghost Orb",
"Spirit Box",
"Inscription",
"Wither",
"Laser Projector"
}
for _, Name in ipairs(EvidenceNames) do
local Label = Instance.new("TextLabel")
Label.Size = UDim2.new(1, 0, 0, 31)
Label.BackgroundTransparency = 1
Label.Text = Name .. ": False"
Label.TextColor3 = Color3.fromRGB(255, 80, 80)
Label.TextSize = 16
Label.Font = Enum.Font.Gotham
Label.TextXAlignment = Enum.TextXAlignment.Left
Label.Parent = EvidenceFrame
EvidenceLabels[Name] = Label
end
-- =====================================================
-- TEMPERATURE
-- =====================================================
local TemperatureLabel = Instance.new("TextLabel")
TemperatureLabel.Size = UDim2.new(1, -20, 0, 30)
TemperatureLabel.Position = UDim2.fromOffset(10, 326)
TemperatureLabel.BackgroundTransparency = 1
TemperatureLabel.Text = "Temperature: --.-°C (Unknown)"
TemperatureLabel.TextColor3 = Color3.fromRGB(255, 80, 80)
TemperatureLabel.TextSize = 16
TemperatureLabel.Font = Enum.Font.Gotham
TemperatureLabel.TextXAlignment = Enum.TextXAlignment.Left
TemperatureLabel.Parent = Main
-- =====================================================
-- GHOST DATABASE
-- =====================================================
local GhostEvidence = {
Aswang = {
"Wither",
"EMF Level 5",
"Inscription"
},
Banshee = {
"Ghost Orb",
"Handprints",
"Freezing Temperatures"
},
Demon = {
"EMF Level 5",
"Handprints",
"Freezing Temperatures"
},
Doppelganger = {
"Freezing Temperatures",
"Inscription",
"Spirit Box"
},
Dullahan = {
"Wither",
"Laser Projector",
"Freezing Temperatures"
},
Dybbuk = {
"Wither",
"Handprints",
"Freezing Temperatures"
},
Entity = {
"Spirit Box",
"Handprints",
"Laser Projector"
},
Ghoul = {
"Spirit Box",
"Freezing Temperatures",
"Ghost Orb"
},
Keres = {
"Wither",
"Handprints",
"Spirit Box"
},
Leviathan = {
"Ghost Orb",
"Inscription",
"Handprints"
},
Nightmare = {
"EMF Level 5",
"Spirit Box",
"Ghost Orb"
},
Oni = {
"Spirit Box",
"Freezing Temperatures",
"Laser Projector"
},
Phantom = {
"EMF Level 5",
"Handprints",
"Ghost Orb"
},
Ravager = {
"EMF Level 5",
"Handprints",
"Laser Projector"
},
Revenant = {
"Inscription",
"EMF Level 5",
"Freezing Temperatures"
},
Shadow = {
"EMF Level 5",
"Inscription",
"Laser Projector"
},
Siren = {
"Wither",
"Spirit Box",
"EMF Level 5"
},
Specter = {
"EMF Level 5",
"Freezing Temperatures",
"Laser Projector"
},
Spirit = {
"Handprints",
"Inscription",
"Spirit Box"
},
["The Wisp"] = {
"Wither",
"Laser Projector",
"Ghost Orb"
},
Umbra = {
"Ghost Orb",
"Laser Projector",
"Handprints"
},
Vesper = {
"Inscription",
"Wither",
"Handprints"
},
Vex = {
"Wither",
"Ghost Orb",
"Freezing Temperatures"
},
Wraith = {
"EMF Level 5",
"Spirit Box",
"Laser Projector"
},
Wretch = {
"EMF Level 5",
"Inscription",
"Laser Projector"
}
}
-- =====================================================
-- GHOST RESULT
-- =====================================================
local GhostResult = Instance.new("TextLabel")
GhostResult.Size = UDim2.new(1, -20, 0, 45)
GhostResult.Position = UDim2.fromOffset(10, 360)
GhostResult.BackgroundTransparency = 1
GhostResult.Text = "Ghost: Unknown"
GhostResult.TextColor3 = Color3.fromRGB(255, 255, 255)
GhostResult.TextSize = 20
GhostResult.Font = Enum.Font.GothamBold
GhostResult.TextXAlignment = Enum.TextXAlignment.Left
GhostResult.Parent = Main
-- =====================================================
-- CONFIRMED EVIDENCE
-- =====================================================
local ConfirmedEvidence = {}
for _, Name in ipairs(EvidenceNames) do
ConfirmedEvidence[Name] = false
end
-- =====================================================
-- SAFE TEMPERATURE DETECTION
-- =====================================================
local function GetTemperature()
local Map = workspace:FindFirstChild("Map")
if not Map then
return nil, nil
end
local Rooms = Map:FindFirstChild("Rooms")
if not Rooms then
return nil, nil
end
local LowestTemp = nil
local LowestRoom = nil
for _, Room in ipairs(Rooms:GetChildren()) do
local Temp = Room:GetAttribute("Temperature")
if typeof(Temp) == "number" then
if LowestTemp == nil or Temp < LowestTemp then
LowestTemp = Temp
LowestRoom = Room
end
end
end
return LowestTemp, LowestRoom
end
local function DetectFreezing(Temp)
return Temp ~= nil and Temp < 0
end
-- =====================================================
-- HANDPRINTS
-- =====================================================
local function DetectHandprints()
for _, Obj in ipairs(workspace:GetDescendants()) do
if Obj:IsA("BasePart") then
if Obj.Name == "Handprint1"
or Obj.Name == "Handprint2"
or Obj.Name == "Footprint"
or Obj.Name == "Footprint1" then
return true
end
end
end
return false
end
-- =====================================================
-- GHOST ORB
-- =====================================================
local function DetectGhostOrb()
for _, Obj in ipairs(workspace:GetDescendants()) do
if Obj:IsA("BasePart")
and Obj.Name == "GhostOrb" then
return true
end
end
return false
end
-- =====================================================
-- EMF
-- =====================================================
local function GetEMFLevel()
local Level = 0
for _, Obj in ipairs(workspace:GetDescendants()) do
if Obj:IsA("Folder")
and Obj.Name == "Indicators" then
for _, V in ipairs(Obj:GetChildren()) do
if V:IsA("BasePart")
and V.Material == Enum.Material.Neon then
local Number = tonumber(V.Name)
if Number and Number > Level then
Level = Number
end
end
end
end
end
return Level
end
-- =====================================================
-- WITHER
-- =====================================================
local function DetectWither()
local Items = workspace:FindFirstChild("Items")
if not Items then
return false
end
for _, Obj in ipairs(Items:GetDescendants()) do
if Obj:IsA("BasePart")
and Obj.Name == "Petals"
and Obj.Color == Color3.new(0, 0, 0) then
return true
end
end
return false
end
-- =====================================================
-- INSCRIPTION
-- =====================================================
local function CheckSpiritBook(Container)
if not Container then
return false
end
for _, Obj in ipairs(Container:GetDescendants()) do
if Obj:IsA("Decal") then
local Model =
Obj:FindFirstAncestorWhichIsA("Model")
if Model
and Model:GetAttribute("ItemName") == "Spirit Book"
and Obj.Texture ~= "" then
return true
end
end
end
return false
end
local function DetectInscription()
if CheckSpiritBook(workspace:FindFirstChild("Items")) then
return true
end
if CheckSpiritBook(Player.Character) then
return true
end
return false
end
-- =====================================================
-- SPIRIT BOX
-- =====================================================
local function DetectSpiritBox()
local PlayerGui = Player:FindFirstChild("PlayerGui")
if not PlayerGui then
return false
end
local Subtitles = PlayerGui:FindFirstChild("Subtitles")
if not Subtitles then
return false
end
local Holder = Subtitles:FindFirstChild("Holder")
if not Holder then
return false
end
local TextLabel = Holder:FindFirstChild("TextLabel")
if not TextLabel then
return false
end
local GhostText = TextLabel.Text or ""
return #GhostText:gsub("%s+", "") >= 3
end
-- =====================================================
-- LASER PROJECTOR
-- =====================================================
local function DetectLaser()
local Ghost = workspace:FindFirstChild("Ghost")
if not Ghost then
return false
end
return Ghost:GetAttribute("InLaser") == true
end
-- =====================================================
-- UPDATE CONFIRMED EVIDENCE
-- =====================================================
local function UpdateConfirmedEvidence(Current)
if Current.EMFLevel == 5 then
ConfirmedEvidence["EMF Level 5"] = true
end
if Current["Freezing Temperatures"] then
ConfirmedEvidence["Freezing Temperatures"] = true
end
if Current["Handprints"] then
ConfirmedEvidence["Handprints"] = true
end
if Current["Ghost Orb"] then
ConfirmedEvidence["Ghost Orb"] = true
end
if Current["Spirit Box"] then
ConfirmedEvidence["Spirit Box"] = true
end
if Current["Inscription"] then
ConfirmedEvidence["Inscription"] = true
end
if Current["Wither"] then
ConfirmedEvidence["Wither"] = true
end
if Current["Laser Projector"] then
ConfirmedEvidence["Laser Projector"] = true
end
end
-- =====================================================
-- GET EVIDENCE
-- =====================================================
local function GetEvidence()
local Temp, TempRoom = GetTemperature()
local EMF = GetEMFLevel()
local Current = {
["EMF Level 5"] = EMF == 5,
["Freezing Temperatures"] =
DetectFreezing(Temp),
["Handprints"] =
DetectHandprints(),
["Ghost Orb"] =
DetectGhostOrb(),
["Spirit Box"] =
DetectSpiritBox(),
["Inscription"] =
DetectInscription(),
["Wither"] =
DetectWither(),
["Laser Projector"] =
DetectLaser(),
EMFLevel = EMF,
Temperature = Temp,
TemperatureRoom = TempRoom
}
UpdateConfirmedEvidence(Current)
for _, Name in ipairs(EvidenceNames) do
Current[Name] = ConfirmedEvidence[Name]
end
return Current
end
-- =====================================================
-- IDENTIFY GHOST
-- =====================================================
local function IdentifyGhost(Evidence)
local Matches = {}
for GhostName, RequiredEvidence in pairs(GhostEvidence) do
local Match = true
for _, RequiredEvidenceName in ipairs(RequiredEvidence) do
if Evidence[RequiredEvidenceName] ~= true then
Match = false
break
end
end
if Match then
table.insert(Matches, GhostName)
end
end
if #Matches == 1 then
return Matches[1]
elseif #Matches > 1 then
table.sort(Matches)
return table.concat(Matches, " / ")
end
return "Unknown"
end
-- =====================================================
-- UPDATE UI
-- =====================================================
local function UpdateUI()
local Evidence = GetEvidence()
-- =============================================
-- EVIDENCE
-- =============================================
for _, Name in ipairs(EvidenceNames) do
local Label = EvidenceLabels[Name]
local State = Evidence[Name] == true
if Name == "EMF Level 5" then
if State then
Label.Text = "EMF 5: True"
Label.TextColor3 =
Color3.fromRGB(0, 255, 120)
else
Label.Text =
"EMF Level: " ..
tostring(Evidence.EMFLevel or 0)
Label.TextColor3 =
Color3.fromRGB(255, 80, 80)
end
else
Label.Text =
Name .. ": " .. tostring(State)
if State then
Label.TextColor3 =
Color3.fromRGB(0, 255, 120)
else
Label.TextColor3 =
Color3.fromRGB(255, 80, 80)
end
end
end
-- =============================================
-- TEMPERATURE
-- =============================================
if Evidence.Temperature ~= nil
and Evidence.TemperatureRoom then
TemperatureLabel.Text = string.format(
"Temperature: %.1f°C (%s)",
Evidence.Temperature,
Evidence.TemperatureRoom.Name
)
if Evidence.Temperature < 0 then
TemperatureLabel.TextColor3 =
Color3.fromRGB(0, 255, 120)
else
TemperatureLabel.TextColor3 =
Color3.fromRGB(255, 80, 80)
end
else
TemperatureLabel.Text =
"Temperature: --.-°C (Unknown)"
TemperatureLabel.TextColor3 =
Color3.fromRGB(255, 80, 80)
end
-- =============================================
-- GHOST
-- =============================================
local Ghost = IdentifyGhost(Evidence)
GhostResult.Text =
"Ghost: " .. Ghost
if Ghost ~= "Unknown" then
GhostResult.TextColor3 =
Color3.fromRGB(0, 255, 120)
else
GhostResult.TextColor3 =
Color3.fromRGB(255, 255, 255)
end
end
-- =====================================================
-- UPDATE LOOP
-- =====================================================
task.spawn(function()
while AcheronGui.Parent do
local Success, Error =
pcall(UpdateUI)
if not Success then
warn("[Acheron] Update error:", Error)
end
task.wait(0.5)
end
end)