Para a próxima fase do ciclo do jogo, os jogadores precisam vender seus itens por ouro para poder comprar mais espaço em suas mochilas.
Criando uma plataforma de venda
Os jogadores venderão seus itens pisando em uma plataforma que lhes dá ouro por cada item em sua bolsa.
Configurando a Plataforma
A plataforma pode ser qualquer parte e incluirá um script que lida com a venda.
Crie uma nova parte chamada SellPlatform. Personalize-a para se adequar ao tema da sua experiência.
Na SellPlatform, crie um novo script chamado SellScript e adicione um comentar.
No SellScript, digite local sellPart = script.Parent para obter a parte SellPlatform.
-- Vende todos os itens de um jogador e lhe dá ourolocal sellPart = script.Parent
Gerenciando Eventos de Toque
Para usar a plataforma, o script precisa de uma função para verificar se há jogadores tocando nela.
Crie uma função chamada onTouch() que verifica se um jogador está tocando a plataforma.
local function onTouch(partTouched)local character = partTouched.ParentendPara alterar qualquer uma das estatísticas na tabela de classificação, o script precisa saber qual jogador está controlando o personagem. Na instrução if, use a função GetPlayerFromCharacter() para encontrar um jogador.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)Na próxima linha, pegue o recipiente de estatísticas de liderança desse jogador.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)if player then-- Obtém a tabela de classificação do jogador. Necessário para obter itens e dinheirolocal playerStats = player:FindFirstChild("leaderstats")endNa próxima linha, crie variáveis para obter o dinheiro e os itens do jogador.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)if player then-- Obtém a tabela de classificação do jogador. Necessário para obter itens e dinheirolocal playerStats = player:FindFirstChild("leaderstats")if playerStats then-- Obtém os itens e o dinheiro do jogadorlocal playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")endendPara verificar seu trabalho, adicione uma declaração de impressão que será rodada se um jogador tocar em sellPart.
local playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")print("A player touched sellPart")Na parte inferior do script, conecte o onTouch() para vender o evento Touched da Part.
local Players = game:GetService("Players")local function onTouch(partTouched)local character = partTouched.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Obtém a tabela de classificação do jogador. Necessário para obter itens e dinheirolocal playerStats = player:FindFirstChild("leaderstats")if playerStats then-- Obtém os itens e o dinheiro do jogadorlocal playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")print("A player touched sellPart")endendendsellPart.Touched:Connect(onTouch)Jogue seu projeto e toque em sellPart; você deve ver a mensagem "A Player touched sellPart" na Janela de Saída.
Vender Itens
Nesta experiência, um jogador receberá 100 ouro por cada item. Depois de receber dinheiro, seus itens serão revertidos para 0, permitindo que os jogadores explorem o mundo para obter mais itens.
Codificando uma Nova Função de Venda
Sob as variáveis, crie uma função chamada sellItems() que receba dois parâmetros chamados playerItems e playerGold.
-- Vende todos os itens de um jogador e lhe dá ourolocal sellPart = script.Parentlocal function sellItems(playerItems, playerGold)endlocal function onTouch(partTouched)Para dar aos jogadores a quantidade certa de ouro, pegue o valor do playerItems e multiplique-o pela quantidade de ouro que eles deveriam receber por item. Este exemplo dá cem moedas de ouro por item.
Na função sellItems(), digite local totalSell = playerItems.Value * 100
local function sellItems(playerItems, playerGold)-- Obtém quantos itens o jogador tem e multiplica isso pelo valor do item.local totalSell = playerItems.Value * 100endDigite playerGold.Value += totalSell para adicionar o ouro dos itens ao ouro atual.
local function sellItems(playerItems, playerGold)local totalSell = playerItems.Value * 100-- Adicione o quanto o jogador ganha ao seu dinheiroplayerGold.Value += totalSellendDigite playerItems.Value = 0. Isso reduz os itens de um jogador para 0. Se os itens de um jogador não forem reduzidos a 0, o script continuará dando ouro aos jogadores sem parar.
local function sellItems(playerItems, playerGold)local totalSell = playerItems.Value * 100playerGold.Value += totalSellplayerItems.Value = 0endNa função onTouch(), sob a segunda declaração if , chame a função sellItems(). Passe nos parâmetros, playerItems e playerGold para que eles possam ser alterados.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)if player then-- Obtém a tabela de classificação do jogador. Necessário para obter itens e dinheirolocal playerStats = player:FindFirstChild("leaderstats")if playerStats then-- Obtém os itens e o dinheiro do jogadorlocal playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")if playerItems and playerGold thensellItems(playerItems, playerGold)endendendJogue seu projeto; verifique se sempre que um jogador pisar na plataforma, seu ouro aumenta e os itens são definidos como 0.
Dicas de solução de problemas
Neste ponto, a venda de itens não está funcionando como esperado, tente uma das seguintes opções abaixo.
- sellItems() é chamado no segundo se declaração que verifica os itens do jogador.
- Qualquer IntValue, como playerItems, usa .Value no final se você estiver fazendo uma mudança para ele. O valor é sempre capitalizado.
- sellPart.Touched:Connect(onTouch) é digitado na parte inferior do script.
- sellItems(playerItems, playerGold) é digitado antes do final da instrução if humanoid then.