User: Сделай, что когда на счет игрока, прибавляеться валюта Multiplayer, то мы проверяем так-же валюту Stars. Например, если у человека 90,000 Stars. Ему пришло 1 Multiplayer. Учитываем что каждый Stars = x2. 90000 x 2 = 180000. После чего 180000 x 1 = 180000. Скрипт где это нужно сделать:

local part = script.Parent -- Указываем, что текущий парент - это сам парт
local Players = game:GetService("Players")

-- Переменная для отслеживания игрока на парте
local playerOnPart = nil

local function checkStandingOnPart(player)
	while playerOnPart == player do
		wait(0.2) -- Каждые 0.2 секунды проверяем

		-- Получаем атрибут Money
		local currentMoney = player:GetAttribute("Money") or 0

		if currentMoney >= 10 then
			-- Убираем 10 Money у игрока
			player:SetAttribute("Money", currentMoney - 10)

			-- Прибавляем +1 к Multiplayer
			local currentMultiplier = player:GetAttribute("Multiplayer") or 2
			player:SetAttribute("Multiplayer", currentMultiplier + 1)

			-- Обновляем значение Multiplayer сразу после изменения
			print(player.Name .. " забрал 10 Money и получил +1 Multiplayer. Теперь у них " .. (currentMultiplier + 1) .. " Multiplier.")
		end
	end
end

local function onTouch(otherPart)
	-- Проверяем, является ли касающийся объект игроком
	local player = Players:GetPlayerFromCharacter(otherPart.Parent)
	if player then
		if not playerOnPart then
			playerOnPart = player
			checkStandingOnPart(player) -- Начинаем проверку
		end
	end
end

local function onTouchEnded(otherPart)
	local player = Players:GetPlayerFromCharacter(otherPart.Parent)
	if player == playerOnPart then
		playerOnPart = nil -- Игрок покинул парт
	end
end

-- Подключаем события Touched и TouchEnded к функциям
part.Touched:Connect(onTouch)
part.TouchEnded:Connect(onTouchEnded)Multiplayer:

local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local MultiplayerStore = DataStoreService:GetDataStore("PlayerMultiplayer")

local function formatNumber(number)
	local suffixes = {"", "K", "M", "B", "T", "Qd", "Qn", "Sx", "Sp", "Oc", "No"}
	local index = 1

	while number >= 1000 and index < #suffixes do
		number = number / 1000
		index += 1
	end

	if index == #suffixes and number >= 1000 then
		return "999No"
	end

	if number >= 100 then
		return string.format("%d%s", number, suffixes[index]) -- Для целых чисел
	else
		return string.format("%.2f%s", number, suffixes[index]):gsub("%.00", "") -- Удаляем .00 для целых чисел
	end
end

-- Функции управления Multiplayer
local function resetMultiplayer(player)
	player:SetAttribute("Multiplayer", 2) -- Устанавливаем начальное значение Multiplayer на 2
end

local function addMultiplayer(player, amount)
	local currentMultiplayer = player:GetAttribute("Multiplayer") or 2 -- Изменяем значение по умолчанию на 2
	player:SetAttribute("Multiplayer", currentMultiplayer + amount)
end

local function subtractMultiplayer(player, amount)
	local currentMultiplayer = player:GetAttribute("Multiplayer") or 2 -- Изменяем значение по умолчанию на 2
	player:SetAttribute("Multiplayer", math.max(currentMultiplayer - amount, 2)) -- Заменяем 1 на 2
end

-- Обработка сохранения данных при выходе игрока
local function savePlayerMultiplayer(player)
	local success, err = pcall(function()
		MultiplayerStore:SetAsync(player.UserId, player:GetAttribute("Multiplayer"))
	end)
	if not success then
		warn("Не удалось сохранить Multiplayer для игрока " .. player.Name .. ": " .. err)
	end
end

-- Обработка загрузки данных при входе игрока
local function loadPlayerMultiplayer(player)
	local success, data = pcall(function()
		return MultiplayerStore:GetAsync(player.UserId)
	end)
	if success then
		player:SetAttribute("Multiplayer", data or 2) -- Изменяем значение по умолчанию на 2
	else
		warn("Не удалось загрузить Multiplayer для игрока " .. player.Name .. ": " .. data)
		player:SetAttribute("Multiplayer", 2) -- Значение по умолчанию
	end
end

-- Создание текста Multiplayer над головой игрока
local function createMultiplayerOverheadText(player)
	local billboardGui = Instance.new("BillboardGui")
	billboardGui.Name = "MultiplayerOverheadGui"
	billboardGui.Parent = player.Character.Head
	billboardGui.Adornee = player.Character.Head
	billboardGui.Size = UDim2.new(4, 0, 1, 0)
	billboardGui.StudsOffset = Vector3.new(0, 3, 0) -- Над текстом Money, но под Stars
	billboardGui.AlwaysOnTop = true

	local textLabel = Instance.new("TextLabel")
	textLabel.Name = "MultiplayerOverheadText"
	textLabel.Parent = billboardGui
	textLabel.Size = UDim2.new(1, 0, 1, 0)
	textLabel.BackgroundTransparency = 1
	textLabel.TextStrokeTransparency = 0 -- Добавляет черную обводку
	textLabel.TextColor3 = Color3.fromRGB(255, 0, 0) -- Красный цвет
	textLabel.Font = Enum.Font.FredokaOne
	textLabel.TextScaled = true
	textLabel.Text = "Multiplier: " .. formatNumber(player:GetAttribute("Multiplayer"))

	-- Обновление текста при изменении атрибута Multiplayer
	player:GetAttributeChangedSignal("Multiplayer"):Connect(function()
		textLabel.Text = "Multiplier: " .. formatNumber(player:GetAttribute("Multiplayer"))
	end)
end

-- Обработка при добавлении игрока
Players.PlayerAdded:Connect(function(player)
	player:SetAttribute("Multiplayer", 2) -- Значение по умолчанию теперь 2
	loadPlayerMultiplayer(player)

	player.CharacterAdded:Connect(function()
		createMultiplayerOverheadText(player)
	end)
end)

-- Сохранение данных при выходе игрока
Players.PlayerRemoving:Connect(function(player)
	savePlayerMultiplayer(player)
end)

Stars:
local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local StarsStore = DataStoreService:GetDataStore("PlayerStars")

-- Функция форматирования числа
local function formatNumber(number)
	local suffixes = {"", "K", "M", "B", "T", "Qd", "Qn", "Sx", "Sp", "Oc", "No"}
	local index = 1

	while number >= 1000 and index < #suffixes do
		number = number / 1000
		index += 1
	end

	if index == #suffixes and number >= 1000 then
		return "999No"
	end

	-- Измененный вывод форматирования
	if number >= 100 then
		return string.format("%d%s", number, suffixes[index]) -- Для целых чисел
	else
		return string.format("%.2f%s", number, suffixes[index]):gsub("%.00", "") -- Удаляем .00 для целых чисел
	end
end

-- Функции управления Stars
local function resetStars(player)
	player:SetAttribute("Stars", 0)
end

local function addStars(player, amount)
	local currentStars = player:GetAttribute("Stars") or 0
	player:SetAttribute("Stars", currentStars + amount)
end

local function subtractStars(player, amount)
	local currentStars = player:GetAttribute("Stars") or 0
	player:SetAttribute("Stars", math.max(currentStars - amount, 0))
end

-- Обработка сохранения данных при выходе игрока
local function savePlayerStars(player)
	local success, err = pcall(function()
		StarsStore:SetAsync(player.UserId, player:GetAttribute("Stars"))
	end)
	if not success then
		warn("Не удалось сохранить Stars для игрока " .. player.Name .. ": " .. err)
	end
end

-- Обработка загрузки данных при входе игрока
local function loadPlayerStars(player)
	local success, data = pcall(function()
		return StarsStore:GetAsync(player.UserId)
	end)
	if success then
		player:SetAttribute("Stars", data or 0)
	else
		warn("Не удалось загрузить Stars для игрока " .. player.Name .. ": " .. data)
		player:SetAttribute("Stars", 0)
	end
end

-- Создание текста Stars над головой игрока
local function createStarsOverheadText(player)
	local billboardGui = Instance.new("BillboardGui")
	billboardGui.Name = "StarsOverheadGui"
	billboardGui.Parent = player.Character.Head
	billboardGui.Adornee = player.Character.Head
	billboardGui.Size = UDim2.new(4, 0, 1, 0)
	billboardGui.StudsOffset = Vector3.new(0, 4, 0) -- Выше текста Money
	billboardGui.AlwaysOnTop = true

	local textLabel = Instance.new("TextLabel")
	textLabel.Name = "StarsOverheadText"
	textLabel.Parent = billboardGui
	textLabel.Size = UDim2.new(1, 0, 1, 0)
	textLabel.BackgroundTransparency = 1
	textLabel.TextStrokeTransparency = 0 -- Добавляет черную обводку
	textLabel.TextColor3 = Color3.fromRGB(255, 215, 0) -- Желтый цвет
	textLabel.Font = Enum.Font.FredokaOne
	textLabel.TextScaled = true
	textLabel.Text = "Stars: " .. formatNumber(player:GetAttribute("Stars"))

	player:GetAttributeChangedSignal("Stars"):Connect(function()
		textLabel.Text = "Stars: " .. formatNumber(player:GetAttribute("Stars"))
	end)
end

-- Обработка при добавлении игрока
Players.PlayerAdded:Connect(function(player)
	player:SetAttribute("Stars", 0) -- Начальное значение Stars

	loadPlayerStars(player)

	player.CharacterAdded:Connect(function()
		createStarsOverheadText(player)
	end)
end)

-- Сохранение данных при выходе игрока
Players.PlayerRemoving:Connect(function(player)
	savePlayerStars(player)
end)
Assistant:  реализовать логику, где при добавлении валюты `Multiplayer` также проверяется и учитывается количество валюты `Stars`, вам нужно внести изменения в существующий скрипт, где происходит управление `Multiplayer`.

Вот модифицированный скрипт, который включает расчеты на основе вашего примера:

```lua
local part = script.Parent -- Указываем, что текущий парент - это сам парт
local Players = game:GetService("Players")

-- Переменная для отслеживания игрока на парте
local playerOnPart = nil

local function checkStandingOnPart(player)
        while playerOnPart == player do
                wait(0.2) -- Каждые 0.2 секунды проверяем

                -- Получаем атрибут Money
                local currentMoney = player:GetAttribute("Money") or 0

                if currentMoney >= 10 then
                        -- Убираем 10 Money у игрока
                        player:SetAttribute("Money", currentMoney - 10)

                        -- Получаем количество Stars
                        local currentStars = player:GetAttribute("Stars") or 0
                        local multiplierBonus = currentStars * 2 -- Учитываем, что каждый Star дает x2

                        -- Прибавляем +1 к Multiplayer с учетом Stars
                        local currentMultiplier = player:GetAttribute("Multiplayer") or 2
                        player:SetAttribute("Multiplayer", currentMultiplier + multiplierBonus)

                        -- Обновляем значение Multiplayer сразу после изменения
                        print(player.Name .. " забрал 10 Money и получил + " .. multiplierBonus .. " Multiplayer. Теперь у них " .. (currentMultiplier + multiplierBonus) .. " Multiplier.")
                end
        end
end

local function onTouch(otherPart)
        -- Проверяем, является ли касающийся объект игроком
        local player = Players:GetPlayerFromCharacter(otherPart.Parent)
        if player then
                if not playerOnPart then
                        playerOnPart = player
                        checkStandingOnPart(player) -- Начинаем проверку
                end
        end
end

local function onTouchEnded(otherPart)
        local player = Players:GetPlayerFromCharacter(otherPart.Parent)
        if player == playerOnPart then
                playerOnPart = nil -- Игрок покинул парт
        end
end

-- Подключаем события Touched и TouchEnded к функциям
part.Touched:Connect(onTouch)
part.TouchEnded:Connect(onTouchEnded)
```

### Что изменилось

1. **Добавлена логика для расчета `multiplierBonus`:** Когда игрок забирает Money, мы берем количество Stars, умножаем его на 2 и добавляем к текущему `Multiplayer`.
  
2. **Логика при выводе сообщений:** Сообщение о полученном `Multiplayer` теперь выводит увеличенное значение с учётом `Stars`.

Убедитесь, что название атрибута `Stars` совпадает с тем, что вы используете в других частях кода. Этот подход позволит вам динамично изменять `Multiplayer`, основываясь на `Stars`.
User: Добавь, что если Stars равняеться 0, то мы ничего не множим.
Assistant:  учесть условие, при котором если количество `Stars` равно 0, то `Multiplayer` не должен изменяться, мы можем добавить простую проверку в существующую функцию. Вот обновленный код:

```lua
local part = script.Parent -- Указываем, что текущий парент - это сам парт
local Players = game:GetService("Players")

-- Переменная для отслеживания игрока на парте
local playerOnPart = nil

local function checkStandingOnPart(player)
    while playerOnPart == player do
        wait(0.2) -- Каждые 0.2 секунды проверяем

        -- Получаем атрибут Money
        local currentMoney = player:GetAttribute("Money") or 0

        if currentMoney >= 10 then
            -- Убираем 10 Money у игрока
            player:SetAttribute("Money", currentMoney - 10)

            -- Получаем количество Stars
            local currentStars = player:GetAttribute("Stars") or 0
            
            local multiplierBonus = 0
            if currentStars > 0 then
                multiplierBonus = currentStars * 2 -- Учитываем, что каждый Star дает x2
            end
            
            -- Прибавляем +1 к Multiplayer с учетом Stars
            local currentMultiplier = player:GetAttribute("Multiplayer") or 2
            player:SetAttribute("Multiplayer", currentMultiplier + multiplierBonus)

            -- Обновляем значение Multiplayer сразу после изменения
            print(player.Name .. " забрал 10 Money и получил + " .. multiplierBonus .. " Multiplayer. Теперь у них " .. (currentMultiplier + multiplierBonus) .. " Multiplier.")
        end
    end
end

local function onTouch(otherPart)
    -- Проверяем, является ли касающийся объект игроком
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
        if not playerOnPart then
            playerOnPart = player
            checkStandingOnPart(player) -- Начинаем проверку
        end
    end
end

local function onTouchEnded(otherPart)
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player == playerOnPart then
        playerOnPart = nil -- Игрок покинул парт
    end
end

-- Подключаем события Touched и TouchEnded к функциям
part.Touched:Connect(onTouch)
part.TouchEnded:Connect(onTouchEnded)
```

### Что изменилось

1. **Проверка на количество `Stars`:** Перед тем, как умножать `Stars` на 2, добавлено условие `if currentStars > 0`. Если `Stars` равны 0, то `multiplierBonus` останется 0, и не будет добавлено к `Multiplayer`.

2. **Логика при выводе сообщений:** Сообщение о полученном `Multiplayer` также обновляется, чтобы отразить, что если `multiplierBonus` равен 0, то увеличение не происходит.

Теперь если у игрока нет `Stars`, его `Multiplayer` не изменится при использовании парт.
User: Вот например в данном скрипте за 10 денег мы получаем 1 Multiplayer. А где поменять число денег, и сколько за них получит игрок Multiplayer?
Assistant:  изменить количество денег, за которое игрок получает `Multiplayer`, а также количество `Multiplayer`, которое он получает за это количество денег, вам нужно сделать изменения в нескольких местах в коде.

Вот как вы можете это сделать:

1. **Изменить стоимость в `Money`:** Это значение определяется в условии `if currentMoney >= 10 then`. Замените `10` на нужное вам значение (например, `20`).

2. **Изменить количество `Multiplayer`, которое дает эта стоимость:** Для того чтобы изменить, сколько `Multiplayer` игрок получает за потраченные деньги, вы можете ввести новую переменную (например, `multiplierGain`) и использовать её вместо простого добавления `1`.

### Вот пример кода с изменениями:

```lua
local part = script.Parent -- Указываем, что текущий парент - это сам парт
local Players = game:GetService("Players")

-- Переменная для отслеживания игрока на парте
local playerOnPart = nil

-- Параметры для расчета Multiplayer
local costMoney = 10 -- Сколько денег стоит получить Multiplayer
local multiplierGain = 1 -- Сколько Multiplayer дается за costMoney

local function checkStandingOnPart(player)
    while playerOnPart == player do
        wait(0.2) -- Каждые 0.2 секунды проверяем

        -- Получаем атрибут Money
        local currentMoney = player:GetAttribute("Money") or 0

        if currentMoney >= costMoney then
            -- Убираем деньги у игрока
            player:SetAttribute("Money", currentMoney - costMoney)

            -- Получаем количество Stars
            local currentStars = player:GetAttribute("Stars") or 0
            
            local multiplierBonus = 0
            if currentStars > 0 then
                multiplierBonus = currentStars * 2 -- Учитываем, что каждый Star дает x2
            end
            
            -- Прибавляем Multiplayer с учетом Stars
            local currentMultiplier = player:GetAttribute("Multiplayer") or 2
            player:SetAttribute("Multiplayer", currentMultiplier + multiplierGain + multiplierBonus)

            -- Обновляем значение Multiplayer сразу после изменения
            print(player.Name .. " забрал " .. costMoney .. " Money и получил + " .. multiplierGain + " Multiplayer ( + " .. multiplierBonus .. " за Stars). Теперь у них " .. (currentMultiplier + multiplierGain + multiplierBonus) .. " Multiplier.")
        end
    end
end

local function onTouch(otherPart)
    -- Проверяем, является ли касающийся объект игроком
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
        if not playerOnPart then
            playerOnPart = player
            checkStandingOnPart(player) -- Начинаем проверку
        end
    end
end

local function onTouchEnded(otherPart)
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player == playerOnPart then
        playerOnPart = nil -- Игрок покинул парт
    end
end

-- Подключаем события Touched и TouchEnded к функциям
part.Touched:Connect(onTouch)
part.TouchEnded:Connect(onTouchEnded)
```

### Что изменилось

1. **Переменная `costMoney`:** Добавлена переменная `costMoney`, которая определяет, сколько денег нужно потратить для получения `Multiplayer`. Вы можете изменить это значение на нужное вам (например, `20`, `15` и т. д.).

2. **Переменная `multiplierGain`:** Эта переменная определяет, сколько `Multiplayer` игрок получает за потраченные деньги. Измените её значение так, как вам нужно (например, `2`, если вы хотите, чтобы игрок получал по 2 `Multiplayer` за каждую зарплату денежек).

Теперь вы можете легко настроить стоимость и количество `Multiplayer` в этом коде, просто меняя значения переменных.
User: Теперь сделаем такую же систему, но с покупкой Stars за Multiplayer. Теперь, мы проверяем, сколько у игрока Mega. И это увеличение Stars будет работать таким же способом, как и увеличение Multiplayer за Stars.

Скрипт (который сейчас):

local part = script.Parent -- Указываем, что текущий парент - это сам парт
local Players = game:GetService("Players")

-- Переменная для отслеживания игрока на парте
local playerOnPart = nil

local function checkStandingOnPart(player)
	while playerOnPart == player do
		wait(0.2) -- Каждые 0.2 секунды проверяем

		-- Получаем атрибут Money
		local currentMulti = player:GetAttribute("Multiplayer") or 0

		if currentMulti >= 10 then
			-- Убираем 10 Money у игрока
			player:SetAttribute("Multiplayer", currentMulti - 10)

			-- Прибавляем +1 к Multiplayer
			local currentMultiplier = player:GetAttribute("Stars") or 2
			player:SetAttribute("Stars", currentMultiplier + 1)

			-- Обновляем значение Multiplayer сразу после изменения
		
		end
	end
end

local function onTouch(otherPart)
	-- Проверяем, является ли касающийся объект игроком
	local player = Players:GetPlayerFromCharacter(otherPart.Parent)
	if player then
		if not playerOnPart then
			playerOnPart = player
			checkStandingOnPart(player) -- Начинаем проверку
		end
	end
end

local function onTouchEnded(otherPart)
	local player = Players:GetPlayerFromCharacter(otherPart.Parent)
	if player == playerOnPart then
		playerOnPart = nil -- Игрок покинул парт
	end
end

-- Подключаем события Touched и TouchEnded к функциям
part.Touched:Connect(onTouch)
part.TouchEnded:Connect(onTouchEnded)

Mega:

local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local MegaStore = DataStoreService:GetDataStore("PlayerMega")

-- Функция форматирования чисел
local function formatNumber(number)
	local suffixes = {"", "K", "M", "B", "T", "Qd", "Qn", "Sx", "Sp", "Oc", "No"}
	local index = 1

	while number >= 1000 and index < #suffixes do
		number = number / 1000
		index += 1
	end

	if index == #suffixes and number >= 1000 then
		return "999No"
	end

	-- Измененный вывод форматирования
	if number >= 100 then
		return string.format("%d%s", number, suffixes[index]) -- Для целых чисел
	else
		return string.format("%.2f%s", number, suffixes[index]):gsub("%.00", "") -- Удаляем .00 для целых чисел
	end
end

-- Функции управления Mega
local function resetMega(player)
	player:SetAttribute("Mega", 0)
end

local function addMega(player, amount)
	local currentMega = player:GetAttribute("Mega") or 0
	player:SetAttribute("Mega", currentMega + amount)
end

local function subtractMega(player, amount)
	local currentMega = player:GetAttribute("Mega") or 0
	player:SetAttribute("Mega", math.max(currentMega - amount, 0))
end

-- Обработка сохранения данных при выходе игрока
local function savePlayerMega(player)
	local success, err = pcall(function()
		MegaStore:SetAsync(player.UserId, player:GetAttribute("Mega"))
	end)
	if not success then
		warn("Не удалось сохранить Mega для игрока " .. player.Name .. ": " .. err)
	end
end

-- Обработка загрузки данных при входе игрока
local function loadPlayerMega(player)
	local success, data = pcall(function()
		return MegaStore:GetAsync(player.UserId)
	end)
	if success then
		player:SetAttribute("Mega", data or 0)
	else
		warn("Не удалось загрузить Mega для игрока " .. player.Name .. ": " .. data)
		player:SetAttribute("Mega", 0)
	end
end

-- Создание текста Mega над головой игрока
local function createMegaOverheadText(player)
	local billboardGui = Instance.new("BillboardGui")
	billboardGui.Name = "MegaOverheadGui"
	billboardGui.Parent = player.Character.Head
	billboardGui.Adornee = player.Character.Head
	billboardGui.Size = UDim2.new(4, 0, 1, 0)
	billboardGui.StudsOffset = Vector3.new(0, 5, 0) -- Выше Stars
	billboardGui.AlwaysOnTop = true

	local textLabel = Instance.new("TextLabel")
	textLabel.Name = "MegaOverheadText"
	textLabel.Parent = billboardGui
	textLabel.Size = UDim2.new(1, 0, 1, 0)
	textLabel.BackgroundTransparency = 1
	textLabel.TextStrokeTransparency = 0
	textLabel.TextColor3 = Color3.fromRGB(128, 0, 128) -- Фиолетовый цвет
	textLabel.Font = Enum.Font.FredokaOne
	textLabel.TextScaled = true
	textLabel.Text = "Mega: " .. formatNumber(player:GetAttribute("Mega"))

	player:GetAttributeChangedSignal("Mega"):Connect(function()
		textLabel.Text = "Mega: " .. formatNumber(player:GetAttribute("Mega"))
	end)
end

-- Обработка при добавлении игрока
Players.PlayerAdded:Connect(function(player)
	player:SetAttribute("Mega", 0) -- Начальное значение Mega

	loadPlayerMega(player)

	player.CharacterAdded:Connect(function()
		createMegaOverheadText(player)
	end)
end)

-- Сохранение данных при выходе игрока
Players.PlayerRemoving:Connect(function(player)
	savePlayerMega(player)
end)
Assistant: