4.アイテムの売却

次のステップとして、プレイヤーはアイテムを売ってゴールドを手に入れ、増量バッグを購入する必要があります。

販売プラットフォームの作成

プレイヤーは、バッグの中に入っているアイテムを売ることによりゴールドが貰えます。そのためのプラットフォームを作成します。

プラットフォームのセットアップ

プラットフォームはどのようなものでもよく、アイテムとゴールドを交換するスクリプトが含まれます。

  1. SellPlatform という名前の新しいパーツを作成します。ゲームのテーマに合わせてカスタマイズしてください。
  1. SellPlatformに、SellScriptという名前の新しい Script を作成し、コメントを追加してください。
  1. SellScript でlocal SellPart = script.Parentと入力して、SellPlatform パーツを取得します。
-- プレイヤーのアイテムをすべて売却し、ゴールドを獲得することができる
local sellPart = script.Parent

タッチイベントの処理

プラットフォームを利用するためには、プレイヤーが触れたかどうかをチェックするプログラムが必要です。

  1. プレイヤーがプラットフォームに触れているかどうかを確認する onTouch() という名前の関数を作成します。
local function onTouch (partTouched)
    local character = partTouched.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")

    if humanoid then

    end
end
  1. リーダーボードの要素を変更するには、ヒューマノイドを操作しているプレイヤーを知る必要があります。if 文で、GetPlayerFromCharacter() 関数を使用することでプレイヤーが見つけられます。パラメーターはプレイヤーモデルになります。
if humanoid then
    local player = game.Players:GetPlayerFromCharacter(humanoid.Parent)
end
  1. 次の行で、そのプレイヤーの leaderstats コンテナーを取得します。
if humanoid then
    local player = game.Players:GetPlayerFromCharacter(humanoid.Parent)
    -- プレイヤーのリーダーボードを取得
    local playerStats = player:FindFirstChild("leaderstats")
end
  1. 次の行で、プレーヤーのお金とアイテムを取得するための変数を作成します。
if humanoid then
    local player = game.Players:GetPlayerFromCharacter(humanoid.Parent)
    -- プレイヤーのリーダーボードを取得
    local playerStats = player:FindFirstChild("leaderstats")
    -- リーダーボード内の Items と Gold オブジェクトを取得
    local playerItems = playerStats:FindFirstChild("Items")
    local playerGold = playerStats:FindFirstChild("Gold")
end
FindFirstChild()内のすべての名前が、PlayerSetup スクリプトに記述されている名前とまったく同じであることを確認してください。たとえば、PlayerSetup でお金が「Rubies」の場合、playerGold は「Gold」ではなく「Rubies」を探す必要があります。
  1. この関数が呼ばれたかどうかを確認するには、print 文を追加します。
local playerItems = playerStats:FindFirstChild("Items")
local playerGold = playerStats:FindFirstChild("Gold")
print("A player touched sellPart")
  1. スクリプトの最後で、onTouch()を SellPart の Touched イベントに接続します。
local function onTouch (partTouched)
    local character = partTouched.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
        local player = game.Players:GetPlayerFromCharacter(humanoid.Parent)
        -- プレイヤーのリーダーボードを取得
        local playerStats = player:FindFirstChild("leaderstats")
        -- リーダーボード内の Items と Gold オブジェクトを取得
        local playerItems = playerStats:FindFirstChild("Items")
        local playerGold = playerStats:FindFirstChild("Gold")
        print("A player touched sellPart")
    end
end

sellPart.Touched:Connect(onTouch)
  1. テストプレイして、sellPart を実行します。出力ウィンドウに「A Player touched SellPart」というメッセージが表示されたら成功です。

販売アイテム

このゲームでは、プレイヤーは1つのアイテムにつき100ゴールドを手に入れることができます。金貨を手に入れたら、アイテムは0に戻り、プレイヤーは世界を探索して、より多くのアイテムを手に入れることができるようになります。

新しい販売機能のコーディング

  1. sellPart 変数の下に sellItems() という関数を作成します。パラメータは、playerItems と playerGold の2つになります。
-- プレイヤーのアイテムをすべて売却し、ゴールドを獲得することができる
local sellPart = script.Parent

local function sellItems(playerItems, playerGold)

end

local function onTouch (partTouched)
  1. プレイヤーに適切な量のゴールドを与えるには、playerItems の値を取り、それをアイテムごとに受け取るべきゴールドの量で掛け合わせます。この例では、1つのアイテムにつき100ゴールドが与えられます。
local function sellItems(playerItems, playerGold)
  -- プレイヤーが持っているアイテムの数を取得し、それにアイテムの価値を掛けたもの
    local totalSell = playerItems.Value * 100
end
  1. 「playerGold.Value = playerGold.Value + totalSell」と入力して、アイテムのゴールドを現在のゴールドに追加します。
    local totalSell = playerItems.Value * 100
    -- プレイヤーがいくら稼いだかをお金に換算する
    playerGold.Value = playerGold.Value + totalSell
  1. 「playerItems.Value = 0」と入力すると、プレイヤーのアイテムが0に戻ります。プレイヤーのアイテムを0に戻さないと、プログラムはプレイヤーにゴールドを与え続けてしまいます。
    playerGold.Value = playerGold.Value + totalSell
    playerItems.Value = 0
  1. onTouch() 関数の2つ目の if 文で、sellItems() 関数を呼び出します。パラメータに playerItems と playerGold を渡して、変更できるようにします。
if humanoid then
    local player = game.Players:GetPlayerFromCharacter(humanoid.Parent)
    -- プレイヤーのリーダーボードを取得
    local playerStats = player:FindFirstChild("leaderstats")
    -- リーダーボード内の Items と Gold オブジェクトを取得
    local playerItems = playerStats:FindFirstChild("Items")
    local playerGold = playerStats:FindFirstChild("Gold")
    sellItems(playerItems, playerGold)
end
  1. テストプレイして、プレイヤーがプラットフォームを踏むたびに、ゴールドが増え、アイテムが0になることを確認します。

トラブルシューティング

この時点で、アイテムの販売が意図した通りに機能しない場合は次のいずれかを試してください。

  • SellItems()は、プレーヤーのアイテムをチェックする2番目の if ステートメントで呼び出されます。
  • 変更を加える場合、playerItems のようなすべての IntValue は最後に .Value を使用します。1文字目は大文字になります。
  • SellPart.Touched:Connect(onTouch)はスクリプトの最後に入力されます。
  • SellItems(playerItems, playerGold)は、if humanoid then ステートメントの終了前に入力されます。

コメントを残す