--클라이언트 스크립트에서
ProductList = nil -- 상품 정보를 가져올 변수
----------------------------------------------------------------------------------------
--특정 상품 정보 출력
local function PrintProductData(productData)
local productID = productData.ID --상품 ID
local productName = productData.Name --상품 이름
local productType = productData.ProductType --상품 종류
local productDesc = productData.Comment --상품 설명
local priceType = productData.PriceType --상품 가격 타입
local productPrice = productData.Price --상품 가격
local productImageURL = productData.ImageURL --상품 이미지
print("productID", productID, "productName", productName, "productDesc", productDesc)
if productType == Enum.ProductType.Ticket then
print("productType", "이용권")
elseif productType == Enum.ProductType.Expendables then
print("productType", "소모품")
end
if priceType == Enum.PriceType.DitoCredit then
print("priceType", "크레딧", "productPrice", productPrice)
end
print("productImageURL", productImageURL)
print("--------------------------------------------")
end
----------------------------------------------------------------------------------------
--모든 상품 정보 가져오기
--(GetProductList 함수는 OnEnterPlayer나 OnSpawnCharacter가 아닌 UI 활성화시 같은 특정 시점에서 호출해야 해요.)
--(활성화된 상품 수가 많으면 반환이 늦을 수 있어요.)
local function RefreshProductList(self)
ProductList = Marketplace:GetProductList()
print("공개 상태의 상품 수 : ", #ProductList)
for i = 1, #ProductList do
local productData = ProductList[i]
PrintProductData(productData)
end
end
Workspace.ShopUI.ShopOpenButton.OnPressEvent:Connect(RefreshProductList)
--클라이언트 스크립트에서
----------------------------------------------------------------------------------------
--상품 구매 버튼 클릭시 상품 ID로 구매를 요청해요.
local function ClickPurchaseButton(self)
local productID = productData.ID
--OpenConfirmPopup 함수로 특정 상품의 구매 창을 출력해요.
Marketplace:OpenConfirmPopup(productID)
end
productButton.OnPressEvent:Connect(ClickPurchaseButton)
--클라이언트 스크립트에서
----------------------------------------------------------------------------------------
--상품 구매 처리 후
local function BindDoneEvent(buyEventData, flag)
local player = LocalPlayer:GetRemotePlayer()
local productID = buyEventData.ID --구매 시도한 상품의 ID
--구매 성공시
if flag == 1 then
print(player.Name .. " " .. productID .. " 구매 성공!")
--실제 지급 처리는 Server에서
--충전 필요시
elseif flag == 2 then
print(player.Name .. " " .. productID .. " 충전 필요!")
--중복 구매 또는 기타 이유
elseif flag == 3 then
print(player.Name .. " " .. productID .. " 중복 또는 기타 사유로 구매 실패!")
end
end
Marketplace.OnBuyDoneEvent:Connect(BindDoneEvent)
--서버 스크립트에서
----------------------------------------------------------------------------------------
--상품 구매 처리 후
local function BindDoneEvent(player, buyEventData, flag)
local productID = buyEventData.ID --구매 시도한 상품의 ID
--구매 성공시
if flag == 1 then
print(player.Name .. " " .. productID .. " 구매 성공!")
--충전 필요시
elseif flag == 2 then
print(player.Name .. " " .. productID .. " 충전 필요!")
--중복 구매 또는 기타 이유
elseif flag == 3 then
print(player.Name .. " " .. productID .. " 중복 또는 기타 사유로 구매 실패!")
end
end
Marketplace.OnBuyDoneEvent:Connect(BindDoneEvent)
--서버 스크립트에서
----------------------------------------------------------------------------------------
--상품 구매 처리 후
local function BindDoneEvent(player, buyEventData, flag)
local productID = buyEventData.ID --구매 시도한 상품의 ID
local playerID = player:GetPlayerID()
--구매 성공시
if flag == 1 then
print(player.Name .. " " .. productID .. " 구매 성공!")
-- 상품 번호 1234_1가 Coin 200개 구매 상품일 때
if productID = "1234_1" then
--'Coin' 상품에 대한 구매 처리
local saveKey = "Coin"
local addValue = 200
local saveValue = player.Coin + addValue
--지급 처리와 함께 유저데이터 저장을 처리해요.
Marketplace:SaveUserProductData(playerID, saveKey, saveValue, buyEventData)
player.Coin = saveValue
print(player.Name .. " " .. productID .. " 지급 처리 완료!")
end
end
end
Marketplace.OnBuyDoneEvent:Connect(BindDoneEvent)
----------------------------------------------------------------------------------------
--'Coin' 재화 불러오기
local function LoadPlayerData(player)
local playerID = player:GetPlayerID()
--유저 데이터 불러오기
local saveKey = "Coin"
local loadValue = Game:GetSavedUserGameData(playerID, saveKey)
--불러올 데이터가 없으면
if loadValue == nil then
loadValue = 0
Game:SaveUserGameData(playerID, saveKey, loadValue) --초기값 저장
end
player.Coin = loadValue
end
Game.OnEnterPlayer:Connect(LoadPlayerData)