
Đối với giai đoạn tiếp theo của vòng lặp trò chơi, người chơi cần bán các vật phẩm của họ để lấy vàng để cho phép họ mua thêm không gian trong ba lô của họ.
Tạo một nền tảng bán
Người chơi sẽ bán các vật phẩm của họ bằng cách bước vào một nền tảng cung cấp cho họ vàng cho mỗi vật phẩm trong túi của họ.
Thiết lập nền tảng
Nền tảng có thể là bất kỳ phần nào và sẽ bao gồm một kịch bản xử lý bán hàng.
Tạo một phần mới có tên SellPlatform. Tùy chỉnh nó phù hợp với chủ đề của trải nghiệm của bạn.
Trong SellPlatform, tạo một kịch bản mới có tên SellScript và thêm một bình luận.
Trong SellScript, hãy nhập local sellPart = script.Parent để có được phần SellPlatform.
-- Bán tất cả các vật phẩm của một người chơi và cho họ vànglocal sellPart = script.Parent
Xử lý sự kiện chạm
Để sử dụng nền tảng, kịch bản cần một chức năng để kiểm tra xem có bất kỳ người chơi nào chạm vào nó không.
Tạo một chức năng có tên là onTouch() kiểm tra xem một người chơi có chạm vào nền tảng hay không.
local function onTouch(partTouched)local character = partTouched.ParentendĐể thay đổi bất kỳ chỉ số nào trên bảng xếp hạng, kịch bản cần biết người chơi đang kiểm soát nhân vật.Trong tuyên bố if, sử dụng chức năng GetPlayerFromCharacter() để tìm một người chơi.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)Trên dòng tiếp theo, lấy container leaderstats của người chơi đó.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)if player then-- Nhận được bảng xếp hạng của người chơi. Cần thiết để lấy các vật phẩm và tiềnlocal playerStats = player:FindFirstChild("leaderstats")endTrên dòng tiếp theo, tạo các biến để lấy tiền và vật phẩm của người chơi.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)if player then-- Nhận được bảng xếp hạng của người chơi. Cần thiết để lấy các vật phẩm và tiềnlocal playerStats = player:FindFirstChild("leaderstats")if playerStats then-- Nhận các vật phẩm và tiền của người chơilocal playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")endendĐể kiểm tra công việc của bạn, thêm một tuyên bố in sẽ chạy nếu một người chơi chạm vào sellPart.
local playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")print("A player touched sellPart")Ở phía dưới cùng của kịch bản, kết nối onTouch() để bán sự kiện đã chạm vào của sellPart.
local Players = game:GetService("Players")local function onTouch(partTouched)local character = partTouched.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Nhận được bảng xếp hạng của người chơi. Cần thiết để lấy các vật phẩm và tiềnlocal playerStats = player:FindFirstChild("leaderstats")if playerStats then-- Nhận các vật phẩm và tiền của người chơilocal playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")print("A player touched sellPart")endendendsellPart.Touched:Connect(onTouch)Chơi dự án của bạn và bước vào sellPart; bạn nên thấy tin nhắn "A Player touched sellPart" trong cửa sổ Thành phẩm.
Bán vật phẩm
Trong trải nghiệm này, một người chơi sẽ nhận được 100 Vàng cho mỗi vật phẩm.Sau khi nhận được tiền, các mặt hàng của họ sẽ được đặt lại thành 0, cho phép người chơi khám phá thế giới để tìm thêm các mặt hàng.
Mã hóa chức năng bán mới
Dưới các biến, tạo một chức năng có tên là sellItems() mà nhận được hai tham số có tên là playerItems và playerGold .
-- Bán tất cả các vật phẩm của một người chơi và cho họ vànglocal sellPart = script.Parentlocal function sellItems(playerItems, playerGold)endlocal function onTouch(partTouched)Để cung cấp cho người chơi lượng vàng phù hợp, hãy lấy giá trị của playerItems và nhân nó với số vàng họ nên nhận mỗi mặt vật phẩm.Ví dụ này cho một trăm mảnh vàng mỗi mặt vật phẩm.
Trong chức năng sellItems(), nhập local totalSell = playerItems.Value * 100
local function sellItems(playerItems, playerGold)-- Nhận được bao nhiêu vật phẩm mà người chơi có và nhân đó với giá trị của vật phẩm.local totalSell = playerItems.Value * 100endLoại playerGold.Value += totalSell để thêm vàng cho các mục vào vàng hiện tại của chúng.
local function sellItems(playerItems, playerGold)local totalSell = playerItems.Value * 100-- Thêm bao nhiêu người chơi kiếm được tiền vào tiền của họplayerGold.Value += totalSellendLoại playerItems.Value = 0 .Điều này đặt lại các vật phẩm của người chơi về 0.Nếu các vật phẩm của người chơi không được đặt lại thành 0, thì kịch bản sẽ tiếp tục cho người chơi vàng mà không dừng lại.
local function sellItems(playerItems, playerGold)local totalSell = playerItems.Value * 100playerGold.Value += totalSellplayerItems.Value = 0endTrong chức năng onTouch() , dưới if tuyên bố thứ hai , gọi chức năng sellItems() .Truyền các tham số, playerItems và playerGold để chúng có thể được thay đổi.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)if player then-- Nhận được bảng xếp hạng của người chơi. Cần thiết để lấy các vật phẩm và tiềnlocal playerStats = player:FindFirstChild("leaderstats")if playerStats then-- Nhận các vật phẩm và tiền của người chơilocal playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")if playerItems and playerGold thensellItems(playerItems, playerGold)endendendChơi dự án của bạn; kiểm tra rằng mỗi khi một người chơi bước vào nền tảng, vàng của họ tăng lên và các mục được đặt thành 0.
Mẹo khắc phục sự cố
Tại thời điểm này, việc bán hàng không hoạt động như dự định, hãy thử một trong những điều sau.
- sellItems() được gọi trong giây thứ hai nếu câu lệnh kiểm tra các vật phẩm của người chơi.
- Bất kỳ IntValue, như playerItems, sử dụng .Value ở cuối nếu bạn đang thực hiện thay đổi cho nó. Giá trị luôn được viết hoa.
- sellPart.Touched:Connect(onTouch) được gõ tại phần dưới cùng của kịch bản.
- sellItems(playerItems, playerGold) được gõ trước khi kết thúc if humanoid then câu lệnh.