How to prevent events from stacking?

Sure thing. All you have to do is the following:

local globalVariable = {}; -- Variable outside the function's scope

local function ChooseTarget() -- This function will be called multiple times.
	MaxActivationDistance(100) -- Ignore this. Nothing important.
	for i,v in pairs (Enemies) do
		v.Model.BattleInfo.Click.ClickDetector.MouseClick:Connect(function() -- This mouse event will stack, because of calling the function multiple times.
			print(1)
			WhichAttack.Attacker = Player.Character
			WhichAttack.Target = v
			game.ReplicatedStorage.BattleModules.BattleSystem.PlayerSendAttack:FireServer(WhichAttack) -- Eventually it will send multiple results than needed.
			MaxActivationDistance(0)
		end)
	end
end