• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

problem z NPC w roblox studio

0 głosów
103 wizyt
pytanie zadane 3 września w JavaScript przez jakisnoobek Nowicjusz (160 p.)

robie gre na robloxie ze gracz ma jakiegos tycoona kebabow i musi od npctow zarabiac pieniadze (nie umiem programowac wiec uzylem meta ai z whatsappa i ten problem ktory tutaj pokazuje jest jedyny)

mam 3 skrypty:

1 npc podchodzi do lady i losuje swoje zamowienie:

--local npc = script.Parent
local npc = game.Workspace:WaitForChild("NPC")

local humanoid = npc:FindFirstChildOfClass("Humanoid")

local zamowienie = npc:WaitForChild("Zamowienie")

local part1 = workspace:WaitForChild("Part_Zamowienie")

local part2 = workspace:WaitForChild("Part_Wyjscie")




local function idzDo(part)

	humanoid:MoveTo(part.Position)

	humanoid.MoveToFinished:Wait()
end



local function losujZamowienie()

	for _, val in pairs(zamowienie:GetChildren()) do

		if val:IsA("IntValue") then

			val.Value = math.random(1,3) -- 1=wołowina, 2=kurczak itd.

		end

	end

	print("Nowe zamówienie dla ".. npc.Name)
	print("mieso: " ..zamowienie.Mieso.Value)
	print("pita: " ..zamowienie.Pita.Value)
	print("ostrosc: " ..zamowienie.Ostrosc.Value)
	print("sos: " ..zamowienie.Sos.Value)
	print("salata: " ..zamowienie.Salata.Value)
	-- tu możesz wyświetlić GUI nad głową

end



-- START
if npc then
	idzDo(part1)

	losujZamowienie()
	

	-- teraz stoi i czeka, resztę zrobi Part_Submit
	
end

2 part submit w workspace ma skrypt ktory sprawdza czy cos co dotknelo nadaje sie dla npc:

local submit = script.Parent

local part2 = workspace:WaitForChild("Part_Wyjscie")



local function porownaj(npcZam, kebabSklad)

	for _, v in pairs(npcZam:GetChildren()) do

		local kebabVal = kebabSklad:FindFirstChild(v.Name)

		if not kebabVal or kebabVal.Value ~= v.Value then

			return false

		end

	end

	return true

end



submit.Touched:Connect(function(hit)

	local kebab = hit.Parent

	if not kebab:FindFirstChild("Skladniki") then return end

	if kebab:GetAttribute("Oddany") then return end -- żeby nie spamowało

	kebab:SetAttribute("Oddany", true)



	-- znajdź najbliższego NPC który czeka

	local najblizszyNPC = nil

	local minDist = 20

	for _, npc in pairs(workspace:GetChildren()) do

		if npc:FindFirstChild("Zamowienie") and npc:FindFirstChildOfClass("Humanoid") then

			local dist = (npc.HumanoidRootPart.Position - submit.Position).Magnitude

			if dist < minDist then

				minDist = dist

				najblizszyNPC = npc

			end

		end

	end



	if not najblizszyNPC then return end



	local skladniki = kebab:FindFirstChild("Skladniki")

	local zamowienie = najblizszyNPC:FindFirstChild("Zamowienie")



	if porownaj(zamowienie, skladniki) then

		print("Dobre zamówienie!")



		-- daj monety - zakładam że masz leaderstats

		local player = game.Players:GetPlayerFromCharacter(kebab:GetAttribute("Owner")) -- jak zapiszesz właściciela

		-- prostsza wersja: znajdź gracza który dotknął

		local tag = kebab:FindFirstChild("Owner")

		if tag then

			local pl = game.Players:FindFirstChild(tag.Value)

			if pl and pl:FindFirstChild("leaderstats") then

				pl.leaderstats.Coins.Value += 20

			end

		end



		kebab:Destroy()



		-- NPC idzie do wyjścia

		local hum = najblizszyNPC:FindFirstChildOfClass("Humanoid")

		hum:MoveTo(part2.Position)

		task.wait(3)

		najblizszyNPC:Destroy()

	else

		print("Złe zamówienie")

		kebab:SetAttribute("Oddany", false)

	end

end)

i 3 spawner aby nastepne npcty sie zglaszaly:

local ServerStorage = game:GetService("ServerStorage")

local npcFolder = ServerStorage:WaitForChild("NPC") -- tam gdzie trzymasz model NPC

local spawnPart = workspace:WaitForChild("NPCSpawn") -- Part gdzie się respi

local wyjsciePart = workspace:WaitForChild("Part_Wyjscie") -- Part_Wyjscie



local function spawnNPC()
	
	
	local npc = npcFolder:Clone()

	npc.Parent = workspace

	npc.HumanoidRootPart.CFrame = spawnPart.CFrame + Vector3.new(0,3,0)



	-- idzie do wyjścia dopiero jak go obsłużysz

	-- jak chcesz żeby sam wyszedł po czasie:

	task.delay(90, function() -- po 90 sek wychodzi

		if npc.Parent then

			npc.Humanoid:MoveTo(wyjsciePart.Position)

			npc.Humanoid.MoveToFinished:Wait()

			npc:Destroy() -- USUWA



			-- RESPI NOWEGO

			task.wait(2)

			spawnNPC()

		end

	end)



	return npc

end



-- pierwszy spawn

spawnNPC()

a problem jest taki ze pierwszy npc normalnie dobrze dziala ale nastepny nie moze znalezc parta od zamowienia wiec po uplywie ustalonego czasu poprostu idzie do wyjscia i znika i wyskakuje taki blad:

jak ktos moze pomuc ale niedokladnie rozumie to prosze zadac pyatnie.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 829 wizyt
pytanie zadane 12 stycznia 2021 w Inne języki przez Szym510 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 1,597 wizyt
pytanie zadane 3 lutego 2019 w Inne języki przez zkkf56 Dyskutant (8,710 p.)
0 głosów
1 odpowiedź 939 wizyt
pytanie zadane 27 listopada 2024 w Inne języki przez M4jk3l07 Początkujący (310 p.)

93,800 zapytań

142,768 odpowiedzi

323,461 komentarzy

63,421 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...