--Client
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")
local Events = ReplicatedStorage:WaitForChild("Events")
local clickEvent = Events:WaitForChild("ClickEvent")
local player = game.Players.LocalPlayer
local playerGui = player.PlayerGui
local HUD = playerGui:WaitForChild("HUD")
local main = HUD.Main
local clickButton = main.Click
local autoButton = main.Auto
local canClick = true
local auto = false
local COOLDOWN_TIME = 0.1
local coroutineAutoClicker
local function turnColorAutoButton()
if auto then
autoButton.Background.BackgroundColor3 = Color3.new(0.494118, 1, 0.458824)
else
autoButton.Background.BackgroundColor3 = Color3.new(1, 0.290196, 0.301961)
end
end
local function setCooldown()
canClick = false
task.wait(COOLDOWN_TIME)
canClick = true
end
local function onClick()
if not canClick then return end
clickEvent:FireServer()
setCooldown()
end
local function onAutoClicker()
while auto do
onClick()
end
end
local function toggleAutoClicker()
auto = not auto
if auto then
coroutineAutoClicker = coroutine.create(onAutoClicker)
coroutine.resume(coroutineAutoClicker)
else
coroutine.resume(coroutineAutoClicker)
coroutine.close(coroutineAutoClicker)
coroutineAutoClicker = nil
end
turnColorAutoButton()
end
local function onInputBegan(input: InputObject, isProcessedByGame: boolean)
if isProcessedByGame then return end
if input.UserInputType == Enum.UserInputType.MouseButton1 then
onClick()
end
end
clickEvent.OnClientEvent:Connect(function()
end)
clickButton.MouseButton1Click:Connect(onClick)
autoButton.MouseButton1Click:Connect(toggleAutoClicker)
UserInputService.InputBegan:Connect(onInputBegan)
--Server
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerStorage = game:GetService("ServerStorage")
local Abbreviation = require(ReplicatedStorage.Modules.Abbreviation)
local MultipliersUtility = require(ReplicatedStorage.Packages.Utility.MultipliersUtilitiy)
local DataManager = require(ServerStorage.DataManager)
local Units = require(ServerStorage.SharedAssets.Modules.Units)
local Events = ReplicatedStorage.Events
local clickEvent = Events.ClickEvent
local MAX_CLICKS_BEFORE_XP = 10
local playersClicks = {} :: {[number]: number}
local function LevelUpUnits(player, data)
if not data then return end
for i,v in data.Units do
if not v.Equipped then continue end
local UnitData = Units.GetUnitData(v.Name)
if UnitData.Rarity:find("Exclusive") then continue end
local Amount = (v.Level / math.pi) ^ UnitData.XPRate
local Required = ((v.Level * UnitData.XPRate) * 100 / math.pi) ^ (UnitData.XPRate * UnitData.XPRate)
if v.XP >= Required then
v.XP -= Required
v.Level += 1
else
v.XP += Amount
end
end
end
local function onClick(player: Player)
local playerClicks = playersClicks[player.UserId]
local data = DataManager:GetData(player, true)
assert(data, "[CLICK ERROR]: Data not found for player!")
local energyAmount = MultipliersUtility:EnergyMultiplier(data.Data)
DataManager:SetData(player, "Energy", (data.Data.Energy + energyAmount))
DataManager:SetData(player, "TotalEnergy", (data.Data.TotalEnergy + energyAmount))
player.leaderstats.Energy.Value = Abbreviation.CurrencyEnding(math.floor(data.Data.Energy))
playersClicks[player.UserId] += 1
if playersClicks[player.UserId] >= MAX_CLICKS_BEFORE_XP then
playersClicks[player.UserId] = 0
LevelUpUnits(player, data.Data)
end
end
local function onClickEvent(player: Player, action, autoBool)
local playerClicks = playersClicks[player.UserId]
if not playerClicks then
playersClicks[player.UserId] = 0
playerClicks = playersClicks[player.UserId]
end
onClick(player)
end
clickEvent.OnServerEvent:Connect(onClickEvent)