Same script on multiple buttons

I’m trying to use the same script over multiple buttons so I don’t have to make insane amounts of scripts for my buttons.

What I’m making is an idle game, so I have
Copper Drill: 20 epherum per sec
Iron Drill: 40 epherum per sec

But when I try to save the scripts values with PlayerPrefs it seems to set all of the drills/upgrades I have to the same values. example Copper Drill will have the same epherum per sec as Iron Drill.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class UpgradeEpherumDrillers : MonoBehaviour {

	public GatherButton g;

	public UnityEngine.UI.Text UpgradeNameText;
	public UnityEngine.UI.Text UpgradeAmountText;
	public UnityEngine.UI.Text UpgradeInfoText;

	public UnityEngine.UI.Slider TimerSlider;
	public GameObject SliderToDisable;

	[Header("Drill Properties")]
	public string DrillerName = "";
	public float UpgradeCost = 500;
	public float UpgradeEpherumPerSecBy = 0;
	public float LevelNeededToUnlock = 0;

	[HideInInspector]
	public float EpherumPerSec = 0;
	[HideInInspector]
	public float UpgradeAmount = 0;

	[Space]

	[Header("Timer")]
	public float AutoTimerReset = 0;
	public float AutoTimer = 0;

	void Start(){
		UpgradeCost = PlayerPrefs.GetFloat ("UpgradeUpgradeCost", UpgradeCost);
		UpgradeEpherumPerSecBy = PlayerPrefs.GetFloat ("UpgradeUpgradeEpherumPerSecBy", UpgradeEpherumPerSecBy);
		LevelNeededToUnlock = PlayerPrefs.GetFloat ("UpgradeLevelNeededToUnlock", LevelNeededToUnlock);
		EpherumPerSec = PlayerPrefs.GetFloat ("UpgradeEpherumPerSec", EpherumPerSec);
		UpgradeAmount = PlayerPrefs.GetFloat ("UpgradeUpgradeAmount", UpgradeAmount);
		AutoTimerReset = PlayerPrefs.GetFloat ("UpgradeAutoTimerReset", AutoTimerReset);
		AutoTimer = PlayerPrefs.GetFloat ("UpgradeAutoTimer", AutoTimer);
	}

	void Update () {
		PlayerPrefs.SetFloat ("UpgradeUpgradeCost", UpgradeCost);
		PlayerPrefs.SetFloat ("UpgradeUpgradeEpherumPerSecBy", UpgradeEpherumPerSecBy);
		PlayerPrefs.SetFloat ("UpgradeLevelNeededToUnlock", LevelNeededToUnlock);
		PlayerPrefs.SetFloat ("UpgradeEpherumPerSec", EpherumPerSec);
		PlayerPrefs.SetFloat ("UpgradeUpgradeAmount", UpgradeAmount);
		PlayerPrefs.SetFloat ("UpgradeAutoTimerReset", AutoTimerReset);	
		PlayerPrefs.SetFloat ("UpgradeAutoTimer", AutoTimer);
	}

	public void UpgradeBought(){
		if (g.CurrentLevel >= LevelNeededToUnlock) {
			if (g.EpherumAmount >= UpgradeCost) {
				UpgradeAmount += 1;
				g.EpherumAmount -= UpgradeCost;
				UpgradeCost += Mathf.Lerp (UpgradeCost, UpgradeCost, UpgradeCost);
				g.EpherumPerSecondAmount += UpgradeEpherumPerSecBy;
				EpherumPerSec += UpgradeEpherumPerSecBy;
			}
		}
	}

}

You need to understand that
Playerpref keeps only one of given variable, it doesn’t hold different one per script

PlayerPrefs.GetFloat ("UpgradeEpherumPerSec", EpherumPerSec);

so “UpgradeEpherumPerSec” will be overwritten everytime on every script
so when you call it, it will have the last set value.
You will have to make it generic by doing something like (if your buttons all have a different name)

PlayerPrefs.GetFloat ("UpgradeEpherumPerSec"+buttonName, EpherumPerSec);