Este proyecto usará declaraciones condicionales para crear una parte que dará o restará puntos en una tabla de clasificación dependiendo de qué color es el parte cuando se toca. Si es azul, entonces dará a los jugadores algunos puntos. Si es verde, entonces dará muchos puntos. Finalmente, si es rojo, entonces tomará puntos.
Configurando el Proyecto
La parte que da puntos puede ser añadida a cualquier proyecto donde los puntos sean relevantes. Por instancia, un juego de aventura donde los jugadores recogen puntos.
Rastreo de puntos
Para configurar este proyecto, necesitará un tablero de clasificación para rastrear los puntos y una parte que cambia de color. El código para el tablero de clasificación se proporcionará.
Crear un nuevo script en ServerScriptService nombrado Leaderboard. Copiar y pegar el código a continuación en el script.
--En ServerScriptService, crea un script llamado PlayerSetup con los contenidos 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 valor numéricolocal points = Instance.new("IntValue")points.Name = "Points"points.Value = 0points.Parent = leaderstatsend-- Ejecutar enPlayerJoin cuando se activa el evento PlayerAddedPlayers.PlayerAdded:Connect(onPlayerJoin)
Parte cambia color
El script pasará por 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 adherido llamado PointScript.
En PointScript, usa script.Parent para referirte a la parte.
local pointPart = script.ParentCree variables para almacenar los diferentes colores. Cada variable debe establecerse a Color3.fromRGB(), que crea un valor de color.
- Azul (Algunos Puntos): (0, 0, 255)
- Verde (Muchos Puntos): (0, 255, 0)
- Rojo (Pérdida de puntos): (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ñadir variables para una pequeña cantidad de puntos, una cantidad mayor de puntos y una tercera 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
Agregar el servicio de jugadores
Para otorgar puntos, tendrás que obtener acceso a la información del jugador que se almacena en el Explorador debajo de los jugadores, y es separada del objeto de personaje. Aquí es donde se pueden encontrar informaciónes como las estadísticas de la tabla de clasificación.
Puede hacerlo agregando el servicio Jugadores a su script. Los servicios son conjuntos adicionales de funciones pre-construidas hechas por los ingenieros de Roblox para ahorrarle tiempo.
Obtener el servicio 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 con un evento de toque, que se ejecuta siempre que se toca esa parte.
Crea una nueva función llamada givePoints() y un parámetro llamado player . Adentro, agrega una declaración de impresión para usar para probar.
local Players = game:GetService("Players")-- Agrega 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 .
-- Agrega o resta puntoslocal function givePoints(player)print("Giving player points")end-- Comprueba si el jugador tocó la partelocal function partTouched(otherPart)endEn la función, usa la función GetPlayerFromCharacter() para checar si hay un jugador en la otra variable de parte.
-- Comprueba si el jugador tocó la partelocal function partTouched(otherPart)local player = Players:GetPlayerFromCharacter(otherPart.Parent)endSi un jugador toca la parte, se guardará dentro de la variable del jugador. Si no, la variable seguirá estando vacía. Por su en posesión:
- Dentro de la función, compruebe si el jugador tiene un valor. Si hay uno, luego llame a givePoints(player) .
- Debajo de la función, conecta partTouched() al evento Touched de pointPart .
-- Comprueba si el jugador tocó la partelocal function partTouched(otherPart)-- Obtiene al jugador si uno tocó la partelocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)Correr el proyecto. Cuando un jugador toque la parte, debería ver un mensaje en la ventana de salida que dice: «Giving player points» Soluciones de problemas:
- Asegúrese de que "Players" en game:GetService("Players") esté capitalizado y en cursiva.
- partTouched() debe conectarse al evento de puntoTouched de Touched .
Crear Colores de Loop
Para repetición a través de los colores, el script usará un tiempo = loop que cambia el color de la parte cada pocos segundos. La condición para este repetición será cierta, por lo que se puede ejecutar indefinidamente.
Al finalizar el script, crea una nueva condición mientras la cosa es cierta, lo que significa que la cosa siempre se ejecuta.
-- Comprueba si el jugador tocó la partelocal function partTouched(otherPart)-- Obtiene al jugador si uno tocó la partelocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)-- Ciclos a través de los coloreswhile true doendPor su en posesión, códalo por un tiempo para que cambie el punto de partida a las variables de color que has creado. No olvides usar task.wait() entre colores. Cuando termines, comprueba tu código contra la versión a continuación.
-- Ciclos 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-prueba y comprueba que todos los tres colores se repitan sin parar.
Consejos de solución de problemas
En este punto, si el color no se repite como se esperaba, intente uno de los siguientes a continuación.
- Asegúrese de que la ronda de mientras esté en la parte inferior del script, debajo del evento Touched. Si la ronda no está en la parte inferior, mantendrá otras partes del script funcionando correctamente.
- Asegúrese de 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) .
Darle Puntos a los Jugadores
Los jugadores se darán puntos según el color actual de la parte cuando la tocan.
Encuentra el color actual
Cada vez que un jugador toque la parte, el script 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 puntoPart. Esta variable determinará la cantidad de puntos que el jugador obtiene (o pierde).
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 agregue 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 Quitar Puntos
A continuación, usarás if y elif para dar o restar puntos dependiendo del color de la parte cuando se toca. Recuerda que azul proporciona una pequeña cantidad, verde proporciona muchos y rojo resta puntos.
Dentro de givePoints() , debajo de las variables, usa una declaración if para ver si el color actual es azul y, si es así, añade smallPoints al valor 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 verificar si es verde, agregue otra condición. Si es verde, luego agregue la variable largePoints al punto del jugador.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointsendUsa otra declaración para restar puntos si puntosPart no era azul o verde.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendPor último, destruye la parte después de la declaración if para que el script no pueda seguir dando puntos.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendpointPart:Destroy()Pruebe y verifique que cada color dé los puntos esperados. Asegúrese de probar todas las condiciones tres .
Darle a los jugadores retroalimentación
El PointPart funciona, pero los jugadores podrían no notar que algo sucedió a menos que tengan la oportunidad de mirar su tabla de clasificación. Arregla eso creando partículas cuando el PointPart se destruya.
Añadir comentarios cuando los jugadores usan una parte, como sonidos, temblor o partículas, hace que las interacciones con los objetos sean más satisfactorias para los jugadores.
Creando un Efecto de Partículas
El efecto de partículas será el mismo color que la parte cuando se toca. Ya que los colores se almacenaron en variables, es fácil de reutilizarlos.
En givePoints() en la parte inferior, crea una nueva instancia de ParticleEmitter . Asegúrese de que el nombre de la instancia se escriba exactamente como se muestra.
local particle = Instance.new("ParticleEmitter")endLos emisores de partículas usan secuencias de color para controlar su propiedad de color. Crear una nueva secuencia de color y pasar en el color actual del emisor.
-- Destruir partepointPart:Destroy()-- Crear partículaslocal particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)La partícula necesitará ser padre para el jugador que la tocó. Crear una variable para obtener el aplicación de modeladode Personaje del jugador. Luego, padre la partícula para 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, 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()Pruebe el juego y asegúrese de que las partículas brevemente sigan al jugador después de tocar cada color.
Consejos de solución de problemas
En este punto, si las partículas no funcionan como se esperaba, intente una de las siguientes opciones a continuación.
- Haz cuando crees una nueva instancia que ParticleEmitter se escriba exactamente como se muestra y dentro de las citas.
- Al padre las partículas, asegúrese de usar : entre playerCharacter y WaitForChild() con no espacios entre.
Completa el script
Una versión terminada del script se puede referir 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")
-- Otorga oro al jugador en función del 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 según las variables. Necesita 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