Ein Ei ausbrüten
Lektion 9 von 18 im Kurs Roblox-Spiel: Haustiersimulator von Coddy.
Das weiße Ei in der Nähe des Spawnpunkts hat einen ProximityPrompt: Geh darauf zu und Roblox zeigt „Ausbrüten“ mit einer Taste an, die du gedrückt halten musst (E oder eine Berührung auf einem Smartphone). Wenn der Spieler die Taste lange genug gedrückt hält, löst der Prompt auf dem Server Triggered aus und übergibt den Spieler:
workspace.Egg.ProximityPrompt.Triggered:Connect(function(player)
end)Der Server prüft den Preis, zieht die Münzen ab und gibt ein Haustier. Ein Haustier ist ein StringValue, der seinen Namen enthält, in einem Pets-Ordner im Spieler. Alles, was der Server in einen Spieler einfügt, wird an den Client dieses Spielers repliziert. So weiß die Haustierliste in einer späteren Lektion, was sie anzeigen soll.
Aufgabe
Mittel- Wenn ein Spieler beitritt, gib ihm auch einen Folder namens
Pets. - Schreibe
givePet(player, name): einen StringValue namensPet, dessen Value der Name ist, in den Pets des Spielers; gib ihn zurück. - Verbinde
workspace.Egg.ProximityPrompt.Triggered: Wenn der Spieler weniger Coins alsSettings.EggPricehat, brich ab; andernfalls ziehe den Preis ab, gib ihm eineCatund gibPlayer1 hatched a Cataus (sein Name).
Drücke Play, verdiene 25 Coins und halte E am Ei gedrückt. Dann Check.
Probier es selbst
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)
local remotes = game.ReplicatedStorage.Remotes
local piles = workspace.Piles
local pileSpot = {} -- jeder Stapel -> der Platz, auf dem er steht
local lastHit = {} -- jeder Spieler -> wann er zuletzt zugeschlagen hat
print("A Meadow pile gives " .. Settings.PileValue .. " coins")
-- Jeder Spieler erhält Coins auf der Bestenliste
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local coins = Instance.new("IntValue")
coins.Name = "Coins"
coins.Parent = leaderstats
end)
-- Ein Münzstapel auf einem Platz: eine Kopie von ServerStorage.CoinPile mit seiner Gesundheit
-- und seinem Wert als Attribute
local function spawnPile(spot)
local pile = ServerStorage.CoinPile:Clone()
pile.Position = spot.Position
pile:SetAttribute("MaxHealth", Settings.PileHealth)
pile:SetAttribute("Health", Settings.PileHealth)
pile:SetAttribute("Value", Settings.PileValue)
pile.HealthGui.Label.Text = pile:GetAttribute("Health") .. "/" .. pile:GetAttribute("MaxHealth")
pileSpot[pile] = spot
pile.Parent = piles
return pile
end
-- Ein Treffer verringert die Gesundheit eines Stapels um 1;
-- bei 0 zerbricht der Stapel und zahlt seinen Wert aus
local function hitPile(player, pile)
local health = pile:GetAttribute("Health") - 1
if health > 0 then
pile:SetAttribute("Health", health)
pile.HealthGui.Label.Text = health .. "/" .. pile:GetAttribute("MaxHealth")
return
end
player.leaderstats.Coins.Value += pile:GetAttribute("Value")
local spot = pileSpot[pile]
pileSpot[pile] = nil
pile:Destroy()
-- ein neuer Stapel am selben Platz, ein paar Sekunden später
task.delay(Settings.RespawnTime, spawnPile, spot)
end
-- Ein Stapel auf jedem Platz in der Meadow
for _, spot in workspace.Zones.Meadow.Spawns:GetChildren() do
spawnPile(spot)
end
-- Der Client fordert einen Treffer auf einen Stapel an. Vertraue dem Client niemals: Jeder kann
-- dieses Remote mit beliebigen Daten von überall aus so schnell auslösen, wie er möchte.
remotes.Hit.OnServerEvent:Connect(function(player, pile)
-- ein echter Stapel
if typeof(pile) ~= "Instance" or pile.Parent ~= piles then
return
end
-- in Reichweite
local character = player.Character
local root = character and character:FindFirstChild("HumanoidRootPart")
if not root or (root.Position - pile.Position).Magnitude > Settings.Reach then
return
end
-- nicht zu schnell
local now = time()
if lastHit[player] and now - lastHit[player] < Settings.HitCooldown then
return
end
lastHit[player] = now
hitPile(player, pile)
end)
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Roblox-Spiel: Haustiersimulator
3Eier und Haustiere
Ein Ei ausbrüten