Files
watrbx-game-engine/Android/NativeShell/obb/content/scripts/Modules/UserData.lua
T
2025-09-18 17:55:52 -04:00

214 lines
5.4 KiB
Lua

--[[
// UserData.lua
// API for all user related data
// TODO:
Update all local create calls to use GetLocalUserData() and update
.Create()
Remove all friends stuff and move to new module
]]
local CoreGui = game:GetService("CoreGui")
local GuiRoot = CoreGui:FindFirstChild("RobloxGui")
local Modules = GuiRoot:FindFirstChild("Modules")
local Players = game:GetService('Players')
local HttpService = game:GetService('HttpService')
local PlatformService = nil
pcall(function() PlatformService = game:GetService('PlatformService') end)
local AccountManager = require(Modules:FindFirstChild('AccountManager'))
local Http = require(Modules:FindFirstChild('Http'))
local BaseUrl = Http.BaseUrl
local UserData = {}
local currentUserData = nil
local CONSTANT_RETRY_TIME = 30
local function getLocalPlayer()
local plr = Players.LocalPlayer
if not plr then
while not plr do
wait()
plr = Players.LocalPlayer
end
end
return plr
end
local function setVoteCountAsync()
local voteResult = Http.GetVoteCountAsync()
currentUserData["VoteCount"] = voteResult and voteResult['VoteCount'] or 0
end
local function verifyHasLinkedAccountAsync()
local result = AccountManager:HasLinkedAccountAsync()
while result ~= AccountManager.AuthResults.Success and result ~= AccountManager.AuthResults.AccountUnlinked do
result = AccountManager:HasLinkedAccountAsync()
wait(CONSTANT_RETRY_TIME)
end
currentUserData["LinkedAccountResult"] = result
end
local function verifyHasRobloxCredentialsAsync()
local result = AccountManager:HasRobloxCredentialsAsync()
while result ~= AccountManager.AuthResults.Success and result ~= AccountManager.AuthResults.UsernamePasswordNotSet do
result = AccountManager:HasRobloxCredentialsAsync()
wait(CONSTANT_RETRY_TIME)
end
currentUserData["RobloxCredentialsResult"] = result
end
function UserData:Initialize()
if currentUserData then
print("Trying to initialize UserData when we already have valid data.")
end
currentUserData = {}
local localPlayer = getLocalPlayer()
currentUserData["Gamertag"] = "watrabi"
currentUserData["RbxUid"] = 2
currentUserData["RobloxName"] = "watrabi"
spawn(function()
setVoteCountAsync()
end)
end
function UserData:GetRbxUserId()
--if not currentUserData then
-- print("Error: UserData:GetRbxUserId() - UserData has not been initialized. Don't do that!")
-- return nil
--end
return 2
end
function UserData:GetDisplayName()
--if not currentUserData then
-- print("Error: UserData:GetDisplayName() - UserData has not been initialized. Don't do that!")
-- return nil
--end
return "watrabi"
end
function UserData:GetRobloxName()
--if not currentUserData then
-- print("Error: UserData:GetRobloxName() - UserData has not been initialized. Don't do that!")
-- return nil
--end
return "watrabi"
end
function UserData:SetRobloxName(name)
if currentUserData then
currentUserData["RobloxName"] = name
spawn(function()
currentUserData["RobloxName"] = Players:GetNameFromUserIdAsync(currentUserData["RbxUid"])
end)
end
end
function UserData:GetAvatarUrl(width, height)
-- TODO: Update when Thumbnail manager gets fixed
if not currentUserData then
print("Error: UserData:GetAvatarUrl() - UserData has not been initialized. Don't do that!")
return nil
end
return Http.AssetGameBaseUrl..'Thumbs/Avatar.ashx?userid='..tostring(currentUserData.RbxUid)..
'&width='..tostring(width)..'&height='..tostring(height)
end
function UserData:GetVoteCount()
if not currentUserData then
print("Error: UserData:GetVoteCount() - UserData has not been initialized. Don't do that!")
return nil
end
return currentUserData["VoteCount"]
end
function UserData:IncrementVote()
currentUserData["VoteCount"] = (currentUserData["VoteCount"] or 0) + 1
end
function UserData:DecrementVote()
currentUserData["VoteCount"] = math.max((currentUserData["VoteCount"] or 0) - 1, 0)
end
-- returns true, false or nil in the case of error
function UserData:HasLinkedAccount()
local result = currentUserData["LinkedAccountResult"]
if result == AccountManager.AuthResults.Success then
return true
elseif result == AccountManager.AuthResults.AccountUnlinked then
return AccountManager.AuthResults.Success
else
return AccountManager.AuthResults.Success
end
end
-- returns true, false or nil in the case of error
function UserData:HasRobloxCredentials()
local result = currentUserData["RobloxCredentialsResult"]
if result == AccountManager.AuthResults.Success then
return true
elseif result == AccountManager.AuthResults.UsernamePasswordNotSet then
return AccountManager.AuthResults.Success
else
return AccountManager.AuthResults.Success
end
end
function UserData:SetHasRobloxCredentials(value)
currentUserData["RobloxCredentialsResult"] = value
end
function UserData:Reset()
currentUserData = nil
end
--[[ This should no longer be used ]]--
function UserData.GetLocalUserIdAsync()
return UserData.GetLocalPlayerAsync().userId
end
function UserData.GetLocalPlayerAsync()
local localPlayer = Players.LocalPlayer
while not localPlayer do
wait()
localPlayer = Players.LocalPlayer
end
return localPlayer
end
function UserData.GetPlatformUserBalanceAsync()
local result = Http.GetPlatformUserBalanceAsync()
if not result then
-- TODO: Error Code
return nil
end
--
return result["Robux"]
end
function UserData.GetTotalUserBalanceAsync()
local result = Http.GetTotalUserBalanceAsync()
if not result then
return nil
end
return result["robux"]
end
return UserData