Я делаю игру в роблокс, и мне нужно обновить статистику таблицы лидеров, когда вы нажимаете на базовую пластину.

это мой код на данный момент:

local players = game:WaitForChild("Players")
    
local function createLeaderboard(player)
    local stats = Instance.new("Folder")
    stats.Name = "leaderstats"
    local baseclicks = Instance.new("IntValue", stats)
    baseclicks.Name = "baseclicks"
    stats.Parent = player
    baseclicks.Value = 100
end
   
players.PlayerAdded:connect(createLeaderboard)

Я не уверен, нужен ли мне детектор кликов со скриптом внутри или?? я не знаю, пожалуйста, помогите.


person robloxpersonwhoisnewatscripts    schedule 30.09.2020    source источник
comment
Этот вопрос слишком широк для stackoverflow; Вместо этого я бы предложил задать вопрос в каком-нибудь специализированном сообществе roblox или разбить его на более мелкие, более конкретные вопросы.   -  person DarkWiiPlayer    schedule 30.09.2020
comment
Эй, взгляните на документы для ClickDetectors и решите, подходят ли они вам: developer.roblox.com/en-us/api-reference/class/ClickDetector.   -  person Kylaaa    schedule 30.09.2020


Ответы (1)


Если вам не нужны ClickDetectors на базовой плате, вы можете просто использовать mouse.Target. Например:

-- serverscript
local players = game:GetService("Players");

local function createLeaderboard(player);
  local stats = Instance.new("Folder", player);
  stats.Name = "leaderstats";
  local baseclicks = Instance.new('IntValue', stats);
  baseclicks.Name = 'baseclicks'
  baseclicks.Value = 100;
end
-- localscript in startercharacterscript

local players = game:GetService("Players");
local client = players.LocalPlayer;
local mouse = client:GetMouse(); --method for getting the client's mouse
local event = game.ReplicatedStorage.OnClick --our remote event

local leaderstats = client.leaderstats or client:WaitForChild("leaderstats");
local clickvalue = leaderstats.baseclicks or leaderstats:WaitForChild("baseclicks");

mouse.Button1Down:Connect(function()
  if not (mouse.Target) then return; end

  if (mouse.Target.Name == "Baseplate") then
    event:FireServer(clickvalue.Value + 1); --fire the remote event
  end
  end
end)
-- server script in serverscriptservice for remote event receiver
game.ReplicatedStorage.OnClick.OnServerEvent:Connect(function(Player, Value)
  Player.leaderstats.baseclicks.Value = Value;
end

Однако, когда дело доходит до игры, в которой несколько игроков нажимают одновременно, удаленные события не рекомендуются, так как они, скорее всего, будут тормозить сервер или вызывать сетевой трафик — вам лучше использовать ClickDetectors.

person Kazuma Kiryu    schedule 08.10.2020