Para la siguiente etapa del ciclo del juego, los jugadores necesitan vender sus artículos por oro para permitirles comprar más espacio en sus mochilas.
Creación de una plataforma de venta
Los jugadores venderán sus artículos pisando una plataforma que les da oro por cada artículo en su bolsa.
Configurando la Plataforma
La plataforma puede ser cualquier parte e incluirá un script que maneje la venta.
Crea una nueva parte llamada SellPlatform. Personalizalo para que se adapte al tema de tu experiencia.
En SellPlatform, crea un nuevo script llamado SellScript y añade un hacer un comentario.
En SellScript, escriba local sellPart = script.Parent para obtener la parte de SellPlatform.
-- Vende todos los artículos de un jugador y les da orolocal sellPart = script.Parent
Manejo de eventos táctiles
Para usar la plataforma, el script necesita una función para comprobar si hay jugadores que la toquen.
Crea una función llamada onTouch() que comprueba si un jugador está tocando la plataforma.
local function onTouch(partTouched)local character = partTouched.ParentendPara cambiar cualquiera de las estadísticas en la tabla de clasificación, el script necesita saber qué jugador está controlando el personaje. En la sentencia if, use la función GetPlayerFromCharacter() para encontrar un jugador.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)En la siguiente línea, obtén el contenedor de estadísticas de ese jugador.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)if player then-- Obtiene la tabla de clasificación del jugador. Necesario para obtener artículos y dinerolocal playerStats = player:FindFirstChild("leaderstats")endEn la siguiente línea, crea variables para obtener el dinero y los artículos del jugador.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)if player then-- Obtiene la tabla de clasificación del jugador. Necesario para obtener artículos y dinerolocal playerStats = player:FindFirstChild("leaderstats")if playerStats then-- Obtiene los artículos y el dinero del jugadorlocal playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")endendPara verificar tu trabajo, añade una sentencia de impresión que se ejecutará si un jugador toca la parte de venta.
local playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")print("A player touched sellPart")En la parte inferior del script, conecte el onTouch() para vender el evento Touched de Part.
local Players = game:GetService("Players")local function onTouch(partTouched)local character = partTouched.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Obtiene la tabla de clasificación del jugador. Necesario para obtener artículos y dinerolocal playerStats = player:FindFirstChild("leaderstats")if playerStats then-- Obtiene los artículos y el dinero del jugadorlocal playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")print("A player touched sellPart")endendendsellPart.Touched:Connect(onTouch)Juega tu proyecto y entra en sellPart; deberías ver el mensaje "A Player touched sellPart" en la ventana de salida.
Vender artículos
En esta experiencia, un jugador obtendrá 100 Oro por cada objeto. Después de obtener dinero, sus artículos se restablecerán a 0, permitiendo a los jugadores explorar el mundo para obtener más artículos.
Codificación de una nueva función de venta
Bajo las variables, crea una función llamada sellItems() que obtiene dos parámetros llamados playerItems y playerGold.
-- Vende todos los artículos de un jugador y les da orolocal sellPart = script.Parentlocal function sellItems(playerItems, playerGold)endlocal function onTouch(partTouched)Para dar a los jugadores la cantidad correcta de oro, toma el valor de playerItems y multiplícalo por la cantidad de oro que deberían recibir por objeto. Este ejemplo da cien monedas de oro por objeto.
En la función sellItems(), escribe local totalSell = playerItems.Value * 100
local function sellItems(playerItems, playerGold)-- Obtiene la cantidad de artículos que tiene el jugador y lo multiplica por valor de artículo.local totalSell = playerItems.Value * 100endEscriba playerGold.Value += totalSell para agregar el oro de los artículos a su oro actual.
local function sellItems(playerItems, playerGold)local totalSell = playerItems.Value * 100-- Añade cuánto gana el jugador a su dineroplayerGold.Value += totalSellendEscriba playerItems.Value = 0. Esto restablece los artículos de un jugador a 0. Si los artículos de un jugador no se restablecen a 0, el script seguirá dando oro a los jugadores sin parar.
local function sellItems(playerItems, playerGold)local totalSell = playerItems.Value * 100playerGold.Value += totalSellplayerItems.Value = 0endEn la función onTouch(), debajo de la segunda sentencia if , llame a la función sellItems(). Pase en los parámetros, playerItems y playerGold para que puedan ser cambiados.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)if player then-- Obtiene la tabla de clasificación del jugador. Necesario para obtener artículos y dinerolocal playerStats = player:FindFirstChild("leaderstats")if playerStats then-- Obtiene los artículos y el dinero del jugadorlocal playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")if playerItems and playerGold thensellItems(playerItems, playerGold)endendendJuega tu proyecto; comprueba que cada vez que un jugador pise la plataforma, su oro aumente y los artículos estén configurados como 0.
Consejos para solucionar problemas
En este punto, la venta de artículos no funciona como se esperaba, prueba uno de los siguientes.
- sellItems() se llama en el segundo si la sentencia que comprueba los elementos del jugador.
- Cualquier IntValue, como playerItems, usa .Value al final si estás haciendo un cambio en él. El valor siempre está capitalizado.
- sellPart.Touched:Connect(onTouch) se escribe en la parte inferior **** del script.
- sellItems(playerItems, playerGold) se escribe antes del final de la sentencia if humanoid then.