Top.Mail.Ru
Ответы

Делаю в роблоксе игру grow a garden по гайдам ютубера @Builder_Beast_YT

Делаю в роблоксе игру grow a garden по гайдам ютубера @Builder_Beast_YT, и не понимаю, почему скрипт работает не корректно. После того, как растение выросло, должна появлятся промиксити промп, и после нажатия растение идет в инвентарь. Но у меня скрипт работает так, что после нажатия кнопки предмет не идет в инвентарь, а остается в грядке. Вот скрипт:
https://pastebin.com/D0Tca6jV
Кто поможет, будет награда ка помощь

По дате
По рейтингу
Аватар пользователя
Просветленный
1мес

Скрипт, который Вы показали, отвечает только за:

1. «Выращивание» модели до финальной стадии
2. Создание `ProximityPrompt`
3. Отслеживание нажатия на prompt и вызов функции `harvestPlant`

…а вот фактическое «убирание» растения с грядки и добавление его-же в инвентарь должны происходить именно внутри функции `harvestPlant`.
Если в этой функции не уничтожается/не перемещается модель, то после нажатия на кнопку она так и останется на грядке ─ ровно то, что Вы сейчас и наблюдаете.

1234567891011121314151617181920212223242526272829303132333435363738394041424344
 -- 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. Вы точно вызываете именно эту функцию:
В месте, которое Вы прислали, она вызывается так:

1
    harvestPlant(player, finalStage, mass)  

Убедитесь, что `harvestPlant` объявлена ПЕРЕД тем, как Вы её вызываете, или же она находится в том-же модуле и возвращается наружу.

2. Срабатывает ли событие `Triggered`:
Вставьте `print("Harvest pressed")` сразу в начале обработчика:

1234
    connection = harvestPrompt.Triggered:Connect(function(playerWhoTriggered) 
       print("Harvest pressed by", playerWhoTriggered) 
       ... 
   end)  

Если сообщение не выводится в Output, значит prompt находится не там, где надо. Обращаю внимание, что `ProximityPrompt` должен лежать внутри `BasePart` или `Attachment`.
Если шаблон `templates.HarvestPrompt` — это сам `ProximityPrompt`, то родителем ему лучше сделать `finalStage.PrimaryPart` или создать `Attachment`:

12
    local prompt = templates.HarvestPrompt:Clone() 
   prompt.Parent = finalStage.PrimaryPart  -- или attachment внутри него