mirror of
https://github.com/copyrighttxt/watrbx-game-engine.git
synced 2026-09-04 20:57:49 +00:00
GEEKING
This commit is contained in:
@@ -0,0 +1,255 @@
|
||||
--[[
|
||||
// GameData.lua
|
||||
|
||||
// Fetches data for a game to be used to fill out
|
||||
// the details of that game
|
||||
]]
|
||||
local CoreGui = Game:GetService("CoreGui")
|
||||
local GuiRoot = CoreGui:FindFirstChild("RobloxGui")
|
||||
local Modules = GuiRoot:FindFirstChild("Modules")
|
||||
|
||||
local Http = require(Modules:FindFirstChild('Http'))
|
||||
local Utility = require(Modules:FindFirstChild('Utility'))
|
||||
|
||||
local UserData = require(Modules:FindFirstChild('UserData'))
|
||||
local ConvertMyPlaceNameInXboxAppFlag = Utility.IsFastFlagEnabled("ConvertMyPlaceNameInXboxApp")
|
||||
|
||||
local GameData = {}
|
||||
|
||||
local gameCreatorCache = {}
|
||||
function GameData:GetGameCreatorAsync(placeId)
|
||||
if placeId then
|
||||
if not gameCreatorCache[placeId] then
|
||||
local gameDataByPlaceId = self:GetGameDataAsync(placeId)
|
||||
gameCreatorCache[placeId] = gameDataByPlaceId:GetCreatorName()
|
||||
end
|
||||
return gameCreatorCache[placeId]
|
||||
end
|
||||
end
|
||||
|
||||
function GameData:ExtractGeneratedUsername(gameName)
|
||||
local tempUsername = string.match(gameName, "^([0-9a-fA-F]+)'s Place$")
|
||||
if tempUsername and #tempUsername == 32 then
|
||||
return tempUsername
|
||||
end
|
||||
end
|
||||
|
||||
-- Fix places that have been made with incorrect temporary usernames
|
||||
-- creatorName is optional and must be used when querying a game that is
|
||||
-- not the current user's creation
|
||||
function GameData:GetFilteredGameName(gameName, creatorName)
|
||||
if ConvertMyPlaceNameInXboxAppFlag and gameName and type(gameName) == 'string' then
|
||||
local tempUsername = self:ExtractGeneratedUsername(gameName)
|
||||
if tempUsername then
|
||||
local realUsername = creatorName or UserData:GetRobloxName()
|
||||
if realUsername then
|
||||
local newGameName = string.gsub(gameName, tempUsername, realUsername, 1)
|
||||
if newGameName then
|
||||
return newGameName
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return gameName
|
||||
end
|
||||
|
||||
function GameData:GetGameDataAsync(placeId)
|
||||
local this = {}
|
||||
|
||||
local result = Http.GetGameDetailsAsync(placeId)
|
||||
if not result then
|
||||
print("GameData:GetGameDataAsync() failed to get web response for placeId "..tostring(placeId))
|
||||
result = {}
|
||||
end
|
||||
|
||||
this.Data = result
|
||||
|
||||
--[[ Public API ]]--
|
||||
function this:GetCreatorName()
|
||||
return self.Data["Builder"] or ""
|
||||
end
|
||||
function this:GetDescription()
|
||||
return self.Data["Description"] or ""
|
||||
end
|
||||
function this:GetIsFavoritedByUser()
|
||||
return self.Data["IsFavoritedByUser"] or false
|
||||
end
|
||||
function this:GetLastUpdated()
|
||||
return self.Data["Updated"] or ""
|
||||
end
|
||||
function this:GetCreationDate()
|
||||
return self.Data["Created"] or ""
|
||||
end
|
||||
function this:GetMaxPlayers()
|
||||
return self.Data["MaxPlayers"] or 0
|
||||
end
|
||||
function this:GetOverridesDefaultAvatar()
|
||||
return self.Data["OverridesDefaultAvatar"] or false
|
||||
end
|
||||
function this:GetCreatorUserId()
|
||||
return self.Data["BuilderId"]
|
||||
end
|
||||
|
||||
--[[ Async Public API ]]--
|
||||
function this:GetVoteDataAsync()
|
||||
local result = Http.GetGameVotesAsync(placeId)
|
||||
if not result then
|
||||
print("GameData:GetVoteDataAsync() failed to get web response for placeId "..tostring(placeId))
|
||||
end
|
||||
|
||||
local voteData = {}
|
||||
local voteTable = result and result["VotingModel"] or nil
|
||||
|
||||
if voteTable then
|
||||
voteData.UpVotes = voteTable["UpVotes"] or 0
|
||||
voteData.DownVotes = voteTable["DownVotes"] or 0
|
||||
voteData.UserVote = voteTable["UserVote"] or nil
|
||||
voteData.CanVote = voteTable["CanVote"] or false
|
||||
voteData.CantVoteReason = voteTable["ReasonForNotVoteable"] or "PlayGame"
|
||||
end
|
||||
|
||||
return voteData
|
||||
end
|
||||
|
||||
function this:GetGameIconIdAsync()
|
||||
local iconId = nil
|
||||
local result = Http.GetGameIconIdAsync(placeId)
|
||||
if result then
|
||||
iconId = result["ImageId"]
|
||||
-- use placeId as backup
|
||||
if not iconId then
|
||||
iconId = placeId
|
||||
end
|
||||
end
|
||||
|
||||
return iconId
|
||||
end
|
||||
|
||||
function this:GetRecommendedGamesAsync()
|
||||
local result = Http.GetRecommendedGamesAsync(placeId)
|
||||
if not result then
|
||||
print("GameData:GetRecommendedGamesAsync() failed to get web response for placeId "..tostring(placeId))
|
||||
return {}
|
||||
end
|
||||
|
||||
local recommendedGames = {}
|
||||
for i = 1, #result do
|
||||
local data = result[i]
|
||||
if data then
|
||||
local game = {}
|
||||
-- Temp fix for fixing game names
|
||||
game.Name = GameData:GetFilteredGameName(data["GameName"], data["Creator"] and data["Creator"]["CreatorName"])
|
||||
game.PlaceId = data["PlaceId"]
|
||||
game.IconId = data["ImageId"]
|
||||
table.insert(recommendedGames, game)
|
||||
end
|
||||
end
|
||||
|
||||
return recommendedGames
|
||||
end
|
||||
|
||||
function this:GetThumbnailIdsAsync()
|
||||
local result = Http.GetGameThumbnailsAsync(placeId)
|
||||
if not result then
|
||||
print("GameData:GetThumbnailIdsAsync() failed to get web response for placeId "..tostring(placeId))
|
||||
return {}
|
||||
end
|
||||
|
||||
local thumbIds = {}
|
||||
local thumbIdTable = result["thumbnails"]
|
||||
if thumbIdTable then
|
||||
for i = 1, #thumbIdTable do
|
||||
local data = thumbIdTable[i]
|
||||
-- AssetTypeId of 1 is a Image (33 is a video if can ever play videos)
|
||||
if data and data["AssetTypeId"] == 1 then
|
||||
local assetId = data["AssetId"]
|
||||
if assetId then
|
||||
table.insert(thumbIds, assetId)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return thumbIds
|
||||
end
|
||||
|
||||
function this:GetBadgeDataAsync()
|
||||
local result = Http.GetGameBadgeDataAsync(placeId)
|
||||
if not result then
|
||||
print("GameData:GetBadgeDataAsync() failed to get web response for placeId "..tostring(placeId))
|
||||
return {}
|
||||
end
|
||||
|
||||
local badgeData = {}
|
||||
local badgeTable = result["GameBadges"]
|
||||
if badgeTable then
|
||||
for i = 1, #badgeTable do
|
||||
local data = badgeTable[i]
|
||||
if data then
|
||||
local badge = {}
|
||||
badge.Name = data["Name"]
|
||||
badge.Description = data["Description"]
|
||||
badge.AssetId = data["BadgeAssetId"]
|
||||
badge.IsOwned = data["IsOwned"]
|
||||
badge.Order = i
|
||||
table.insert(badgeData, badge)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
table.sort(badgeData, function(a, b)
|
||||
if a["IsOwned"] == true and b["IsOwned"] == true then
|
||||
return a.Order < b.Order
|
||||
elseif a["IsOwned"] then
|
||||
return true
|
||||
elseif b["IsOwned"] then
|
||||
return false
|
||||
end
|
||||
return a.Order < b.Order
|
||||
end)
|
||||
|
||||
return badgeData
|
||||
end
|
||||
|
||||
--[[ Post Public API ]]--
|
||||
function this:PostFavoriteAsync()
|
||||
local result = Http.PostFavoriteToggleAsync(placeId)
|
||||
local success = result and result["success"] == true
|
||||
if not success then
|
||||
local reason = "Failed"
|
||||
-- the floodcheck message is "Whoa. Slow Down.". So if there is a message,
|
||||
-- let's just say flood check?
|
||||
if result and result["message"] then
|
||||
reason = "FloodCheck"
|
||||
end
|
||||
return success, reason
|
||||
else
|
||||
self.Data["IsFavoritedByUser"] = not self:GetIsFavoritedByUser()
|
||||
end
|
||||
|
||||
return success
|
||||
end
|
||||
|
||||
function this:PostVoteAsync(status)
|
||||
local result = Http.PostGameVoteAsync(placeId, status)
|
||||
if not result then
|
||||
return nil
|
||||
end
|
||||
|
||||
local success = result["Success"] == true
|
||||
if not success then
|
||||
return success, result["ModalType"]
|
||||
end
|
||||
|
||||
return success
|
||||
end
|
||||
|
||||
-- Temp fix for fixing game names
|
||||
if this.Data then
|
||||
this.Data.Name = GameData:GetFilteredGameName(this.Data.Name, this:GetCreatorName())
|
||||
end
|
||||
|
||||
return this
|
||||
end
|
||||
|
||||
return GameData
|
||||
Reference in New Issue
Block a user