Else/If Practica con puntos de donación

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

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.

  1. 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 IntValue
    local points = Instance.new("IntValue")
    points.Name = "Points"
    points.Value = 0
    points.Parent = leaderstats
    end
    -- Ejecutar enPlayerJoin cuando el evento PlayerAdded se active
    Players.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.

  1. Crea una parte llamada PointPart con un script adjunto llamado PointScript.

  2. En script, usa script.Parent para hacer referencia a la parte.


    local pointPart = script.Parent
  3. Crea 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
    -- Colores
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255 ,0, 0)
  4. Añade variables para una pequeña cantidad de puntos, una mayor cantidad de puntos y un tercio para eliminar puntos.


    -- Colores
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255 ,0, 0)
    -- Valores de puntos
    local smallPoints = 10
    local largePoints = 50
    local 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.

  1. Obtén el servicio de Jugadores escribiendo:

    local Players = game:GetService("Players")


    -- Valores de puntos
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100
    -- Servicios necesarios
    local 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.

  1. 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 puntos
    local function givePoints(player)
    print("Giving player points")
    end
  2. Bajo eso, crea una segunda función llamada partTouched() con un parámetro llamado otherPart .


    -- Da o resta puntos
    local function givePoints(player)
    print("Giving player points")
    end
    -- Comprueba si el jugador ha tocado la parte
    local function partTouched(otherPart)
    end
  3. Dentro 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 parte
    local function partTouched(otherPart)
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    end
  4. Si 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 parte
    local function partTouched(otherPart)
    -- Obtiene el jugador si uno toca la parte
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
  5. 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.

  1. 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 parte
    local function partTouched(otherPart)
    -- Obtiene el jugador si uno toca la parte
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
    -- Gira a través de los colores
    while true do
    end
  2. Por 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 color
    while true do
    pointPart.Color = blue
    task.wait(3)
    pointPart.Color = green
    task.wait(2)
    pointPart.Color = red
    task.wait(1)
    end
  3. Juega 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.

  1. 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.Color
    end
  2. Para 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.Color
    local playerStats = player:WaitForChild("leaderstats")
    end
  3. Ahora 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.Color
    local 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.

  1. 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.Color
    local playerStats = player:WaitForChild("leaderstats")
    local playerPoints = playerStats:WaitForChild("Points")
    if currentColor == blue then
    playerPoints.Value += smallPoints
    end
    end
  2. Para 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 then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    end
  3. Usa una sentencia else para restar puntos si pointsPart no era ni azul ni verde.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
  4. Finalmente, destruye la parte después de la sentencia if para que el script no pueda seguir dando puntos.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
    pointPart:Destroy()
  5. 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.

  1. 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")
    end
  2. Los 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 parte
    pointPart:Destroy()
    -- Crear partículas
    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
  3. 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.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
  4. 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.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
    task.wait(1)
    particle:Destroy()
  5. 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