
Na następny etap pętli gry gracze muszą sprzedać swoje przedmioty za złoto, aby móc kupić więcej miejsca w swoich plecakach.
Stwórz platformasprzedażową
Gracze sprzedadzą swoje przedmioty, wsiąkając na platformę, która da im złoto za każdy przedmiot w ich torbie.
Ustaw platforma
Platforma może być dowolną częścią i będzie zawierać skrypt, który zajmuje się sprzedażą.
Stwórz nową część o nazwie SellPlatform. Dostosuj ją do tematu swojego doświadczenia.
W SellPlatform utwórz nowy skrypt o nazwie SellScript i dodaj komentować.
W SellScript wpisz local sellPart = script.Parent, aby uzyskać część SellPlatform.
-- Sprzedaje wszystkie przedmioty gracza i daje im złotolocal sellPart = script.Parent
Ręczne zdarzenia dotykowe
Aby korzystać z platforma, skrypt potrzebuje funkcji, aby sprawdzić, czy którykolwiek gracz go dotknie.
Stwórz funkcję o nazwie onTouch(), która sprawdza, czy gracz dotyka platforma.
local function onTouch(partTouched)local character = partTouched.ParentendAby zmienić którąkolwiek ze statystyk na rankingwyników, skrypt musi wiedzieć, który gracz kontroluje postać.W oświadczeniu if użyj funkcji GetPlayerFromCharacter(), aby znaleźć gracza.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)Na następnej linii uzyskaj kontener statystyk gracza.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)if player then-- Zdobywa rankingwyników gracza. Potrzebne do zdobycia przedmiotów i pieniędzylocal playerStats = player:FindFirstChild("leaderstats")endNa następnej linii utwórz zmienne, aby uzyskać pieniądze i przedmioty gracza.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)if player then-- Zdobywa rankingwyników gracza. Potrzebne do zdobycia przedmiotów i pieniędzylocal playerStats = player:FindFirstChild("leaderstats")if playerStats then-- Zdobywa przedmioty i pieniądze graczalocal playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")endendAby sprawdzić swoją pracę, dodaj oświadczenie drukujące, które zostanie wykonane, jeśli gracz dotknie sprzedaj część.
local playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")print("A player touched sellPart")Na dole skryptu połącz onTouch() z wydarzeniem Touched sprzedawcy części.
local Players = game:GetService("Players")local function onTouch(partTouched)local character = partTouched.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Zdobywa rankingwyników gracza. Potrzebne do zdobycia przedmiotów i pieniędzylocal playerStats = player:FindFirstChild("leaderstats")if playerStats then-- Zdobywa przedmioty i pieniądze graczalocal playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")print("A player touched sellPart")endendendsellPart.Touched:Connect(onTouch)Odtwórz swój projekt i wejdź na sprzedać część; powinieneś zobaczyć wiadomość "A Player touched sellPart" w oknie wyjścia.
Sprzedaj przedmioty
W tym doświadczeniu gracz otrzyma 100 złota za każdy przedmiot.Po otrzymaniu pieniędzy ich przedmioty zostaną zresetowane do 0, co pozwoli graczom odkrywać świat dla więcej przedmiotów.
Zaprogramuj nową funkcję sprzedaży
Pod zmiennymi stwórz funkcję o nazwie sellItems(), która otrzymuje dwa parametry o nazwie playerItems i playerGold.
-- Sprzedaje wszystkie przedmioty gracza i daje im złotolocal sellPart = script.Parentlocal function sellItems(playerItems, playerGold)endlocal function onTouch(partTouched)Aby dać graczom odpowiednią ilość złota, weź wartość playerItems i pomnóż ją przez ilość złota, jaką powinni otrzymać za każdy przedmiot.Ten przykład daje sto sztuk złota na przedmiot.
W funkcji sellItems() wpisz local totalSell = playerItems.Value * 100
local function sellItems(playerItems, playerGold)-- Liczba przedmiotów, które posiada gracz, i mnoży ją przez wartość przedmiotu.local totalSell = playerItems.Value * 100endWpisz playerGold.Value += totalSell, aby dodać złoto do przedmiotów do ich obecnego złota.
local function sellItems(playerItems, playerGold)local totalSell = playerItems.Value * 100-- Dodaj, ile gracz zarabia na swoje pieniądzeplayerGold.Value += totalSellendTyp playerItems.Value = 0 .Ustawia przedmioty gracza z powrotem do 0.Jeśli przedmioty gracza nie zostaną zresetowane do 0, skrypt będzie nadal dawać graczom złoto bez przerwania.
local function sellItems(playerItems, playerGold)local totalSell = playerItems.Value * 100playerGold.Value += totalSellplayerItems.Value = 0endW funkcji pod drugim if oświadczeniem wezwij funkcję .Przekaż parametry, playerItems i playerGold, aby mogły zostać zmienione.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)if player then-- Zdobywa rankingwyników gracza. Potrzebne do zdobycia przedmiotów i pieniędzylocal playerStats = player:FindFirstChild("leaderstats")if playerStats then-- Zdobywa przedmioty i pieniądze graczalocal playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")if playerItems and playerGold thensellItems(playerItems, playerGold)endendendOdtwórz swój projekt; sprawdź, że za każdym razem, gdy gracz wkroczy na platforma, jego złoto wzrasta, a przedmioty są ustawione na 0.
Wskazówki dotyczące rozwiązywania problemów
W tym momencie sprzedaż przedmiotów nie działa tak, jak zakładano, spróbuj jednego z poniższych.
- sellItems() jest wzywany w drugiej stwierdzeniu, które sprawdza przedmioty gracza.
- Każda wartość IntValue, tak jak playerItems, używa .Value na końcu, jeśli dokonujesz zmiany w niej. Wartość zawsze jest pisana wielką literą.
- sellPart.Touched:Connect(onTouch) jest wpisane na dole skryptu .
- sellItems(playerItems, playerGold) jest wpisane przed końcem oświadczenia if humanoid then.