Skrip tombol upgrade

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.


Pemain sekarang dapat mengumpulkan koin dan kehilangan koin tersebut saat mereka mati, tetapi koin tidak melakukan apa-apa, dan kebanyakan dari dunia 3D tidak dapat diakses tanpa kemampuan untuk melompat sangat tinggi. Bagian dari tutorial ini mengajarkan Anda cara menyelesaikan logika untuk pengalaman Anda dengan menambahkan tombol di layar yang menghabiskan koin untuk meningkatkan kekuatan lompatan.

Buat tombol upgrade

Antarmuka 2D di Roblox biasanya terdiri dari kumpulan komponen GUI di dalam wadah GUI. Dalam hal ini, Anda hanya memerlukan komponen TextButton yang mengatakan Upgrade Jump (5 Koin) di dalam wadah ScreenGui.

Siapkan GUI upgrade

Di ReplicatedStorage, buat folder bernama Instances.
Di dalam folder Instances, buat ScreenGui bernama JumpPurchaseGui dengan ResetOnSpawn dinonaktifkan.
Di dalam JumpPurchaseGui, buat TextButton bernama JumpButton dengan properti sebagai berikut:
- Text: "Upgrade Jump (5 Koin)"
- TextSize: 25
- AnchorPoint: 1, 1
- Position: {1, 0}, {1, 0}
Juga di dalam folder Instances, buat RemoteFunction bernama IncreaseJumpPowerFunction.
Akhirnya, di layanan StarterPlayer, aktifkan properti CharacterUseJumpPower.

Tentukan data kekuatan lompatan

Saat ini, hanya jumlah koin yang disimpan untuk setiap pemain di skrip modul PlayerData. Anda juga perlu menyimpan dan memperbarui kekuatan lompatan dengan cara yang sama. Karena fungsi dalam PlayerData tidak spesifik untuk data yang diubah, yang diperlukan untuk menyimpan kekuatan lompatan pemain adalah menambahkan kunci Jump dan menginisialisasi nilai awalan di defaultPlayerData().

Perbarui PlayerData dengan kekuatan lompatan

Di ServerStorage, ganti kode yang ada di module script PlayerData dengan yang berikut:
```lua
local PlayerData = {}
PlayerData.COIN_KEY_NAME = "Coins"
PlayerData.JUMP_KEY_NAME = "Jump"
local playerData = {
--[[
[userId: string] = {
["Coins"] = coinAmount: number,
["Jump"] = jumpPower: number
}
--]]
}
local function defaultPlayerData()
return {
[PlayerData.COIN_KEY_NAME] = 0,
[PlayerData.JUMP_KEY_NAME] = 0,
}
end
local function getData(player)
local data = playerData[tostring(player.UserId)] or defaultPlayerData()
playerData[tostring(player.UserId)] = data
return data
end
function PlayerData.getValue(player, key)
return getData(player)[key]
end
function PlayerData.updateValue(player, key, updateFunction)
local data = getData(player)
local oldValue = data[key]
local newValue = updateFunction(oldValue)
data[key] = newValue
return newValue
end
return PlayerData
```

Perbarui data kekuatan lompatan

Sekarang bahwa PlayerData dapat melacak kekuatan lompatan, Anda perlu menerapkan logika di server untuk meningkatkan kekuatan lompatan dari permintaan klien pemain.

Server dan klien dapat berkomunikasi melalui RemoteEvents atau RemoteFunctions. Event remote tidak menghasilkan saat dipicu dan dapat digunakan untuk komunikasi satu arah. Fungsi remote, di sisi lain, menghasilkan sampai mereka menerima balasan, yang memungkinkan komunikasi dua arah.

Untuk tutorial ini, klien perlu tahu jika server berhasil meningkatkan kekuatan lompatan pemain, jadi Anda harus menggunakan fungsi remote.

Buat JumpService

Di ServerScriptService, buat skrip bernama JumpService dengan kode berikut:
```lua
-- Layanan
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerStorage = game:GetService("ServerStorage")
local Players = game:GetService("Players")
-- Modul
local Leaderboard = require(ServerStorage.Leaderboard)
local PlayerData = require(ServerStorage.PlayerData)
-- Event
local IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunction
local JUMP_KEY_NAME = PlayerData.JUMP_KEY_NAME
local COIN_KEY_NAME = PlayerData.COIN_KEY_NAME
local JUMP_POWER_INCREMENT = 30
local JUMP_COIN_COST = 5
local function updateJumpPower(player, updateFunction)
-- Perbarui tabel kekuatan lompat
local newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)
-- Perbarui kekuatan lompat pemain
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
humanoid.JumpPower = newJumpPower
-- Perbarui papan peringkat lompatan
Leaderboard.setStat(player, JUMP_KEY_NAME, newJumpPower)
end
end
local function onPurchaseJumpIncrease(player)
local coinAmount = PlayerData.getValue(player, COIN_KEY_NAME)
if coinAmount < JUMP_COIN_COST then
return false
end
-- Tingkatkan kekuatan lompat pemain
updateJumpPower(player, function(oldJumpPower)
oldJumpPower = oldJumpPower or 0
return oldJumpPower + JUMP_POWER_INCREMENT
end)
-- Perbarui tabel koin
local newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)
return oldCoinAmount - JUMP_COIN_COST
end)
-- Perbarui papan peringkat koin
Leaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)
return true
end
local function onCharacterAdded(player)
-- Reset kekuatan lompat pemain saat karakter ditambahkan
updateJumpPower(player, function(_)
return 0
end)
end
-- Inisialisasi pemain yang ditambahkan sebelum terhubung ke event PlayerAdded
for _, player in Players:GetPlayers() do
onCharacterAdded(player)
end
-- Inisialisasi normal pemain dari event PlayerAdded
local function onPlayerAdded(player)
player.CharacterAdded:Connect(function()
onCharacterAdded(player)
end)
end
local function onPlayerRemoved(player)
updateJumpPower(player, function(_)
return nil
end)
end
IncreaseJumpPowerFunction.OnServerInvoke = onPurchaseJumpIncrease
Players.PlayerAdded:Connect(onPlayerAdded)
Players.PlayerRemoving:Connect(onPlayerRemoved)
```

Bagian berikut menjelaskan kode dengan lebih detail.

  • Perbarui data kekuatan lompatan - updateJumpPower() memperbarui kekuatan lompatan pemain dan papan peringkat untuk memberikan umpan balik visual. Fungsi ini mirip dengan kode yang mengurangi pemain dalam Buat bahaya pemain. Dengan menyediakan model Character dan Humanoid ada untuk pemain yang ditingkatkan, fungsi ini memperbarui nilai properti JumpPower ke nilai baru yang disimpan oleh PlayerData, meningkatkannya sebesar 30. Jika Anda ingin permainan Anda bertahan sedikit lebih lama, Anda dapat mengurangi angka ini.

  • Validasi permintaan server - onPurchaseJumpIncrease() pertama memeriksa bahwa pemain benar-benar memiliki jumlah koin yang diperlukan untuk membeli upgrade. Semua permintaan dari klien ke server harus divalidasi untuk mencegah pelaku jahat mengirim permintaan palsu dan mengeksploitasi permainan Anda.

Tambahkan tombol ke GUI pemain

Objek ScreenGui hanya akan muncul di layar jika dipasang ke objek PlayerGui pemain. Secara default, ini berisi GUI sistem seperti jendela chat. Anda sekarang perlu membuat skrip di ReplicatedStorage untuk menyalin tombol upgrade ke dalam GUI setiap pemain dan menerapkan perilaku saat tombol ditekan.

Buat JumpButtonClickHandler

Di ReplicatedStorage, buat skrip bernama JumpButtonClickHandler dengan RunContext disetel ke Client dan kode berikut:
```lua
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local playerGui = player.PlayerGui
local IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunction
local jumpPurchaseGui = ReplicatedStorage.Instances.JumpPurchaseGui
local jumpButton = jumpPurchaseGui.JumpButton
local function onButtonClicked()
local success, purchased = pcall(IncreaseJumpPowerFunction.InvokeServer, IncreaseJumpPowerFunction)
if not success then
-- purchased akan menjadi pesan kesalahan jika berhasil false
error(purchased)
elseif success and not purchased then
warn("Koin tidak cukup!")
end
end
jumpButton.Activated:Connect(onButtonClicked)
-- Tambahkan JumpPurchaseGui ke GUI pemain
jumpPurchaseGui.Parent = playerGui
```

Bagian berikut menjelaskan kode dengan lebih detail.

  • Dapatkan referensi ke GUI dan fungsi server - Variabel IncreaseJumpPowerFunction, jumpPurchaseGui, dan jumpButton berisi referensi ke fungsi dan GUI yang memanggil fungsi yang Anda perlukan nanti.
  • Definisikan penangan acara - onButtonClicked() mendefinisikan logika untuk saat pengguna mengklik tombol upgrade. Ia menggunakan pcall() (panggilan terlindungi) untuk memanggil RemoteFunction. Komunikasi klien-server seperti ini memerlukan pcall() untuk menangani kesalahan atau masalah koneksi.
  • Hubungkan penangkap ke tombol - Event Activated kompatibel di semua platform, termasuk mouse, touchscreen, atau konteks gamepad. Ini dipicu saat klik, sentuh, atau tombol gamepad dilepaskan.

Uji permainan

Pilih Uji dari dropdown dan klik Mainkan. Tombol Upgrade Jump muncul di sudut kanan bawah.

Cobalah mengklik tombol sebelum Anda mengumpulkan koin untuk memeriksa bahwa itu tidak memberikan Anda kekuatan lompatan tambahan, kemudian coba kumpulkan beberapa koin dan lihat apakah upgrade berfungsi saat Anda mengklik lagi.

Dengan kode selesai, coba menyesuaikan tingkat kesulitan: tambahkan koin jika kecepatan terasa lambat, atau hapus beberapa dan sembunyikan di tempat yang lebih sulit jika upgrade datang terlalu mudah.

©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.