Este proyecto usará declaraciones condicionales para crear una parte que dará o restará puntos en una tabla de clasificación dependiendo del color de la parte cuando se toque. Si es azul, le dará a los jugadores algunos puntos. Si es verde, le dará muchos puntos. Finalmente, si es rojo, le quitará puntos.
Configurando el proyecto
La parte de dar puntos se puede agregar a cualquier proyecto donde los puntos sean relevantes. Por instancia, un juego de aventura donde los jugadores acumulan puntos.
Seguimiento de puntos
Para configurar este proyecto, necesitarás una tabla de clasificación para rastrear los puntos y una parte que cambia de color. Se proporcionará el código para la tabla de clasificación.
Crea un nuevo script en ServerScriptService llamado Leaderboard. Copia y pega el código de abajo en el script.
--En ServerScriptService, crea un script llamado PlayerSetup con el contenido a continuación.local Players = game:GetService("Players")local function onPlayerJoin(player)local leaderstats = Instance.new("Folder")leaderstats.Name = "leaderstats"leaderstats.Parent = player-- Ejemplo de un IntValuelocal points = Instance.new("IntValue")points.Name = "Points"points.Value = 0points.Parent = leaderstatsend-- Ejecutar enPlayerJoin cuando el evento PlayerAdded se activePlayers.PlayerAdded:Connect(onPlayerJoin)
Parte que cambia de color
El script recorrerá tres colores diferentes para la parte. Cada color tendrá una variable para almacenar su valor RGB, un tipo de datos que incluye un conjunto de tres números (rojo, verde, azul) que crean colores.
Crea una parte llamada PointPart con un script adjunto llamado PointScript.
En script, usa script.Parent para hacer referencia a la parte.
local pointPart = script.ParentCrea variables para almacenar los diferentes colores. Cada variable debe estar configurada como Color3.fromRGB(), lo que crea un valor de color.
- Azul (Algunos Puntos): (0, 0, 255)
- Verde (Muchos Puntos): (0, 255, 0)
- Rojo (Puntos perdidos): (255, 0, 0)
local pointPart = script.Parent-- Coloreslocal blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255 ,0, 0)Añade variables para una pequeña cantidad de puntos, una mayor cantidad de puntos y un tercio para eliminar puntos.
-- Coloreslocal blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255 ,0, 0)-- Valores de puntoslocal smallPoints = 10local largePoints = 50local losePoints = 100
Añadiendo el Servicio de Jugadores
Para otorgar puntos, necesitarás tener acceso a la información del jugador que se almacena en el Explorador bajo Jugadores, y está separada del objeto del personaje. Aquí es donde se puede encontrar información como las estadísticas de la tabla de clasificación.
Puedes hacerlo agregando el servicio Players a tu script. Services son conjuntos adicionales de funciones pre-construidas hechas por ingenieros de Roblox para ahorrarte tiempo.
Obtén el servicio de Jugadores escribiendo:
local Players = game:GetService("Players")
-- Valores de puntoslocal smallPoints = 10local largePoints = 50local losePoints = 100-- Servicios necesarioslocal Players = game:GetService("Players")
Funciones y Eventos
PointsScript necesitará dos funciones. La primera función dará y restará partes. La segunda función verificará si un jugador ha tocado la parte. Estas funciones se conectarán luego con un evento táctil, que se ejecutará cuando se toque esa parte.
Cree una nueva función llamada givePoints() y un parámetro llamado player. Dentro, agregue una sentencia de impresión para usar para la prueba.
local Players = game:GetService("Players")-- Da o resta puntoslocal function givePoints(player)print("Giving player points")endBajo eso, crea una segunda función llamada partTouched() con un parámetro llamado otherPart .
-- Da o resta puntoslocal function givePoints(player)print("Giving player points")end-- Comprueba si el jugador ha tocado la partelocal function partTouched(otherPart)endDentro de la función, use la función GetPlayerFromCharacter() para verificar si hay un jugador en la variable otherPart.
-- Comprueba si el jugador ha tocado la partelocal function partTouched(otherPart)local player = Players:GetPlayerFromCharacter(otherPart.Parent)endSi un jugador toca la parte, se almacenará dentro de la variable del jugador. Si no, la variable permanecerá vacía. Por tu en posesión:
- Dentro de la función, comprueba si el jugador tiene un valor. Si lo tiene, llama givePoints(player) .
- Debajo de la función, conecte partTouched() al evento Tocado de pointPart .
-- Comprueba si el jugador ha tocado la partelocal function partTouched(otherPart)-- Obtiene el jugador si uno toca la partelocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)Ejecuta el proyecto. Cuando un jugador toque la parte, deberías ver un mensaje en la ventana de salida que dice: "Giving player points" Consejos para solucionar problemas:
- Comprueba que "Players" en game:GetService("Players") esté en mayúsculas y en citas.
- partTouched() debe estar conectado al evento Touched de pointPart.
Crear colores de bucle
Para realizar un bucle a través de los colores, el script usará un while =loop que cambia el color de la parte cada pocos segundos. La condición de este bucle será verdadera, por lo que puede ejecutarse indefinidamente.
Al final del script, crea un nuevo bucle temporal donde la condición es verdadera, lo que significa que el bucle siempre se ejecuta.
-- Comprueba si el jugador ha tocado la partelocal function partTouched(otherPart)-- Obtiene el jugador si uno toca la partelocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)-- Gira a través de los coloreswhile true doendPor tu en posesión, codifica un bucle que cambia pointPart a las variables de color que has creado. No te olvides de usar task.wait() entre los colores. Cuando termines, comprueba tu código con la versión de abajo.
-- Gira a través de 3 colores, esperando entre cada colorwhile true dopointPart.Color = bluetask.wait(3)pointPart.Color = greentask.wait(2)pointPart.Color = redtask.wait(1)endJuega a probar y comprueba que los tres colores giren sin parar.
Consejos para solucionar problemas
En este punto, si el bucle de color no funciona como se esperaba, intente uno de los siguientes.
- Comprueba que el bucle temporal esté en la parte inferior **** del script, debajo del evento Touched. Si el bucle no está en la parte inferior, evitará que otras partes del script se ejecuten correctamente.
- Comprueba que cada color dentro de Color3.fromRGB() esté escrito correctamente. Debe haber tres números entre 0 y 255 separados por comas, como (255, 50, 0).
Dar Puntos a los Jugadores
Los jugadores recibirán puntos basados en el color actual de la parte cuando la toquen.
Encontrar el color actual
Cuando un jugador toque la parte, el guión necesitará saber el color actual de la parte para otorgar puntos más tarde.
Encuentra givePoints() . Reemplaza tu mensaje de prueba con una variable para el color actual de pointPart. Esta variable determinará cuántos puntos gana (o pierde) el jugador.
local function givePoints(player)local currentColor = pointPart.ColorendPara afectar los puntos de un jugador, esa función necesita acceso a la tabla de clasificación del jugador. Cree una variable para almacenarla.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")endAhora añade una variable para obtener el valor de los Puntos del jugador, que es un hijo de su tabla de clasificación.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")end
Dar o restar puntos
A continuación, usarás if y elseif para dar o restar puntos dependiendo del color de la parte cuando se toque. Recuerda que el azul proporciona una pequeña cantidad, el verde proporciona muchos y el rojo resta puntos.
Dentro de givePoints(), debajo de las variables, use una sentencia if para verificar si el color actual es azul y, si es así, agregue smallPoints al valor actual de los puntos del jugador.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")if currentColor == blue thenplayerPoints.Value += smallPointsendendPara comprobar si es verde, añade otra condición. Si es verde, añade la variable largePoints a los puntos del jugador.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointsendUsa una sentencia else para restar puntos si pointsPart no era ni azul ni verde.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendFinalmente, destruye la parte después de la sentencia if para que el script no pueda seguir dando puntos.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendpointPart:Destroy()Prueba de juego y comprueba que cada color da puntos como se esperaba. Asegúrate de probar las tres condiciones .
Dar retroalimentación a los jugadores
La Parte de Punto funciona, pero los jugadores pueden no notar algo a menos que estén mirando su tabla de clasificación. Soluciona eso creando partículas cuando la Parte de Punto es destruida.
Añadir retroalimentación cuando los jugadores usan una parte, como sonidos, sacudidas o partículas, hace que las interacciones con objetos sean más satisfactorias para los jugadores.
Creando un Efecto de Partículas
El efecto de partículas será del mismo color que la parte cuando se toque. Dado que los colores se almacenaron en variables, es fácil reutilizarlos.
En givePoints() en la parte inferior, crea una nueva ParticleEmitter instancia. Asegúrese de que el nombre de la instancia esté escrito exactamente como se muestra.
local particle = Instance.new("ParticleEmitter")endLos emisores de partículas usan secuencias de colores para controlar su propiedad Color. Cree una nueva secuencia de colores y pase en el color de la parte actual.
-- Destruir partepointPart:Destroy()-- Crear partículaslocal particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)La partícula tendrá que ser relacionada con el jugador que la tocó. Crea una variable para obtener el aplicación de modeladode personaje del jugador. Luego, vincula la partícula a la cabeza del jugador.
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")Usa task.wait() por un segundo rápido, luego destruye las partículas.
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")task.wait(1)particle:Destroy()Prueba el juego y asegúrate de que las partículas sigan brevemente al jugador después de tocar cada color.
Consejos para solucionar problemas
En este punto, si las partículas no funcionan como se esperaba, pruebe uno de los siguientes.
- Haga al crear una nueva instancia que ParticleEmitter esté escrito exactamente como se muestra y dentro de las citas.
- Al criar las partículas, asegúrate de usar : entre playerCharacter y WaitForChild() sin espacios entre ellos.
Completa PointScript
Se puede hacer referencia a una versión terminada del guión a continuación.
local pointPart = script.Parent
--almacenamiento local = juego:GetService ("ServerStorage")
-- Da algunos puntos
local blue = Color3.fromRGB(0, 0, 255)
-- Da más puntos
local green = Color3.fromRGB(0, 255, 0)
-- Hace que los jugadores pierdan puntos
local red = Color3.fromRGB(255 ,0, 0)
-- oro dado a los jugadores
local smallPoints = 10
local largePoints = 50
local losePoints = 100
local Players = game:GetService("Players")
local function givePoints(player)
local currentColor = pointPart.Color
local playerStats = player:WaitForChild("leaderstats")
local playerPoints = playerStats:WaitForChild("Points")
-- Da al jugador oro basado en el color de la parte
if currentColor == blue then
playerPoints.Value += smallPoints
elseif currentColor == green then
playerPoints.Value += largePoints
else
playerPoints.Value -= losePoints
end
-- Destruye la parte, espera un segundo y luego destruye la partícula
pointPart:Destroy()
-- Crea un efecto de destellos y lo destruye
local playerCharacter = player.Character
local particle = Instance.new("ParticleEmitter")
particle.Color = ColorSequence.new(currentColor)
particle.Parent = playerCharacter:WaitForChild("Head")
task.wait(1)
particle:Destroy()
end
local function partTouched(otherPart)
local player = Players:GetPlayerFromCharacter(otherPart.Parent)
if player then
givePoints(player)
end
end
pointPart.Touched:Connect(partTouched)
-- Cambia el color de la parte en función de las variables. Debe estar en la parte inferior del script.
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end