出售物品

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

在游戏循环的下一阶段,玩家需要出售物品换取金币,以便他们在背包中购买更多空间。

创建一个销售平台

玩家可以通过站到一个平台上来出售他们背包中的每件物品来获得金币。

设置平台

平台可以是任何部分,并且将包含处理销售的脚本。

  1. 创建一个名为 SellPlatform 的新部分。自定义它以适合您的体验主题。

  2. 在 SellPlatform 中,创建一个名为 SellScript 的新脚本并添加评论。

  3. 在 SellScript 中,输入 local sellPart = script.Parent 以获取 SellPlatform 部分。


    -- 出售玩家所有物品并给予他们金币
    local sellPart = script.Parent

处理触摸事件

要使用平台,脚本需要一个函数来检查是否有玩家触碰它。

  1. 创建一个名为 onTouch() 的函数,检查玩家是否触碰平台。


    local function onTouch(partTouched)
    local character = partTouched.Parent
    end
  2. 要更改排行榜上的任何统计数据,脚本需要知道哪个玩家控制角色。在 if 声明中,使用 GetPlayerFromCharacter() 函数找到一个玩家。


    local Players = game:GetService("Players")
    local player = Players:GetPlayerFromCharacter(character)
  3. 在下一行中,获取该玩家的领导统计容器。


    local Players = game:GetService("Players")
    local player = Players:GetPlayerFromCharacter(character)
    if player then
    -- 获取玩家的排行榜。需要获取物品和金钱
    local playerStats = player:FindFirstChild("leaderstats")
    end
  4. 在下一行中,创建变量以获取玩家的金钱和物品。


    local Players = game:GetService("Players")
    local player = Players:GetPlayerFromCharacter(character)
    if player then
    -- 获取玩家的排行榜。需要获取物品和金钱
    local playerStats = player:FindFirstChild("leaderstats")
    if playerStats then
    -- 获取玩家的物品和金钱
    local playerItems = playerStats:FindFirstChild("Items")
    local playerGold = playerStats:FindFirstChild("Gold")
    end
    end
  5. 要检查您的工作,添加一个会在玩家触碰 sellPart 时运行的打印声明。


    local playerItems = playerStats:FindFirstChild("Items")
    local playerGold = playerStats:FindFirstChild("Gold")
    print("A player touched sellPart")
  6. 在脚本的底部,连接 onTouch() 到 sellPart 的触发事件。


    local Players = game:GetService("Players")
    local function onTouch(partTouched)
    local character = partTouched.Parent
    local player = Players:GetPlayerFromCharacter(character)
    if player then
    -- 获取玩家的排行榜。需要获取物品和金钱
    local playerStats = player:FindFirstChild("leaderstats")
    if playerStats then
    -- 获取玩家的物品和金钱
    local playerItems = playerStats:FindFirstChild("Items")
    local playerGold = playerStats:FindFirstChild("Gold")
    print("A player touched sellPart")
    end
    end
    end
    sellPart.Touched:Connect(onTouch)
  7. 播放您的项目并踩到 sellPart;您应该在输出窗口看到消息 "A Player touched sellPart"

出售物品

在这个体验中,玩家将获得每件物品的 100 金币。获得金钱后,他们的物品将被设置为 0,让玩家探索世界以获取更多物品。

编写新的销售函数

  1. 在变量下,创建一个名为 sellItems() 的函数,该函数获得两个参数名为 playerItemsplayerGold


    -- 出售玩家所有物品并给予他们金币
    local sellPart = script.Parent
    local function sellItems(playerItems, playerGold)
    end
    local function onTouch(partTouched)
  2. 为玩家提供正确数量的黄金,取 playerItems 的值并将其乘以每件物品应得到的黄金数量。这个例子给出每件物品百分之一的金币。

    sellItems() 函数中,输入 local totalSell = playerItems.Value * 100


    local function sellItems(playerItems, playerGold)
    -- 获取玩家拥有的多少物品,并将其乘以物品价值。
    local totalSell = playerItems.Value * 100
    end
  3. 类型 playerGold.Value += totalSell 添加金币到物品的当前金币。


    local function sellItems(playerItems, playerGold)
    local totalSell = playerItems.Value * 100
    -- 将玩家赚取的金额添加到他们的钱中
    playerGold.Value += totalSell
    end
  4. 类型 playerItems.Value = 0 .这将玩家的物品重置为 0。如果玩家的物品没有设置为 0,脚本将继续给玩家提供金币,而不停止。


    local function sellItems(playerItems, playerGold)
    local totalSell = playerItems.Value * 100
    playerGold.Value += totalSell
    playerItems.Value = 0
    end
  5. onTouch() 函数中, 在第二个 if 声明下 ,调用 sellItems() 函数。传递参数,playerItemsplayerGold 以便它们可以更改。


    local Players = game:GetService("Players")
    local player = Players:GetPlayerFromCharacter(character)
    if player then
    -- 获取玩家的排行榜。需要获取物品和金钱
    local playerStats = player:FindFirstChild("leaderstats")
    if playerStats then
    -- 获取玩家的物品和金钱
    local playerItems = playerStats:FindFirstChild("Items")
    local playerGold = playerStats:FindFirstChild("Gold")
    if playerItems and playerGold then
    sellItems(playerItems, playerGold)
    end
    end
    end
  6. 播放你的项目;检查每当玩家踏上平台时,他们的金币会增加并将物品设置为 0。

排除问题的提示

在这一点上,出售物品没有按预期的方式工作,请尝试以下方法之一。

  • sellItems() 在第 调用检查玩家物品的语句。
  • 任何 IntValue,例如 playerItems,在最后使用 .Value 如果你对它进行了更改。值总是大写。
  • sellPart.Touched:Connect(onTouch) 在脚本的 底部 被输入。
  • sellItems(playerItems, playerGold) 在 ifhumanoid 然后声明结束之前被输入。