Oyunun bir sonraki aşamasında, oyuncuların çantasında daha fazla alan satın alabilmeleri için altın satmaları gerekir.
Bir Satış Platformu Oluşturulması
Oyuncular, çantadaki her öğey için altın veren bir platforma adım atlayarak eşyalarını satacak.
Platform'u ayarlama
Platform herhangi bir parça olabilir ve satışı işleyen bir senaryo içerecektir.
SellPlatform adında yeni bir parça oluşturun. Tasarımınızı deneyiminizin temasına uygun hale getirin.
SellPlatform'da, SellScript adında yeni bir senaryo oluşturun ve bir yorum ekleyin.
SellScript'te, local sellPart = script.Parent
-- Bir oyuncunun tüm eşyalarını satar ve onlara altın verirlocal sellPart = script.Parent
Dokunmatik Etkinlikleri Ele Alma
platformkullanmak için, kodun herhangi bir oyuncunun dokunup dokunmadığını kontrol etmesi için bir işleve ihtiyacı vardır.
Bir oyuncunun platforma dokunup dokunmadığını kontrol eden onTouch() adlı bir işlev oluşturun.
local function onTouch(partTouched)local character = partTouched.Parentendliderlik tablosutablosundaki herhangi bir istatistik değiştirmek için, özellik kontrol eden oyuncuyu bilmesi gerekir. ifadesinde, GetPlayerFromCharacter() işlevini kullanarak bir oyuncu bulun.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)Sonraki satırda, oyuncunun lider istatistikleri kutusunu alın.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)if player then-- oyunculiderlik tablosualır. Öğeleri ve para almak için gereklidirlocal playerStats = player:FindFirstChild("leaderstats")endSonraki satırda, oyuncunun para ve eşyalarını almak için değişkenler oluştur.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)if player then-- oyunculiderlik tablosualır. Öğeleri ve para almak için gereklidirlocal playerStats = player:FindFirstChild("leaderstats")if playerStats then-- oyuncueşyalarını ve parasını alırlocal playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")endendÇalışmanızı test etmek için, bir oyuncu sellPart'a dokunursa çalıştırılan bir print ifadesi ekleyin.
local playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")print("A player touched sellPart")Script'in altındaki onTouch() 'i satPart'ın dokunulduğu etkinliği satmak için bağlayın.
local Players = game:GetService("Players")local function onTouch(partTouched)local character = partTouched.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- oyunculiderlik tablosualır. Öğeleri ve para almak için gereklidirlocal playerStats = player:FindFirstChild("leaderstats")if playerStats then-- oyuncueşyalarını ve parasını alırlocal playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")print("A player touched sellPart")endendendsellPart.Touched:Connect(onTouch)Projenizi oynatın ve satışPart'a adım atın; çıktı Penceresindeki mesajı görün "A Player touched sellPart" .
Eşyaları Satmak
Bu deneyimde, bir oyuncu her öğe için 100 Altın alacak. Para aldıktan sonra, öğeleri 0 olarak yeniden ayarlanacak ve oyuncular dünyayı daha fazla öğe için keşfetmeye izin verecek.
Yeni Bir Satış Fonksiyonu Kodlaması
Değişkenler altında, iki parametreli bir işlev oluşturun, bunlar sellItems() ve playerItems olarak isimlendirilmiştir.
-- Bir oyuncunun tüm eşyalarını satar ve onlara altın verirlocal sellPart = script.Parentlocal function sellItems(playerItems, playerGold)endlocal function onTouch(partTouched)Oyunculara doğru miktarda altın vermek için, playerItems 'in değerini al ve altın başına almaları gereken miktarı ile çarpan. Bu örnek, her bir öğe için yüz altın parçası verir.
In the sellItems() function, type local totalSell = playerItems.Value * 100
local function sellItems(playerItems, playerGold)-- Oyuncunun kaç tane eşyası olduğunu alır ve değerine göre çoğaltır.local totalSell = playerItems.Value * 100endplayerGold.Value+총Sell yazın, böylece altın öğelerin mevcut altına eklenir.
local function sellItems(playerItems, playerGold)local totalSell = playerItems.Value * 100-- Oyuncunun para kazandığını ne kadar ekleyinplayerGold.Value += totalSellendType playerItems.Value = 0 . Bu, bir oyuncunun öğelerini 0'a yeniden ayarlar. Eğer bir oyuncunun öğeleri 0'a yeniden ayarlanmazsa, kod her oyuncuya altın vermeye devam eder.
local function sellItems(playerItems, playerGold)local totalSell = playerItems.Value * 100playerGold.Value += totalSellplayerItems.Value = 0endIn the onTouch() function, ikinci if statement under the second if statement , call the 1> sellItems()1> function. Pass in the parameters, 4> playerItems4> and 7> playerGold7> so they can be changed.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)if player then-- oyunculiderlik tablosualır. Öğeleri ve para almak için gereklidirlocal playerStats = player:FindFirstChild("leaderstats")if playerStats then-- oyuncueşyalarını ve parasını alırlocal playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")if playerItems and playerGold thensellItems(playerItems, playerGold)endendendProjenizi oynatın; herhangi bir oyuncu platforma adım attığında, altınlarının artmasını ve öğelerinin 0 olarak ayarlandığını kontrol edin.
Hata ayıklama ipuçları
Bu noktada, öğeleri satmak istediğiniz gibi çalışmaz, aşağıdaki birini deneyin.
- sellItems() ifadesi oyuncu'ın öğelerini kontrol eden ifade ikinci sırada çağrılır.
- PlayerItems gibi herhangi bir IntValue, değişiklik yaparsanız sonunda .Value'yi kullanır. Değer her zaman başlık olarak yazılır.
- sellPart.Touched:Connect(onTouch) kullanıcının sağından aşağıdaki yerlerde yazılmıştır.
- sellItems(playerItems, playerGold) ifadelerinin sonundan önce yazılır.