Top.Mail.Ru
Ответы

Как в Роблокс студио сделать так что бы при сборе монет одним игроком не исчезал у другого?

Сделал скрипт на то чтобы при сборе монетки игроку давали +100 coins, но при сборе одним игроком, монета пропадает у всех, я хочу сделать так что бы при сборе монет одним игроком, оставалось у всех игроков пока они сами её не подняли!



Скрипт из ServerScriptService:

game.Players.PlayerAdded:Connect(function(plr)
local f = Instance.new ("Folder", plr)
f.Name = "leaderstats"
local coins = Instance.new ("IntValue", f)
coins.Name = "FunCoins"
coins.Value = 0
end)



Скрипт монеты (Part):
local pl = game:GetService("Players")
local coin = script.Parent
function giveMeMyMoney(part)
if part.Parent:FindFirstChild("Humanoid") then

coin.CanTouch = false
local player = pl:GetPlayerFromCharacter(part.Parent)

player.leaderstats.FunCoins.Value += 100
coin.Transparency = 1
script.Disabled = true
end
end
coin.Touched:Connect(giveMeMyMoney)

По дате
По рейтингу
Аватар пользователя
Ученик

В каком из типов скриптов записан код для элемента "монеты"? ServerScript или LocalScript? В случае необходимости невидимости изменений для серверной стороны, изолируйте скрипт монеты (обработчик касания), перенеся его в модель монеты. После чего используйте RemoteEvent в ReplicatedStorage, чтобы отправить событие об изменении leaderstats'а. Пример:

LocalScript в модели монеты

12345678910111213141516
 local function coin_touched(part)
   local pl = game:GetService("Players") 
   if not(pl:GetPlayerFromCharacter(part.Parent)) then
      return 
   end 

   local rs = game:GetService("ReplicatedStorage")
   local update_coins = rs:WaitForChild("RemoteEvent")
   local coin = script.Parent 

   local value = 100 
   update_coins:FireServer(value)
   coin.transparency = 1
   coin.CanTouch = false 

end 


ServerScript

12345678910111213141516
 local f = Instance.new ("Folder", plr)   
f.Name  = "leaderstats"   
local coins = Instance.new ("IntValue", f)   
coins.Name  = "FunCoins"   
coins.Value = 0  

local rs = game:GetService("ReplicatedStorage")
local add_val_event = rs:WaitForChild("RemoteEvent")

function add_value(player, value)
   player.leaderstats.FunCoins.Value += value
   -- player предается по дефолту с LocalScript
end

add_val_event.OnServerEvent:Connect(add_value)