Делаю в роблоксе игру grow a garden по гайдам ютубера @Builder_Beast_YT
Делаю в роблоксе игру grow a garden по гайдам ютубера @Builder_Beast_YT, и не понимаю, почему скрипт работает не корректно. После того, как растение выросло, должна появлятся промиксити промп, и после нажатия растение идет в инвентарь. Но у меня скрипт работает так, что после нажатия кнопки предмет не идет в инвентарь, а остается в грядке. Вот скрипт:
https://pastebin.com/D0Tca6jV
Кто поможет, будет награда ка помощь
Скрипт, который Вы показали, отвечает только за:
1. «Выращивание» модели до финальной стадии
2. Создание `ProximityPrompt`
3. Отслеживание нажатия на prompt и вызов функции `harvestPlant`
…а вот фактическое «убирание» растения с грядки и добавление его-же в инвентарь должны происходить именно внутри функции `harvestPlant`.
Если в этой функции не уничтожается/не перемещается модель, то после нажатия на кнопку она так и останется на грядке ─ ровно то, что Вы сейчас и наблюдаете.
-- PlantHandler.lua или отдельный модуль ─ где Вам удобнее
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- RemoteEvent, через который мы будем сообщать клиенту,
-- что предмет попал в инвентарь (если инвентарь клиент-ский)
local giveItemRemote = ReplicatedStorage:WaitForChild("GiveItem")
local function harvestPlant(player : Player, plantModel : Model, mass : number)
-- 1. Безопасность
if not (player and player.Parent) then
return
end
-- 2. Удаляем запись из таблицы ваших растений
if PlantHandler.Plants[player] then
PlantHandler.Plants[player][plantModel] = nil
end
-- 3. Удаляем растение с грядки
plantModel:Destroy()
-- 4. Кладём предмет в инвентарь
-- (ниже два варианта — выберите подходящий)
------------------------------------------------------------------
-- ВАРИАНТ А. Инвентарь хранится на сервере в виде папки Value-ов
------------------------------------------------------------------
local inventory = player:FindFirstChild("Inventory")
if inventory then
local item = inventory:FindFirstChild(plantModel.Name)
if not item then
item = Instance.new("IntValue")
item.Name = plantModel.Name
item.Parent = inventory
end
item.Value += 1
end
------------------------------------------------------------------
-- ВАРИАНТ B. Инвентарь — чисто клиент-ская GUI-система
-- Тогда сообщаем клиенту RemoteEvent-ом
------------------------------------------------------------------
-- giveItemRemote:FireClient(player, plantModel.Name, 1, mass)
end
Что важно проверить
1. Вы точно вызываете именно эту функцию:
В месте, которое Вы прислали, она вызывается так:
harvestPlant(player, finalStage, mass)
Убедитесь, что `harvestPlant` объявлена ПЕРЕД тем, как Вы её вызываете, или же она находится в том-же модуле и возвращается наружу.
2. Срабатывает ли событие `Triggered`:
Вставьте `print("Harvest pressed")` сразу в начале обработчика:
connection = harvestPrompt.Triggered:Connect(function(playerWhoTriggered)
print("Harvest pressed by", playerWhoTriggered)
...
end)
Если сообщение не выводится в Output, значит prompt находится не там, где надо. Обращаю внимание, что `ProximityPrompt` должен лежать внутри `BasePart` или `Attachment`.
Если шаблон `templates.HarvestPrompt` — это сам `ProximityPrompt`, то родителем ему лучше сделать `finalStage.PrimaryPart` или создать `Attachment`:
local prompt = templates.HarvestPrompt:Clone()
prompt.Parent = finalStage.PrimaryPart -- или attachment внутри него